@wral/hsot-data 0.3.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 J = globalThis, dt = J.ShadowRoot && (J.ShadyCSS === void 0 || J.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 fe = (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
- }, ge = (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 = J.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 fe(e);
37
- })(a) : a;
38
- const { is: ve, defineProperty: $e, getOwnPropertyDescriptor: be, getOwnPropertyNames: ye, getOwnPropertySymbols: we, getPrototypeOf: xe } = Object, rt = globalThis, At = rt.trustedTypes, ke = At ? At.emptyScript : "", Se = rt.reactiveElementPolyfillSupport, G = (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 ? ke : 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) => !ve(a, t), Tt = { attribute: !0, type: String, converter: ht, reflect: !1, useDefault: !1, hasChanged: jt };
67
- Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), rt.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 && $e(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 } = be(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
96
  if (this.hasOwnProperty(G("elementProperties"))) return;
97
- const t = xe(this);
98
- t.finalize(), t.l !== void 0 && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
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
101
  if (this.hasOwnProperty(G("finalized"))) return;
102
102
  if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(G("properties"))) {
103
- const e = this.properties, s = [...ye(e), ...we(e)];
104
- for (const r of s) this.createProperty(r, e[r]);
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 ge(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[G("elementProperties")] = /* @__PURE__ */ new Map(), z[G("finalized")] = /* @__PURE__ */ new Map(), Se?.({ ReactiveElement: z }), (rt.reactiveElementVersions ??= []).push("2.1.2");
250
- const mt = globalThis, It = (a) => a, X = mt.trustedTypes, Ct = X ? X.createPolicy("lit-html", { createHTML: (a) => a }) : void 0, qt = "$lit$", S = `lit$${Math.random().toFixed(9).slice(2)}$`, Wt = "?" + S, _e = `<${Wt}>`, I = document, j = () => I.createComment(""), q = (a) => a === null || typeof a != "object" && typeof a != "function", ut = Array.isArray, Ae = (a) => ut(a) || typeof a?.[Symbol.iterator] == "function", ct = `[
251
- \f\r]`, H = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, Et = /-->/g, Pt = />/g, A = RegExp(`>|${ct}(?:([^\\s"'>=/]+)(${ct}*=${ct}*(?:[^
252
- \f\r"'\`<>=]|("|')|))|$)`, "g"), Bt = /'/g, Dt = /"/g, Vt = /^(?:script|style|textarea|title)$/i, Yt = (a) => (t, ...e) => ({ _$litType$: a, strings: t, values: e }), l = 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 Te = (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 c = a[i];
262
- let h, d, p = -1, u = 0;
263
- for (; u < c.length && (n.lastIndex = u, d = n.exec(c), 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, h = d[1], n = d[3] === void 0 ? A : d[3] === '"' ? Dt : Bt) : n === Dt || n === Bt ? 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 ? c + _e : p >= 0 ? (s.push(h), c.slice(0, p) + qt + c.slice(p) + S + f) : c + 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
269
  class W {
270
- constructor({ strings: t, _$litType$: e }, s) {
271
- let r;
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, c = this.parts, [h, d] = Te(t, e);
275
- if (this.el = W.createElement(h, 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 && c.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
- c.push({ type: 1, index: o, name: g[2], strings: f, ctor: g[1] === "." ? Ce : g[1] === "?" ? Ee : g[1] === "@" ? Pe : ot }), r.removeAttribute(p);
284
- } else p.startsWith(S) && (c.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 = X ? X.emptyScript : "";
289
- for (let f = 0; f < u; f++) r.append(p[f], j()), T.nextNode(), c.push({ type: 2, index: ++o });
290
- r.append(p[u], j());
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) c.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; ) c.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 = q(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 Ie {
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 Ie {
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, c = s[0];
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
326
  for (; c !== void 0; ) {
327
327
  if (n === c.index) {
328
- let h;
329
- c.type === 2 ? h = new Y(o, o.nextSibling, this, t) : c.type === 1 ? h = new c.ctor(o, c.name, c.strings, this, t) : c.type === 6 && (h = new Be(o, this, t)), this._$AV.push(h), c = s[++i];
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 !== c?.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
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 Y {
355
355
  get endNode() {
356
356
  return this._$AB;
357
357
  }
358
- _$AI(t, e = this) {
359
- t = F(this, t, e), q(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) : Ae(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 && q(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 = W.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 Ie(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 W(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 Y(this.O(j()), this.O(j()), 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 ot {
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 = !q(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 c, h;
416
- for (t = o[0], c = 0; c < o.length - 1; c++) h = F(this, i[s + c], e, c), h === M && (h = this._$AH[c]), n ||= !q(h) || h !== this._$AH[c], h === m ? t = m : t !== m && (t += (h ?? "") + o[c + 1]), this._$AH[c] = h;
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 Ce extends ot {
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 Ee extends ot {
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 Pe extends ot {
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 Be {
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?.(W, Y), (mt.litHtmlVersions ??= []).push("3.3.3");
466
- const ze = (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 Y(t.insertBefore(j(), 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 = ze(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 Re = ft.litElementPolyfillSupport;
500
- Re?.({ LitElement: N });
501
- (ft.litElementVersions ??= []).push("4.2.2");
502
- const Ne = 50;
503
- function Me(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 Fe({ 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
513
  const c = { Accept: "application/json" };
514
- t && (c.Authorization = `Bearer ${t}`);
515
- const h = await r(`${s}${i}`, { headers: c });
516
- if (!h.ok) {
517
- const d = new Error(`api-hsot ${h.status} on ${i}`);
518
- throw d.status = h.status, d;
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 h.json();
520
+ return d.json();
521
521
  }
522
522
  async function n(i, c = {}) {
523
- const h = [];
524
- let d = null;
525
- for (let p = 0; p < Ne; p += 1) {
526
- const u = Me(d ? { ...c, cursor: d } : c), f = await o(`${i}${u}`);
527
- if (h.push(...f.items || []), d = f.nextCursor || null, !d) break;
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: h, total: h.length, nextCursor: null };
529
+ return { items: d, total: d.length, nextCursor: null };
530
530
  }
531
531
  return {
532
532
  listSchools: (i) => n("/schools", i),
@@ -553,134 +553,145 @@ const L = {
553
553
  // reportHref() drops the parameter when there is none.
554
554
  report: "/report-a-score/?game={id}"
555
555
  };
556
- function v(a, t) {
557
- 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);
558
558
  }
559
- function O(a) {
559
+ function O(r) {
560
560
  return {
561
- game: a.getAttribute("game-href") || L.game,
562
- school: a.getAttribute("school-href") || L.school,
563
- section: a.getAttribute("section-href") || L.section,
564
- report: a.getAttribute("report-href") || L.report
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
565
565
  };
566
566
  }
567
- function Qt(a, t = "") {
568
- const e = v(a.report || L.report, { id: t || "" });
569
- return t ? e : e.replace(/([?&])game=(?=&|$)/, "$1").replace(/[?&]$/, "").replace(/\?&/, "?");
570
- }
571
- const D = (a) => a ? a.charAt(0).toUpperCase() + a.slice(1) : "";
572
- function w(a, t) {
573
- if (!a) return "TBD";
574
- const [e, s, r] = String(a).split("-").map(Number);
575
- return !e || !s || !r ? "TBD" : new Date(e, s - 1, r).toLocaleDateString("en-US", t || { weekday: "short", month: "short", day: "numeric" });
576
- }
577
- function gt(a) {
578
- if (!a) return "";
579
- const [t, e] = String(a).split(":").map(Number);
580
- if (Number.isNaN(t)) return "";
581
- const s = t >= 12 ? "PM" : "AM";
582
- return `${(t + 11) % 12 + 1}:${String(e || 0).padStart(2, "0")} ${s}`;
583
- }
584
- function Oe(a) {
585
- return a ? `${Math.floor(a / 12)}-${a % 12}` : "·";
586
- }
587
- function Ue(a) {
588
- return (Array.isArray(a?.positions) ? a.positions : String(a?.position ?? "").split(/[/,]/)).map((e) => String(e ?? "").trim()).filter(Boolean).join("/");
589
- }
590
- function K(a = /* @__PURE__ */ new Date()) {
591
- const t = a.getFullYear();
592
- return a.getMonth() >= 6 ? `${t}-${t + 1}` : `${t - 1}-${t}`;
593
- }
594
- function vt(a = /* @__PURE__ */ new Date()) {
595
- const t = (e) => String(e).padStart(2, "0");
596
- return `${a.getFullYear()}-${t(a.getMonth() + 1)}-${t(a.getDate())}`;
597
- }
598
- function He(a, t = vt()) {
599
- const e = [...new Set((a || []).filter(Boolean))].sort();
600
- if (!e.length || e.includes(t)) return t;
601
- const s = e.filter((r) => r < t);
602
- return s.length ? s[s.length - 1] : e[0];
603
- }
604
- function $t(a) {
605
- return a ? (a.abbr || a.name || "?").slice(0, 4).toUpperCase() : "?";
606
- }
607
- function tt(a) {
608
- if (!a || !/^#[0-9a-fA-F]{6}$/.test(a)) return "#FFFFFF";
609
- const t = parseInt(a.slice(1), 16), e = t >> 16 & 255, s = t >> 8 & 255, r = t & 255;
610
- return 0.299 * e + 0.587 * s + 0.114 * r > 150 ? "#0F1B33" : "#FFFFFF";
611
- }
612
- const Le = (a) => {
613
- const t = ["th", "st", "nd", "rd"], e = a % 100;
614
- 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]);
615
615
  };
616
- function Nt(a, t) {
617
- const e = (o) => {
616
+ function Me(r, e) {
617
+ const t = (o) => {
618
618
  const n = /^\d+/.exec(String(o ?? ""));
619
619
  return n ? Number(n[0]) : null;
620
- }, s = e(a), r = e(t);
621
- 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" });
622
622
  }
623
- function Ge(a, t) {
624
- const e = (s) => String(s?.name ?? s ?? "");
625
- 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" });
626
626
  }
627
- function Zt(a) {
628
- if (a.state === "live") {
629
- const t = [a.period, a.clock].filter(Boolean).join(" ");
630
- 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" };
631
631
  }
632
- if (a.state === "final") {
633
- const t = [];
634
- 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(" · ")}` : ""}` };
635
635
  }
636
- 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 || [];
644
+ }
645
+ function he(r) {
646
+ const e = new Set((r || []).map((t) => t && t.gender));
647
+ return Vt.filter((t) => e.has(t));
637
648
  }
638
- const je = /* @__PURE__ */ new Set(["game", "story", "page", "forum", "video", "gallery"]);
639
- function _(a) {
640
- let t = String(a || "").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/#?]*/i, "");
641
- const e = t.indexOf("#");
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("#");
642
653
  let s = "";
643
- e !== -1 && (s = t.slice(e).split("?")[0], t = t.slice(0, e));
644
- let r = t.split("?")[0] + s;
645
- return r = r.replace(/([^:])\/{2,}/g, "$1/").replace(/^\/{2,}/, "/"), r = r.replace(/^\/(?=#)/, ""), r.length > 1 && (r = r.replace(/\/+$/, "")), r.toLowerCase();
646
- }
647
- function Jt() {
648
- const a = globalThis.location;
649
- if (!a) return "";
650
- const t = (a.hash || "").startsWith("#/") ? a.hash : "";
651
- return _((a.pathname || "") + t);
652
- }
653
- function qe(a, t, e) {
654
- if (!e) return null;
655
- 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);
656
667
  if (!s) return null;
657
- const r = _(v(t.game, { sport: e, id: "" })), o = _(v(t.school, { id: "" }));
658
- if (s === r || s.startsWith(`${r}/`) || s === o || s.startsWith(`${o}/`)) return null;
659
- 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: "" }));
660
671
  if (s === n) return "";
661
672
  if (!s.startsWith(`${n}/`)) return null;
662
673
  const i = s.slice(n.length + 1), c = i.split("/");
663
- return c.length > 2 || c.some((h) => !/^[a-z][a-z-]*$/.test(h)) || je.has(c[0]) ? null : i;
674
+ return c.length > 2 || c.some((d) => !/^[a-z][a-z-]*$/.test(d)) || Kt.has(c[0]) ? null : i;
664
675
  }
665
- function We(a, t, e) {
666
- 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) ? [
667
678
  { label: "Boys Standings", href: s("boys/standings") },
668
679
  { label: "Girls Standings", href: s("girls/standings") }
669
680
  ] : [{ label: "Standings", href: s("standings") }];
670
681
  return [
671
- { label: `${D(a)} Home`, href: s("") },
682
+ { label: `${k(r)} Home`, href: s("") },
672
683
  { label: "Scores/Schedule", href: s("scores") },
673
684
  { label: "Playoff Brackets", href: s("brackets") },
674
- ...o,
685
+ ...a,
675
686
  { label: "Polls & Rankings", href: s("rankings") }
676
687
  ];
677
688
  }
678
- function Ve(a, t = Jt()) {
679
- const e = _(t);
680
- for (const s of a.querySelectorAll(':scope > a[slot="nav"]'))
681
- 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");
682
693
  }
683
- class b extends N {
694
+ class y extends N {
684
695
  static properties = {
685
696
  api: { type: String },
686
697
  refreshInterval: { type: Number, attribute: "refresh-interval" },
@@ -695,11 +706,11 @@ class b extends N {
695
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;
696
707
  }
697
708
  /** Injected client wins; otherwise build a fetch client from the api attribute. */
698
- set client(t) {
699
- this._client = t, this.isConnected && this.load();
709
+ set client(e) {
710
+ this._client = e, this.isConnected && this.load();
700
711
  }
701
712
  get client() {
702
- return this._client ? this._client : this.api ? Fe({ baseUrl: this.api }) : null;
713
+ return this._client ? this._client : this.api ? Ht({ baseUrl: this.api }) : null;
703
714
  }
704
715
  connectedCallback() {
705
716
  super.connectedCallback(), this._setupInterval();
@@ -710,31 +721,31 @@ class b extends N {
710
721
  firstUpdated() {
711
722
  this.load();
712
723
  }
713
- updated(t) {
714
- t.has("api") && t.get("api") !== void 0 && t.get("api") !== this.api && this.load(), t.has("refreshInterval") && this._setupInterval(), Ve(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);
715
726
  }
716
727
  async load() {
717
- const t = this.client;
718
- if (!t) {
728
+ const e = this.client;
729
+ if (!e) {
719
730
  this.error = "not-configured";
720
731
  return;
721
732
  }
722
733
  this.loading = !0, this.error = "";
723
734
  try {
724
- this.data = await this.fetchData(t);
725
- } catch (e) {
726
- 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";
727
738
  } finally {
728
739
  this.loading = !1;
729
740
  }
730
741
  }
731
- async fetchData(t) {
742
+ async fetchData(e) {
732
743
  return null;
733
744
  }
734
745
  _setupInterval() {
735
746
  this._clearInterval();
736
- const t = Number(this.refreshInterval) || 0;
737
- t > 0 && (this._refreshId = setInterval(() => this.load(), t));
747
+ const e = Number(this.refreshInterval) || 0;
748
+ e > 0 && (this._refreshId = setInterval(() => this.load(), e));
738
749
  }
739
750
  _clearInterval() {
740
751
  this._refreshId && (clearInterval(this._refreshId), this._refreshId = null);
@@ -746,7 +757,7 @@ class b extends N {
746
757
  return l``;
747
758
  }
748
759
  }
749
- const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
760
+ const b = (r) => Object.fromEntries((r || []).map((e) => [e.id, e])), Xt = w`
750
761
  :host {
751
762
  --hsot-red: var(--color-red, #D1232A);
752
763
  --hsot-red-deep: var(--color-red-dark, #951C21);
@@ -784,7 +795,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
784
795
  outline-offset: 1px;
785
796
  }
786
797
  .mut { color: var(--hsot-gray-5); }
787
- `, Ke = y`
798
+ `, es = w`
788
799
  .band { background: var(--hsot-white); color: var(--hsot-black); }
789
800
  .band .inner { max-width: 1366px; margin: 0 auto; padding: 1.1rem 1.25rem 0; }
790
801
  .band h1, .band h2.bandtitle {
@@ -833,7 +844,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
833
844
  @media (max-width: 720px) {
834
845
  .band h1, .band h2.bandtitle, .band.section h1, .band.section h2.bandtitle { font-size: 1.8rem; }
835
846
  }
836
- `, Qe = y`
847
+ `, ts = w`
837
848
  .view { max-width: 1366px; margin: 0 auto; padding: 1.25rem; box-sizing: border-box; }
838
849
  /* Optional right rail (slot="rail" light-DOM children): a divided 300px
839
850
  column on desktop, stacked under the view content on smaller screens. */
@@ -897,7 +908,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
897
908
  .error { padding: 1.2rem 1rem; color: var(--hsot-red-deep); font-size: 0.9rem; }
898
909
  .note { font-size: 0.8125rem; color: var(--hsot-gray-5); margin: 0.6rem 0 0; }
899
910
  .loading { padding: 1.2rem; color: var(--hsot-gray-5); font-family: var(--hsot-heading-font); }
900
- `, Ze = y`
911
+ `, ss = w`
901
912
  .pill {
902
913
  display: inline-block; font-family: var(--hsot-heading-font); font-weight: 700;
903
914
  font-size: 0.6875rem; text-transform: uppercase; letter-spacing: 0.04em;
@@ -912,7 +923,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
912
923
  .pill.champ { background: var(--hsot-straw); color: #6b5900; }
913
924
  @keyframes hsot-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }
914
925
  @media (prefers-reduced-motion: reduce) { .pill.live { animation: none; } }
915
- `, Je = y`
926
+ `, rs = w`
916
927
  .tablewrap { overflow-x: auto; }
917
928
  table.data { font-family: var(--hsot-heading-font); font-size: 14px; border-collapse: collapse; width: 100%; }
918
929
  table.data th {
@@ -930,7 +941,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
930
941
  table.data tbody tr.rowlink:hover { background: var(--hsot-gray-1); }
931
942
  table.data td.teamcell a { color: inherit; text-decoration: none; font-weight: 500; }
932
943
  table.data td.teamcell a:hover { text-decoration: underline; }
933
- `, Xe = y`
944
+ `, as = w`
934
945
  .swatch {
935
946
  display: inline-flex; align-items: center; justify-content: center;
936
947
  width: 26px; height: 26px; border-radius: 50%;
@@ -954,7 +965,7 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
954
965
  .dot.W { background: var(--hsot-win); }
955
966
  .dot.L { background: var(--hsot-loss); }
956
967
  .dot.T { background: var(--hsot-tie); }
957
- `, ts = y`
968
+ `, os = w`
958
969
  ul.gamelist { list-style: none; margin: 0; padding: 0; }
959
970
  .gamelist li {
960
971
  display: flex; align-items: center; gap: 0.7rem; padding: 0.55rem 1rem;
@@ -1004,177 +1015,177 @@ const $ = (a) => Object.fromEntries((a || []).map((t) => [t.id, t])), Ye = y`
1004
1015
  .gamelist .ff { color: var(--hsot-gray-5); font-size: 0.78rem; font-style: italic; }
1005
1016
  .gamelist .where { color: var(--hsot-gray-5); font-size: 0.78rem; }
1006
1017
  .gamelist a.box { font-size: 0.78rem; }
1007
- `, U = [Ye, Ke, Qe, Ze, Je, Xe, ts];
1008
- function nt(a) {
1009
- 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";
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";
1010
1021
  }
1011
- function es(a) {
1012
- return a && (a.forfeit === "home" || a.forfeit === "away") ? a.forfeit : null;
1022
+ function ns(r) {
1023
+ return r && (r.forfeit === "home" || r.forfeit === "away") ? r.forfeit : null;
1013
1024
  }
1014
- function Q(a, t) {
1015
- 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)));
1016
- for (const o of r) {
1017
- const n = nt(o), i = o.gameType === "conference";
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";
1018
1029
  for (const c of ["home", "away"]) {
1019
- const h = c === "home" ? o.homeTeamId : o.awayTeamId;
1020
- if (!h) continue;
1021
- const d = s(h), p = c === "home" ? o.homeScore : o.awayScore, u = c === "home" ? o.awayScore : o.homeScore;
1022
- d.pf += p, d.pa += u;
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;
1023
1034
  let f = "T";
1024
- n === "tie" ? (d.t += 1, i && (d.ct += 1)) : n === c ? (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: c === "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 });
1025
1036
  }
1026
1037
  }
1027
- return e;
1038
+ return t;
1028
1039
  }
1029
- function it(a) {
1030
- if (!a || !a.length) return "";
1031
- const t = a[a.length - 1].mark;
1032
- let e = 0;
1033
- for (let s = a.length - 1; s >= 0 && a[s].mark === t; s -= 1) e += 1;
1034
- return t + e;
1035
- }
1036
- const Mt = (a, t, e) => {
1037
- const s = a + t + e;
1038
- return s ? (a + e / 2) / s : 0;
1039
- }, Ft = (a) => a.toFixed(3).replace("0.", ".");
1040
- function k(a, t = !1) {
1041
- if (!a) return "0-0";
1042
- const e = t ? a.cw : a.w, s = t ? a.cl : a.l, r = t ? a.ct : a.t;
1043
- return `${e}-${s}${r ? `-${r}` : ""}`;
1044
- }
1045
- function Xt(a, t) {
1046
- return a.map((e) => {
1047
- const s = t[e.id] || { w: 0, l: 0, t: 0, cw: 0, cl: 0, ct: 0, pf: 0, pa: 0, results: [] };
1048
- return { team: e, rec: s, confPct: Mt(s.cw, s.cl, s.ct), overallPct: Mt(s.w, s.l, s.t) };
1049
- }).sort((e, s) => s.confPct - e.confPct || s.overallPct - e.overallPct || s.rec.pf - s.rec.pa - (e.rec.pf - e.rec.pa));
1050
- }
1051
- function bt(a, t) {
1052
- 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;
1053
- }
1054
- function Ot(a, t) {
1055
- const e = a[t];
1056
- return e && e.results.length ? e.results[e.results.length - 1] : null;
1057
- }
1058
- function yt(a, t, e, s, r) {
1059
- 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];
1060
1071
  if (!o) return null;
1061
1072
  const n = /* @__PURE__ */ new Map();
1062
- for (const c of a || []) {
1063
- if (c.sport !== s || r && c.effectiveDate > r || c.gender && o.gender !== c.gender && o.gender !== "coed") continue;
1064
- const h = c.gender || "", d = n.get(h);
1065
- (!d || c.effectiveDate > d.effectiveDate) && n.set(h, c);
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);
1066
1077
  }
1067
1078
  let i = null;
1068
1079
  for (const c of n.values()) {
1069
- const h = (c.teamIds || []).indexOf(e);
1070
- h !== -1 && (!i || c.effectiveDate > i.effectiveDate) && (i = { poll: c, rank: h + 1 });
1080
+ const d = (c.teamIds || []).indexOf(t);
1081
+ d !== -1 && (!i || c.effectiveDate > i.effectiveDate) && (i = { poll: c, rank: d + 1 });
1071
1082
  }
1072
1083
  return i ? i.rank : null;
1073
1084
  }
1074
- function ss(a, t, e) {
1075
- if (!a) return { kind: "none", delta: 0 };
1076
- 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;
1077
1088
  if (!s) return { kind: "none", delta: 0 };
1078
- if (!t) return { kind: "same", delta: 0 };
1079
- const r = (t.teamIds || []).indexOf(e) + 1;
1080
- if (!r) return { kind: "new", delta: 0 };
1081
- 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;
1082
1093
  return o > 0 ? { kind: "up", delta: o } : o < 0 ? { kind: "down", delta: -o } : { kind: "same", delta: 0 };
1083
1094
  }
1084
- function as(a) {
1085
- return /^https?:\/\//i.test(String(a || ""));
1095
+ function ls(r) {
1096
+ return /^https?:\/\//i.test(String(r || ""));
1086
1097
  }
1087
- function te(a, { w: t, h: e } = {}) {
1088
- if (!as(a)) return "";
1098
+ function rt(r, { w: e, h: t } = {}) {
1099
+ if (!ls(r)) return "";
1089
1100
  const s = [];
1090
- t && s.push(`w=${Math.max(1, Math.round(t))}`), e && s.push(`h=${Math.max(1, Math.round(e))}`), s.push("f=webp");
1091
- const r = a.includes("?") ? "&" : "?";
1092
- 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("&")}`;
1093
1104
  }
1094
- function et(a, t) {
1095
- const e = t * 2;
1096
- return te(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 });
1097
1108
  }
1098
- function rs(a, t) {
1099
- return te(a?.photoAssetId, { w: t * 2 });
1109
+ function cs(r, e) {
1110
+ return rt(r?.photoAssetId, { w: e * 2 });
1100
1111
  }
1101
- function lt(a, t, { title: e, sub: s, teams: r }) {
1102
- const o = Jt(), i = !!a.querySelector(':scope > a[slot="nav"]') || qe(o, t.hrefs, t.sport) !== null;
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;
1103
1114
  return l`
1104
1115
  <div class="band section">
1105
1116
  <div class="inner">
1106
- <h1>${e}</h1>
1117
+ <h1>${t}</h1>
1107
1118
  ${s ? l`<p class="sub">${s}</p>` : m}
1108
1119
  </div>
1109
1120
  ${i ? l`
1110
- <nav class="sectionnav" aria-label="${D(t.sport)} section">
1121
+ <nav class="sectionnav" aria-label="${k(e.sport)} section">
1111
1122
  <div class="navrow">
1112
1123
  <slot name="nav">
1113
- ${We(t.sport, r, t.hrefs).map((c) => l`<a href=${c.href}
1114
- aria-current=${o && _(c.href) === o ? "page" : m}>${c.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>`)}
1115
1126
  </slot>
1116
1127
  </div>
1117
1128
  </nav>` : m}
1118
1129
  </div>
1119
1130
  `;
1120
1131
  }
1121
- const C = (a, t) => {
1122
- const e = a.teamsById[t];
1123
- return e ? a.schoolsById[e.schoolId] : null;
1124
- }, R = (a, t) => C(a, t)?.name || "TBD", st = (a, t) => C(a, t)?.abbr || "TBD";
1125
- function E(a, t = 26) {
1126
- if (!a) return m;
1127
- const e = et(a, t);
1128
- if (e)
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)
1129
1140
  return l`<img class="swatch logo" aria-hidden="true" alt="" loading="lazy"
1130
- src=${e} style="width:${t}px;height:${t}px" />`;
1131
- const s = a.colorPrimary || "#030711", r = tt(s);
1141
+ src=${t} style="width:${e}px;height:${e}px" />`;
1142
+ const s = r.colorPrimary || "#030711", a = ee(s);
1132
1143
  return l`<span class="swatch" aria-hidden="true"
1133
- style="width:${t}px;height:${t}px;background:${s};color:${r};font-size:${Math.max(8, t * 0.28)}px"
1134
- >${$t(a)}</span>`;
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>`;
1135
1146
  }
1136
- function wt(a, t, e) {
1137
- const s = yt(a.rankings, a.teamsById, t, a.sport, e);
1147
+ function xe(r, e, t) {
1148
+ const s = we(r.rankings, r.teamsById, e, r.sport, t);
1138
1149
  return s ? l`<span class="rankbadge">#${s}</span>` : m;
1139
1150
  }
1140
- function at(a, t, e) {
1141
- const s = C(a, t);
1142
- return s ? l`${wt(a, t, e)}<a href=${v(a.hrefs.school, { id: s.id })}>${s.name}</a>` : l`<span class="mut">TBD</span>`;
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>`;
1143
1154
  }
1144
- function xt(a, t, e = 5) {
1145
- const s = a.records[t];
1155
+ function ke(r, e, t = 5) {
1156
+ const s = r.records[e];
1146
1157
  if (!s || !s.results.length) return l`<span class="mut">·</span>`;
1147
- const r = s.results.slice(-1 * e);
1148
- return l`<span class="dots" role="img" aria-label="last ${r.length} results">
1149
- ${r.map((o) => l`<a class="dot ${o.mark}"
1150
- title="${o.mark} ${o.my}-${o.their} vs ${R(a, o.opp)}"
1151
- href=${v(a.hrefs.game, { sport: a.sport, id: o.gameId })}>${o.mark}</a>`)}
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>`)}
1152
1163
  </span>`;
1153
1164
  }
1154
- function P(a, t) {
1155
- return a.querySelector(':scope > [slot="rail"]') ? l`<div class="view withrail">
1156
- <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>
1157
1168
  <aside class="viewrail"><slot name="rail"></slot></aside>
1158
- </div>` : l`<div class="view">${t}</div>`;
1169
+ </div>` : l`<div class="view">${e}</div>`;
1159
1170
  }
1160
- function B(a) {
1161
- if (!a.promoImage) return m;
1162
- const t = l`<img src=${a.promoImage} alt=${a.promoAlt || "Sponsor"}>`;
1163
- return l`<div class="promo">${a.promoHref ? l`<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>`;
1164
1175
  }
1165
- function V(a) {
1166
- const t = Zt(a);
1167
- return l`<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>`;
1168
1179
  }
1169
- function ee(a, t, e) {
1170
- if (!t) return l`<span class="mut">·</span>`;
1171
- const s = t.homeTeamId === e ? t.awayTeamId : t.homeTeamId, r = t.homeTeamId === e ? "vs" : "at";
1172
- return l`${t.state === "live" ? l`<span class="pill live">Live</span> ` : l`${w(t.date, { month: "numeric", day: "numeric" })} `}${r} ${st(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)}`;
1173
1184
  }
1174
- class se extends b {
1185
+ class ot extends y {
1175
1186
  static styles = U;
1176
1187
  static properties = {
1177
- ...b.properties,
1188
+ ...y.properties,
1178
1189
  sport: { type: String },
1179
1190
  season: { type: String },
1180
1191
  date: { type: String }
@@ -1184,23 +1195,23 @@ class se extends b {
1184
1195
  }
1185
1196
  connectedCallback() {
1186
1197
  if (super.connectedCallback(), !this.date) {
1187
- const t = new URLSearchParams(globalThis.location?.search || "").get("date");
1188
- t && (this.date = t);
1198
+ const e = new URLSearchParams(globalThis.location?.search || "").get("date");
1199
+ e && (this.date = e);
1189
1200
  }
1190
1201
  this._datePinned = !!this.date;
1191
1202
  }
1192
- async fetchData(t) {
1193
- const e = this.season || K(), [s, r, o, n, i] = await Promise.all([
1194
- t.listSchools(),
1195
- t.listTeams({ sport: this.sport }),
1196
- t.listConferences(),
1197
- t.listGames({ sport: this.sport, season: e }),
1198
- 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 })
1199
1210
  ]);
1200
- return this._datePinned || (this.date = He(n.items.map((c) => c.date)), this._datePinned = !0), {
1201
- season: e,
1211
+ return this._datePinned || (this.date = jt(n.items.map((c) => c.date)), this._datePinned = !0), {
1212
+ season: t,
1202
1213
  schools: s.items,
1203
- teams: r.items,
1214
+ teams: a.items,
1204
1215
  conferences: o.items,
1205
1216
  games: n.items,
1206
1217
  rankings: i.items
@@ -1208,8 +1219,8 @@ class se extends b {
1208
1219
  }
1209
1220
  get ctx() {
1210
1221
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1211
- teamsById: $(this.data.teams),
1212
- schoolsById: $(this.data.schools),
1222
+ teamsById: b(this.data.teams),
1223
+ schoolsById: b(this.data.schools),
1213
1224
  records: Q(this.data.games),
1214
1225
  rankings: this.data.rankings,
1215
1226
  hrefs: O(this),
@@ -1217,30 +1228,30 @@ class se extends b {
1217
1228
  }, this._ctxData = this.data), this._ctx;
1218
1229
  }
1219
1230
  renderView() {
1220
- const t = this.ctx, e = $(this.data.conferences), s = [...new Set(this.data.games.map((h) => h.date).filter(Boolean))].sort(), r = Number.MAX_SAFE_INTEGER, o = (h) => {
1221
- const d = [h.awayTeamId, h.homeTeamId].map((p) => yt(t.rankings, t.teamsById, p, this.sport, h.date)).filter(Boolean);
1222
- return d.length ? Math.min(...d) : r;
1223
- }, n = this.data.games.filter((h) => h.date === this.date), i = new Map(n.map((h) => [h, o(h)]));
1224
- n.sort((h, d) => (h.state === "live" ? 0 : 1) - (d.state === "live" ? 0 : 1) || i.get(h) - i.get(d));
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));
1225
1236
  const c = /* @__PURE__ */ new Map();
1226
- return n.forEach((h) => {
1227
- const d = h.gameType === "conference" && h.conferenceId ? e[h.conferenceId]?.name || "Conference" : h.gameType === "playoff" ? "Playoffs" : h.gameType === "scrimmage" ? "Scrimmages" : "Nonconference";
1228
- c.has(d) || c.set(d, []), c.get(d).push(h);
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);
1229
1240
  }), l`
1230
- ${lt(this, t, {
1231
- title: l`${D(this.sport)} scores &amp; schedules`,
1232
- sub: l`${w(this.date, { weekday: "long", month: "long", day: "numeric", year: "numeric" })} · ${n.length} games`,
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`,
1233
1244
  teams: this.data.teams
1234
1245
  })}
1235
- ${P(this, l`
1236
- ${B(this)}
1246
+ ${B(this, l`
1247
+ ${D(this)}
1237
1248
  <div class="toolbar">
1238
1249
  <label class="asof" for="datesel">Date</label>
1239
- <select id="datesel" @change=${(h) => {
1240
- this.date = h.target.value;
1250
+ <select id="datesel" @change=${(d) => {
1251
+ this.date = d.target.value;
1241
1252
  }}>
1242
- ${(s.includes(this.date) ? s : [...s, this.date].sort()).map((h) => l`<option value=${h} ?selected=${h === this.date}>
1243
- ${w(h, { weekday: "short", month: "short", day: "numeric" })}${h === 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" : ""}
1244
1255
  </option>`)}
1245
1256
  </select>
1246
1257
  <button class="chip" ?disabled=${s.indexOf(this.date) <= 0}
@@ -1252,13 +1263,13 @@ class se extends b {
1252
1263
  this.date = s[s.indexOf(this.date) + 1];
1253
1264
  }}>Next →</button>
1254
1265
  <span class="spacer"></span>
1255
- <span class="asof">Live games first · <a href=${Qt(t.hrefs)}>report a score</a> 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>
1256
1267
  </div>
1257
1268
  ${n.length ? m : l`<p class="empty">No ${this.sport} games on this date.</p>`}
1258
- ${[...c.entries()].map(([h, d]) => l`
1259
- <div class="section-title">${h}</div>
1269
+ ${[...c.entries()].map(([d, h]) => l`
1270
+ <div class="section-title">${d}</div>
1260
1271
  <div class="card"><ul class="gamelist">
1261
- ${d.map((p) => this.renderGame(t, p))}
1272
+ ${h.map((p) => this.renderGame(e, p))}
1262
1273
  </ul></div>
1263
1274
  `)}
1264
1275
  `)}
@@ -1267,97 +1278,129 @@ class se extends b {
1267
1278
  // Each team's score rides in a block beside its name (reader feedback:
1268
1279
  // a lone score column on the far right read as detached from the teams).
1269
1280
  // Scheduled games carry their start time on the status pill alone.
1270
- renderGame(t, e) {
1271
- const s = e.state === "final" || e.state === "live", r = (n, i, c = m) => l`<span class="side">${at(t, n, e.date)}${s ? l`<span class="score">${i}</span>` : m}${c}</span>`, o = es(e);
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);
1272
1283
  return l`
1273
1284
  <li>
1274
- ${V(e)}
1275
- <span class="opp matchup">${r(e.awayTeamId, e.awayScore, l`<span class="at">at</span>`)}${r(e.homeTeamId, e.homeScore)}</span>
1276
- ${o ? l`<span class="ff">${R(t, o === "home" ? e.homeTeamId : e.awayTeamId)} forfeited</span>` : m}
1277
- <span class="where">${e.venue || ""}</span>
1278
- ${e.broadcast ? l`<span class="pill class">${e.broadcast}</span>` : m}
1279
- <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>
1280
1291
  </li>
1281
1292
  `;
1282
1293
  }
1283
1294
  }
1284
- globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", se);
1285
- class ae extends b {
1295
+ globalThis?.customElements && !globalThis.customElements.get("hsot-scores") && globalThis.customElements.define("hsot-scores", ot);
1296
+ class nt extends y {
1286
1297
  static styles = U;
1287
1298
  static properties = {
1288
- ...b.properties,
1299
+ ...y.properties,
1289
1300
  sport: { type: String },
1301
+ gender: { type: String },
1290
1302
  season: { type: String },
1291
1303
  classFilter: { state: !0 },
1292
- query: { state: !0 }
1304
+ query: { state: !0 },
1305
+ pickedGender: { state: !0 }
1293
1306
  };
1294
1307
  constructor() {
1295
- super(), this.sport = "football", this.season = "", this.classFilter = "All", this.query = "";
1296
- }
1297
- async fetchData(t) {
1298
- const e = this.season || K(), [s, r, o, n, i] = await Promise.all([
1299
- t.listConferences({ active: !0 }),
1300
- t.listSchools(),
1301
- t.listTeams({ sport: this.sport }),
1302
- t.listGames({ sport: this.sport, season: e }),
1303
- 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 } : {} })
1304
1333
  ]);
1305
1334
  return {
1306
- season: e,
1335
+ season: t,
1307
1336
  conferences: s.items,
1308
- schools: r.items,
1337
+ schools: a.items,
1309
1338
  teams: o.items,
1310
1339
  games: n.items,
1311
1340
  rankings: i.items
1312
1341
  };
1313
1342
  }
1314
1343
  get ctx() {
1315
- return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1316
- teamsById: $(this.data.teams),
1317
- schoolsById: $(this.data.schools),
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),
1318
1347
  records: Q(this.data.games),
1319
1348
  rankings: this.data.rankings,
1320
1349
  hrefs: O(this),
1321
- sport: this.sport
1322
- }, 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;
1323
1355
  }
1324
1356
  renderView() {
1325
- 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(Ge);
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);
1326
1358
  return l`
1327
- ${lt(this, t, {
1328
- title: l`${D(this.sport)} standings`,
1359
+ ${le(this, e, {
1360
+ title: l`${t ? `${k(t)} ` : ""}${k(this.sport)} standings`,
1329
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.
1330
1365
  teams: this.data.teams
1331
1366
  })}
1332
- ${P(this, l`
1333
- ${B(this)}
1367
+ ${B(this, l`
1368
+ ${D(this)}
1334
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}
1335
1378
  <div role="group" aria-label="Classification filter">
1336
- ${e.map((r) => l`<button class="chip ${this.classFilter === r ? "on" : ""}"
1379
+ ${a.map((n) => l`<button class="chip ${this.classFilter === n ? "on" : ""}"
1337
1380
  @click=${() => {
1338
- this.classFilter = r;
1339
- }}>${r}</button>`)}
1381
+ this.classFilter = n;
1382
+ }}>${n}</button>`)}
1340
1383
  </div>
1341
1384
  <input type="search" placeholder="Find a school…" aria-label="Find a school"
1342
- .value=${this.query} @input=${(r) => {
1343
- this.query = r.target.value;
1385
+ .value=${this.query} @input=${(n) => {
1386
+ this.query = n.target.value;
1344
1387
  }}>
1345
1388
  <span class="spacer"></span>
1346
- <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>
1347
1390
  </div>
1348
- ${s.map((r) => this.renderConference(t, r))}
1391
+ ${o.map((n) => this.renderConference(e, n))}
1349
1392
  `)}
1350
1393
  `;
1351
1394
  }
1352
- renderConference(t, e) {
1353
- 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);
1354
1397
  if (!s.length) return m;
1355
- const r = this.query.trim().toLowerCase(), o = Xt(s, t.records);
1398
+ const a = this.query.trim().toLowerCase(), o = st(s, e.records);
1356
1399
  return l`
1357
1400
  <div class="card">
1358
1401
  <div class="card-head">
1359
- <h2>${e.name}</h2>
1360
- ${[...e.classifications || []].sort(Nt).map((n) => l`<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>`)}
1361
1404
  <span class="meta">${o.length} teams · membership derives from teams</span>
1362
1405
  </div>
1363
1406
  <div class="tablewrap"><table class="data">
@@ -1367,43 +1410,43 @@ class ae extends b {
1367
1410
  <th>Streak</th><th>Last 5</th><th>Next</th>
1368
1411
  </tr></thead>
1369
1412
  <tbody>
1370
- ${o.map((n, i) => this.renderRow(t, n, i, r))}
1413
+ ${o.map((n, i) => this.renderRow(e, n, i, a))}
1371
1414
  </tbody>
1372
1415
  </table></div>
1373
1416
  </div>
1374
1417
  `;
1375
1418
  }
1376
- renderRow(t, e, s, r) {
1377
- const o = t.schoolsById[e.team.schoolId], n = o?.name || e.team.name || "TBD";
1378
- if (r && !n.toLowerCase().includes(r)) return m;
1379
- const i = e.rec.pf - e.rec.pa, c = bt(this.data.games, e.team.id), h = () => {
1380
- 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 });
1381
1424
  };
1382
1425
  return l`
1383
- <tr class="rowlink" @click=${(d) => {
1384
- d.target.closest("a") || h();
1426
+ <tr class="rowlink" @click=${(h) => {
1427
+ h.target.closest("a") || d();
1385
1428
  }}>
1386
1429
  <td class="mut">${s + 1}</td>
1387
1430
  <td class="teamcell">
1388
- ${E(o)}${wt(t, e.team.id, null)}
1389
- <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>
1390
1433
  </td>
1391
- <td class="num">${k(e.rec, !0)}</td>
1392
- <td class="num">${Ft(e.confPct)}</td>
1393
- <td class="num">${k(e.rec)}</td>
1394
- <td class="num">${Ft(e.overallPct)}</td>
1395
- <td class="num">${e.rec.pf}</td>
1396
- <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>
1397
1440
  <td class="num" style="color:${i >= 0 ? "var(--hsot-win)" : "var(--hsot-loss)"}">${i > 0 ? "+" : ""}${i}</td>
1398
- <td>${it(e.rec.results) || "·"}</td>
1399
- <td>${xt(t, e.team.id)}</td>
1400
- <td>${ee(t, c, 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>
1401
1444
  </tr>
1402
1445
  `;
1403
1446
  }
1404
1447
  }
1405
- globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", ae);
1406
- const os = y`
1448
+ globalThis?.customElements && !globalThis.customElements.get("hsot-standings") && globalThis.customElements.define("hsot-standings", nt);
1449
+ const ds = w`
1407
1450
  .hero1 {
1408
1451
  border-radius: var(--hsot-radius-md); color: var(--hsot-white);
1409
1452
  padding: 1.3rem 1.4rem; display: flex; align-items: center; gap: 1.2rem;
@@ -1420,10 +1463,10 @@ const os = y`
1420
1463
  .delta.new { background: var(--hsot-straw); color: #6b5900; border-radius: var(--hsot-radius-xs); padding: 0.1rem 0.3rem; font-size: 0.7rem; }
1421
1464
  .sparkline { vertical-align: middle; }
1422
1465
  `;
1423
- class re extends b {
1424
- static styles = [...U, os];
1466
+ class it extends y {
1467
+ static styles = [...U, ds];
1425
1468
  static properties = {
1426
- ...b.properties,
1469
+ ...y.properties,
1427
1470
  sport: { type: String },
1428
1471
  gender: { type: String },
1429
1472
  season: { type: String },
@@ -1434,21 +1477,21 @@ class re extends b {
1434
1477
  }
1435
1478
  connectedCallback() {
1436
1479
  super.connectedCallback();
1437
- const t = new URLSearchParams(globalThis.location?.search || "").get("poll");
1438
- t && (this.pollDate = t);
1439
- }
1440
- async fetchData(t) {
1441
- const e = this.season || K(), [s, r, o, n, i] = await Promise.all([
1442
- t.listRankings({ sport: this.sport, ...this.gender ? { gender: this.gender } : {} }),
1443
- t.listSchools(),
1444
- t.listTeams({ sport: this.sport }),
1445
- t.listConferences(),
1446
- t.listGames({ sport: this.sport, season: e })
1447
- ]), c = s.items.filter((h) => !this.gender || !h.gender || h.gender === this.gender).sort((h, d) => d.effectiveDate.localeCompare(h.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));
1448
1491
  return {
1449
- season: e,
1492
+ season: t,
1450
1493
  polls: c,
1451
- schools: r.items,
1494
+ schools: a.items,
1452
1495
  teams: o.items,
1453
1496
  conferences: n.items,
1454
1497
  games: i.items
@@ -1456,127 +1499,127 @@ class re extends b {
1456
1499
  }
1457
1500
  get ctx() {
1458
1501
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1459
- teamsById: $(this.data.teams),
1460
- schoolsById: $(this.data.schools),
1502
+ teamsById: b(this.data.teams),
1503
+ schoolsById: b(this.data.schools),
1461
1504
  records: Q(this.data.games),
1462
1505
  rankings: this.data.polls,
1463
1506
  hrefs: O(this),
1464
1507
  sport: this.sport
1465
1508
  }, this._ctxData = this.data), this._ctx;
1466
1509
  }
1467
- sparkline(t, e, s) {
1468
- const i = e.map((p, u) => {
1469
- 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);
1470
1513
  if (f === -1) return null;
1471
- const g = e.length === 1 ? 96 / 2 : u / (e.length - 1) * 90 + 3, x = 3 + f / 24 * 20;
1472
- return { x: g, y: x };
1514
+ const v = t.length === 1 ? 96 / 2 : u / (t.length - 1) * 90 + 3, $ = 3 + f / 24 * 20;
1515
+ return { x: v, y: $ };
1473
1516
  }), c = [];
1474
- let h = [];
1517
+ let d = [];
1475
1518
  if (i.forEach((p) => {
1476
- p ? h.push(p) : h.length && (c.push(h), h = []);
1477
- }), h.length && c.push(h), !c.length) return m;
1478
- const d = i[s];
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];
1479
1522
  return l`<svg class="sparkline" width=${96} height=${26} viewBox="0 0 ${96} ${26}" role="img" aria-label="rank history">
1480
- ${c.map((p) => zt`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1523
+ ${c.map((p) => Re`<polyline fill="none" stroke="var(--hsot-red)" stroke-width="2"
1481
1524
  points=${p.map((u) => `${u.x.toFixed(1)},${u.y.toFixed(1)}`).join(" ")}></polyline>`)}
1482
- ${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}
1483
1526
  </svg>`;
1484
1527
  }
1485
- movement(t, e, s) {
1486
- const r = ss(t, e, s);
1487
- return r.kind === "up" ? l`<span class="delta up">▲ ${r.delta}</span>` : r.kind === "down" ? l`<span class="delta down">▼ ${r.delta}</span>` : r.kind === "new" ? l`<span class="delta new">NEW</span>` : r.kind === "same" ? l`<span class="delta same">—</span>` : l`<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>`;
1488
1531
  }
1489
1532
  renderView() {
1490
- const t = this.ctx, e = this.data.polls;
1491
- if (!e.length) return l`<div class="view"><p class="empty">No ${this.sport} polls published yet this season.</p></div>`;
1492
- 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), c = $(this.data.conferences), h = (r.teamIds || [])[0], d = h ? C(t, h) : null;
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;
1493
1536
  return l`
1494
- ${lt(this, t, {
1495
- title: l`${D(this.sport)} Top 25`,
1496
- sub: l`The HighSchoolOT poll · updated weekly · ${e.length} polls this season`,
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`,
1497
1540
  teams: this.data.teams
1498
1541
  })}
1499
- ${P(this, l`
1500
- ${B(this)}
1542
+ ${B(this, l`
1543
+ ${D(this)}
1501
1544
  <div class="toolbar">
1502
1545
  <label class="asof" for="pollsel">Poll of</label>
1503
1546
  <select id="pollsel" @change=${(p) => {
1504
1547
  this.pollDate = p.target.value;
1505
1548
  }}>
1506
- ${e.map((p, u) => l`<option value=${p.effectiveDate} ?selected=${p === r}>
1507
- ${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" : ""}
1508
1551
  </option>`)}
1509
1552
  </select>
1510
- <button class="chip" ?disabled=${s >= e.length - 1}
1553
+ <button class="chip" ?disabled=${s >= t.length - 1}
1511
1554
  @click=${() => {
1512
- this.pollDate = e[s + 1].effectiveDate;
1555
+ this.pollDate = t[s + 1].effectiveDate;
1513
1556
  }}>← Older</button>
1514
1557
  <button class="chip" ?disabled=${s <= 0}
1515
1558
  @click=${() => {
1516
- this.pollDate = e[s - 1].effectiveDate;
1559
+ this.pollDate = t[s - 1].effectiveDate;
1517
1560
  }}>Newer →</button>
1518
1561
  <span class="spacer"></span>
1519
1562
  <span class="asof">Movement vs. the previous poll · sparkline = season rank history</span>
1520
1563
  </div>
1521
- ${d ? this.renderHero(t, r, o, h, d, c) : m}
1564
+ ${h ? this.renderHero(e, a, o, d, h, c) : m}
1522
1565
  <div class="card"><div class="tablewrap"><table class="data">
1523
1566
  <thead><tr>
1524
1567
  <th class="num">Rk</th><th>Mvmt</th><th>Team</th><th class="num">Record</th>
1525
1568
  <th>Conference</th><th>Last result</th><th>Next</th><th>Season</th>
1526
1569
  </tr></thead>
1527
1570
  <tbody>
1528
- ${(r.teamIds || []).map((p, u) => u === 0 || !p ? m : this.renderRow(t, r, o, n, i, c, p, u + 1))}
1571
+ ${(a.teamIds || []).map((p, u) => u === 0 || !p ? m : this.renderRow(e, a, o, n, i, c, p, u + 1))}
1529
1572
  </tbody>
1530
1573
  </table></div></div>
1531
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>
1532
1575
  `)}
1533
1576
  `;
1534
1577
  }
1535
- renderHero(t, e, s, r, o, n) {
1536
- const i = t.records[r], c = Ot(t.records, r), h = n[t.teamsById[r]?.conferenceId], d = `linear-gradient(120deg, ${o.colorPrimary || "#030711"} 0%, var(--hsot-black) 85%)`;
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%)`;
1537
1580
  return l`
1538
- <div class="hero1" style="background:${d}">
1581
+ <div class="hero1" style="background:${h}">
1539
1582
  <div class="bigrank">#1</div>
1540
- ${E(o, 64)}
1583
+ ${P(o, 64)}
1541
1584
  <div>
1542
- <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>
1543
1586
  <div class="facts">
1544
- ${k(i)} overall${h ? l` · ${k(i, !0)} ${h.name}` : m}
1545
- · streak ${it(i?.results) || "·"}
1546
- ${c ? l` · last: ${c.mark} ${c.my}-${c.their} vs ${st(t, c.opp)}` : m}
1547
- &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)}
1548
1591
  </div>
1549
1592
  </div>
1550
1593
  </div>
1551
1594
  `;
1552
1595
  }
1553
- renderRow(t, e, s, r, o, n, i, c) {
1554
- const h = C(t, i);
1555
- if (!h) return m;
1556
- const d = t.records[i], p = Ot(t.records, i), u = bt(this.data.games, i), f = n[t.teamsById[i]?.conferenceId], g = () => {
1557
- location.href = v(t.hrefs.school, { id: h.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 });
1558
1601
  };
1559
1602
  return l`
1560
- <tr class="rowlink" @click=${(x) => {
1561
- x.target.closest("a") || g();
1603
+ <tr class="rowlink" @click=${($) => {
1604
+ $.target.closest("a") || v();
1562
1605
  }}>
1563
1606
  <td class="num" style="font-weight:700">${c}</td>
1564
- <td>${this.movement(e, s, i)}</td>
1565
- <td class="teamcell">${E(h)}<a href=${v(t.hrefs.school, { id: h.id })}>${h.name}</a>
1566
- <span class="mut" style="font-size:0.78rem">${h.mascot || ""}</span></td>
1567
- <td class="num">${k(d)}</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>
1568
1611
  <td class="mut">${f?.name || "Independent"}</td>
1569
- <td>${p ? l`<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 })}>
1570
1613
  <b style="color:${p.mark === "W" ? "var(--hsot-win)" : p.mark === "L" ? "var(--hsot-loss)" : "var(--hsot-tie)"}">${p.mark}</b>
1571
- ${p.my}-${p.their} vs ${st(t, p.opp)}</a>` : l`<span class="mut">·</span>`}</td>
1572
- <td>${ee(t, u, i)}</td>
1573
- <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>
1574
1617
  </tr>
1575
1618
  `;
1576
1619
  }
1577
1620
  }
1578
- globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", re);
1579
- const ns = y`
1621
+ globalThis?.customElements && !globalThis.customElements.get("hsot-rankings") && globalThis.customElements.define("hsot-rankings", it);
1622
+ const hs = w`
1580
1623
  .schoolhero { color: var(--hsot-white); padding: 1.6rem 1.25rem 1.3rem; }
1581
1624
  .schoolhero .inner { max-width: 1366px; margin: 0 auto; display: flex; gap: 1.2rem; align-items: center; flex-wrap: wrap; }
1582
1625
  .schoolhero .crest {
@@ -1630,173 +1673,179 @@ const ns = y`
1630
1673
  table.data.roster .sub { display: block; font-weight: 400; font-size: 0.78rem; color: var(--hsot-gray-5); }
1631
1674
  }
1632
1675
  `;
1633
- class oe extends b {
1634
- static styles = [...U, ns];
1676
+ class lt extends y {
1677
+ static styles = [...U, hs];
1635
1678
  static properties = {
1636
- ...b.properties,
1679
+ ...y.properties,
1637
1680
  schoolId: { type: String, attribute: "school-id" },
1638
1681
  sport: { type: String },
1682
+ gender: { type: String },
1639
1683
  season: { type: String },
1640
1684
  activeTeamId: { state: !0 }
1641
1685
  };
1642
1686
  constructor() {
1643
- super(), this.schoolId = "", this.sport = "", this.season = "", this.activeTeamId = "";
1687
+ super(), this.schoolId = "", this.sport = "", this.gender = "", this.season = "", this.activeTeamId = "";
1644
1688
  }
1645
1689
  connectedCallback() {
1646
1690
  super.connectedCallback();
1647
- const t = new URLSearchParams(globalThis.location?.search || "").get("sport");
1648
- t && !this.sport && (this.sport = t);
1649
- }
1650
- async fetchData(t) {
1651
- const e = this.season || K(), 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, c, h, d, p, u, f] = await Promise.all([
1652
- n ? t.listGames({ sport: n.sport, season: e }) : Promise.resolve({ items: [] }),
1653
- n ? t.listTeams({ sport: n.sport }) : Promise.resolve({ items: [] }),
1654
- t.listSchools(),
1655
- t.listConferences(),
1656
- n ? t.listRankings({ sport: n.sport }) : Promise.resolve({ items: [] }),
1657
- 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: [] }),
1658
1702
  // teamId is the public surface's one players filter (roster
1659
1703
  // membership) — never fetch the whole collection.
1660
- n ? t.listPlayers({ teamId: n.id }) : Promise.resolve({ items: [] })
1704
+ i ? e.listPlayers({ teamId: i.id }) : Promise.resolve({ items: [] })
1661
1705
  ]);
1662
1706
  return {
1663
- season: e,
1707
+ season: t,
1664
1708
  school: s,
1665
1709
  teams: o,
1666
- active: n,
1667
- games: i.items,
1668
- allTeams: c.items,
1710
+ active: i,
1711
+ games: c.items,
1712
+ allTeams: d.items,
1669
1713
  schools: h.items,
1670
- conferences: d.items,
1671
- rankings: p.items,
1672
- roster: u.items.find((g) => g.season === e) || null,
1673
- players: f.items
1714
+ conferences: p.items,
1715
+ rankings: u.items,
1716
+ roster: f.items.find(($) => $.season === t) || null,
1717
+ players: v.items
1674
1718
  };
1675
1719
  }
1676
1720
  get ctx() {
1677
1721
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1678
- teamsById: $(this.data.allTeams.length ? this.data.allTeams : this.data.teams),
1679
- schoolsById: $(this.data.schools),
1722
+ teamsById: b(this.data.allTeams.length ? this.data.allTeams : this.data.teams),
1723
+ schoolsById: b(this.data.schools),
1680
1724
  records: Q(this.data.games),
1681
1725
  rankings: this.data.rankings,
1682
1726
  hrefs: O(this),
1683
1727
  sport: this.data.active?.sport || "football"
1684
1728
  }, this._ctxData = this.data), this._ctx;
1685
1729
  }
1686
- switchSport(t) {
1687
- 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());
1688
1737
  }
1689
1738
  renderView() {
1690
- const { school: t, teams: e, active: s, season: r } = this.data;
1691
- if (!t) return l`<div class="view"><p class="empty">School not found.</p></div>`;
1692
- const o = this.ctx, n = tt(t.colorPrimary || "#030711"), i = (t.adm || [])[0], c = $(this.data.conferences), h = s ? c[s.conferenceId] : null;
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;
1693
1742
  return l`
1694
- <div class="schoolhero" style="background:linear-gradient(115deg, ${t.colorPrimary || "#030711"} 0%, ${t.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${n}">
1743
+ <div class="schoolhero" style="background:linear-gradient(115deg, ${e.colorPrimary || "#030711"} 0%, ${e.colorPrimary || "#030711"} 55%, var(--hsot-black) 100%);color:${n}">
1695
1744
  <div class="inner">
1696
- ${et(t, 84) ? l`<img class="crest logo" alt="" loading="lazy" src=${et(t, 84)} />` : l`<div class="crest" style="background:${t.colorSecondary || "#7C7C7C"};color:${tt(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>`}
1697
1746
  <div style="min-width:260px">
1698
- <h1>${t.name} <span class="mascot">${t.mascot || ""}</span></h1>
1747
+ <h1>${e.name} <span class="mascot">${e.mascot || ""}</span></h1>
1699
1748
  <div class="facts">
1700
- ${t.location ? l`<span><b>Location</b>${t.location}${t.county ? l` · ${t.county} County` : m}</span>` : m}
1701
- ${t.association ? l`<span><b>League</b>${t.association}${t.classification ? l` · ${t.classification}` : m}</span>` : m}
1702
- ${h ? l`<span><b>Conference</b>${h.name}</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}
1703
1752
  ${i ? l`<span><b>Enrollment</b>${i.value.toLocaleString()} (${i.season} ADM)</span>` : m}
1704
- ${t.openingYear ? l`<span><b>Opened</b>${t.openingYear}</span>` : m}
1705
- ${t.areaCode ? l`<span><b>Area</b>${t.areaCode}</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}
1706
1755
  </div>
1707
1756
  </div>
1708
1757
  </div>
1709
1758
  </div>
1710
1759
  <div class="band">
1711
1760
  <nav class="tabs" aria-label="Teams">
1712
- ${e.map((d) => d.id === s?.id ? l`<a class="on" href="#" @click=${(p) => p.preventDefault()}>${d.name}</a>` : l`<a href="#" @click=${(p) => {
1713
- p.preventDefault(), this.switchSport(d.sport);
1714
- }}>${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>`)}
1715
1764
  </nav>
1716
1765
  </div>
1717
- ${P(this, l`
1718
- ${B(this)}
1719
- ${s ? this.renderTeam(o, s, h, r) : l`<p class="empty">No teams recorded for this school yet.</p>`}
1766
+ ${B(this, l`
1767
+ ${D(this)}
1768
+ ${s ? this.renderTeam(o, s, d, a) : l`<p class="empty">No teams recorded for this school yet.</p>`}
1720
1769
  `)}
1721
1770
  `;
1722
1771
  }
1723
- renderTeam(t, e, s, r) {
1724
- 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) : [], c = s ? Xt(i, t.records).findIndex((p) => p.team.id === e.id) + 1 : 0, h = 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)));
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)));
1725
1774
  return l`
1726
1775
  <div class="tiles">
1727
- <div class="tile"><div class="k">Overall</div><div class="v">${k(o)}</div><div class="s">${n} games played</div></div>
1728
- <div class="tile"><div class="k">${s?.name || "Conference"}</div><div class="v">${k(o, !0)}</div>
1729
- <div class="s">${c ? `${Le(c)} 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>
1730
1779
  <div class="tile"><div class="k">Points</div><div class="v">${n ? (o.pf / n).toFixed(1) : "0.0"}</div>
1731
1780
  <div class="s">scored per game · ${n ? (o.pa / n).toFixed(1) : "0.0"} allowed</div></div>
1732
- <div class="tile"><div class="k">Streak</div><div class="v">${it(o.results) || "·"}</div>
1733
- <div class="s">last 5: ${xt(t, e.id)}</div></div>
1734
- <div class="tile"><div class="k">HSOT Top 25</div><div class="v">${h ? `#${h}` : "NR"}</div>
1735
- <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>
1736
1785
  </div>
1737
- ${(e.championships || []).length ? l`
1786
+ ${(t.championships || []).length ? l`
1738
1787
  <div style="margin:-0.2rem 0 1rem;display:flex;gap:0.4rem;flex-wrap:wrap">
1739
- ${e.championships.map((p) => l`<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>`)}
1740
1789
  </div>` : m}
1741
1790
  <div class="cols">
1742
1791
  <div>
1743
1792
  <div class="section-title">Schedule &amp; results</div>
1744
1793
  <div class="card">
1745
- ${d.length ? l`<ul class="gamelist">${d.map((p) => this.renderGameRow(t, e, p))}</ul>` : l`<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>`}
1746
1795
  </div>
1747
1796
  </div>
1748
1797
  <div>
1749
- <div class="section-title">Roster · ${r}</div>
1750
- <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>
1751
1800
  </div>
1752
1801
  </div>
1753
1802
  `;
1754
1803
  }
1755
- renderGameRow(t, e, s) {
1756
- const r = s.homeTeamId === e.id, o = r ? s.awayTeamId : s.homeTeamId, n = r ? s.homeScore : s.awayScore, i = r ? s.awayScore : s.homeScore;
1757
- let c = l`<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>`;
1758
1807
  if (s.state === "final") {
1759
- const d = nt(s), p = d === "tie" ? "T" : d === (r ? "home" : "away") ? "W" : "L";
1808
+ const h = ne(s), p = h === "tie" ? "T" : h === (a ? "home" : "away") ? "W" : "L";
1760
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}`;
1761
1810
  } else s.state === "live" && (c = l`<span style="color:var(--hsot-red)">${n}-${i}</span>`);
1762
- const h = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1811
+ const d = s.gameType === "conference" ? "Conf" : s.gameType === "nonconference" ? "Non-conf" : s.gameType === "playoff" ? `Playoff${s.label ? ` · ${s.label}` : ""}` : "Scrimmage";
1763
1812
  return l`
1764
1813
  <li>
1765
- <span class="d">${w(s.date)}</span>
1766
- ${Zt(s).kind === "sched" ? m : V(s)}
1814
+ <span class="d">${x(s.date)}</span>
1815
+ ${Je(s).kind === "sched" ? m : V(s)}
1767
1816
  <span class="res">${c}</span>
1768
- <span class="opp">${r ? "vs" : "at"} ${at(t, o, s.date)}
1769
- <span class="pill type">${h}</span>
1817
+ <span class="opp">${a ? "vs" : "at"} ${re(e, o, s.date)}
1818
+ <span class="pill type">${d}</span>
1770
1819
  ${s.broadcast ? l`<span class="pill class">${s.broadcast}</span>` : m}
1771
1820
  </span>
1772
1821
  <span class="where">${s.venue || ""}</span>
1773
- <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>
1774
1823
  </li>
1775
1824
  `;
1776
1825
  }
1777
- renderRoster(t, e) {
1826
+ renderRoster(e, t) {
1778
1827
  const s = this.data.roster;
1779
1828
  if (!s)
1780
- return l`<p class="empty">Roster not published for ${e}.</p>`;
1781
- const r = rs(s, 560), o = this.data.school?.name || "", n = $(this.data.players), i = s.entries.slice().sort((h, d) => (h.number || 0) - (d.number || 0)), c = i.some((h) => n[h.playerId]?.college);
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);
1782
1831
  return l`
1783
- ${r ? l`<img class="rosterphoto" src=${r} loading="lazy" decoding="async"
1784
- alt="${o} ${t.name} ${e} team photo" />` : m}
1832
+ ${a ? l`<img class="rosterphoto" src=${a} loading="lazy" decoding="async"
1833
+ alt="${o} ${e.name} ${t} team photo" />` : m}
1785
1834
  <div class="tablewrap"><table class="data roster">
1786
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>
1787
1836
  <tbody>
1788
- ${i.map((h) => {
1789
- const d = n[h.playerId];
1790
- if (!d) return m;
1791
- const p = Ue(h), u = [p, d.classOf].filter(Boolean).join(" · ") || "·";
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(" · ") || "·";
1792
1841
  return l`<tr>
1793
- <td class="num mut">${h.number ?? "·"}</td>
1794
- <td class="player" style="font-weight:500">${d.firstName} ${d.lastName}<span class="sub">${u}</span></td>
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>
1795
1844
  <td class="pos">${p || "·"}</td>
1796
- <td class="cls mut">${d.classOf || "·"}</td>
1797
- <td class="num">${Oe(d.heightIn)}</td>
1798
- <td class="num">${d.weightLb || "·"}</td>
1799
- ${c ? l`<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}
1800
1849
  </tr>`;
1801
1850
  })}
1802
1851
  </tbody>
@@ -1804,8 +1853,8 @@ class oe extends b {
1804
1853
  `;
1805
1854
  }
1806
1855
  }
1807
- globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", oe);
1808
- const ne = {
1856
+ globalThis?.customElements && !globalThis.customElements.get("hsot-school") && globalThis.customElements.define("hsot-school", lt);
1857
+ const ct = {
1809
1858
  football: ["quarters", 4],
1810
1859
  flag_football: ["quarters", 4],
1811
1860
  basketball: ["quarters", 4],
@@ -1816,78 +1865,78 @@ const ne = {
1816
1865
  softball: ["innings", 7],
1817
1866
  volleyball: ["sets", 3]
1818
1867
  };
1819
- function ie(a) {
1820
- return (ne[a] || ["quarters", 4])[0];
1868
+ function dt(r) {
1869
+ return (ct[r] || ["quarters", 4])[0];
1821
1870
  }
1822
- function kt(a) {
1823
- return (ne[a] || ["quarters", 4])[1];
1871
+ function Se(r) {
1872
+ return (ct[r] || ["quarters", 4])[1];
1824
1873
  }
1825
- function is(a, t) {
1826
- const e = ie(a), s = kt(a);
1827
- if (t <= s || e === "innings" || e === "sets") return String(t);
1828
- const r = t - s;
1829
- 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 : ""}`;
1830
1879
  }
1831
- function ls(a, t) {
1832
- const e = String(a ?? "").trim();
1880
+ function ms(r, e) {
1881
+ const t = String(r ?? "").trim();
1833
1882
  let s;
1834
- return (s = /^(\d+)Q$/i.exec(e)) || (s = /^(\d+)H$/i.exec(e)) ? Number(s[1]) : /^half$/i.test(e) ? ie(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;
1835
- }
1836
- const Z = (a) => Number.isInteger(a) && a >= 0 ? a : null;
1837
- function cs(a) {
1838
- const t = Array.isArray(a?.scoringPlays) ? a.scoringPlays : [];
1839
- if (!t.length) return null;
1840
- const e = a.sport, s = /* @__PURE__ */ new Map();
1841
- for (const p of t) {
1842
- const u = ls(p?.period, e), f = Z(p?.homeScore), g = Z(p?.awayScore);
1843
- if (!u || f === null || g === null) return null;
1844
- const x = s.get(u) || { home: 0, away: 0 };
1845
- x.home = Math.max(x.home, f), x.away = Math.max(x.away, g), s.set(u, x);
1846
- }
1847
- 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 = [];
1848
1897
  let n = !0, i = { home: 0, away: 0 };
1849
- for (let p = 1; p <= r; p += 1) {
1850
- const u = s.get(p) || i, f = u.home - i.home, g = u.away - i.away;
1851
- (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) };
1852
1901
  }
1853
- const c = Z(a.homeScore) ?? 0, h = Z(a.awayScore) ?? 0, d = n && i.home === c && i.away === h;
1854
- return n = n && i.home <= c && i.away <= h, { 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 };
1855
1904
  }
1856
- function hs(a) {
1857
- if (Array.isArray(a?.periodScores) && a.periodScores.length) return a.periodScores;
1858
- const t = cs(a);
1859
- 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;
1860
1909
  }
1861
- const ds = "https://api.wral.com/search";
1862
- function ps(a) {
1863
- 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 ");
1864
1913
  }
1865
- function ms(a, t) {
1866
- const e = String(a || ds).replace(/\/+$/, ""), s = new URLSearchParams({ query: ps(t), sort: "score", lang: "en" });
1867
- 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}`;
1868
1917
  }
1869
- function le(a) {
1918
+ function ht(r) {
1870
1919
  try {
1871
- const t = new URL(a);
1872
- if (/(^|\.)smugmug\.com$/i.test(t.hostname)) {
1873
- 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);
1874
1923
  return {
1875
- uri: a,
1876
- title: s ? a : decodeURIComponent(e).replace(/-/g, " "),
1924
+ uri: r,
1925
+ title: s ? r : decodeURIComponent(t).replace(/-/g, " "),
1877
1926
  photos: !0
1878
1927
  };
1879
1928
  }
1880
1929
  } catch {
1881
1930
  }
1882
- return { uri: a, title: a };
1931
+ return { uri: r, title: r };
1883
1932
  }
1884
- async function us(a, t, e) {
1885
- const r = await ((...i) => fetch(...i))(ms(a, t));
1886
- if (!r.ok) throw new Error(`search answered ${r.status}`);
1887
- const o = await r.json(), n = new Map((o.items || []).map((i) => [i.uri, i]));
1888
- return t.map((i) => n.get(i) || le(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));
1889
1938
  }
1890
- const fs = y`
1939
+ const ys = w`
1891
1940
  .breadcrumbs { font-size: 0.8125rem; margin: 0.9rem 0 0; color: var(--hsot-gray-5); }
1892
1941
  .breadcrumbs a { text-decoration: none; }
1893
1942
  .scorehead { display: grid; grid-template-columns: 1fr auto 1fr; gap: 1rem; align-items: center; padding: 1.4rem 1rem; }
@@ -1943,10 +1992,10 @@ const fs = y`
1943
1992
  .cols { grid-template-columns: 1fr; }
1944
1993
  }
1945
1994
  `;
1946
- class ce extends b {
1947
- static styles = [...U, fs];
1995
+ class pt extends y {
1996
+ static styles = [...U, ys];
1948
1997
  static properties = {
1949
- ...b.properties,
1998
+ ...y.properties,
1950
1999
  gameId: { type: String, attribute: "game-id" },
1951
2000
  // The public site search that resolves Game.coverageUrls into cards
1952
2001
  // (DEV-1236). Shared cross-stage by design — see the studio host's
@@ -1963,33 +2012,33 @@ class ce extends b {
1963
2012
  constructor() {
1964
2013
  super(), this.gameId = "", this.searchApi = "", this.embed = !1;
1965
2014
  }
1966
- async fetchData(t) {
1967
- const e = await t.getGame(this.gameId), s = Array.isArray(e.coverageUrls) ? e.coverageUrls : [], [r, o, n, i, c, h] = await Promise.all([
1968
- t.listSchools(),
1969
- t.listTeams({ sport: e.sport }),
1970
- t.listConferences(),
1971
- t.listRankings({ sport: e.sport }),
1972
- t.listGames({ sport: e.sport, season: e.season }),
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 }),
1973
2022
  // A search outage must not blank the box score — degrade to bare
1974
2023
  // links (fetchCoverage already degrades per-URL index misses).
1975
2024
  // The embed drops the Coverage grid, so it skips the search
1976
2025
  // round-trip entirely rather than fetching cards it will not render.
1977
- s.length && !this.embed ? us(this.searchApi, s).catch(() => s.map(le)) : Promise.resolve([])
2026
+ s.length && !this.embed ? bs(this.searchApi, s).catch(() => s.map(ht)) : Promise.resolve([])
1978
2027
  ]);
1979
2028
  return {
1980
- game: e,
1981
- schools: r.items,
2029
+ game: t,
2030
+ schools: a.items,
1982
2031
  teams: o.items,
1983
2032
  conferences: n.items,
1984
2033
  rankings: i.items,
1985
2034
  games: c.items,
1986
- coverage: h
2035
+ coverage: d
1987
2036
  };
1988
2037
  }
1989
2038
  get ctx() {
1990
2039
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
1991
- teamsById: $(this.data.teams),
1992
- schoolsById: $(this.data.schools),
2040
+ teamsById: b(this.data.teams),
2041
+ schoolsById: b(this.data.schools),
1993
2042
  records: Q(this.data.games),
1994
2043
  rankings: this.data.rankings,
1995
2044
  hrefs: O(this),
@@ -1997,61 +2046,61 @@ class ce extends b {
1997
2046
  }, this._ctxData = this.data), this._ctx;
1998
2047
  }
1999
2048
  renderView() {
2000
- const t = this.data.game;
2001
- if (!t) return l`<div class="view"><p class="empty">Game not found.</p></div>`;
2002
- 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 = nt(t), i = (d) => t.state === "final" && n !== d && n !== "tie" ? "opacity:0.45" : "", c = t.conferenceId ? s[t.conferenceId] : null, h = 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));
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));
2003
2052
  return l`
2004
- ${P(this, l`
2005
- ${B(this)}
2053
+ ${B(this, l`
2054
+ ${D(this)}
2006
2055
  ${this.embed ? m : l`
2007
2056
  <p class="breadcrumbs">
2008
- <a href=${v(e.hrefs.section, { sport: t.sport, view: "scores" })}>${D(t.sport)}</a> /
2009
- <a href=${v(e.hrefs.section, { sport: t.sport, view: "scores" })}>Scores/Schedules</a> /
2010
- ${R(e, t.awayTeamId)} at ${R(e, t.homeTeamId)}
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)}
2011
2060
  </p>`}
2012
2061
  <div class="card">
2013
2062
  <div class="scorehead">
2014
- ${this.teamBlock(e, t, t.awayTeamId, r, !1)}
2063
+ ${this.teamBlock(t, e, e.awayTeamId, a, !1)}
2015
2064
  <div class="mid">
2016
2065
  <div class="bigscore">
2017
- <span style=${i("away")}>${t.awayScore}</span>
2066
+ <span style=${i("away")}>${e.awayScore}</span>
2018
2067
  <span class="mut" style="font-size:1.6rem">–</span>
2019
- <span style=${i("home")}>${t.homeScore}</span>
2068
+ <span style=${i("home")}>${e.homeScore}</span>
2020
2069
  </div>
2021
- <div class="status">${V(t)}</div>
2022
- <div class="status">${w(t.date, { weekday: "short", month: "short", day: "numeric", year: "numeric" })}${t.state === "scheduled" && t.time ? l` · ${gt(t.time)}` : m} · ${t.venue || "Venue TBD"}
2023
- ${t.broadcast ? l` · <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>
2024
2073
  <div class="status">
2025
- <span class="pill type">${t.gameType === "conference" ? `${c?.name || "Conference"} game` : t.gameType}</span>
2026
- ${t.label ? l`<span class="pill type">Bracket ${t.label}</span>` : m}
2027
- ${(t.tags || []).map((d) => l`<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>`)}
2028
2077
  </div>
2029
2078
  ${this.embed ? m : l`
2030
2079
  <div class="status">
2031
- <a href=${Qt(e.hrefs, t.id)}>Report a score for this game</a>
2080
+ <a href=${Ze(t.hrefs, e.id)}>Report a score for this game</a>
2032
2081
  </div>`}
2033
2082
  </div>
2034
- ${this.teamBlock(e, t, t.homeTeamId, o, !0)}
2083
+ ${this.teamBlock(t, e, e.homeTeamId, o, !0)}
2035
2084
  </div>
2036
- ${this.renderLineScore(t, r, o)}
2037
- ${this.renderScoringPlays(t, r, o)}
2038
- ${t.notes ? l`<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}
2039
2088
  </div>
2040
2089
  ${this.embed ? l`
2041
2090
  <p class="fullbox">
2042
- <a href=${v(e.hrefs.game, { sport: t.sport, id: t.id })}>Full box score &rarr;</a>
2091
+ <a href=${g(t.hrefs.game, { sport: e.sport, id: e.id })}>Full box score &rarr;</a>
2043
2092
  </p>` : l`
2044
2093
  ${(this.data.coverage || []).length ? l`
2045
2094
  <div class="section-title">Coverage</div>
2046
2095
  <div class="covgrid">
2047
- ${this.data.coverage.map((d) => l`
2048
- <a class="card covcard" href=${d.uri}>
2049
- ${d.image ? l`<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}
2050
2099
  <div class="covbody">
2051
- <div class="covtitle">${d.videoDuration ? l`<span class="pill live" style="animation:none">Video</span> ` : m}${d.photos ? l`<span class="pill live" style="animation:none">Photos</span> ` : m}${d.title || d.uri}</div>
2052
- ${d.description ? l`<p class="covdesc">${d.description}</p>` : m}
2053
- ${d.author || d.publishedTime ? l`
2054
- <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>
2055
2104
  ` : m}
2056
2105
  </div>
2057
2106
  </a>
@@ -2059,61 +2108,61 @@ class ce extends b {
2059
2108
  </div>` : m}
2060
2109
  <div class="section-title">Season context</div>
2061
2110
  <div class="cols">
2062
- ${[[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))}
2063
2112
  </div>
2064
- ${h.length ? l`
2113
+ ${d.length ? l`
2065
2114
  <div class="section-title">Head to head this season</div>
2066
2115
  <div class="card"><ul class="gamelist">
2067
- ${h.map((d) => l`<li>
2068
- <span class="d">${w(d.date)}</span>${V(d)}
2069
- <span class="opp">${R(e, d.awayTeamId)} ${d.awayScore}, ${R(e, d.homeTeamId)} ${d.homeScore}</span>
2070
- <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>
2071
2120
  </li>`)}
2072
2121
  </ul></div>` : m}`}
2073
2122
  `)}
2074
2123
  `;
2075
2124
  }
2076
- teamBlock(t, e, s, r, o) {
2077
- if (!r) return l`<div class="teamblock ${o ? "right" : ""}"><div class="tname">TBD</div></div>`;
2078
- const n = t.teamsById[s], i = t.records[s], c = et(r, 58);
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);
2079
2128
  return l`
2080
2129
  <div class="teamblock ${o ? "right" : ""}">
2081
- ${c ? l`<img class="crest logo" alt="" loading="lazy" src=${c} />` : l`<span class="crest" style="background:${r.colorPrimary || "#030711"};color:${tt(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>`}
2082
2131
  <div>
2083
- <div class="tname">${wt(t, s, e.date)}<a href=${v(t.hrefs.school, { id: r.id })}>${r.name}</a></div>
2084
- <div class="trec">${r.mascot || ""} · ${k(i)}${n?.conferenceId ? l` · ${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>
2085
2134
  </div>
2086
2135
  </div>
2087
2136
  `;
2088
2137
  }
2089
- renderLineScore(t, e, s) {
2090
- const r = hs(t);
2091
- if (!r)
2092
- return t.state === "scheduled" ? l`<p class="empty" style="text-align:center">Period scoring will appear once the game starts.</p>` : m;
2093
- const o = Math.max(kt(t.sport), ...r.map((h) => h.period)), n = (h) => is(t.sport, h), i = (h, d) => {
2094
- const p = r.find((u) => u.period === d);
2095
- return p ? p[h] : t.state === "final" ? 0 : "·";
2096
- }, c = (h, d, p) => l`
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`
2097
2146
  <tr>
2098
- <td class="teamcell">${E(h, 20)}${h?.abbr || "TBD"}</td>
2099
- ${Array.from({ length: o }, (u, f) => l`<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>`)}
2100
2149
  <td class="num" style="font-weight:700">${p}</td>
2101
2150
  </tr>`;
2102
2151
  return l`
2103
2152
  <div class="tablewrap" style="border-top:1px solid var(--hsot-gray-2)">
2104
2153
  <table class="data" style="max-width:560px;margin:0.6rem auto 0.9rem">
2105
- <thead><tr><th>Team</th>${Array.from({ length: o }, (h, d) => l`<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>
2106
2155
  <tbody>
2107
- ${c(e, "away", t.awayScore)}
2108
- ${c(s, "home", t.homeScore)}
2156
+ ${c(t, "away", e.awayScore)}
2157
+ ${c(s, "home", e.homeScore)}
2109
2158
  </tbody>
2110
2159
  </table>
2111
2160
  </div>
2112
2161
  `;
2113
2162
  }
2114
- renderScoringPlays(t, e, s) {
2115
- const r = Array.isArray(t.scoringPlays) ? t.scoringPlays : [];
2116
- 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;
2117
2166
  const o = (n) => [n.period, n.clock].filter(Boolean).join(" ");
2118
2167
  return l`
2119
2168
  <div class="plays">
@@ -2122,10 +2171,10 @@ class ce extends b {
2122
2171
  <table class="data plays-table">
2123
2172
  <thead><tr>
2124
2173
  <th>When</th><th>Play</th>
2125
- <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>
2126
2175
  </tr></thead>
2127
2176
  <tbody>
2128
- ${r.map((n) => l`<tr>
2177
+ ${a.map((n) => l`<tr>
2129
2178
  <td class="when">${o(n) || "·"}</td>
2130
2179
  <td class="play">${n.description || "·"}</td>
2131
2180
  <td class="num">${n.awayScore}</td>
@@ -2137,26 +2186,26 @@ class ce extends b {
2137
2186
  </div>
2138
2187
  `;
2139
2188
  }
2140
- renderContext(t, e, s) {
2189
+ renderContext(e, t, s) {
2141
2190
  if (!s) return m;
2142
- const r = t.records[e], o = bt(this.data.games, e);
2191
+ const a = e.records[t], o = ye(this.data.games, t);
2143
2192
  return l`
2144
2193
  <div class="card ctxcard">
2145
- <div class="who">${E(s)}${s.name}</div>
2194
+ <div class="who">${P(s)}${s.name}</div>
2146
2195
  <div class="row">
2147
- <span>Last 5: ${xt(t, e)}</span>
2148
- <span>Streak: <b>${r ? it(r.results) : "·"}</b></span>
2149
- <span>PF/PA: <b>${r ? `${r.pf} / ${r.pa}` : "·"}</b></span>
2150
- <span>Next: ${o ? l`${w(o.date, { month: "numeric", day: "numeric" })}
2151
- ${o.homeTeamId === e ? "vs" : "at"} ${st(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>
2152
2201
  </div>
2153
2202
  </div>
2154
2203
  `;
2155
2204
  }
2156
2205
  }
2157
- globalThis?.customElements && !globalThis.customElements.get("hsot-boxscore") && globalThis.customElements.define("hsot-boxscore", ce);
2158
- const gs = 250, vs = 2;
2159
- class he 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 {
2160
2209
  static properties = {
2161
2210
  api: { type: String },
2162
2211
  schoolHref: { type: String, attribute: "school-href" },
@@ -2167,7 +2216,7 @@ class he extends N {
2167
2216
  activeIndex: { state: !0 },
2168
2217
  searched: { state: !0 }
2169
2218
  };
2170
- static styles = y`
2219
+ static styles = w`
2171
2220
  :host {
2172
2221
  display: block;
2173
2222
  position: relative;
@@ -2234,41 +2283,41 @@ class he extends N {
2234
2283
  disconnectedCallback() {
2235
2284
  super.disconnectedCallback(), clearTimeout(this.debounceTimer), this.abortController?.abort();
2236
2285
  }
2237
- onInput(t) {
2238
- const e = t.target.value.trim();
2239
- if (clearTimeout(this.debounceTimer), e.length < vs) {
2286
+ onInput(e) {
2287
+ const t = e.target.value.trim();
2288
+ if (clearTimeout(this.debounceTimer), t.length < xs) {
2240
2289
  this.abortController?.abort(), this.results = [], this.open = !1, this.searched = !1;
2241
2290
  return;
2242
2291
  }
2243
- this.debounceTimer = setTimeout(() => this.search(e), gs);
2292
+ this.debounceTimer = setTimeout(() => this.search(t), ws);
2244
2293
  }
2245
- async search(t) {
2294
+ async search(e) {
2246
2295
  this.abortController?.abort(), this.abortController = new AbortController();
2247
2296
  try {
2248
- 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, {
2249
2298
  signal: this.abortController.signal
2250
2299
  });
2251
2300
  if (!s.ok)
2252
2301
  return;
2253
- const r = await s.json();
2254
- this.results = r.items || [], this.activeIndex = -1, this.searched = !0, this.open = !0;
2255
- } catch (e) {
2256
- 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);
2257
2306
  }
2258
2307
  }
2259
- onKeyDown(t) {
2260
- if (t.key === "Escape") {
2308
+ onKeyDown(e) {
2309
+ if (e.key === "Escape") {
2261
2310
  this.open = !1;
2262
2311
  return;
2263
2312
  }
2264
2313
  if (!(!this.open || !this.results.length))
2265
- if (t.key === "ArrowDown")
2266
- t.preventDefault(), this.activeIndex = (this.activeIndex + 1) % this.results.length;
2267
- else if (t.key === "ArrowUp") {
2268
- t.preventDefault();
2269
- const e = this.results.length;
2270
- this.activeIndex = (this.activeIndex - 1 + e) % e;
2271
- } 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]));
2272
2321
  }
2273
2322
  onBlur() {
2274
2323
  setTimeout(() => {
@@ -2278,42 +2327,42 @@ class he extends N {
2278
2327
  onFocus() {
2279
2328
  this.results.length && (this.open = !0);
2280
2329
  }
2281
- go(t) {
2282
- t && (globalThis.location.href = this.schoolHref.replace("{id}", t.id));
2330
+ go(e) {
2331
+ e && (globalThis.location.href = this.schoolHref.replace("{id}", e.id));
2283
2332
  }
2284
- where(t) {
2285
- 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(" — ");
2286
2335
  }
2287
- renderOption(t, e) {
2288
- const s = this.where(t), r = (o) => {
2289
- o.preventDefault(), this.go(t);
2336
+ renderOption(e, t) {
2337
+ const s = this.where(e), a = (o) => {
2338
+ o.preventDefault(), this.go(e);
2290
2339
  };
2291
2340
  return l`
2292
2341
  <li
2293
- id="school-option-${e}"
2342
+ id="school-option-${t}"
2294
2343
  role="option"
2295
- aria-selected="${e === this.activeIndex ? "true" : "false"}"
2296
- @pointerdown="${r}"
2344
+ aria-selected="${t === this.activeIndex ? "true" : "false"}"
2345
+ @pointerdown="${a}"
2297
2346
  @mousemove="${() => {
2298
- this.activeIndex = e;
2347
+ this.activeIndex = t;
2299
2348
  }}"
2300
2349
  >
2301
- <span class="name">${t.name}</span>
2350
+ <span class="name">${e.name}</span>
2302
2351
  ${s ? l`<span class="where">${s}</span>` : m}
2303
2352
  </li>
2304
2353
  `;
2305
2354
  }
2306
2355
  renderListbox() {
2307
- const t = this.searched && !this.results.length, e = l`<li class="empty">No schools found</li>`;
2356
+ const e = this.searched && !this.results.length, t = l`<li class="empty">No schools found</li>`;
2308
2357
  return l`
2309
2358
  <ul id="school-search-listbox" role="listbox" aria-label="Schools">
2310
- ${this.results.map((s, r) => this.renderOption(s, r))}
2311
- ${t ? e : m}
2359
+ ${this.results.map((s, a) => this.renderOption(s, a))}
2360
+ ${e ? t : m}
2312
2361
  </ul>
2313
2362
  `;
2314
2363
  }
2315
2364
  render() {
2316
- const t = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
2365
+ const e = this.activeIndex >= 0 ? `school-option-${this.activeIndex}` : "";
2317
2366
  return l`
2318
2367
  <input
2319
2368
  type="text"
@@ -2321,7 +2370,7 @@ class he extends N {
2321
2370
  aria-label="Find your school"
2322
2371
  aria-expanded="${this.open ? "true" : "false"}"
2323
2372
  aria-controls="school-search-listbox"
2324
- aria-activedescendant="${t}"
2373
+ aria-activedescendant="${e}"
2325
2374
  autocomplete="off"
2326
2375
  placeholder="${this.placeholder}"
2327
2376
  @input="${this.onInput}"
@@ -2333,111 +2382,111 @@ class he extends N {
2333
2382
  `;
2334
2383
  }
2335
2384
  }
2336
- globalThis?.customElements && !globalThis.customElements.get("hsot-school-search") && globalThis.customElements.define("hsot-school-search", he);
2337
- function de(a, t) {
2338
- const e = new Map(a.map((c) => [c.id, c])), s = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map();
2339
- for (const c of t || [])
2340
- c.outcome === "winner" && (s.has(c.targetGameId) || s.set(c.targetGameId, []), s.get(c.targetGameId).push(c), r.has(c.sourceGameId) || r.set(c.sourceGameId, []), r.get(c.sourceGameId).push(c));
2341
- const o = a.filter((c) => !r.has(c.id)), n = (c) => c.targetSlot === "home" ? 0 : 1;
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;
2342
2391
  function i(c) {
2343
- const h = e.get(c);
2344
- if (!h) return null;
2392
+ const d = t.get(c);
2393
+ if (!d) return null;
2345
2394
  const p = [...s.get(c) || []].sort((u, f) => n(u) - n(f)).map((u) => i(u.sourceGameId)).filter(Boolean);
2346
- return { game: h, children: p, bracketGroup: h.bracketGroup };
2395
+ return { game: d, children: p, bracketGroup: d.bracketGroup };
2347
2396
  }
2348
2397
  return o.length === 1 ? i(o[0].id) : o.map((c) => i(c.id));
2349
2398
  }
2350
- function pe(a, t = [], e = 0) {
2351
- if (!a) return t;
2352
- t[e] || (t[e] = []), t[e].push(a.game);
2353
- for (const s of a.children || []) pe(s, t, e + 1);
2354
- return t;
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;
2355
2404
  }
2356
- const $s = (a) => Math.max(1, Math.round(Math.log2(a || 2)));
2357
- function bs({ round: a, perGroup: t, groupCount: e = 1 }) {
2358
- const s = $s(t), o = (e === 4 ? s + 2 : e === 2 ? s + 1 : s) - a;
2359
- 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}`;
2360
2409
  }
2361
- function ys(a) {
2362
- if (!a || !a.length) return "setup";
2363
- const t = Math.max(...a.map((s) => s.round ?? 0)), e = a.filter((s) => (s.round ?? 0) === t);
2364
- 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";
2365
2414
  }
2366
- function ws(a, t) {
2367
- const e = a?.groupNames || [];
2368
- if (e.length >= 2) {
2369
- const r = e.map((o) => ({ key: o, name: o }));
2370
- 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;
2371
2420
  }
2372
- const s = [...new Set((t || []).map((r) => r.bracketGroup).filter(Boolean))];
2421
+ const s = [...new Set((e || []).map((a) => a.bracketGroup).filter(Boolean))];
2373
2422
  return [{ key: null, name: s.length === 1 ? s[0] : "Bracket" }];
2374
2423
  }
2375
- const xs = (a, t) => t?.key == null ? [...a || []] : (a || []).filter((e) => e.bracketGroup === t.key), Ut = (a) => {
2376
- const t = /(\d+)\s*$/.exec(a.label || "");
2377
- return t ? Number(t[1]) : 1 / 0;
2378
- }, Ht = (a, t) => Ut(a) - Ut(t) || String(a.id).localeCompare(String(t.id));
2379
- function ks(a, t) {
2380
- if (a.every((r) => Number.isInteger(r.round))) return (r) => r.round;
2381
- const e = de(a, t), s = /* @__PURE__ */ new Map();
2382
- for (const r of Array.isArray(e) ? e : [e]) {
2383
- const o = pe(r), n = o.length - 1;
2384
- o.forEach((i, c) => i.forEach((h) => s.set(h.id, n - c + 1)));
2385
- }
2386
- return (r) => Number.isInteger(r.round) ? r.round : s.get(r.id) || 1;
2387
- }
2388
- function Ss(a, t, e) {
2389
- const s = xs(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);
2390
2439
  if (!s.length) return [];
2391
- const r = ks(a || [], t || []), o = /* @__PURE__ */ new Map();
2392
- for (const h of s) {
2393
- const d = r(h);
2394
- o.has(d) || o.set(d, []), o.get(d).push(h);
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);
2395
2444
  }
2396
2445
  const n = /* @__PURE__ */ new Map();
2397
- for (const h of t || [])
2398
- h.outcome === "winner" && (n.has(h.targetGameId) || n.set(h.targetGameId, []), n.get(h.targetGameId).push(h.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));
2399
2448
  const i = [];
2400
2449
  let c = null;
2401
- for (const h of [...o.keys()].sort((d, p) => d - p)) {
2402
- let d = [...o.get(h)];
2450
+ for (const d of [...o.keys()].sort((h, p) => h - p)) {
2451
+ let h = [...o.get(d)];
2403
2452
  if (c) {
2404
2453
  const p = (u) => {
2405
- const f = (n.get(u.id) || []).map((g) => c.get(g)).filter((g) => g !== void 0);
2454
+ const f = (n.get(u.id) || []).map((v) => c.get(v)).filter((v) => v !== void 0);
2406
2455
  return f.length ? Math.min(...f) : 1 / 0;
2407
2456
  };
2408
- d.sort((u, f) => p(u) - p(f) || Ht(u, f));
2457
+ h.sort((u, f) => p(u) - p(f) || Le(u, f));
2409
2458
  } else
2410
- d.sort(Ht);
2411
- c = new Map(d.map((p, u) => [p.id, u])), i.push({ round: h, games: d });
2459
+ h.sort(Le);
2460
+ c = new Map(h.map((p, u) => [p.id, u])), i.push({ round: d, games: h });
2412
2461
  }
2413
2462
  return i;
2414
2463
  }
2415
- function _s(a, t, e) {
2416
- const s = a[`${t}TeamId`] || null, r = (e || []).find((n) => n.gameId === a.id && n.slot === t), o = a[`${t}Seed`] ?? r?.seed ?? null;
2417
- 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 };
2418
2467
  }
2419
- function me(a) {
2420
- const t = nt(a);
2421
- return t === "home" || t === "away" ? t : null;
2468
+ function gt(r) {
2469
+ const e = ne(r);
2470
+ return e === "home" || e === "away" ? e : null;
2422
2471
  }
2423
- function As(a, t) {
2424
- const e = de(a || [], t || []);
2425
- if (!e || Array.isArray(e)) return null;
2426
- const s = me(e.game);
2427
- 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;
2428
2477
  }
2429
- const Lt = { active: 0, setup: 1, complete: 2 };
2430
- function Ts(a, { id: t, param: e } = {}) {
2431
- const s = a || [];
2478
+ const Ge = { active: 0, setup: 1, complete: 2 };
2479
+ function Bs(r, { id: e, param: t } = {}) {
2480
+ const s = r || [];
2432
2481
  if (!s.length) return null;
2433
- for (const r of [t, e]) {
2434
- if (!r) continue;
2435
- 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);
2436
2485
  if (o) return o;
2437
2486
  }
2438
- 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];
2439
2488
  }
2440
- const Is = y`
2489
+ const Ds = w`
2441
2490
  .bracket { display: flex; gap: 1rem; align-items: stretch; overflow-x: auto; padding-bottom: 0.5rem; }
2442
2491
  .round { flex: 0 0 250px; display: flex; flex-direction: column; min-width: 0; }
2443
2492
  .roundhead {
@@ -2483,10 +2532,10 @@ const Is = y`
2483
2532
  .champ .tname a { color: inherit; text-decoration: none; font-weight: 700; }
2484
2533
  @media (max-width: 720px) { .round { flex-basis: 215px; } }
2485
2534
  `;
2486
- class ue extends b {
2487
- static styles = [U, Is];
2535
+ class vt extends y {
2536
+ static styles = [U, Ds];
2488
2537
  static properties = {
2489
- ...b.properties,
2538
+ ...y.properties,
2490
2539
  sport: { type: String },
2491
2540
  season: { type: String },
2492
2541
  tournamentId: { type: String, attribute: "tournament-id" },
@@ -2496,31 +2545,31 @@ class ue extends b {
2496
2545
  constructor() {
2497
2546
  super(), this.sport = "football", this.season = "", this.tournamentId = "", this.picked = "", this.group = null;
2498
2547
  }
2499
- async fetchData(t) {
2500
- const e = this.season || K(), s = (await t.listTournaments({ sport: this.sport, season: e })).items, r = new URLSearchParams(globalThis.location?.search || "").get("tournament"), o = Ts(s, { id: this.picked || this.tournamentId, param: r });
2501
- if (!o) return { season: e, tournaments: s, tournament: null };
2502
- const [n, i, c, h, d] = await Promise.all([
2503
- t.listSeedings(o.id),
2504
- t.listEdges(o.id),
2505
- t.listGames({ tournamentId: o.id }),
2506
- t.listSchools(),
2507
- 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 })
2508
2557
  ]);
2509
2558
  return {
2510
- season: e,
2559
+ season: t,
2511
2560
  tournaments: s,
2512
2561
  tournament: o,
2513
2562
  seedings: n.items,
2514
2563
  edges: i.items,
2515
2564
  games: c.items,
2516
- schools: h.items,
2517
- teams: d.items
2565
+ schools: d.items,
2566
+ teams: h.items
2518
2567
  };
2519
2568
  }
2520
2569
  get ctx() {
2521
2570
  return (!this._ctx || this._ctxData !== this.data) && (this._ctx = {
2522
- teamsById: $(this.data.teams),
2523
- schoolsById: $(this.data.schools),
2571
+ teamsById: b(this.data.teams),
2572
+ schoolsById: b(this.data.schools),
2524
2573
  records: {},
2525
2574
  rankings: [],
2526
2575
  hrefs: O(this),
@@ -2528,107 +2577,107 @@ class ue extends b {
2528
2577
  }, this._ctxData = this.data), this._ctx;
2529
2578
  }
2530
2579
  /** Switch tournaments: remember the pick, deep-link it, reload the scoped data. */
2531
- pick(t) {
2532
- if (t !== this.data?.tournament?.id) {
2533
- this.picked = t, this.group = null;
2580
+ pick(e) {
2581
+ if (e !== this.data?.tournament?.id) {
2582
+ this.picked = e, this.group = null;
2534
2583
  try {
2535
- const e = new URL(globalThis.location.href);
2536
- 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);
2537
2586
  } catch {
2538
2587
  }
2539
2588
  this.load();
2540
2589
  }
2541
2590
  }
2542
2591
  renderView() {
2543
- const t = this.data, e = this.ctx, s = lt(this, e, {
2544
- title: l`${D(this.sport)} playoff brackets`,
2545
- sub: t.tournament ? l`${t.tournament.name} · ${t.season} season` : l`${t.season} season`,
2546
- 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
2547
2596
  });
2548
- if (!t.tournament)
2549
- return l`${s}${P(this, l`
2550
- ${B(this)}
2551
- <div class="card"><div class="empty">No ${this.sport} brackets have been published for the ${t.season} season yet.</div></div>
2597
+ if (!e.tournament)
2598
+ return l`${s}${B(this, l`
2599
+ ${D(this)}
2600
+ <div class="card"><div class="empty">No ${this.sport} brackets have been published for the ${e.season} season yet.</div></div>
2552
2601
  `)}`;
2553
- const r = ws(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, c = Ss(t.games, t.edges, o), h = ys(t.games), d = As(t.games, t.edges);
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);
2554
2603
  return l`
2555
2604
  ${s}
2556
- ${P(this, l`
2557
- ${B(this)}
2605
+ ${B(this, l`
2606
+ ${D(this)}
2558
2607
  <div class="toolbar">
2559
- ${t.tournaments.length > 1 ? l`
2608
+ ${e.tournaments.length > 1 ? l`
2560
2609
  <div role="group" aria-label="Tournament">
2561
- ${t.tournaments.map((p) => l`<button class="chip ${p.id === t.tournament.id ? "on" : ""}"
2610
+ ${e.tournaments.map((p) => l`<button class="chip ${p.id === e.tournament.id ? "on" : ""}"
2562
2611
  @click=${() => this.pick(p.id)}>${p.name}</button>`)}
2563
2612
  </div>` : m}
2564
- ${r.length > 1 ? l`
2613
+ ${a.length > 1 ? l`
2565
2614
  <div role="tablist" aria-label="Bracket group">
2566
- ${r.map((p) => l`<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"
2567
2616
  aria-selected=${p.key === o.key ? "true" : "false"}
2568
2617
  @click=${() => {
2569
2618
  this.group = p.key;
2570
2619
  }}>${p.name}</button>`)}
2571
2620
  </div>` : m}
2572
2621
  <span class="spacer"></span>
2573
- <span class="pill ${h === "complete" ? "final" : h === "active" ? "class" : "type"}">${h === "complete" ? "Complete" : h === "active" ? "In progress" : "Bracket set"}</span>
2574
- <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>
2575
2624
  </div>
2576
- ${d ? l`<div class="champ"><span class="pill champ">Champion</span>
2577
- ${E(C(e, d), 26)}<span class="tname">${at(e, d)}</span></div>` : m}
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}
2578
2627
  ${c.length ? l`
2579
2628
  <div class="bracket" role="region" aria-label="${o.name} bracket">
2580
2629
  ${c.map((p) => l`
2581
2630
  <section class="round">
2582
- <h3 class="roundhead">${bs({ round: p.round, perGroup: i, groupCount: n })}</h3>
2583
- <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>
2584
2633
  </section>`)}
2585
2634
  </div>` : l`<div class="card"><div class="empty">This bracket has no games yet.</div></div>`}
2586
2635
  `)}
2587
2636
  `;
2588
2637
  }
2589
- renderMatchup(t, e) {
2590
- const s = e.homeTeamId && e.awayTeamId || e.state === "final" || e.state === "live";
2638
+ renderMatchup(e, t) {
2639
+ const s = t.homeTeamId && t.awayTeamId || t.state === "final" || t.state === "live";
2591
2640
  return l`
2592
- <article class="matchup ${e.state}" aria-label="${e.label || "Matchup"}">
2593
- ${this.renderSlot(t, e, "home")}
2594
- ${this.renderSlot(t, e, "away")}
2641
+ <article class="matchup ${t.state}" aria-label="${t.label || "Matchup"}">
2642
+ ${this.renderSlot(e, t, "home")}
2643
+ ${this.renderSlot(e, t, "away")}
2595
2644
  <footer class="mfoot">
2596
- ${V(e)}
2597
- ${e.label ? l`<span class="label">${e.label}</span>` : m}
2645
+ ${V(t)}
2646
+ ${t.label ? l`<span class="label">${t.label}</span>` : m}
2598
2647
  <span class="spacer"></span>
2599
- ${s ? l`<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}
2600
2649
  </footer>
2601
2650
  </article>
2602
2651
  `;
2603
2652
  }
2604
- renderSlot(t, e, s) {
2605
- const { teamId: r, seed: o, bye: n } = _s(e, s, this.data.seedings), i = me(e), c = e.state === "live" || e.state === "final";
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";
2606
2655
  return l`
2607
2656
  <div class="slot ${i ? i === s ? "winner" : "loser" : ""}">
2608
2657
  <span class="seed">${o ?? ""}</span>
2609
- ${r ? l`${E(C(t, r), 22)}<span class="tname">${at(t, r, e.date)}</span>` : n ? l`<span class="tname bye">Bye</span>` : l`<span class="tname mut">TBD</span>`}
2610
- ${c ? l`<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}
2611
2660
  </div>
2612
2661
  `;
2613
2662
  }
2614
2663
  }
2615
- globalThis?.customElements && !globalThis.customElements.get("hsot-brackets") && globalThis.customElements.define("hsot-brackets", ue);
2616
- const Cs = {
2617
- "hsot-scores": se,
2618
- "hsot-standings": ae,
2619
- "hsot-rankings": re,
2620
- "hsot-school": oe,
2621
- "hsot-boxscore": ce,
2622
- "hsot-school-search": he,
2623
- "hsot-brackets": ue
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
2624
2673
  };
2625
- function Es() {
2626
- const a = globalThis?.customElements;
2627
- if (a)
2628
- for (const [t, e] of Object.entries(Cs))
2629
- 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);
2630
2679
  }
2631
- typeof window < "u" && globalThis.customElements && Es();
2680
+ typeof window < "u" && globalThis.customElements && Rs();
2632
2681
  export {
2633
- Es as defineAll
2682
+ Rs as defineAll
2634
2683
  };