@wral/hsot-data 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,200 +1,200 @@
1
- const Z = globalThis, dt = Z.ShadowRoot && (Z.ShadyCSS === void 0 || Z.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, pt = /* @__PURE__ */ Symbol(), St = /* @__PURE__ */ new WeakMap();
2
- let Gt = class {
3
- constructor(t, e, s) {
4
- if (this._$cssResult$ = !0, s !== pt) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
5
- this.cssText = t, this.t = e;
1
+ const J = globalThis, pe = J.ShadowRoot && (J.ShadyCSS === void 0 || J.ShadyCSS.nativeShadow) && "adoptedStyleSheets" in Document.prototype && "replace" in CSSStyleSheet.prototype, me = /* @__PURE__ */ Symbol(), _e = /* @__PURE__ */ new WeakMap();
2
+ let je = class {
3
+ constructor(e, t, s) {
4
+ if (this._$cssResult$ = !0, s !== me) throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");
5
+ this.cssText = e, this.t = t;
6
6
  }
7
7
  get styleSheet() {
8
- let t = this.o;
9
- const e = this.t;
10
- if (dt && t === void 0) {
11
- const s = e !== void 0 && e.length === 1;
12
- s && (t = St.get(e)), t === void 0 && ((this.o = t = new CSSStyleSheet()).replaceSync(this.cssText), s && St.set(e, t));
8
+ let e = this.o;
9
+ const t = this.t;
10
+ if (pe && e === void 0) {
11
+ const s = t !== void 0 && t.length === 1;
12
+ s && (e = _e.get(t)), e === void 0 && ((this.o = e = new CSSStyleSheet()).replaceSync(this.cssText), s && _e.set(t, e));
13
13
  }
14
- return t;
14
+ return e;
15
15
  }
16
16
  toString() {
17
17
  return this.cssText;
18
18
  }
19
19
  };
20
- const ue = (a) => new Gt(typeof a == "string" ? a : a + "", void 0, pt), y = (a, ...t) => {
21
- const e = a.length === 1 ? a[0] : t.reduce((s, r, o) => s + ((n) => {
20
+ const $t = (r) => new je(typeof r == "string" ? r : r + "", void 0, me), w = (r, ...e) => {
21
+ const t = r.length === 1 ? r[0] : e.reduce((s, a, o) => s + ((n) => {
22
22
  if (n._$cssResult$ === !0) return n.cssText;
23
23
  if (typeof n == "number") return n;
24
24
  throw Error("Value passed to 'css' function must be a 'css' function result: " + n + ". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.");
25
- })(r) + a[o + 1], a[0]);
26
- return new Gt(e, a, pt);
27
- }, fe = (a, t) => {
28
- if (dt) a.adoptedStyleSheets = t.map((e) => e instanceof CSSStyleSheet ? e : e.styleSheet);
29
- else for (const e of t) {
30
- const s = document.createElement("style"), r = Z.litNonce;
31
- r !== void 0 && s.setAttribute("nonce", r), s.textContent = e.cssText, a.appendChild(s);
32
- }
33
- }, _t = dt ? (a) => a : (a) => a instanceof CSSStyleSheet ? ((t) => {
34
- let e = "";
35
- for (const s of t.cssRules) e += s.cssText;
36
- return ue(e);
37
- })(a) : a;
38
- const { is: ge, defineProperty: ve, getOwnPropertyDescriptor: $e, getOwnPropertyNames: be, getOwnPropertySymbols: ye, getPrototypeOf: we } = Object, at = globalThis, At = at.trustedTypes, xe = At ? At.emptyScript : "", ke = at.reactiveElementPolyfillSupport, L = (a, t) => a, ht = { toAttribute(a, t) {
39
- switch (t) {
25
+ })(a) + r[o + 1], r[0]);
26
+ return new je(t, r, me);
27
+ }, bt = (r, e) => {
28
+ if (pe) r.adoptedStyleSheets = e.map((t) => t instanceof CSSStyleSheet ? t : t.styleSheet);
29
+ else for (const t of e) {
30
+ const s = document.createElement("style"), a = J.litNonce;
31
+ a !== void 0 && s.setAttribute("nonce", a), s.textContent = t.cssText, r.appendChild(s);
32
+ }
33
+ }, Te = pe ? (r) => r : (r) => r instanceof CSSStyleSheet ? ((e) => {
34
+ let t = "";
35
+ for (const s of e.cssRules) t += s.cssText;
36
+ return $t(t);
37
+ })(r) : r;
38
+ const { is: yt, defineProperty: wt, getOwnPropertyDescriptor: xt, getOwnPropertyNames: kt, getOwnPropertySymbols: St, getPrototypeOf: _t } = Object, ae = globalThis, Ae = ae.trustedTypes, Tt = Ae ? Ae.emptyScript : "", At = ae.reactiveElementPolyfillSupport, G = (r, e) => r, de = { toAttribute(r, e) {
39
+ switch (e) {
40
40
  case Boolean:
41
- a = a ? xe : null;
41
+ r = r ? Tt : null;
42
42
  break;
43
43
  case Object:
44
44
  case Array:
45
- a = a == null ? a : JSON.stringify(a);
45
+ r = r == null ? r : JSON.stringify(r);
46
46
  }
47
- return a;
48
- }, fromAttribute(a, t) {
49
- let e = a;
50
- switch (t) {
47
+ return r;
48
+ }, fromAttribute(r, e) {
49
+ let t = r;
50
+ switch (e) {
51
51
  case Boolean:
52
- e = a !== null;
52
+ t = r !== null;
53
53
  break;
54
54
  case Number:
55
- e = a === null ? null : Number(a);
55
+ t = r === null ? null : Number(r);
56
56
  break;
57
57
  case Object:
58
58
  case Array:
59
59
  try {
60
- e = JSON.parse(a);
60
+ t = JSON.parse(r);
61
61
  } catch {
62
- e = null;
62
+ t = null;
63
63
  }
64
64
  }
65
- return e;
66
- } }, jt = (a, t) => !ge(a, t), Tt = { attribute: !0, type: String, converter: ht, reflect: !1, useDefault: !1, hasChanged: jt };
67
- Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), at.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
65
+ return t;
66
+ } }, qe = (r, e) => !yt(r, e), Ie = { attribute: !0, type: String, converter: de, reflect: !1, useDefault: !1, hasChanged: qe };
67
+ Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), ae.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
68
68
  let z = class extends HTMLElement {
69
- static addInitializer(t) {
70
- this._$Ei(), (this.l ??= []).push(t);
69
+ static addInitializer(e) {
70
+ this._$Ei(), (this.l ??= []).push(e);
71
71
  }
72
72
  static get observedAttributes() {
73
73
  return this.finalize(), this._$Eh && [...this._$Eh.keys()];
74
74
  }
75
- static createProperty(t, e = Tt) {
76
- if (e.state && (e.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(t) && ((e = Object.create(e)).wrapped = !0), this.elementProperties.set(t, e), !e.noAccessor) {
77
- const s = /* @__PURE__ */ Symbol(), r = this.getPropertyDescriptor(t, s, e);
78
- r !== void 0 && ve(this.prototype, t, r);
75
+ static createProperty(e, t = Ie) {
76
+ if (t.state && (t.attribute = !1), this._$Ei(), this.prototype.hasOwnProperty(e) && ((t = Object.create(t)).wrapped = !0), this.elementProperties.set(e, t), !t.noAccessor) {
77
+ const s = /* @__PURE__ */ Symbol(), a = this.getPropertyDescriptor(e, s, t);
78
+ a !== void 0 && wt(this.prototype, e, a);
79
79
  }
80
80
  }
81
- static getPropertyDescriptor(t, e, s) {
82
- const { get: r, set: o } = $e(this.prototype, t) ?? { get() {
83
- return this[e];
81
+ static getPropertyDescriptor(e, t, s) {
82
+ const { get: a, set: o } = xt(this.prototype, e) ?? { get() {
83
+ return this[t];
84
84
  }, set(n) {
85
- this[e] = n;
85
+ this[t] = n;
86
86
  } };
87
- return { get: r, set(n) {
88
- const i = r?.call(this);
89
- o?.call(this, n), this.requestUpdate(t, i, s);
87
+ return { get: a, set(n) {
88
+ const i = a?.call(this);
89
+ o?.call(this, n), this.requestUpdate(e, i, s);
90
90
  }, configurable: !0, enumerable: !0 };
91
91
  }
92
- static getPropertyOptions(t) {
93
- return this.elementProperties.get(t) ?? Tt;
92
+ static getPropertyOptions(e) {
93
+ return this.elementProperties.get(e) ?? Ie;
94
94
  }
95
95
  static _$Ei() {
96
- if (this.hasOwnProperty(L("elementProperties"))) return;
97
- const t = we(this);
98
- t.finalize(), t.l !== void 0 && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
96
+ if (this.hasOwnProperty(G("elementProperties"))) return;
97
+ const e = _t(this);
98
+ e.finalize(), e.l !== void 0 && (this.l = [...e.l]), this.elementProperties = new Map(e.elementProperties);
99
99
  }
100
100
  static finalize() {
101
- if (this.hasOwnProperty(L("finalized"))) return;
102
- if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(L("properties"))) {
103
- const e = this.properties, s = [...be(e), ...ye(e)];
104
- for (const r of s) this.createProperty(r, e[r]);
101
+ if (this.hasOwnProperty(G("finalized"))) return;
102
+ if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(G("properties"))) {
103
+ const t = this.properties, s = [...kt(t), ...St(t)];
104
+ for (const a of s) this.createProperty(a, t[a]);
105
105
  }
106
- const t = this[Symbol.metadata];
107
- if (t !== null) {
108
- const e = litPropertyMetadata.get(t);
109
- if (e !== void 0) for (const [s, r] of e) this.elementProperties.set(s, r);
106
+ const e = this[Symbol.metadata];
107
+ if (e !== null) {
108
+ const t = litPropertyMetadata.get(e);
109
+ if (t !== void 0) for (const [s, a] of t) this.elementProperties.set(s, a);
110
110
  }
111
111
  this._$Eh = /* @__PURE__ */ new Map();
112
- for (const [e, s] of this.elementProperties) {
113
- const r = this._$Eu(e, s);
114
- r !== void 0 && this._$Eh.set(r, e);
112
+ for (const [t, s] of this.elementProperties) {
113
+ const a = this._$Eu(t, s);
114
+ a !== void 0 && this._$Eh.set(a, t);
115
115
  }
116
116
  this.elementStyles = this.finalizeStyles(this.styles);
117
117
  }
118
- static finalizeStyles(t) {
119
- const e = [];
120
- if (Array.isArray(t)) {
121
- const s = new Set(t.flat(1 / 0).reverse());
122
- for (const r of s) e.unshift(_t(r));
123
- } else t !== void 0 && e.push(_t(t));
124
- return e;
118
+ static finalizeStyles(e) {
119
+ const t = [];
120
+ if (Array.isArray(e)) {
121
+ const s = new Set(e.flat(1 / 0).reverse());
122
+ for (const a of s) t.unshift(Te(a));
123
+ } else e !== void 0 && t.push(Te(e));
124
+ return t;
125
125
  }
126
- static _$Eu(t, e) {
127
- const s = e.attribute;
128
- return s === !1 ? void 0 : typeof s == "string" ? s : typeof t == "string" ? t.toLowerCase() : void 0;
126
+ static _$Eu(e, t) {
127
+ const s = t.attribute;
128
+ return s === !1 ? void 0 : typeof s == "string" ? s : typeof e == "string" ? e.toLowerCase() : void 0;
129
129
  }
130
130
  constructor() {
131
131
  super(), this._$Ep = void 0, this.isUpdatePending = !1, this.hasUpdated = !1, this._$Em = null, this._$Ev();
132
132
  }
133
133
  _$Ev() {
134
- this._$ES = new Promise((t) => this.enableUpdating = t), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach((t) => t(this));
134
+ this._$ES = new Promise((e) => this.enableUpdating = e), this._$AL = /* @__PURE__ */ new Map(), this._$E_(), this.requestUpdate(), this.constructor.l?.forEach((e) => e(this));
135
135
  }
136
- addController(t) {
137
- (this._$EO ??= /* @__PURE__ */ new Set()).add(t), this.renderRoot !== void 0 && this.isConnected && t.hostConnected?.();
136
+ addController(e) {
137
+ (this._$EO ??= /* @__PURE__ */ new Set()).add(e), this.renderRoot !== void 0 && this.isConnected && e.hostConnected?.();
138
138
  }
139
- removeController(t) {
140
- this._$EO?.delete(t);
139
+ removeController(e) {
140
+ this._$EO?.delete(e);
141
141
  }
142
142
  _$E_() {
143
- const t = /* @__PURE__ */ new Map(), e = this.constructor.elementProperties;
144
- for (const s of e.keys()) this.hasOwnProperty(s) && (t.set(s, this[s]), delete this[s]);
145
- t.size > 0 && (this._$Ep = t);
143
+ const e = /* @__PURE__ */ new Map(), t = this.constructor.elementProperties;
144
+ for (const s of t.keys()) this.hasOwnProperty(s) && (e.set(s, this[s]), delete this[s]);
145
+ e.size > 0 && (this._$Ep = e);
146
146
  }
147
147
  createRenderRoot() {
148
- const t = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);
149
- return fe(t, this.constructor.elementStyles), t;
148
+ const e = this.shadowRoot ?? this.attachShadow(this.constructor.shadowRootOptions);
149
+ return bt(e, this.constructor.elementStyles), e;
150
150
  }
151
151
  connectedCallback() {
152
- this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(!0), this._$EO?.forEach((t) => t.hostConnected?.());
152
+ this.renderRoot ??= this.createRenderRoot(), this.enableUpdating(!0), this._$EO?.forEach((e) => e.hostConnected?.());
153
153
  }
154
- enableUpdating(t) {
154
+ enableUpdating(e) {
155
155
  }
156
156
  disconnectedCallback() {
157
- this._$EO?.forEach((t) => t.hostDisconnected?.());
157
+ this._$EO?.forEach((e) => e.hostDisconnected?.());
158
158
  }
159
- attributeChangedCallback(t, e, s) {
160
- this._$AK(t, s);
159
+ attributeChangedCallback(e, t, s) {
160
+ this._$AK(e, s);
161
161
  }
162
- _$ET(t, e) {
163
- const s = this.constructor.elementProperties.get(t), r = this.constructor._$Eu(t, s);
164
- if (r !== void 0 && s.reflect === !0) {
165
- const o = (s.converter?.toAttribute !== void 0 ? s.converter : ht).toAttribute(e, s.type);
166
- this._$Em = t, o == null ? this.removeAttribute(r) : this.setAttribute(r, o), this._$Em = null;
162
+ _$ET(e, t) {
163
+ const s = this.constructor.elementProperties.get(e), a = this.constructor._$Eu(e, s);
164
+ if (a !== void 0 && s.reflect === !0) {
165
+ const o = (s.converter?.toAttribute !== void 0 ? s.converter : de).toAttribute(t, s.type);
166
+ this._$Em = e, o == null ? this.removeAttribute(a) : this.setAttribute(a, o), this._$Em = null;
167
167
  }
168
168
  }
169
- _$AK(t, e) {
170
- const s = this.constructor, r = s._$Eh.get(t);
171
- if (r !== void 0 && this._$Em !== r) {
172
- const o = s.getPropertyOptions(r), n = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : ht;
173
- this._$Em = r;
174
- const i = n.fromAttribute(e, o.type);
175
- this[r] = i ?? this._$Ej?.get(r) ?? i, this._$Em = null;
169
+ _$AK(e, t) {
170
+ const s = this.constructor, a = s._$Eh.get(e);
171
+ if (a !== void 0 && this._$Em !== a) {
172
+ const o = s.getPropertyOptions(a), n = typeof o.converter == "function" ? { fromAttribute: o.converter } : o.converter?.fromAttribute !== void 0 ? o.converter : de;
173
+ this._$Em = a;
174
+ const i = n.fromAttribute(t, o.type);
175
+ this[a] = i ?? this._$Ej?.get(a) ?? i, this._$Em = null;
176
176
  }
177
177
  }
178
- requestUpdate(t, e, s, r = !1, o) {
179
- if (t !== void 0) {
178
+ requestUpdate(e, t, s, a = !1, o) {
179
+ if (e !== void 0) {
180
180
  const n = this.constructor;
181
- if (r === !1 && (o = this[t]), s ??= n.getPropertyOptions(t), !((s.hasChanged ?? jt)(o, e) || s.useDefault && s.reflect && o === this._$Ej?.get(t) && !this.hasAttribute(n._$Eu(t, s)))) return;
182
- this.C(t, e, s);
181
+ if (a === !1 && (o = this[e]), s ??= n.getPropertyOptions(e), !((s.hasChanged ?? qe)(o, t) || s.useDefault && s.reflect && o === this._$Ej?.get(e) && !this.hasAttribute(n._$Eu(e, s)))) return;
182
+ this.C(e, t, s);
183
183
  }
184
184
  this.isUpdatePending === !1 && (this._$ES = this._$EP());
185
185
  }
186
- C(t, e, { useDefault: s, reflect: r, wrapped: o }, n) {
187
- s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(t) && (this._$Ej.set(t, n ?? e ?? this[t]), o !== !0 || n !== void 0) || (this._$AL.has(t) || (this.hasUpdated || s || (e = void 0), this._$AL.set(t, e)), r === !0 && this._$Em !== t && (this._$Eq ??= /* @__PURE__ */ new Set()).add(t));
186
+ C(e, t, { useDefault: s, reflect: a, wrapped: o }, n) {
187
+ s && !(this._$Ej ??= /* @__PURE__ */ new Map()).has(e) && (this._$Ej.set(e, n ?? t ?? this[e]), o !== !0 || n !== void 0) || (this._$AL.has(e) || (this.hasUpdated || s || (t = void 0), this._$AL.set(e, t)), a === !0 && this._$Em !== e && (this._$Eq ??= /* @__PURE__ */ new Set()).add(e));
188
188
  }
189
189
  async _$EP() {
190
190
  this.isUpdatePending = !0;
191
191
  try {
192
192
  await this._$ES;
193
- } catch (e) {
194
- Promise.reject(e);
193
+ } catch (t) {
194
+ Promise.reject(t);
195
195
  }
196
- const t = this.scheduleUpdate();
197
- return t != null && await t, !this.isUpdatePending;
196
+ const e = this.scheduleUpdate();
197
+ return e != null && await e, !this.isUpdatePending;
198
198
  }
199
199
  scheduleUpdate() {
200
200
  return this.performUpdate();
@@ -203,28 +203,28 @@ let z = class extends HTMLElement {
203
203
  if (!this.isUpdatePending) return;
204
204
  if (!this.hasUpdated) {
205
205
  if (this.renderRoot ??= this.createRenderRoot(), this._$Ep) {
206
- for (const [r, o] of this._$Ep) this[r] = o;
206
+ for (const [a, o] of this._$Ep) this[a] = o;
207
207
  this._$Ep = void 0;
208
208
  }
209
209
  const s = this.constructor.elementProperties;
210
- if (s.size > 0) for (const [r, o] of s) {
211
- const { wrapped: n } = o, i = this[r];
212
- n !== !0 || this._$AL.has(r) || i === void 0 || this.C(r, void 0, o, i);
210
+ if (s.size > 0) for (const [a, o] of s) {
211
+ const { wrapped: n } = o, i = this[a];
212
+ n !== !0 || this._$AL.has(a) || i === void 0 || this.C(a, void 0, o, i);
213
213
  }
214
214
  }
215
- let t = !1;
216
- const e = this._$AL;
215
+ let e = !1;
216
+ const t = this._$AL;
217
217
  try {
218
- t = this.shouldUpdate(e), t ? (this.willUpdate(e), this._$EO?.forEach((s) => s.hostUpdate?.()), this.update(e)) : this._$EM();
218
+ e = this.shouldUpdate(t), e ? (this.willUpdate(t), this._$EO?.forEach((s) => s.hostUpdate?.()), this.update(t)) : this._$EM();
219
219
  } catch (s) {
220
- throw t = !1, this._$EM(), s;
220
+ throw e = !1, this._$EM(), s;
221
221
  }
222
- t && this._$AE(e);
222
+ e && this._$AE(t);
223
223
  }
224
- willUpdate(t) {
224
+ willUpdate(e) {
225
225
  }
226
- _$AE(t) {
227
- this._$EO?.forEach((e) => e.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(t)), this.updated(t);
226
+ _$AE(e) {
227
+ this._$EO?.forEach((t) => t.hostUpdated?.()), this.hasUpdated || (this.hasUpdated = !0, this.firstUpdated(e)), this.updated(e);
228
228
  }
229
229
  _$EM() {
230
230
  this._$AL = /* @__PURE__ */ new Map(), this.isUpdatePending = !1;
@@ -235,83 +235,83 @@ let z = class extends HTMLElement {
235
235
  getUpdateComplete() {
236
236
  return this._$ES;
237
237
  }
238
- shouldUpdate(t) {
238
+ shouldUpdate(e) {
239
239
  return !0;
240
240
  }
241
- update(t) {
242
- this._$Eq &&= this._$Eq.forEach((e) => this._$ET(e, this[e])), this._$EM();
241
+ update(e) {
242
+ this._$Eq &&= this._$Eq.forEach((t) => this._$ET(t, this[t])), this._$EM();
243
243
  }
244
- updated(t) {
244
+ updated(e) {
245
245
  }
246
- firstUpdated(t) {
246
+ firstUpdated(e) {
247
247
  }
248
248
  };
249
- z.elementStyles = [], z.shadowRootOptions = { mode: "open" }, z[L("elementProperties")] = /* @__PURE__ */ new Map(), z[L("finalized")] = /* @__PURE__ */ new Map(), ke?.({ ReactiveElement: z }), (at.reactiveElementVersions ??= []).push("2.1.2");
250
- const mt = globalThis, It = (a) => a, J = mt.trustedTypes, Ct = J ? J.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, qt = "$lit$", S = `lit$${Math.random().toFixed(9).slice(2)}$`, Wt = "?" + S, Se = `<${Wt}>`, I = document, G = () => I.createComment(""), j = (a) => a === null || typeof a != "object" && typeof a != "function", ut = Array.isArray, _e = (a) => ut(a) || typeof a?.[Symbol.iterator] == "function", lt = `[
251
- \f\r]`, H = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Et = /-->/g, Pt = />/g, A = RegExp(`>|${lt}(?:([^\\s"'>=/]+)(${lt}*=${lt}*(?:[^
252
- \f\r"'\`<>=]|("|')|))|$)`, "g"), Dt = /'/g, Bt = /"/g, Vt = /^(?:script|style|textarea|title)$/i, Yt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), h = Yt(1), zt = Yt(2), M = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Rt = /* @__PURE__ */ new WeakMap(), T = I.createTreeWalker(I, 129);
253
- function Kt(a, t) {
254
- if (!ut(a) || !a.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
- return Ct !== void 0 ? Ct.createHTML(t) : t;
256
- }
257
- const Ae = (a, t) => {
258
- const e = a.length - 1, s = [];
259
- let r, o = t === 2 ? "<svg>" : t === 3 ? "<math>" : "", n = H;
260
- for (let i = 0; i < e; i++) {
261
- const l = a[i];
262
- let c, d, p = -1, u = 0;
263
- for (; u < l.length && (n.lastIndex = u, d = n.exec(l), d !== null); ) u = n.lastIndex, n === H ? d[1] === "!--" ? n = Et : d[1] !== void 0 ? n = Pt : d[2] !== void 0 ? (Vt.test(d[2]) && (r = RegExp("</" + d[2], "g")), n = A) : d[3] !== void 0 && (n = A) : n === A ? d[0] === ">" ? (n = r ?? H, p = -1) : d[1] === void 0 ? p = -2 : (p = n.lastIndex - d[2].length, c = d[1], n = d[3] === void 0 ? A : d[3] === '"' ? Bt : Dt) : n === Bt || n === Dt ? n = A : n === Et || n === Pt ? n = H : (n = A, r = void 0);
264
- const f = n === A && a[i + 1].startsWith("/>") ? " " : "";
265
- o += n === H ? l + Se : p >= 0 ? (s.push(c), l.slice(0, p) + qt + l.slice(p) + S + f) : l + S + (p === -2 ? i : f);
266
- }
267
- return [Kt(a, o + (a[e] || "<?>") + (t === 2 ? "</svg>" : t === 3 ? "</math>" : "")), s];
249
+ z.elementStyles = [], z.shadowRootOptions = { mode: "open" }, z[G("elementProperties")] = /* @__PURE__ */ new Map(), z[G("finalized")] = /* @__PURE__ */ new Map(), At?.({ ReactiveElement: z }), (ae.reactiveElementVersions ??= []).push("2.1.2");
250
+ const ue = globalThis, Ee = (r) => r, X = ue.trustedTypes, Ce = X ? X.createPolicy("lit-html", { createHTML: (r) => r }) : void 0, We = "$lit$", _ = `lit$${Math.random().toFixed(9).slice(2)}$`, Ve = "?" + _, It = `<${Ve}>`, E = document, j = () => E.createComment(""), q = (r) => r === null || typeof r != "object" && typeof r != "function", fe = Array.isArray, Et = (r) => fe(r) || typeof r?.[Symbol.iterator] == "function", ce = `[
251
+ \f\r]`, H = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Pe = /-->/g, Be = />/g, A = RegExp(`>|${ce}(?:([^\\s"'>=/]+)(${ce}*=${ce}*(?:[^
252
+ \f\r"'\`<>=]|("|')|))|$)`, "g"), De = /'/g, ze = /"/g, Ye = /^(?:script|style|textarea|title)$/i, Ke = (r) => (e, ...t) => ({ _$litType$: r, strings: e, values: t }), l = Ke(1), Re = Ke(2), M = /* @__PURE__ */ Symbol.for("lit-noChange"), m = /* @__PURE__ */ Symbol.for("lit-nothing"), Ne = /* @__PURE__ */ new WeakMap(), I = E.createTreeWalker(E, 129);
253
+ function Qe(r, e) {
254
+ if (!fe(r) || !r.hasOwnProperty("raw")) throw Error("invalid template strings array");
255
+ return Ce !== void 0 ? Ce.createHTML(e) : e;
256
+ }
257
+ const Ct = (r, e) => {
258
+ const t = r.length - 1, s = [];
259
+ let a, o = e === 2 ? "<svg>" : e === 3 ? "<math>" : "", n = H;
260
+ for (let i = 0; i < t; i++) {
261
+ const c = r[i];
262
+ let d, h, p = -1, u = 0;
263
+ for (; u < c.length && (n.lastIndex = u, h = n.exec(c), h !== null); ) u = n.lastIndex, n === H ? h[1] === "!--" ? n = Pe : h[1] !== void 0 ? n = Be : h[2] !== void 0 ? (Ye.test(h[2]) && (a = RegExp("</" + h[2], "g")), n = A) : h[3] !== void 0 && (n = A) : n === A ? h[0] === ">" ? (n = a ?? H, p = -1) : h[1] === void 0 ? p = -2 : (p = n.lastIndex - h[2].length, d = h[1], n = h[3] === void 0 ? A : h[3] === '"' ? ze : De) : n === ze || n === De ? n = A : n === Pe || n === Be ? n = H : (n = A, a = void 0);
264
+ const f = n === A && r[i + 1].startsWith("/>") ? " " : "";
265
+ o += n === H ? c + It : p >= 0 ? (s.push(d), c.slice(0, p) + We + c.slice(p) + _ + f) : c + _ + (p === -2 ? i : f);
266
+ }
267
+ return [Qe(r, o + (r[t] || "<?>") + (e === 2 ? "</svg>" : e === 3 ? "</math>" : "")), s];
268
268
  };
269
- class q {
270
- constructor({ strings: t, _$litType$: e }, s) {
271
- let r;
269
+ class W {
270
+ constructor({ strings: e, _$litType$: t }, s) {
271
+ let a;
272
272
  this.parts = [];
273
273
  let o = 0, n = 0;
274
- const i = t.length - 1, l = this.parts, [c, d] = Ae(t, e);
275
- if (this.el = q.createElement(c, s), T.currentNode = this.el.content, e === 2 || e === 3) {
274
+ const i = e.length - 1, c = this.parts, [d, h] = Ct(e, t);
275
+ if (this.el = W.createElement(d, s), I.currentNode = this.el.content, t === 2 || t === 3) {
276
276
  const p = this.el.content.firstChild;
277
277
  p.replaceWith(...p.childNodes);
278
278
  }
279
- for (; (r = T.nextNode()) !== null && l.length < i; ) {
280
- if (r.nodeType === 1) {
281
- if (r.hasAttributes()) for (const p of r.getAttributeNames()) if (p.endsWith(qt)) {
282
- const u = d[n++], f = r.getAttribute(p).split(S), g = /([.?@])?(.*)/.exec(u);
283
- l.push({ type: 1, index: o, name: g[2], strings: f, ctor: g[1] === "." ? Ie : g[1] === "?" ? Ce : g[1] === "@" ? Ee : rt }), r.removeAttribute(p);
284
- } else p.startsWith(S) && (l.push({ type: 6, index: o }), r.removeAttribute(p));
285
- if (Vt.test(r.tagName)) {
286
- const p = r.textContent.split(S), u = p.length - 1;
279
+ for (; (a = I.nextNode()) !== null && c.length < i; ) {
280
+ if (a.nodeType === 1) {
281
+ if (a.hasAttributes()) for (const p of a.getAttributeNames()) if (p.endsWith(We)) {
282
+ const u = h[n++], f = a.getAttribute(p).split(_), v = /([.?@])?(.*)/.exec(u);
283
+ c.push({ type: 1, index: o, name: v[2], strings: f, ctor: v[1] === "." ? Bt : v[1] === "?" ? Dt : v[1] === "@" ? zt : oe }), a.removeAttribute(p);
284
+ } else p.startsWith(_) && (c.push({ type: 6, index: o }), a.removeAttribute(p));
285
+ if (Ye.test(a.tagName)) {
286
+ const p = a.textContent.split(_), u = p.length - 1;
287
287
  if (u > 0) {
288
- r.textContent = J ? J.emptyScript : "";
289
- for (let f = 0; f < u; f++) r.append(p[f], G()), T.nextNode(), l.push({ type: 2, index: ++o });
290
- r.append(p[u], G());
288
+ a.textContent = X ? X.emptyScript : "";
289
+ for (let f = 0; f < u; f++) a.append(p[f], j()), I.nextNode(), c.push({ type: 2, index: ++o });
290
+ a.append(p[u], j());
291
291
  }
292
292
  }
293
- } else if (r.nodeType === 8) if (r.data === Wt) l.push({ type: 2, index: o });
293
+ } else if (a.nodeType === 8) if (a.data === Ve) c.push({ type: 2, index: o });
294
294
  else {
295
295
  let p = -1;
296
- for (; (p = r.data.indexOf(S, p + 1)) !== -1; ) l.push({ type: 7, index: o }), p += S.length - 1;
296
+ for (; (p = a.data.indexOf(_, p + 1)) !== -1; ) c.push({ type: 7, index: o }), p += _.length - 1;
297
297
  }
298
298
  o++;
299
299
  }
300
300
  }
301
- static createElement(t, e) {
302
- const s = I.createElement("template");
303
- return s.innerHTML = t, s;
301
+ static createElement(e, t) {
302
+ const s = E.createElement("template");
303
+ return s.innerHTML = e, s;
304
304
  }
305
305
  }
306
- function F(a, t, e = a, s) {
307
- if (t === M) return t;
308
- let r = s !== void 0 ? e._$Co?.[s] : e._$Cl;
309
- const o = j(t) ? void 0 : t._$litDirective$;
310
- return r?.constructor !== o && (r?._$AO?.(!1), o === void 0 ? r = void 0 : (r = new o(a), r._$AT(a, e, s)), s !== void 0 ? (e._$Co ??= [])[s] = r : e._$Cl = r), r !== void 0 && (t = F(a, r._$AS(a, t.values), r, s)), t;
306
+ function F(r, e, t = r, s) {
307
+ if (e === M) return e;
308
+ let a = s !== void 0 ? t._$Co?.[s] : t._$Cl;
309
+ const o = q(e) ? void 0 : e._$litDirective$;
310
+ return a?.constructor !== o && (a?._$AO?.(!1), o === void 0 ? a = void 0 : (a = new o(r), a._$AT(r, t, s)), s !== void 0 ? (t._$Co ??= [])[s] = a : t._$Cl = a), a !== void 0 && (e = F(r, a._$AS(r, e.values), a, s)), e;
311
311
  }
312
- class Te {
313
- constructor(t, e) {
314
- this._$AV = [], this._$AN = void 0, this._$AD = t, this._$AM = e;
312
+ class Pt {
313
+ constructor(e, t) {
314
+ this._$AV = [], this._$AN = void 0, this._$AD = e, this._$AM = t;
315
315
  }
316
316
  get parentNode() {
317
317
  return this._$AM.parentNode;
@@ -319,35 +319,35 @@ class Te {
319
319
  get _$AU() {
320
320
  return this._$AM._$AU;
321
321
  }
322
- u(t) {
323
- const { el: { content: e }, parts: s } = this._$AD, r = (t?.creationScope ?? I).importNode(e, !0);
324
- T.currentNode = r;
325
- let o = T.nextNode(), n = 0, i = 0, l = s[0];
326
- for (; l !== void 0; ) {
327
- if (n === l.index) {
328
- let c;
329
- l.type === 2 ? c = new V(o, o.nextSibling, this, t) : l.type === 1 ? c = new l.ctor(o, l.name, l.strings, this, t) : l.type === 6 && (c = new Pe(o, this, t)), this._$AV.push(c), l = s[++i];
322
+ u(e) {
323
+ const { el: { content: t }, parts: s } = this._$AD, a = (e?.creationScope ?? E).importNode(t, !0);
324
+ I.currentNode = a;
325
+ let o = I.nextNode(), n = 0, i = 0, c = s[0];
326
+ for (; c !== void 0; ) {
327
+ if (n === c.index) {
328
+ let d;
329
+ c.type === 2 ? d = new Y(o, o.nextSibling, this, e) : c.type === 1 ? d = new c.ctor(o, c.name, c.strings, this, e) : c.type === 6 && (d = new Rt(o, this, e)), this._$AV.push(d), c = s[++i];
330
330
  }
331
- n !== l?.index && (o = T.nextNode(), n++);
331
+ n !== c?.index && (o = I.nextNode(), n++);
332
332
  }
333
- return T.currentNode = I, r;
333
+ return I.currentNode = E, a;
334
334
  }
335
- p(t) {
336
- let e = 0;
337
- for (const s of this._$AV) s !== void 0 && (s.strings !== void 0 ? (s._$AI(t, s, e), e += s.strings.length - 2) : s._$AI(t[e])), e++;
335
+ p(e) {
336
+ let t = 0;
337
+ for (const s of this._$AV) s !== void 0 && (s.strings !== void 0 ? (s._$AI(e, s, t), t += s.strings.length - 2) : s._$AI(e[t])), t++;
338
338
  }
339
339
  }
340
- class V {
340
+ class Y {
341
341
  get _$AU() {
342
342
  return this._$AM?._$AU ?? this._$Cv;
343
343
  }
344
- constructor(t, e, s, r) {
345
- this.type = 2, this._$AH = m, this._$AN = void 0, this._$AA = t, this._$AB = e, this._$AM = s, this.options = r, this._$Cv = r?.isConnected ?? !0;
344
+ constructor(e, t, s, a) {
345
+ this.type = 2, this._$AH = m, this._$AN = void 0, this._$AA = e, this._$AB = t, this._$AM = s, this.options = a, this._$Cv = a?.isConnected ?? !0;
346
346
  }
347
347
  get parentNode() {
348
- let t = this._$AA.parentNode;
349
- const e = this._$AM;
350
- return e !== void 0 && t?.nodeType === 11 && (t = e.parentNode), t;
348
+ let e = this._$AA.parentNode;
349
+ const t = this._$AM;
350
+ return t !== void 0 && e?.nodeType === 11 && (e = t.parentNode), e;
351
351
  }
352
352
  get startNode() {
353
353
  return this._$AA;
@@ -355,135 +355,135 @@ class V {
355
355
  get endNode() {
356
356
  return this._$AB;
357
357
  }
358
- _$AI(t, e = this) {
359
- t = F(this, t, e), j(t) ? t === m || t == null || t === "" ? (this._$AH !== m && this._$AR(), this._$AH = m) : t !== this._$AH && t !== M && this._(t) : t._$litType$ !== void 0 ? this.$(t) : t.nodeType !== void 0 ? this.T(t) : _e(t) ? this.k(t) : this._(t);
358
+ _$AI(e, t = this) {
359
+ e = F(this, e, t), q(e) ? e === m || e == null || e === "" ? (this._$AH !== m && this._$AR(), this._$AH = m) : e !== this._$AH && e !== M && this._(e) : e._$litType$ !== void 0 ? this.$(e) : e.nodeType !== void 0 ? this.T(e) : Et(e) ? this.k(e) : this._(e);
360
360
  }
361
- O(t) {
362
- return this._$AA.parentNode.insertBefore(t, this._$AB);
361
+ O(e) {
362
+ return this._$AA.parentNode.insertBefore(e, this._$AB);
363
363
  }
364
- T(t) {
365
- this._$AH !== t && (this._$AR(), this._$AH = this.O(t));
364
+ T(e) {
365
+ this._$AH !== e && (this._$AR(), this._$AH = this.O(e));
366
366
  }
367
- _(t) {
368
- this._$AH !== m && j(this._$AH) ? this._$AA.nextSibling.data = t : this.T(I.createTextNode(t)), this._$AH = t;
367
+ _(e) {
368
+ this._$AH !== m && q(this._$AH) ? this._$AA.nextSibling.data = e : this.T(E.createTextNode(e)), this._$AH = e;
369
369
  }
370
- $(t) {
371
- const { values: e, _$litType$: s } = t, r = typeof s == "number" ? this._$AC(t) : (s.el === void 0 && (s.el = q.createElement(Kt(s.h, s.h[0]), this.options)), s);
372
- if (this._$AH?._$AD === r) this._$AH.p(e);
370
+ $(e) {
371
+ const { values: t, _$litType$: s } = e, a = typeof s == "number" ? this._$AC(e) : (s.el === void 0 && (s.el = W.createElement(Qe(s.h, s.h[0]), this.options)), s);
372
+ if (this._$AH?._$AD === a) this._$AH.p(t);
373
373
  else {
374
- const o = new Te(r, this), n = o.u(this.options);
375
- o.p(e), this.T(n), this._$AH = o;
374
+ const o = new Pt(a, this), n = o.u(this.options);
375
+ o.p(t), this.T(n), this._$AH = o;
376
376
  }
377
377
  }
378
- _$AC(t) {
379
- let e = Rt.get(t.strings);
380
- return e === void 0 && Rt.set(t.strings, e = new q(t)), e;
381
- }
382
- k(t) {
383
- ut(this._$AH) || (this._$AH = [], this._$AR());
384
- const e = this._$AH;
385
- let s, r = 0;
386
- for (const o of t) r === e.length ? e.push(s = new V(this.O(G()), this.O(G()), this, this.options)) : s = e[r], s._$AI(o), r++;
387
- r < e.length && (this._$AR(s && s._$AB.nextSibling, r), e.length = r);
388
- }
389
- _$AR(t = this._$AA.nextSibling, e) {
390
- for (this._$AP?.(!1, !0, e); t !== this._$AB; ) {
391
- const s = It(t).nextSibling;
392
- It(t).remove(), t = s;
378
+ _$AC(e) {
379
+ let t = Ne.get(e.strings);
380
+ return t === void 0 && Ne.set(e.strings, t = new W(e)), t;
381
+ }
382
+ k(e) {
383
+ fe(this._$AH) || (this._$AH = [], this._$AR());
384
+ const t = this._$AH;
385
+ let s, a = 0;
386
+ for (const o of e) a === t.length ? t.push(s = new Y(this.O(j()), this.O(j()), this, this.options)) : s = t[a], s._$AI(o), a++;
387
+ a < t.length && (this._$AR(s && s._$AB.nextSibling, a), t.length = a);
388
+ }
389
+ _$AR(e = this._$AA.nextSibling, t) {
390
+ for (this._$AP?.(!1, !0, t); e !== this._$AB; ) {
391
+ const s = Ee(e).nextSibling;
392
+ Ee(e).remove(), e = s;
393
393
  }
394
394
  }
395
- setConnected(t) {
396
- this._$AM === void 0 && (this._$Cv = t, this._$AP?.(t));
395
+ setConnected(e) {
396
+ this._$AM === void 0 && (this._$Cv = e, this._$AP?.(e));
397
397
  }
398
398
  }
399
- class rt {
399
+ class oe {
400
400
  get tagName() {
401
401
  return this.element.tagName;
402
402
  }
403
403
  get _$AU() {
404
404
  return this._$AM._$AU;
405
405
  }
406
- constructor(t, e, s, r, o) {
407
- this.type = 1, this._$AH = m, this._$AN = void 0, this.element = t, this.name = e, this._$AM = r, this.options = o, s.length > 2 || s[0] !== "" || s[1] !== "" ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = m;
406
+ constructor(e, t, s, a, o) {
407
+ this.type = 1, this._$AH = m, this._$AN = void 0, this.element = e, this.name = t, this._$AM = a, this.options = o, s.length > 2 || s[0] !== "" || s[1] !== "" ? (this._$AH = Array(s.length - 1).fill(new String()), this.strings = s) : this._$AH = m;
408
408
  }
409
- _$AI(t, e = this, s, r) {
409
+ _$AI(e, t = this, s, a) {
410
410
  const o = this.strings;
411
411
  let n = !1;
412
- if (o === void 0) t = F(this, t, e, 0), n = !j(t) || t !== this._$AH && t !== M, n && (this._$AH = t);
412
+ if (o === void 0) e = F(this, e, t, 0), n = !q(e) || e !== this._$AH && e !== M, n && (this._$AH = e);
413
413
  else {
414
- const i = t;
415
- let l, c;
416
- for (t = o[0], l = 0; l < o.length - 1; l++) c = F(this, i[s + l], e, l), c === M && (c = this._$AH[l]), n ||= !j(c) || c !== this._$AH[l], c === m ? t = m : t !== m && (t += (c ?? "") + o[l + 1]), this._$AH[l] = c;
414
+ const i = e;
415
+ let c, d;
416
+ for (e = o[0], c = 0; c < o.length - 1; c++) d = F(this, i[s + c], t, c), d === M && (d = this._$AH[c]), n ||= !q(d) || d !== this._$AH[c], d === m ? e = m : e !== m && (e += (d ?? "") + o[c + 1]), this._$AH[c] = d;
417
417
  }
418
- n && !r && this.j(t);
418
+ n && !a && this.j(e);
419
419
  }
420
- j(t) {
421
- t === m ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, t ?? "");
420
+ j(e) {
421
+ e === m ? this.element.removeAttribute(this.name) : this.element.setAttribute(this.name, e ?? "");
422
422
  }
423
423
  }
424
- class Ie extends rt {
424
+ class Bt extends oe {
425
425
  constructor() {
426
426
  super(...arguments), this.type = 3;
427
427
  }
428
- j(t) {
429
- this.element[this.name] = t === m ? void 0 : t;
428
+ j(e) {
429
+ this.element[this.name] = e === m ? void 0 : e;
430
430
  }
431
431
  }
432
- class Ce extends rt {
432
+ class Dt extends oe {
433
433
  constructor() {
434
434
  super(...arguments), this.type = 4;
435
435
  }
436
- j(t) {
437
- this.element.toggleAttribute(this.name, !!t && t !== m);
436
+ j(e) {
437
+ this.element.toggleAttribute(this.name, !!e && e !== m);
438
438
  }
439
439
  }
440
- class Ee extends rt {
441
- constructor(t, e, s, r, o) {
442
- super(t, e, s, r, o), this.type = 5;
440
+ class zt extends oe {
441
+ constructor(e, t, s, a, o) {
442
+ super(e, t, s, a, o), this.type = 5;
443
443
  }
444
- _$AI(t, e = this) {
445
- if ((t = F(this, t, e, 0) ?? m) === M) return;
446
- const s = this._$AH, r = t === m && s !== m || t.capture !== s.capture || t.once !== s.once || t.passive !== s.passive, o = t !== m && (s === m || r);
447
- r && this.element.removeEventListener(this.name, this, s), o && this.element.addEventListener(this.name, this, t), this._$AH = t;
444
+ _$AI(e, t = this) {
445
+ if ((e = F(this, e, t, 0) ?? m) === M) return;
446
+ const s = this._$AH, a = e === m && s !== m || e.capture !== s.capture || e.once !== s.once || e.passive !== s.passive, o = e !== m && (s === m || a);
447
+ a && this.element.removeEventListener(this.name, this, s), o && this.element.addEventListener(this.name, this, e), this._$AH = e;
448
448
  }
449
- handleEvent(t) {
450
- typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t);
449
+ handleEvent(e) {
450
+ typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, e) : this._$AH.handleEvent(e);
451
451
  }
452
452
  }
453
- class Pe {
454
- constructor(t, e, s) {
455
- this.element = t, this.type = 6, this._$AN = void 0, this._$AM = e, this.options = s;
453
+ class Rt {
454
+ constructor(e, t, s) {
455
+ this.element = e, this.type = 6, this._$AN = void 0, this._$AM = t, this.options = s;
456
456
  }
457
457
  get _$AU() {
458
458
  return this._$AM._$AU;
459
459
  }
460
- _$AI(t) {
461
- F(this, t);
460
+ _$AI(e) {
461
+ F(this, e);
462
462
  }
463
463
  }
464
- const De = mt.litHtmlPolyfillSupport;
465
- De?.(q, V), (mt.litHtmlVersions ??= []).push("3.3.3");
466
- const Be = (a, t, e) => {
467
- const s = e?.renderBefore ?? t;
468
- let r = s._$litPart$;
469
- if (r === void 0) {
470
- const o = e?.renderBefore ?? null;
471
- s._$litPart$ = r = new V(t.insertBefore(G(), o), o, void 0, e ?? {});
464
+ const Nt = ue.litHtmlPolyfillSupport;
465
+ Nt?.(W, Y), (ue.litHtmlVersions ??= []).push("3.3.3");
466
+ const Mt = (r, e, t) => {
467
+ const s = t?.renderBefore ?? e;
468
+ let a = s._$litPart$;
469
+ if (a === void 0) {
470
+ const o = t?.renderBefore ?? null;
471
+ s._$litPart$ = a = new Y(e.insertBefore(j(), o), o, void 0, t ?? {});
472
472
  }
473
- return r._$AI(a), r;
473
+ return a._$AI(r), a;
474
474
  };
475
- const ft = globalThis;
475
+ const ge = globalThis;
476
476
  class N extends z {
477
477
  constructor() {
478
478
  super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
479
479
  }
480
480
  createRenderRoot() {
481
- const t = super.createRenderRoot();
482
- return this.renderOptions.renderBefore ??= t.firstChild, t;
481
+ const e = super.createRenderRoot();
482
+ return this.renderOptions.renderBefore ??= e.firstChild, e;
483
483
  }
484
- update(t) {
485
- const e = this.render();
486
- this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(t), this._$Do = Be(e, this.renderRoot, this.renderOptions);
484
+ update(e) {
485
+ const t = this.render();
486
+ this.hasUpdated || (this.renderOptions.isConnected = this.isConnected), super.update(e), this._$Do = Mt(t, this.renderRoot, this.renderOptions);
487
487
  }
488
488
  connectedCallback() {
489
489
  super.connectedCallback(), this._$Do?.setConnected(!0);
@@ -495,38 +495,38 @@ class N extends z {
495
495
  return M;
496
496
  }
497
497
  }
498
- N._$litElement$ = !0, N.finalized = !0, ft.litElementHydrateSupport?.({ LitElement: N });
499
- const ze = ft.litElementPolyfillSupport;
500
- ze?.({ LitElement: N });
501
- (ft.litElementVersions ??= []).push("4.2.2");
502
- const Re = 50;
503
- function Ne(a = {}) {
504
- const t = Object.entries(a).filter(([, s]) => s != null && s !== "");
505
- if (!t.length) return "";
506
- const e = new URLSearchParams();
507
- return t.forEach(([s, r]) => e.set(s, String(r))), `?${e.toString()}`;
508
- }
509
- function Me({ baseUrl: a, token: t = "", fetchFn: e } = {}) {
510
- if (!a) throw new Error("createClient requires a baseUrl");
511
- const s = a.replace(/\/+$/, ""), r = e || ((...i) => fetch(...i));
498
+ N._$litElement$ = !0, N.finalized = !0, ge.litElementHydrateSupport?.({ LitElement: N });
499
+ const Ft = ge.litElementPolyfillSupport;
500
+ Ft?.({ LitElement: N });
501
+ (ge.litElementVersions ??= []).push("4.2.2");
502
+ const Ot = 50;
503
+ function Ut(r = {}) {
504
+ const e = Object.entries(r).filter(([, s]) => s != null && s !== "");
505
+ if (!e.length) return "";
506
+ const t = new URLSearchParams();
507
+ return e.forEach(([s, a]) => t.set(s, String(a))), `?${t.toString()}`;
508
+ }
509
+ function Ht({ baseUrl: r, token: e = "", fetchFn: t } = {}) {
510
+ if (!r) throw new Error("createClient requires a baseUrl");
511
+ const s = r.replace(/\/+$/, ""), a = t || ((...i) => fetch(...i));
512
512
  async function o(i) {
513
- const l = { Accept: "application/json" };
514
- t && (l.Authorization = `Bearer ${t}`);
515
- const c = await r(`${s}${i}`, { headers: l });
516
- if (!c.ok) {
517
- const d = new Error(`api-hsot ${c.status} on ${i}`);
518
- throw d.status = c.status, d;
513
+ const c = { Accept: "application/json" };
514
+ e && (c.Authorization = `Bearer ${e}`);
515
+ const d = await a(`${s}${i}`, { headers: c });
516
+ if (!d.ok) {
517
+ const h = new Error(`api-hsot ${d.status} on ${i}`);
518
+ throw h.status = d.status, h;
519
519
  }
520
- return c.json();
521
- }
522
- async function n(i, l = {}) {
523
- const c = [];
524
- let d = null;
525
- for (let p = 0; p < Re; p += 1) {
526
- const u = Ne(d ? { ...l, cursor: d } : l), f = await o(`${i}${u}`);
527
- if (c.push(...f.items || []), d = f.nextCursor || null, !d) break;
520
+ return d.json();
521
+ }
522
+ async function n(i, c = {}) {
523
+ const d = [];
524
+ let h = null;
525
+ for (let p = 0; p < Ot; p += 1) {
526
+ const u = Ut(h ? { ...c, cursor: h } : c), f = await o(`${i}${u}`);
527
+ if (d.push(...f.items || []), h = f.nextCursor || null, !h) break;
528
528
  }
529
- return { items: c, total: c.length, nextCursor: null };
529
+ return { items: d, total: d.length, nextCursor: null };
530
530
  }
531
531
  return {
532
532
  listSchools: (i) => n("/schools", i),
@@ -539,140 +539,159 @@ function Me({ baseUrl: a, token: t = "", fetchFn: e } = {}) {
539
539
  listGames: (i) => n("/games", i),
540
540
  getGame: (i) => o(`/games/${i}`),
541
541
  listTournaments: (i) => n("/tournaments", i),
542
- listSeedings: (i, l) => n(`/tournaments/${i}/seedings`, l),
543
- listEdges: (i, l) => n(`/tournaments/${i}/edges`, l),
542
+ listSeedings: (i, c) => n(`/tournaments/${i}/seedings`, c),
543
+ listEdges: (i, c) => n(`/tournaments/${i}/edges`, c),
544
544
  listRankings: (i) => n("/rankings", i),
545
545
  listSports: () => o("/sports")
546
546
  };
547
547
  }
548
- const ct = {
548
+ const L = {
549
549
  game: "/{sport}/game/{id}/",
550
550
  school: "/school/{id}/",
551
- section: "/{sport}/{view}/"
551
+ section: "/{sport}/{view}/",
552
+ // The "Report a Score" page; {id} is the game being reported on, and
553
+ // reportHref() drops the parameter when there is none.
554
+ report: "/report-a-score/?game={id}"
552
555
  };
553
- function v(a, t) {
554
- return String(a).replace(/\{(\w+)\}/g, (e, s) => t[s] !== void 0 && t[s] !== null ? String(t[s]) : e);
556
+ function g(r, e) {
557
+ return String(r).replace(/\{(\w+)\}/g, (t, s) => e[s] !== void 0 && e[s] !== null ? String(e[s]) : t);
555
558
  }
556
- function O(a) {
559
+ function O(r) {
557
560
  return {
558
- game: a.getAttribute("game-href") || ct.game,
559
- school: a.getAttribute("school-href") || ct.school,
560
- section: a.getAttribute("section-href") || ct.section
561
+ game: r.getAttribute("game-href") || L.game,
562
+ school: r.getAttribute("school-href") || L.school,
563
+ section: r.getAttribute("section-href") || L.section,
564
+ report: r.getAttribute("report-href") || L.report
561
565
  };
562
566
  }
563
- const B = (a) => a ? a.charAt(0).toUpperCase() + a.slice(1) : "";
564
- function w(a, t) {
565
- if (!a) return "TBD";
566
- const [e, s, r] = String(a).split("-").map(Number);
567
- return !e || !s || !r ? "TBD" : new Date(e, s - 1, r).toLocaleDateString("en-US", t || { weekday: "short", month: "short", day: "numeric" });
568
- }
569
- function gt(a) {
570
- if (!a) return "";
571
- const [t, e] = String(a).split(":").map(Number);
572
- if (Number.isNaN(t)) return "";
573
- const s = t >= 12 ? "PM" : "AM";
574
- return `${(t + 11) % 12 + 1}:${String(e || 0).padStart(2, "0")} ${s}`;
575
- }
576
- function Fe(a) {
577
- return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
578
- }
579
- function Oe(a) {
580
- return (Array.isArray(a?.positions) ? a.positions : String(a?.position ?? "").split(/[/,]/)).map((e) => String(e ?? "").trim()).filter(Boolean).join("/");
581
- }
582
- function Y(a = /* @__PURE__ */ new Date()) {
583
- const t = a.getFullYear();
584
- return a.getMonth() >= 6 ? `${t}-${t + 1}` : `${t - 1}-${t}`;
585
- }
586
- function vt(a = /* @__PURE__ */ new Date()) {
587
- const t = (e) => String(e).padStart(2, "0");
588
- return `${a.getFullYear()}-${t(a.getMonth() + 1)}-${t(a.getDate())}`;
589
- }
590
- function Ue(a, t = vt()) {
591
- const e = [...new Set((a || []).filter(Boolean))].sort();
592
- if (!e.length || e.includes(t)) return t;
593
- const s = e.filter((r) => r < t);
594
- return s.length ? s[s.length - 1] : e[0];
595
- }
596
- function $t(a) {
597
- return a ? (a.abbr || a.name || "?").slice(0, 4).toUpperCase() : "?";
598
- }
599
- function X(a) {
600
- if (!a || !/^#[0-9a-fA-F]{6}$/.test(a)) return "#FFFFFF";
601
- const t = parseInt(a.slice(1), 16), e = t >> 16 & 255, s = t >> 8 & 255, r = t & 255;
602
- return 0.299 * e + 0.587 * s + 0.114 * r > 150 ? "#0F1B33" : "#FFFFFF";
603
- }
604
- const He = (a) => {
605
- const t = ["th", "st", "nd", "rd"], e = a % 100;
606
- return a + (t[(e - 20) % 10] || t[e] || t[0]);
567
+ function Ze(r, e = "") {
568
+ const t = g(r.report || L.report, { id: e || "" });
569
+ return e ? t : t.replace(/([?&])game=(?=&|$)/, "$1").replace(/[?&]$/, "").replace(/\?&/, "?");
570
+ }
571
+ const k = (r) => r ? r.charAt(0).toUpperCase() + r.slice(1) : "";
572
+ function x(r, e) {
573
+ if (!r) return "TBD";
574
+ const [t, s, a] = String(r).split("-").map(Number);
575
+ return !t || !s || !a ? "TBD" : new Date(t, s - 1, a).toLocaleDateString("en-US", e || { weekday: "short", month: "short", day: "numeric" });
576
+ }
577
+ function ve(r) {
578
+ if (!r) return "";
579
+ const [e, t] = String(r).split(":").map(Number);
580
+ if (Number.isNaN(e)) return "";
581
+ const s = e >= 12 ? "PM" : "AM";
582
+ return `${(e + 11) % 12 + 1}:${String(t || 0).padStart(2, "0")} ${s}`;
583
+ }
584
+ function Lt(r) {
585
+ return r ? `${Math.floor(r / 12)}-${r % 12}` : "·";
586
+ }
587
+ function Gt(r) {
588
+ return (Array.isArray(r?.positions) ? r.positions : String(r?.position ?? "").split(/[/,]/)).map((t) => String(t ?? "").trim()).filter(Boolean).join("/");
589
+ }
590
+ function K(r = /* @__PURE__ */ new Date()) {
591
+ const e = r.getFullYear();
592
+ return r.getMonth() >= 6 ? `${e}-${e + 1}` : `${e - 1}-${e}`;
593
+ }
594
+ function $e(r = /* @__PURE__ */ new Date()) {
595
+ const e = (t) => String(t).padStart(2, "0");
596
+ return `${r.getFullYear()}-${e(r.getMonth() + 1)}-${e(r.getDate())}`;
597
+ }
598
+ function jt(r, e = $e()) {
599
+ const t = [...new Set((r || []).filter(Boolean))].sort();
600
+ if (!t.length || t.includes(e)) return e;
601
+ const s = t.filter((a) => a < e);
602
+ return s.length ? s[s.length - 1] : t[0];
603
+ }
604
+ function be(r) {
605
+ return r ? (r.abbr || r.name || "?").slice(0, 4).toUpperCase() : "?";
606
+ }
607
+ function ee(r) {
608
+ if (!r || !/^#[0-9a-fA-F]{6}$/.test(r)) return "#FFFFFF";
609
+ const e = parseInt(r.slice(1), 16), t = e >> 16 & 255, s = e >> 8 & 255, a = e & 255;
610
+ return 0.299 * t + 0.587 * s + 0.114 * a > 150 ? "#0F1B33" : "#FFFFFF";
611
+ }
612
+ const qt = (r) => {
613
+ const e = ["th", "st", "nd", "rd"], t = r % 100;
614
+ return r + (e[(t - 20) % 10] || e[t] || e[0]);
607
615
  };
608
- function Nt(a, t) {
609
- const e = (o) => {
616
+ function Me(r, e) {
617
+ const t = (o) => {
610
618
  const n = /^\d+/.exec(String(o ?? ""));
611
619
  return n ? Number(n[0]) : null;
612
- }, s = e(a), r = e(t);
613
- return s !== null && r !== null && s !== r ? r - s : s !== null && r === null ? -1 : s === null && r !== null ? 1 : String(a ?? "").localeCompare(String(t ?? ""), "en", { sensitivity: "base" });
620
+ }, s = t(r), a = t(e);
621
+ return s !== null && a !== null && s !== a ? a - s : s !== null && a === null ? -1 : s === null && a !== null ? 1 : String(r ?? "").localeCompare(String(e ?? ""), "en", { sensitivity: "base" });
614
622
  }
615
- function Le(a, t) {
616
- const e = (s) => String(s?.name ?? s ?? "");
617
- return e(a).localeCompare(e(t), "en", { numeric: !0, sensitivity: "base" });
623
+ function Wt(r, e) {
624
+ const t = (s) => String(s?.name ?? s ?? "");
625
+ return t(r).localeCompare(t(e), "en", { numeric: !0, sensitivity: "base" });
618
626
  }
619
- function Qt(a) {
620
- if (a.state === "live") {
621
- const t = [a.period, a.clock].filter(Boolean).join(" ");
622
- return { kind: "live", label: t ? `Live · ${t}` : "Live" };
627
+ function Je(r) {
628
+ if (r.state === "live") {
629
+ const e = [r.period, r.clock].filter(Boolean).join(" ");
630
+ return { kind: "live", label: e ? `Live · ${e}` : "Live" };
623
631
  }
624
- if (a.state === "final") {
625
- const t = [];
626
- return a.finish === "overtime" && t.push("OT"), a.finish === "shootout" && t.push("PK-SO"), a.forfeit && a.forfeit !== "none" && t.push("Forfeit"), { kind: "final", label: `Final${t.length ? ` · ${t.join(" · ")}` : ""}` };
632
+ if (r.state === "final") {
633
+ const e = [];
634
+ return r.finish === "overtime" && e.push("OT"), r.finish === "shootout" && e.push("PK-SO"), r.forfeit && r.forfeit !== "none" && e.push("Forfeit"), { kind: "final", label: `Final${e.length ? ` · ${e.join(" · ")}` : ""}` };
627
635
  }
628
- return a.state === "postponed" ? { kind: "warn", label: "Postponed" } : a.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${w(a.date, { month: "short", day: "numeric" })} · ${gt(a.time)}`.replace(/ · $/, "") };
636
+ return r.state === "postponed" ? { kind: "warn", label: "Postponed" } : r.state === "canceled" ? { kind: "warn", label: "Canceled" } : { kind: "sched", label: `${x(r.date, { month: "short", day: "numeric" })} · ${ve(r.time)}`.replace(/ · $/, "") };
637
+ }
638
+ const Vt = ["boys", "girls"];
639
+ function Xe(r, e) {
640
+ return e ? r ? r.gender === e || r.gender === "coed" : !1 : !0;
641
+ }
642
+ function et(r, e) {
643
+ return e ? (r || []).filter((t) => Xe(t, e)) : r || [];
629
644
  }
630
- const Ge = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
631
- function _(a) {
632
- let t = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
633
- const e = t.indexOf("#");
645
+ function he(r) {
646
+ const e = new Set((r || []).map((t) => t && t.gender));
647
+ return Vt.filter((t) => e.has(t));
648
+ }
649
+ const Yt = (r) => he(r).length === 2, Kt = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
650
+ function T(r) {
651
+ let e = String(r || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
652
+ const t = e.indexOf("#");
634
653
  let s = "";
635
- e !== -1 && (s = t.slice(e).split("?")[0], t = t.slice(0, e));
636
- let r = t.split("?")[0] + s;
637
- return r = r.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), r = r.replace(/^\/(?=#)/, ""), r.length > 1 && (r = r.replace(/\/+$/, "")), r.toLowerCase();
638
- }
639
- function Zt() {
640
- const a = globalThis.location;
641
- if (!a) return "";
642
- const t = (a.hash || "").startsWith("#/") ? a.hash : "";
643
- return _((a.pathname || "") + t);
644
- }
645
- function je(a, t, e) {
646
- if (!e) return null;
647
- const s = _(a);
654
+ t !== -1 && (s = e.slice(t).split("?")[0], e = e.slice(0, t));
655
+ let a = e.split("?")[0] + s;
656
+ return a = a.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), a = a.replace(/^\/(?=#)/, ""), a.length > 1 && (a = a.replace(/\/+$/, "")), a.toLowerCase();
657
+ }
658
+ function tt() {
659
+ const r = globalThis.location;
660
+ if (!r) return "";
661
+ const e = (r.hash || "").startsWith("#/") ? r.hash : "";
662
+ return T((r.pathname || "") + e);
663
+ }
664
+ function Qt(r, e, t) {
665
+ if (!t) return null;
666
+ const s = T(r);
648
667
  if (!s) return null;
649
- const r = _(v(t.game, { sport: e, id: "" })), o = _(v(t.school, { id: "" }));
650
- if (s === r || s.startsWith(`${r}/`) || s === o || s.startsWith(`${o}/`)) return null;
651
- const n = _(v(t.section, { sport: e, view: "" }));
668
+ const a = T(g(e.game, { sport: t, id: "" })), o = T(g(e.school, { id: "" }));
669
+ if (s === a || s.startsWith(`${a}/`) || s === o || s.startsWith(`${o}/`)) return null;
670
+ const n = T(g(e.section, { sport: t, view: "" }));
652
671
  if (s === n) return "";
653
672
  if (!s.startsWith(`${n}/`)) return null;
654
- const i = s.slice(n.length + 1), l = i.split("/");
655
- return l.length > 2 || l.some((c) => !/^[a-z][a-z-]*$/.test(c)) || Ge.has(l[0]) ? null : i;
673
+ const i = s.slice(n.length + 1), c = i.split("/");
674
+ return c.length > 2 || c.some((d) => !/^[a-z][a-z-]*$/.test(d)) || Kt.has(c[0]) ? null : i;
656
675
  }
657
- function qe(a, t, e) {
658
- const s = (n) => v(e.section, { sport: a, view: n }).replace(/([^:])\/{2,}/g, "$1/"), o = new Set((t || []).map((n) => n && n.gender).filter((n) => n === "boys" || n === "girls")).size === 2 ? [
676
+ function Zt(r, e, t) {
677
+ const s = (o) => g(t.section, { sport: r, view: o }).replace(/([^:])\/{2,}/g, "$1/"), a = Yt(e) ? [
659
678
  { label: "Boys Standings", href: s("boys/standings") },
660
679
  { label: "Girls Standings", href: s("girls/standings") }
661
680
  ] : [{ label: "Standings", href: s("standings") }];
662
681
  return [
663
- { label: `${B(a)} Home`, href: s("") },
682
+ { label: `${k(r)} Home`, href: s("") },
664
683
  { label: "Scores/Schedule", href: s("scores") },
665
684
  { label: "Playoff Brackets", href: s("brackets") },
666
- ...o,
685
+ ...a,
667
686
  { label: "Polls & Rankings", href: s("rankings") }
668
687
  ];
669
688
  }
670
- function We(a, t = Zt()) {
671
- const e = _(t);
672
- for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
673
- e && _(s.getAttribute("href")) === e ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
689
+ function Jt(r, e = tt()) {
690
+ const t = T(e);
691
+ for (const s of r.querySelectorAll(':scope > a[slot="nav"]'))
692
+ t && T(s.getAttribute("href")) === t ? s.setAttribute("aria-current", "page") : s.removeAttribute("aria-current");
674
693
  }
675
- class b extends N {
694
+ class y extends N {
676
695
  static properties = {
677
696
  api: { type: String },
678
697
  refreshInterval: { type: Number, attribute: "refresh-interval" },
@@ -687,11 +706,11 @@ class b extends N {
687
706
  super(), this.api = "", this.refreshInterval = 0, this.promoHref = "", this.promoImage = "", this.promoAlt = "", this.data = null, this.loading = !1, this.error = "", this._client = null, this._refreshId = null;
688
707
  }
689
708
  /** Injected client wins; otherwise build a fetch client from the api attribute. */
690
- set client(t) {
691
- this._client = t, this.isConnected && this.load();
709
+ set client(e) {
710
+ this._client = e, this.isConnected && this.load();
692
711
  }
693
712
  get client() {
694
- return this._client ? this._client : this.api ? Me({ baseUrl: this.api }) : null;
713
+ return this._client ? this._client : this.api ? Ht({ baseUrl: this.api }) : null;
695
714
  }
696
715
  connectedCallback() {
697
716
  super.connectedCallback(), this._setupInterval();
@@ -702,43 +721,43 @@ class b extends N {
702
721
  firstUpdated() {
703
722
  this.load();
704
723
  }
705
- updated(t) {
706
- t.has("api") && t.get("api") !== void 0 && t.get("api") !== this.api && this.load(), t.has("refreshInterval") && this._setupInterval(), We(this);
724
+ updated(e) {
725
+ e.has("api") && e.get("api") !== void 0 && e.get("api") !== this.api && this.load(), e.has("refreshInterval") && this._setupInterval(), Jt(this);
707
726
  }
708
727
  async load() {
709
- const t = this.client;
710
- if (!t) {
728
+ const e = this.client;
729
+ if (!e) {
711
730
  this.error = "not-configured";
712
731
  return;
713
732
  }
714
733
  this.loading = !0, this.error = "";
715
734
  try {
716
- this.data = await this.fetchData(t);
717
- } catch (e) {
718
- console.error(`[${this.tagName.toLowerCase()}]`, e), this.error = "load-failed";
735
+ this.data = await this.fetchData(e);
736
+ } catch (t) {
737
+ console.error(`[${this.tagName.toLowerCase()}]`, t), this.error = "load-failed";
719
738
  } finally {
720
739
  this.loading = !1;
721
740
  }
722
741
  }
723
- async fetchData(t) {
742
+ async fetchData(e) {
724
743
  return null;
725
744
  }
726
745
  _setupInterval() {
727
746
  this._clearInterval();
728
- const t = Number(this.refreshInterval) || 0;
729
- t > 0 && (this._refreshId = setInterval(() => this.load(), t));
747
+ const e = Number(this.refreshInterval) || 0;
748
+ e > 0 && (this._refreshId = setInterval(() => this.load(), e));
730
749
  }
731
750
  _clearInterval() {
732
751
  this._refreshId && (clearInterval(this._refreshId), this._refreshId = null);
733
752
  }
734
753
  render() {
735
- return this.error === "not-configured" ? h`<div class="error">This component needs an <code>api</code> attribute (the api-hsot public read-surface base URL) or an injected client.</div>` : this.error ? h`<div class="error">Unable to load right now. <button class="chip" @click=${() => this.load()}>Retry</button></div>` : this.data ? this.renderView() : h`<div class="loading" role="status">Loading…</div>`;
754
+ return this.error === "not-configured" ? l`<div class="error">This component needs an <code>api</code> attribute (the api-hsot public read-surface base URL) or an injected client.</div>` : this.error ? l`<div class="error">Unable to load right now. <button class="chip" @click=${() => this.load()}>Retry</button></div>` : this.data ? this.renderView() : l`<div class="loading" role="status">Loading…</div>`;
736
755
  }
737
756
  renderView() {
738
- return h``;
757
+ return l``;
739
758
  }
740
759
  }
741
- const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
760
+ const b = (r) => Object.fromEntries((r || []).map((e) => [e.id, e])), Xt = w`
742
761
  :host {
743
762
  --hsot-red: var(--color-red, #D1232A);
744
763
  --hsot-red-deep: var(--color-red-dark, #951C21);
@@ -776,7 +795,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
776
795
  outline-offset: 1px;
777
796
  }
778
797
  .mut { color: var(--hsot-gray-5); }
779
- `, Ye = y`
798
+ `, es = w`
780
799
  .band { background: var(--hsot-white); color: var(--hsot-black); }
781
800
  .band .inner { max-width: 1366px; margin: 0 auto; padding: 1.1rem 1.25rem 0; }
782
801
  .band h1, .band h2.bandtitle {
@@ -825,7 +844,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
825
844
  @media (max-width: 720px) {
826
845
  .band h1, .band h2.bandtitle, .band.section h1, .band.section h2.bandtitle { font-size: 1.8rem; }
827
846
  }
828
- `, Ke = y`
847
+ `, ts = w`
829
848
  .view { max-width: 1366px; margin: 0 auto; padding: 1.25rem; box-sizing: border-box; }
830
849
  /* Optional right rail (slot="rail" light-DOM children): a divided 300px
831
850
  column on desktop, stacked under the view content on smaller screens. */
@@ -889,7 +908,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
889
908
  .error { padding: 1.2rem 1rem; color: var(--hsot-red-deep); font-size: 0.9rem; }
890
909
  .note { font-size: 0.8125rem; color: var(--hsot-gray-5); margin: 0.6rem 0 0; }
891
910
  .loading { padding: 1.2rem; color: var(--hsot-gray-5); font-family: var(--hsot-heading-font); }
892
- `, Qe = y`
911
+ `, ss = w`
893
912
  .pill {
894
913
  display: inline-block; font-family: var(--hsot-heading-font); font-weight: 700;
895
914
  font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.04em;
@@ -904,7 +923,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
904
923
  .pill.champ { background: var(--hsot-straw); color: #6b5900; }
905
924
  @keyframes hsot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
906
925
  @media (prefers-reduced-motion: reduce) { .pill.live { animation: none; } }
907
- `, Ze = y`
926
+ `, rs = w`
908
927
  .tablewrap { overflow-x: auto; }
909
928
  table.data { font-family: var(--hsot-heading-font); font-size: 14px; border-collapse: collapse; width: 100%; }
910
929
  table.data th {
@@ -922,7 +941,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
922
941
  table.data tbody tr.rowlink:hover { background: var(--hsot-gray-1); }
923
942
  table.data td.teamcell a { color: inherit; text-decoration: none; font-weight: 500; }
924
943
  table.data td.teamcell a:hover { text-decoration: underline; }
925
- `, Je = y`
944
+ `, as = w`
926
945
  .swatch {
927
946
  display: inline-flex; align-items: center; justify-content: center;
928
947
  width: 26px; height: 26px; border-radius: 50%;
@@ -946,7 +965,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
946
965
  .dot.W { background: var(--hsot-win); }
947
966
  .dot.L { background: var(--hsot-loss); }
948
967
  .dot.T { background: var(--hsot-tie); }
949
- `, Xe = y`
968
+ `, os = w`
950
969
  ul.gamelist { list-style: none; margin: 0; padding: 0; }
951
970
  .gamelist li {
952
971
  display: flex; align-items: center; gap: 0.7rem; padding: 0.55rem 1rem;
@@ -996,177 +1015,177 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ve = y`
996
1015
  .gamelist .ff { color: var(--hsot-gray-5); font-size: 0.78rem; font-style: italic; }
997
1016
  .gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
998
1017
  .gamelist a.box { font-size: 0.78rem; }
999
- `, U = [Ve, Ye, Ke, Qe, Ze, Je, Xe];
1000
- function ot(a) {
1001
- return a.state !== "final" ? null : a.forfeit === "home" ? "away" : a.forfeit === "away" || a.homeScore > a.awayScore ? "home" : a.awayScore > a.homeScore ? "away" : a.tiebreakWinner && a.tiebreakWinner !== "none" ? a.tiebreakWinner : "tie";
1002
- }
1003
- function ts(a) {
1004
- return a && (a.forfeit === "home" || a.forfeit === "away") ? a.forfeit : null;
1005
- }
1006
- function K(a, t) {
1007
- const e = {}, s = (o) => (e[o] = e[o] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, e[o]), r = a.filter((o) => o.state === "final" && o.gameType !== "scrimmage" && !0).sort((o, n) => String(o.date).localeCompare(String(n.date)));
1008
- for (const o of r) {
1009
- const n = ot(o), i = o.gameType === "conference";
1010
- for (const l of ["home", "away"]) {
1011
- const c = l === "home" ? o.homeTeamId : o.awayTeamId;
1012
- if (!c) continue;
1013
- const d = s(c), p = l === "home" ? o.homeScore : o.awayScore, u = l === "home" ? o.awayScore : o.homeScore;
1014
- d.pf += p, d.pa += u;
1018
+ `, U = [Xt, es, ts, ss, rs, as, os];
1019
+ function ne(r) {
1020
+ return r.state !== "final" ? null : r.forfeit === "home" ? "away" : r.forfeit === "away" || r.homeScore > r.awayScore ? "home" : r.awayScore > r.homeScore ? "away" : r.tiebreakWinner && r.tiebreakWinner !== "none" ? r.tiebreakWinner : "tie";
1021
+ }
1022
+ function ns(r) {
1023
+ return r && (r.forfeit === "home" || r.forfeit === "away") ? r.forfeit : null;
1024
+ }
1025
+ function Q(r, e) {
1026
+ const t = {}, s = (o) => (t[o] = t[o] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, t[o]), a = r.filter((o) => o.state === "final" && o.gameType !== "scrimmage" && !0).sort((o, n) => String(o.date).localeCompare(String(n.date)));
1027
+ for (const o of a) {
1028
+ const n = ne(o), i = o.gameType === "conference";
1029
+ for (const c of ["home", "away"]) {
1030
+ const d = c === "home" ? o.homeTeamId : o.awayTeamId;
1031
+ if (!d) continue;
1032
+ const h = s(d), p = c === "home" ? o.homeScore : o.awayScore, u = c === "home" ? o.awayScore : o.homeScore;
1033
+ h.pf += p, h.pa += u;
1015
1034
  let f = "T";
1016
- n === "tie" ? (d.t += 1, i && (d.ct += 1)) : n === l ? (d.w += 1, i && (d.cw += 1), f = "W") : (d.l += 1, i && (d.cl += 1), f = "L"), d.results.push({ gameId: o.id, date: o.date, mark: f, my: p, their: u, opp: l === "home" ? o.awayTeamId : o.homeTeamId, conf: i });
1035
+ n === "tie" ? (h.t += 1, i && (h.ct += 1)) : n === c ? (h.w += 1, i && (h.cw += 1), f = "W") : (h.l += 1, i && (h.cl += 1), f = "L"), h.results.push({ gameId: o.id, date: o.date, mark: f, my: p, their: u, opp: c === "home" ? o.awayTeamId : o.homeTeamId, conf: i });
1017
1036
  }
1018
1037
  }
1019
- return e;
1038
+ return t;
1020
1039
  }
1021
- function nt(a) {
1022
- if (!a || !a.length) return "";
1023
- const t = a[a.length - 1].mark;
1024
- let e = 0;
1025
- for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
1026
- return t + e;
1027
- }
1028
- const Mt = (a, t, e) => {
1029
- const s = a + t + e;
1030
- return s ? (a + e / 2) / s : 0;
1031
- }, Ft = (a) => a.toFixed(3).replace("0.", ".");
1032
- function k(a, t = !1) {
1033
- if (!a) return "0-0";
1034
- const e = t ? a.cw : a.w, s = t ? a.cl : a.l, r = t ? a.ct : a.t;
1035
- return `${e}-${s}${r ? `-${r}` : ""}`;
1036
- }
1037
- function Jt(a, t) {
1038
- return a.map((e) => {
1039
- const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
1040
- return { team: e, rec: s, confPct: Mt(s.cw, s.cl, s.ct), overallPct: Mt(s.w, s.l, s.t) };
1041
- }).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
1042
- }
1043
- function bt(a, t) {
1044
- return a.filter((e) => (e.homeTeamId === t || e.awayTeamId === t) && (e.state === "scheduled" || e.state === "live") && e.gameType !== "scrimmage").sort((e, s) => String(e.date).localeCompare(String(s.date)))[0] || null;
1045
- }
1046
- function Ot(a, t) {
1047
- const e = a[t];
1048
- return e && e.results.length ? e.results[e.results.length - 1] : null;
1049
- }
1050
- function yt(a, t, e, s, r) {
1051
- const o = t[e];
1040
+ function ie(r) {
1041
+ if (!r || !r.length) return "";
1042
+ const e = r[r.length - 1].mark;
1043
+ let t = 0;
1044
+ for (let s = r.length - 1; s >= 0 && r[s].mark === e; s -= 1) t += 1;
1045
+ return e + t;
1046
+ }
1047
+ const Fe = (r, e, t) => {
1048
+ const s = r + e + t;
1049
+ return s ? (r + t / 2) / s : 0;
1050
+ }, Oe = (r) => r.toFixed(3).replace("0.", ".");
1051
+ function S(r, e = !1) {
1052
+ if (!r) return "0-0";
1053
+ const t = e ? r.cw : r.w, s = e ? r.cl : r.l, a = e ? r.ct : r.t;
1054
+ return `${t}-${s}${a ? `-${a}` : ""}`;
1055
+ }
1056
+ function st(r, e) {
1057
+ return r.map((t) => {
1058
+ const s = e[t.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
1059
+ return { team: t, rec: s, confPct: Fe(s.cw, s.cl, s.ct), overallPct: Fe(s.w, s.l, s.t) };
1060
+ }).sort((t, s) => s.confPct - t.confPct || s.overallPct - t.overallPct || s.rec.pf - s.rec.pa - (t.rec.pf - t.rec.pa));
1061
+ }
1062
+ function ye(r, e) {
1063
+ return r.filter((t) => (t.homeTeamId === e || t.awayTeamId === e) && (t.state === "scheduled" || t.state === "live") && t.gameType !== "scrimmage").sort((t, s) => String(t.date).localeCompare(String(s.date)))[0] || null;
1064
+ }
1065
+ function Ue(r, e) {
1066
+ const t = r[e];
1067
+ return t && t.results.length ? t.results[t.results.length - 1] : null;
1068
+ }
1069
+ function we(r, e, t, s, a) {
1070
+ const o = e[t];
1052
1071
  if (!o) return null;
1053
1072
  const n = /* @__PURE__ */ new Map();
1054
- for (const l of a || []) {
1055
- if (l.sport !== s || r && l.effectiveDate > r || l.gender && o.gender !== l.gender && o.gender !== "coed") continue;
1056
- const c = l.gender || "", d = n.get(c);
1057
- (!d || l.effectiveDate > d.effectiveDate) && n.set(c, l);
1073
+ for (const c of r || []) {
1074
+ if (c.sport !== s || a && c.effectiveDate > a || c.gender && o.gender !== c.gender && o.gender !== "coed") continue;
1075
+ const d = c.gender || "", h = n.get(d);
1076
+ (!h || c.effectiveDate > h.effectiveDate) && n.set(d, c);
1058
1077
  }
1059
1078
  let i = null;
1060
- for (const l of n.values()) {
1061
- const c = (l.teamIds || []).indexOf(e);
1062
- c !== -1 && (!i || l.effectiveDate > i.effectiveDate) && (i = { poll: l, rank: c + 1 });
1079
+ for (const c of n.values()) {
1080
+ const d = (c.teamIds || []).indexOf(t);
1081
+ d !== -1 && (!i || c.effectiveDate > i.effectiveDate) && (i = { poll: c, rank: d + 1 });
1063
1082
  }
1064
1083
  return i ? i.rank : null;
1065
1084
  }
1066
- function es(a, t, e) {
1067
- if (!a) return { kind: "none", delta: 0 };
1068
- const s = (a.teamIds || []).indexOf(e) + 1;
1085
+ function is(r, e, t) {
1086
+ if (!r) return { kind: "none", delta: 0 };
1087
+ const s = (r.teamIds || []).indexOf(t) + 1;
1069
1088
  if (!s) return { kind: "none", delta: 0 };
1070
- if (!t) return { kind: "same", delta: 0 };
1071
- const r = (t.teamIds || []).indexOf(e) + 1;
1072
- if (!r) return { kind: "new", delta: 0 };
1073
- const o = r - s;
1089
+ if (!e) return { kind: "same", delta: 0 };
1090
+ const a = (e.teamIds || []).indexOf(t) + 1;
1091
+ if (!a) return { kind: "new", delta: 0 };
1092
+ const o = a - s;
1074
1093
  return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
1075
1094
  }
1076
- function ss(a) {
1077
- return /^https?:\/\//i.test(String(a || ""));
1095
+ function ls(r) {
1096
+ return /^https?:\/\//i.test(String(r || ""));
1078
1097
  }
1079
- function Xt(a, { w: t, h: e } = {}) {
1080
- if (!ss(a)) return "";
1098
+ function rt(r, { w: e, h: t } = {}) {
1099
+ if (!ls(r)) return "";
1081
1100
  const s = [];
1082
- t && s.push(`w=${Math.max(1, Math.round(t))}`), e && s.push(`h=${Math.max(1, Math.round(e))}`), s.push("f=webp");
1083
- const r = a.includes("?") ? "&" : "?";
1084
- return `${a}${r}${s.join("&")}`;
1101
+ e && s.push(`w=${Math.max(1, Math.round(e))}`), t && s.push(`h=${Math.max(1, Math.round(t))}`), s.push("f=webp");
1102
+ const a = r.includes("?") ? "&" : "?";
1103
+ return `${r}${a}${s.join("&")}`;
1085
1104
  }
1086
- function tt(a, t) {
1087
- const e = t * 2;
1088
- return Xt(a?.logoAssetId, { w: e, h: e });
1105
+ function te(r, e) {
1106
+ const t = e * 2;
1107
+ return rt(r?.logoAssetId, { w: t, h: t });
1089
1108
  }
1090
- function as(a, t) {
1091
- return Xt(a?.photoAssetId, { w: t * 2 });
1109
+ function cs(r, e) {
1110
+ return rt(r?.photoAssetId, { w: e * 2 });
1092
1111
  }
1093
- function it(a, t, { title: e, sub: s, teams: r }) {
1094
- const o = Zt(), i = !!a.querySelector(':scope > a[slot="nav"]') || je(o, t.hrefs, t.sport) !== null;
1095
- return h`
1112
+ function le(r, e, { title: t, sub: s, teams: a }) {
1113
+ const o = tt(), i = !!r.querySelector(':scope > a[slot="nav"]') || Qt(o, e.hrefs, e.sport) !== null;
1114
+ return l`
1096
1115
  <div class="band section">
1097
1116
  <div class="inner">
1098
- <h1>${e}</h1>
1099
- ${s ? h`<p class="sub">${s}</p>` : m}
1117
+ <h1>${t}</h1>
1118
+ ${s ? l`<p class="sub">${s}</p>` : m}
1100
1119
  </div>
1101
- ${i ? h`
1102
- <nav class="sectionnav" aria-label="${B(t.sport)} section">
1120
+ ${i ? l`
1121
+ <nav class="sectionnav" aria-label="${k(e.sport)} section">
1103
1122
  <div class="navrow">
1104
1123
  <slot name="nav">
1105
- ${qe(t.sport, r, t.hrefs).map((l) => h`<a href=${l.href}
1106
- aria-current=${o && _(l.href) === o ? "page" : m}>${l.label}</a>`)}
1124
+ ${Zt(e.sport, a, e.hrefs).map((c) => l`<a href=${c.href}
1125
+ aria-current=${o && T(c.href) === o ? "page" : m}>${c.label}</a>`)}
1107
1126
  </slot>
1108
1127
  </div>
1109
1128
  </nav>` : m}
1110
1129
  </div>
1111
1130
  `;
1112
1131
  }
1113
- const C = (a, t) => {
1114
- const e = a.teamsById[t];
1115
- return e ? a.schoolsById[e.schoolId] : null;
1116
- }, R = (a, t) => C(a, t)?.name || "TBD", et = (a, t) => C(a, t)?.abbr || "TBD";
1117
- function E(a, t = 26) {
1118
- if (!a) return m;
1119
- const e = tt(a, t);
1120
- if (e)
1121
- return h`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
1122
- src=${e} style="width:${t}px;height:${t}px" />`;
1123
- const s = a.colorPrimary || "#030711", r = X(s);
1124
- return h`<span class="swatch" aria-hidden="true"
1125
- style="width:${t}px;height:${t}px;background:${s};color:${r};font-size:${Math.max(8, t * 0.28)}px"
1126
- >${$t(a)}</span>`;
1127
- }
1128
- function wt(a, t, e) {
1129
- const s = yt(a.rankings, a.teamsById, t, a.sport, e);
1130
- return s ? h`<span class="rankbadge">#${s}</span>` : m;
1131
- }
1132
- function st(a, t, e) {
1133
- const s = C(a, t);
1134
- return s ? h`${wt(a, t, e)}<a href=${v(a.hrefs.school, { id: s.id })}>${s.name}</a>` : h`<span class="mut">TBD</span>`;
1135
- }
1136
- function xt(a, t, e = 5) {
1137
- const s = a.records[t];
1138
- if (!s || !s.results.length) return h`<span class="mut">·</span>`;
1139
- const r = s.results.slice(-1 * e);
1140
- return h`<span class="dots" role="img" aria-label="last ${r.length} results">
1141
- ${r.map((o) => h`<a class="dot ${o.mark}"
1142
- title="${o.mark} ${o.my}-${o.their} vs ${R(a, o.opp)}"
1143
- href=${v(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
1132
+ const C = (r, e) => {
1133
+ const t = r.teamsById[e];
1134
+ return t ? r.schoolsById[t.schoolId] : null;
1135
+ }, R = (r, e) => C(r, e)?.name || "TBD", se = (r, e) => C(r, e)?.abbr || "TBD";
1136
+ function P(r, e = 26) {
1137
+ if (!r) return m;
1138
+ const t = te(r, e);
1139
+ if (t)
1140
+ return l`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
1141
+ src=${t} style="width:${e}px;height:${e}px" />`;
1142
+ const s = r.colorPrimary || "#030711", a = ee(s);
1143
+ return l`<span class="swatch" aria-hidden="true"
1144
+ style="width:${e}px;height:${e}px;background:${s};color:${a};font-size:${Math.max(8, e * 0.28)}px"
1145
+ >${be(r)}</span>`;
1146
+ }
1147
+ function xe(r, e, t) {
1148
+ const s = we(r.rankings, r.teamsById, e, r.sport, t);
1149
+ return s ? l`<span class="rankbadge">#${s}</span>` : m;
1150
+ }
1151
+ function re(r, e, t) {
1152
+ const s = C(r, e);
1153
+ return s ? l`${xe(r, e, t)}<a href=${g(r.hrefs.school, { id: s.id })}>${s.name}</a>` : l`<span class="mut">TBD</span>`;
1154
+ }
1155
+ function ke(r, e, t = 5) {
1156
+ const s = r.records[e];
1157
+ if (!s || !s.results.length) return l`<span class="mut">·</span>`;
1158
+ const a = s.results.slice(-1 * t);
1159
+ return l`<span class="dots" role="img" aria-label="last ${a.length} results">
1160
+ ${a.map((o) => l`<a class="dot ${o.mark}"
1161
+ title="${o.mark} ${o.my}-${o.their} vs ${R(r, o.opp)}"
1162
+ href=${g(r.hrefs.game, { sport: r.sport, id: o.gameId })}>${o.mark}</a>`)}
1144
1163
  </span>`;
1145
1164
  }
1146
- function P(a, t) {
1147
- return a.querySelector(':scope > [slot="rail"]') ? h`<div class="view withrail">
1148
- <div class="viewmain">${t}</div>
1165
+ function B(r, e) {
1166
+ return r.querySelector(':scope > [slot="rail"]') ? l`<div class="view withrail">
1167
+ <div class="viewmain">${e}</div>
1149
1168
  <aside class="viewrail"><slot name="rail"></slot></aside>
1150
- </div>` : h`<div class="view">${t}</div>`;
1169
+ </div>` : l`<div class="view">${e}</div>`;
1151
1170
  }
1152
- function D(a) {
1153
- if (!a.promoImage) return m;
1154
- const t = h`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
1155
- return h`<div class="promo">${a.promoHref ? h`<a href=${a.promoHref} target="_blank" rel="sponsored noopener">${t}</a>` : t}</div>`;
1171
+ function D(r) {
1172
+ if (!r.promoImage) return m;
1173
+ const e = l`<img src=${r.promoImage} alt=${r.promoAlt || "Sponsor"}>`;
1174
+ return l`<div class="promo">${r.promoHref ? l`<a href=${r.promoHref} target="_blank" rel="sponsored noopener">${e}</a>` : e}</div>`;
1156
1175
  }
1157
- function W(a) {
1158
- const t = Qt(a);
1159
- return h`<span class="pill ${t.kind}">${t.label}</span>`;
1176
+ function V(r) {
1177
+ const e = Je(r);
1178
+ return l`<span class="pill ${e.kind}">${e.label}</span>`;
1160
1179
  }
1161
- function te(a, t, e) {
1162
- if (!t) return h`<span class="mut">·</span>`;
1163
- const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId, r = t.homeTeamId === e ? "vs" : "at";
1164
- return h`${t.state === "live" ? h`<span class="pill live">Live</span> ` : h`${w(t.date, { month: "numeric", day: "numeric" })} `}${r} ${et(a, s)}`;
1180
+ function at(r, e, t) {
1181
+ if (!e) return l`<span class="mut">·</span>`;
1182
+ const s = e.homeTeamId === t ? e.awayTeamId : e.homeTeamId, a = e.homeTeamId === t ? "vs" : "at";
1183
+ return l`${e.state === "live" ? l`<span class="pill live">Live</span> ` : l`${x(e.date, { month: "numeric", day: "numeric" })} `}${a} ${se(r, s)}`;
1165
1184
  }
1166
- class ee extends b {
1185
+ class ot extends y {
1167
1186
  static styles = U;
1168
1187
  static properties = {
1169
- ...b.properties,
1188
+ ...y.properties,
1170
1189
  sport: { type: String },
1171
1190
  season: { type: String },
1172
1191
  date: { type: String }
@@ -1176,23 +1195,23 @@ class ee extends b {
1176
1195
  }
1177
1196
  connectedCallback() {
1178
1197
  if (super.connectedCallback(), !this.date) {
1179
- const t = new URLSearchParams(globalThis.location?.search || "").get("date");
1180
- t && (this.date = t);
1198
+ const e = new URLSearchParams(globalThis.location?.search || "").get("date");
1199
+ e && (this.date = e);
1181
1200
  }
1182
1201
  this._datePinned = !!this.date;
1183
1202
  }
1184
- async fetchData(t) {
1185
- const e = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1186
- t.listSchools(),
1187
- t.listTeams({ sport: this.sport }),
1188
- t.listConferences(),
1189
- t.listGames({ sport: this.sport, season: e }),
1190
- t.listRankings({ sport: this.sport })
1203
+ async fetchData(e) {
1204
+ const t = this.season || K(), [s, a, o, n, i] = await Promise.all([
1205
+ e.listSchools(),
1206
+ e.listTeams({ sport: this.sport }),
1207
+ e.listConferences(),
1208
+ e.listGames({ sport: this.sport, season: t }),
1209
+ e.listRankings({ sport: this.sport })
1191
1210
  ]);
1192
- return this._datePinned || (this.date = Ue(n.items.map((l) => l.date)), this._datePinned = !0), {
1193
- season: e,
1211
+ return this._datePinned || (this.date = jt(n.items.map((c) => c.date)), this._datePinned = !0), {
1212
+ season: t,
1194
1213
  schools: s.items,
1195
- teams: r.items,
1214
+ teams: a.items,
1196
1215
  conferences: o.items,
1197
1216
  games: n.items,
1198
1217
  rankings: i.items
@@ -1200,39 +1219,39 @@ class ee extends b {
1200
1219
  }
1201
1220
  get ctx() {
1202
1221
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1203
- teamsById: $(this.data.teams),
1204
- schoolsById: $(this.data.schools),
1205
- records: K(this.data.games),
1222
+ teamsById: b(this.data.teams),
1223
+ schoolsById: b(this.data.schools),
1224
+ records: Q(this.data.games),
1206
1225
  rankings: this.data.rankings,
1207
1226
  hrefs: O(this),
1208
1227
  sport: this.sport
1209
1228
  }, this._ctxData = this.data), this._ctx;
1210
1229
  }
1211
1230
  renderView() {
1212
- const t = this.ctx, e = $(this.data.conferences), s = [...new Set(this.data.games.map((c) => c.date).filter(Boolean))].sort(), r = Number.MAX_SAFE_INTEGER, o = (c) => {
1213
- const d = [c.awayTeamId, c.homeTeamId].map((p) => yt(t.rankings, t.teamsById, p, this.sport, c.date)).filter(Boolean);
1214
- return d.length ? Math.min(...d) : r;
1215
- }, n = this.data.games.filter((c) => c.date === this.date), i = new Map(n.map((c) => [c, o(c)]));
1216
- n.sort((c, d) => (c.state === "live" ? 0 : 1) - (d.state === "live" ? 0 : 1) || i.get(c) - i.get(d));
1217
- const l = /* @__PURE__ */ new Map();
1218
- return n.forEach((c) => {
1219
- const d = c.gameType === "conference" && c.conferenceId ? e[c.conferenceId]?.name || "Conference" : c.gameType === "playoff" ? "Playoffs" : c.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1220
- l.has(d) || l.set(d, []), l.get(d).push(c);
1221
- }), h`
1222
- ${it(this, t, {
1223
- title: h`${B(this.sport)} scores &amp; schedules`,
1224
- sub: h`${w(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${n.length} games`,
1231
+ const e = this.ctx, t = b(this.data.conferences), s = [...new Set(this.data.games.map((d) => d.date).filter(Boolean))].sort(), a = Number.MAX_SAFE_INTEGER, o = (d) => {
1232
+ const h = [d.awayTeamId, d.homeTeamId].map((p) => we(e.rankings, e.teamsById, p, this.sport, d.date)).filter(Boolean);
1233
+ return h.length ? Math.min(...h) : a;
1234
+ }, n = this.data.games.filter((d) => d.date === this.date), i = new Map(n.map((d) => [d, o(d)]));
1235
+ n.sort((d, h) => (d.state === "live" ? 0 : 1) - (h.state === "live" ? 0 : 1) || i.get(d) - i.get(h));
1236
+ const c = /* @__PURE__ */ new Map();
1237
+ return n.forEach((d) => {
1238
+ const h = d.gameType === "conference" && d.conferenceId ? t[d.conferenceId]?.name || "Conference" : d.gameType === "playoff" ? "Playoffs" : d.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1239
+ c.has(h) || c.set(h, []), c.get(h).push(d);
1240
+ }), l`
1241
+ ${le(this, e, {
1242
+ title: l`${k(this.sport)} scores &amp; schedules`,
1243
+ sub: l`${x(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${n.length} games`,
1225
1244
  teams: this.data.teams
1226
1245
  })}
1227
- ${P(this, h`
1246
+ ${B(this, l`
1228
1247
  ${D(this)}
1229
1248
  <div class="toolbar">
1230
1249
  <label class="asof" for="datesel">Date</label>
1231
- <select id="datesel" @change=${(c) => {
1232
- this.date = c.target.value;
1250
+ <select id="datesel" @change=${(d) => {
1251
+ this.date = d.target.value;
1233
1252
  }}>
1234
- ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((c) => h`<option value=${c} ?selected=${c === this.date}>
1235
- ${w(c, { weekday: "short", month: "short", day: "numeric" })}${c === vt() ? " · today" : ""}
1253
+ ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((d) => l`<option value=${d} ?selected=${d === this.date}>
1254
+ ${x(d, { weekday: "short", month: "short", day: "numeric" })}${d === $e() ? " · today" : ""}
1236
1255
  </option>`)}
1237
1256
  </select>
1238
1257
  <button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
@@ -1244,13 +1263,13 @@ class ee extends b {
1244
1263
  this.date = s[s.indexOf(this.date) + 1];
1245
1264
  }}>Next →</button>
1246
1265
  <span class="spacer"></span>
1247
- <span class="asof">Live games first · report a score to see it update here</span>
1266
+ <span class="asof">Live games first · <a href=${Ze(e.hrefs)}>report a score</a> to see it update here</span>
1248
1267
  </div>
1249
- ${n.length ? m : h`<p class="empty">No ${this.sport} games on this date.</p>`}
1250
- ${[...l.entries()].map(([c, d]) => h`
1251
- <div class="section-title">${c}</div>
1268
+ ${n.length ? m : l`<p class="empty">No ${this.sport} games on this date.</p>`}
1269
+ ${[...c.entries()].map(([d, h]) => l`
1270
+ <div class="section-title">${d}</div>
1252
1271
  <div class="card"><ul class="gamelist">
1253
- ${d.map((p) => this.renderGame(t, p))}
1272
+ ${h.map((p) => this.renderGame(e, p))}
1254
1273
  </ul></div>
1255
1274
  `)}
1256
1275
  `)}
@@ -1259,97 +1278,129 @@ class ee extends b {
1259
1278
  // Each team's score rides in a block beside its name (reader feedback:
1260
1279
  // a lone score column on the far right read as detached from the teams).
1261
1280
  // Scheduled games carry their start time on the status pill alone.
1262
- renderGame(t, e) {
1263
- const s = e.state === "final" || e.state === "live", r = (n, i, l = m) => h`<span class="side">${st(t, n, e.date)}${s ? h`<span class="score">${i}</span>` : m}${l}</span>`, o = ts(e);
1264
- return h`
1281
+ renderGame(e, t) {
1282
+ const s = t.state === "final" || t.state === "live", a = (n, i, c = m) => l`<span class="side">${re(e, n, t.date)}${s ? l`<span class="score">${i}</span>` : m}${c}</span>`, o = ns(t);
1283
+ return l`
1265
1284
  <li>
1266
- ${W(e)}
1267
- <span class="opp matchup">${r(e.awayTeamId, e.awayScore, h`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
1268
- ${o ? h`<span class="ff">${R(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
1269
- <span class="where">${e.venue || ""}</span>
1270
- ${e.broadcast ? h`<span class="pill class">${e.broadcast}</span>` : m}
1271
- <a class="box" href=${v(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score →</a>
1285
+ ${V(t)}
1286
+ <span class="opp matchup">${a(t.awayTeamId, t.awayScore, l`<span class="at">at</span>`)}${a(t.homeTeamId, t.homeScore)}</span>
1287
+ ${o ? l`<span class="ff">${R(e, o === "home" ? t.homeTeamId : t.awayTeamId)} forfeited</span>` : m}
1288
+ <span class="where">${t.venue || ""}</span>
1289
+ ${t.broadcast ? l`<span class="pill class">${t.broadcast}</span>` : m}
1290
+ <a class="box" href=${g(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score →</a>
1272
1291
  </li>
1273
1292
  `;
1274
1293
  }
1275
1294
  }
1276
- globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", ee);
1277
- class se extends b {
1295
+ globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", ot);
1296
+ class nt extends y {
1278
1297
  static styles = U;
1279
1298
  static properties = {
1280
- ...b.properties,
1299
+ ...y.properties,
1281
1300
  sport: { type: String },
1301
+ gender: { type: String },
1282
1302
  season: { type: String },
1283
1303
  classFilter: { state: !0 },
1284
- query: { state: !0 }
1304
+ query: { state: !0 },
1305
+ pickedGender: { state: !0 }
1285
1306
  };
1286
1307
  constructor() {
1287
- super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
1288
- }
1289
- async fetchData(t) {
1290
- const e = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1291
- t.listConferences({ active: !0 }),
1292
- t.listSchools(),
1293
- t.listTeams({ sport: this.sport }),
1294
- t.listGames({ sport: this.sport, season: e }),
1295
- t.listRankings({ sport: this.sport })
1308
+ super(), this.sport = "football", this.gender = "", this.season = "", this.classFilter = "All", this.query = "", this.pickedGender = "";
1309
+ }
1310
+ /**
1311
+ * The side the table shows: the pinned `gender`, else the reader's pick,
1312
+ * else the first side fielded. '' only for a sport with one side, where
1313
+ * there is nothing to scope.
1314
+ */
1315
+ get viewGender() {
1316
+ if (this.gender) return this.gender;
1317
+ const e = he(this.data?.teams);
1318
+ return e.length < 2 ? "" : e.includes(this.pickedGender) ? this.pickedGender : e[0];
1319
+ }
1320
+ async fetchData(e) {
1321
+ const t = this.season || K(), [s, a, o, n, i] = await Promise.all([
1322
+ e.listConferences({ active: !0 }),
1323
+ e.listSchools(),
1324
+ // Deliberately NOT gender-filtered: the sub-nav decides whether to
1325
+ // offer Boys/Girls standings from the sides the sport fields, so it
1326
+ // needs the whole sport. The table filters below.
1327
+ e.listTeams({ sport: this.sport }),
1328
+ // Games carry no gender (it lives on the team they are played by),
1329
+ // so this stays the sport's season. Records key off team ids, and a
1330
+ // team only appears in its own side's games.
1331
+ e.listGames({ sport: this.sport, season: t }),
1332
+ e.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} })
1296
1333
  ]);
1297
1334
  return {
1298
- season: e,
1335
+ season: t,
1299
1336
  conferences: s.items,
1300
- schools: r.items,
1337
+ schools: a.items,
1301
1338
  teams: o.items,
1302
1339
  games: n.items,
1303
1340
  rankings: i.items
1304
1341
  };
1305
1342
  }
1306
1343
  get ctx() {
1307
- return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1308
- teamsById: $(this.data.teams),
1309
- schoolsById: $(this.data.schools),
1310
- records: K(this.data.games),
1344
+ return (!this._ctx || this._ctxData !== this.data || this._ctxGender !== this.viewGender) && (this._ctx = {
1345
+ teamsById: b(this.data.teams),
1346
+ schoolsById: b(this.data.schools),
1347
+ records: Q(this.data.games),
1311
1348
  rankings: this.data.rankings,
1312
1349
  hrefs: O(this),
1313
- sport: this.sport
1314
- }, this._ctxData = this.data), this._ctx;
1350
+ sport: this.sport,
1351
+ // The teams this view stands for — one side of a gendered
1352
+ // sport, or all of them when the sport fields only one.
1353
+ teams: et(this.data.teams, this.viewGender)
1354
+ }, this._ctxData = this.data, this._ctxGender = this.viewGender), this._ctx;
1315
1355
  }
1316
1356
  renderView() {
1317
- const t = this.ctx, e = ["All", ...[...new Set(this.data.conferences.flatMap((r) => r.classifications || []))].sort(Nt)].slice(0, 9), s = this.data.conferences.filter((r) => r.active !== !1).filter((r) => this.classFilter === "All" || (r.classifications || []).includes(this.classFilter)).sort(Le);
1318
- return h`
1319
- ${it(this, t, {
1320
- title: h`${B(this.sport)} standings`,
1321
- sub: h`${this.data.season} season · every conference, computed live from reported results`,
1357
+ const e = this.ctx, t = this.viewGender, s = this.gender ? [] : he(this.data.teams), a = ["All", ...[...new Set(this.data.conferences.flatMap((n) => n.classifications || []))].sort(Me)].slice(0, 9), o = this.data.conferences.filter((n) => n.active !== !1).filter((n) => this.classFilter === "All" || (n.classifications || []).includes(this.classFilter)).sort(Wt);
1358
+ return l`
1359
+ ${le(this, e, {
1360
+ title: l`${t ? `${k(t)} ` : ""}${k(this.sport)} standings`,
1361
+ sub: l`${this.data.season} season · every conference, computed live from reported results`,
1362
+ // The WHOLE sport, not this view's side: the sub-nav offers the
1363
+ // Boys/Girls split only when both are fielded, and a
1364
+ // gender-scoped list would always look like one side.
1322
1365
  teams: this.data.teams
1323
1366
  })}
1324
- ${P(this, h`
1367
+ ${B(this, l`
1325
1368
  ${D(this)}
1326
1369
  <div class="toolbar">
1370
+ ${s.length === 2 ? l`
1371
+ <div role="group" aria-label="Boys or girls standings">
1372
+ ${s.map((n) => l`<button class="chip ${t === n ? "on" : ""}"
1373
+ aria-pressed=${t === n ? "true" : "false"}
1374
+ @click=${() => {
1375
+ this.pickedGender = n;
1376
+ }}>${k(n)}</button>`)}
1377
+ </div>` : m}
1327
1378
  <div role="group" aria-label="Classification filter">
1328
- ${e.map((r) => h`<button class="chip ${this.classFilter === r ? "on" : ""}"
1379
+ ${a.map((n) => l`<button class="chip ${this.classFilter === n ? "on" : ""}"
1329
1380
  @click=${() => {
1330
- this.classFilter = r;
1331
- }}>${r}</button>`)}
1381
+ this.classFilter = n;
1382
+ }}>${n}</button>`)}
1332
1383
  </div>
1333
1384
  <input type="search" placeholder="Find a school…" aria-label="Find a school"
1334
- .value=${this.query} @input=${(r) => {
1335
- this.query = r.target.value;
1385
+ .value=${this.query} @input=${(n) => {
1386
+ this.query = n.target.value;
1336
1387
  }}>
1337
1388
  <span class="spacer"></span>
1338
- <span class="asof">Records through ${w(vt(), { month: "long", day: "numeric" })} · conference games count toward both records · scrimmages toward neither</span>
1389
+ <span class="asof">Records through ${x($e(), { month: "long", day: "numeric" })} · conference games count toward both records · scrimmages toward neither</span>
1339
1390
  </div>
1340
- ${s.map((r) => this.renderConference(t, r))}
1391
+ ${o.map((n) => this.renderConference(e, n))}
1341
1392
  `)}
1342
1393
  `;
1343
1394
  }
1344
- renderConference(t, e) {
1345
- const s = this.data.teams.filter((n) => n.conferenceId === e.id);
1395
+ renderConference(e, t) {
1396
+ const s = e.teams.filter((n) => n.conferenceId === t.id);
1346
1397
  if (!s.length) return m;
1347
- const r = this.query.trim().toLowerCase(), o = Jt(s, t.records);
1348
- return h`
1398
+ const a = this.query.trim().toLowerCase(), o = st(s, e.records);
1399
+ return l`
1349
1400
  <div class="card">
1350
1401
  <div class="card-head">
1351
- <h2>${e.name}</h2>
1352
- ${[...e.classifications || []].sort(Nt).map((n) => h`<span class="pill class">${n}</span>`)}
1402
+ <h2>${t.name}</h2>
1403
+ ${[...t.classifications || []].sort(Me).map((n) => l`<span class="pill class">${n}</span>`)}
1353
1404
  <span class="meta">${o.length} teams · membership derives from teams</span>
1354
1405
  </div>
1355
1406
  <div class="tablewrap"><table class="data">
@@ -1359,43 +1410,43 @@ class se extends b {
1359
1410
  <th>Streak</th><th>Last 5</th><th>Next</th>
1360
1411
  </tr></thead>
1361
1412
  <tbody>
1362
- ${o.map((n, i) => this.renderRow(t, n, i, r))}
1413
+ ${o.map((n, i) => this.renderRow(e, n, i, a))}
1363
1414
  </tbody>
1364
1415
  </table></div>
1365
1416
  </div>
1366
1417
  `;
1367
1418
  }
1368
- renderRow(t, e, s, r) {
1369
- const o = t.schoolsById[e.team.schoolId], n = o?.name || e.team.name || "TBD";
1370
- if (r && !n.toLowerCase().includes(r)) return m;
1371
- const i = e.rec.pf - e.rec.pa, l = bt(this.data.games, e.team.id), c = () => {
1372
- location.href = v(t.hrefs.school, { id: e.team.schoolId });
1419
+ renderRow(e, t, s, a) {
1420
+ const o = e.schoolsById[t.team.schoolId], n = o?.name || t.team.name || "TBD";
1421
+ if (a && !n.toLowerCase().includes(a)) return m;
1422
+ const i = t.rec.pf - t.rec.pa, c = ye(this.data.games, t.team.id), d = () => {
1423
+ location.href = g(e.hrefs.school, { id: t.team.schoolId });
1373
1424
  };
1374
- return h`
1375
- <tr class="rowlink" @click=${(d) => {
1376
- d.target.closest("a") || c();
1425
+ return l`
1426
+ <tr class="rowlink" @click=${(h) => {
1427
+ h.target.closest("a") || d();
1377
1428
  }}>
1378
1429
  <td class="mut">${s + 1}</td>
1379
1430
  <td class="teamcell">
1380
- ${E(o)}${wt(t, e.team.id, null)}
1381
- <a href=${v(t.hrefs.school, { id: e.team.schoolId })}>${n}</a>
1431
+ ${P(o)}${xe(e, t.team.id, null)}
1432
+ <a href=${g(e.hrefs.school, { id: t.team.schoolId })}>${n}</a>
1382
1433
  </td>
1383
- <td class="num">${k(e.rec, !0)}</td>
1384
- <td class="num">${Ft(e.confPct)}</td>
1385
- <td class="num">${k(e.rec)}</td>
1386
- <td class="num">${Ft(e.overallPct)}</td>
1387
- <td class="num">${e.rec.pf}</td>
1388
- <td class="num">${e.rec.pa}</td>
1434
+ <td class="num">${S(t.rec, !0)}</td>
1435
+ <td class="num">${Oe(t.confPct)}</td>
1436
+ <td class="num">${S(t.rec)}</td>
1437
+ <td class="num">${Oe(t.overallPct)}</td>
1438
+ <td class="num">${t.rec.pf}</td>
1439
+ <td class="num">${t.rec.pa}</td>
1389
1440
  <td class="num" style="color:${i >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${i > 0 ? "+" : ""}${i}</td>
1390
- <td>${nt(e.rec.results) || "·"}</td>
1391
- <td>${xt(t, e.team.id)}</td>
1392
- <td>${te(t, l, e.team.id)}</td>
1441
+ <td>${ie(t.rec.results) || "·"}</td>
1442
+ <td>${ke(e, t.team.id)}</td>
1443
+ <td>${at(e, c, t.team.id)}</td>
1393
1444
  </tr>
1394
1445
  `;
1395
1446
  }
1396
1447
  }
1397
- globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", se);
1398
- const rs = y`
1448
+ globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", nt);
1449
+ const ds = w`
1399
1450
  .hero1 {
1400
1451
  border-radius: var(--hsot-radius-md); color: var(--hsot-white);
1401
1452
  padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
@@ -1412,10 +1463,10 @@ const rs = y`
1412
1463
  .delta.new { background: var(--hsot-straw); color: #6b5900; border-radius: var(--hsot-radius-xs); padding: 0.1rem 0.3rem; font-size: 0.7rem; }
1413
1464
  .sparkline { vertical-align: middle; }
1414
1465
  `;
1415
- class ae extends b {
1416
- static styles = [...U, rs];
1466
+ class it extends y {
1467
+ static styles = [...U, ds];
1417
1468
  static properties = {
1418
- ...b.properties,
1469
+ ...y.properties,
1419
1470
  sport: { type: String },
1420
1471
  gender: { type: String },
1421
1472
  season: { type: String },
@@ -1426,21 +1477,21 @@ class ae extends b {
1426
1477
  }
1427
1478
  connectedCallback() {
1428
1479
  super.connectedCallback();
1429
- const t = new URLSearchParams(globalThis.location?.search || "").get("poll");
1430
- t && (this.pollDate = t);
1431
- }
1432
- async fetchData(t) {
1433
- const e = this.season || Y(), [s, r, o, n, i] = await Promise.all([
1434
- t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
1435
- t.listSchools(),
1436
- t.listTeams({ sport: this.sport }),
1437
- t.listConferences(),
1438
- t.listGames({ sport: this.sport, season: e })
1439
- ]), l = s.items.filter((c) => !this.gender || !c.gender || c.gender === this.gender).sort((c, d) => d.effectiveDate.localeCompare(c.effectiveDate));
1480
+ const e = new URLSearchParams(globalThis.location?.search || "").get("poll");
1481
+ e && (this.pollDate = e);
1482
+ }
1483
+ async fetchData(e) {
1484
+ const t = this.season || K(), [s, a, o, n, i] = await Promise.all([
1485
+ e.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
1486
+ e.listSchools(),
1487
+ e.listTeams({ sport: this.sport }),
1488
+ e.listConferences(),
1489
+ e.listGames({ sport: this.sport, season: t })
1490
+ ]), c = s.items.filter((d) => !this.gender || !d.gender || d.gender === this.gender).sort((d, h) => h.effectiveDate.localeCompare(d.effectiveDate));
1440
1491
  return {
1441
- season: e,
1442
- polls: l,
1443
- schools: r.items,
1492
+ season: t,
1493
+ polls: c,
1494
+ schools: a.items,
1444
1495
  teams: o.items,
1445
1496
  conferences: n.items,
1446
1497
  games: i.items
@@ -1448,127 +1499,127 @@ class ae extends b {
1448
1499
  }
1449
1500
  get ctx() {
1450
1501
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1451
- teamsById: $(this.data.teams),
1452
- schoolsById: $(this.data.schools),
1453
- records: K(this.data.games),
1502
+ teamsById: b(this.data.teams),
1503
+ schoolsById: b(this.data.schools),
1504
+ records: Q(this.data.games),
1454
1505
  rankings: this.data.polls,
1455
1506
  hrefs: O(this),
1456
1507
  sport: this.sport
1457
1508
  }, this._ctxData = this.data), this._ctx;
1458
1509
  }
1459
- sparkline(t, e, s) {
1460
- const i = e.map((p, u) => {
1461
- const f = (p.teamIds || []).indexOf(t);
1510
+ sparkline(e, t, s) {
1511
+ const i = t.map((p, u) => {
1512
+ const f = (p.teamIds || []).indexOf(e);
1462
1513
  if (f === -1) return null;
1463
- const g = e.length === 1 ? 96 / 2 : u / (e.length - 1) * 90 + 3, x = 3 + f / 24 * 20;
1464
- return { x: g, y: x };
1465
- }), l = [];
1466
- let c = [];
1514
+ const v = t.length === 1 ? 96 / 2 : u / (t.length - 1) * 90 + 3, $ = 3 + f / 24 * 20;
1515
+ return { x: v, y: $ };
1516
+ }), c = [];
1517
+ let d = [];
1467
1518
  if (i.forEach((p) => {
1468
- p ? c.push(p) : c.length && (l.push(c), c = []);
1469
- }), c.length && l.push(c), !l.length) return m;
1470
- const d = i[s];
1471
- return h`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1472
- ${l.map((p) => zt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1519
+ p ? d.push(p) : d.length && (c.push(d), d = []);
1520
+ }), d.length && c.push(d), !c.length) return m;
1521
+ const h = i[s];
1522
+ return l`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1523
+ ${c.map((p) => Re`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1473
1524
  points=${p.map((u) => `${u.x.toFixed(1)},${u.y.toFixed(1)}`).join(" ")}></polyline>`)}
1474
- ${d ? zt`<circle cx=${d.x.toFixed(1)} cy=${d.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
1525
+ ${h ? Re`<circle cx=${h.x.toFixed(1)} cy=${h.y.toFixed(1)} r="3" fill="var(--hsot-black)"></circle>` : m}
1475
1526
  </svg>`;
1476
1527
  }
1477
- movement(t, e, s) {
1478
- const r = es(t, e, s);
1479
- return r.kind === "up" ? h`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? h`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? h`<span class="delta new">NEW</span>` : r.kind === "same" ? h`<span class="delta same">—</span>` : h`<span class="delta same">·</span>`;
1528
+ movement(e, t, s) {
1529
+ const a = is(e, t, s);
1530
+ return a.kind === "up" ? l`<span class="delta up">▲ ${a.delta}</span>` : a.kind === "down" ? l`<span class="delta down">▼ ${a.delta}</span>` : a.kind === "new" ? l`<span class="delta new">NEW</span>` : a.kind === "same" ? l`<span class="delta same">—</span>` : l`<span class="delta same">·</span>`;
1480
1531
  }
1481
1532
  renderView() {
1482
- const t = this.ctx, e = this.data.polls;
1483
- if (!e.length) return h`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
1484
- const s = Math.max(0, e.findIndex((p) => p.effectiveDate === this.pollDate)), r = e[s] || e[0], o = e[s + 1] || null, n = e.slice().reverse(), i = n.indexOf(r), l = $(this.data.conferences), c = (r.teamIds || [])[0], d = c ? C(t, c) : null;
1485
- return h`
1486
- ${it(this, t, {
1487
- title: h`${B(this.sport)} Top 25`,
1488
- sub: h`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
1533
+ const e = this.ctx, t = this.data.polls;
1534
+ if (!t.length) return l`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
1535
+ const s = Math.max(0, t.findIndex((p) => p.effectiveDate === this.pollDate)), a = t[s] || t[0], o = t[s + 1] || null, n = t.slice().reverse(), i = n.indexOf(a), c = b(this.data.conferences), d = (a.teamIds || [])[0], h = d ? C(e, d) : null;
1536
+ return l`
1537
+ ${le(this, e, {
1538
+ title: l`${k(this.sport)} Top 25`,
1539
+ sub: l`The HighSchoolOT poll · updated weekly · ${t.length} polls this season`,
1489
1540
  teams: this.data.teams
1490
1541
  })}
1491
- ${P(this, h`
1542
+ ${B(this, l`
1492
1543
  ${D(this)}
1493
1544
  <div class="toolbar">
1494
1545
  <label class="asof" for="pollsel">Poll of</label>
1495
1546
  <select id="pollsel" @change=${(p) => {
1496
1547
  this.pollDate = p.target.value;
1497
1548
  }}>
1498
- ${e.map((p, u) => h`<option value=${p.effectiveDate} ?selected=${p === r}>
1499
- ${w(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${u === 0 ? " · current" : ""}
1549
+ ${t.map((p, u) => l`<option value=${p.effectiveDate} ?selected=${p === a}>
1550
+ ${x(p.effectiveDate, { month: "long", day: "numeric", year: "numeric" })}${u === 0 ? " · current" : ""}
1500
1551
  </option>`)}
1501
1552
  </select>
1502
- <button class="chip" ?disabled=${s >= e.length - 1}
1553
+ <button class="chip" ?disabled=${s >= t.length - 1}
1503
1554
  @click=${() => {
1504
- this.pollDate = e[s + 1].effectiveDate;
1555
+ this.pollDate = t[s + 1].effectiveDate;
1505
1556
  }}>← Older</button>
1506
1557
  <button class="chip" ?disabled=${s <= 0}
1507
1558
  @click=${() => {
1508
- this.pollDate = e[s - 1].effectiveDate;
1559
+ this.pollDate = t[s - 1].effectiveDate;
1509
1560
  }}>Newer →</button>
1510
1561
  <span class="spacer"></span>
1511
1562
  <span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
1512
1563
  </div>
1513
- ${d ? this.renderHero(t, r, o, c, d, l) : m}
1564
+ ${h ? this.renderHero(e, a, o, d, h, c) : m}
1514
1565
  <div class="card"><div class="tablewrap"><table class="data">
1515
1566
  <thead><tr>
1516
1567
  <th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
1517
1568
  <th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
1518
1569
  </tr></thead>
1519
1570
  <tbody>
1520
- ${(r.teamIds || []).map((p, u) => u === 0 || !p ? m : this.renderRow(t, r, o, n, i, l, p, u + 1))}
1571
+ ${(a.teamIds || []).map((p, u) => u === 0 || !p ? m : this.renderRow(e, a, o, n, i, c, p, u + 1))}
1521
1572
  </tbody>
1522
1573
  </table></div></div>
1523
1574
  <p class="note">Ranks elsewhere on the site resolve the poll in effect on the game date, so past box scores keep the ranks they were played under.</p>
1524
1575
  `)}
1525
1576
  `;
1526
1577
  }
1527
- renderHero(t, e, s, r, o, n) {
1528
- const i = t.records[r], l = Ot(t.records, r), c = n[t.teamsById[r]?.conferenceId], d = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
1529
- return h`
1530
- <div class="hero1" style="background:${d}">
1578
+ renderHero(e, t, s, a, o, n) {
1579
+ const i = e.records[a], c = Ue(e.records, a), d = n[e.teamsById[a]?.conferenceId], h = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
1580
+ return l`
1581
+ <div class="hero1" style="background:${h}">
1531
1582
  <div class="bigrank">#1</div>
1532
- ${E(o, 64)}
1583
+ ${P(o, 64)}
1533
1584
  <div>
1534
- <h2><a href=${v(t.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
1585
+ <h2><a href=${g(e.hrefs.school, { id: o.id })}>${o.name} ${o.mascot || ""}</a></h2>
1535
1586
  <div class="facts">
1536
- ${k(i)} overall${c ? h` · ${k(i, !0)} ${c.name}` : m}
1537
- · streak ${nt(i?.results) || "·"}
1538
- ${l ? h` · last: ${l.mark} ${l.my}-${l.their} vs ${et(t, l.opp)}` : m}
1539
- &nbsp;${this.movement(e, s, r)}
1587
+ ${S(i)} overall${d ? l` · ${S(i, !0)} ${d.name}` : m}
1588
+ · streak ${ie(i?.results) || "·"}
1589
+ ${c ? l` · last: ${c.mark} ${c.my}-${c.their} vs ${se(e, c.opp)}` : m}
1590
+ &nbsp;${this.movement(t, s, a)}
1540
1591
  </div>
1541
1592
  </div>
1542
1593
  </div>
1543
1594
  `;
1544
1595
  }
1545
- renderRow(t, e, s, r, o, n, i, l) {
1546
- const c = C(t, i);
1547
- if (!c) return m;
1548
- const d = t.records[i], p = Ot(t.records, i), u = bt(this.data.games, i), f = n[t.teamsById[i]?.conferenceId], g = () => {
1549
- location.href = v(t.hrefs.school, { id: c.id });
1596
+ renderRow(e, t, s, a, o, n, i, c) {
1597
+ const d = C(e, i);
1598
+ if (!d) return m;
1599
+ const h = e.records[i], p = Ue(e.records, i), u = ye(this.data.games, i), f = n[e.teamsById[i]?.conferenceId], v = () => {
1600
+ location.href = g(e.hrefs.school, { id: d.id });
1550
1601
  };
1551
- return h`
1552
- <tr class="rowlink" @click=${(x) => {
1553
- x.target.closest("a") || g();
1602
+ return l`
1603
+ <tr class="rowlink" @click=${($) => {
1604
+ $.target.closest("a") || v();
1554
1605
  }}>
1555
- <td class="num" style="font-weight:700">${l}</td>
1556
- <td>${this.movement(e, s, i)}</td>
1557
- <td class="teamcell">${E(c)}<a href=${v(t.hrefs.school, { id: c.id })}>${c.name}</a>
1558
- <span class="mut" style="font-size:0.78rem">${c.mascot || ""}</span></td>
1559
- <td class="num">${k(d)}</td>
1606
+ <td class="num" style="font-weight:700">${c}</td>
1607
+ <td>${this.movement(t, s, i)}</td>
1608
+ <td class="teamcell">${P(d)}<a href=${g(e.hrefs.school, { id: d.id })}>${d.name}</a>
1609
+ <span class="mut" style="font-size:0.78rem">${d.mascot || ""}</span></td>
1610
+ <td class="num">${S(h)}</td>
1560
1611
  <td class="mut">${f?.name || "Independent"}</td>
1561
- <td>${p ? h`<a class="box" style="text-decoration:none" href=${v(t.hrefs.game, { sport: this.sport, id: p.gameId })}>
1612
+ <td>${p ? l`<a class="box" style="text-decoration:none" href=${g(e.hrefs.game, { sport: this.sport, id: p.gameId })}>
1562
1613
  <b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
1563
- ${p.my}-${p.their} vs ${et(t, p.opp)}</a>` : h`<span class="mut">·</span>`}</td>
1564
- <td>${te(t, u, i)}</td>
1565
- <td>${this.sparkline(i, r, o)}</td>
1614
+ ${p.my}-${p.their} vs ${se(e, p.opp)}</a>` : l`<span class="mut">·</span>`}</td>
1615
+ <td>${at(e, u, i)}</td>
1616
+ <td>${this.sparkline(i, a, o)}</td>
1566
1617
  </tr>
1567
1618
  `;
1568
1619
  }
1569
1620
  }
1570
- globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", ae);
1571
- const os = y`
1621
+ globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", it);
1622
+ const hs = w`
1572
1623
  .schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
1573
1624
  .schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
1574
1625
  .schoolhero .crest {
@@ -1622,173 +1673,179 @@ const os = y`
1622
1673
  table.data.roster .sub { display: block; font-weight: 400; font-size: 0.78rem; color: var(--hsot-gray-5); }
1623
1674
  }
1624
1675
  `;
1625
- class re extends b {
1626
- static styles = [...U, os];
1676
+ class lt extends y {
1677
+ static styles = [...U, hs];
1627
1678
  static properties = {
1628
- ...b.properties,
1679
+ ...y.properties,
1629
1680
  schoolId: { type: String, attribute: "school-id" },
1630
1681
  sport: { type: String },
1682
+ gender: { type: String },
1631
1683
  season: { type: String },
1632
1684
  activeTeamId: { state: !0 }
1633
1685
  };
1634
1686
  constructor() {
1635
- super(), this.schoolId = "", this.sport = "", this.season = "", this.activeTeamId = "";
1687
+ super(), this.schoolId = "", this.sport = "", this.gender = "", this.season = "", this.activeTeamId = "";
1636
1688
  }
1637
1689
  connectedCallback() {
1638
1690
  super.connectedCallback();
1639
- const t = new URLSearchParams(globalThis.location?.search || "").get("sport");
1640
- t && !this.sport && (this.sport = t);
1641
- }
1642
- async fetchData(t) {
1643
- const e = this.season || Y(), s = await t.getSchool(this.schoolId), o = (await t.listTeams({ schoolId: this.schoolId })).items, n = o.find((g) => g.sport === (this.sport || "football")) || o[0] || null, [i, l, c, d, p, u, f] = await Promise.all([
1644
- n ? t.listGames({ sport: n.sport, season: e }) : Promise.resolve({ items: [] }),
1645
- n ? t.listTeams({ sport: n.sport }) : Promise.resolve({ items: [] }),
1646
- t.listSchools(),
1647
- t.listConferences(),
1648
- n ? t.listRankings({ sport: n.sport }) : Promise.resolve({ items: [] }),
1649
- n ? t.listRosters({ teamId: n.id }) : Promise.resolve({ items: [] }),
1691
+ const e = new URLSearchParams(globalThis.location?.search || ""), t = e.get("sport"), s = e.get("gender");
1692
+ t && !this.sport && (this.sport = t), s && !this.gender && (this.gender = s);
1693
+ }
1694
+ async fetchData(e) {
1695
+ const t = this.season || K(), s = await e.getSchool(this.schoolId), o = (await e.listTeams({ schoolId: this.schoolId })).items, n = this.sport || "football", i = o.find(($) => $.id === this.activeTeamId) || o.find(($) => $.sport === n && Xe($, this.gender)) || o.find(($) => $.sport === n) || o[0] || null, [c, d, h, p, u, f, v] = await Promise.all([
1696
+ i ? e.listGames({ sport: i.sport, season: t }) : Promise.resolve({ items: [] }),
1697
+ i ? e.listTeams({ sport: i.sport }) : Promise.resolve({ items: [] }),
1698
+ e.listSchools(),
1699
+ e.listConferences(),
1700
+ i ? e.listRankings({ sport: i.sport }) : Promise.resolve({ items: [] }),
1701
+ i ? e.listRosters({ teamId: i.id }) : Promise.resolve({ items: [] }),
1650
1702
  // teamId is the public surface's one players filter (roster
1651
1703
  // membership) — never fetch the whole collection.
1652
- n ? t.listPlayers({ teamId: n.id }) : Promise.resolve({ items: [] })
1704
+ i ? e.listPlayers({ teamId: i.id }) : Promise.resolve({ items: [] })
1653
1705
  ]);
1654
1706
  return {
1655
- season: e,
1707
+ season: t,
1656
1708
  school: s,
1657
1709
  teams: o,
1658
- active: n,
1659
- games: i.items,
1660
- allTeams: l.items,
1661
- schools: c.items,
1662
- conferences: d.items,
1663
- rankings: p.items,
1664
- roster: u.items.find((g) => g.season === e) || null,
1665
- players: f.items
1710
+ active: i,
1711
+ games: c.items,
1712
+ allTeams: d.items,
1713
+ schools: h.items,
1714
+ conferences: p.items,
1715
+ rankings: u.items,
1716
+ roster: f.items.find(($) => $.season === t) || null,
1717
+ players: v.items
1666
1718
  };
1667
1719
  }
1668
1720
  get ctx() {
1669
1721
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1670
- teamsById: $(this.data.allTeams.length ? this.data.allTeams : this.data.teams),
1671
- schoolsById: $(this.data.schools),
1672
- records: K(this.data.games),
1722
+ teamsById: b(this.data.allTeams.length ? this.data.allTeams : this.data.teams),
1723
+ schoolsById: b(this.data.schools),
1724
+ records: Q(this.data.games),
1673
1725
  rankings: this.data.rankings,
1674
1726
  hrefs: O(this),
1675
1727
  sport: this.data.active?.sport || "football"
1676
1728
  }, this._ctxData = this.data), this._ctx;
1677
1729
  }
1678
- switchSport(t) {
1679
- this.sport = t, this.load();
1730
+ /**
1731
+ * Open a team's tab. The team id is what selects it — sport alone is
1732
+ * ambiguous on a gendered sport — with sport and gender kept in step so
1733
+ * the rest of the view and a shared ?sport=&gender= link agree with it.
1734
+ */
1735
+ switchTeam(e) {
1736
+ e && (this.activeTeamId = e.id, this.sport = e.sport, this.gender = e.gender || "", this.load());
1680
1737
  }
1681
1738
  renderView() {
1682
- const { school: t, teams: e, active: s, season: r } = this.data;
1683
- if (!t) return h`<div class="view"><p class="empty">School not found.</p></div>`;
1684
- const o = this.ctx, n = X(t.colorPrimary || "#030711"), i = (t.adm || [])[0], l = $(this.data.conferences), c = s ? l[s.conferenceId] : null;
1685
- return h`
1686
- <div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${n}">
1739
+ const { school: e, teams: t, active: s, season: a } = this.data;
1740
+ if (!e) return l`<div class="view"><p class="empty">School not found.</p></div>`;
1741
+ const o = this.ctx, n = ee(e.colorPrimary || "#030711"), i = (e.adm || [])[0], c = b(this.data.conferences), d = s ? c[s.conferenceId] : null;
1742
+ return l`
1743
+ <div class="schoolhero" style="background:linear-gradient(115deg, ${e.colorPrimary || "#030711"} 0%, ${e.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${n}">
1687
1744
  <div class="inner">
1688
- ${tt(t, 84) ? h`<img class="crest logo" alt="" loading="lazy" src=${tt(t, 84)} />` : h`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${X(t.colorSecondary || "#7C7C7C")}">${$t(t)}</div>`}
1745
+ ${te(e, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${te(e, 84)} />` : l`<div class="crest" style="background:${e.colorSecondary || "#7C7C7C"};color:${ee(e.colorSecondary || "#7C7C7C")}">${be(e)}</div>`}
1689
1746
  <div style="min-width:260px">
1690
- <h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
1747
+ <h1>${e.name} <span class="mascot">${e.mascot || ""}</span></h1>
1691
1748
  <div class="facts">
1692
- ${t.location ? h`<span><b>Location</b>${t.location}${t.county ? h` · ${t.county} County` : m}</span>` : m}
1693
- ${t.association ? h`<span><b>League</b>${t.association}${t.classification ? h` · ${t.classification}` : m}</span>` : m}
1694
- ${c ? h`<span><b>Conference</b>${c.name}</span>` : m}
1695
- ${i ? h`<span><b>Enrollment</b>${i.value.toLocaleString()} (${i.season} ADM)</span>` : m}
1696
- ${t.openingYear ? h`<span><b>Opened</b>${t.openingYear}</span>` : m}
1697
- ${t.areaCode ? h`<span><b>Area</b>${t.areaCode}</span>` : m}
1749
+ ${e.location ? l`<span><b>Location</b>${e.location}${e.county ? l` · ${e.county} County` : m}</span>` : m}
1750
+ ${e.association ? l`<span><b>League</b>${e.association}${e.classification ? l` · ${e.classification}` : m}</span>` : m}
1751
+ ${d ? l`<span><b>Conference</b>${d.name}</span>` : m}
1752
+ ${i ? l`<span><b>Enrollment</b>${i.value.toLocaleString()} (${i.season} ADM)</span>` : m}
1753
+ ${e.openingYear ? l`<span><b>Opened</b>${e.openingYear}</span>` : m}
1754
+ ${e.areaCode ? l`<span><b>Area</b>${e.areaCode}</span>` : m}
1698
1755
  </div>
1699
1756
  </div>
1700
1757
  </div>
1701
1758
  </div>
1702
1759
  <div class="band">
1703
1760
  <nav class="tabs" aria-label="Teams">
1704
- ${e.map((d) => d.id === s?.id ? h`<a class="on" href="#" @click=${(p) => p.preventDefault()}>${d.name}</a>` : h`<a href="#" @click=${(p) => {
1705
- p.preventDefault(), this.switchSport(d.sport);
1706
- }}>${d.name}</a>`)}
1761
+ ${t.map((h) => h.id === s?.id ? l`<a class="on" href="#" aria-current="page" @click=${(p) => p.preventDefault()}>${h.name}</a>` : l`<a href="#" @click=${(p) => {
1762
+ p.preventDefault(), this.switchTeam(h);
1763
+ }}>${h.name}</a>`)}
1707
1764
  </nav>
1708
1765
  </div>
1709
- ${P(this, h`
1766
+ ${B(this, l`
1710
1767
  ${D(this)}
1711
- ${s ? this.renderTeam(o, s, c, r) : h`<p class="empty">No teams recorded for this school yet.</p>`}
1768
+ ${s ? this.renderTeam(o, s, d, a) : l`<p class="empty">No teams recorded for this school yet.</p>`}
1712
1769
  `)}
1713
1770
  `;
1714
1771
  }
1715
- renderTeam(t, e, s, r) {
1716
- const o = t.records[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, n = o.w + o.l + o.t, i = s ? this.data.allTeams.filter((p) => p.conferenceId === s.id) : [], l = s ? Jt(i, t.records).findIndex((p) => p.team.id === e.id) + 1 : 0, c = yt(t.rankings, t.teamsById, e.id, e.sport, null), d = this.data.games.filter((p) => p.homeTeamId === e.id || p.awayTeamId === e.id).sort((p, u) => String(p.date).localeCompare(String(u.date)));
1717
- return h`
1772
+ renderTeam(e, t, s, a) {
1773
+ const o = e.records[t.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] }, n = o.w + o.l + o.t, i = s ? et(this.data.allTeams.filter((p) => p.conferenceId === s.id), t.gender) : [], c = s ? st(i, e.records).findIndex((p) => p.team.id === t.id) + 1 : 0, d = we(e.rankings, e.teamsById, t.id, t.sport, null), h = this.data.games.filter((p) => p.homeTeamId === t.id || p.awayTeamId === t.id).sort((p, u) => String(p.date).localeCompare(String(u.date)));
1774
+ return l`
1718
1775
  <div class="tiles">
1719
- <div class="tile"><div class="k">Overall</div><div class="v">${k(o)}</div><div class="s">${n} games played</div></div>
1720
- <div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${k(o, !0)}</div>
1721
- <div class="s">${l ? `${He(l)} of ${i.length}` : "·"}</div></div>
1776
+ <div class="tile"><div class="k">Overall</div><div class="v">${S(o)}</div><div class="s">${n} games played</div></div>
1777
+ <div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${S(o, !0)}</div>
1778
+ <div class="s">${c ? `${qt(c)} of ${i.length}` : "·"}</div></div>
1722
1779
  <div class="tile"><div class="k">Points</div><div class="v">${n ? (o.pf / n).toFixed(1) : "0.0"}</div>
1723
1780
  <div class="s">scored per game · ${n ? (o.pa / n).toFixed(1) : "0.0"} allowed</div></div>
1724
- <div class="tile"><div class="k">Streak</div><div class="v">${nt(o.results) || "·"}</div>
1725
- <div class="s">last 5: ${xt(t, e.id)}</div></div>
1726
- <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${c ? `#${c}` : "NR"}</div>
1727
- <div class="s"><a href=${v(t.hrefs.section, { sport: e.sport, view: "rankings" })}>full poll</a></div></div>
1781
+ <div class="tile"><div class="k">Streak</div><div class="v">${ie(o.results) || "·"}</div>
1782
+ <div class="s">last 5: ${ke(e, t.id)}</div></div>
1783
+ <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${d ? `#${d}` : "NR"}</div>
1784
+ <div class="s"><a href=${g(e.hrefs.section, { sport: t.sport, view: "rankings" })}>full poll</a></div></div>
1728
1785
  </div>
1729
- ${(e.championships || []).length ? h`
1786
+ ${(t.championships || []).length ? l`
1730
1787
  <div style="margin:-0.2rem 0 1rem;display:flex;gap:0.4rem;flex-wrap:wrap">
1731
- ${e.championships.map((p) => h`<span class="pill champ">★ ${p.season} ${p.title} champion${p.classification ? ` · ${p.classification}` : ""}${p.region ? ` · ${p.region}` : ""}</span>`)}
1788
+ ${t.championships.map((p) => l`<span class="pill champ">★ ${p.season} ${p.title} champion${p.classification ? ` · ${p.classification}` : ""}${p.region ? ` · ${p.region}` : ""}</span>`)}
1732
1789
  </div>` : m}
1733
1790
  <div class="cols">
1734
1791
  <div>
1735
1792
  <div class="section-title">Schedule &amp; results</div>
1736
1793
  <div class="card">
1737
- ${d.length ? h`<ul class="gamelist">${d.map((p) => this.renderGameRow(t, e, p))}</ul>` : h`<p class="empty">No ${e.sport} games recorded for ${r}.</p>`}
1794
+ ${h.length ? l`<ul class="gamelist">${h.map((p) => this.renderGameRow(e, t, p))}</ul>` : l`<p class="empty">No ${t.sport} games recorded for ${a}.</p>`}
1738
1795
  </div>
1739
1796
  </div>
1740
1797
  <div>
1741
- <div class="section-title">Roster · ${r}</div>
1742
- <div class="card">${this.renderRoster(e, r)}</div>
1798
+ <div class="section-title">Roster · ${a}</div>
1799
+ <div class="card">${this.renderRoster(t, a)}</div>
1743
1800
  </div>
1744
1801
  </div>
1745
1802
  `;
1746
1803
  }
1747
- renderGameRow(t, e, s) {
1748
- const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, n = r ? s.homeScore : s.awayScore, i = r ? s.awayScore : s.homeScore;
1749
- let l = h`<span class="mut">${gt(s.time)}</span>`;
1804
+ renderGameRow(e, t, s) {
1805
+ const a = s.homeTeamId === t.id, o = a ? s.awayTeamId : s.homeTeamId, n = a ? s.homeScore : s.awayScore, i = a ? s.awayScore : s.homeScore;
1806
+ let c = l`<span class="mut">${ve(s.time)}</span>`;
1750
1807
  if (s.state === "final") {
1751
- const d = ot(s), p = d === "tie" ? "T" : d === (r ? "home" : "away") ? "W" : "L";
1752
- l = h`<span class=${p}>${p}</span> ${n}-${i}${s.finish === "overtime" ? h` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? h` <span class="mut">FF</span>` : m}`;
1753
- } else s.state === "live" && (l = h`<span style="color:var(--hsot-red)">${n}-${i}</span>`);
1754
- const c = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1755
- return h`
1808
+ const h = ne(s), p = h === "tie" ? "T" : h === (a ? "home" : "away") ? "W" : "L";
1809
+ c = l`<span class=${p}>${p}</span> ${n}-${i}${s.finish === "overtime" ? l` <span class="mut">OT</span>` : m}${s.forfeit && s.forfeit !== "none" ? l` <span class="mut">FF</span>` : m}`;
1810
+ } else s.state === "live" && (c = l`<span style="color:var(--hsot-red)">${n}-${i}</span>`);
1811
+ const d = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1812
+ return l`
1756
1813
  <li>
1757
- <span class="d">${w(s.date)}</span>
1758
- ${Qt(s).kind === "sched" ? m : W(s)}
1759
- <span class="res">${l}</span>
1760
- <span class="opp">${r ? "vs" : "at"} ${st(t, o, s.date)}
1761
- <span class="pill type">${c}</span>
1762
- ${s.broadcast ? h`<span class="pill class">${s.broadcast}</span>` : m}
1814
+ <span class="d">${x(s.date)}</span>
1815
+ ${Je(s).kind === "sched" ? m : V(s)}
1816
+ <span class="res">${c}</span>
1817
+ <span class="opp">${a ? "vs" : "at"} ${re(e, o, s.date)}
1818
+ <span class="pill type">${d}</span>
1819
+ ${s.broadcast ? l`<span class="pill class">${s.broadcast}</span>` : m}
1763
1820
  </span>
1764
1821
  <span class="where">${s.venue || ""}</span>
1765
- <a class="box" href=${v(t.hrefs.game, { sport: e.sport, id: s.id })}>Box score →</a>
1822
+ <a class="box" href=${g(e.hrefs.game, { sport: t.sport, id: s.id })}>Box score →</a>
1766
1823
  </li>
1767
1824
  `;
1768
1825
  }
1769
- renderRoster(t, e) {
1826
+ renderRoster(e, t) {
1770
1827
  const s = this.data.roster;
1771
1828
  if (!s)
1772
- return h`<p class="empty">Roster not published for ${e}.</p>`;
1773
- const r = as(s, 560), o = this.data.school?.name || "", n = $(this.data.players), i = s.entries.slice().sort((c, d) => (c.number || 0) - (d.number || 0)), l = i.some((c) => n[c.playerId]?.college);
1774
- return h`
1775
- ${r ? h`<img class="rosterphoto" src=${r} loading="lazy" decoding="async"
1776
- alt="${o} ${t.name} ${e} team photo" />` : m}
1829
+ return l`<p class="empty">Roster not published for ${t}.</p>`;
1830
+ const a = cs(s, 560), o = this.data.school?.name || "", n = b(this.data.players), i = s.entries.slice().sort((d, h) => (d.number || 0) - (h.number || 0)), c = i.some((d) => n[d.playerId]?.college);
1831
+ return l`
1832
+ ${a ? l`<img class="rosterphoto" src=${a} loading="lazy" decoding="async"
1833
+ alt="${o} ${e.name} ${t} team photo" />` : m}
1777
1834
  <div class="tablewrap"><table class="data roster">
1778
- <thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${l ? h`<th>College</th>` : m}</tr></thead>
1835
+ <thead><tr><th class="num">No.</th><th>Player</th><th class="pos">Pos</th><th class="cls">Class</th><th class="num">Ht</th><th class="num">Wt</th>${c ? l`<th>College</th>` : m}</tr></thead>
1779
1836
  <tbody>
1780
- ${i.map((c) => {
1781
- const d = n[c.playerId];
1782
- if (!d) return m;
1783
- const p = Oe(c), u = [p, d.classOf].filter(Boolean).join(" · ") || "·";
1784
- return h`<tr>
1785
- <td class="num mut">${c.number ?? "·"}</td>
1786
- <td class="player" style="font-weight:500">${d.firstName} ${d.lastName}<span class="sub">${u}</span></td>
1837
+ ${i.map((d) => {
1838
+ const h = n[d.playerId];
1839
+ if (!h) return m;
1840
+ const p = Gt(d), u = [p, h.classOf].filter(Boolean).join(" · ") || "·";
1841
+ return l`<tr>
1842
+ <td class="num mut">${d.number ?? "·"}</td>
1843
+ <td class="player" style="font-weight:500">${h.firstName} ${h.lastName}<span class="sub">${u}</span></td>
1787
1844
  <td class="pos">${p || "·"}</td>
1788
- <td class="cls mut">${d.classOf || "·"}</td>
1789
- <td class="num">${Fe(d.heightIn)}</td>
1790
- <td class="num">${d.weightLb || "·"}</td>
1791
- ${l ? h`<td class="college">${d.college || "·"}</td>` : m}
1845
+ <td class="cls mut">${h.classOf || "·"}</td>
1846
+ <td class="num">${Lt(h.heightIn)}</td>
1847
+ <td class="num">${h.weightLb || "·"}</td>
1848
+ ${c ? l`<td class="college">${h.college || "·"}</td>` : m}
1792
1849
  </tr>`;
1793
1850
  })}
1794
1851
  </tbody>
@@ -1796,8 +1853,8 @@ class re extends b {
1796
1853
  `;
1797
1854
  }
1798
1855
  }
1799
- globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", re);
1800
- const oe = {
1856
+ globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", lt);
1857
+ const ct = {
1801
1858
  football: ["quarters", 4],
1802
1859
  flag_football: ["quarters", 4],
1803
1860
  basketball: ["quarters", 4],
@@ -1808,78 +1865,78 @@ const oe = {
1808
1865
  softball: ["innings", 7],
1809
1866
  volleyball: ["sets", 3]
1810
1867
  };
1811
- function ne(a) {
1812
- return (oe[a] || ["quarters", 4])[0];
1868
+ function dt(r) {
1869
+ return (ct[r] || ["quarters", 4])[0];
1813
1870
  }
1814
- function kt(a) {
1815
- return (oe[a] || ["quarters", 4])[1];
1871
+ function Se(r) {
1872
+ return (ct[r] || ["quarters", 4])[1];
1816
1873
  }
1817
- function ns(a, t) {
1818
- const e = ne(a), s = kt(a);
1819
- if (t <= s || e === "innings" || e === "sets") return String(t);
1820
- const r = t - s;
1821
- return `OT${r > 1 ? r : ""}`;
1874
+ function ps(r, e) {
1875
+ const t = dt(r), s = Se(r);
1876
+ if (e <= s || t === "innings" || t === "sets") return String(e);
1877
+ const a = e - s;
1878
+ return `OT${a > 1 ? a : ""}`;
1822
1879
  }
1823
- function is(a, t) {
1824
- const e = String(a ?? "").trim();
1880
+ function ms(r, e) {
1881
+ const t = String(r ?? "").trim();
1825
1882
  let s;
1826
- return (s = /^(\d+)Q$/i.exec(e)) || (s = /^(\d+)H$/i.exec(e)) ? Number(s[1]) : /^half$/i.test(e) ? ne(t) === "halves" ? 1 : 2 : (s = /^(\d*)OT(\d*)$/i.exec(e)) ? kt(t) + Number(s[1] || s[2] || 1) : (s = /^[TB](\d+)$/i.exec(e)) || (s = /^(\d+)(?:st|nd|rd|th)\s*set$/i.exec(e)) || (s = /^set\s*(\d+)$/i.exec(e)) ? Number(s[1]) : null;
1827
- }
1828
- const Q = (a) => Number.isInteger(a) && a >= 0 ? a : null;
1829
- function ls(a) {
1830
- const t = Array.isArray(a?.scoringPlays) ? a.scoringPlays : [];
1831
- if (!t.length) return null;
1832
- const e = a.sport, s = /* @__PURE__ */ new Map();
1833
- for (const p of t) {
1834
- const u = is(p?.period, e), f = Q(p?.homeScore), g = Q(p?.awayScore);
1835
- if (!u || f === null || g === null) return null;
1836
- const x = s.get(u) || { home: 0, away: 0 };
1837
- x.home = Math.max(x.home, f), x.away = Math.max(x.away, g), s.set(u, x);
1838
- }
1839
- const r = Math.max(...s.keys()), o = [];
1883
+ return (s = /^(\d+)Q$/i.exec(t)) || (s = /^(\d+)H$/i.exec(t)) ? Number(s[1]) : /^half$/i.test(t) ? dt(e) === "halves" ? 1 : 2 : (s = /^(\d*)OT(\d*)$/i.exec(t)) ? Se(e) + Number(s[1] || s[2] || 1) : (s = /^[TB](\d+)$/i.exec(t)) || (s = /^(\d+)(?:st|nd|rd|th)\s*set$/i.exec(t)) || (s = /^set\s*(\d+)$/i.exec(t)) ? Number(s[1]) : null;
1884
+ }
1885
+ const Z = (r) => Number.isInteger(r) && r >= 0 ? r : null;
1886
+ function us(r) {
1887
+ const e = Array.isArray(r?.scoringPlays) ? r.scoringPlays : [];
1888
+ if (!e.length) return null;
1889
+ const t = r.sport, s = /* @__PURE__ */ new Map();
1890
+ for (const p of e) {
1891
+ const u = ms(p?.period, t), f = Z(p?.homeScore), v = Z(p?.awayScore);
1892
+ if (!u || f === null || v === null) return null;
1893
+ const $ = s.get(u) || { home: 0, away: 0 };
1894
+ $.home = Math.max($.home, f), $.away = Math.max($.away, v), s.set(u, $);
1895
+ }
1896
+ const a = Math.max(...s.keys()), o = [];
1840
1897
  let n = !0, i = { home: 0, away: 0 };
1841
- for (let p = 1; p <= r; p += 1) {
1842
- const u = s.get(p) || i, f = u.home - i.home, g = u.away - i.away;
1843
- (f < 0 || g < 0) && (n = !1), o.push({ period: p, home: Math.max(f, 0), away: Math.max(g, 0) }), i = { home: Math.max(u.home, i.home), away: Math.max(u.away, i.away) };
1898
+ for (let p = 1; p <= a; p += 1) {
1899
+ const u = s.get(p) || i, f = u.home - i.home, v = u.away - i.away;
1900
+ (f < 0 || v < 0) && (n = !1), o.push({ period: p, home: Math.max(f, 0), away: Math.max(v, 0) }), i = { home: Math.max(u.home, i.home), away: Math.max(u.away, i.away) };
1844
1901
  }
1845
- const l = Q(a.homeScore) ?? 0, c = Q(a.awayScore) ?? 0, d = n && i.home === l && i.away === c;
1846
- return n = n && i.home <= l && i.away <= c, { periods: o, reconciled: d, consistent: n };
1902
+ const c = Z(r.homeScore) ?? 0, d = Z(r.awayScore) ?? 0, h = n && i.home === c && i.away === d;
1903
+ return n = n && i.home <= c && i.away <= d, { periods: o, reconciled: h, consistent: n };
1847
1904
  }
1848
- function cs(a) {
1849
- if (Array.isArray(a?.periodScores) && a.periodScores.length) return a.periodScores;
1850
- const t = ls(a);
1851
- return t ? a.state === "final" ? t.reconciled ? t.periods : null : t.consistent ? t.periods : null : null;
1905
+ function fs(r) {
1906
+ if (Array.isArray(r?.periodScores) && r.periodScores.length) return r.periodScores;
1907
+ const e = us(r);
1908
+ return e ? r.state === "final" ? e.reconciled ? e.periods : null : e.consistent ? e.periods : null : null;
1852
1909
  }
1853
- const hs = "https://api.wral.com/search";
1854
- function ds(a) {
1855
- return a.map((t) => `uri:"${t}"`).join(" OR ");
1910
+ const gs = "https://api.wral.com/search";
1911
+ function vs(r) {
1912
+ return r.map((e) => `uri:"${e}"`).join(" OR ");
1856
1913
  }
1857
- function ps(a, t) {
1858
- const e = String(a || hs).replace(/\/+$/, ""), s = new URLSearchParams({ query: ds(t), sort: "score", lang: "en" });
1859
- return `${e}/v1/query?${s}`;
1914
+ function $s(r, e) {
1915
+ const t = String(r || gs).replace(/\/+$/, ""), s = new URLSearchParams({ query: vs(e), sort: "score", lang: "en" });
1916
+ return `${t}/v1/query?${s}`;
1860
1917
  }
1861
- function ie(a) {
1918
+ function ht(r) {
1862
1919
  try {
1863
- const t = new URL(a);
1864
- if (/(^|\.)smugmug\.com$/i.test(t.hostname)) {
1865
- const e = t.pathname.split("/").filter(Boolean).pop() || "", s = !e || /^[ni]-[A-Za-z0-9]+$/.test(e);
1920
+ const e = new URL(r);
1921
+ if (/(^|\.)smugmug\.com$/i.test(e.hostname)) {
1922
+ const t = e.pathname.split("/").filter(Boolean).pop() || "", s = !t || /^[ni]-[A-Za-z0-9]+$/.test(t);
1866
1923
  return {
1867
- uri: a,
1868
- title: s ? a : decodeURIComponent(e).replace(/-/g, " "),
1924
+ uri: r,
1925
+ title: s ? r : decodeURIComponent(t).replace(/-/g, " "),
1869
1926
  photos: !0
1870
1927
  };
1871
1928
  }
1872
1929
  } catch {
1873
1930
  }
1874
- return { uri: a, title: a };
1931
+ return { uri: r, title: r };
1875
1932
  }
1876
- async function ms(a, t, e) {
1877
- const r = await ((...i) => fetch(...i))(ps(a, t));
1878
- if (!r.ok) throw new Error(`search answered ${r.status}`);
1879
- const o = await r.json(), n = new Map((o.items || []).map((i) => [i.uri, i]));
1880
- return t.map((i) => n.get(i) || ie(i));
1933
+ async function bs(r, e, t) {
1934
+ const a = await ((...i) => fetch(...i))($s(r, e));
1935
+ if (!a.ok) throw new Error(`search answered ${a.status}`);
1936
+ const o = await a.json(), n = new Map((o.items || []).map((i) => [i.uri, i]));
1937
+ return e.map((i) => n.get(i) || ht(i));
1881
1938
  }
1882
- const us = y`
1939
+ const ys = w`
1883
1940
  .breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
1884
1941
  .breadcrumbs a { text-decoration: none; }
1885
1942
  .scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
@@ -1922,6 +1979,9 @@ const us = y`
1922
1979
  table.plays-table td.play { white-space: normal; min-width: 12rem; }
1923
1980
  /* Game notes are typed with line breaks the desk means to keep. */
1924
1981
  .gamenote { padding: 0 1rem 0.9rem; text-align: center; white-space: pre-line; }
1982
+ /* The embed's way out to everything it drops (Coverage, season context,
1983
+ head to head) — the data page still renders all of it. */
1984
+ .fullbox { margin: 0.9rem 0 0; text-align: center; font-size: 0.875rem; }
1925
1985
  .cols { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }
1926
1986
  .ctxcard { padding: 0.85rem 1rem; }
1927
1987
  .ctxcard .who { font-family: var(--hsot-heading-font); font-weight: 700; margin-bottom: 0.4rem; }
@@ -1932,98 +1992,115 @@ const us = y`
1932
1992
  .cols { grid-template-columns: 1fr; }
1933
1993
  }
1934
1994
  `;
1935
- class le extends b {
1936
- static styles = [...U, us];
1995
+ class pt extends y {
1996
+ static styles = [...U, ys];
1937
1997
  static properties = {
1938
- ...b.properties,
1998
+ ...y.properties,
1939
1999
  gameId: { type: String, attribute: "game-id" },
1940
2000
  // The public site search that resolves Game.coverageUrls into cards
1941
2001
  // (DEV-1236). Shared cross-stage by design — see the studio host's
1942
2002
  // registry — so the prod default is right everywhere; the attribute
1943
2003
  // exists for the same reason the href templates do.
1944
- searchApi: { type: String, attribute: "search-api" }
2004
+ searchApi: { type: String, attribute: "search-api" },
2005
+ // Story pages embed the box score in the article column, where the page
2006
+ // chrome (breadcrumbs, the report-a-score line) and the cross-links
2007
+ // (Coverage, Season context, head-to-head) belong to the data page, not
2008
+ // the recap. `embed` keeps the score head, line score and scoring plays,
2009
+ // and links out to the full box score for the rest.
2010
+ embed: { type: Boolean }
1945
2011
  };
1946
2012
  constructor() {
1947
- super(), this.gameId = "", this.searchApi = "";
1948
- }
1949
- async fetchData(t) {
1950
- const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, n, i, l, c] = await Promise.all([
1951
- t.listSchools(),
1952
- t.listTeams({ sport: e.sport }),
1953
- t.listConferences(),
1954
- t.listRankings({ sport: e.sport }),
1955
- t.listGames({ sport: e.sport, season: e.season }),
2013
+ super(), this.gameId = "", this.searchApi = "", this.embed = !1;
2014
+ }
2015
+ async fetchData(e) {
2016
+ const t = await e.getGame(this.gameId), s = Array.isArray(t.coverageUrls) ? t.coverageUrls : [], [a, o, n, i, c, d] = await Promise.all([
2017
+ e.listSchools(),
2018
+ e.listTeams({ sport: t.sport }),
2019
+ e.listConferences(),
2020
+ e.listRankings({ sport: t.sport }),
2021
+ e.listGames({ sport: t.sport, season: t.season }),
1956
2022
  // A search outage must not blank the box score — degrade to bare
1957
2023
  // links (fetchCoverage already degrades per-URL index misses).
1958
- s.length ? ms(this.searchApi, s).catch(() => s.map(ie)) : Promise.resolve([])
2024
+ // The embed drops the Coverage grid, so it skips the search
2025
+ // round-trip entirely rather than fetching cards it will not render.
2026
+ s.length && !this.embed ? bs(this.searchApi, s).catch(() => s.map(ht)) : Promise.resolve([])
1959
2027
  ]);
1960
2028
  return {
1961
- game: e,
1962
- schools: r.items,
2029
+ game: t,
2030
+ schools: a.items,
1963
2031
  teams: o.items,
1964
2032
  conferences: n.items,
1965
2033
  rankings: i.items,
1966
- games: l.items,
1967
- coverage: c
2034
+ games: c.items,
2035
+ coverage: d
1968
2036
  };
1969
2037
  }
1970
2038
  get ctx() {
1971
2039
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1972
- teamsById: $(this.data.teams),
1973
- schoolsById: $(this.data.schools),
1974
- records: K(this.data.games),
2040
+ teamsById: b(this.data.teams),
2041
+ schoolsById: b(this.data.schools),
2042
+ records: Q(this.data.games),
1975
2043
  rankings: this.data.rankings,
1976
2044
  hrefs: O(this),
1977
2045
  sport: this.data.game.sport
1978
2046
  }, this._ctxData = this.data), this._ctx;
1979
2047
  }
1980
2048
  renderView() {
1981
- const t = this.data.game;
1982
- if (!t) return h`<div class="view"><p class="empty">Game not found.</p></div>`;
1983
- const e = this.ctx, s = $(this.data.conferences), r = e.teamsById[t.awayTeamId] ? e.schoolsById[e.teamsById[t.awayTeamId].schoolId] : null, o = e.teamsById[t.homeTeamId] ? e.schoolsById[e.teamsById[t.homeTeamId].schoolId] : null, n = ot(t), i = (d) => t.state === "final" && n !== d && n !== "tie" ? "opacity:0.45" : "", l = t.conferenceId ? s[t.conferenceId] : null, c = this.data.games.filter((d) => d.id !== t.id && d.state === "final" && d.gameType !== "scrimmage" && (d.homeTeamId === t.homeTeamId && d.awayTeamId === t.awayTeamId || d.homeTeamId === t.awayTeamId && d.awayTeamId === t.homeTeamId));
1984
- return h`
1985
- ${P(this, h`
2049
+ const e = this.data.game;
2050
+ if (!e) return l`<div class="view"><p class="empty">Game not found.</p></div>`;
2051
+ const t = this.ctx, s = b(this.data.conferences), a = t.teamsById[e.awayTeamId] ? t.schoolsById[t.teamsById[e.awayTeamId].schoolId] : null, o = t.teamsById[e.homeTeamId] ? t.schoolsById[t.teamsById[e.homeTeamId].schoolId] : null, n = ne(e), i = (h) => e.state === "final" && n !== h && n !== "tie" ? "opacity:0.45" : "", c = e.conferenceId ? s[e.conferenceId] : null, d = this.data.games.filter((h) => h.id !== e.id && h.state === "final" && h.gameType !== "scrimmage" && (h.homeTeamId === e.homeTeamId && h.awayTeamId === e.awayTeamId || h.homeTeamId === e.awayTeamId && h.awayTeamId === e.homeTeamId));
2052
+ return l`
2053
+ ${B(this, l`
1986
2054
  ${D(this)}
1987
- <p class="breadcrumbs">
1988
- <a href=${v(e.hrefs.section, { sport: t.sport, view: "scores" })}>${B(t.sport)}</a> /
1989
- <a href=${v(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
1990
- ${R(e, t.awayTeamId)} at ${R(e, t.homeTeamId)}
1991
- </p>
2055
+ ${this.embed ? m : l`
2056
+ <p class="breadcrumbs">
2057
+ <a href=${g(t.hrefs.section, { sport: e.sport, view: "scores" })}>${k(e.sport)}</a> /
2058
+ <a href=${g(t.hrefs.section, { sport: e.sport, view: "scores" })}>Scores/Schedules</a> /
2059
+ ${R(t, e.awayTeamId)} at ${R(t, e.homeTeamId)}
2060
+ </p>`}
1992
2061
  <div class="card">
1993
2062
  <div class="scorehead">
1994
- ${this.teamBlock(e, t, t.awayTeamId, r, !1)}
2063
+ ${this.teamBlock(t, e, e.awayTeamId, a, !1)}
1995
2064
  <div class="mid">
1996
2065
  <div class="bigscore">
1997
- <span style=${i("away")}>${t.awayScore}</span>
2066
+ <span style=${i("away")}>${e.awayScore}</span>
1998
2067
  <span class="mut" style="font-size:1.6rem">–</span>
1999
- <span style=${i("home")}>${t.homeScore}</span>
2068
+ <span style=${i("home")}>${e.homeScore}</span>
2000
2069
  </div>
2001
- <div class="status">${W(t)}</div>
2002
- <div class="status">${w(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? h` · ${gt(t.time)}` : m} · ${t.venue || "Venue TBD"}
2003
- ${t.broadcast ? h` · <span class="pill class">${t.broadcast}</span>` : m}</div>
2070
+ <div class="status">${V(e)}</div>
2071
+ <div class="status">${x(e.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${e.state === "scheduled" && e.time ? l` · ${ve(e.time)}` : m} · ${e.venue || "Venue TBD"}
2072
+ ${e.broadcast ? l` · <span class="pill class">${e.broadcast}</span>` : m}</div>
2004
2073
  <div class="status">
2005
- <span class="pill type">${t.gameType === "conference" ? `${l?.name || "Conference"} game` : t.gameType}</span>
2006
- ${t.label ? h`<span class="pill type">Bracket ${t.label}</span>` : m}
2007
- ${(t.tags || []).map((d) => h`<span class="pill type">${d}</span>`)}
2074
+ <span class="pill type">${e.gameType === "conference" ? `${c?.name || "Conference"} game` : e.gameType}</span>
2075
+ ${e.label ? l`<span class="pill type">Bracket ${e.label}</span>` : m}
2076
+ ${(e.tags || []).map((h) => l`<span class="pill type">${h}</span>`)}
2008
2077
  </div>
2078
+ ${this.embed ? m : l`
2079
+ <div class="status">
2080
+ <a href=${Ze(t.hrefs, e.id)}>Report a score for this game</a>
2081
+ </div>`}
2009
2082
  </div>
2010
- ${this.teamBlock(e, t, t.homeTeamId, o, !0)}
2083
+ ${this.teamBlock(t, e, e.homeTeamId, o, !0)}
2011
2084
  </div>
2012
- ${this.renderLineScore(t, r, o)}
2013
- ${this.renderScoringPlays(t, r, o)}
2014
- ${t.notes ? h`<p class="note gamenote">${t.notes}</p>` : m}
2085
+ ${this.renderLineScore(e, a, o)}
2086
+ ${this.renderScoringPlays(e, a, o)}
2087
+ ${e.notes ? l`<p class="note gamenote">${e.notes}</p>` : m}
2015
2088
  </div>
2016
- ${(this.data.coverage || []).length ? h`
2089
+ ${this.embed ? l`
2090
+ <p class="fullbox">
2091
+ <a href=${g(t.hrefs.game, { sport: e.sport, id: e.id })}>Full box score &rarr;</a>
2092
+ </p>` : l`
2093
+ ${(this.data.coverage || []).length ? l`
2017
2094
  <div class="section-title">Coverage</div>
2018
2095
  <div class="covgrid">
2019
- ${this.data.coverage.map((d) => h`
2020
- <a class="card covcard" href=${d.uri}>
2021
- ${d.image ? h`<img class="covimg" src=${d.image} alt="" loading="lazy" />` : m}
2096
+ ${this.data.coverage.map((h) => l`
2097
+ <a class="card covcard" href=${h.uri}>
2098
+ ${h.image ? l`<img class="covimg" src=${h.image} alt="" loading="lazy" />` : m}
2022
2099
  <div class="covbody">
2023
- <div class="covtitle">${d.videoDuration ? h`<span class="pill live" style="animation:none">Video</span> ` : m}${d.photos ? h`<span class="pill live" style="animation:none">Photos</span> ` : m}${d.title || d.uri}</div>
2024
- ${d.description ? h`<p class="covdesc">${d.description}</p>` : m}
2025
- ${d.author || d.publishedTime ? h`
2026
- <div class="covmeta">${[d.author, d.publishedTime ? new Date(d.publishedTime).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) : ""].filter(Boolean).join(" · ")}</div>
2100
+ <div class="covtitle">${h.videoDuration ? l`<span class="pill live" style="animation:none">Video</span> ` : m}${h.photos ? l`<span class="pill live" style="animation:none">Photos</span> ` : m}${h.title || h.uri}</div>
2101
+ ${h.description ? l`<p class="covdesc">${h.description}</p>` : m}
2102
+ ${h.author || h.publishedTime ? l`
2103
+ <div class="covmeta">${[h.author, h.publishedTime ? new Date(h.publishedTime).toLocaleDateString("en-US", { month: "short", day: "numeric", year: "numeric" }) : ""].filter(Boolean).join(" · ")}</div>
2027
2104
  ` : m}
2028
2105
  </div>
2029
2106
  </a>
@@ -2031,73 +2108,73 @@ class le extends b {
2031
2108
  </div>` : m}
2032
2109
  <div class="section-title">Season context</div>
2033
2110
  <div class="cols">
2034
- ${[[t.awayTeamId, r], [t.homeTeamId, o]].map(([d, p]) => this.renderContext(e, d, p))}
2111
+ ${[[e.awayTeamId, a], [e.homeTeamId, o]].map(([h, p]) => this.renderContext(t, h, p))}
2035
2112
  </div>
2036
- ${c.length ? h`
2113
+ ${d.length ? l`
2037
2114
  <div class="section-title">Head to head this season</div>
2038
2115
  <div class="card"><ul class="gamelist">
2039
- ${c.map((d) => h`<li>
2040
- <span class="d">${w(d.date)}</span>${W(d)}
2041
- <span class="opp">${R(e, d.awayTeamId)} ${d.awayScore}, ${R(e, d.homeTeamId)} ${d.homeScore}</span>
2042
- <a class="box" href=${v(e.hrefs.game, { sport: t.sport, id: d.id })}>Box score →</a>
2116
+ ${d.map((h) => l`<li>
2117
+ <span class="d">${x(h.date)}</span>${V(h)}
2118
+ <span class="opp">${R(t, h.awayTeamId)} ${h.awayScore}, ${R(t, h.homeTeamId)} ${h.homeScore}</span>
2119
+ <a class="box" href=${g(t.hrefs.game, { sport: e.sport, id: h.id })}>Box score →</a>
2043
2120
  </li>`)}
2044
- </ul></div>` : m}
2121
+ </ul></div>` : m}`}
2045
2122
  `)}
2046
2123
  `;
2047
2124
  }
2048
- teamBlock(t, e, s, r, o) {
2049
- if (!r) return h`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
2050
- const n = t.teamsById[s], i = t.records[s], l = tt(r, 58);
2051
- return h`
2125
+ teamBlock(e, t, s, a, o) {
2126
+ if (!a) return l`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
2127
+ const n = e.teamsById[s], i = e.records[s], c = te(a, 58);
2128
+ return l`
2052
2129
  <div class="teamblock ${o ? "right" : ""}">
2053
- ${l ? h`<img class="crest logo" alt="" loading="lazy" src=${l} />` : h`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${X(r.colorPrimary || "#030711")}">${$t(r)}</span>`}
2130
+ ${c ? l`<img class="crest logo" alt="" loading="lazy" src=${c} />` : l`<span class="crest" style="background:${a.colorPrimary || "#030711"};color:${ee(a.colorPrimary || "#030711")}">${be(a)}</span>`}
2054
2131
  <div>
2055
- <div class="tname">${wt(t, s, e.date)}<a href=${v(t.hrefs.school, { id: r.id })}>${r.name}</a></div>
2056
- <div class="trec">${r.mascot || ""} · ${k(i)}${n?.conferenceId ? h` · ${k(i, !0)} conf` : m}</div>
2132
+ <div class="tname">${xe(e, s, t.date)}<a href=${g(e.hrefs.school, { id: a.id })}>${a.name}</a></div>
2133
+ <div class="trec">${a.mascot || ""} · ${S(i)}${n?.conferenceId ? l` · ${S(i, !0)} conf` : m}</div>
2057
2134
  </div>
2058
2135
  </div>
2059
2136
  `;
2060
2137
  }
2061
- renderLineScore(t, e, s) {
2062
- const r = cs(t);
2063
- if (!r)
2064
- return t.state === "scheduled" ? h`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>` : m;
2065
- const o = Math.max(kt(t.sport), ...r.map((c) => c.period)), n = (c) => ns(t.sport, c), i = (c, d) => {
2066
- const p = r.find((u) => u.period === d);
2067
- return p ? p[c] : t.state === "final" ? 0 : "·";
2068
- }, l = (c, d, p) => h`
2138
+ renderLineScore(e, t, s) {
2139
+ const a = fs(e);
2140
+ if (!a)
2141
+ return e.state === "scheduled" ? l`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>` : m;
2142
+ const o = Math.max(Se(e.sport), ...a.map((d) => d.period)), n = (d) => ps(e.sport, d), i = (d, h) => {
2143
+ const p = a.find((u) => u.period === h);
2144
+ return p ? p[d] : e.state === "final" ? 0 : "·";
2145
+ }, c = (d, h, p) => l`
2069
2146
  <tr>
2070
- <td class="teamcell">${E(c, 20)}${c?.abbr || "TBD"}</td>
2071
- ${Array.from({ length: o }, (u, f) => h`<td class="num">${i(d, f + 1)}</td>`)}
2147
+ <td class="teamcell">${P(d, 20)}${d?.abbr || "TBD"}</td>
2148
+ ${Array.from({ length: o }, (u, f) => l`<td class="num">${i(h, f + 1)}</td>`)}
2072
2149
  <td class="num" style="font-weight:700">${p}</td>
2073
2150
  </tr>`;
2074
- return h`
2151
+ return l`
2075
2152
  <div class="tablewrap" style="border-top:1px solid var(--hsot-gray-2)">
2076
2153
  <table class="data" style="max-width:560px;margin:0.6rem auto 0.9rem">
2077
- <thead><tr><th>Team</th>${Array.from({ length: o }, (c, d) => h`<th class="num">${n(d + 1)}</th>`)}<th class="num">T</th></tr></thead>
2154
+ <thead><tr><th>Team</th>${Array.from({ length: o }, (d, h) => l`<th class="num">${n(h + 1)}</th>`)}<th class="num">T</th></tr></thead>
2078
2155
  <tbody>
2079
- ${l(e, "away", t.awayScore)}
2080
- ${l(s, "home", t.homeScore)}
2156
+ ${c(t, "away", e.awayScore)}
2157
+ ${c(s, "home", e.homeScore)}
2081
2158
  </tbody>
2082
2159
  </table>
2083
2160
  </div>
2084
2161
  `;
2085
2162
  }
2086
- renderScoringPlays(t, e, s) {
2087
- const r = Array.isArray(t.scoringPlays) ? t.scoringPlays : [];
2088
- if (!r.length) return m;
2163
+ renderScoringPlays(e, t, s) {
2164
+ const a = Array.isArray(e.scoringPlays) ? e.scoringPlays : [];
2165
+ if (!a.length) return m;
2089
2166
  const o = (n) => [n.period, n.clock].filter(Boolean).join(" ");
2090
- return h`
2167
+ return l`
2091
2168
  <div class="plays">
2092
2169
  <div class="plays-title">Scoring plays</div>
2093
2170
  <div class="tablewrap">
2094
2171
  <table class="data plays-table">
2095
2172
  <thead><tr>
2096
2173
  <th>When</th><th>Play</th>
2097
- <th class="num">${e?.abbr || "Away"}</th><th class="num">${s?.abbr || "Home"}</th>
2174
+ <th class="num">${t?.abbr || "Away"}</th><th class="num">${s?.abbr || "Home"}</th>
2098
2175
  </tr></thead>
2099
2176
  <tbody>
2100
- ${r.map((n) => h`<tr>
2177
+ ${a.map((n) => l`<tr>
2101
2178
  <td class="when">${o(n) || "·"}</td>
2102
2179
  <td class="play">${n.description || "·"}</td>
2103
2180
  <td class="num">${n.awayScore}</td>
@@ -2109,26 +2186,26 @@ class le extends b {
2109
2186
  </div>
2110
2187
  `;
2111
2188
  }
2112
- renderContext(t, e, s) {
2189
+ renderContext(e, t, s) {
2113
2190
  if (!s) return m;
2114
- const r = t.records[e], o = bt(this.data.games, e);
2115
- return h`
2191
+ const a = e.records[t], o = ye(this.data.games, t);
2192
+ return l`
2116
2193
  <div class="card ctxcard">
2117
- <div class="who">${E(s)}${s.name}</div>
2194
+ <div class="who">${P(s)}${s.name}</div>
2118
2195
  <div class="row">
2119
- <span>Last 5: ${xt(t, e)}</span>
2120
- <span>Streak: <b>${r ? nt(r.results) : "·"}</b></span>
2121
- <span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
2122
- <span>Next: ${o ? h`${w(o.date, { month: "numeric", day: "numeric" })}
2123
- ${o.homeTeamId === e ? "vs" : "at"} ${et(t, o.homeTeamId === e ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
2196
+ <span>Last 5: ${ke(e, t)}</span>
2197
+ <span>Streak: <b>${a ? ie(a.results) : "·"}</b></span>
2198
+ <span>PF/PA: <b>${a ? `${a.pf} / ${a.pa}` : "·"}</b></span>
2199
+ <span>Next: ${o ? l`${x(o.date, { month: "numeric", day: "numeric" })}
2200
+ ${o.homeTeamId === t ? "vs" : "at"} ${se(e, o.homeTeamId === t ? o.awayTeamId : o.homeTeamId)}` : "·"}</span>
2124
2201
  </div>
2125
2202
  </div>
2126
2203
  `;
2127
2204
  }
2128
2205
  }
2129
- globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", le);
2130
- const fs = 250, gs = 2;
2131
- class ce extends N {
2206
+ globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", pt);
2207
+ const ws = 250, xs = 2;
2208
+ class mt extends N {
2132
2209
  static properties = {
2133
2210
  api: { type: String },
2134
2211
  schoolHref: { type: String, attribute: "school-href" },
@@ -2139,7 +2216,7 @@ class ce extends N {
2139
2216
  activeIndex: { state: !0 },
2140
2217
  searched: { state: !0 }
2141
2218
  };
2142
- static styles = y`
2219
+ static styles = w`
2143
2220
  :host {
2144
2221
  display: block;
2145
2222
  position: relative;
@@ -2206,41 +2283,41 @@ class ce extends N {
2206
2283
  disconnectedCallback() {
2207
2284
  super.disconnectedCallback(), clearTimeout(this.debounceTimer), this.abortController?.abort();
2208
2285
  }
2209
- onInput(t) {
2210
- const e = t.target.value.trim();
2211
- if (clearTimeout(this.debounceTimer), e.length < gs) {
2286
+ onInput(e) {
2287
+ const t = e.target.value.trim();
2288
+ if (clearTimeout(this.debounceTimer), t.length < xs) {
2212
2289
  this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
2213
2290
  return;
2214
2291
  }
2215
- this.debounceTimer = setTimeout(() => this.search(e), fs);
2292
+ this.debounceTimer = setTimeout(() => this.search(t), ws);
2216
2293
  }
2217
- async search(t) {
2294
+ async search(e) {
2218
2295
  this.abortController?.abort(), this.abortController = new AbortController();
2219
2296
  try {
2220
- const e = `${this.api}/schools?q=${encodeURIComponent(t)}&limit=${this.limit}`, s = await fetch(e, {
2297
+ const t = `${this.api}/schools?q=${encodeURIComponent(e)}&limit=${this.limit}`, s = await fetch(t, {
2221
2298
  signal: this.abortController.signal
2222
2299
  });
2223
2300
  if (!s.ok)
2224
2301
  return;
2225
- const r = await s.json();
2226
- this.results = r.items || [], this.activeIndex = -1, this.searched = !0, this.open = !0;
2227
- } catch (e) {
2228
- e.name !== "AbortError" && console.warn("school search failed", e);
2302
+ const a = await s.json();
2303
+ this.results = a.items || [], this.activeIndex = -1, this.searched = !0, this.open = !0;
2304
+ } catch (t) {
2305
+ t.name !== "AbortError" && console.warn("school search failed", t);
2229
2306
  }
2230
2307
  }
2231
- onKeyDown(t) {
2232
- if (t.key === "Escape") {
2308
+ onKeyDown(e) {
2309
+ if (e.key === "Escape") {
2233
2310
  this.open = !1;
2234
2311
  return;
2235
2312
  }
2236
2313
  if (!(!this.open || !this.results.length))
2237
- if (t.key === "ArrowDown")
2238
- t.preventDefault(), this.activeIndex = (this.activeIndex + 1) % this.results.length;
2239
- else if (t.key === "ArrowUp") {
2240
- t.preventDefault();
2241
- const e = this.results.length;
2242
- this.activeIndex = (this.activeIndex - 1 + e) % e;
2243
- } else t.key === "Enter" && (t.preventDefault(), this.go(this.results[this.activeIndex] || this.results[0]));
2314
+ if (e.key === "ArrowDown")
2315
+ e.preventDefault(), this.activeIndex = (this.activeIndex + 1) % this.results.length;
2316
+ else if (e.key === "ArrowUp") {
2317
+ e.preventDefault();
2318
+ const t = this.results.length;
2319
+ this.activeIndex = (this.activeIndex - 1 + t) % t;
2320
+ } else e.key === "Enter" && (e.preventDefault(), this.go(this.results[this.activeIndex] || this.results[0]));
2244
2321
  }
2245
2322
  onBlur() {
2246
2323
  setTimeout(() => {
@@ -2250,50 +2327,50 @@ class ce extends N {
2250
2327
  onFocus() {
2251
2328
  this.results.length && (this.open = !0);
2252
2329
  }
2253
- go(t) {
2254
- t && (globalThis.location.href = this.schoolHref.replace("{id}", t.id));
2330
+ go(e) {
2331
+ e && (globalThis.location.href = this.schoolHref.replace("{id}", e.id));
2255
2332
  }
2256
- where(t) {
2257
- return [t.location, t.county && `${t.county} County`].filter(Boolean).join(" — ");
2333
+ where(e) {
2334
+ return [e.location, e.county && `${e.county} County`].filter(Boolean).join(" — ");
2258
2335
  }
2259
- renderOption(t, e) {
2260
- const s = this.where(t), r = (o) => {
2261
- o.preventDefault(), this.go(t);
2336
+ renderOption(e, t) {
2337
+ const s = this.where(e), a = (o) => {
2338
+ o.preventDefault(), this.go(e);
2262
2339
  };
2263
- return h`
2340
+ return l`
2264
2341
  <li
2265
- id="school-option-${e}"
2342
+ id="school-option-${t}"
2266
2343
  role="option"
2267
- aria-selected="${e === this.activeIndex ? "true" : "false"}"
2268
- @pointerdown="${r}"
2344
+ aria-selected="${t === this.activeIndex ? "true" : "false"}"
2345
+ @pointerdown="${a}"
2269
2346
  @mousemove="${() => {
2270
- this.activeIndex = e;
2347
+ this.activeIndex = t;
2271
2348
  }}"
2272
2349
  >
2273
- <span class="name">${t.name}</span>
2274
- ${s ? h`<span class="where">${s}</span>` : m}
2350
+ <span class="name">${e.name}</span>
2351
+ ${s ? l`<span class="where">${s}</span>` : m}
2275
2352
  </li>
2276
2353
  `;
2277
2354
  }
2278
2355
  renderListbox() {
2279
- const t = this.searched && !this.results.length, e = h`<li class="empty">No schools found</li>`;
2280
- return h`
2356
+ const e = this.searched && !this.results.length, t = l`<li class="empty">No schools found</li>`;
2357
+ return l`
2281
2358
  <ul id="school-search-listbox" role="listbox" aria-label="Schools">
2282
- ${this.results.map((s, r) => this.renderOption(s, r))}
2283
- ${t ? e : m}
2359
+ ${this.results.map((s, a) => this.renderOption(s, a))}
2360
+ ${e ? t : m}
2284
2361
  </ul>
2285
2362
  `;
2286
2363
  }
2287
2364
  render() {
2288
- const t = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
2289
- return h`
2365
+ const e = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
2366
+ return l`
2290
2367
  <input
2291
2368
  type="text"
2292
2369
  role="combobox"
2293
2370
  aria-label="Find your school"
2294
2371
  aria-expanded="${this.open ? "true" : "false"}"
2295
2372
  aria-controls="school-search-listbox"
2296
- aria-activedescendant="${t}"
2373
+ aria-activedescendant="${e}"
2297
2374
  autocomplete="off"
2298
2375
  placeholder="${this.placeholder}"
2299
2376
  @input="${this.onInput}"
@@ -2305,111 +2382,111 @@ class ce extends N {
2305
2382
  `;
2306
2383
  }
2307
2384
  }
2308
- globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", ce);
2309
- function he(a, t) {
2310
- const e = new Map(a.map((l) => [l.id, l])), s = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
2311
- for (const l of t || [])
2312
- l.outcome === "winner" && (s.has(l.targetGameId) || s.set(l.targetGameId, []), s.get(l.targetGameId).push(l), r.has(l.sourceGameId) || r.set(l.sourceGameId, []), r.get(l.sourceGameId).push(l));
2313
- const o = a.filter((l) => !r.has(l.id)), n = (l) => l.targetSlot === "home" ? 0 : 1;
2314
- function i(l) {
2315
- const c = e.get(l);
2316
- if (!c) return null;
2317
- const p = [...s.get(l) || []].sort((u, f) => n(u) - n(f)).map((u) => i(u.sourceGameId)).filter(Boolean);
2318
- return { game: c, children: p, bracketGroup: c.bracketGroup };
2319
- }
2320
- return o.length === 1 ? i(o[0].id) : o.map((l) => i(l.id));
2321
- }
2322
- function de(a, t = [], e = 0) {
2323
- if (!a) return t;
2324
- t[e] || (t[e] = []), t[e].push(a.game);
2325
- for (const s of a.children || []) de(s, t, e + 1);
2326
- return t;
2385
+ globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", mt);
2386
+ function ut(r, e) {
2387
+ const t = new Map(r.map((c) => [c.id, c])), s = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map();
2388
+ for (const c of e || [])
2389
+ c.outcome === "winner" && (s.has(c.targetGameId) || s.set(c.targetGameId, []), s.get(c.targetGameId).push(c), a.has(c.sourceGameId) || a.set(c.sourceGameId, []), a.get(c.sourceGameId).push(c));
2390
+ const o = r.filter((c) => !a.has(c.id)), n = (c) => c.targetSlot === "home" ? 0 : 1;
2391
+ function i(c) {
2392
+ const d = t.get(c);
2393
+ if (!d) return null;
2394
+ const p = [...s.get(c) || []].sort((u, f) => n(u) - n(f)).map((u) => i(u.sourceGameId)).filter(Boolean);
2395
+ return { game: d, children: p, bracketGroup: d.bracketGroup };
2396
+ }
2397
+ return o.length === 1 ? i(o[0].id) : o.map((c) => i(c.id));
2398
+ }
2399
+ function ft(r, e = [], t = 0) {
2400
+ if (!r) return e;
2401
+ e[t] || (e[t] = []), e[t].push(r.game);
2402
+ for (const s of r.children || []) ft(s, e, t + 1);
2403
+ return e;
2327
2404
  }
2328
- const vs = (a) => Math.max(1, Math.round(Math.log2(a || 2)));
2329
- function $s({ round: a, perGroup: t, groupCount: e = 1 }) {
2330
- const s = vs(t), o = (e === 4 ? s + 2 : e === 2 ? s + 1 : s) - a;
2331
- return o === 0 ? e > 1 ? "Championship" : "Final" : o === 1 ? "Semifinal" : `Round ${a}`;
2405
+ const ks = (r) => Math.max(1, Math.round(Math.log2(r || 2)));
2406
+ function Ss({ round: r, perGroup: e, groupCount: t = 1 }) {
2407
+ const s = ks(e), o = (t === 4 ? s + 2 : t === 2 ? s + 1 : s) - r;
2408
+ return o === 0 ? t > 1 ? "Championship" : "Final" : o === 1 ? "Semifinal" : `Round ${r}`;
2332
2409
  }
2333
- function bs(a) {
2334
- if (!a || !a.length) return "setup";
2335
- const t = Math.max(...a.map((s) => s.round ?? 0)), e = a.filter((s) => (s.round ?? 0) === t);
2336
- return e.length && e.every((s) => s.state === "final") ? "complete" : a.some((s) => s.state !== "scheduled" || s.homeScore || s.awayScore || s.round === 1 && (s.homeTeamId || s.awayTeamId)) ? "active" : "setup";
2410
+ function _s(r) {
2411
+ if (!r || !r.length) return "setup";
2412
+ const e = Math.max(...r.map((s) => s.round ?? 0)), t = r.filter((s) => (s.round ?? 0) === e);
2413
+ return t.length && t.every((s) => s.state === "final") ? "complete" : r.some((s) => s.state !== "scheduled" || s.homeScore || s.awayScore || s.round === 1 && (s.homeTeamId || s.awayTeamId)) ? "active" : "setup";
2337
2414
  }
2338
- function ys(a, t) {
2339
- const e = a?.groupNames || [];
2340
- if (e.length >= 2) {
2341
- const r = e.map((o) => ({ key: o, name: o }));
2342
- return (t || []).some((o) => o.bracketGroup === "Championship") && r.push({ key: "Championship", name: "Championship" }), r;
2415
+ function Ts(r, e) {
2416
+ const t = r?.groupNames || [];
2417
+ if (t.length >= 2) {
2418
+ const a = t.map((o) => ({ key: o, name: o }));
2419
+ return (e || []).some((o) => o.bracketGroup === "Championship") && a.push({ key: "Championship", name: "Championship" }), a;
2343
2420
  }
2344
- const s = [...new Set((t || []).map((r) => r.bracketGroup).filter(Boolean))];
2421
+ const s = [...new Set((e || []).map((a) => a.bracketGroup).filter(Boolean))];
2345
2422
  return [{ key: null, name: s.length === 1 ? s[0] : "Bracket" }];
2346
2423
  }
2347
- const ws = (a, t) => t?.key == null ? [...a || []] : (a || []).filter((e) => e.bracketGroup === t.key), Ut = (a) => {
2348
- const t = /(\d+)\s*$/.exec(a.label || "");
2349
- return t ? Number(t[1]) : 1 / 0;
2350
- }, Ht = (a, t) => Ut(a) - Ut(t) || String(a.id).localeCompare(String(t.id));
2351
- function xs(a, t) {
2352
- if (a.every((r) => Number.isInteger(r.round))) return (r) => r.round;
2353
- const e = he(a, t), s = /* @__PURE__ */ new Map();
2354
- for (const r of Array.isArray(e) ? e : [e]) {
2355
- const o = de(r), n = o.length - 1;
2356
- o.forEach((i, l) => i.forEach((c) => s.set(c.id, n - l + 1)));
2357
- }
2358
- return (r) => Number.isInteger(r.round) ? r.round : s.get(r.id) || 1;
2359
- }
2360
- function ks(a, t, e) {
2361
- const s = ws(a, e);
2424
+ const As = (r, e) => e?.key == null ? [...r || []] : (r || []).filter((t) => t.bracketGroup === e.key), He = (r) => {
2425
+ const e = /(\d+)\s*$/.exec(r.label || "");
2426
+ return e ? Number(e[1]) : 1 / 0;
2427
+ }, Le = (r, e) => He(r) - He(e) || String(r.id).localeCompare(String(e.id));
2428
+ function Is(r, e) {
2429
+ if (r.every((a) => Number.isInteger(a.round))) return (a) => a.round;
2430
+ const t = ut(r, e), s = /* @__PURE__ */ new Map();
2431
+ for (const a of Array.isArray(t) ? t : [t]) {
2432
+ const o = ft(a), n = o.length - 1;
2433
+ o.forEach((i, c) => i.forEach((d) => s.set(d.id, n - c + 1)));
2434
+ }
2435
+ return (a) => Number.isInteger(a.round) ? a.round : s.get(a.id) || 1;
2436
+ }
2437
+ function Es(r, e, t) {
2438
+ const s = As(r, t);
2362
2439
  if (!s.length) return [];
2363
- const r = xs(a || [], t || []), o = /* @__PURE__ */ new Map();
2364
- for (const c of s) {
2365
- const d = r(c);
2366
- o.has(d) || o.set(d, []), o.get(d).push(c);
2440
+ const a = Is(r || [], e || []), o = /* @__PURE__ */ new Map();
2441
+ for (const d of s) {
2442
+ const h = a(d);
2443
+ o.has(h) || o.set(h, []), o.get(h).push(d);
2367
2444
  }
2368
2445
  const n = /* @__PURE__ */ new Map();
2369
- for (const c of t || [])
2370
- c.outcome === "winner" && (n.has(c.targetGameId) || n.set(c.targetGameId, []), n.get(c.targetGameId).push(c.sourceGameId));
2446
+ for (const d of e || [])
2447
+ d.outcome === "winner" && (n.has(d.targetGameId) || n.set(d.targetGameId, []), n.get(d.targetGameId).push(d.sourceGameId));
2371
2448
  const i = [];
2372
- let l = null;
2373
- for (const c of [...o.keys()].sort((d, p) => d - p)) {
2374
- let d = [...o.get(c)];
2375
- if (l) {
2449
+ let c = null;
2450
+ for (const d of [...o.keys()].sort((h, p) => h - p)) {
2451
+ let h = [...o.get(d)];
2452
+ if (c) {
2376
2453
  const p = (u) => {
2377
- const f = (n.get(u.id) || []).map((g) => l.get(g)).filter((g) => g !== void 0);
2454
+ const f = (n.get(u.id) || []).map((v) => c.get(v)).filter((v) => v !== void 0);
2378
2455
  return f.length ? Math.min(...f) : 1 / 0;
2379
2456
  };
2380
- d.sort((u, f) => p(u) - p(f) || Ht(u, f));
2457
+ h.sort((u, f) => p(u) - p(f) || Le(u, f));
2381
2458
  } else
2382
- d.sort(Ht);
2383
- l = new Map(d.map((p, u) => [p.id, u])), i.push({ round: c, games: d });
2459
+ h.sort(Le);
2460
+ c = new Map(h.map((p, u) => [p.id, u])), i.push({ round: d, games: h });
2384
2461
  }
2385
2462
  return i;
2386
2463
  }
2387
- function Ss(a, t, e) {
2388
- const s = a[`${t}TeamId`] || null, r = (e || []).find((n) => n.gameId === a.id && n.slot === t), o = a[`${t}Seed`] ?? r?.seed ?? null;
2389
- return { teamId: s, seed: o, bye: !s && !!r?.isBye };
2464
+ function Cs(r, e, t) {
2465
+ const s = r[`${e}TeamId`] || null, a = (t || []).find((n) => n.gameId === r.id && n.slot === e), o = r[`${e}Seed`] ?? a?.seed ?? null;
2466
+ return { teamId: s, seed: o, bye: !s && !!a?.isBye };
2390
2467
  }
2391
- function pe(a) {
2392
- const t = ot(a);
2393
- return t === "home" || t === "away" ? t : null;
2468
+ function gt(r) {
2469
+ const e = ne(r);
2470
+ return e === "home" || e === "away" ? e : null;
2394
2471
  }
2395
- function _s(a, t) {
2396
- const e = he(a || [], t || []);
2397
- if (!e || Array.isArray(e)) return null;
2398
- const s = pe(e.game);
2399
- return s && e.game[`${s}TeamId`] || null;
2472
+ function Ps(r, e) {
2473
+ const t = ut(r || [], e || []);
2474
+ if (!t || Array.isArray(t)) return null;
2475
+ const s = gt(t.game);
2476
+ return s && t.game[`${s}TeamId`] || null;
2400
2477
  }
2401
- const Lt = { active: 0, setup: 1, complete: 2 };
2402
- function As(a, { id: t, param: e } = {}) {
2403
- const s = a || [];
2478
+ const Ge = { active: 0, setup: 1, complete: 2 };
2479
+ function Bs(r, { id: e, param: t } = {}) {
2480
+ const s = r || [];
2404
2481
  if (!s.length) return null;
2405
- for (const r of [t, e]) {
2406
- if (!r) continue;
2407
- const o = s.find((n) => n.id === r);
2482
+ for (const a of [e, t]) {
2483
+ if (!a) continue;
2484
+ const o = s.find((n) => n.id === a);
2408
2485
  if (o) return o;
2409
2486
  }
2410
- return [...s].sort((r, o) => (Lt[r.status] ?? 3) - (Lt[o.status] ?? 3) || String(r.name || "").localeCompare(String(o.name || "")))[0];
2487
+ return [...s].sort((a, o) => (Ge[a.status] ?? 3) - (Ge[o.status] ?? 3) || String(a.name || "").localeCompare(String(o.name || "")))[0];
2411
2488
  }
2412
- const Ts = y`
2489
+ const Ds = w`
2413
2490
  .bracket { display: flex; gap: 1rem; align-items: stretch; overflow-x: auto; padding-bottom: 0.5rem; }
2414
2491
  .round { flex: 0 0 250px; display: flex; flex-direction: column; min-width: 0; }
2415
2492
  .roundhead {
@@ -2455,10 +2532,10 @@ const Ts = y`
2455
2532
  .champ .tname a { color: inherit; text-decoration: none; font-weight: 700; }
2456
2533
  @media (max-width: 720px) { .round { flex-basis: 215px; } }
2457
2534
  `;
2458
- class me extends b {
2459
- static styles = [U, Ts];
2535
+ class vt extends y {
2536
+ static styles = [U, Ds];
2460
2537
  static properties = {
2461
- ...b.properties,
2538
+ ...y.properties,
2462
2539
  sport: { type: String },
2463
2540
  season: { type: String },
2464
2541
  tournamentId: { type: String, attribute: "tournament-id" },
@@ -2468,31 +2545,31 @@ class me extends b {
2468
2545
  constructor() {
2469
2546
  super(), this.sport = "football", this.season = "", this.tournamentId = "", this.picked = "", this.group = null;
2470
2547
  }
2471
- async fetchData(t) {
2472
- const e = this.season || Y(), s = (await t.listTournaments({ sport: this.sport, season: e })).items, r = new URLSearchParams(globalThis.location?.search || "").get("tournament"), o = As(s, { id: this.picked || this.tournamentId, param: r });
2473
- if (!o) return { season: e, tournaments: s, tournament: null };
2474
- const [n, i, l, c, d] = await Promise.all([
2475
- t.listSeedings(o.id),
2476
- t.listEdges(o.id),
2477
- t.listGames({ tournamentId: o.id }),
2478
- t.listSchools(),
2479
- t.listTeams({ sport: this.sport })
2548
+ async fetchData(e) {
2549
+ const t = this.season || K(), s = (await e.listTournaments({ sport: this.sport, season: t })).items, a = new URLSearchParams(globalThis.location?.search || "").get("tournament"), o = Bs(s, { id: this.picked || this.tournamentId, param: a });
2550
+ if (!o) return { season: t, tournaments: s, tournament: null };
2551
+ const [n, i, c, d, h] = await Promise.all([
2552
+ e.listSeedings(o.id),
2553
+ e.listEdges(o.id),
2554
+ e.listGames({ tournamentId: o.id }),
2555
+ e.listSchools(),
2556
+ e.listTeams({ sport: this.sport })
2480
2557
  ]);
2481
2558
  return {
2482
- season: e,
2559
+ season: t,
2483
2560
  tournaments: s,
2484
2561
  tournament: o,
2485
2562
  seedings: n.items,
2486
2563
  edges: i.items,
2487
- games: l.items,
2488
- schools: c.items,
2489
- teams: d.items
2564
+ games: c.items,
2565
+ schools: d.items,
2566
+ teams: h.items
2490
2567
  };
2491
2568
  }
2492
2569
  get ctx() {
2493
2570
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
2494
- teamsById: $(this.data.teams),
2495
- schoolsById: $(this.data.schools),
2571
+ teamsById: b(this.data.teams),
2572
+ schoolsById: b(this.data.schools),
2496
2573
  records: {},
2497
2574
  rankings: [],
2498
2575
  hrefs: O(this),
@@ -2500,107 +2577,107 @@ class me extends b {
2500
2577
  }, this._ctxData = this.data), this._ctx;
2501
2578
  }
2502
2579
  /** Switch tournaments: remember the pick, deep-link it, reload the scoped data. */
2503
- pick(t) {
2504
- if (t !== this.data?.tournament?.id) {
2505
- this.picked = t, this.group = null;
2580
+ pick(e) {
2581
+ if (e !== this.data?.tournament?.id) {
2582
+ this.picked = e, this.group = null;
2506
2583
  try {
2507
- const e = new URL(globalThis.location.href);
2508
- e.searchParams.set("tournament", t), globalThis.history?.replaceState(null, "", e);
2584
+ const t = new URL(globalThis.location.href);
2585
+ t.searchParams.set("tournament", e), globalThis.history?.replaceState(null, "", t);
2509
2586
  } catch {
2510
2587
  }
2511
2588
  this.load();
2512
2589
  }
2513
2590
  }
2514
2591
  renderView() {
2515
- const t = this.data, e = this.ctx, s = it(this, e, {
2516
- title: h`${B(this.sport)} playoff brackets`,
2517
- sub: t.tournament ? h`${t.tournament.name} · ${t.season} season` : h`${t.season} season`,
2518
- teams: t.teams
2592
+ const e = this.data, t = this.ctx, s = le(this, t, {
2593
+ title: l`${k(this.sport)} playoff brackets`,
2594
+ sub: e.tournament ? l`${e.tournament.name} · ${e.season} season` : l`${e.season} season`,
2595
+ teams: e.teams
2519
2596
  });
2520
- if (!t.tournament)
2521
- return h`${s}${P(this, h`
2597
+ if (!e.tournament)
2598
+ return l`${s}${B(this, l`
2522
2599
  ${D(this)}
2523
- <div class="card"><div class="empty">No ${this.sport} brackets have been published for the ${t.season} season yet.</div></div>
2600
+ <div class="card"><div class="empty">No ${this.sport} brackets have been published for the ${e.season} season yet.</div></div>
2524
2601
  `)}`;
2525
- const r = ys(t.tournament, t.games), o = r.find((p) => p.key === this.group) || r[0], n = (t.tournament.groupNames || []).length >= 2 ? t.tournament.groupNames.length : 1, i = (Number(t.tournament.size) || 0) / n, l = ks(t.games, t.edges, o), c = bs(t.games), d = _s(t.games, t.edges);
2526
- return h`
2602
+ const a = Ts(e.tournament, e.games), o = a.find((p) => p.key === this.group) || a[0], n = (e.tournament.groupNames || []).length >= 2 ? e.tournament.groupNames.length : 1, i = (Number(e.tournament.size) || 0) / n, c = Es(e.games, e.edges, o), d = _s(e.games), h = Ps(e.games, e.edges);
2603
+ return l`
2527
2604
  ${s}
2528
- ${P(this, h`
2605
+ ${B(this, l`
2529
2606
  ${D(this)}
2530
2607
  <div class="toolbar">
2531
- ${t.tournaments.length > 1 ? h`
2608
+ ${e.tournaments.length > 1 ? l`
2532
2609
  <div role="group" aria-label="Tournament">
2533
- ${t.tournaments.map((p) => h`<button class="chip ${p.id === t.tournament.id ? "on" : ""}"
2610
+ ${e.tournaments.map((p) => l`<button class="chip ${p.id === e.tournament.id ? "on" : ""}"
2534
2611
  @click=${() => this.pick(p.id)}>${p.name}</button>`)}
2535
2612
  </div>` : m}
2536
- ${r.length > 1 ? h`
2613
+ ${a.length > 1 ? l`
2537
2614
  <div role="tablist" aria-label="Bracket group">
2538
- ${r.map((p) => h`<button class="chip ${p.key === o.key ? "on" : ""}" role="tab"
2615
+ ${a.map((p) => l`<button class="chip ${p.key === o.key ? "on" : ""}" role="tab"
2539
2616
  aria-selected=${p.key === o.key ? "true" : "false"}
2540
2617
  @click=${() => {
2541
2618
  this.group = p.key;
2542
2619
  }}>${p.name}</button>`)}
2543
2620
  </div>` : m}
2544
2621
  <span class="spacer"></span>
2545
- <span class="pill ${c === "complete" ? "final" : c === "active" ? "class" : "type"}">${c === "complete" ? "Complete" : c === "active" ? "In progress" : "Bracket set"}</span>
2546
- <span class="asof">${t.tournament.size}-team ${String(t.tournament.format || "").replace(/_/g, " ")}</span>
2622
+ <span class="pill ${d === "complete" ? "final" : d === "active" ? "class" : "type"}">${d === "complete" ? "Complete" : d === "active" ? "In progress" : "Bracket set"}</span>
2623
+ <span class="asof">${e.tournament.size}-team ${String(e.tournament.format || "").replace(/_/g, " ")}</span>
2547
2624
  </div>
2548
- ${d ? h`<div class="champ"><span class="pill champ">Champion</span>
2549
- ${E(C(e, d), 26)}<span class="tname">${st(e, d)}</span></div>` : m}
2550
- ${l.length ? h`
2625
+ ${h ? l`<div class="champ"><span class="pill champ">Champion</span>
2626
+ ${P(C(t, h), 26)}<span class="tname">${re(t, h)}</span></div>` : m}
2627
+ ${c.length ? l`
2551
2628
  <div class="bracket" role="region" aria-label="${o.name} bracket">
2552
- ${l.map((p) => h`
2629
+ ${c.map((p) => l`
2553
2630
  <section class="round">
2554
- <h3 class="roundhead">${$s({ round: p.round, perGroup: i, groupCount: n })}</h3>
2555
- <div class="games">${p.games.map((u) => this.renderMatchup(e, u))}</div>
2631
+ <h3 class="roundhead">${Ss({ round: p.round, perGroup: i, groupCount: n })}</h3>
2632
+ <div class="games">${p.games.map((u) => this.renderMatchup(t, u))}</div>
2556
2633
  </section>`)}
2557
- </div>` : h`<div class="card"><div class="empty">This bracket has no games yet.</div></div>`}
2634
+ </div>` : l`<div class="card"><div class="empty">This bracket has no games yet.</div></div>`}
2558
2635
  `)}
2559
2636
  `;
2560
2637
  }
2561
- renderMatchup(t, e) {
2562
- const s = e.homeTeamId && e.awayTeamId || e.state === "final" || e.state === "live";
2563
- return h`
2564
- <article class="matchup ${e.state}" aria-label="${e.label || "Matchup"}">
2565
- ${this.renderSlot(t, e, "home")}
2566
- ${this.renderSlot(t, e, "away")}
2638
+ renderMatchup(e, t) {
2639
+ const s = t.homeTeamId && t.awayTeamId || t.state === "final" || t.state === "live";
2640
+ return l`
2641
+ <article class="matchup ${t.state}" aria-label="${t.label || "Matchup"}">
2642
+ ${this.renderSlot(e, t, "home")}
2643
+ ${this.renderSlot(e, t, "away")}
2567
2644
  <footer class="mfoot">
2568
- ${W(e)}
2569
- ${e.label ? h`<span class="label">${e.label}</span>` : m}
2645
+ ${V(t)}
2646
+ ${t.label ? l`<span class="label">${t.label}</span>` : m}
2570
2647
  <span class="spacer"></span>
2571
- ${s ? h`<a class="box" href=${v(t.hrefs.game, { sport: this.sport, id: e.id })}>Box score</a>` : m}
2648
+ ${s ? l`<a class="box" href=${g(e.hrefs.game, { sport: this.sport, id: t.id })}>Box score</a>` : m}
2572
2649
  </footer>
2573
2650
  </article>
2574
2651
  `;
2575
2652
  }
2576
- renderSlot(t, e, s) {
2577
- const { teamId: r, seed: o, bye: n } = Ss(e, s, this.data.seedings), i = pe(e), l = e.state === "live" || e.state === "final";
2578
- return h`
2653
+ renderSlot(e, t, s) {
2654
+ const { teamId: a, seed: o, bye: n } = Cs(t, s, this.data.seedings), i = gt(t), c = t.state === "live" || t.state === "final";
2655
+ return l`
2579
2656
  <div class="slot ${i ? i === s ? "winner" : "loser" : ""}">
2580
2657
  <span class="seed">${o ?? ""}</span>
2581
- ${r ? h`${E(C(t, r), 22)}<span class="tname">${st(t, r, e.date)}</span>` : n ? h`<span class="tname bye">Bye</span>` : h`<span class="tname mut">TBD</span>`}
2582
- ${l ? h`<span class="score">${e[`${s}Score`] ?? 0}</span>` : m}
2658
+ ${a ? l`${P(C(e, a), 22)}<span class="tname">${re(e, a, t.date)}</span>` : n ? l`<span class="tname bye">Bye</span>` : l`<span class="tname mut">TBD</span>`}
2659
+ ${c ? l`<span class="score">${t[`${s}Score`] ?? 0}</span>` : m}
2583
2660
  </div>
2584
2661
  `;
2585
2662
  }
2586
2663
  }
2587
- globalThis?.customElements && !globalThis.customElements.get("hsot-brackets") && globalThis.customElements.define("hsot-brackets", me);
2588
- const Is = {
2589
- "hsot-scores": ee,
2590
- "hsot-standings": se,
2591
- "hsot-rankings": ae,
2592
- "hsot-school": re,
2593
- "hsot-boxscore": le,
2594
- "hsot-school-search": ce,
2595
- "hsot-brackets": me
2664
+ globalThis?.customElements && !globalThis.customElements.get("hsot-brackets") && globalThis.customElements.define("hsot-brackets", vt);
2665
+ const zs = {
2666
+ "hsot-scores": ot,
2667
+ "hsot-standings": nt,
2668
+ "hsot-rankings": it,
2669
+ "hsot-school": lt,
2670
+ "hsot-boxscore": pt,
2671
+ "hsot-school-search": mt,
2672
+ "hsot-brackets": vt
2596
2673
  };
2597
- function Cs() {
2598
- const a = globalThis?.customElements;
2599
- if (a)
2600
- for (const [t, e] of Object.entries(Is))
2601
- a.get(t) || a.define(t, e);
2674
+ function Rs() {
2675
+ const r = globalThis?.customElements;
2676
+ if (r)
2677
+ for (const [e, t] of Object.entries(zs))
2678
+ r.get(e) || r.define(e, t);
2602
2679
  }
2603
- typeof window < "u" && globalThis.customElements && Cs();
2680
+ typeof window < "u" && globalThis.customElements && Rs();
2604
2681
  export {
2605
- Cs as defineAll
2682
+ Rs as defineAll
2606
2683
  };