var __defProp$1 = Object.defineProperty; var __exportAll = (all, no_symbols) => { let target = {}; for (var name in all) __defProp$1(target, name, { get: all[name], enumerable: true, }); if (!no_symbols) __defProp$1(target, Symbol.toStringTag, { value: "Module" }); return target; }; /** * @license * Copyright 2019 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const t$6 = globalThis, e$13 = t$6.ShadowRoot && (void 0 === t$6.ShadyCSS || t$6.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, s$8 = Symbol(), o$14 = /* @__PURE__ */ new WeakMap(); var n$12 = class { constructor(t, e, o) { if (((this._$cssResult$ = !0), o !== s$8)) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead."); ((this.cssText = t), (this.t = e)); } get styleSheet() { let t = this.o; const s = this.t; if (e$13 && void 0 === t) { const e = void 0 !== s && 1 === s.length; (e && (t = o$14.get(s)), void 0 === t && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), e && o$14.set(s, t))); } return t; } toString() { return this.cssText; } }; const r$11 = (t) => new n$12("string" == typeof t ? t : t + "", void 0, s$8), i$9 = (t, ...e) => { return new n$12( 1 === t.length ? t[0] : e.reduce( (e, s, o) => e + ((t) => { if (!0 === t._$cssResult$) return t.cssText; if ("number" == typeof t) return t; throw Error( "Value passed to 'css' function must be a 'css' function result: " + t + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.", ); })(s) + t[o + 1], t[0], ), t, s$8, ); }, S$1 = (s, o) => { if (e$13) s.adoptedStyleSheets = o.map((t) => (t instanceof CSSStyleSheet ? t : t.styleSheet)); else for (const e of o) { const o = document.createElement("style"), n = t$6.litNonce; (void 0 !== n && o.setAttribute("nonce", n), (o.textContent = e.cssText), s.appendChild(o)); } }, c$6 = e$13 ? (t) => t : (t) => t instanceof CSSStyleSheet ? ((t) => { let e = ""; for (const s of t.cssRules) e += s.cssText; return r$11(e); })(t) : t; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const { is: i$8, defineProperty: e$12, getOwnPropertyDescriptor: h$6, getOwnPropertyNames: r$10, getOwnPropertySymbols: o$13, getPrototypeOf: n$11, } = Object, a$1 = globalThis, c$5 = a$1.trustedTypes, l$4 = c$5 ? c$5.emptyScript : "", p$2 = a$1.reactiveElementPolyfillSupport, d$2 = (t, s) => t, u$3 = { toAttribute(t, s) { switch (s) { case Boolean: t = t ? l$4 : null; break; case Object: case Array: t = null == t ? t : JSON.stringify(t); } return t; }, fromAttribute(t, s) { let i = t; switch (s) { case Boolean: i = null !== t; break; case Number: i = null === t ? null : Number(t); break; case Object: case Array: try { i = JSON.parse(t); } catch (t) { i = null; } } return i; }, }, f$3 = (t, s) => !i$8(t, s), b$1 = { attribute: !0, type: String, converter: u$3, reflect: !1, useDefault: !1, hasChanged: f$3, }; ((Symbol.metadata ??= Symbol("metadata")), (a$1.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap())); var y$1 = class extends HTMLElement { static addInitializer(t) { (this._$Ei(), (this.l ??= []).push(t)); } static get observedAttributes() { return (this.finalize(), this._$Eh && [...this._$Eh.keys()]); } static createProperty(t, s = b$1) { if ( (s.state && (s.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(t) && ((s = Object.create(s)).wrapped = !0), this.elementProperties.set(t, s), !s.noAccessor) ) { const i = Symbol(), h = this.getPropertyDescriptor(t, i, s); void 0 !== h && e$12(this.prototype, t, h); } } static getPropertyDescriptor(t, s, i) { const { get: e, set: r } = h$6(this.prototype, t) ?? { get() { return this[s]; }, set(t) { this[s] = t; }, }; return { get: e, set(s) { const h = e?.call(this); (r?.call(this, s), this.requestUpdate(t, h, i)); }, configurable: !0, enumerable: !0, }; } static getPropertyOptions(t) { return this.elementProperties.get(t) ?? b$1; } static _$Ei() { if (this.hasOwnProperty(d$2("elementProperties"))) return; const t = n$11(this); (t.finalize(), void 0 !== t.l && (this.l = [...t.l]), (this.elementProperties = new Map(t.elementProperties))); } static finalize() { if (this.hasOwnProperty(d$2("finalized"))) return; if (((this.finalized = !0), this._$Ei(), this.hasOwnProperty(d$2("properties")))) { const t = this.properties, s = [...r$10(t), ...o$13(t)]; for (const i of s) this.createProperty(i, t[i]); } const t = this[Symbol.metadata]; if (null !== t) { const s = litPropertyMetadata.get(t); if (void 0 !== s) for (const [t, i] of s) this.elementProperties.set(t, i); } this._$Eh = /* @__PURE__ */ new Map(); for (const [t, s] of this.elementProperties) { const i = this._$Eu(t, s); void 0 !== i && this._$Eh.set(i, t); } this.elementStyles = this.finalizeStyles(this.styles); } static finalizeStyles(s) { const i = []; if (Array.isArray(s)) { const e = new Set(s.flat(Infinity).reverse()); for (const s of e) i.unshift(c$6(s)); } else void 0 !== s && i.push(c$6(s)); return i; } static _$Eu(t, s) { const i = s.attribute; return !1 === i ? void 0 : "string" == typeof i ? i : "string" == typeof t ? t.toLowerCase() : void 0; } constructor() { (super(), (this._$Ep = void 0), (this.isUpdatePending = !1), (this.hasUpdated = !1), (this._$Em = null), this._$Ev()); } _$Ev() { ((this._$ES = new Promise((t) => (this.enableUpdating = t))), (this._$AL = /* @__PURE__ */ new Map()), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach((t) => t(this))); } addController(t) { ((this._$EO ??= /* @__PURE__ */ new Set()).add(t), void 0 !== this.renderRoot && this.isConnected && t.hostConnected?.()); } removeController(t) { this._$EO?.delete(t); } _$E_() { const t = /* @__PURE__ */ new Map(), s = this.constructor.elementProperties; for (const i of s.keys()) this.hasOwnProperty(i) && (t.set(i, this[i]), delete this[i]); t.size > 0 && (this._$Ep = t); } createRenderRoot() { const t = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions); return (S$1(t, this.constructor.elementStyles), t); } connectedCallback() { ((this.renderRoot ??= this.createRenderRoot()), this.enableUpdating(!0), this._$EO?.forEach((t) => t.hostConnected?.())); } enableUpdating(t) {} disconnectedCallback() { this._$EO?.forEach((t) => t.hostDisconnected?.()); } attributeChangedCallback(t, s, i) { this._$AK(t, i); } _$ET(t, s) { const i = this.constructor.elementProperties.get(t), e = this.constructor._$Eu(t, i); if (void 0 !== e && !0 === i.reflect) { const h = (void 0 !== i.converter?.toAttribute ? i.converter : u$3).toAttribute(s, i.type); ((this._$Em = t), null == h ? this.removeAttribute(e) : this.setAttribute(e, h), (this._$Em = null)); } } _$AK(t, s) { const i = this.constructor, e = i._$Eh.get(t); if (void 0 !== e && this._$Em !== e) { const t = i.getPropertyOptions(e), h = "function" == typeof t.converter ? { fromAttribute: t.converter } : void 0 !== t.converter?.fromAttribute ? t.converter : u$3; this._$Em = e; const r = h.fromAttribute(s, t.type); ((this[e] = r ?? this._$Ej?.get(e) ?? r), (this._$Em = null)); } } requestUpdate(t, s, i, e = !1, h) { if (void 0 !== t) { const r = this.constructor; if ( (!1 === e && (h = this[t]), (i ??= r.getPropertyOptions(t)), !( (i.hasChanged ?? f$3)(h, s) || (i.useDefault && i.reflect && h === this._$Ej?.get(t) && !this.hasAttribute(r._$Eu(t, i))) )) ) return; this.C(t, s, i); } !1 === this.isUpdatePending && (this._$ES = this._$EP()); } C(t, s, { useDefault: i, reflect: e, wrapped: h }, r) { (i && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, r ?? s ?? this[t]), !0 !== h || void 0 !== r)) || (this._$AL.has(t) || (this.hasUpdated || i || (s = void 0), this._$AL.set(t, s)), !0 === e && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t)); } async _$EP() { this.isUpdatePending = !0; try { await this._$ES; } catch (t) { Promise.reject(t); } const t = this.scheduleUpdate(); return (null != t && (await t), !this.isUpdatePending); } scheduleUpdate() { return this.performUpdate(); } performUpdate() { if (!this.isUpdatePending) return; if (!this.hasUpdated) { if (((this.renderRoot ??= this.createRenderRoot()), this._$Ep)) { for (const [t, s] of this._$Ep) this[t] = s; this._$Ep = void 0; } const t = this.constructor.elementProperties; if (t.size > 0) for (const [s, i] of t) { const { wrapped: t } = i, e = this[s]; !0 !== t || this._$AL.has(s) || void 0 === e || this.C(s, void 0, i, e); } } let t = !1; const s = this._$AL; try { ((t = this.shouldUpdate(s)), t ? (this.willUpdate(s), this._$EO?.forEach((t) => t.hostUpdate?.()), this.update(s)) : this._$EM()); } catch (s) { throw ((t = !1), this._$EM(), s); } t && this._$AE(s); } willUpdate(t) {} _$AE(t) { (this._$EO?.forEach((t) => t.hostUpdated?.()), this.hasUpdated || ((this.hasUpdated = !0), this.firstUpdated(t)), this.updated(t)); } _$EM() { ((this._$AL = /* @__PURE__ */ new Map()), (this.isUpdatePending = !1)); } get updateComplete() { return this.getUpdateComplete(); } getUpdateComplete() { return this._$ES; } shouldUpdate(t) { return !0; } update(t) { ((this._$Eq &&= this._$Eq.forEach((t) => this._$ET(t, this[t]))), this._$EM()); } updated(t) {} firstUpdated(t) {} }; ((y$1.elementStyles = []), (y$1.shadowRootOptions = { mode: "open" }), (y$1[d$2("elementProperties")] = /* @__PURE__ */ new Map()), (y$1[d$2("finalized")] = /* @__PURE__ */ new Map()), p$2?.({ ReactiveElement: y$1 }), (a$1.reactiveElementVersions ??= []).push("2.1.2")); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const t$5 = globalThis, i$7 = (t) => t, s$7 = t$5.trustedTypes, e$11 = s$7 ? s$7.createPolicy("lit-html", { createHTML: (t) => t }) : void 0, h$5 = "$lit$", o$12 = `lit$${Math.random().toFixed(9).slice(2)}$`, n$10 = "?" + o$12, r$9 = `<${n$10}>`, l$3 = document, c$4 = () => l$3.createComment(""), a = (t) => null === t || ("object" != typeof t && "function" != typeof t), u$2 = Array.isArray, d$1 = (t) => u$2(t) || "function" == typeof t?.[Symbol.iterator], f$2 = "[ \n\f\r]", v$1 = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, _ = /-->/g, m$2 = />/g, p$1 = RegExp(`>|${f$2}(?:([^\\s"'>=/]+)(${f$2}*=${f$2}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`, "g"), g = /'/g, $ = /"/g, y = /^(?:script|style|textarea|title)$/i, x = (t) => (i, ...s) => ({ _$litType$: t, strings: i, values: s, }), b = x(1), w = x(2); x(3); const E = Symbol.for("lit-noChange"), A = Symbol.for("lit-nothing"), C = /* @__PURE__ */ new WeakMap(), P = l$3.createTreeWalker(l$3, 129); function V(t, i) { if (!u$2(t) || !t.hasOwnProperty("raw")) throw Error("invalid template strings array"); return void 0 !== e$11 ? e$11.createHTML(i) : i; } const N = (t, i) => { const s = t.length - 1, e = []; let n, l = 2 === i ? "" : 3 === i ? "" : "", c = v$1; for (let i = 0; i < s; i++) { const s = t[i]; let a, u, d = -1, f = 0; for (; f < s.length && ((c.lastIndex = f), (u = c.exec(s)), null !== u); ) ((f = c.lastIndex), c === v$1 ? "!--" === u[1] ? (c = _) : void 0 !== u[1] ? (c = m$2) : void 0 !== u[2] ? (y.test(u[2]) && (n = RegExp("" === u[0] ? ((c = n ?? v$1), (d = -1)) : void 0 === u[1] ? (d = -2) : ((d = c.lastIndex - u[2].length), (a = u[1]), (c = void 0 === u[3] ? p$1 : '"' === u[3] ? $ : g)) : c === $ || c === g ? (c = p$1) : c === _ || c === m$2 ? (c = v$1) : ((c = p$1), (n = void 0))); const x = c === p$1 && t[i + 1].startsWith("/>") ? " " : ""; l += c === v$1 ? s + r$9 : d >= 0 ? (e.push(a), s.slice(0, d) + h$5 + s.slice(d) + o$12 + x) : s + o$12 + (-2 === d ? i : x); } return [V(t, l + (t[s] || "") + (2 === i ? "" : 3 === i ? "" : "")), e]; }; var S = class S { constructor({ strings: t, _$litType$: i }, e) { let r; this.parts = []; let l = 0, a = 0; const u = t.length - 1, d = this.parts, [f, v] = N(t, i); if ( ((this.el = S.createElement(f, e)), (P.currentNode = this.el.content), 2 === i || 3 === i) ) { const t = this.el.content.firstChild; t.replaceWith(...t.childNodes); } for (; null !== (r = P.nextNode()) && d.length < u; ) { if (1 === r.nodeType) { if (r.hasAttributes()) for (const t of r.getAttributeNames()) if (t.endsWith(h$5)) { const i = v[a++], s = r.getAttribute(t).split(o$12), e = /([.?@])?(.*)/.exec(i); (d.push({ type: 1, index: l, name: e[2], strings: s, ctor: "." === e[1] ? I : "?" === e[1] ? L : "@" === e[1] ? z : H, }), r.removeAttribute(t)); } else t.startsWith(o$12) && (d.push({ type: 6, index: l, }), r.removeAttribute(t)); if (y.test(r.tagName)) { const t = r.textContent.split(o$12), i = t.length - 1; if (i > 0) { r.textContent = s$7 ? s$7.emptyScript : ""; for (let s = 0; s < i; s++) (r.append(t[s], c$4()), P.nextNode(), d.push({ type: 2, index: ++l, })); r.append(t[i], c$4()); } } } else if (8 === r.nodeType) if (r.data === n$10) d.push({ type: 2, index: l, }); else { let t = -1; for (; -1 !== (t = r.data.indexOf(o$12, t + 1)); ) (d.push({ type: 7, index: l, }), (t += o$12.length - 1)); } l++; } } static createElement(t, i) { const s = l$3.createElement("template"); return ((s.innerHTML = t), s); } }; function M$1(t, i, s = t, e) { if (i === E) return i; let h = void 0 !== e ? s._$Co?.[e] : s._$Cl; const o = a(i) ? void 0 : i._$litDirective$; return ( h?.constructor !== o && (h?._$AO?.(!1), void 0 === o ? (h = void 0) : ((h = new o(t)), h._$AT(t, s, e)), void 0 !== e ? ((s._$Co ??= [])[e] = h) : (s._$Cl = h)), void 0 !== h && (i = M$1(t, h._$AS(t, i.values), h, e)), i ); } var R = class { constructor(t, i) { ((this._$AV = []), (this._$AN = void 0), (this._$AD = t), (this._$AM = i)); } get parentNode() { return this._$AM.parentNode; } get _$AU() { return this._$AM._$AU; } u(t) { const { el: { content: i }, parts: s, } = this._$AD, e = (t?.creationScope ?? l$3).importNode(i, !0); P.currentNode = e; let h = P.nextNode(), o = 0, n = 0, r = s[0]; for (; void 0 !== r; ) { if (o === r.index) { let i; (2 === r.type ? (i = new k(h, h.nextSibling, this, t)) : 1 === r.type ? (i = new r.ctor(h, r.name, r.strings, this, t)) : 6 === r.type && (i = new Z(h, this, t)), this._$AV.push(i), (r = s[++n])); } o !== r?.index && ((h = P.nextNode()), o++); } return ((P.currentNode = l$3), e); } p(t) { let i = 0; for (const s of this._$AV) (void 0 !== s && (void 0 !== s.strings ? (s._$AI(t, s, i), (i += s.strings.length - 2)) : s._$AI(t[i])), i++); } }; var k = class k { get _$AU() { return this._$AM?._$AU ?? this._$Cv; } constructor(t, i, s, e) { ((this.type = 2), (this._$AH = A), (this._$AN = void 0), (this._$AA = t), (this._$AB = i), (this._$AM = s), (this.options = e), (this._$Cv = e?.isConnected ?? !0)); } get parentNode() { let t = this._$AA.parentNode; const i = this._$AM; return (void 0 !== i && 11 === t?.nodeType && (t = i.parentNode), t); } get startNode() { return this._$AA; } get endNode() { return this._$AB; } _$AI(t, i = this) { ((t = M$1(this, t, i)), a(t) ? t === A || null == t || "" === t ? (this._$AH !== A && this._$AR(), (this._$AH = A)) : t !== this._$AH && t !== E && this._(t) : void 0 !== t._$litType$ ? this.$(t) : void 0 !== t.nodeType ? this.T(t) : d$1(t) ? this.k(t) : this._(t)); } O(t) { return this._$AA.parentNode.insertBefore(t, this._$AB); } T(t) { this._$AH !== t && (this._$AR(), (this._$AH = this.O(t))); } _(t) { (this._$AH !== A && a(this._$AH) ? (this._$AA.nextSibling.data = t) : this.T(l$3.createTextNode(t)), (this._$AH = t)); } $(t) { const { values: i, _$litType$: s } = t, e = "number" == typeof s ? this._$AC(t) : (void 0 === s.el && (s.el = S.createElement(V(s.h, s.h[0]), this.options)), s); if (this._$AH?._$AD === e) this._$AH.p(i); else { const t = new R(e, this), s = t.u(this.options); (t.p(i), this.T(s), (this._$AH = t)); } } _$AC(t) { let i = C.get(t.strings); return (void 0 === i && C.set(t.strings, (i = new S(t))), i); } k(t) { u$2(this._$AH) || ((this._$AH = []), this._$AR()); const i = this._$AH; let s, e = 0; for (const h of t) (e === i.length ? i.push((s = new k(this.O(c$4()), this.O(c$4()), this, this.options))) : (s = i[e]), s._$AI(h), e++); e < i.length && (this._$AR(s && s._$AB.nextSibling, e), (i.length = e)); } _$AR(t = this._$AA.nextSibling, s) { for (this._$AP?.(!1, !0, s); t !== this._$AB; ) { const s = i$7(t).nextSibling; (i$7(t).remove(), (t = s)); } } setConnected(t) { void 0 === this._$AM && ((this._$Cv = t), this._$AP?.(t)); } }; var H = class { get tagName() { return this.element.tagName; } get _$AU() { return this._$AM._$AU; } constructor(t, i, s, e, h) { ((this.type = 1), (this._$AH = A), (this._$AN = void 0), (this.element = t), (this.name = i), (this._$AM = e), (this.options = h), s.length > 2 || "" !== s[0] || "" !== s[1] ? ((this._$AH = Array(s.length - 1).fill(/* @__PURE__ */ new String())), (this.strings = s)) : (this._$AH = A)); } _$AI(t, i = this, s, e) { const h = this.strings; let o = !1; if (void 0 === h) ((t = M$1(this, t, i, 0)), (o = !a(t) || (t !== this._$AH && t !== E)), o && (this._$AH = t)); else { const e = t; let n, r; for (t = h[0], n = 0; n < h.length - 1; n++) ((r = M$1(this, e[s + n], i, n)), r === E && (r = this._$AH[n]), (o ||= !a(r) || r !== this._$AH[n]), r === A ? (t = A) : t !== A && (t += (r ?? "") + h[n + 1]), (this._$AH[n] = r)); } o && !e && this.j(t); } j(t) { t === A ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? ""); } }; var I = class extends H { constructor() { (super(...arguments), (this.type = 3)); } j(t) { this.element[this.name] = t === A ? void 0 : t; } }; var L = class extends H { constructor() { (super(...arguments), (this.type = 4)); } j(t) { this.element.toggleAttribute(this.name, !!t && t !== A); } }; var z = class extends H { constructor(t, i, s, e, h) { (super(t, i, s, e, h), (this.type = 5)); } _$AI(t, i = this) { if ((t = M$1(this, t, i, 0) ?? A) === E) return; const s = this._$AH, e = (t === A && s !== A) || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, h = t !== A && (s === A || e); (e && this.element.removeEventListener(this.name, this, s), h && this.element.addEventListener(this.name, this, t), (this._$AH = t)); } handleEvent(t) { "function" == typeof this._$AH ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t); } }; var Z = class { constructor(t, i, s) { ((this.element = t), (this.type = 6), (this._$AN = void 0), (this._$AM = i), (this.options = s)); } get _$AU() { return this._$AM._$AU; } _$AI(t) { M$1(this, t); } }; const j$1 = { M: h$5, P: o$12, A: n$10, C: 1, L: N, R, D: d$1, V: M$1, I: k, H, N: L, U: z, B: I, F: Z, }, B = t$5.litHtmlPolyfillSupport; (B?.(S, k), (t$5.litHtmlVersions ??= []).push("3.3.2")); const D = (t, i, s) => { const e = s?.renderBefore ?? i; let h = e._$litPart$; if (void 0 === h) { const t = s?.renderBefore ?? null; e._$litPart$ = h = new k(i.insertBefore(c$4(), t), t, void 0, s ?? {}); } return (h._$AI(t), h); }; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const s$6 = globalThis; var i$6 = class extends y$1 { constructor() { (super(...arguments), (this.renderOptions = { host: this }), (this._$Do = void 0)); } createRenderRoot() { const t = super.createRenderRoot(); return ((this.renderOptions.renderBefore ??= t.firstChild), t); } update(t) { const r = this.render(); (this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), (this._$Do = D(r, this.renderRoot, this.renderOptions))); } connectedCallback() { (super.connectedCallback(), this._$Do?.setConnected(!0)); } disconnectedCallback() { (super.disconnectedCallback(), this._$Do?.setConnected(!1)); } render() { return E; } }; ((i$6._$litElement$ = !0), (i$6["finalized"] = !0), s$6.litElementHydrateSupport?.({ LitElement: i$6 })); const o$11 = s$6.litElementPolyfillSupport; o$11?.({ LitElement: i$6 }); (s$6.litElementVersions ??= []).push("4.2.2"); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const t$4 = { ATTRIBUTE: 1, CHILD: 2, PROPERTY: 3, BOOLEAN_ATTRIBUTE: 4, EVENT: 5, ELEMENT: 6, }, e$10 = (t) => (...e) => ({ _$litDirective$: t, values: e, }); var i$5 = class { constructor(t) {} get _$AU() { return this._$AM._$AU; } _$AT(t, e, i) { ((this._$Ct = t), (this._$AM = e), (this._$Ci = i)); } _$AS(t, e) { return this.update(t, e); } update(t, e) { return this.render(...e); } }; /** * @license * Copyright 2020 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const { I: t$3 } = j$1, i$4 = (o) => o, r$8 = (o) => void 0 === o.strings, s$5 = () => document.createComment(""), v = (o, n, e) => { const l = o._$AA.parentNode, d = void 0 === n ? o._$AB : n._$AA; if (void 0 === e) e = new t$3(l.insertBefore(s$5(), d), l.insertBefore(s$5(), d), o, o.options); else { const t = e._$AB.nextSibling, n = e._$AM, c = n !== o; if (c) { let t; (e._$AQ?.(o), (e._$AM = o), void 0 !== e._$AP && (t = o._$AU) !== n._$AU && e._$AP(t)); } if (t !== d || c) { let o = e._$AA; for (; o !== t; ) { const t = i$4(o).nextSibling; (i$4(l).insertBefore(o, d), (o = t)); } } } return e; }, u$1 = (o, t, i = o) => (o._$AI(t, i), o), m$1 = {}, p = (o, t = m$1) => (o._$AH = t), M = (o) => o._$AH, h$4 = (o) => { (o._$AR(), o._$AA.remove()); }; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const u = (e, s, t) => { const r = /* @__PURE__ */ new Map(); for (let l = s; l <= t; l++) r.set(e[l], l); return r; }, c$2 = e$10( class extends i$5 { constructor(e) { if ((super(e), e.type !== t$4.CHILD)) throw Error("repeat() can only be used in text expressions"); } dt(e, s, t) { let r; void 0 === t ? (t = s) : void 0 !== s && (r = s); const l = [], o = []; let i = 0; for (const s of e) ((l[i] = r ? r(s, i) : i), (o[i] = t(s, i)), i++); return { values: o, keys: l, }; } render(e, s, t) { return this.dt(e, s, t).values; } update(s, [t, r, c]) { const d = M(s), { values: p$3, keys: a } = this.dt(t, r, c); if (!Array.isArray(d)) return ((this.ut = a), p$3); const h = (this.ut ??= []), v$2 = []; let m, y, x = 0, j = d.length - 1, k = 0, w = p$3.length - 1; for (; x <= j && k <= w; ) if (null === d[x]) x++; else if (null === d[j]) j--; else if (h[x] === a[k]) ((v$2[k] = u$1(d[x], p$3[k])), x++, k++); else if (h[j] === a[w]) ((v$2[w] = u$1(d[j], p$3[w])), j--, w--); else if (h[x] === a[w]) ((v$2[w] = u$1(d[x], p$3[w])), v(s, v$2[w + 1], d[x]), x++, w--); else if (h[j] === a[k]) ((v$2[k] = u$1(d[j], p$3[k])), v(s, d[x], d[j]), j--, k++); else if ((void 0 === m && ((m = u(a, k, w)), (y = u(h, x, j))), m.has(h[x]))) if (m.has(h[j])) { const e = y.get(a[k]), t = void 0 !== e ? d[e] : null; if (null === t) { const e = v(s, d[x]); (u$1(e, p$3[k]), (v$2[k] = e)); } else ((v$2[k] = u$1(t, p$3[k])), v(s, d[x], t), (d[e] = null)); k++; } else (h$4(d[j]), j--); else (h$4(d[x]), x++); for (; k <= w; ) { const e = v(s, v$2[w + 1]); (u$1(e, p$3[k]), (v$2[k++] = e)); } for (; x <= j; ) { const e = d[x++]; null !== e && h$4(e); } return ((this.ut = a), p(s, v$2), E); } }, ); /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var s$4 = class extends Event { constructor(s, t, e, o) { (super("context-request", { bubbles: !0, composed: !0, }), (this.context = s), (this.contextTarget = t), (this.callback = e), (this.subscribe = o ?? !1)); } }; /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ function n$7(n) { return n; } /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var s$3 = class { constructor(t, s, i, h) { if ( ((this.subscribe = !1), (this.provided = !1), (this.value = void 0), (this.t = (t, s) => { (this.unsubscribe && (this.unsubscribe !== s && ((this.provided = !1), this.unsubscribe()), this.subscribe || this.unsubscribe()), (this.value = t), this.host.requestUpdate(), (this.provided && !this.subscribe) || ((this.provided = !0), this.callback && this.callback(t, s)), (this.unsubscribe = s)); }), (this.host = t), void 0 !== s.context) ) { const t = s; ((this.context = t.context), (this.callback = t.callback), (this.subscribe = t.subscribe ?? !1)); } else ((this.context = s), (this.callback = i), (this.subscribe = h ?? !1)); this.host.addController(this); } hostConnected() { this.dispatchRequest(); } hostDisconnected() { this.unsubscribe && (this.unsubscribe(), (this.unsubscribe = void 0)); } dispatchRequest() { this.host.dispatchEvent(new s$4(this.context, this.host, this.t, this.subscribe)); } }; /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var s$2 = class { get value() { return this.o; } set value(s) { this.setValue(s); } setValue(s, t = !1) { const i = t || !Object.is(s, this.o); ((this.o = s), i && this.updateObservers()); } constructor(s) { ((this.subscriptions = /* @__PURE__ */ new Map()), (this.updateObservers = () => { for (const [s, { disposer: t }] of this.subscriptions) s(this.o, t); }), void 0 !== s && (this.value = s)); } addCallback(s, t, i) { if (!i) return void s(this.value); this.subscriptions.has(s) || this.subscriptions.set(s, { disposer: () => { this.subscriptions.delete(s); }, consumerHost: t, }); const { disposer: h } = this.subscriptions.get(s); s(this.value, h); } clearCallbacks() { this.subscriptions.clear(); } }; /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ var e$8 = class extends Event { constructor(t, s) { (super("context-provider", { bubbles: !0, composed: !0, }), (this.context = t), (this.contextTarget = s)); } }; var i$3 = class extends s$2 { constructor(s, e, i) { (super(void 0 !== e.context ? e.initialValue : i), (this.onContextRequest = (t) => { if (t.context !== this.context) return; const s = t.contextTarget ?? t.composedPath()[0]; s !== this.host && (t.stopPropagation(), this.addCallback(t.callback, s, t.subscribe)); }), (this.onProviderRequest = (s) => { if (s.context !== this.context) return; if ((s.contextTarget ?? s.composedPath()[0]) === this.host) return; const e = /* @__PURE__ */ new Set(); for (const [s, { consumerHost: i }] of this.subscriptions) e.has(s) || (e.add(s), i.dispatchEvent(new s$4(this.context, i, s, !0))); s.stopPropagation(); }), (this.host = s), void 0 !== e.context ? (this.context = e.context) : (this.context = e), this.attachListeners(), this.host.addController?.(this)); } attachListeners() { (this.host.addEventListener("context-request", this.onContextRequest), this.host.addEventListener("context-provider", this.onProviderRequest)); } hostConnected() { this.host.dispatchEvent(new e$8(this.context, this.host)); } }; /** * @license * Copyright 2022 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ function c$1({ context: c, subscribe: e }) { return (o, n) => { "object" == typeof n ? n.addInitializer(function () { new s$3(this, { context: c, callback: (t) => { o.set.call(this, t); }, subscribe: e, }); }) : o.constructor.addInitializer((o) => { new s$3(o, { context: c, callback: (t) => { o[n] = t; }, subscribe: e, }); }); }; } const eventInit = { bubbles: true, cancelable: true, composed: true, }; var StateEvent = class StateEvent extends CustomEvent { static { this.eventName = "a2uiaction"; } constructor(payload) { super(StateEvent.eventName, { detail: payload, ...eventInit, }); this.payload = payload; } }; const opacityBehavior = ` &:not([disabled]) { cursor: pointer; opacity: var(--opacity, 0); transition: opacity var(--speed, 0.2s) cubic-bezier(0, 0, 0.3, 1); &:hover, &:focus { opacity: 1; } }`; const behavior = ` ${new Array(21) .fill(0) .map((_, idx) => { return `.behavior-ho-${idx * 5} { --opacity: ${idx / 20}; ${opacityBehavior} }`; }) .join("\n")} .behavior-o-s { overflow: scroll; } .behavior-o-a { overflow: auto; } .behavior-o-h { overflow: hidden; } .behavior-sw-n { scrollbar-width: none; } `; const border = ` ${new Array(25) .fill(0) .map((_, idx) => { return ` .border-bw-${idx} { border-width: ${idx}px; } .border-btw-${idx} { border-top-width: ${idx}px; } .border-bbw-${idx} { border-bottom-width: ${idx}px; } .border-blw-${idx} { border-left-width: ${idx}px; } .border-brw-${idx} { border-right-width: ${idx}px; } .border-ow-${idx} { outline-width: ${idx}px; } .border-br-${idx} { border-radius: ${idx * 4}px; overflow: hidden;}`; }) .join("\n")} .border-br-50pc { border-radius: 50%; } .border-bs-s { border-style: solid; } `; const shades = [0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100]; function merge(...classes) { const styles = {}; for (const clazz of classes) for (const [key, val] of Object.entries(clazz)) { const prefix = key.split("-").with(-1, "").join("-"); const existingKeys = Object.keys(styles).filter((key) => key.startsWith(prefix)); for (const existingKey of existingKeys) delete styles[existingKey]; styles[key] = val; } return styles; } function appendToAll(target, exclusions, ...classes) { const updatedTarget = structuredClone(target); for (const clazz of classes) for (const key of Object.keys(clazz)) { const prefix = key.split("-").with(-1, "").join("-"); for (const [tagName, classesToAdd] of Object.entries(updatedTarget)) { if (exclusions.includes(tagName)) continue; let found = false; for (let t = 0; t < classesToAdd.length; t++) if (classesToAdd[t].startsWith(prefix)) { found = true; classesToAdd[t] = key; } if (!found) classesToAdd.push(key); } } return updatedTarget; } function toProp(key) { if (key.startsWith("nv")) return `--nv-${key.slice(2)}`; return `--${key[0]}-${key.slice(1)}`; } const color = (src) => ` ${src .map((key) => { const inverseKey = getInverseKey(key); return `.color-bc-${key} { border-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; }) .join("\n")} ${src .map((key) => { const inverseKey = getInverseKey(key); const vals = [ `.color-bgc-${key} { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`, `.color-bbgc-${key}::backdrop { background-color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`, ]; for (let o = 0.1; o < 1; o += 0.1) vals.push(`.color-bbgc-${key}_${(o * 100).toFixed(0)}::backdrop { background-color: light-dark(oklch(from var(${toProp(key)}) l c h / calc(alpha * ${o.toFixed(1)})), oklch(from var(${toProp(inverseKey)}) l c h / calc(alpha * ${o.toFixed(1)})) ); } `); return vals.join("\n"); }) .join("\n")} ${src .map((key) => { const inverseKey = getInverseKey(key); return `.color-c-${key} { color: light-dark(var(${toProp(key)}), var(${toProp(inverseKey)})); }`; }) .join("\n")} `; const getInverseKey = (key) => { const match = key.match(/^([a-z]+)(\d+)$/); if (!match) return key; const [, prefix, shadeStr] = match; const target = 100 - parseInt(shadeStr, 10); return `${prefix}${shades.reduce((prev, curr) => (Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev))}`; }; const keyFactory = (prefix) => { return shades.map((v) => `${prefix}${v}`); }; const structuralStyles$1 = [ behavior, border, [ color(keyFactory("p")), color(keyFactory("s")), color(keyFactory("t")), color(keyFactory("n")), color(keyFactory("nv")), color(keyFactory("e")), ` .color-bgc-transparent { background-color: transparent; } :host { color-scheme: var(--color-scheme); } `, ], ` .g-icon { font-family: "Material Symbols Outlined", "Google Symbols"; font-weight: normal; font-style: normal; font-display: optional; font-size: 20px; width: 1em; height: 1em; user-select: none; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-feature-settings: "liga"; -webkit-font-smoothing: antialiased; overflow: hidden; font-variation-settings: "FILL" 0, "wght" 300, "GRAD" 0, "opsz" 48, "ROND" 100; &.filled { font-variation-settings: "FILL" 1, "wght" 300, "GRAD" 0, "opsz" 48, "ROND" 100; } &.filled-heavy { font-variation-settings: "FILL" 1, "wght" 700, "GRAD" 0, "opsz" 48, "ROND" 100; } } `, ` :host { ${new Array(16) .fill(0) .map((_, idx) => { return `--g-${idx + 1}: ${(idx + 1) * 4}px;`; }) .join("\n")} } ${new Array(49) .fill(0) .map((_, index) => { const idx = index - 24; const lbl = idx < 0 ? `n${Math.abs(idx)}` : idx.toString(); return ` .layout-p-${lbl} { --padding: ${idx * 4}px; padding: var(--padding); } .layout-pt-${lbl} { padding-top: ${idx * 4}px; } .layout-pr-${lbl} { padding-right: ${idx * 4}px; } .layout-pb-${lbl} { padding-bottom: ${idx * 4}px; } .layout-pl-${lbl} { padding-left: ${idx * 4}px; } .layout-m-${lbl} { --margin: ${idx * 4}px; margin: var(--margin); } .layout-mt-${lbl} { margin-top: ${idx * 4}px; } .layout-mr-${lbl} { margin-right: ${idx * 4}px; } .layout-mb-${lbl} { margin-bottom: ${idx * 4}px; } .layout-ml-${lbl} { margin-left: ${idx * 4}px; } .layout-t-${lbl} { top: ${idx * 4}px; } .layout-r-${lbl} { right: ${idx * 4}px; } .layout-b-${lbl} { bottom: ${idx * 4}px; } .layout-l-${lbl} { left: ${idx * 4}px; }`; }) .join("\n")} ${new Array(25) .fill(0) .map((_, idx) => { return ` .layout-g-${idx} { gap: ${idx * 4}px; }`; }) .join("\n")} ${new Array(8) .fill(0) .map((_, idx) => { return ` .layout-grd-col${idx + 1} { grid-template-columns: ${"1fr ".repeat(idx + 1).trim()}; }`; }) .join("\n")} .layout-pos-a { position: absolute; } .layout-pos-rel { position: relative; } .layout-dsp-none { display: none; } .layout-dsp-block { display: block; } .layout-dsp-grid { display: grid; } .layout-dsp-iflex { display: inline-flex; } .layout-dsp-flexvert { display: flex; flex-direction: column; } .layout-dsp-flexhor { display: flex; flex-direction: row; } .layout-fw-w { flex-wrap: wrap; } .layout-al-fs { align-items: start; } .layout-al-fe { align-items: end; } .layout-al-c { align-items: center; } .layout-as-n { align-self: normal; } .layout-js-c { justify-self: center; } .layout-sp-c { justify-content: center; } .layout-sp-ev { justify-content: space-evenly; } .layout-sp-bt { justify-content: space-between; } .layout-sp-s { justify-content: start; } .layout-sp-e { justify-content: end; } .layout-ji-e { justify-items: end; } .layout-r-none { resize: none; } .layout-fs-c { field-sizing: content; } .layout-fs-n { field-sizing: none; } .layout-flx-0 { flex: 0 0 auto; } .layout-flx-1 { flex: 1 0 auto; } .layout-c-s { contain: strict; } /** Widths **/ ${new Array(10) .fill(0) .map((_, idx) => { const weight = (idx + 1) * 10; return `.layout-w-${weight} { width: ${weight}%; max-width: ${weight}%; }`; }) .join("\n")} ${new Array(16) .fill(0) .map((_, idx) => { return `.layout-wp-${idx} { width: ${idx * 4}px; }`; }) .join("\n")} /** Heights **/ ${new Array(10) .fill(0) .map((_, idx) => { const height = (idx + 1) * 10; return `.layout-h-${height} { height: ${height}%; }`; }) .join("\n")} ${new Array(16) .fill(0) .map((_, idx) => { return `.layout-hp-${idx} { height: ${idx * 4}px; }`; }) .join("\n")} .layout-el-cv { & img, & video { width: 100%; height: 100%; object-fit: cover; margin: 0; } } .layout-ar-sq { aspect-ratio: 1 / 1; } .layout-ex-fb { margin: calc(var(--padding) * -1) 0 0 calc(var(--padding) * -1); width: calc(100% + var(--padding) * 2); height: calc(100% + var(--padding) * 2); } `, ` ${new Array(21) .fill(0) .map((_, idx) => { return `.opacity-el-${idx * 5} { opacity: ${idx / 20}; }`; }) .join("\n")} `, ` :host { --default-font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; --default-font-family-mono: "Courier New", Courier, monospace; } .typography-f-s { font-family: var(--font-family, var(--default-font-family)); font-optical-sizing: auto; font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; } .typography-f-sf { font-family: var(--font-family-flex, var(--default-font-family)); font-optical-sizing: auto; } .typography-f-c { font-family: var(--font-family-mono, var(--default-font-family)); font-optical-sizing: auto; font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0; } .typography-v-r { font-variation-settings: "slnt" 0, "wdth" 100, "GRAD" 0, "ROND" 100; } .typography-ta-s { text-align: start; } .typography-ta-c { text-align: center; } .typography-fs-n { font-style: normal; } .typography-fs-i { font-style: italic; } .typography-sz-ls { font-size: 11px; line-height: 16px; } .typography-sz-lm { font-size: 12px; line-height: 16px; } .typography-sz-ll { font-size: 14px; line-height: 20px; } .typography-sz-bs { font-size: 12px; line-height: 16px; } .typography-sz-bm { font-size: 14px; line-height: 20px; } .typography-sz-bl { font-size: 16px; line-height: 24px; } .typography-sz-ts { font-size: 14px; line-height: 20px; } .typography-sz-tm { font-size: 16px; line-height: 24px; } .typography-sz-tl { font-size: 22px; line-height: 28px; } .typography-sz-hs { font-size: 24px; line-height: 32px; } .typography-sz-hm { font-size: 28px; line-height: 36px; } .typography-sz-hl { font-size: 32px; line-height: 40px; } .typography-sz-ds { font-size: 36px; line-height: 44px; } .typography-sz-dm { font-size: 45px; line-height: 52px; } .typography-sz-dl { font-size: 57px; line-height: 64px; } .typography-ws-p { white-space: pre-line; } .typography-ws-nw { white-space: nowrap; } .typography-td-none { text-decoration: none; } /** Weights **/ ${new Array(9) .fill(0) .map((_, idx) => { const weight = (idx + 1) * 100; return `.typography-w-${weight} { font-weight: ${weight}; }`; }) .join("\n")} `, ] .flat(Infinity) .join("\n"); var guards_exports = /* @__PURE__ */ __exportAll({ isComponentArrayReference: () => isComponentArrayReference, isObject: () => isObject$1, isPath: () => isPath, isResolvedAudioPlayer: () => isResolvedAudioPlayer, isResolvedButton: () => isResolvedButton, isResolvedCard: () => isResolvedCard, isResolvedCheckbox: () => isResolvedCheckbox, isResolvedColumn: () => isResolvedColumn, isResolvedDateTimeInput: () => isResolvedDateTimeInput, isResolvedDivider: () => isResolvedDivider, isResolvedIcon: () => isResolvedIcon, isResolvedImage: () => isResolvedImage, isResolvedList: () => isResolvedList, isResolvedModal: () => isResolvedModal, isResolvedMultipleChoice: () => isResolvedMultipleChoice, isResolvedRow: () => isResolvedRow, isResolvedSlider: () => isResolvedSlider, isResolvedTabs: () => isResolvedTabs, isResolvedText: () => isResolvedText, isResolvedTextField: () => isResolvedTextField, isResolvedVideo: () => isResolvedVideo, isValueMap: () => isValueMap, }); function isValueMap(value) { return isObject$1(value) && "key" in value; } function isPath(key, value) { return key === "path" && typeof value === "string"; } function isObject$1(value) { return typeof value === "object" && value !== null && !Array.isArray(value); } function isComponentArrayReference(value) { if (!isObject$1(value)) return false; return "explicitList" in value || "template" in value; } function isStringValue(value) { return ( isObject$1(value) && ("path" in value || ("literal" in value && typeof value.literal === "string") || "literalString" in value) ); } function isNumberValue(value) { return ( isObject$1(value) && ("path" in value || ("literal" in value && typeof value.literal === "number") || "literalNumber" in value) ); } function isBooleanValue(value) { return ( isObject$1(value) && ("path" in value || ("literal" in value && typeof value.literal === "boolean") || "literalBoolean" in value) ); } function isAnyComponentNode(value) { if (!isObject$1(value)) return false; if (!("id" in value && "type" in value && "properties" in value)) return false; return true; } function isResolvedAudioPlayer(props) { return isObject$1(props) && "url" in props && isStringValue(props.url); } function isResolvedButton(props) { return ( isObject$1(props) && "child" in props && isAnyComponentNode(props.child) && "action" in props ); } function isResolvedCard(props) { if (!isObject$1(props)) return false; if (!("child" in props)) if (!("children" in props)) return false; else return Array.isArray(props.children) && props.children.every(isAnyComponentNode); return isAnyComponentNode(props.child); } function isResolvedCheckbox(props) { return ( isObject$1(props) && "label" in props && isStringValue(props.label) && "value" in props && isBooleanValue(props.value) ); } function isResolvedColumn(props) { return ( isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode) ); } function isResolvedDateTimeInput(props) { return isObject$1(props) && "value" in props && isStringValue(props.value); } function isResolvedDivider(props) { return isObject$1(props); } function isResolvedImage(props) { return isObject$1(props) && "url" in props && isStringValue(props.url); } function isResolvedIcon(props) { return isObject$1(props) && "name" in props && isStringValue(props.name); } function isResolvedList(props) { return ( isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode) ); } function isResolvedModal(props) { return ( isObject$1(props) && "entryPointChild" in props && isAnyComponentNode(props.entryPointChild) && "contentChild" in props && isAnyComponentNode(props.contentChild) ); } function isResolvedMultipleChoice(props) { return isObject$1(props) && "selections" in props; } function isResolvedRow(props) { return ( isObject$1(props) && "children" in props && Array.isArray(props.children) && props.children.every(isAnyComponentNode) ); } function isResolvedSlider(props) { return isObject$1(props) && "value" in props && isNumberValue(props.value); } function isResolvedTabItem(item) { return ( isObject$1(item) && "title" in item && isStringValue(item.title) && "child" in item && isAnyComponentNode(item.child) ); } function isResolvedTabs(props) { return ( isObject$1(props) && "tabItems" in props && Array.isArray(props.tabItems) && props.tabItems.every(isResolvedTabItem) ); } function isResolvedText(props) { return isObject$1(props) && "text" in props && isStringValue(props.text); } function isResolvedTextField(props) { return isObject$1(props) && "label" in props && isStringValue(props.label); } function isResolvedVideo(props) { return isObject$1(props) && "url" in props && isStringValue(props.url); } /** * Processes and consolidates A2UIProtocolMessage objects into a structured, * hierarchical model of UI surfaces. */ var A2uiMessageProcessor = class A2uiMessageProcessor { static { this.DEFAULT_SURFACE_ID = "@default"; } #mapCtor = Map; #arrayCtor = Array; #setCtor = Set; #objCtor = Object; #surfaces; constructor( opts = { mapCtor: Map, arrayCtor: Array, setCtor: Set, objCtor: Object, }, ) { this.opts = opts; this.#arrayCtor = opts.arrayCtor; this.#mapCtor = opts.mapCtor; this.#setCtor = opts.setCtor; this.#objCtor = opts.objCtor; this.#surfaces = new opts.mapCtor(); } getSurfaces() { return this.#surfaces; } clearSurfaces() { this.#surfaces.clear(); } processMessages(messages) { for (const message of messages) { if (message.beginRendering) this.#handleBeginRendering(message.beginRendering, message.beginRendering.surfaceId); if (message.surfaceUpdate) this.#handleSurfaceUpdate(message.surfaceUpdate, message.surfaceUpdate.surfaceId); if (message.dataModelUpdate) this.#handleDataModelUpdate(message.dataModelUpdate, message.dataModelUpdate.surfaceId); if (message.deleteSurface) this.#handleDeleteSurface(message.deleteSurface); } } /** * Retrieves the data for a given component node and a relative path string. * This correctly handles the special `.` path, which refers to the node's * own data context. */ getData(node, relativePath, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { const surface = this.#getOrCreateSurface(surfaceId); if (!surface) return null; let finalPath; if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; else finalPath = this.resolvePath(relativePath, node.dataContextPath); return this.#getDataByPath(surface.dataModel, finalPath); } setData(node, relativePath, value, surfaceId = A2uiMessageProcessor.DEFAULT_SURFACE_ID) { if (!node) { console.warn("No component node set"); return; } const surface = this.#getOrCreateSurface(surfaceId); if (!surface) return; let finalPath; if (relativePath === "." || relativePath === "") finalPath = node.dataContextPath ?? "/"; else finalPath = this.resolvePath(relativePath, node.dataContextPath); this.#setDataByPath(surface.dataModel, finalPath, value); } resolvePath(path, dataContextPath) { if (path.startsWith("/")) return path; if (dataContextPath && dataContextPath !== "/") return dataContextPath.endsWith("/") ? `${dataContextPath}${path}` : `${dataContextPath}/${path}`; return `/${path}`; } #parseIfJsonString(value) { if (typeof value !== "string") return value; const trimmedValue = value.trim(); if ( (trimmedValue.startsWith("{") && trimmedValue.endsWith("}")) || (trimmedValue.startsWith("[") && trimmedValue.endsWith("]")) ) try { return JSON.parse(value); } catch (e) { console.warn(`Failed to parse potential JSON string: "${value.substring(0, 50)}..."`, e); return value; } return value; } /** * Converts a specific array format [{key: "...", value_string: "..."}, ...] * into a standard Map. It also attempts to parse any string values that * appear to be stringified JSON. */ #convertKeyValueArrayToMap(arr) { const map = new this.#mapCtor(); for (const item of arr) { if (!isObject$1(item) || !("key" in item)) continue; const key = item.key; const valueKey = this.#findValueKey(item); if (!valueKey) continue; let value = item[valueKey]; if (valueKey === "valueMap" && Array.isArray(value)) value = this.#convertKeyValueArrayToMap(value); else if (typeof value === "string") value = this.#parseIfJsonString(value); this.#setDataByPath(map, key, value); } return map; } #setDataByPath(root, path, value) { if (Array.isArray(value) && (value.length === 0 || (isObject$1(value[0]) && "key" in value[0]))) if (value.length === 1 && isObject$1(value[0]) && value[0].key === ".") { const item = value[0]; const valueKey = this.#findValueKey(item); if (valueKey) { value = item[valueKey]; if (valueKey === "valueMap" && Array.isArray(value)) value = this.#convertKeyValueArrayToMap(value); else if (typeof value === "string") value = this.#parseIfJsonString(value); } else value = this.#convertKeyValueArrayToMap(value); } else value = this.#convertKeyValueArrayToMap(value); const segments = this.#normalizePath(path) .split("/") .filter((s) => s); if (segments.length === 0) { if (value instanceof Map || isObject$1(value)) { if (!(value instanceof Map) && isObject$1(value)) value = new this.#mapCtor(Object.entries(value)); root.clear(); for (const [key, v] of value.entries()) root.set(key, v); } else console.error("Cannot set root of DataModel to a non-Map value."); return; } let current = root; for (let i = 0; i < segments.length - 1; i++) { const segment = segments[i]; let target; if (current instanceof Map) target = current.get(segment); else if (Array.isArray(current) && /^\d+$/.test(segment)) target = current[parseInt(segment, 10)]; if (target === void 0 || typeof target !== "object" || target === null) { target = new this.#mapCtor(); if (current instanceof this.#mapCtor) current.set(segment, target); else if (Array.isArray(current)) current[parseInt(segment, 10)] = target; } current = target; } const finalSegment = segments[segments.length - 1]; const storedValue = value; if (current instanceof this.#mapCtor) current.set(finalSegment, storedValue); else if (Array.isArray(current) && /^\d+$/.test(finalSegment)) current[parseInt(finalSegment, 10)] = storedValue; } /** * Normalizes a path string into a consistent, slash-delimited format. * Converts bracket notation and dot notation in a two-pass. * e.g., "bookRecommendations[0].title" -> "/bookRecommendations/0/title" * e.g., "book.0.title" -> "/book/0/title" */ #normalizePath(path) { return ( "/" + path .replace(/\[(\d+)\]/g, ".$1") .split(".") .filter((s) => s.length > 0) .join("/") ); } #getDataByPath(root, path) { const segments = this.#normalizePath(path) .split("/") .filter((s) => s); let current = root; for (const segment of segments) { if (current === void 0 || current === null) return null; if (current instanceof Map) current = current.get(segment); else if (Array.isArray(current) && /^\d+$/.test(segment)) current = current[parseInt(segment, 10)]; else if (isObject$1(current)) current = current[segment]; else return null; } return current; } #getOrCreateSurface(surfaceId) { let surface = this.#surfaces.get(surfaceId); if (!surface) { surface = new this.#objCtor({ rootComponentId: null, componentTree: null, dataModel: new this.#mapCtor(), components: new this.#mapCtor(), styles: new this.#objCtor(), }); this.#surfaces.set(surfaceId, surface); } return surface; } #handleBeginRendering(message, surfaceId) { const surface = this.#getOrCreateSurface(surfaceId); surface.rootComponentId = message.root; surface.styles = message.styles ?? {}; this.#rebuildComponentTree(surface); } #handleSurfaceUpdate(message, surfaceId) { const surface = this.#getOrCreateSurface(surfaceId); for (const component of message.components) surface.components.set(component.id, component); this.#rebuildComponentTree(surface); } #handleDataModelUpdate(message, surfaceId) { const surface = this.#getOrCreateSurface(surfaceId); const path = message.path ?? "/"; this.#setDataByPath(surface.dataModel, path, message.contents); this.#rebuildComponentTree(surface); } #handleDeleteSurface(message) { this.#surfaces.delete(message.surfaceId); } /** * Starts at the root component of the surface and builds out the tree * recursively. This process involves resolving all properties of the child * components, and expanding on any explicit children lists or templates * found in the structure. * * @param surface The surface to be built. */ #rebuildComponentTree(surface) { if (!surface.rootComponentId) { surface.componentTree = null; return; } const visited = new this.#setCtor(); surface.componentTree = this.#buildNodeRecursive( surface.rootComponentId, surface, visited, "/", "", ); } /** Finds a value key in a map. */ #findValueKey(value) { return Object.keys(value).find((k) => k.startsWith("value")); } /** * Builds out the nodes recursively. */ #buildNodeRecursive(baseComponentId, surface, visited, dataContextPath, idSuffix = "") { const fullId = `${baseComponentId}${idSuffix}`; const { components } = surface; if (!components.has(baseComponentId)) return null; if (visited.has(fullId)) throw new Error(`Circular dependency for component "${fullId}".`); visited.add(fullId); const componentData = components.get(baseComponentId); const componentProps = componentData.component ?? {}; const componentType = Object.keys(componentProps)[0]; const unresolvedProperties = componentProps[componentType]; const resolvedProperties = new this.#objCtor(); if (isObject$1(unresolvedProperties)) for (const [key, value] of Object.entries(unresolvedProperties)) resolvedProperties[key] = this.#resolvePropertyValue( value, surface, visited, dataContextPath, idSuffix, key, ); visited.delete(fullId); const baseNode = { id: fullId, dataContextPath, weight: componentData.weight ?? "initial", }; switch (componentType) { case "Text": if (!isResolvedText(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Text", properties: resolvedProperties, }); case "Image": if (!isResolvedImage(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Image", properties: resolvedProperties, }); case "Icon": if (!isResolvedIcon(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Icon", properties: resolvedProperties, }); case "Video": if (!isResolvedVideo(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Video", properties: resolvedProperties, }); case "AudioPlayer": if (!isResolvedAudioPlayer(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "AudioPlayer", properties: resolvedProperties, }); case "Row": if (!isResolvedRow(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Row", properties: resolvedProperties, }); case "Column": if (!isResolvedColumn(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Column", properties: resolvedProperties, }); case "List": if (!isResolvedList(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "List", properties: resolvedProperties, }); case "Card": if (!isResolvedCard(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Card", properties: resolvedProperties, }); case "Tabs": if (!isResolvedTabs(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Tabs", properties: resolvedProperties, }); case "Divider": if (!isResolvedDivider(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Divider", properties: resolvedProperties, }); case "Modal": if (!isResolvedModal(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Modal", properties: resolvedProperties, }); case "Button": if (!isResolvedButton(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Button", properties: resolvedProperties, }); case "CheckBox": if (!isResolvedCheckbox(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "CheckBox", properties: resolvedProperties, }); case "TextField": if (!isResolvedTextField(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "TextField", properties: resolvedProperties, }); case "DateTimeInput": if (!isResolvedDateTimeInput(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "DateTimeInput", properties: resolvedProperties, }); case "MultipleChoice": if (!isResolvedMultipleChoice(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "MultipleChoice", properties: resolvedProperties, }); case "Slider": if (!isResolvedSlider(resolvedProperties)) throw new Error(`Invalid data; expected ${componentType}`); return new this.#objCtor({ ...baseNode, type: "Slider", properties: resolvedProperties, }); default: return new this.#objCtor({ ...baseNode, type: componentType, properties: resolvedProperties, }); } } /** * Recursively resolves an individual property value. If a property indicates * a child node (a string that matches a component ID), an explicitList of * children, or a template, these will be built out here. */ #resolvePropertyValue( value, surface, visited, dataContextPath, idSuffix = "", propertyKey = null, ) { const isComponentIdReferenceKey = (key) => key === "child" || key.endsWith("Child"); if ( typeof value === "string" && propertyKey && isComponentIdReferenceKey(propertyKey) && surface.components.has(value) ) return this.#buildNodeRecursive(value, surface, visited, dataContextPath, idSuffix); if (isComponentArrayReference(value)) { if (value.explicitList) return value.explicitList.map((id) => this.#buildNodeRecursive(id, surface, visited, dataContextPath, idSuffix), ); if (value.template) { const fullDataPath = this.resolvePath(value.template.dataBinding, dataContextPath); const data = this.#getDataByPath(surface.dataModel, fullDataPath); const template = value.template; if (Array.isArray(data)) return data.map((_, index) => { const newSuffix = `:${[...dataContextPath.split("/").filter((segment) => /^\d+$/.test(segment)), index].join(":")}`; const childDataContextPath = `${fullDataPath}/${index}`; return this.#buildNodeRecursive( template.componentId, surface, visited, childDataContextPath, newSuffix, ); }); if (data instanceof this.#mapCtor) return Array.from(data.keys(), (key) => { const newSuffix = `:${key}`; const childDataContextPath = `${fullDataPath}/${key}`; return this.#buildNodeRecursive( template.componentId, surface, visited, childDataContextPath, newSuffix, ); }); return new this.#arrayCtor(); } } if (Array.isArray(value)) return value.map((item) => this.#resolvePropertyValue(item, surface, visited, dataContextPath, idSuffix, propertyKey), ); if (isObject$1(value)) { const newObj = new this.#objCtor(); for (const [key, propValue] of Object.entries(value)) { let propertyValue = propValue; if (isPath(key, propValue) && dataContextPath !== "/") { propertyValue = propValue .replace(/^\.?\/item/, "") .replace(/^\.?\/text/, "") .replace(/^\.?\/label/, "") .replace(/^\.?\//, ""); newObj[key] = propertyValue; continue; } newObj[key] = this.#resolvePropertyValue( propertyValue, surface, visited, dataContextPath, idSuffix, key, ); } return newObj; } return value; } }; var __defProp = Object.defineProperty; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value, }) : (obj[key] = value); var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; var __accessCheck = (obj, member, msg) => { if (!member.has(obj)) throw TypeError("Cannot " + msg); }; var __privateIn = (member, obj) => { if (Object(obj) !== obj) throw TypeError('Cannot use the "in" operator on this value'); return member.has(obj); }; var __privateAdd = (obj, member, value) => { if (member.has(obj)) throw TypeError("Cannot add the same private member more than once"); member instanceof WeakSet ? member.add(obj) : member.set(obj, value); }; var __privateMethod = (obj, member, method) => { __accessCheck(obj, member, "access private method"); return method; }; /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ function defaultEquals(a, b) { return Object.is(a, b); } /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ let activeConsumer = null; let inNotificationPhase = false; let epoch = 1; const SIGNAL = /* @__PURE__ */ Symbol("SIGNAL"); function setActiveConsumer(consumer) { const prev = activeConsumer; activeConsumer = consumer; return prev; } function getActiveConsumer() { return activeConsumer; } function isInNotificationPhase() { return inNotificationPhase; } const REACTIVE_NODE = { version: 0, lastCleanEpoch: 0, dirty: false, producerNode: void 0, producerLastReadVersion: void 0, producerIndexOfThis: void 0, nextProducerIndex: 0, liveConsumerNode: void 0, liveConsumerIndexOfThis: void 0, consumerAllowSignalWrites: false, consumerIsAlwaysLive: false, producerMustRecompute: () => false, producerRecomputeValue: () => {}, consumerMarkedDirty: () => {}, consumerOnSignalRead: () => {}, }; function producerAccessed(node) { if (inNotificationPhase) throw new Error( typeof ngDevMode !== "undefined" && ngDevMode ? `Assertion error: signal read during notification phase` : "", ); if (activeConsumer === null) return; activeConsumer.consumerOnSignalRead(node); const idx = activeConsumer.nextProducerIndex++; assertConsumerNode(activeConsumer); if (idx < activeConsumer.producerNode.length && activeConsumer.producerNode[idx] !== node) { if (consumerIsLive(activeConsumer)) { const staleProducer = activeConsumer.producerNode[idx]; producerRemoveLiveConsumerAtIndex(staleProducer, activeConsumer.producerIndexOfThis[idx]); } } if (activeConsumer.producerNode[idx] !== node) { activeConsumer.producerNode[idx] = node; activeConsumer.producerIndexOfThis[idx] = consumerIsLive(activeConsumer) ? producerAddLiveConsumer(node, activeConsumer, idx) : 0; } activeConsumer.producerLastReadVersion[idx] = node.version; } function producerIncrementEpoch() { epoch++; } function producerUpdateValueVersion(node) { if (!node.dirty && node.lastCleanEpoch === epoch) return; if (!node.producerMustRecompute(node) && !consumerPollProducersForChange(node)) { node.dirty = false; node.lastCleanEpoch = epoch; return; } node.producerRecomputeValue(node); node.dirty = false; node.lastCleanEpoch = epoch; } function producerNotifyConsumers(node) { if (node.liveConsumerNode === void 0) return; const prev = inNotificationPhase; inNotificationPhase = true; try { for (const consumer of node.liveConsumerNode) if (!consumer.dirty) consumerMarkDirty(consumer); } finally { inNotificationPhase = prev; } } function producerUpdatesAllowed() { return (activeConsumer == null ? void 0 : activeConsumer.consumerAllowSignalWrites) !== false; } function consumerMarkDirty(node) { var _a; node.dirty = true; producerNotifyConsumers(node); (_a = node.consumerMarkedDirty) == null || _a.call(node.wrapper ?? node); } function consumerBeforeComputation(node) { node && (node.nextProducerIndex = 0); return setActiveConsumer(node); } function consumerAfterComputation(node, prevConsumer) { setActiveConsumer(prevConsumer); if ( !node || node.producerNode === void 0 || node.producerIndexOfThis === void 0 || node.producerLastReadVersion === void 0 ) return; if (consumerIsLive(node)) for (let i = node.nextProducerIndex; i < node.producerNode.length; i++) producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); while (node.producerNode.length > node.nextProducerIndex) { node.producerNode.pop(); node.producerLastReadVersion.pop(); node.producerIndexOfThis.pop(); } } function consumerPollProducersForChange(node) { assertConsumerNode(node); for (let i = 0; i < node.producerNode.length; i++) { const producer = node.producerNode[i]; const seenVersion = node.producerLastReadVersion[i]; if (seenVersion !== producer.version) return true; producerUpdateValueVersion(producer); if (seenVersion !== producer.version) return true; } return false; } function producerAddLiveConsumer(node, consumer, indexOfThis) { var _a; assertProducerNode(node); assertConsumerNode(node); if (node.liveConsumerNode.length === 0) { (_a = node.watched) == null || _a.call(node.wrapper); for (let i = 0; i < node.producerNode.length; i++) node.producerIndexOfThis[i] = producerAddLiveConsumer(node.producerNode[i], node, i); } node.liveConsumerIndexOfThis.push(indexOfThis); return node.liveConsumerNode.push(consumer) - 1; } function producerRemoveLiveConsumerAtIndex(node, idx) { var _a; assertProducerNode(node); assertConsumerNode(node); if (typeof ngDevMode !== "undefined" && ngDevMode && idx >= node.liveConsumerNode.length) throw new Error( `Assertion error: active consumer index ${idx} is out of bounds of ${node.liveConsumerNode.length} consumers)`, ); if (node.liveConsumerNode.length === 1) { (_a = node.unwatched) == null || _a.call(node.wrapper); for (let i = 0; i < node.producerNode.length; i++) producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); } const lastIdx = node.liveConsumerNode.length - 1; node.liveConsumerNode[idx] = node.liveConsumerNode[lastIdx]; node.liveConsumerIndexOfThis[idx] = node.liveConsumerIndexOfThis[lastIdx]; node.liveConsumerNode.length--; node.liveConsumerIndexOfThis.length--; if (idx < node.liveConsumerNode.length) { const idxProducer = node.liveConsumerIndexOfThis[idx]; const consumer = node.liveConsumerNode[idx]; assertConsumerNode(consumer); consumer.producerIndexOfThis[idxProducer] = idx; } } function consumerIsLive(node) { var _a; return ( node.consumerIsAlwaysLive || (((_a = node == null ? void 0 : node.liveConsumerNode) == null ? void 0 : _a.length) ?? 0) > 0 ); } function assertConsumerNode(node) { node.producerNode ?? (node.producerNode = []); node.producerIndexOfThis ?? (node.producerIndexOfThis = []); node.producerLastReadVersion ?? (node.producerLastReadVersion = []); } function assertProducerNode(node) { node.liveConsumerNode ?? (node.liveConsumerNode = []); node.liveConsumerIndexOfThis ?? (node.liveConsumerIndexOfThis = []); } /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ function computedGet(node) { producerUpdateValueVersion(node); producerAccessed(node); if (node.value === ERRORED) throw node.error; return node.value; } function createComputed(computation) { const node = Object.create(COMPUTED_NODE); node.computation = computation; const computed = () => computedGet(node); computed[SIGNAL] = node; return computed; } const UNSET = /* @__PURE__ */ Symbol("UNSET"); const COMPUTING = /* @__PURE__ */ Symbol("COMPUTING"); const ERRORED = /* @__PURE__ */ Symbol("ERRORED"); const COMPUTED_NODE = { ...REACTIVE_NODE, value: UNSET, dirty: true, error: null, equal: defaultEquals, producerMustRecompute(node) { return node.value === UNSET || node.value === COMPUTING; }, producerRecomputeValue(node) { if (node.value === COMPUTING) throw new Error("Detected cycle in computations."); const oldValue = node.value; node.value = COMPUTING; const prevConsumer = consumerBeforeComputation(node); let newValue; let wasEqual = false; try { newValue = node.computation.call(node.wrapper); wasEqual = oldValue !== UNSET && oldValue !== ERRORED && node.equal.call(node.wrapper, oldValue, newValue); } catch (err) { newValue = ERRORED; node.error = err; } finally { consumerAfterComputation(node, prevConsumer); } if (wasEqual) { node.value = oldValue; return; } node.value = newValue; node.version++; }, }; /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ function defaultThrowError() { throw new Error(); } let throwInvalidWriteToSignalErrorFn = defaultThrowError; function throwInvalidWriteToSignalError() { throwInvalidWriteToSignalErrorFn(); } /** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ function createSignal(initialValue) { const node = Object.create(SIGNAL_NODE); node.value = initialValue; const getter = () => { producerAccessed(node); return node.value; }; getter[SIGNAL] = node; return getter; } function signalGetFn() { producerAccessed(this); return this.value; } function signalSetFn(node, newValue) { if (!producerUpdatesAllowed()) throwInvalidWriteToSignalError(); if (!node.equal.call(node.wrapper, node.value, newValue)) { node.value = newValue; signalValueChanged(node); } } const SIGNAL_NODE = { ...REACTIVE_NODE, equal: defaultEquals, value: void 0, }; function signalValueChanged(node) { node.version++; producerIncrementEpoch(); producerNotifyConsumers(node); } /** * @license * Copyright 2024 Bloomberg Finance L.P. * * 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 NODE = Symbol("node"); var Signal; ((Signal2) => { var _a, _brand, _b, _brand2; class State { constructor(initialValue, options = {}) { __privateAdd(this, _brand); __publicField(this, _a); const node = createSignal(initialValue)[SIGNAL]; this[NODE] = node; node.wrapper = this; if (options) { const equals = options.equals; if (equals) node.equal = equals; node.watched = options[Signal2.subtle.watched]; node.unwatched = options[Signal2.subtle.unwatched]; } } get() { if (!(0, Signal2.isState)(this)) throw new TypeError("Wrong receiver type for Signal.State.prototype.get"); return signalGetFn.call(this[NODE]); } set(newValue) { if (!(0, Signal2.isState)(this)) throw new TypeError("Wrong receiver type for Signal.State.prototype.set"); if (isInNotificationPhase()) throw new Error("Writes to signals not permitted during Watcher callback"); const ref = this[NODE]; signalSetFn(ref, newValue); } } _a = NODE; _brand = /* @__PURE__ */ new WeakSet(); Signal2.isState = (s) => typeof s === "object" && __privateIn(_brand, s); Signal2.State = State; class Computed { constructor(computation, options) { __privateAdd(this, _brand2); __publicField(this, _b); const node = createComputed(computation)[SIGNAL]; node.consumerAllowSignalWrites = true; this[NODE] = node; node.wrapper = this; if (options) { const equals = options.equals; if (equals) node.equal = equals; node.watched = options[Signal2.subtle.watched]; node.unwatched = options[Signal2.subtle.unwatched]; } } get() { if (!(0, Signal2.isComputed)(this)) throw new TypeError("Wrong receiver type for Signal.Computed.prototype.get"); return computedGet(this[NODE]); } } _b = NODE; _brand2 = /* @__PURE__ */ new WeakSet(); Signal2.isComputed = (c) => typeof c === "object" && __privateIn(_brand2, c); Signal2.Computed = Computed; ((subtle2) => { var _a2, _brand3, _assertSignals, assertSignals_fn; function untrack(cb) { let output; let prevActiveConsumer = null; try { prevActiveConsumer = setActiveConsumer(null); output = cb(); } finally { setActiveConsumer(prevActiveConsumer); } return output; } subtle2.untrack = untrack; function introspectSources(sink) { var _a3; if (!(0, Signal2.isComputed)(sink) && !(0, Signal2.isWatcher)(sink)) throw new TypeError("Called introspectSources without a Computed or Watcher argument"); return ((_a3 = sink[NODE].producerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? []; } subtle2.introspectSources = introspectSources; function introspectSinks(signal) { var _a3; if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called introspectSinks without a Signal argument"); return ( ((_a3 = signal[NODE].liveConsumerNode) == null ? void 0 : _a3.map((n) => n.wrapper)) ?? [] ); } subtle2.introspectSinks = introspectSinks; function hasSinks(signal) { if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called hasSinks without a Signal argument"); const liveConsumerNode = signal[NODE].liveConsumerNode; if (!liveConsumerNode) return false; return liveConsumerNode.length > 0; } subtle2.hasSinks = hasSinks; function hasSources(signal) { if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isWatcher)(signal)) throw new TypeError("Called hasSources without a Computed or Watcher argument"); const producerNode = signal[NODE].producerNode; if (!producerNode) return false; return producerNode.length > 0; } subtle2.hasSources = hasSources; class Watcher { constructor(notify) { __privateAdd(this, _brand3); __privateAdd(this, _assertSignals); __publicField(this, _a2); let node = Object.create(REACTIVE_NODE); node.wrapper = this; node.consumerMarkedDirty = notify; node.consumerIsAlwaysLive = true; node.consumerAllowSignalWrites = false; node.producerNode = []; this[NODE] = node; } watch(...signals) { if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called unwatch without Watcher receiver"); __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); const node = this[NODE]; node.dirty = false; const prev = setActiveConsumer(node); for (const signal of signals) producerAccessed(signal[NODE]); setActiveConsumer(prev); } unwatch(...signals) { if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called unwatch without Watcher receiver"); __privateMethod(this, _assertSignals, assertSignals_fn).call(this, signals); const node = this[NODE]; assertConsumerNode(node); for (let i = node.producerNode.length - 1; i >= 0; i--) if (signals.includes(node.producerNode[i].wrapper)) { producerRemoveLiveConsumerAtIndex(node.producerNode[i], node.producerIndexOfThis[i]); const lastIdx = node.producerNode.length - 1; node.producerNode[i] = node.producerNode[lastIdx]; node.producerIndexOfThis[i] = node.producerIndexOfThis[lastIdx]; node.producerNode.length--; node.producerIndexOfThis.length--; node.nextProducerIndex--; if (i < node.producerNode.length) { const idxConsumer = node.producerIndexOfThis[i]; const producer = node.producerNode[i]; assertProducerNode(producer); producer.liveConsumerIndexOfThis[idxConsumer] = i; } } } getPending() { if (!(0, Signal2.isWatcher)(this)) throw new TypeError("Called getPending without Watcher receiver"); return this[NODE].producerNode.filter((n) => n.dirty).map((n) => n.wrapper); } } _a2 = NODE; _brand3 = /* @__PURE__ */ new WeakSet(); _assertSignals = /* @__PURE__ */ new WeakSet(); assertSignals_fn = function (signals) { for (const signal of signals) if (!(0, Signal2.isComputed)(signal) && !(0, Signal2.isState)(signal)) throw new TypeError("Called watch/unwatch without a Computed or State argument"); }; Signal2.isWatcher = (w) => __privateIn(_brand3, w); subtle2.Watcher = Watcher; function currentComputed() { var _a3; return (_a3 = getActiveConsumer()) == null ? void 0 : _a3.wrapper; } subtle2.currentComputed = currentComputed; subtle2.watched = Symbol("watched"); subtle2.unwatched = Symbol("unwatched"); })(Signal2.subtle || (Signal2.subtle = {})); })(Signal || (Signal = {})); /** * equality check here is always false so that we can dirty the storage * via setting to _anything_ * * * This is for a pattern where we don't *directly* use signals to back the values used in collections * so that instanceof checks and getters and other native features "just work" without having * to do nested proxying. * * (though, see deep.ts for nested / deep behavior) */ const createStorage = (initial = null) => new Signal.State(initial, { equals: () => false }); const ARRAY_GETTER_METHODS = new Set([ Symbol.iterator, "concat", "entries", "every", "filter", "find", "findIndex", "flat", "flatMap", "forEach", "includes", "indexOf", "join", "keys", "lastIndexOf", "map", "reduce", "reduceRight", "slice", "some", "values", ]); const ARRAY_WRITE_THEN_READ_METHODS = new Set(["fill", "push", "unshift"]); function convertToInt(prop) { if (typeof prop === "symbol") return null; const num = Number(prop); if (isNaN(num)) return null; return num % 1 === 0 ? num : null; } var SignalArray = class SignalArray { /** * Creates an array from an iterable object. * @param iterable An iterable object to convert to an array. */ /** * Creates an array from an iterable object. * @param iterable An iterable object to convert to an array. * @param mapfn A mapping function to call on every element of the array. * @param thisArg Value of 'this' used to invoke the mapfn. */ static from(iterable, mapfn, thisArg) { return mapfn ? new SignalArray(Array.from(iterable, mapfn, thisArg)) : new SignalArray(Array.from(iterable)); } static of(...arr) { return new SignalArray(arr); } constructor(arr = []) { let clone = arr.slice(); let self = this; let boundFns = /* @__PURE__ */ new Map(); /** Flag to track whether we have *just* intercepted a call to `.push()` or `.unshift()`, since in those cases (and only those cases!) the `Array` itself checks `.length` to return from the function call. */ let nativelyAccessingLengthFromPushOrUnshift = false; return new Proxy(clone, { get(target, prop) { let index = convertToInt(prop); if (index !== null) { self.#readStorageFor(index); self.#collection.get(); return target[index]; } if (prop === "length") { if (nativelyAccessingLengthFromPushOrUnshift) nativelyAccessingLengthFromPushOrUnshift = false; else self.#collection.get(); return target[prop]; } if (ARRAY_WRITE_THEN_READ_METHODS.has(prop)) nativelyAccessingLengthFromPushOrUnshift = true; if (ARRAY_GETTER_METHODS.has(prop)) { let fn = boundFns.get(prop); if (fn === void 0) { fn = (...args) => { self.#collection.get(); return target[prop](...args); }; boundFns.set(prop, fn); } return fn; } return target[prop]; }, set(target, prop, value) { target[prop] = value; let index = convertToInt(prop); if (index !== null) { self.#dirtyStorageFor(index); self.#collection.set(null); } else if (prop === "length") self.#collection.set(null); return true; }, getPrototypeOf() { return SignalArray.prototype; }, }); } #collection = createStorage(); #storages = /* @__PURE__ */ new Map(); #readStorageFor(index) { let storage = this.#storages.get(index); if (storage === void 0) { storage = createStorage(); this.#storages.set(index, storage); } storage.get(); } #dirtyStorageFor(index) { const storage = this.#storages.get(index); if (storage) storage.set(null); } }; Object.setPrototypeOf(SignalArray.prototype, Array.prototype); var SignalMap = class { collection = createStorage(); storages = /* @__PURE__ */ new Map(); vals; readStorageFor(key) { const { storages } = this; let storage = storages.get(key); if (storage === void 0) { storage = createStorage(); storages.set(key, storage); } storage.get(); } dirtyStorageFor(key) { const storage = this.storages.get(key); if (storage) storage.set(null); } constructor(existing) { this.vals = existing ? new Map(existing) : /* @__PURE__ */ new Map(); } get(key) { this.readStorageFor(key); return this.vals.get(key); } has(key) { this.readStorageFor(key); return this.vals.has(key); } entries() { this.collection.get(); return this.vals.entries(); } keys() { this.collection.get(); return this.vals.keys(); } values() { this.collection.get(); return this.vals.values(); } forEach(fn) { this.collection.get(); this.vals.forEach(fn); } get size() { this.collection.get(); return this.vals.size; } [Symbol.iterator]() { this.collection.get(); return this.vals[Symbol.iterator](); } get [Symbol.toStringTag]() { return this.vals[Symbol.toStringTag]; } set(key, value) { this.dirtyStorageFor(key); this.collection.set(null); this.vals.set(key, value); return this; } delete(key) { this.dirtyStorageFor(key); this.collection.set(null); return this.vals.delete(key); } clear() { this.storages.forEach((s) => s.set(null)); this.collection.set(null); this.vals.clear(); } }; Object.setPrototypeOf(SignalMap.prototype, Map.prototype); /** * Create a reactive Object, backed by Signals, using a Proxy. * This allows dynamic creation and deletion of signals using the object primitive * APIs that most folks are familiar with -- the only difference is instantiation. * ```js * const obj = new SignalObject({ foo: 123 }); * * obj.foo // 123 * obj.foo = 456 * obj.foo // 456 * obj.bar = 2 * obj.bar // 2 * ``` */ const SignalObject = class SignalObjectImpl { static fromEntries(entries) { return new SignalObjectImpl(Object.fromEntries(entries)); } #storages = /* @__PURE__ */ new Map(); #collection = createStorage(); constructor(obj = {}) { let proto = Object.getPrototypeOf(obj); let descs = Object.getOwnPropertyDescriptors(obj); let clone = Object.create(proto); for (let prop in descs) Object.defineProperty(clone, prop, descs[prop]); let self = this; return new Proxy(clone, { get(target, prop, receiver) { self.#readStorageFor(prop); return Reflect.get(target, prop, receiver); }, has(target, prop) { self.#readStorageFor(prop); return prop in target; }, ownKeys(target) { self.#collection.get(); return Reflect.ownKeys(target); }, set(target, prop, value, receiver) { let result = Reflect.set(target, prop, value, receiver); self.#dirtyStorageFor(prop); self.#dirtyCollection(); return result; }, deleteProperty(target, prop) { if (prop in target) { delete target[prop]; self.#dirtyStorageFor(prop); self.#dirtyCollection(); } return true; }, getPrototypeOf() { return SignalObjectImpl.prototype; }, }); } #readStorageFor(key) { let storage = this.#storages.get(key); if (storage === void 0) { storage = createStorage(); this.#storages.set(key, storage); } storage.get(); } #dirtyStorageFor(key) { const storage = this.#storages.get(key); if (storage) storage.set(null); } #dirtyCollection() { this.#collection.set(null); } }; var SignalSet = class { collection = createStorage(); storages = /* @__PURE__ */ new Map(); vals; storageFor(key) { const storages = this.storages; let storage = storages.get(key); if (storage === void 0) { storage = createStorage(); storages.set(key, storage); } return storage; } dirtyStorageFor(key) { const storage = this.storages.get(key); if (storage) storage.set(null); } constructor(existing) { this.vals = new Set(existing); } has(value) { this.storageFor(value).get(); return this.vals.has(value); } entries() { this.collection.get(); return this.vals.entries(); } keys() { this.collection.get(); return this.vals.keys(); } values() { this.collection.get(); return this.vals.values(); } forEach(fn) { this.collection.get(); this.vals.forEach(fn); } get size() { this.collection.get(); return this.vals.size; } [Symbol.iterator]() { this.collection.get(); return this.vals[Symbol.iterator](); } get [Symbol.toStringTag]() { return this.vals[Symbol.toStringTag]; } add(value) { this.dirtyStorageFor(value); this.collection.set(null); this.vals.add(value); return this; } delete(value) { this.dirtyStorageFor(value); this.collection.set(null); return this.vals.delete(value); } clear() { this.storages.forEach((s) => s.set(null)); this.collection.set(null); this.vals.clear(); } }; Object.setPrototypeOf(SignalSet.prototype, Set.prototype); function create() { return new A2uiMessageProcessor({ arrayCtor: SignalArray, mapCtor: SignalMap, objCtor: SignalObject, setCtor: SignalSet, }); } const Data = { createSignalA2uiMessageProcessor: create, A2uiMessageProcessor, Guards: guards_exports, }; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const t$1 = (t) => (e, o) => { void 0 !== o ? o.addInitializer(() => { customElements.define(t, e); }) : customElements.define(t, e); }; /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const o$9 = { attribute: !0, type: String, converter: u$3, reflect: !1, hasChanged: f$3, }, r$7 = (t = o$9, e, r) => { const { kind: n, metadata: i } = r; let s = globalThis.litPropertyMetadata.get(i); if ( (void 0 === s && globalThis.litPropertyMetadata.set(i, (s = /* @__PURE__ */ new Map())), "setter" === n && ((t = Object.create(t)).wrapped = !0), s.set(r.name, t), "accessor" === n) ) { const { name: o } = r; return { set(r) { const n = e.get.call(this); (e.set.call(this, r), this.requestUpdate(o, n, t, !0, r)); }, init(e) { return (void 0 !== e && this.C(o, void 0, t, e), e); }, }; } if ("setter" === n) { const { name: o } = r; return function (r) { const n = this[o]; (e.call(this, r), this.requestUpdate(o, n, t, !0, r)); }; } throw Error("Unsupported decorator location: " + n); }; function n$6(t) { return (e, o) => "object" == typeof o ? r$7(t, e, o) : ((t, e, o) => { const r = e.hasOwnProperty(o); return ( e.constructor.createProperty(o, t), r ? Object.getOwnPropertyDescriptor(e, o) : void 0 ); })(t, e, o); } /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ function r$6(r) { return n$6({ ...r, state: !0, attribute: !1, }); } /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const e$6 = (e, t, c) => ( (c.configurable = !0), (c.enumerable = !0), Reflect.decorate && "object" != typeof t && Object.defineProperty(e, t, c), c ); /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ function e$5(e, r) { return (n, s, i) => { const o = (t) => t.renderRoot?.querySelector(e) ?? null; if (r) { const { get: e, set: r } = "object" == typeof s ? n : (i ?? (() => { const t = Symbol(); return { get() { return this[t]; }, set(e) { this[t] = e; }, }; })()); return e$6(n, s, { get() { let t = e.call(this); return ( void 0 === t && ((t = o(this)), (null !== t || this.hasUpdated) && r.call(this, t)), t ); }, }); } return e$6(n, s, { get() { return o(this); }, }); }; } /** * @license * Copyright 2023 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ let i$2 = !1; const s$1 = new Signal.subtle.Watcher(() => { i$2 || ((i$2 = !0), queueMicrotask(() => { i$2 = !1; for (const t of s$1.getPending()) t.get(); s$1.watch(); })); }), h$3 = Symbol("SignalWatcherBrand"), e$3 = new FinalizationRegistry((i) => { i.unwatch(...Signal.subtle.introspectSources(i)); }), n$4 = /* @__PURE__ */ new WeakMap(); function o$7(i) { return !0 === i[h$3] ? (console.warn("SignalWatcher should not be applied to the same class more than once."), i) : class extends i { constructor() { (super(...arguments), (this._$St = /* @__PURE__ */ new Map()), (this._$So = new Signal.State(0)), (this._$Si = !1)); } _$Sl() { var t, i; const s = [], h = []; this._$St.forEach((t, i) => { ((null == t ? void 0 : t.beforeUpdate) ? s : h).push(i); }); const e = null === (t = this.h) || void 0 === t ? void 0 : t.getPending().filter((t) => t !== this._$Su && !this._$St.has(t)); (s.forEach((t) => t.get()), null === (i = this._$Su) || void 0 === i || i.get(), e.forEach((t) => t.get()), h.forEach((t) => t.get())); } _$Sv() { this.isUpdatePending || queueMicrotask(() => { this.isUpdatePending || this._$Sl(); }); } _$S_() { if (void 0 !== this.h) return; this._$Su = new Signal.Computed(() => { (this._$So.get(), super.performUpdate()); }); const i = (this.h = new Signal.subtle.Watcher(function () { const t = n$4.get(this); void 0 !== t && (!1 === t._$Si && (new Set(this.getPending()).has(t._$Su) ? t.requestUpdate() : t._$Sv()), this.watch()); })); (n$4.set(i, this), e$3.register(this, i), i.watch(this._$Su), i.watch(...Array.from(this._$St).map(([t]) => t))); } _$Sp() { if (void 0 === this.h) return; let i = !1; (this.h.unwatch( ...Signal.subtle.introspectSources(this.h).filter((t) => { var s; const h = !0 !== (null === (s = this._$St.get(t)) || void 0 === s ? void 0 : s.manualDispose); return (h && this._$St.delete(t), i || (i = !h), h); }), ), i || ((this._$Su = void 0), (this.h = void 0), this._$St.clear())); } updateEffect(i, s) { var h; this._$S_(); const e = new Signal.Computed(() => { i(); }); return ( this.h.watch(e), this._$St.set(e, s), null !== (h = null == s ? void 0 : s.beforeUpdate) && void 0 !== h && h ? Signal.subtle.untrack(() => e.get()) : this.updateComplete.then(() => Signal.subtle.untrack(() => e.get())), () => { (this._$St.delete(e), this.h.unwatch(e), !1 === this.isConnected && this._$Sp()); } ); } performUpdate() { this.isUpdatePending && (this._$S_(), (this._$Si = !0), this._$So.set(this._$So.get() + 1), (this._$Si = !1), this._$Sl()); } connectedCallback() { (super.connectedCallback(), this.requestUpdate()); } disconnectedCallback() { (super.disconnectedCallback(), queueMicrotask(() => { !1 === this.isConnected && this._$Sp(); })); } }; } /** * @license * Copyright 2017 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const s = (i, t) => { const e = i._$AN; if (void 0 === e) return !1; for (const i of e) (i._$AO?.(t, !1), s(i, t)); return !0; }, o$6 = (i) => { let t, e; do { if (void 0 === (t = i._$AM)) break; ((e = t._$AN), e.delete(i), (i = t)); } while (0 === e?.size); }, r$3 = (i) => { for (let t; (t = i._$AM); i = t) { let e = t._$AN; if (void 0 === e) t._$AN = e = /* @__PURE__ */ new Set(); else if (e.has(i)) break; (e.add(i), c(t)); } }; function h$2(i) { void 0 !== this._$AN ? (o$6(this), (this._$AM = i), r$3(this)) : (this._$AM = i); } function n$3(i, t = !1, e = 0) { const r = this._$AH, h = this._$AN; if (void 0 !== h && 0 !== h.size) if (t) if (Array.isArray(r)) for (let i = e; i < r.length; i++) (s(r[i], !1), o$6(r[i])); else null != r && (s(r, !1), o$6(r)); else s(this, i); } const c = (i) => { i.type == t$4.CHILD && ((i._$AP ??= n$3), (i._$AQ ??= h$2)); }; var f = class extends i$5 { constructor() { (super(...arguments), (this._$AN = void 0)); } _$AT(i, t, e) { (super._$AT(i, t, e), r$3(this), (this.isConnected = i._$AU)); } _$AO(i, t = !0) { (i !== this.isConnected && ((this.isConnected = i), i ? this.reconnected?.() : this.disconnected?.()), t && (s(this, i), o$6(this))); } setValue(t) { if (r$8(this._$Ct)) this._$Ct._$AI(t, this); else { const i = [...this._$Ct._$AH]; ((i[this._$Ci] = t), this._$Ct._$AI(i, this, 0)); } } disconnected() {} reconnected() {} }; /** * @license * Copyright 2023 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ let o$5 = !1; const n$2 = new Signal.subtle.Watcher(async () => { o$5 || ((o$5 = !0), queueMicrotask(() => { o$5 = !1; for (const i of n$2.getPending()) i.get(); n$2.watch(); })); }); var r$2 = class extends f { _$S_() { var i, t; void 0 === this._$Sm && ((this._$Sj = new Signal.Computed(() => { var i; const t = null === (i = this._$SW) || void 0 === i ? void 0 : i.get(); return (this.setValue(t), t); })), (this._$Sm = null !== (t = null === (i = this._$Sk) || void 0 === i ? void 0 : i.h) && void 0 !== t ? t : n$2), this._$Sm.watch(this._$Sj), Signal.subtle.untrack(() => { var i; return null === (i = this._$Sj) || void 0 === i ? void 0 : i.get(); })); } _$Sp() { void 0 !== this._$Sm && (this._$Sm.unwatch(this._$SW), (this._$Sm = void 0)); } render(i) { return Signal.subtle.untrack(() => i.get()); } update(i, [t]) { var o, n; return ( (null !== (o = this._$Sk) && void 0 !== o) || (this._$Sk = null === (n = i.options) || void 0 === n ? void 0 : n.host), t !== this._$SW && void 0 !== this._$SW && this._$Sp(), (this._$SW = t), this._$S_(), Signal.subtle.untrack(() => this._$SW.get()) ); } disconnected() { this._$Sp(); } reconnected() { this._$S_(); } }; const h$1 = e$10(r$2), m = (o) => (t, ...m) => o( t, ...m.map((o) => (o instanceof Signal.State || o instanceof Signal.Computed ? h$1(o) : o)), ); m(b); m(w); Signal.State; Signal.Computed; /** * @license * Copyright 2021 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ function* o$3(o, f) { if (void 0 !== o) { let i = 0; for (const t of o) yield f(t, i++); } } let pending = false; let watcher = new Signal.subtle.Watcher(() => { if (!pending) { pending = true; queueMicrotask(() => { pending = false; flushPending(); }); } }); function flushPending() { for (const signal of watcher.getPending()) signal.get(); watcher.watch(); } /** * ⚠️ WARNING: Nothing unwatches ⚠️ * This will produce a memory leak. */ function effect(cb) { let c = new Signal.Computed(() => cb()); watcher.watch(c); c.get(); return () => { watcher.unwatch(c); }; } const themeContext = n$7("A2UITheme"); const structuralStyles = r$11(structuralStyles$1); var ComponentRegistry = class { constructor() { this.registry = /* @__PURE__ */ new Map(); } register(typeName, constructor, tagName) { if (!/^[a-zA-Z0-9]+$/.test(typeName)) throw new Error(`[Registry] Invalid typeName '${typeName}'. Must be alphanumeric.`); this.registry.set(typeName, constructor); const actualTagName = tagName || `a2ui-custom-${typeName.toLowerCase()}`; const existingName = customElements.getName(constructor); if (existingName) { if (existingName !== actualTagName) throw new Error( `Component ${typeName} is already registered as ${existingName}, but requested as ${actualTagName}.`, ); return; } if (!customElements.get(actualTagName)) customElements.define(actualTagName, constructor); } get(typeName) { return this.registry.get(typeName); } }; const componentRegistry = new ComponentRegistry(); var __runInitializers$19 = function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); return useValue ? value : void 0; }; var __esDecorate$19 = function ( ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers, ) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? (contextIn["static"] ? ctor : ctor.prototype) : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])( kind === "accessor" ? { get: descriptor.get, set: descriptor.set, } : descriptor[key], context, ); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if ((_ = accept(result.get))) descriptor.get = _; if ((_ = accept(result.set))) descriptor.set = _; if ((_ = accept(result.init))) initializers.unshift(_); } else if ((_ = accept(result))) if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; let Root = (() => { let _classDecorators = [t$1("a2ui-root")]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = o$7(i$6); let _instanceExtraInitializers = []; let _surfaceId_decorators; let _surfaceId_initializers = []; let _surfaceId_extraInitializers = []; let _component_decorators; let _component_initializers = []; let _component_extraInitializers = []; let _theme_decorators; let _theme_initializers = []; let _theme_extraInitializers = []; let _childComponents_decorators; let _childComponents_initializers = []; let _childComponents_extraInitializers = []; let _processor_decorators; let _processor_initializers = []; let _processor_extraInitializers = []; let _dataContextPath_decorators; let _dataContextPath_initializers = []; let _dataContextPath_extraInitializers = []; let _enableCustomElements_decorators; let _enableCustomElements_initializers = []; let _enableCustomElements_extraInitializers = []; let _set_weight_decorators; var Root = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _surfaceId_decorators = [n$6()]; _component_decorators = [n$6()]; _theme_decorators = [c$1({ context: themeContext })]; _childComponents_decorators = [n$6({ attribute: false })]; _processor_decorators = [n$6({ attribute: false })]; _dataContextPath_decorators = [n$6()]; _enableCustomElements_decorators = [n$6()]; _set_weight_decorators = [n$6()]; __esDecorate$19( this, null, _surfaceId_decorators, { kind: "accessor", name: "surfaceId", static: false, private: false, access: { has: (obj) => "surfaceId" in obj, get: (obj) => obj.surfaceId, set: (obj, value) => { obj.surfaceId = value; }, }, metadata: _metadata, }, _surfaceId_initializers, _surfaceId_extraInitializers, ); __esDecorate$19( this, null, _component_decorators, { kind: "accessor", name: "component", static: false, private: false, access: { has: (obj) => "component" in obj, get: (obj) => obj.component, set: (obj, value) => { obj.component = value; }, }, metadata: _metadata, }, _component_initializers, _component_extraInitializers, ); __esDecorate$19( this, null, _theme_decorators, { kind: "accessor", name: "theme", static: false, private: false, access: { has: (obj) => "theme" in obj, get: (obj) => obj.theme, set: (obj, value) => { obj.theme = value; }, }, metadata: _metadata, }, _theme_initializers, _theme_extraInitializers, ); __esDecorate$19( this, null, _childComponents_decorators, { kind: "accessor", name: "childComponents", static: false, private: false, access: { has: (obj) => "childComponents" in obj, get: (obj) => obj.childComponents, set: (obj, value) => { obj.childComponents = value; }, }, metadata: _metadata, }, _childComponents_initializers, _childComponents_extraInitializers, ); __esDecorate$19( this, null, _processor_decorators, { kind: "accessor", name: "processor", static: false, private: false, access: { has: (obj) => "processor" in obj, get: (obj) => obj.processor, set: (obj, value) => { obj.processor = value; }, }, metadata: _metadata, }, _processor_initializers, _processor_extraInitializers, ); __esDecorate$19( this, null, _dataContextPath_decorators, { kind: "accessor", name: "dataContextPath", static: false, private: false, access: { has: (obj) => "dataContextPath" in obj, get: (obj) => obj.dataContextPath, set: (obj, value) => { obj.dataContextPath = value; }, }, metadata: _metadata, }, _dataContextPath_initializers, _dataContextPath_extraInitializers, ); __esDecorate$19( this, null, _enableCustomElements_decorators, { kind: "accessor", name: "enableCustomElements", static: false, private: false, access: { has: (obj) => "enableCustomElements" in obj, get: (obj) => obj.enableCustomElements, set: (obj, value) => { obj.enableCustomElements = value; }, }, metadata: _metadata, }, _enableCustomElements_initializers, _enableCustomElements_extraInitializers, ); __esDecorate$19( this, null, _set_weight_decorators, { kind: "setter", name: "weight", static: false, private: false, access: { has: (obj) => "weight" in obj, set: (obj, value) => { obj.weight = value; }, }, metadata: _metadata, }, null, _instanceExtraInitializers, ); __esDecorate$19( null, (_classDescriptor = { value: _classThis }), _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata, }, null, _classExtraInitializers, ); Root = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata, }); } #surfaceId_accessor_storage = (__runInitializers$19(this, _instanceExtraInitializers), __runInitializers$19(this, _surfaceId_initializers, null)); get surfaceId() { return this.#surfaceId_accessor_storage; } set surfaceId(value) { this.#surfaceId_accessor_storage = value; } #component_accessor_storage = (__runInitializers$19(this, _surfaceId_extraInitializers), __runInitializers$19(this, _component_initializers, null)); get component() { return this.#component_accessor_storage; } set component(value) { this.#component_accessor_storage = value; } #theme_accessor_storage = (__runInitializers$19(this, _component_extraInitializers), __runInitializers$19(this, _theme_initializers, void 0)); get theme() { return this.#theme_accessor_storage; } set theme(value) { this.#theme_accessor_storage = value; } #childComponents_accessor_storage = (__runInitializers$19(this, _theme_extraInitializers), __runInitializers$19(this, _childComponents_initializers, null)); get childComponents() { return this.#childComponents_accessor_storage; } set childComponents(value) { this.#childComponents_accessor_storage = value; } #processor_accessor_storage = (__runInitializers$19(this, _childComponents_extraInitializers), __runInitializers$19(this, _processor_initializers, null)); get processor() { return this.#processor_accessor_storage; } set processor(value) { this.#processor_accessor_storage = value; } #dataContextPath_accessor_storage = (__runInitializers$19(this, _processor_extraInitializers), __runInitializers$19(this, _dataContextPath_initializers, "")); get dataContextPath() { return this.#dataContextPath_accessor_storage; } set dataContextPath(value) { this.#dataContextPath_accessor_storage = value; } #enableCustomElements_accessor_storage = (__runInitializers$19(this, _dataContextPath_extraInitializers), __runInitializers$19(this, _enableCustomElements_initializers, false)); get enableCustomElements() { return this.#enableCustomElements_accessor_storage; } set enableCustomElements(value) { this.#enableCustomElements_accessor_storage = value; } set weight(weight) { this.#weight = weight; this.style.setProperty("--weight", `${weight}`); } get weight() { return this.#weight; } #weight = (__runInitializers$19(this, _enableCustomElements_extraInitializers), 1); static { this.styles = [ structuralStyles, i$9` :host { display: flex; flex-direction: column; gap: 8px; max-height: 80%; } `, ]; } /** * Holds the cleanup function for our effect. * We need this to stop the effect when the component is disconnected. */ #lightDomEffectDisposer = null; willUpdate(changedProperties) { if (changedProperties.has("childComponents")) { if (this.#lightDomEffectDisposer) this.#lightDomEffectDisposer(); this.#lightDomEffectDisposer = effect(() => { const allChildren = this.childComponents ?? null; D(this.renderComponentTree(allChildren), this, { host: this }); }); } } /** * Clean up the effect when the component is removed from the DOM. */ disconnectedCallback() { super.disconnectedCallback(); if (this.#lightDomEffectDisposer) this.#lightDomEffectDisposer(); } /** * Turns the SignalMap into a renderable TemplateResult for Lit. */ renderComponentTree(components) { if (!components) return A; if (!Array.isArray(components)) return A; return b` ${o$3(components, (component) => { if (this.enableCustomElements) { const elCtor = componentRegistry.get(component.type) || customElements.get(component.type); if (elCtor) { const node = component; const el = new elCtor(); el.id = node.id; if (node.slotName) el.slot = node.slotName; el.component = node; el.weight = node.weight ?? "initial"; el.processor = this.processor; el.surfaceId = this.surfaceId; el.dataContextPath = node.dataContextPath ?? "/"; for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; return b`${el}`; } } switch (component.type) { case "List": { const node = component; const childComponents = node.properties.children; return b``; } case "Card": { const node = component; let childComponents = node.properties.children; if (!childComponents && node.properties.child) childComponents = [node.properties.child]; return b``; } case "Column": { const node = component; return b``; } case "Row": { const node = component; return b``; } case "Image": { const node = component; return b``; } case "Icon": { const node = component; return b``; } case "AudioPlayer": { const node = component; return b``; } case "Button": { const node = component; return b``; } case "Text": { const node = component; return b``; } case "CheckBox": { const node = component; return b``; } case "DateTimeInput": { const node = component; return b``; } case "Divider": { const node = component; return b``; } case "MultipleChoice": { const node = component; return b``; } case "Slider": { const node = component; return b``; } case "TextField": { const node = component; return b``; } case "Video": { const node = component; return b``; } case "Tabs": { const node = component; const titles = []; const childComponents = []; if (node.properties.tabItems) for (const item of node.properties.tabItems) { titles.push(item.title); childComponents.push(item.child); } return b``; } case "Modal": { const node = component; const childComponents = [node.properties.entryPointChild, node.properties.contentChild]; node.properties.entryPointChild.slotName = "entry"; return b``; } default: return this.renderCustomComponent(component); } })}`; } renderCustomComponent(component) { if (!this.enableCustomElements) return; const node = component; const elCtor = componentRegistry.get(component.type) || customElements.get(component.type); if (!elCtor) return b`Unknown element ${component.type}`; const el = new elCtor(); el.id = node.id; if (node.slotName) el.slot = node.slotName; el.component = node; el.weight = node.weight ?? "initial"; el.processor = this.processor; el.surfaceId = this.surfaceId; el.dataContextPath = node.dataContextPath ?? "/"; for (const [prop, val] of Object.entries(component.properties)) el[prop] = val; return b`${el}`; } render() { return b``; } static { __runInitializers$19(_classThis, _classExtraInitializers); } }; return _classThis; })(); /** * @license * Copyright 2018 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const e$2 = e$10( class extends i$5 { constructor(t) { if ((super(t), t.type !== t$4.ATTRIBUTE || "class" !== t.name || t.strings?.length > 2)) throw Error( "`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.", ); } render(t) { return ( " " + Object.keys(t) .filter((s) => t[s]) .join(" ") + " " ); } update(s, [i]) { if (void 0 === this.st) { ((this.st = /* @__PURE__ */ new Set()), void 0 !== s.strings && (this.nt = new Set( s.strings .join(" ") .split(/\s/) .filter((t) => "" !== t), ))); for (const t in i) i[t] && !this.nt?.has(t) && this.st.add(t); return this.render(i); } const r = s.element.classList; for (const t of this.st) t in i || (r.remove(t), this.st.delete(t)); for (const t in i) { const s = !!i[t]; s === this.st.has(t) || this.nt?.has(t) || (s ? (r.add(t), this.st.add(t)) : (r.remove(t), this.st.delete(t))); } return E; } }, ); /** * @license * Copyright 2018 Google LLC * SPDX-License-Identifier: BSD-3-Clause */ const n$1 = "important", i = " !" + n$1, o$2 = e$10( class extends i$5 { constructor(t) { if ((super(t), t.type !== t$4.ATTRIBUTE || "style" !== t.name || t.strings?.length > 2)) throw Error( "The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.", ); } render(t) { return Object.keys(t).reduce((e, r) => { const s = t[r]; return null == s ? e : e + `${(r = r.includes("-") ? r : r.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g, "-$&").toLowerCase())}:${s};`; }, ""); } update(e, [r]) { const { style: s } = e.element; if (void 0 === this.ft) return ((this.ft = new Set(Object.keys(r))), this.render(r)); for (const t of this.ft) null == r[t] && (this.ft.delete(t), t.includes("-") ? s.removeProperty(t) : (s[t] = null)); for (const t in r) { const e = r[t]; if (null != e) { this.ft.add(t); const r = "string" == typeof e && e.endsWith(i); t.includes("-") || r ? s.setProperty(t, r ? e.slice(0, -11) : e, r ? n$1 : "") : (s[t] = e); } } return E; } }, ); var __esDecorate$18 = function ( ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers, ) { function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; var target = !descriptorIn && ctor ? (contextIn["static"] ? ctor : ctor.prototype) : null; var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); var _, done = false; for (var i = decorators.length - 1; i >= 0; i--) { var context = {}; for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; for (var p in contextIn.access) context.access[p] = contextIn.access[p]; context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; var result = (0, decorators[i])( kind === "accessor" ? { get: descriptor.get, set: descriptor.set, } : descriptor[key], context, ); if (kind === "accessor") { if (result === void 0) continue; if (result === null || typeof result !== "object") throw new TypeError("Object expected"); if ((_ = accept(result.get))) descriptor.get = _; if ((_ = accept(result.set))) descriptor.set = _; if ((_ = accept(result.init))) initializers.unshift(_); } else if ((_ = accept(result))) if (kind === "field") initializers.unshift(_); else descriptor[key] = _; } if (target) Object.defineProperty(target, contextIn.name, descriptor); done = true; }; var __runInitializers$18 = function (thisArg, initializers, value) { var useValue = arguments.length > 2; for (var i = 0; i < initializers.length; i++) value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); return useValue ? value : void 0; }; (() => { let _classDecorators = [t$1("a2ui-audioplayer")]; let _classDescriptor; let _classExtraInitializers = []; let _classThis; let _classSuper = Root; let _url_decorators; let _url_initializers = []; let _url_extraInitializers = []; var Audio = class extends _classSuper { static { _classThis = this; } static { const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0; _url_decorators = [n$6()]; __esDecorate$18( this, null, _url_decorators, { kind: "accessor", name: "url", static: false, private: false, access: { has: (obj) => "url" in obj, get: (obj) => obj.url, set: (obj, value) => { obj.url = value; }, }, metadata: _metadata, }, _url_initializers, _url_extraInitializers, ); __esDecorate$18( null, (_classDescriptor = { value: _classThis }), _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata, }, null, _classExtraInitializers, ); Audio = _classThis = _classDescriptor.value; if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata, }); } #url_accessor_storage = __runInitializers$18(this, _url_initializers, null); get url() { return this.#url_accessor_storage; } set url(value) { this.#url_accessor_storage = value; } static { this.styles = [ structuralStyles, i$9` * { box-sizing: border-box; } :host { display: block; flex: var(--weight); min-height: 0; overflow: auto; } audio { display: block; width: 100%; } `, ]; } #renderAudio() { if (!this.url) return A; if (this.url && typeof this.url === "object") { if ("literalString" in this.url) return b`