@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/CHANGELOG.md +6 -0
- package/dist/index.cjs +699 -630
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +700 -631
- package/dist/index.js.map +1 -1
- package/dist/styles.css +31 -0
- package/package.json +1 -1
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/
|
|
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,
|
|
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
|
|
6481
|
+
var import_jsx_runtime69 = require("react/jsx-runtime");
|
|
6434
6482
|
function Silhouette({ size, variant = "default" }) {
|
|
6435
|
-
return /* @__PURE__ */ (0,
|
|
6436
|
-
/* @__PURE__ */ (0,
|
|
6437
|
-
/* @__PURE__ */ (0,
|
|
6438
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
6500
|
+
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
6453
6501
|
function ResultCard({ tone, title, score, detail, onBack, ui }) {
|
|
6454
|
-
return /* @__PURE__ */ (0,
|
|
6455
|
-
/* @__PURE__ */ (0,
|
|
6456
|
-
score !== void 0 && /* @__PURE__ */ (0,
|
|
6457
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6461
|
-
onBack && /* @__PURE__ */ (0,
|
|
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/
|
|
6466
|
-
var
|
|
6467
|
-
function
|
|
6468
|
-
|
|
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
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6611
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6622
|
-
config && /* @__PURE__ */ (0,
|
|
6623
|
-
/* @__PURE__ */ (0,
|
|
6624
|
-
/* @__PURE__ */ (0,
|
|
6625
|
-
|
|
6626
|
-
|
|
6627
|
-
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,
|
|
6630
|
-
/* @__PURE__ */ (0,
|
|
6631
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6635
|
-
guessResults.length > 0 && /* @__PURE__ */ (0,
|
|
6636
|
-
/* @__PURE__ */ (0,
|
|
6637
|
-
/* @__PURE__ */ (0,
|
|
6638
|
-
keys.map((k) => /* @__PURE__ */ (0,
|
|
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,
|
|
6644
|
-
/* @__PURE__ */ (0,
|
|
6645
|
-
/* @__PURE__ */ (0,
|
|
6646
|
-
/* @__PURE__ */ (0,
|
|
6647
|
-
first && /* @__PURE__ */ (0,
|
|
6648
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6663
|
-
arrow && /* @__PURE__ */ (0,
|
|
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,
|
|
6673
|
-
/* @__PURE__ */ (0,
|
|
6674
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6678
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6687
|
-
/* @__PURE__ */ (0,
|
|
6688
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6703
|
-
|
|
6704
|
-
|
|
6705
|
-
|
|
6706
|
-
|
|
6707
|
-
|
|
6708
|
-
|
|
6709
|
-
|
|
6710
|
-
|
|
6711
|
-
|
|
6712
|
-
|
|
6713
|
-
|
|
6714
|
-
|
|
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
|
|
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,
|
|
6747
|
-
/* @__PURE__ */ (0,
|
|
6748
|
-
/* @__PURE__ */ (0,
|
|
6749
|
-
first && /* @__PURE__ */ (0,
|
|
6750
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6783
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6794
|
-
config && /* @__PURE__ */ (0,
|
|
6795
|
-
/* @__PURE__ */ (0,
|
|
6796
|
-
/* @__PURE__ */ (0,
|
|
6797
|
-
/* @__PURE__ */ (0,
|
|
6798
|
-
/* @__PURE__ */ (0,
|
|
6799
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6802
|
-
/* @__PURE__ */ (0,
|
|
6803
|
-
/* @__PURE__ */ (0,
|
|
6804
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6807
|
-
/* @__PURE__ */ (0,
|
|
6808
|
-
/* @__PURE__ */ (0,
|
|
6809
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6813
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6819
|
-
lastAnswer.wasCorrect ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6835
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6840
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
6895
|
-
/* @__PURE__ */ (0,
|
|
6896
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
6921
|
-
/* @__PURE__ */ (0,
|
|
6922
|
-
/* @__PURE__ */ (0,
|
|
6923
|
-
/* @__PURE__ */ (0,
|
|
6924
|
-
|
|
6925
|
-
/* @__PURE__ */ (0,
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6937
|
-
/* @__PURE__ */ (0,
|
|
6938
|
-
/* @__PURE__ */ (0,
|
|
6939
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
6942
|
-
/* @__PURE__ */ (0,
|
|
6943
|
-
/* @__PURE__ */ (0,
|
|
6944
|
-
/* @__PURE__ */ (0,
|
|
6945
|
-
spell.isLoan && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6954
|
-
/* @__PURE__ */ (0,
|
|
6955
|
-
/* @__PURE__ */ (0,
|
|
6956
|
-
hidden > 1 && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6961
|
-
/* @__PURE__ */ (0,
|
|
6962
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
6978
|
-
|
|
6979
|
-
|
|
6980
|
-
|
|
6981
|
-
|
|
6982
|
-
|
|
6983
|
-
|
|
6984
|
-
|
|
6985
|
-
|
|
6986
|
-
|
|
6987
|
-
|
|
6988
|
-
|
|
6989
|
-
|
|
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
|
-
|
|
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,
|
|
7063
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconCalendar, {});
|
|
7028
7064
|
case "ball":
|
|
7029
|
-
return /* @__PURE__ */ (0,
|
|
7065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconBall, {});
|
|
7030
7066
|
case "boot":
|
|
7031
|
-
return /* @__PURE__ */ (0,
|
|
7067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconBoot, {});
|
|
7032
7068
|
case "gloves":
|
|
7033
|
-
return /* @__PURE__ */ (0,
|
|
7069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconGloves, {});
|
|
7034
7070
|
case "shield":
|
|
7035
|
-
return /* @__PURE__ */ (0,
|
|
7071
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconShield, {});
|
|
7036
7072
|
default:
|
|
7037
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
|
|
7047
7083
|
case "coach":
|
|
7048
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7088
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(import_jsx_runtime78.Fragment, {});
|
|
7053
7089
|
default:
|
|
7054
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
7099
|
-
/* @__PURE__ */ (0,
|
|
7100
|
-
/* @__PURE__ */ (0,
|
|
7101
|
-
/* @__PURE__ */ (0,
|
|
7102
|
-
/* @__PURE__ */ (0,
|
|
7103
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7147
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(IconClose, {})
|
|
7112
7148
|
}
|
|
7113
7149
|
)
|
|
7114
7150
|
] }),
|
|
7115
|
-
playerPool.length === 0 ? /* @__PURE__ */ (0,
|
|
7116
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7135
|
-
/* @__PURE__ */ (0,
|
|
7136
|
-
/* @__PURE__ */ (0,
|
|
7137
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7176
|
-
/* @__PURE__ */ (0,
|
|
7177
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7191
|
-
/* @__PURE__ */ (0,
|
|
7192
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7235
|
+
right: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
|
|
7200
7236
|
}
|
|
7201
7237
|
),
|
|
7202
|
-
/* @__PURE__ */ (0,
|
|
7203
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7217
|
-
/* @__PURE__ */ (0,
|
|
7218
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7225
|
-
/* @__PURE__ */ (0,
|
|
7226
|
-
/* @__PURE__ */ (0,
|
|
7227
|
-
] }) : abbr === rowLabel ? /* @__PURE__ */ (0,
|
|
7228
|
-
/* @__PURE__ */ (0,
|
|
7229
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7232
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7249
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7271
|
-
] }) : /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
7351
|
+
var import_jsx_runtime79 = require("react/jsx-runtime");
|
|
7316
7352
|
function PitchSvg({ variant }) {
|
|
7317
|
-
return /* @__PURE__ */ (0,
|
|
7318
|
-
/* @__PURE__ */ (0,
|
|
7319
|
-
variant === "full" ? /* @__PURE__ */ (0,
|
|
7320
|
-
/* @__PURE__ */ (0,
|
|
7321
|
-
/* @__PURE__ */ (0,
|
|
7322
|
-
/* @__PURE__ */ (0,
|
|
7323
|
-
/* @__PURE__ */ (0,
|
|
7324
|
-
] }) : /* @__PURE__ */ (0,
|
|
7325
|
-
/* @__PURE__ */ (0,
|
|
7326
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
7433
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7444
|
-
config && /* @__PURE__ */ (0,
|
|
7445
|
-
/* @__PURE__ */ (0,
|
|
7446
|
-
|
|
7447
|
-
|
|
7448
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7455
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7467
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7483
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7487
|
-
/* @__PURE__ */ (0,
|
|
7488
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7493
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7505
|
-
/* @__PURE__ */ (0,
|
|
7506
|
-
/* @__PURE__ */ (0,
|
|
7507
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7512
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
7519
|
-
/* @__PURE__ */ (0,
|
|
7520
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
7569
|
-
first && /* @__PURE__ */ (0,
|
|
7570
|
-
/* @__PURE__ */ (0,
|
|
7571
|
-
suffix && /* @__PURE__ */ (0,
|
|
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,
|
|
7591
|
-
/* @__PURE__ */ (0,
|
|
7592
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7628
|
-
/* @__PURE__ */ (0,
|
|
7629
|
-
/* @__PURE__ */ (0,
|
|
7630
|
-
/* @__PURE__ */ (0,
|
|
7631
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7645
|
-
/* @__PURE__ */ (0,
|
|
7646
|
-
r && /* @__PURE__ */ (0,
|
|
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,
|
|
7687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: cls, children: opt }, optIdx);
|
|
7651
7688
|
}) }),
|
|
7652
|
-
r?.revealText && /* @__PURE__ */ (0,
|
|
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,
|
|
7661
|
-
/* @__PURE__ */ (0,
|
|
7662
|
-
/* @__PURE__ */ (0,
|
|
7663
|
-
/* @__PURE__ */ (0,
|
|
7664
|
-
/* @__PURE__ */ (0,
|
|
7665
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7679
|
-
/* @__PURE__ */ (0,
|
|
7680
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7688
|
-
page > 0 && /* @__PURE__ */ (0,
|
|
7689
|
-
isLast ? /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
7731
|
-
/* @__PURE__ */ (0,
|
|
7732
|
-
/* @__PURE__ */ (0,
|
|
7733
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7738
|
-
edit && /* @__PURE__ */ (0,
|
|
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,
|
|
7783
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconPlus, { size: 18 })
|
|
7747
7784
|
}
|
|
7748
7785
|
),
|
|
7749
|
-
/* @__PURE__ */ (0,
|
|
7750
|
-
edit && /* @__PURE__ */ (0,
|
|
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,
|
|
7795
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(IconMinus, {})
|
|
7759
7796
|
}
|
|
7760
7797
|
)
|
|
7761
7798
|
] });
|
|
7762
|
-
return /* @__PURE__ */ (0,
|
|
7763
|
-
/* @__PURE__ */ (0,
|
|
7764
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
7774
|
-
/* @__PURE__ */ (0,
|
|
7775
|
-
/* @__PURE__ */ (0,
|
|
7776
|
-
ok ? /* @__PURE__ */ (0,
|
|
7777
|
-
/* @__PURE__ */ (0,
|
|
7778
|
-
detail ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7815
|
-
config && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7849
|
-
config && /* @__PURE__ */ (0,
|
|
7850
|
-
/* @__PURE__ */ (0,
|
|
7851
|
-
/* @__PURE__ */ (0,
|
|
7852
|
-
/* @__PURE__ */ (0,
|
|
7853
|
-
/* @__PURE__ */ (0,
|
|
7854
|
-
!clientState.firstScorerVoid && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7890
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7902
|
-
/* @__PURE__ */ (0,
|
|
7903
|
-
/* @__PURE__ */ (0,
|
|
7904
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7931
|
-
/* @__PURE__ */ (0,
|
|
7932
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
7990
|
+
locked && /* @__PURE__ */ (0, import_jsx_runtime82.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
|
|
7954
7991
|
] }),
|
|
7955
|
-
/* @__PURE__ */ (0,
|
|
7956
|
-
/* @__PURE__ */ (0,
|
|
7957
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8118
|
+
right: /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { children: formation })
|
|
8082
8119
|
}
|
|
8083
8120
|
),
|
|
8084
|
-
/* @__PURE__ */ (0,
|
|
8085
|
-
/* @__PURE__ */ (0,
|
|
8086
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8105
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8113
|
-
/* @__PURE__ */ (0,
|
|
8114
|
-
/* @__PURE__ */ (0,
|
|
8115
|
-
/* @__PURE__ */ (0,
|
|
8116
|
-
] }) : /* @__PURE__ */ (0,
|
|
8117
|
-
activeSlot && /* @__PURE__ */ (0,
|
|
8118
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8131
|
-
/* @__PURE__ */ (0,
|
|
8132
|
-
/* @__PURE__ */ (0,
|
|
8133
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8139
|
-
/* @__PURE__ */ (0,
|
|
8140
|
-
/* @__PURE__ */ (0,
|
|
8141
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8173
|
-
first && /* @__PURE__ */ (0,
|
|
8174
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8210
|
-
/* @__PURE__ */ (0,
|
|
8211
|
-
|
|
8212
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8252
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("em", { children: question.emph }),
|
|
8215
8253
|
question.post
|
|
8216
8254
|
] })
|
|
8217
8255
|
] }),
|
|
8218
|
-
/* @__PURE__ */ (0,
|
|
8219
|
-
(rung) => rung.rank === 2 ? /* @__PURE__ */ (0,
|
|
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,
|
|
8227
|
-
revealed ? /* @__PURE__ */ (0,
|
|
8228
|
-
revealed ? /* @__PURE__ */ (0,
|
|
8229
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8234
|
-
/* @__PURE__ */ (0,
|
|
8235
|
-
/* @__PURE__ */ (0,
|
|
8236
|
-
/* @__PURE__ */ (0,
|
|
8237
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8241
|
-
/* @__PURE__ */ (0,
|
|
8242
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8258
|
-
/* @__PURE__ */ (0,
|
|
8259
|
-
selectedId === p.playerId && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8275
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8341
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8353
|
-
/* @__PURE__ */ (0,
|
|
8354
|
-
isVoted && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8362
|
-
!alreadyVoted && /* @__PURE__ */ (0,
|
|
8363
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
|
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,
|
|
8599
|
+
if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GamesLoginWall, { ui });
|
|
8562
8600
|
if (selected !== null) {
|
|
8563
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
8602
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8607
|
-
/* @__PURE__ */ (0,
|
|
8608
|
-
row.currentStreak > 0 && /* @__PURE__ */ (0,
|
|
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,
|
|
8620
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8625
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8640
|
-
/* @__PURE__ */ (0,
|
|
8641
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8648
|
-
weeklyPrize && /* @__PURE__ */ (0,
|
|
8649
|
-
/* @__PURE__ */ (0,
|
|
8650
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8653
|
-
/* @__PURE__ */ (0,
|
|
8654
|
-
/* @__PURE__ */ (0,
|
|
8655
|
-
/* @__PURE__ */ (0,
|
|
8656
|
-
onPlay && /* @__PURE__ */ (0,
|
|
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,
|
|
8659
|
-
/* @__PURE__ */ (0,
|
|
8660
|
-
/* @__PURE__ */ (0,
|
|
8661
|
-
/* @__PURE__ */ (0,
|
|
8662
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8679
|
-
/* @__PURE__ */ (0,
|
|
8680
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8711
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8727
|
-
myRow != null && (offBoard ? /* @__PURE__ */ (0,
|
|
8728
|
-
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0,
|
|
8729
|
-
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
8749
|
-
if (data === null && loading) return /* @__PURE__ */ (0,
|
|
8750
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8760
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8772
|
-
/* @__PURE__ */ (0,
|
|
8773
|
-
showDot && !expanded ? /* @__PURE__ */ (0,
|
|
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,
|
|
8778
|
-
/* @__PURE__ */ (0,
|
|
8779
|
-
/* @__PURE__ */ (0,
|
|
8780
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8783
|
-
/* @__PURE__ */ (0,
|
|
8784
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8831
|
-
/* @__PURE__ */ (0,
|
|
8832
|
-
/* @__PURE__ */ (0,
|
|
8833
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8836
|
-
footer ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8848
|
-
/* @__PURE__ */ (0,
|
|
8849
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8858
|
-
/* @__PURE__ */ (0,
|
|
8859
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8867
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8879
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8884
|
-
/* @__PURE__ */ (0,
|
|
8885
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8893
|
-
/* @__PURE__ */ (0,
|
|
8894
|
-
/* @__PURE__ */ (0,
|
|
8895
|
-
/* @__PURE__ */ (0,
|
|
8896
|
-
ready ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8969
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9003
|
-
total: /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9017
|
-
total: /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9066
|
-
/* @__PURE__ */ (0,
|
|
9067
|
-
/* @__PURE__ */ (0,
|
|
9068
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9071
|
-
/* @__PURE__ */ (0,
|
|
9072
|
-
/* @__PURE__ */ (0,
|
|
9073
|
-
/* @__PURE__ */ (0,
|
|
9074
|
-
/* @__PURE__ */ (0,
|
|
9075
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9079
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
9273
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9299
|
-
/* @__PURE__ */ (0,
|
|
9300
|
-
showDial ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9315
|
-
monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0,
|
|
9316
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0,
|
|
9317
|
-
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
|
9397
|
+
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
9360
9398
|
function HostEventsProvider({ value, children }) {
|
|
9361
|
-
return /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
11304
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
11236
11305
|
ChatFab,
|
|
11237
11306
|
{
|
|
11238
11307
|
label: ui.launcherLabel,
|