@sensiblestats/widget-react 0.76.0 → 0.77.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.
package/dist/index.cjs CHANGED
@@ -208,6 +208,8 @@ var STRINGS = {
208
208
  statRank: "Rank",
209
209
  unitDays: "days",
210
210
  unitPts: "pts",
211
+ worthNow: (pts) => `Worth ${pts} pts now`,
212
+ worthAfterMiss: (pts) => `${pts} after a miss`,
211
213
  thisWeek: "this week",
212
214
  newToday: "New today",
213
215
  resume: "Resume",
@@ -548,6 +550,8 @@ var STRINGS = {
548
550
  statRank: "S\u0131ra",
549
551
  unitDays: "g\xFCn",
550
552
  unitPts: "puan",
553
+ worthNow: (pts) => `\u015Eimdi ${pts} puan`,
554
+ worthAfterMiss: (pts) => `yanl\u0131\u015Fta ${pts}`,
551
555
  thisWeek: "bu hafta",
552
556
  newToday: "Bug\xFCn yeni",
553
557
  resume: "Devam et",
@@ -6423,53 +6427,104 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
6423
6427
  ] });
6424
6428
  }
6425
6429
 
6426
- // src/components/games/ui/FooterBar.tsx
6430
+ // src/components/games/ui/AnswerTray.tsx
6427
6431
  var import_jsx_runtime67 = require("react/jsx-runtime");
6432
+ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
6433
+ const needle = query.trim().toLowerCase();
6434
+ const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
6435
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(import_jsx_runtime67.Fragment, { children: [
6436
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(
6437
+ SearchField,
6438
+ {
6439
+ id,
6440
+ label,
6441
+ labelHidden: true,
6442
+ placeholder,
6443
+ value: query,
6444
+ onChange: onQuery,
6445
+ disabled
6446
+ }
6447
+ ),
6448
+ shown.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
6449
+ const { first, last } = splitName(o.name);
6450
+ return /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)(
6451
+ "button",
6452
+ {
6453
+ type: "button",
6454
+ role: "option",
6455
+ "aria-selected": false,
6456
+ "aria-label": o.name,
6457
+ className: "ss-g-tray-chip",
6458
+ disabled,
6459
+ onClick: () => onPick(o.id),
6460
+ children: [
6461
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
6462
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsxs)("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
6463
+ first && /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-tray-first", children: first }),
6464
+ /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-g-tray-last", children: last })
6465
+ ] })
6466
+ ]
6467
+ },
6468
+ o.id
6469
+ );
6470
+ }) })
6471
+ ] });
6472
+ }
6473
+
6474
+ // src/components/games/ui/FooterBar.tsx
6475
+ var import_jsx_runtime68 = require("react/jsx-runtime");
6428
6476
  function FooterBar({ children }) {
6429
- return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className: "ss-g-footer", children });
6477
+ return /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-footer", children });
6430
6478
  }
6431
6479
 
6432
6480
  // src/components/games/ui/Silhouette.tsx
6433
- var import_jsx_runtime68 = require("react/jsx-runtime");
6481
+ var import_jsx_runtime69 = require("react/jsx-runtime");
6434
6482
  function Silhouette({ size, variant = "default" }) {
6435
- return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
6436
- /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
6437
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
6438
- /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
6483
+ return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
6484
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
6485
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
6486
+ /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
6439
6487
  ] }),
6440
- variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-sil-q", children: "?" })
6488
+ variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-sil-q", children: "?" })
6441
6489
  ] });
6442
6490
  }
6443
6491
 
6444
6492
  // src/components/games/ui/GameButton.tsx
6445
- var import_jsx_runtime69 = require("react/jsx-runtime");
6493
+ var import_jsx_runtime70 = require("react/jsx-runtime");
6446
6494
  function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
6447
6495
  const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
6448
- return /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("button", { type, className: cls, ...rest });
6496
+ return /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("button", { type, className: cls, ...rest });
6449
6497
  }
6450
6498
 
6451
6499
  // src/components/games/ui/ResultCard.tsx
6452
- var import_jsx_runtime70 = require("react/jsx-runtime");
6500
+ var import_jsx_runtime71 = require("react/jsx-runtime");
6453
6501
  function ResultCard({ tone, title, score, detail, onBack, ui }) {
6454
- return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
6455
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-result-title", children: title }),
6456
- score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-result-score", children: [
6457
- /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-result-num", children: score }),
6502
+ return /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
6503
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-result-title", children: title }),
6504
+ score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime71.jsxs)("span", { className: "ss-g-result-score", children: [
6505
+ /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-result-num", children: score }),
6458
6506
  ui.games.unitPts
6459
6507
  ] }),
6460
- detail && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-result-detail", children: detail }),
6461
- onBack && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
6508
+ detail && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("span", { className: "ss-g-result-detail", children: detail }),
6509
+ onBack && /* @__PURE__ */ (0, import_jsx_runtime71.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
6462
6510
  ] });
6463
6511
  }
6464
6512
 
6465
- // src/components/games/ui/OptionList.tsx
6466
- var import_jsx_runtime71 = require("react/jsx-runtime");
6467
- function OptionList({ label, options, onPick }) {
6468
- return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
6513
+ // src/components/games/ui/PointsLadderRow.tsx
6514
+ var import_jsx_runtime72 = require("react/jsx-runtime");
6515
+ function PointsLadderRow({ ladder, guessesUsed, ui }) {
6516
+ if (!ladder || ladder.length === 0) return null;
6517
+ const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
6518
+ const next = ladder[guessesUsed + 1];
6519
+ if (now === void 0) return null;
6520
+ return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
6521
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
6522
+ next !== void 0 && next !== now && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
6523
+ ] });
6469
6524
  }
6470
6525
 
6471
6526
  // src/components/games/MysteryTigerGame.tsx
6472
- var import_jsx_runtime72 = require("react/jsx-runtime");
6527
+ var import_jsx_runtime73 = require("react/jsx-runtime");
6473
6528
  function parseClientState(json) {
6474
6529
  if (!json) return null;
6475
6530
  try {
@@ -6583,9 +6638,7 @@ function MysteryTigerGame({
6583
6638
  const totalGuesses = clientState ? clientState.guessesUsed + clientState.guessesRemaining : MAX_GUESSES;
6584
6639
  const score = result?.score ?? 0;
6585
6640
  const revealName = isOver ? clientState?.revealedPlayerName : void 0;
6586
- const filtered = config && !isOver ? config.squadPlayers.filter(
6587
- (p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
6588
- ) : [];
6641
+ const pool = config && !isOver ? config.squadPlayers.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
6589
6642
  function handleSelect(playerId) {
6590
6643
  if (!config || isOver || submitting) return;
6591
6644
  const prevGuesses = guessResults.map((g) => g.playerId);
@@ -6593,22 +6646,22 @@ function MysteryTigerGame({
6593
6646
  setQuery("");
6594
6647
  onSubmit(JSON.stringify({ guesses: newGuesses }));
6595
6648
  }
6596
- const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Chip, { variant: "accent", children: [
6649
+ const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Chip, { variant: "accent", children: [
6597
6650
  score,
6598
6651
  " ",
6599
6652
  ui.games.unitPts
6600
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(Chip, { children: [
6653
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(Chip, { children: [
6601
6654
  ui.games.guess,
6602
6655
  " ",
6603
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
6656
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
6604
6657
  " / ",
6605
6658
  totalGuesses
6606
6659
  ] }) });
6607
6660
  const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
6608
6661
  const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
6609
6662
  const known = deriveKnownAttributes(guessResults, keys);
6610
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-testid": "game-screen-mystery-tiger", children: [
6611
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6663
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
6664
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6612
6665
  GameHeader,
6613
6666
  {
6614
6667
  title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
@@ -6618,40 +6671,41 @@ function MysteryTigerGame({
6618
6671
  backLabel: ui.back
6619
6672
  }
6620
6673
  ),
6621
- !config && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6622
- config && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6623
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-body", children: [
6624
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
6625
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-portrait", children: [
6626
- revealName ? /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(Silhouette, { size: 150, variant: "mystery" }),
6627
- revealName && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
6674
+ !config && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6675
+ config && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6676
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-body", children: [
6677
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
6678
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
6679
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-portrait", children: [
6680
+ revealName ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Silhouette, { size: 150, variant: "mystery" }),
6681
+ revealName && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
6628
6682
  ] }),
6629
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
6630
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
6631
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
6683
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
6684
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
6685
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
6632
6686
  ] }, k.key)) })
6633
6687
  ] }),
6634
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
6635
- guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-table", children: [
6636
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
6637
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: t.yourGuesses }),
6638
- keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: t.labels[k] }, k))
6688
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
6689
+ guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-table", children: [
6690
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
6691
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: t.yourGuesses }),
6692
+ keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: t.labels[k] }, k))
6639
6693
  ] }),
6640
6694
  guessResults.map((gr, i) => {
6641
6695
  const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
6642
6696
  const { first, last } = splitName(name);
6643
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
6644
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-who", children: [
6645
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
6646
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { className: "ss-g-mt-names", children: [
6647
- first && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-first", children: first }),
6648
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-last", children: last })
6697
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
6698
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-who", children: [
6699
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
6700
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: "ss-g-mt-names", children: [
6701
+ first && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-first", children: first }),
6702
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-last", children: last })
6649
6703
  ] })
6650
6704
  ] }),
6651
6705
  keys.map((key) => {
6652
6706
  const v = gr[key];
6653
6707
  const arrow = directionArrow(v);
6654
- return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(
6708
+ return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(
6655
6709
  "div",
6656
6710
  {
6657
6711
  className: "ss-g-mt-cell",
@@ -6659,8 +6713,8 @@ function MysteryTigerGame({
6659
6713
  "data-verdict": v.verdict,
6660
6714
  "aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
6661
6715
  children: [
6662
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
6663
- arrow && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
6716
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
6717
+ arrow && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
6664
6718
  ]
6665
6719
  },
6666
6720
  key
@@ -6669,25 +6723,25 @@ function MysteryTigerGame({
6669
6723
  ] }, gr.playerId);
6670
6724
  })
6671
6725
  ] }),
6672
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-legend", children: [
6673
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6674
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
6726
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-legend", children: [
6727
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
6728
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
6675
6729
  t.legendMatch
6676
6730
  ] }),
6677
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6678
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
6731
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
6732
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
6679
6733
  t.legendClose
6680
6734
  ] }),
6681
- /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { children: [
6735
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { children: [
6682
6736
  "\u25B2 ",
6683
6737
  t.legendHigher
6684
6738
  ] })
6685
6739
  ] }),
6686
- clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("div", { className: "ss-g-mt-hint", children: [
6687
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(IconBulb, {}),
6688
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: clientState.hintLine })
6740
+ clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-mt-hint", children: [
6741
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(IconBulb, {}),
6742
+ /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { children: clientState.hintLine })
6689
6743
  ] }),
6690
- isOver && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6744
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6691
6745
  ResultCard,
6692
6746
  {
6693
6747
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -6699,39 +6753,26 @@ function MysteryTigerGame({
6699
6753
  }
6700
6754
  )
6701
6755
  ] }),
6702
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(FooterBar, { children: [
6703
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6704
- OptionList,
6705
- {
6706
- label: t.optionsLabel,
6707
- options: filtered.map((p) => ({
6708
- key: p.id,
6709
- content: /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)(import_jsx_runtime72.Fragment, { children: [
6710
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
6711
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { children: p.name })
6712
- ] })
6713
- })),
6714
- onPick: (k) => handleSelect(Number(k))
6715
- }
6716
- ),
6717
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(
6718
- SearchField,
6719
- {
6720
- id: inputId,
6721
- label: t.searchLabel,
6722
- placeholder: t.searchPlaceholder,
6723
- value: query,
6724
- onChange: setQuery,
6725
- disabled: submitting
6726
- }
6727
- )
6728
- ] })
6756
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6757
+ AnswerTray,
6758
+ {
6759
+ id: inputId,
6760
+ label: t.searchLabel,
6761
+ placeholder: t.searchPlaceholder,
6762
+ optionsLabel: t.optionsLabel,
6763
+ options: pool,
6764
+ query,
6765
+ onQuery: setQuery,
6766
+ onPick: handleSelect,
6767
+ disabled: submitting
6768
+ }
6769
+ ) })
6729
6770
  ] })
6730
6771
  ] });
6731
6772
  }
6732
6773
 
6733
6774
  // src/components/games/HigherOrLowerGame.tsx
6734
- var import_jsx_runtime73 = require("react/jsx-runtime");
6775
+ var import_jsx_runtime74 = require("react/jsx-runtime");
6735
6776
  var POINTS_PER_CORRECT = 10;
6736
6777
  function parseClientState2(json) {
6737
6778
  if (!json) return null;
@@ -6743,11 +6784,11 @@ function parseClientState2(json) {
6743
6784
  }
6744
6785
  function PlayerCard({ name, imagePath, highlight, children }) {
6745
6786
  const { first, last } = splitName(name);
6746
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
6747
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(Silhouette, { size: 150 }) }),
6748
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-hl-info", children: [
6749
- first && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-first", children: first }),
6750
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-surname", children: last }),
6787
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
6788
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(Silhouette, { size: 150 }) }),
6789
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-hl-info", children: [
6790
+ first && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-first", children: first }),
6791
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-surname", children: last }),
6751
6792
  children
6752
6793
  ] })
6753
6794
  ] });
@@ -6779,47 +6820,47 @@ function HigherOrLowerGame({
6779
6820
  const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
6780
6821
  onSubmit(JSON.stringify({ answers: newAnswers }));
6781
6822
  }
6782
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-testid": "game-screen-higher-or-lower", children: [
6783
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6823
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
6824
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6784
6825
  GameHeader,
6785
6826
  {
6786
6827
  title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
6787
6828
  eyebrow: t.eyebrow(POINTS_PER_CORRECT),
6788
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
6829
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
6789
6830
  onBack,
6790
6831
  backLabel: ui.back
6791
6832
  }
6792
6833
  ),
6793
- !config && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6794
- config && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment, { children: [
6795
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-body", children: [
6796
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
6797
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
6798
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
6799
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
6834
+ !config && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
6835
+ config && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(import_jsx_runtime74.Fragment, { children: [
6836
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-body", children: [
6837
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
6838
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
6839
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
6840
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
6800
6841
  ] }),
6801
- currentPair && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-hl-pair", children: [
6802
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
6803
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
6804
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
6842
+ currentPair && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-hl-pair", children: [
6843
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
6844
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
6845
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
6805
6846
  ] }),
6806
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
6807
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-hl-btns", children: [
6808
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
6809
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(IconArrowUp, { size: 16 }),
6847
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
6848
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-hl-btns", children: [
6849
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
6850
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(IconArrowUp, { size: 16 }),
6810
6851
  t.higher
6811
6852
  ] }),
6812
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
6813
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(IconArrowDown, { size: 16 }),
6853
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
6854
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(IconArrowDown, { size: 16 }),
6814
6855
  t.lower
6815
6856
  ] })
6816
6857
  ] }) })
6817
6858
  ] }),
6818
- lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
6819
- lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(IconClose, {}),
6859
+ lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
6860
+ lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(IconClose, {}),
6820
6861
  t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
6821
6862
  ] }),
6822
- isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(
6863
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(
6823
6864
  ResultCard,
6824
6865
  {
6825
6866
  tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
@@ -6831,15 +6872,15 @@ function HigherOrLowerGame({
6831
6872
  }
6832
6873
  )
6833
6874
  ] }),
6834
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime73.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("div", { className: "ss-g-hl-foot", children: [
6835
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
6875
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-hl-foot", children: [
6876
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
6836
6877
  const a = answeredPairs[i];
6837
- return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
6878
+ return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
6838
6879
  }) }),
6839
- /* @__PURE__ */ (0, import_jsx_runtime73.jsxs)("span", { className: "ss-g-hl-pts", children: [
6840
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { "data-testid": "hol-score", children: score }),
6880
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("span", { className: "ss-g-hl-pts", children: [
6881
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { "data-testid": "hol-score", children: score }),
6841
6882
  " ",
6842
- /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
6883
+ /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
6843
6884
  ] })
6844
6885
  ] }) })
6845
6886
  ] })
@@ -6851,17 +6892,17 @@ var import_react40 = require("react");
6851
6892
 
6852
6893
  // src/components/games/ui/CrestShield.tsx
6853
6894
  var import_react39 = require("react");
6854
- var import_jsx_runtime74 = require("react/jsx-runtime");
6895
+ var import_jsx_runtime75 = require("react/jsx-runtime");
6855
6896
  function CrestShield({ src, name, size = 28 }) {
6856
6897
  const [failed, setFailed] = (0, import_react39.useState)(false);
6857
6898
  if (src && !isPlaceholderImage(src) && !failed) {
6858
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
6899
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
6859
6900
  }
6860
- return /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("svg", { className: "ss-g-crest ss-g-crest--ph", width: size, height: size * 32 / 28, viewBox: "0 0 28 32", role: "img", "aria-label": name, children: /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
6901
+ return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("svg", { className: "ss-g-crest ss-g-crest--ph", width: size, height: size * 32 / 28, viewBox: "0 0 28 32", role: "img", "aria-label": name, children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
6861
6902
  }
6862
6903
 
6863
6904
  // src/components/games/CareerPathGame.tsx
6864
- var import_jsx_runtime75 = require("react/jsx-runtime");
6905
+ var import_jsx_runtime76 = require("react/jsx-runtime");
6865
6906
  function parseClientState3(json) {
6866
6907
  if (!json) return null;
6867
6908
  try {
@@ -6891,17 +6932,15 @@ function CareerPathGame({
6891
6932
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
6892
6933
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
6893
6934
  if (!config) {
6894
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
6895
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
6896
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6935
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
6936
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
6937
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
6897
6938
  ] });
6898
6939
  }
6899
6940
  const visiblePath = clientState?.visiblePath ?? config.initialPath;
6900
6941
  const totalClubs = clientState?.totalClubs ?? config.totalClubs;
6901
6942
  const hidden = isOver ? 0 : Math.max(0, totalClubs - visiblePath.length);
6902
- const filtered = !isOver ? config.typeaheadPool.filter(
6903
- (p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
6904
- ) : [];
6943
+ const pool = !isOver ? config.typeaheadPool.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
6905
6944
  function handleSelect(playerId) {
6906
6945
  if (!config || isOver || submitting) return;
6907
6946
  const prevGuesses = clientState?.guessResults.map((g) => g.playerId) ?? [];
@@ -6909,60 +6948,61 @@ function CareerPathGame({
6909
6948
  setQuery("");
6910
6949
  onSubmit(JSON.stringify({ guesses: newGuesses }));
6911
6950
  }
6912
- const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(Chip, { variant: "neutral", children: [
6951
+ const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Chip, { variant: "neutral", children: [
6913
6952
  ui.games.guess,
6914
6953
  " ",
6915
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
6954
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
6916
6955
  " / ",
6917
6956
  clientState.guessesUsed + clientState.guessesRemaining
6918
6957
  ] }) }) : void 0;
6919
6958
  const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
6920
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-career-path", children: [
6921
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
6922
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-body", children: [
6923
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-cp-card", children: [
6924
- isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
6925
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-cp-card-text", children: [
6926
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
6927
- clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-cp-locks", children: [
6928
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
6929
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
6959
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
6960
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
6961
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
6962
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
6963
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-cp-card", children: [
6964
+ isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
6965
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-cp-card-text", children: [
6966
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
6967
+ clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-cp-locks", children: [
6968
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
6969
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
6930
6970
  ] }) : null
6931
6971
  ] })
6932
6972
  ] }),
6933
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("ol", { className: "ss-g-cp-line", children: [
6973
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("ol", { className: "ss-g-cp-line", children: [
6934
6974
  visiblePath.map((spell, i) => {
6935
6975
  const years = i === 0 ? s.firstClub : spellYears(spell);
6936
- return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("li", { className: "ss-g-cp-step", children: [
6937
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-cp-rail", children: [
6938
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
6939
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
6976
+ return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("li", { className: "ss-g-cp-step", children: [
6977
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-cp-rail", children: [
6978
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
6979
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
6940
6980
  ] }),
6941
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-cp-step-text", children: [
6942
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
6943
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-cp-sub", children: [
6944
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-years", children: years }),
6945
- spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
6981
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-cp-step-text", children: [
6982
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
6983
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-cp-sub", children: [
6984
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-years", children: years }),
6985
+ spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
6946
6986
  years ? " \xB7 " : "",
6947
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
6987
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
6948
6988
  ] })
6949
6989
  ] })
6950
6990
  ] })
6951
6991
  ] }, `${spell.clubName}-${i}`);
6952
6992
  }),
6953
- hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
6954
- /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("span", { className: "ss-g-cp-rail", children: [
6955
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconLock, { size: 18 }) }),
6956
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
6993
+ hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
6994
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-cp-rail", children: [
6995
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, { size: 18 }) }),
6996
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
6957
6997
  ] }),
6958
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
6998
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
6959
6999
  ] }),
6960
- hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
6961
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(IconLock, { size: 18 }) }) }),
6962
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
7000
+ hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
7001
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconLock, { size: 18 }) }) }),
7002
+ /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
6963
7003
  ] })
6964
7004
  ] }),
6965
- isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
7005
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
6966
7006
  ResultCard,
6967
7007
  {
6968
7008
  tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
@@ -6974,39 +7014,35 @@ function CareerPathGame({
6974
7014
  }
6975
7015
  )
6976
7016
  ] }),
6977
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(FooterBar, { children: [
6978
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6979
- OptionList,
6980
- {
6981
- label: s.searchLabel,
6982
- options: filtered.map((p) => ({
6983
- key: p.id,
6984
- content: /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment, { children: [
6985
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(PlayerAvatar, { className: "ss-g-opt-av", name: p.name }),
6986
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { children: p.name })
6987
- ] })
6988
- })),
6989
- onPick: (k) => handleSelect(Number(k))
6990
- }
6991
- ),
6992
- /* @__PURE__ */ (0, import_jsx_runtime75.jsx)(
6993
- SearchField,
6994
- {
6995
- id: inputId,
6996
- label: s.searchLabel,
6997
- placeholder: s.searchPlaceholder,
6998
- value: query,
6999
- onChange: setQuery,
7000
- disabled: submitting
7001
- }
7002
- )
7003
- ] })
7017
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7018
+ AnswerTray,
7019
+ {
7020
+ id: inputId,
7021
+ label: s.searchLabel,
7022
+ placeholder: s.searchPlaceholder,
7023
+ optionsLabel: s.searchLabel,
7024
+ options: pool,
7025
+ query,
7026
+ onQuery: setQuery,
7027
+ onPick: handleSelect,
7028
+ disabled: submitting,
7029
+ minQuery: 1
7030
+ }
7031
+ ) })
7004
7032
  ] });
7005
7033
  }
7006
7034
 
7007
7035
  // src/components/games/BeatTheGridGame.tsx
7008
7036
  var import_react41 = __toESM(require("react"), 1);
7009
- var import_jsx_runtime76 = require("react/jsx-runtime");
7037
+
7038
+ // src/components/games/ui/OptionList.tsx
7039
+ var import_jsx_runtime77 = require("react/jsx-runtime");
7040
+ function OptionList({ label, options, onPick }) {
7041
+ return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
7042
+ }
7043
+
7044
+ // src/components/games/BeatTheGridGame.tsx
7045
+ var import_jsx_runtime78 = require("react/jsx-runtime");
7010
7046
  function criterionIconKind(label, key) {
7011
7047
  const l = (key ?? label).toLowerCase();
7012
7048
  if (l.includes("app")) return "calendar";
@@ -7024,34 +7060,34 @@ function rowAbbrev(label, map, key) {
7024
7060
  function CriterionIcon({ kind }) {
7025
7061
  switch (kind) {
7026
7062
  case "calendar":
7027
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconCalendar, {});
7063
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconCalendar, {});
7028
7064
  case "ball":
7029
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconBall, {});
7065
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconBall, {});
7030
7066
  case "boot":
7031
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconBoot, {});
7067
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconBoot, {});
7032
7068
  case "gloves":
7033
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconGloves, {});
7069
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconGloves, {});
7034
7070
  case "shield":
7035
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconShield, {});
7071
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconShield, {});
7036
7072
  default:
7037
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconFlag, {});
7073
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconFlag, {});
7038
7074
  }
7039
7075
  }
7040
7076
  function HeaderVisual({ label, textKey: iKey, meta }) {
7041
7077
  if (!meta) {
7042
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7078
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7043
7079
  }
7044
7080
  switch (meta.kind) {
7045
7081
  case "club":
7046
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7082
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
7047
7083
  case "coach":
7048
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7084
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
7049
7085
  case "country":
7050
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7086
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
7051
7087
  case "position":
7052
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(import_jsx_runtime76.Fragment, {});
7088
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_jsx_runtime78.Fragment, {});
7053
7089
  default:
7054
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7090
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
7055
7091
  }
7056
7092
  }
7057
7093
  function parseClientState4(json) {
@@ -7095,12 +7131,12 @@ function SearchSheet({
7095
7131
  const filtered = playerPool.filter(
7096
7132
  (p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
7097
7133
  );
7098
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7099
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
7100
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "neutral", children: rowLabel }),
7101
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconClose, { size: 12 }) }),
7102
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "accent", children: colLabel }),
7103
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7134
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
7135
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
7136
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "neutral", children: rowLabel }),
7137
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconClose, { size: 12 }) }),
7138
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", children: colLabel }),
7139
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7104
7140
  "button",
7105
7141
  {
7106
7142
  type: "button",
@@ -7108,12 +7144,12 @@ function SearchSheet({
7108
7144
  "data-testid": "btg-sheet-dismiss",
7109
7145
  "aria-label": s.closeSearch,
7110
7146
  onClick: onDismiss,
7111
- children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconClose, {})
7147
+ children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconClose, {})
7112
7148
  }
7113
7149
  )
7114
7150
  ] }),
7115
- playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7116
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7151
+ playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7152
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7117
7153
  SearchField,
7118
7154
  {
7119
7155
  id: inputId,
@@ -7125,16 +7161,16 @@ function SearchSheet({
7125
7161
  inputRef
7126
7162
  }
7127
7163
  ),
7128
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7164
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7129
7165
  OptionList,
7130
7166
  {
7131
7167
  label: s.searchLabel(rowLabel, colLabel),
7132
7168
  options: filtered.map((p) => ({
7133
7169
  key: p.id,
7134
- content: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7135
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7136
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
7137
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconPlus, { size: 18 }) })
7170
+ content: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7171
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
7172
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
7173
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconPlus, { size: 18 }) })
7138
7174
  ] })
7139
7175
  })),
7140
7176
  onPick: (k) => onPick(row, col, Number(k))
@@ -7172,9 +7208,9 @@ function BeatTheGridGame({
7172
7208
  onSubmit(JSON.stringify({ cells: newCells }));
7173
7209
  }
7174
7210
  if (!config) {
7175
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
7176
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7177
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7211
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7212
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7213
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7178
7214
  ] });
7179
7215
  }
7180
7216
  const rows = config.rows;
@@ -7187,20 +7223,20 @@ function BeatTheGridGame({
7187
7223
  (_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
7188
7224
  );
7189
7225
  const totalScore = clientState?.totalScore ?? result?.score ?? 0;
7190
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-beat-the-grid", children: [
7191
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7192
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7226
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
7227
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
7228
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7193
7229
  SegmentProgress,
7194
7230
  {
7195
7231
  segments,
7196
7232
  ariaLabel: s.progressAria(filledCells.length, total),
7197
7233
  leftLabel: s.filled(filledCells.length, total),
7198
7234
  rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
7199
- right: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7235
+ right: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
7200
7236
  }
7201
7237
  ),
7202
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
7203
- /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
7238
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-body", children: [
7239
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(
7204
7240
  "div",
7205
7241
  {
7206
7242
  className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
@@ -7210,31 +7246,31 @@ function BeatTheGridGame({
7210
7246
  },
7211
7247
  role: "grid",
7212
7248
  children: [
7213
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-btg-corner" }),
7249
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-btg-corner" }),
7214
7250
  cols.map((col, colIdx) => {
7215
7251
  const colMeta = config.colsMeta?.[colIdx];
7216
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7217
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7218
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: col })
7252
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
7253
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
7254
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: col })
7219
7255
  ] }, col);
7220
7256
  }),
7221
7257
  rows.map((rowLabel, rowIdx) => {
7222
7258
  const rowMeta = config.rowsMeta?.[rowIdx];
7223
7259
  const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
7224
- const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7225
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7226
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: rowLabel })
7227
- ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7228
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "aria-hidden": "true", children: abbr }),
7229
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-sr", children: rowLabel })
7260
+ const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7261
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
7262
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: rowLabel })
7263
+ ] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7264
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": "true", children: abbr }),
7265
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sr", children: rowLabel })
7230
7266
  ] });
7231
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_react41.default.Fragment, { children: [
7232
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7267
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_react41.default.Fragment, { children: [
7268
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7233
7269
  cols.map((colLabel, colIdx) => {
7234
7270
  const filled = findCellResult(filledCells, rowIdx, colIdx);
7235
7271
  const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
7236
7272
  const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
7237
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7273
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7238
7274
  "button",
7239
7275
  {
7240
7276
  type: "button",
@@ -7245,20 +7281,20 @@ function BeatTheGridGame({
7245
7281
  className: "ss-g-btg-cell",
7246
7282
  disabled: isLocked2 || submitting,
7247
7283
  onClick: () => handleCellClick(rowIdx, colIdx),
7248
- children: filled ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
7249
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7284
+ children: filled ? /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7285
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7250
7286
  "span",
7251
7287
  {
7252
7288
  className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
7253
7289
  role: "img",
7254
7290
  "aria-label": filled.isCorrect ? s.correct : s.wrong,
7255
- children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconClose, { size: 11 })
7291
+ children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconClose, { size: 11 })
7256
7292
  }
7257
7293
  ),
7258
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7294
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
7259
7295
  (() => {
7260
7296
  const entry = playerPool.find((p) => p.id === filled.playerId);
7261
- return /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7297
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7262
7298
  PlayerAvatar,
7263
7299
  {
7264
7300
  name: entry?.name ?? "",
@@ -7267,8 +7303,8 @@ function BeatTheGridGame({
7267
7303
  }
7268
7304
  );
7269
7305
  })(),
7270
- /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7271
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconPlus, { size: 22 }) })
7306
+ /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
7307
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconPlus, { size: 22 }) })
7272
7308
  },
7273
7309
  `cell-${rowIdx}-${colIdx}`
7274
7310
  );
@@ -7278,7 +7314,7 @@ function BeatTheGridGame({
7278
7314
  ]
7279
7315
  }
7280
7316
  ),
7281
- isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7317
+ isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7282
7318
  ResultCard,
7283
7319
  {
7284
7320
  tone: "neutral",
@@ -7290,7 +7326,7 @@ function BeatTheGridGame({
7290
7326
  }
7291
7327
  )
7292
7328
  ] }),
7293
- activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
7329
+ activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7294
7330
  SearchSheet,
7295
7331
  {
7296
7332
  row: activeCell.row,
@@ -7312,18 +7348,18 @@ function BeatTheGridGame({
7312
7348
  var import_react42 = require("react");
7313
7349
 
7314
7350
  // src/components/games/ui/PitchSvg.tsx
7315
- var import_jsx_runtime77 = require("react/jsx-runtime");
7351
+ var import_jsx_runtime79 = require("react/jsx-runtime");
7316
7352
  function PitchSvg({ variant }) {
7317
- return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
7318
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
7319
- variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
7320
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
7321
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
7322
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
7323
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
7324
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
7325
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
7326
- /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
7353
+ return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
7354
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
7355
+ variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
7356
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
7357
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
7358
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
7359
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
7360
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
7361
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
7362
+ /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
7327
7363
  ] })
7328
7364
  ] });
7329
7365
  }
@@ -7379,7 +7415,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
7379
7415
  }
7380
7416
 
7381
7417
  // src/components/games/GuessTheXiGame.tsx
7382
- var import_jsx_runtime78 = require("react/jsx-runtime");
7418
+ var import_jsx_runtime80 = require("react/jsx-runtime");
7383
7419
  var MAX_GUESSES2 = 3;
7384
7420
  function parseClientState5(json) {
7385
7421
  if (!json) return null;
@@ -7429,30 +7465,31 @@ function GuessTheXiGame({
7429
7465
  const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
7430
7466
  const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
7431
7467
  const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
7432
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-testid": "game-screen-guess-the-xi", children: [
7433
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7468
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
7469
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7434
7470
  GameHeader,
7435
7471
  {
7436
7472
  title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
7437
7473
  eyebrow: config?.poolLabel,
7438
- right: formation ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
7474
+ right: formation ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
7439
7475
  onBack,
7440
7476
  backLabel: ui.back
7441
7477
  }
7442
7478
  ),
7443
- !config && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7444
- config && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7445
- /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-body", children: [
7446
- rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
7447
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(PitchSvg, { variant: "full" }),
7448
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
7479
+ !config && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
7480
+ config && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7481
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-body", children: [
7482
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
7483
+ rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
7484
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(PitchSvg, { variant: "full" }),
7485
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
7449
7486
  const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
7450
7487
  const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
7451
7488
  const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
7452
7489
  const flag = nationalityFlag(pos.nationality);
7453
7490
  if (lineupEntry) {
7454
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
7455
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7491
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
7492
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7456
7493
  PlayerAvatar,
7457
7494
  {
7458
7495
  name: lineupEntry.name,
@@ -7460,11 +7497,11 @@ function GuessTheXiGame({
7460
7497
  className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
7461
7498
  }
7462
7499
  ),
7463
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
7500
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
7464
7501
  ] }, `${pos.slot}-${c}`);
7465
7502
  }
7466
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
7467
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7503
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
7504
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7468
7505
  "span",
7469
7506
  {
7470
7507
  className: "ss-g-gxi-disc",
@@ -7475,22 +7512,22 @@ function GuessTheXiGame({
7475
7512
  children: flag
7476
7513
  }
7477
7514
  ),
7478
- name ? /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
7515
+ name ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
7479
7516
  ] }, `${pos.slot}-${c}`);
7480
7517
  }) }, r)) })
7481
7518
  ] }),
7482
- !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
7483
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
7519
+ !isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
7520
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
7484
7521
  wrongGuesses.map((g) => {
7485
7522
  const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
7486
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
7487
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
7488
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("s", { children: teamName(g.teamId) })
7523
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
7524
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
7525
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("s", { children: teamName(g.teamId) })
7489
7526
  ] }, g.teamId);
7490
7527
  })
7491
7528
  ] }),
7492
- isOver && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7493
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7529
+ isOver && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7530
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7494
7531
  ResultCard,
7495
7532
  {
7496
7533
  tone: solved ? "win" : failed ? "lose" : "neutral",
@@ -7501,29 +7538,29 @@ function GuessTheXiGame({
7501
7538
  ui
7502
7539
  }
7503
7540
  ),
7504
- (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
7505
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
7506
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
7507
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
7541
+ (solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
7542
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
7543
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
7544
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
7508
7545
  ] })
7509
7546
  ] })
7510
7547
  ] }),
7511
- !isOver && /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(FooterBar, { children: [
7512
- query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7548
+ !isOver && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(FooterBar, { children: [
7549
+ query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7513
7550
  OptionList,
7514
7551
  {
7515
7552
  label: t.optionsLabel,
7516
7553
  options: filtered.map((tm) => ({
7517
7554
  key: tm.teamId,
7518
- content: /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment, { children: [
7519
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
7520
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { children: tm.teamName })
7555
+ content: /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment, { children: [
7556
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
7557
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { children: tm.teamName })
7521
7558
  ] })
7522
7559
  })),
7523
7560
  onPick: (k) => handlePick(Number(k))
7524
7561
  }
7525
7562
  ),
7526
- /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(
7563
+ /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7527
7564
  SearchField,
7528
7565
  {
7529
7566
  id: inputId,
@@ -7541,7 +7578,7 @@ function GuessTheXiGame({
7541
7578
 
7542
7579
  // src/components/games/DailyQuizGame.tsx
7543
7580
  var import_react43 = require("react");
7544
- var import_jsx_runtime79 = require("react/jsx-runtime");
7581
+ var import_jsx_runtime81 = require("react/jsx-runtime");
7545
7582
  function parseClientState6(json) {
7546
7583
  if (!json) return null;
7547
7584
  try {
@@ -7562,13 +7599,13 @@ function OptionName({ text }) {
7562
7599
  const tokens = base.split(/\s+/).filter(Boolean);
7563
7600
  const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
7564
7601
  if (!isPlainName || base === "") {
7565
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
7602
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
7566
7603
  }
7567
7604
  const { first, last } = splitName(base);
7568
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
7569
- first && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
7570
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
7571
- suffix && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
7605
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
7606
+ first && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
7607
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
7608
+ suffix && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
7572
7609
  ] });
7573
7610
  }
7574
7611
  function DailyQuizGame({
@@ -7587,9 +7624,9 @@ function DailyQuizGame({
7587
7624
  const results = clientState?.results ?? [];
7588
7625
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
7589
7626
  if (!config) {
7590
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7591
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
7592
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7627
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7628
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
7629
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7593
7630
  ] });
7594
7631
  }
7595
7632
  const questions = config.questions;
@@ -7624,11 +7661,11 @@ function DailyQuizGame({
7624
7661
  return r.isCorrect ? "correct" : "wrong";
7625
7662
  });
7626
7663
  const correctCount = results.filter((r) => r.isCorrect).length;
7627
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7628
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
7629
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
7630
- /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-body", children: [
7631
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
7664
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7665
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
7666
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
7667
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-body", children: [
7668
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
7632
7669
  ResultCard,
7633
7670
  {
7634
7671
  tone: "neutral",
@@ -7641,15 +7678,15 @@ function DailyQuizGame({
7641
7678
  questions.map((q) => {
7642
7679
  const r = findResult(results, q.index);
7643
7680
  const picked = selections.get(q.index);
7644
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-dq-rq", children: [
7645
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
7646
- r && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
7681
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-dq-rq", children: [
7682
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
7683
+ r && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
7647
7684
  let cls = "ss-g-dq-rq-opt";
7648
7685
  if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
7649
7686
  else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
7650
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: cls, children: opt }, optIdx);
7687
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: cls, children: opt }, optIdx);
7651
7688
  }) }),
7652
- r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
7689
+ r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
7653
7690
  ] }, q.index);
7654
7691
  })
7655
7692
  ] })
@@ -7657,16 +7694,16 @@ function DailyQuizGame({
7657
7694
  }
7658
7695
  const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
7659
7696
  const selectedIdx = current ? selections.get(current.index) : void 0;
7660
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-daily-quiz", children: [
7661
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
7662
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
7663
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
7664
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
7665
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
7697
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
7698
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
7699
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
7700
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
7701
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
7702
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
7666
7703
  const selected = optIdx === selectedIdx;
7667
7704
  const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
7668
7705
  const playerName = opt;
7669
- return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(
7706
+ return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
7670
7707
  "button",
7671
7708
  {
7672
7709
  type: "button",
@@ -7675,25 +7712,25 @@ function DailyQuizGame({
7675
7712
  disabled: submitting,
7676
7713
  onClick: () => handleSelect(current.index, optIdx),
7677
7714
  children: [
7678
- current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
7679
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
7680
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(OptionName, { text: opt })
7715
+ current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
7716
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
7717
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(OptionName, { text: opt })
7681
7718
  ]
7682
7719
  },
7683
7720
  optIdx
7684
7721
  );
7685
7722
  }) })
7686
7723
  ] }) }),
7687
- /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-dq-nav", children: [
7688
- page > 0 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
7689
- isLast ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
7724
+ /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-dq-nav", children: [
7725
+ page > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
7726
+ isLast ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
7690
7727
  ] }) })
7691
7728
  ] });
7692
7729
  }
7693
7730
 
7694
7731
  // src/components/games/MatchdayPredictorGame.tsx
7695
7732
  var import_react44 = require("react");
7696
- var import_jsx_runtime80 = require("react/jsx-runtime");
7733
+ var import_jsx_runtime82 = require("react/jsx-runtime");
7697
7734
  var SCORER_SEARCH_THRESHOLD = 9;
7698
7735
  function parseClientState7(json) {
7699
7736
  if (!json) return null;
@@ -7711,7 +7748,7 @@ function isLocked(kickoffUtc) {
7711
7748
  }
7712
7749
  }
7713
7750
  function IconMinus() {
7714
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7751
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7715
7752
  "svg",
7716
7753
  {
7717
7754
  width: 18,
@@ -7722,20 +7759,20 @@ function IconMinus() {
7722
7759
  strokeWidth: 2.2,
7723
7760
  strokeLinecap: "round",
7724
7761
  "aria-hidden": "true",
7725
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("path", { d: "M5 12h14" })
7762
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("path", { d: "M5 12h14" })
7726
7763
  }
7727
7764
  );
7728
7765
  }
7729
7766
  function TeamBadge({ team, label }) {
7730
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-mp-team", children: [
7731
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(CrestShield, { name: team.name, size: 44 }),
7732
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
7733
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-team-side", children: label })
7767
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-mp-team", children: [
7768
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(CrestShield, { name: team.name, size: 44 }),
7769
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
7770
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-team-side", children: label })
7734
7771
  ] });
7735
7772
  }
7736
7773
  function ScoreCard({ home, away, h, a, t, edit }) {
7737
- const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-mp-col", children: [
7738
- edit && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7774
+ const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-mp-col", children: [
7775
+ edit && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7739
7776
  "button",
7740
7777
  {
7741
7778
  type: "button",
@@ -7743,11 +7780,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
7743
7780
  "aria-label": t.goalsUp(team.name),
7744
7781
  disabled: edit.disabled,
7745
7782
  onClick: () => edit.onStep(side, 1),
7746
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconPlus, { size: 18 })
7783
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconPlus, { size: 18 })
7747
7784
  }
7748
7785
  ),
7749
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
7750
- edit && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7786
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
7787
+ edit && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7751
7788
  "button",
7752
7789
  {
7753
7790
  type: "button",
@@ -7755,27 +7792,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
7755
7792
  "aria-label": t.goalsDown(team.name),
7756
7793
  disabled: edit.disabled || value <= 0,
7757
7794
  onClick: () => edit.onStep(side, -1),
7758
- children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconMinus, {})
7795
+ children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconMinus, {})
7759
7796
  }
7760
7797
  )
7761
7798
  ] });
7762
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-mp-card", children: [
7763
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TeamBadge, { team: home, label: t.home }),
7764
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-mp-scores", children: [
7799
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-mp-card", children: [
7800
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(TeamBadge, { team: home, label: t.home }),
7801
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-mp-scores", children: [
7765
7802
  col("home", home, h),
7766
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
7803
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
7767
7804
  col("away", away, a)
7768
7805
  ] }),
7769
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(TeamBadge, { team: away, label: t.away })
7806
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(TeamBadge, { team: away, label: t.away })
7770
7807
  ] });
7771
7808
  }
7772
7809
  function OutcomeRow({ label, ok, detail, t }) {
7773
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
7774
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
7775
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("span", { className: "ss-g-mp-row-v", children: [
7776
- ok ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconClose, { size: 14 }),
7777
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
7778
- detail ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
7810
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
7811
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
7812
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: "ss-g-mp-row-v", children: [
7813
+ ok ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconClose, { size: 14 }),
7814
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
7815
+ detail ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
7779
7816
  ] })
7780
7817
  ] });
7781
7818
  }
@@ -7796,12 +7833,12 @@ function MatchdayPredictorGame({
7796
7833
  const searchId = (0, import_react44.useId)();
7797
7834
  const clientState = parseClientState7(result?.clientStateJson);
7798
7835
  const alreadyPlayed = result?.alreadyPlayed === true;
7799
- const header = /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7836
+ const header = /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7800
7837
  GameHeader,
7801
7838
  {
7802
7839
  title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
7803
7840
  eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
7804
- right: config ? /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
7841
+ right: config ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
7805
7842
  onBack,
7806
7843
  backLabel: ui.back
7807
7844
  }
@@ -7809,10 +7846,10 @@ function MatchdayPredictorGame({
7809
7846
  if (alreadyPlayed && clientState) {
7810
7847
  if (!clientState.graded) {
7811
7848
  const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
7812
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7849
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7813
7850
  header,
7814
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-body", children: [
7815
- config && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7851
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-body", children: [
7852
+ config && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7816
7853
  ScoreCard,
7817
7854
  {
7818
7855
  home: config.homeTeam,
@@ -7822,7 +7859,7 @@ function MatchdayPredictorGame({
7822
7859
  t
7823
7860
  }
7824
7861
  ),
7825
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7862
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7826
7863
  ResultCard,
7827
7864
  {
7828
7865
  tone: "neutral",
@@ -7839,28 +7876,28 @@ function MatchdayPredictorGame({
7839
7876
  }
7840
7877
  )
7841
7878
  ] }),
7842
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7879
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7843
7880
  ] });
7844
7881
  }
7845
7882
  const r = clientState.result;
7846
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7883
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7847
7884
  header,
7848
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-body", children: [
7849
- config && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
7850
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
7851
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("ul", { className: "ss-g-mp-rows", children: [
7852
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
7853
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
7854
- !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
7885
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-body", children: [
7886
+ config && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
7887
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
7888
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("ul", { className: "ss-g-mp-rows", children: [
7889
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
7890
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
7891
+ !clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
7855
7892
  ] })
7856
7893
  ] }),
7857
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7894
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
7858
7895
  ] });
7859
7896
  }
7860
7897
  if (!config) {
7861
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7898
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7862
7899
  header,
7863
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7900
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
7864
7901
  ] });
7865
7902
  }
7866
7903
  const locked = isLocked(config.kickoffUtc);
@@ -7884,10 +7921,10 @@ function MatchdayPredictorGame({
7884
7921
  const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
7885
7922
  const q = query.trim().toLowerCase();
7886
7923
  const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
7887
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-matchday-predictor", children: [
7924
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
7888
7925
  header,
7889
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-body", children: [
7890
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7926
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-body", children: [
7927
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7891
7928
  ScoreCard,
7892
7929
  {
7893
7930
  home: config.homeTeam,
@@ -7898,12 +7935,12 @@ function MatchdayPredictorGame({
7898
7935
  edit: { disabled, active: lastEdited, onStep: step }
7899
7936
  }
7900
7937
  ),
7901
- pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("section", { className: "ss-g-mp-scorer", children: [
7902
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
7903
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("h3", { children: t.firstScorer }),
7904
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { children: t.optional })
7938
+ pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("section", { className: "ss-g-mp-scorer", children: [
7939
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
7940
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("h3", { children: t.firstScorer }),
7941
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { children: t.optional })
7905
7942
  ] }),
7906
- showSearch && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
7943
+ showSearch && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
7907
7944
  SearchField,
7908
7945
  {
7909
7946
  id: searchId,
@@ -7915,9 +7952,9 @@ function MatchdayPredictorGame({
7915
7952
  disabled
7916
7953
  }
7917
7954
  ),
7918
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
7955
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
7919
7956
  const selected = firstScorerPlayerId === p.playerId;
7920
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
7957
+ return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
7921
7958
  "button",
7922
7959
  {
7923
7960
  type: "button",
@@ -7927,15 +7964,15 @@ function MatchdayPredictorGame({
7927
7964
  disabled,
7928
7965
  onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
7929
7966
  children: [
7930
- selected && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(IconCheck, { size: 12 }) }),
7931
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
7932
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
7967
+ selected && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconCheck, { size: 12 }) }),
7968
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
7969
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
7933
7970
  ]
7934
7971
  },
7935
7972
  p.playerId
7936
7973
  );
7937
7974
  }) }),
7938
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(
7975
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
7939
7976
  "button",
7940
7977
  {
7941
7978
  type: "button",
@@ -7944,24 +7981,24 @@ function MatchdayPredictorGame({
7944
7981
  disabled,
7945
7982
  onClick: () => setFirstScorerPlayerId(null),
7946
7983
  children: [
7947
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
7984
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
7948
7985
  t.noScorer
7949
7986
  ]
7950
7987
  }
7951
7988
  )
7952
7989
  ] }),
7953
- locked && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
7990
+ locked && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
7954
7991
  ] }),
7955
- /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)(FooterBar, { children: [
7956
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
7957
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
7992
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(FooterBar, { children: [
7993
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
7994
+ /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
7958
7995
  ] })
7959
7996
  ] });
7960
7997
  }
7961
7998
 
7962
7999
  // src/components/games/StartingXiGame.tsx
7963
8000
  var import_react45 = require("react");
7964
- var import_jsx_runtime81 = require("react/jsx-runtime");
8001
+ var import_jsx_runtime83 = require("react/jsx-runtime");
7965
8002
  var POINTS_PER_STARTER = 8;
7966
8003
  var XI_SIZE = 11;
7967
8004
  var DEFAULT_FORMATION = "4-3-3";
@@ -8010,20 +8047,20 @@ function StartingXiGame({
8010
8047
  const searchId = (0, import_react45.useId)();
8011
8048
  const clientState = parseClientState8(result?.clientStateJson);
8012
8049
  const alreadyPlayed = result?.alreadyPlayed === true;
8013
- const header = /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
8050
+ const header = /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8014
8051
  GameHeader,
8015
8052
  {
8016
8053
  title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
8017
8054
  eyebrow: t.eyebrow,
8018
- right: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
8055
+ right: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
8019
8056
  onBack,
8020
8057
  backLabel: ui.back
8021
8058
  }
8022
8059
  );
8023
8060
  function statusScreen(title, score) {
8024
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8061
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8025
8062
  header,
8026
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
8063
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
8027
8064
  ] });
8028
8065
  }
8029
8066
  if (alreadyPlayed) {
@@ -8032,9 +8069,9 @@ function StartingXiGame({
8032
8069
  if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
8033
8070
  }
8034
8071
  if (!config) {
8035
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8072
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8036
8073
  header,
8037
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8074
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8038
8075
  ] });
8039
8076
  }
8040
8077
  const { formation, slots } = formationSlots(config.formation);
@@ -8069,27 +8106,27 @@ function StartingXiGame({
8069
8106
  onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
8070
8107
  }
8071
8108
  const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
8072
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-starting-xi", children: [
8109
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
8073
8110
  header,
8074
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
8111
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8075
8112
  SegmentProgress,
8076
8113
  {
8077
8114
  segments,
8078
8115
  ariaLabel: t.picked(pickedCount),
8079
8116
  leftLabel: t.picked(pickedCount),
8080
8117
  rightLabel: t.toGo(XI_SIZE - pickedCount),
8081
- right: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { children: formation })
8118
+ right: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { children: formation })
8082
8119
  }
8083
8120
  ),
8084
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-body", children: [
8085
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-xi-pitch", children: [
8086
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PitchSvg, { variant: "half" }),
8121
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-body", children: [
8122
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-xi-pitch", children: [
8123
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PitchSvg, { variant: "half" }),
8087
8124
  slots.map((s) => {
8088
8125
  const playerId = slotPlayers[s.index] ?? null;
8089
8126
  const player = playerId !== null ? byId.get(playerId) ?? null : null;
8090
8127
  const name = player?.playerName ?? "";
8091
8128
  const state = player ? "filled" : active === s.index ? "active" : "empty";
8092
- return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
8129
+ return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
8093
8130
  "button",
8094
8131
  {
8095
8132
  type: "button",
@@ -8101,21 +8138,21 @@ function StartingXiGame({
8101
8138
  disabled: submitting,
8102
8139
  onClick: () => tapSlot(s.index),
8103
8140
  children: [
8104
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconPlus, { size: 18 }) }),
8105
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8141
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(IconPlus, { size: 18 }) }),
8142
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
8106
8143
  ]
8107
8144
  },
8108
8145
  s.index
8109
8146
  );
8110
8147
  })
8111
8148
  ] }),
8112
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-xi-picker", children: [
8113
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
8114
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
8115
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("strong", { children: t.pickFor(activeSlot.label) })
8116
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("strong", { children: t.allPicked }) }),
8117
- activeSlot && /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
8118
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
8149
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-xi-picker", children: [
8150
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8151
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
8152
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("strong", { children: t.pickFor(activeSlot.label) })
8153
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("strong", { children: t.allPicked }) }),
8154
+ activeSlot && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
8155
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8119
8156
  SearchField,
8120
8157
  {
8121
8158
  id: searchId,
@@ -8127,18 +8164,18 @@ function StartingXiGame({
8127
8164
  disabled: submitting
8128
8165
  }
8129
8166
  ),
8130
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8131
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8132
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8133
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8167
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
8168
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
8169
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
8170
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
8134
8171
  ] }) }, p.playerId)) })
8135
8172
  ] })
8136
8173
  ] })
8137
8174
  ] }),
8138
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(FooterBar, { children: [
8139
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8140
- /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("p", { className: "ss-g-xi-lock", children: [
8141
- /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconLock, {}),
8175
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(FooterBar, { children: [
8176
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
8177
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("p", { className: "ss-g-xi-lock", children: [
8178
+ /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(IconLock, {}),
8142
8179
  lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
8143
8180
  ] })
8144
8181
  ] })
@@ -8147,7 +8184,7 @@ function StartingXiGame({
8147
8184
 
8148
8185
  // src/components/games/StatLadderGame.tsx
8149
8186
  var import_react46 = require("react");
8150
- var import_jsx_runtime82 = require("react/jsx-runtime");
8187
+ var import_jsx_runtime84 = require("react/jsx-runtime");
8151
8188
  function ladderClue(ladder) {
8152
8189
  const mystery = ladder.find((r) => r.rank === 2);
8153
8190
  if (!mystery) return null;
@@ -8169,9 +8206,9 @@ function parseClientState9(json) {
8169
8206
  }
8170
8207
  function NameStack({ name }) {
8171
8208
  const { first, last } = splitName(name);
8172
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("span", { className: "ss-g-sl-name", children: [
8173
- first && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("small", { children: `${first[0]}.` }),
8174
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("b", { children: last })
8209
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("span", { className: "ss-g-sl-name", children: [
8210
+ first && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("small", { children: `${first[0]}.` }),
8211
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("b", { children: last })
8175
8212
  ] });
8176
8213
  }
8177
8214
  function StatLadderGame({
@@ -8188,11 +8225,11 @@ function StatLadderGame({
8188
8225
  const searchId = (0, import_react46.useId)();
8189
8226
  const clientState = parseClientState9(result?.clientStateJson);
8190
8227
  const revealed = clientState != null;
8191
- const header = /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8228
+ const header = /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
8192
8229
  if (!config) {
8193
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
8230
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8194
8231
  header,
8195
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8232
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8196
8233
  ] });
8197
8234
  }
8198
8235
  const question = t.question(config.statLabel);
@@ -8204,44 +8241,45 @@ function StatLadderGame({
8204
8241
  if (selectedId === null || submitting || revealed) return;
8205
8242
  onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
8206
8243
  }
8207
- return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-stat-ladder", children: [
8244
+ return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
8208
8245
  header,
8209
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-body", children: [
8210
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-sl-prompt", children: [
8211
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8212
- /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("h3", { className: "ss-g-sl-q", children: [
8246
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
8247
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
8248
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-sl-prompt", children: [
8249
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
8250
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("h3", { className: "ss-g-sl-q", children: [
8213
8251
  question.pre,
8214
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("em", { children: question.emph }),
8252
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("em", { children: question.emph }),
8215
8253
  question.post
8216
8254
  ] })
8217
8255
  ] }),
8218
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8219
- (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
8256
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
8257
+ (rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
8220
8258
  "li",
8221
8259
  {
8222
8260
  className: "ss-g-sl-rung ss-g-sl-rung--mystery",
8223
8261
  "data-testid": "sl-mystery-rung",
8224
8262
  "data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
8225
8263
  children: [
8226
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
8227
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(Silhouette, { size: 52, variant: "mystery" }),
8228
- revealed ? /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8229
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8264
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
8265
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(Silhouette, { size: 52, variant: "mystery" }),
8266
+ revealed ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
8267
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
8230
8268
  ]
8231
8269
  },
8232
8270
  rung.rank
8233
- ) : /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("li", { className: "ss-g-sl-rung", children: [
8234
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
8235
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8236
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(NameStack, { name: rung.playerName ?? "?" }),
8237
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
8271
+ ) : /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("li", { className: "ss-g-sl-rung", children: [
8272
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
8273
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
8274
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(NameStack, { name: rung.playerName ?? "?" }),
8275
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
8238
8276
  ] }, rung.rank)
8239
8277
  ) }),
8240
- clue && /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("p", { className: "ss-g-sl-clue", children: [
8241
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconBulb, {}),
8242
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { children: t.clue(clue, config.statLabel) })
8278
+ clue && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("p", { className: "ss-g-sl-clue", children: [
8279
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconBulb, {}),
8280
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { children: t.clue(clue, config.statLabel) })
8243
8281
  ] }),
8244
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(
8282
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
8245
8283
  "button",
8246
8284
  {
8247
8285
  type: "button",
@@ -8254,13 +8292,13 @@ function StatLadderGame({
8254
8292
  setQuery(p.playerName);
8255
8293
  },
8256
8294
  children: [
8257
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8258
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8259
- selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconCheck, {})
8295
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
8296
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
8297
+ selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconCheck, {})
8260
8298
  ]
8261
8299
  }
8262
8300
  ) }, p.playerId)) }),
8263
- revealed && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8301
+ revealed && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8264
8302
  ResultCard,
8265
8303
  {
8266
8304
  tone: clientState.isCorrect ? "win" : "lose",
@@ -8271,8 +8309,8 @@ function StatLadderGame({
8271
8309
  }
8272
8310
  )
8273
8311
  ] }),
8274
- !revealed && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("div", { className: "ss-g-sl-guess", children: [
8275
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
8312
+ !revealed && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-sl-guess", children: [
8313
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8276
8314
  SearchField,
8277
8315
  {
8278
8316
  id: searchId,
@@ -8287,13 +8325,13 @@ function StatLadderGame({
8287
8325
  disabled: submitting
8288
8326
  }
8289
8327
  ),
8290
- /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
8328
+ /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
8291
8329
  ] }) })
8292
8330
  ] });
8293
8331
  }
8294
8332
 
8295
8333
  // src/components/games/FanMotmGame.tsx
8296
- var import_jsx_runtime83 = require("react/jsx-runtime");
8334
+ var import_jsx_runtime85 = require("react/jsx-runtime");
8297
8335
  function parseClientState10(json) {
8298
8336
  if (!json) return null;
8299
8337
  try {
@@ -8314,20 +8352,20 @@ function FanMotmGame({
8314
8352
  const clientState = parseClientState10(result?.clientStateJson);
8315
8353
  const alreadyVoted = result?.alreadyPlayed === true;
8316
8354
  const pickedId = clientState?.pickedPlayerId ?? null;
8317
- const header = /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
8355
+ const header = /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8318
8356
  GameHeader,
8319
8357
  {
8320
8358
  title: t.title,
8321
8359
  eyebrow: t.eyebrow,
8322
- right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(IconCheck, {}), children: t.voted }) : void 0,
8360
+ right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconCheck, {}), children: t.voted }) : void 0,
8323
8361
  onBack,
8324
8362
  backLabel: ui.back
8325
8363
  }
8326
8364
  );
8327
8365
  if (!config) {
8328
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
8366
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8329
8367
  header,
8330
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8368
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
8331
8369
  ] });
8332
8370
  }
8333
8371
  const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
@@ -8335,12 +8373,12 @@ function FanMotmGame({
8335
8373
  if (alreadyVoted || submitting) return;
8336
8374
  onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
8337
8375
  }
8338
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen", "data-testid": "game-screen-fan-motm", children: [
8376
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
8339
8377
  header,
8340
- /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-body", children: [
8341
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
8378
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
8379
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
8342
8380
  const isVoted = alreadyVoted && pickedId === c.playerId;
8343
- return /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(
8381
+ return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
8344
8382
  "button",
8345
8383
  {
8346
8384
  type: "button",
@@ -8349,24 +8387,24 @@ function FanMotmGame({
8349
8387
  disabled: alreadyVoted || submitting,
8350
8388
  onClick: () => handleVote(c.playerId),
8351
8389
  children: [
8352
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
8353
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
8354
- isVoted && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
8390
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
8391
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
8392
+ isVoted && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
8355
8393
  ]
8356
8394
  }
8357
8395
  ) }, c.playerId);
8358
8396
  }) }),
8359
- alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
8397
+ alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
8360
8398
  ] }),
8361
- /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(FooterBar, { children: [
8362
- !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
8363
- /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
8399
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(FooterBar, { children: [
8400
+ !alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
8401
+ /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
8364
8402
  ] })
8365
8403
  ] });
8366
8404
  }
8367
8405
 
8368
8406
  // src/components/GameScreenHost.tsx
8369
- var import_jsx_runtime84 = require("react/jsx-runtime");
8407
+ var import_jsx_runtime86 = require("react/jsx-runtime");
8370
8408
  var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
8371
8409
  "matchday-predictor",
8372
8410
  "starting-xi",
@@ -8442,7 +8480,7 @@ function GameScreenHost({
8442
8480
  function renderScreen() {
8443
8481
  switch (gameId) {
8444
8482
  case "mystery-tiger":
8445
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8483
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8446
8484
  MysteryTigerGame,
8447
8485
  {
8448
8486
  ...sharedProps,
@@ -8450,7 +8488,7 @@ function GameScreenHost({
8450
8488
  }
8451
8489
  );
8452
8490
  case "higher-or-lower":
8453
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8491
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8454
8492
  HigherOrLowerGame,
8455
8493
  {
8456
8494
  ...sharedProps,
@@ -8458,7 +8496,7 @@ function GameScreenHost({
8458
8496
  }
8459
8497
  );
8460
8498
  case "career-path":
8461
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8499
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8462
8500
  CareerPathGame,
8463
8501
  {
8464
8502
  ...sharedProps,
@@ -8467,7 +8505,7 @@ function GameScreenHost({
8467
8505
  );
8468
8506
  case "beat-the-grid": {
8469
8507
  const btgConfig = safeParseConfig(configJson);
8470
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8508
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8471
8509
  BeatTheGridGame,
8472
8510
  {
8473
8511
  ...sharedProps,
@@ -8477,7 +8515,7 @@ function GameScreenHost({
8477
8515
  );
8478
8516
  }
8479
8517
  case "guess-the-xi":
8480
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8518
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8481
8519
  GuessTheXiGame,
8482
8520
  {
8483
8521
  ...sharedProps,
@@ -8485,7 +8523,7 @@ function GameScreenHost({
8485
8523
  }
8486
8524
  );
8487
8525
  case "daily-quiz":
8488
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8526
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8489
8527
  DailyQuizGame,
8490
8528
  {
8491
8529
  ...sharedProps,
@@ -8493,7 +8531,7 @@ function GameScreenHost({
8493
8531
  }
8494
8532
  );
8495
8533
  case "matchday-predictor":
8496
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8534
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8497
8535
  MatchdayPredictorGame,
8498
8536
  {
8499
8537
  ...sharedProps,
@@ -8501,7 +8539,7 @@ function GameScreenHost({
8501
8539
  }
8502
8540
  );
8503
8541
  case "starting-xi":
8504
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8542
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8505
8543
  StartingXiGame,
8506
8544
  {
8507
8545
  ...sharedProps,
@@ -8509,7 +8547,7 @@ function GameScreenHost({
8509
8547
  }
8510
8548
  );
8511
8549
  case "stat-ladder":
8512
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8550
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8513
8551
  StatLadderGame,
8514
8552
  {
8515
8553
  ...sharedProps,
@@ -8517,7 +8555,7 @@ function GameScreenHost({
8517
8555
  }
8518
8556
  );
8519
8557
  case "fan-motm":
8520
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
8558
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
8521
8559
  FanMotmGame,
8522
8560
  {
8523
8561
  ...sharedProps,
@@ -8525,10 +8563,10 @@ function GameScreenHost({
8525
8563
  }
8526
8564
  );
8527
8565
  default:
8528
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
8566
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
8529
8567
  }
8530
8568
  }
8531
- return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
8569
+ return /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
8532
8570
  }
8533
8571
 
8534
8572
  // src/components/games/ui/fonts.ts
@@ -8545,7 +8583,7 @@ function ensureGamesFonts(doc = document) {
8545
8583
  }
8546
8584
 
8547
8585
  // src/components/GamesPanel.tsx
8548
- var import_jsx_runtime85 = require("react/jsx-runtime");
8586
+ var import_jsx_runtime87 = require("react/jsx-runtime");
8549
8587
  function GamesPanel({
8550
8588
  loggedIn,
8551
8589
  games,
@@ -8558,9 +8596,9 @@ function GamesPanel({
8558
8596
  (0, import_react48.useEffect)(() => {
8559
8597
  ensureGamesFonts();
8560
8598
  }, []);
8561
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(GamesLoginWall, { ui });
8599
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GamesLoginWall, { ui });
8562
8600
  if (selected !== null) {
8563
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8601
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
8564
8602
  GameScreenHost,
8565
8603
  {
8566
8604
  selected,
@@ -8574,7 +8612,7 @@ function GamesPanel({
8574
8612
  }
8575
8613
  ) });
8576
8614
  }
8577
- return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
8615
+ return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
8578
8616
  GamesHub,
8579
8617
  {
8580
8618
  games,
@@ -8589,7 +8627,7 @@ function GamesPanel({
8589
8627
  var import_react49 = require("react");
8590
8628
 
8591
8629
  // src/components/LeaderboardRow.tsx
8592
- var import_jsx_runtime86 = require("react/jsx-runtime");
8630
+ var import_jsx_runtime88 = require("react/jsx-runtime");
8593
8631
  function formatPoints(n) {
8594
8632
  return n.toLocaleString("en");
8595
8633
  }
@@ -8598,14 +8636,14 @@ function LeaderboardWeeklyRow({
8598
8636
  isMe
8599
8637
  }) {
8600
8638
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
8601
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8602
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: rankClass, children: [
8639
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8640
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: rankClass, children: [
8603
8641
  "#",
8604
8642
  row.rank
8605
8643
  ] }),
8606
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
8607
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
8608
- row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: "ss-w-lb2-streak", children: [
8644
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
8645
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
8646
+ row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: "ss-w-lb2-streak", children: [
8609
8647
  "\u{1F525} ",
8610
8648
  row.currentStreak
8611
8649
  ] })
@@ -8616,18 +8654,18 @@ function LeaderboardAllTimeRow({
8616
8654
  isMe
8617
8655
  }) {
8618
8656
  const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
8619
- return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8620
- /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("span", { className: rankClass, children: [
8657
+ return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
8658
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("span", { className: rankClass, children: [
8621
8659
  "#",
8622
8660
  row.rank
8623
8661
  ] }),
8624
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
8625
- /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
8662
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
8663
+ /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
8626
8664
  ] });
8627
8665
  }
8628
8666
 
8629
8667
  // src/components/LeaderboardEmpty.tsx
8630
- var import_jsx_runtime87 = require("react/jsx-runtime");
8668
+ var import_jsx_runtime89 = require("react/jsx-runtime");
8631
8669
  function LeaderboardEmpty({
8632
8670
  segment,
8633
8671
  lastWeek,
@@ -8636,36 +8674,36 @@ function LeaderboardEmpty({
8636
8674
  ui
8637
8675
  }) {
8638
8676
  if (segment === "alltime") {
8639
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
8640
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
8641
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
8677
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
8678
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
8679
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
8642
8680
  ] });
8643
8681
  }
8644
8682
  const fresh = lastWeek != null;
8645
8683
  const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
8646
8684
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
8647
- return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-w-lb-empty", children: [
8648
- weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-w-prize", children: [
8649
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
8650
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
8685
+ return /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "ss-w-lb-empty", children: [
8686
+ weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "ss-w-prize", children: [
8687
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
8688
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
8651
8689
  ] }),
8652
- /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
8653
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
8654
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
8655
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
8656
- onPlay && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
8690
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
8691
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
8692
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
8693
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
8694
+ onPlay && /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
8657
8695
  ] }),
8658
- fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-w-lb-last", children: [
8659
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
8660
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
8661
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
8662
- /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
8696
+ fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime89.jsxs)("div", { className: "ss-w-lb-last", children: [
8697
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
8698
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
8699
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
8700
+ /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
8663
8701
  ] })
8664
8702
  ] });
8665
8703
  }
8666
8704
 
8667
8705
  // src/components/Leaderboard.tsx
8668
- var import_jsx_runtime88 = require("react/jsx-runtime");
8706
+ var import_jsx_runtime90 = require("react/jsx-runtime");
8669
8707
  function Leaderboard({
8670
8708
  data,
8671
8709
  ui,
@@ -8675,9 +8713,9 @@ function Leaderboard({
8675
8713
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
8676
8714
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
8677
8715
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
8678
- return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-w-lb2", children: [
8679
- /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-w-seg", children: [
8680
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8716
+ return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "ss-w-lb2", children: [
8717
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "ss-w-seg", children: [
8718
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
8681
8719
  "button",
8682
8720
  {
8683
8721
  type: "button",
@@ -8687,7 +8725,7 @@ function Leaderboard({
8687
8725
  children: ui.leaderboardThisWeek
8688
8726
  }
8689
8727
  ),
8690
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8728
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
8691
8729
  "button",
8692
8730
  {
8693
8731
  type: "button",
@@ -8698,7 +8736,7 @@ function Leaderboard({
8698
8736
  }
8699
8737
  )
8700
8738
  ] }),
8701
- isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8739
+ isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
8702
8740
  LeaderboardEmpty,
8703
8741
  {
8704
8742
  segment,
@@ -8707,15 +8745,15 @@ function Leaderboard({
8707
8745
  onPlay,
8708
8746
  ui
8709
8747
  }
8710
- ) : /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment, { children: [
8711
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8748
+ ) : /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(import_jsx_runtime90.Fragment, { children: [
8749
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
8712
8750
  LeaderboardWeeklyRow,
8713
8751
  {
8714
8752
  row,
8715
8753
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
8716
8754
  },
8717
8755
  row.operatorUserId
8718
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
8756
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
8719
8757
  LeaderboardAllTimeRow,
8720
8758
  {
8721
8759
  row,
@@ -8723,18 +8761,18 @@ function Leaderboard({
8723
8761
  },
8724
8762
  row.operatorUserId
8725
8763
  )) }),
8726
- /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
8727
- myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-w-lb2-rows", children: [
8728
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
8729
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
8764
+ /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
8765
+ myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { className: "ss-w-lb2-rows", children: [
8766
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
8767
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
8730
8768
  ] })),
8731
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
8769
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
8732
8770
  ] })
8733
8771
  ] });
8734
8772
  }
8735
8773
 
8736
8774
  // src/components/LeaderboardPanel.tsx
8737
- var import_jsx_runtime89 = require("react/jsx-runtime");
8775
+ var import_jsx_runtime91 = require("react/jsx-runtime");
8738
8776
  var EMPTY_PAYLOAD = {
8739
8777
  week: "",
8740
8778
  weeklyTop: [],
@@ -8745,19 +8783,19 @@ var EMPTY_PAYLOAD = {
8745
8783
  lastWeek: null
8746
8784
  };
8747
8785
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
8748
- if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(GamesLoginWall, { ui });
8749
- if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-mon-list" });
8750
- return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
8786
+ if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(GamesLoginWall, { ui });
8787
+ if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-mon-list" });
8788
+ return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
8751
8789
  }
8752
8790
 
8753
8791
  // src/components/PresetSpeedDial.tsx
8754
8792
  var import_react50 = require("react");
8755
- var import_jsx_runtime90 = require("react/jsx-runtime");
8793
+ var import_jsx_runtime92 = require("react/jsx-runtime");
8756
8794
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
8757
8795
  const pillsId = (0, import_react50.useId)();
8758
8796
  const tabIndex = expanded ? 0 : -1;
8759
- return /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
8760
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)(
8797
+ return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
8798
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
8761
8799
  "button",
8762
8800
  {
8763
8801
  ref: buttonRef,
@@ -8768,20 +8806,20 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
8768
8806
  "aria-label": strings.dialName,
8769
8807
  onClick: onToggle,
8770
8808
  children: [
8771
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(SlidersIcon, {}) }),
8772
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(CloseIcon, {}) }),
8773
- showDot && !expanded ? /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
8809
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(SlidersIcon, {}) }),
8810
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(CloseIcon, {}) }),
8811
+ showDot && !expanded ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
8774
8812
  ]
8775
8813
  }
8776
8814
  ),
8777
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
8778
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
8779
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(SlidersIcon, {}),
8780
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
8815
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
8816
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
8817
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(SlidersIcon, {}),
8818
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
8781
8819
  ] }),
8782
- /* @__PURE__ */ (0, import_jsx_runtime90.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
8783
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(ComboIcon, {}),
8784
- /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
8820
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
8821
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ComboIcon, {}),
8822
+ /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
8785
8823
  ] })
8786
8824
  ] })
8787
8825
  ] });
@@ -8789,7 +8827,7 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
8789
8827
 
8790
8828
  // src/components/PresetTools.tsx
8791
8829
  var import_react51 = require("react");
8792
- var import_jsx_runtime91 = require("react/jsx-runtime");
8830
+ var import_jsx_runtime93 = require("react/jsx-runtime");
8793
8831
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
8794
8832
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8795
8833
  const dialogRef = (0, import_react51.useRef)(null);
@@ -8827,79 +8865,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8827
8865
  first.focus();
8828
8866
  }
8829
8867
  };
8830
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
8831
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-tool-head", children: [
8832
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
8833
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(CloseIcon, {}) })
8868
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
8869
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-tool-head", children: [
8870
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
8871
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(CloseIcon, {}) })
8834
8872
  ] }),
8835
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-tool-body", children }),
8836
- footer ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-tool-foot", children: footer }) : null
8873
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-tool-body", children }),
8874
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-tool-foot", children: footer }) : null
8837
8875
  ] }) });
8838
8876
  }
8839
8877
  function fillTemplate(template, slots) {
8840
8878
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
8841
8879
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
8842
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(import_react51.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8880
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_react51.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8843
8881
  });
8844
8882
  }
8845
8883
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
8846
8884
  const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
8847
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-tool-num", children: [
8848
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
8849
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
8885
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { className: "ss-w-tool-num", children: [
8886
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
8887
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
8850
8888
  const c = choices2[Number(e.target.value)];
8851
8889
  if (c) onChoose(c.value);
8852
- }, children: choices2.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
8890
+ }, children: choices2.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
8853
8891
  ] });
8854
8892
  }
8855
8893
  function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
8856
8894
  const sizeText = sizeLabels[currentIdx] ?? "";
8857
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-tool-num", children: [
8858
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
8859
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("option", { value: String(i), children: opt }, i)) })
8895
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { className: "ss-w-tool-num", children: [
8896
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
8897
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("option", { value: String(i), children: opt }, i)) })
8860
8898
  ] });
8861
8899
  }
8862
8900
  function SendButton({ label, display, disabled, onClick }) {
8863
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
8901
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
8864
8902
  }
8865
8903
  function PickList({ picks, formatKickoff }) {
8866
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("li", { className: "ss-w-tool-pick", children: [
8867
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-tool-pick-match", children: [
8904
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("li", { className: "ss-w-tool-pick", children: [
8905
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { className: "ss-w-tool-pick-match", children: [
8868
8906
  p.homeTeamName,
8869
8907
  " \u2013 ",
8870
8908
  p.awayTeamName
8871
8909
  ] }),
8872
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-tool-pick-sel", children: [
8910
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("span", { className: "ss-w-tool-pick-sel", children: [
8873
8911
  p.marketLabel,
8874
8912
  ": ",
8875
8913
  p.selectionLabel,
8876
8914
  p.line ? ` ${p.line}` : ""
8877
8915
  ] }),
8878
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
8879
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
8916
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
8917
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
8880
8918
  ] }, p.matchOddsId)) });
8881
8919
  }
8882
8920
  function ComboPreview({ cell, formatKickoff }) {
8883
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(import_jsx_runtime91.Fragment, { children: [
8884
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(PickList, { picks: cell.combo.legs, formatKickoff }),
8885
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
8921
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment, { children: [
8922
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(PickList, { picks: cell.combo.legs, formatKickoff }),
8923
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
8886
8924
  ] });
8887
8925
  }
8888
8926
  function Unavailable({ text }) {
8889
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-tool-unavailable", children: text });
8927
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("p", { className: "ss-w-tool-unavailable", children: text });
8890
8928
  }
8891
8929
  function AskRow({ icon, ask, ready, send }) {
8892
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
8893
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
8894
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-tool-main", children: [
8895
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-tool-ask", children: ask }),
8896
- ready ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-ready", children: ready }) : null
8930
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
8931
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
8932
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-tool-main", children: [
8933
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("p", { className: "ss-w-tool-ask", children: ask }),
8934
+ ready ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-ready", children: ready }) : null
8897
8935
  ] }),
8898
8936
  send
8899
8937
  ] });
8900
8938
  }
8901
8939
  function RoundSend({ label, display, disabled, onClick }) {
8902
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(SendIcon, {}) });
8940
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(SendIcon, {}) });
8903
8941
  }
8904
8942
  var BIG_COMBO = { total: 50, legs: 6 };
8905
8943
  function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
@@ -8965,77 +9003,77 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
8965
9003
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
8966
9004
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
8967
9005
  const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
8968
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
8969
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
9006
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
9007
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8970
9008
  AskRow,
8971
9009
  {
8972
9010
  icon: "\u{1F3AF}",
8973
9011
  ask: fillTemplate(strings.maxPriceRow, {
8974
9012
  count: String(count),
8975
- price: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
9013
+ price: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
8976
9014
  }),
8977
9015
  ready: singlesReady(maxCell),
8978
- send: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
9016
+ send: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
8979
9017
  if (maxCell) onSend(maxPriceAsk(maxCell, strings));
8980
9018
  } })
8981
9019
  }
8982
9020
  ),
8983
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
9021
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8984
9022
  AskRow,
8985
9023
  {
8986
9024
  icon: "\u{1F4C8}",
8987
9025
  ask: fillTemplate(strings.minPriceRow, {
8988
9026
  count: String(count),
8989
- price: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
9027
+ price: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
8990
9028
  }),
8991
9029
  ready: singlesReady(minCell),
8992
- send: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
9030
+ send: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
8993
9031
  if (minCell) onSend(minPriceAsk(minCell, strings));
8994
9032
  } })
8995
9033
  }
8996
9034
  ),
8997
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
9035
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
8998
9036
  AskRow,
8999
9037
  {
9000
9038
  icon: "\u2728",
9001
9039
  ask: fillTemplate(strings.comboRow, {
9002
- legs: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9003
- total: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9040
+ legs: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9041
+ total: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9004
9042
  }),
9005
9043
  ready: comboReady(comboCell),
9006
- send: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9044
+ send: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9007
9045
  if (comboCell) onSend(comboAsk(comboCell, strings));
9008
9046
  } })
9009
9047
  }
9010
9048
  ),
9011
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
9049
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9012
9050
  AskRow,
9013
9051
  {
9014
9052
  icon: "\u{1F3C6}",
9015
9053
  ask: fillTemplate(strings.bigComboRow, {
9016
- legs: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9017
- total: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9054
+ legs: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9055
+ total: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9018
9056
  }),
9019
9057
  ready: comboReady(bigCell),
9020
- send: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9058
+ send: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9021
9059
  if (bigCell) onSend(comboAsk(bigCell, strings));
9022
9060
  } })
9023
9061
  }
9024
9062
  ),
9025
- markets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(
9063
+ markets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
9026
9064
  AskRow,
9027
9065
  {
9028
9066
  icon: "\u26BD",
9029
9067
  ask: fillTemplate(strings.marketRow, {
9030
- market: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9068
+ market: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9031
9069
  }),
9032
9070
  ready: marketCell ? strings.readyCount(marketCell.count) : null,
9033
- send: /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9071
+ send: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9034
9072
  if (marketCell) onSend(marketAsk(marketCell, strings));
9035
9073
  } })
9036
9074
  }
9037
9075
  ),
9038
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9076
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9039
9077
  ] });
9040
9078
  }
9041
9079
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
@@ -9059,24 +9097,24 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
9059
9097
  const d = strings.comboDisplay(nextLegs, nextTotal);
9060
9098
  setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
9061
9099
  };
9062
- const footer = /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9100
+ const footer = /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9063
9101
  if (cell) onSend(comboAsk(cell, strings));
9064
9102
  } });
9065
- return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9066
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9067
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9068
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
9103
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9104
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9105
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9106
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
9069
9107
  ] }),
9070
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9071
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9072
- /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: "ss-w-tool-stepper", children: [
9073
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9074
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-tool-count", children: legs }),
9075
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9108
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9109
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9110
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-tool-stepper", children: [
9111
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9112
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-tool-count", children: legs }),
9113
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9076
9114
  ] })
9077
9115
  ] }),
9078
- cell ? /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ (0, import_jsx_runtime91.jsx)(Unavailable, { text: strings.unavailable }),
9079
- /* @__PURE__ */ (0, import_jsx_runtime91.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9116
+ cell ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(Unavailable, { text: strings.unavailable }),
9117
+ /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9080
9118
  ] });
9081
9119
  }
9082
9120
 
@@ -9178,7 +9216,7 @@ function markToolSeen() {
9178
9216
  }
9179
9217
 
9180
9218
  // src/components/ChatPanel.tsx
9181
- var import_jsx_runtime92 = require("react/jsx-runtime");
9219
+ var import_jsx_runtime94 = require("react/jsx-runtime");
9182
9220
  var FULLSCREEN_QUERY = "(max-width: 639px)";
9183
9221
  function useIsModal() {
9184
9222
  const [modal, setModal] = (0, import_react53.useState)(false);
@@ -9269,8 +9307,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9269
9307
  focusAfterCloseRef.current = "composer";
9270
9308
  setTool(null);
9271
9309
  }, [tool, onChatTab, presetGrid]);
9272
- return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9273
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9310
+ return /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9311
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9274
9312
  ChatHeader,
9275
9313
  {
9276
9314
  onClose: close,
@@ -9283,7 +9321,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9283
9321
  moreOptionsLabel: ui.moreOptions
9284
9322
  }
9285
9323
  ),
9286
- monitor && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9324
+ monitor && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9287
9325
  TabBar,
9288
9326
  {
9289
9327
  monitor,
@@ -9295,9 +9333,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9295
9333
  gamesEnabled: gamesResult?.enabled ?? false
9296
9334
  }
9297
9335
  ),
9298
- /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9299
- /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9300
- showDial ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9336
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsxs)("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9337
+ /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9338
+ showDial ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9301
9339
  PresetSpeedDial,
9302
9340
  {
9303
9341
  expanded: dial.expanded,
@@ -9309,12 +9347,12 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9309
9347
  buttonRef: dialButtonRef
9310
9348
  }
9311
9349
  ) : null,
9312
- tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
9350
+ tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
9313
9351
  ] }),
9314
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(TodayPanel, { discovery, ui, monitor }),
9315
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
9316
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(OddsPanel, { monitor, ui, slip }),
9317
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9352
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(TodayPanel, { discovery, ui, monitor }),
9353
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
9354
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(OddsPanel, { monitor, ui, slip }),
9355
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9318
9356
  GamesPanel,
9319
9357
  {
9320
9358
  loggedIn: !!loggedIn,
@@ -9328,7 +9366,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9328
9366
  }
9329
9367
  }
9330
9368
  ),
9331
- monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9369
+ monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9332
9370
  LeaderboardPanel,
9333
9371
  {
9334
9372
  loggedIn: !!loggedIn,
@@ -9338,7 +9376,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9338
9376
  ui
9339
9377
  }
9340
9378
  ),
9341
- (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
9379
+ (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
9342
9380
  ChatInput,
9343
9381
  {
9344
9382
  ref: inputRef,
@@ -9356,9 +9394,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9356
9394
  }
9357
9395
 
9358
9396
  // src/components/HostEventsProvider.tsx
9359
- var import_jsx_runtime93 = require("react/jsx-runtime");
9397
+ var import_jsx_runtime95 = require("react/jsx-runtime");
9360
9398
  function HostEventsProvider({ value, children }) {
9361
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(SlipStateContext.Provider, { value: value.slipState, children });
9399
+ return /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SlipStateContext.Provider, { value: value.slipState, children });
9362
9400
  }
9363
9401
 
9364
9402
  // src/styles/css.generated.ts
@@ -11003,10 +11041,41 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
11003
11041
  .ss-g-motm-pill { flex: none; padding: 3px 8px; font-size: 11px; }
11004
11042
  .ss-g-motm-foot { font-size: 14px; font-weight: 600; }
11005
11043
  .ss-g-motm-fun { font-size: 11px; color: var(--ss-g-faint); }
11044
+
11045
+ /* \u2500\u2500 tap-to-answer tray + per-game team-colour band (u503) \u2500\u2500 */
11046
+ .ss-g-tray { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; max-height: 150px; overflow-y: auto; overscroll-behavior: contain; padding: 2px; }
11047
+ .ss-g-tray-chip { display: flex; flex-direction: column; align-items: center; gap: 4px; min-height: 78px; padding: 6px 4px; border: 1px solid var(--ss-g-line); border-radius: 14px; background: var(--ss-g-surface); color: var(--ss-g-ink); font-family: var(--ss-g-font-body); cursor: pointer; }
11048
+ .ss-g-tray-chip:hover, .ss-g-tray-chip:focus-visible { background: var(--ss-g-raised); border-color: var(--ss-w-accent); outline: none; }
11049
+ .ss-g-tray-chip:disabled { opacity: .5; cursor: default; }
11050
+ .ss-g-tray-av { width: 38px; height: 38px; flex: none; border-radius: 50%; overflow: hidden; display: grid; place-items: center; background: var(--ss-g-raised); color: var(--ss-g-muted); font-size: 14px; font-weight: 700; }
11051
+ .ss-g-tray-av img { width: 100%; height: 100%; object-fit: cover; }
11052
+ .ss-g-tray-name { width: 100%; display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
11053
+ .ss-g-tray-first { max-width: 100%; font-size: 10px; font-weight: 500; color: var(--ss-g-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
11054
+ .ss-g-tray-last { max-width: 100%; font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
11055
+
11056
+ /* Each game gets its own band colour: the operator accent mixed into the ground, hue-nudged per game.
11057
+ Browsers without relative colour syntax keep the plain accent mix. */
11058
+ .ss-g-screen[data-game] { --ss-g-band: color-mix(in srgb, var(--ss-w-accent) var(--ss-g-band-mix, 18%), var(--ss-g-ground)); }
11059
+ @supports (color: oklch(from red l c h)) {
11060
+ .ss-g-screen[data-game] { --ss-g-band: oklch(from color-mix(in srgb, var(--ss-w-accent) var(--ss-g-band-mix, 18%), var(--ss-g-ground)) l calc(c * 1.5) calc(h + var(--ss-g-hue-shift, 0))); }
11061
+ }
11062
+ .ss-g-screen[data-game="mystery-tiger"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 0; }
11063
+ .ss-g-screen[data-game="career-path"] { --ss-g-band-mix: 11%; --ss-g-hue-shift: -24; }
11064
+ .ss-g-screen[data-game] > .ss-g-head { background: var(--ss-g-band); border-radius: 0 0 24px 24px; padding-bottom: 12px; }
11065
+ .ss-g-worth { flex: none; display: flex; align-items: baseline; gap: 10px; font-size: 13px; color: var(--ss-g-muted); }
11066
+ .ss-g-worth-now { font-family: var(--ss-g-font-display); font-weight: 800; font-size: 18px; letter-spacing: .02em; text-transform: uppercase; color: var(--ss-w-accent); }
11067
+ .ss-g-screen[data-game="beat-the-grid"] { --ss-g-band-mix: 13%; --ss-g-hue-shift: 14; }
11068
+ .ss-g-screen[data-game="guess-the-xi"] { --ss-g-band-mix: 12%; --ss-g-hue-shift: -36; }
11069
+ .ss-g-screen[data-game="higher-or-lower"] { --ss-g-band-mix: 16%; --ss-g-hue-shift: 28; }
11070
+ .ss-g-screen[data-game="daily-quiz"] { --ss-g-band-mix: 10%; --ss-g-hue-shift: -12; }
11071
+ .ss-g-screen[data-game="stat-ladder"] { --ss-g-band-mix: 15%; --ss-g-hue-shift: 36; }
11072
+ .ss-g-screen[data-game="matchday-predictor"] { --ss-g-band-mix: 18%; --ss-g-hue-shift: -4; }
11073
+ .ss-g-screen[data-game="starting-xi"] { --ss-g-band-mix: 9%; --ss-g-hue-shift: -30; }
11074
+ .ss-g-screen[data-game="fan-motm"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 8; }
11006
11075
  `;
11007
11076
 
11008
11077
  // src/StatsWidget.tsx
11009
- var import_jsx_runtime94 = require("react/jsx-runtime");
11078
+ var import_jsx_runtime96 = require("react/jsx-runtime");
11010
11079
  function buildClient(props) {
11011
11080
  try {
11012
11081
  if ("client" in props && props.client) {
@@ -11217,7 +11286,7 @@ function StatsWidget(props) {
11217
11286
  }, [built, ui.injectStyles]);
11218
11287
  if (!built) return null;
11219
11288
  const attrs = themeAttrs(ui);
11220
- return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
11289
+ return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
11221
11290
  ChatPanel,
11222
11291
  {
11223
11292
  controller,
@@ -11232,7 +11301,7 @@ function StatsWidget(props) {
11232
11301
  conversation: built?.conversation ?? null,
11233
11302
  presetGrid
11234
11303
  }
11235
- ) : /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(
11304
+ ) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
11236
11305
  ChatFab,
11237
11306
  {
11238
11307
  label: ui.launcherLabel,