@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.js
CHANGED
|
@@ -170,6 +170,8 @@ var STRINGS = {
|
|
|
170
170
|
statRank: "Rank",
|
|
171
171
|
unitDays: "days",
|
|
172
172
|
unitPts: "pts",
|
|
173
|
+
worthNow: (pts) => `Worth ${pts} pts now`,
|
|
174
|
+
worthAfterMiss: (pts) => `${pts} after a miss`,
|
|
173
175
|
thisWeek: "this week",
|
|
174
176
|
newToday: "New today",
|
|
175
177
|
resume: "Resume",
|
|
@@ -510,6 +512,8 @@ var STRINGS = {
|
|
|
510
512
|
statRank: "S\u0131ra",
|
|
511
513
|
unitDays: "g\xFCn",
|
|
512
514
|
unitPts: "puan",
|
|
515
|
+
worthNow: (pts) => `\u015Eimdi ${pts} puan`,
|
|
516
|
+
worthAfterMiss: (pts) => `yanl\u0131\u015Fta ${pts}`,
|
|
513
517
|
thisWeek: "bu hafta",
|
|
514
518
|
newToday: "Bug\xFCn yeni",
|
|
515
519
|
resume: "Devam et",
|
|
@@ -6385,53 +6389,104 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6385
6389
|
] });
|
|
6386
6390
|
}
|
|
6387
6391
|
|
|
6392
|
+
// src/components/games/ui/AnswerTray.tsx
|
|
6393
|
+
import { Fragment as Fragment11, jsx as jsx67, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
6394
|
+
function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
|
|
6395
|
+
const needle = query.trim().toLowerCase();
|
|
6396
|
+
const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
|
|
6397
|
+
return /* @__PURE__ */ jsxs59(Fragment11, { children: [
|
|
6398
|
+
/* @__PURE__ */ jsx67(
|
|
6399
|
+
SearchField,
|
|
6400
|
+
{
|
|
6401
|
+
id,
|
|
6402
|
+
label,
|
|
6403
|
+
labelHidden: true,
|
|
6404
|
+
placeholder,
|
|
6405
|
+
value: query,
|
|
6406
|
+
onChange: onQuery,
|
|
6407
|
+
disabled
|
|
6408
|
+
}
|
|
6409
|
+
),
|
|
6410
|
+
shown.length > 0 && /* @__PURE__ */ jsx67("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
|
|
6411
|
+
const { first, last } = splitName(o.name);
|
|
6412
|
+
return /* @__PURE__ */ jsxs59(
|
|
6413
|
+
"button",
|
|
6414
|
+
{
|
|
6415
|
+
type: "button",
|
|
6416
|
+
role: "option",
|
|
6417
|
+
"aria-selected": false,
|
|
6418
|
+
"aria-label": o.name,
|
|
6419
|
+
className: "ss-g-tray-chip",
|
|
6420
|
+
disabled,
|
|
6421
|
+
onClick: () => onPick(o.id),
|
|
6422
|
+
children: [
|
|
6423
|
+
/* @__PURE__ */ jsx67(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
|
|
6424
|
+
/* @__PURE__ */ jsxs59("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
|
|
6425
|
+
first && /* @__PURE__ */ jsx67("span", { className: "ss-g-tray-first", children: first }),
|
|
6426
|
+
/* @__PURE__ */ jsx67("span", { className: "ss-g-tray-last", children: last })
|
|
6427
|
+
] })
|
|
6428
|
+
]
|
|
6429
|
+
},
|
|
6430
|
+
o.id
|
|
6431
|
+
);
|
|
6432
|
+
}) })
|
|
6433
|
+
] });
|
|
6434
|
+
}
|
|
6435
|
+
|
|
6388
6436
|
// src/components/games/ui/FooterBar.tsx
|
|
6389
|
-
import { jsx as
|
|
6437
|
+
import { jsx as jsx68 } from "react/jsx-runtime";
|
|
6390
6438
|
function FooterBar({ children }) {
|
|
6391
|
-
return /* @__PURE__ */
|
|
6439
|
+
return /* @__PURE__ */ jsx68("div", { className: "ss-g-footer", children });
|
|
6392
6440
|
}
|
|
6393
6441
|
|
|
6394
6442
|
// src/components/games/ui/Silhouette.tsx
|
|
6395
|
-
import { jsx as
|
|
6443
|
+
import { jsx as jsx69, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
6396
6444
|
function Silhouette({ size, variant = "default" }) {
|
|
6397
|
-
return /* @__PURE__ */
|
|
6398
|
-
/* @__PURE__ */
|
|
6399
|
-
/* @__PURE__ */
|
|
6400
|
-
/* @__PURE__ */
|
|
6445
|
+
return /* @__PURE__ */ jsxs60("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
|
|
6446
|
+
/* @__PURE__ */ jsxs60("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
|
|
6447
|
+
/* @__PURE__ */ jsx69("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
|
|
6448
|
+
/* @__PURE__ */ jsx69("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
|
|
6401
6449
|
] }),
|
|
6402
|
-
variant === "mystery" && /* @__PURE__ */
|
|
6450
|
+
variant === "mystery" && /* @__PURE__ */ jsx69("span", { className: "ss-g-sil-q", children: "?" })
|
|
6403
6451
|
] });
|
|
6404
6452
|
}
|
|
6405
6453
|
|
|
6406
6454
|
// src/components/games/ui/GameButton.tsx
|
|
6407
|
-
import { jsx as
|
|
6455
|
+
import { jsx as jsx70 } from "react/jsx-runtime";
|
|
6408
6456
|
function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
|
|
6409
6457
|
const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
|
|
6410
|
-
return /* @__PURE__ */
|
|
6458
|
+
return /* @__PURE__ */ jsx70("button", { type, className: cls, ...rest });
|
|
6411
6459
|
}
|
|
6412
6460
|
|
|
6413
6461
|
// src/components/games/ui/ResultCard.tsx
|
|
6414
|
-
import { jsx as
|
|
6462
|
+
import { jsx as jsx71, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
6415
6463
|
function ResultCard({ tone, title, score, detail, onBack, ui }) {
|
|
6416
|
-
return /* @__PURE__ */
|
|
6417
|
-
/* @__PURE__ */
|
|
6418
|
-
score !== void 0 && /* @__PURE__ */
|
|
6419
|
-
/* @__PURE__ */
|
|
6464
|
+
return /* @__PURE__ */ jsxs61("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
|
|
6465
|
+
/* @__PURE__ */ jsx71("span", { className: "ss-g-result-title", children: title }),
|
|
6466
|
+
score !== void 0 && /* @__PURE__ */ jsxs61("span", { className: "ss-g-result-score", children: [
|
|
6467
|
+
/* @__PURE__ */ jsx71("span", { className: "ss-g-result-num", children: score }),
|
|
6420
6468
|
ui.games.unitPts
|
|
6421
6469
|
] }),
|
|
6422
|
-
detail && /* @__PURE__ */
|
|
6423
|
-
onBack && /* @__PURE__ */
|
|
6470
|
+
detail && /* @__PURE__ */ jsx71("span", { className: "ss-g-result-detail", children: detail }),
|
|
6471
|
+
onBack && /* @__PURE__ */ jsx71(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
|
|
6424
6472
|
] });
|
|
6425
6473
|
}
|
|
6426
6474
|
|
|
6427
|
-
// src/components/games/ui/
|
|
6428
|
-
import { jsx as
|
|
6429
|
-
function
|
|
6430
|
-
|
|
6475
|
+
// src/components/games/ui/PointsLadderRow.tsx
|
|
6476
|
+
import { jsx as jsx72, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
6477
|
+
function PointsLadderRow({ ladder, guessesUsed, ui }) {
|
|
6478
|
+
if (!ladder || ladder.length === 0) return null;
|
|
6479
|
+
const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
|
|
6480
|
+
const next = ladder[guessesUsed + 1];
|
|
6481
|
+
if (now === void 0) return null;
|
|
6482
|
+
return /* @__PURE__ */ jsxs62("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
|
|
6483
|
+
/* @__PURE__ */ jsx72("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
|
|
6484
|
+
next !== void 0 && next !== now && /* @__PURE__ */ jsx72("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
|
|
6485
|
+
] });
|
|
6431
6486
|
}
|
|
6432
6487
|
|
|
6433
6488
|
// src/components/games/MysteryTigerGame.tsx
|
|
6434
|
-
import { Fragment as
|
|
6489
|
+
import { Fragment as Fragment12, jsx as jsx73, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
6435
6490
|
function parseClientState(json) {
|
|
6436
6491
|
if (!json) return null;
|
|
6437
6492
|
try {
|
|
@@ -6545,9 +6600,7 @@ function MysteryTigerGame({
|
|
|
6545
6600
|
const totalGuesses = clientState ? clientState.guessesUsed + clientState.guessesRemaining : MAX_GUESSES;
|
|
6546
6601
|
const score = result?.score ?? 0;
|
|
6547
6602
|
const revealName = isOver ? clientState?.revealedPlayerName : void 0;
|
|
6548
|
-
const
|
|
6549
|
-
(p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
6550
|
-
) : [];
|
|
6603
|
+
const pool = config && !isOver ? config.squadPlayers.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
|
|
6551
6604
|
function handleSelect(playerId) {
|
|
6552
6605
|
if (!config || isOver || submitting) return;
|
|
6553
6606
|
const prevGuesses = guessResults.map((g) => g.playerId);
|
|
@@ -6555,22 +6608,22 @@ function MysteryTigerGame({
|
|
|
6555
6608
|
setQuery("");
|
|
6556
6609
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
6557
6610
|
}
|
|
6558
|
-
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */
|
|
6611
|
+
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs63(Chip, { variant: "accent", children: [
|
|
6559
6612
|
score,
|
|
6560
6613
|
" ",
|
|
6561
6614
|
ui.games.unitPts
|
|
6562
|
-
] }) : /* @__PURE__ */
|
|
6615
|
+
] }) : /* @__PURE__ */ jsx73("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs63(Chip, { children: [
|
|
6563
6616
|
ui.games.guess,
|
|
6564
6617
|
" ",
|
|
6565
|
-
/* @__PURE__ */
|
|
6618
|
+
/* @__PURE__ */ jsx73("span", { className: "ss-g-num", children: guessesUsed + 1 }),
|
|
6566
6619
|
" / ",
|
|
6567
6620
|
totalGuesses
|
|
6568
6621
|
] }) });
|
|
6569
6622
|
const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
|
|
6570
6623
|
const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
|
|
6571
6624
|
const known = deriveKnownAttributes(guessResults, keys);
|
|
6572
|
-
return /* @__PURE__ */
|
|
6573
|
-
/* @__PURE__ */
|
|
6625
|
+
return /* @__PURE__ */ jsxs63("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
|
|
6626
|
+
/* @__PURE__ */ jsx73(
|
|
6574
6627
|
GameHeader,
|
|
6575
6628
|
{
|
|
6576
6629
|
title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
|
|
@@ -6580,40 +6633,41 @@ function MysteryTigerGame({
|
|
|
6580
6633
|
backLabel: ui.back
|
|
6581
6634
|
}
|
|
6582
6635
|
),
|
|
6583
|
-
!config && /* @__PURE__ */
|
|
6584
|
-
config && /* @__PURE__ */
|
|
6585
|
-
/* @__PURE__ */
|
|
6586
|
-
/* @__PURE__ */
|
|
6587
|
-
|
|
6588
|
-
|
|
6589
|
-
revealName
|
|
6636
|
+
!config && /* @__PURE__ */ jsx73("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
6637
|
+
config && /* @__PURE__ */ jsxs63(Fragment12, { children: [
|
|
6638
|
+
/* @__PURE__ */ jsxs63("div", { className: "ss-g-body", children: [
|
|
6639
|
+
!isOver && /* @__PURE__ */ jsx73(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
|
|
6640
|
+
/* @__PURE__ */ jsxs63("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
|
|
6641
|
+
/* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-portrait", children: [
|
|
6642
|
+
revealName ? /* @__PURE__ */ jsx73(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx73(Silhouette, { size: 150, variant: "mystery" }),
|
|
6643
|
+
revealName && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-reveal-name", children: revealName })
|
|
6590
6644
|
] }),
|
|
6591
|
-
/* @__PURE__ */
|
|
6592
|
-
/* @__PURE__ */
|
|
6593
|
-
/* @__PURE__ */
|
|
6645
|
+
/* @__PURE__ */ jsx73("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-known-cell", children: [
|
|
6646
|
+
/* @__PURE__ */ jsx73("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
|
|
6647
|
+
/* @__PURE__ */ jsx73("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
|
|
6594
6648
|
] }, k.key)) })
|
|
6595
6649
|
] }),
|
|
6596
|
-
!isOver && /* @__PURE__ */
|
|
6597
|
-
guessResults.length > 0 && /* @__PURE__ */
|
|
6598
|
-
/* @__PURE__ */
|
|
6599
|
-
/* @__PURE__ */
|
|
6600
|
-
keys.map((k) => /* @__PURE__ */
|
|
6650
|
+
!isOver && /* @__PURE__ */ jsx73(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
|
|
6651
|
+
guessResults.length > 0 && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-table", children: [
|
|
6652
|
+
/* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-thead", style: cols, children: [
|
|
6653
|
+
/* @__PURE__ */ jsx73("span", { children: t.yourGuesses }),
|
|
6654
|
+
keys.map((k) => /* @__PURE__ */ jsx73("span", { children: t.labels[k] }, k))
|
|
6601
6655
|
] }),
|
|
6602
6656
|
guessResults.map((gr, i) => {
|
|
6603
6657
|
const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
|
|
6604
6658
|
const { first, last } = splitName(name);
|
|
6605
|
-
return /* @__PURE__ */
|
|
6606
|
-
/* @__PURE__ */
|
|
6607
|
-
/* @__PURE__ */
|
|
6608
|
-
/* @__PURE__ */
|
|
6609
|
-
first && /* @__PURE__ */
|
|
6610
|
-
/* @__PURE__ */
|
|
6659
|
+
return /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-row", style: cols, children: [
|
|
6660
|
+
/* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-who", children: [
|
|
6661
|
+
/* @__PURE__ */ jsx73(PlayerAvatar, { className: "ss-g-mt-av", name }),
|
|
6662
|
+
/* @__PURE__ */ jsxs63("span", { className: "ss-g-mt-names", children: [
|
|
6663
|
+
first && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-first", children: first }),
|
|
6664
|
+
/* @__PURE__ */ jsx73("span", { className: "ss-g-mt-last", children: last })
|
|
6611
6665
|
] })
|
|
6612
6666
|
] }),
|
|
6613
6667
|
keys.map((key) => {
|
|
6614
6668
|
const v = gr[key];
|
|
6615
6669
|
const arrow = directionArrow(v);
|
|
6616
|
-
return /* @__PURE__ */
|
|
6670
|
+
return /* @__PURE__ */ jsxs63(
|
|
6617
6671
|
"div",
|
|
6618
6672
|
{
|
|
6619
6673
|
className: "ss-g-mt-cell",
|
|
@@ -6621,8 +6675,8 @@ function MysteryTigerGame({
|
|
|
6621
6675
|
"data-verdict": v.verdict,
|
|
6622
6676
|
"aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
|
|
6623
6677
|
children: [
|
|
6624
|
-
/* @__PURE__ */
|
|
6625
|
-
arrow && /* @__PURE__ */
|
|
6678
|
+
/* @__PURE__ */ jsx73("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
|
|
6679
|
+
arrow && /* @__PURE__ */ jsx73("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
|
|
6626
6680
|
]
|
|
6627
6681
|
},
|
|
6628
6682
|
key
|
|
@@ -6631,25 +6685,25 @@ function MysteryTigerGame({
|
|
|
6631
6685
|
] }, gr.playerId);
|
|
6632
6686
|
})
|
|
6633
6687
|
] }),
|
|
6634
|
-
!isOver && /* @__PURE__ */
|
|
6635
|
-
/* @__PURE__ */
|
|
6636
|
-
/* @__PURE__ */
|
|
6688
|
+
!isOver && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-legend", children: [
|
|
6689
|
+
/* @__PURE__ */ jsxs63("span", { children: [
|
|
6690
|
+
/* @__PURE__ */ jsx73("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
|
|
6637
6691
|
t.legendMatch
|
|
6638
6692
|
] }),
|
|
6639
|
-
/* @__PURE__ */
|
|
6640
|
-
/* @__PURE__ */
|
|
6693
|
+
/* @__PURE__ */ jsxs63("span", { children: [
|
|
6694
|
+
/* @__PURE__ */ jsx73("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
|
|
6641
6695
|
t.legendClose
|
|
6642
6696
|
] }),
|
|
6643
|
-
/* @__PURE__ */
|
|
6697
|
+
/* @__PURE__ */ jsxs63("span", { children: [
|
|
6644
6698
|
"\u25B2 ",
|
|
6645
6699
|
t.legendHigher
|
|
6646
6700
|
] })
|
|
6647
6701
|
] }),
|
|
6648
|
-
clientState?.hintLine && !isOver && /* @__PURE__ */
|
|
6649
|
-
/* @__PURE__ */
|
|
6650
|
-
/* @__PURE__ */
|
|
6702
|
+
clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs63("div", { className: "ss-g-mt-hint", children: [
|
|
6703
|
+
/* @__PURE__ */ jsx73(IconBulb, {}),
|
|
6704
|
+
/* @__PURE__ */ jsx73("span", { children: clientState.hintLine })
|
|
6651
6705
|
] }),
|
|
6652
|
-
isOver && /* @__PURE__ */
|
|
6706
|
+
isOver && /* @__PURE__ */ jsx73(
|
|
6653
6707
|
ResultCard,
|
|
6654
6708
|
{
|
|
6655
6709
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -6661,39 +6715,26 @@ function MysteryTigerGame({
|
|
|
6661
6715
|
}
|
|
6662
6716
|
)
|
|
6663
6717
|
] }),
|
|
6664
|
-
!isOver && /* @__PURE__ */
|
|
6665
|
-
|
|
6666
|
-
|
|
6667
|
-
|
|
6668
|
-
|
|
6669
|
-
|
|
6670
|
-
|
|
6671
|
-
|
|
6672
|
-
|
|
6673
|
-
|
|
6674
|
-
|
|
6675
|
-
|
|
6676
|
-
|
|
6677
|
-
|
|
6678
|
-
),
|
|
6679
|
-
/* @__PURE__ */ jsx72(
|
|
6680
|
-
SearchField,
|
|
6681
|
-
{
|
|
6682
|
-
id: inputId,
|
|
6683
|
-
label: t.searchLabel,
|
|
6684
|
-
placeholder: t.searchPlaceholder,
|
|
6685
|
-
value: query,
|
|
6686
|
-
onChange: setQuery,
|
|
6687
|
-
disabled: submitting
|
|
6688
|
-
}
|
|
6689
|
-
)
|
|
6690
|
-
] })
|
|
6718
|
+
!isOver && /* @__PURE__ */ jsx73(FooterBar, { children: /* @__PURE__ */ jsx73(
|
|
6719
|
+
AnswerTray,
|
|
6720
|
+
{
|
|
6721
|
+
id: inputId,
|
|
6722
|
+
label: t.searchLabel,
|
|
6723
|
+
placeholder: t.searchPlaceholder,
|
|
6724
|
+
optionsLabel: t.optionsLabel,
|
|
6725
|
+
options: pool,
|
|
6726
|
+
query,
|
|
6727
|
+
onQuery: setQuery,
|
|
6728
|
+
onPick: handleSelect,
|
|
6729
|
+
disabled: submitting
|
|
6730
|
+
}
|
|
6731
|
+
) })
|
|
6691
6732
|
] })
|
|
6692
6733
|
] });
|
|
6693
6734
|
}
|
|
6694
6735
|
|
|
6695
6736
|
// src/components/games/HigherOrLowerGame.tsx
|
|
6696
|
-
import { Fragment as
|
|
6737
|
+
import { Fragment as Fragment13, jsx as jsx74, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
6697
6738
|
var POINTS_PER_CORRECT = 10;
|
|
6698
6739
|
function parseClientState2(json) {
|
|
6699
6740
|
if (!json) return null;
|
|
@@ -6705,11 +6746,11 @@ function parseClientState2(json) {
|
|
|
6705
6746
|
}
|
|
6706
6747
|
function PlayerCard({ name, imagePath, highlight, children }) {
|
|
6707
6748
|
const { first, last } = splitName(name);
|
|
6708
|
-
return /* @__PURE__ */
|
|
6709
|
-
/* @__PURE__ */
|
|
6710
|
-
/* @__PURE__ */
|
|
6711
|
-
first && /* @__PURE__ */
|
|
6712
|
-
/* @__PURE__ */
|
|
6749
|
+
return /* @__PURE__ */ jsxs64("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
|
|
6750
|
+
/* @__PURE__ */ jsx74("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx74(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx74(Silhouette, { size: 150 }) }),
|
|
6751
|
+
/* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-info", children: [
|
|
6752
|
+
first && /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-first", children: first }),
|
|
6753
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-surname", children: last }),
|
|
6713
6754
|
children
|
|
6714
6755
|
] })
|
|
6715
6756
|
] });
|
|
@@ -6741,47 +6782,47 @@ function HigherOrLowerGame({
|
|
|
6741
6782
|
const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
|
|
6742
6783
|
onSubmit(JSON.stringify({ answers: newAnswers }));
|
|
6743
6784
|
}
|
|
6744
|
-
return /* @__PURE__ */
|
|
6745
|
-
/* @__PURE__ */
|
|
6785
|
+
return /* @__PURE__ */ jsxs64("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
|
|
6786
|
+
/* @__PURE__ */ jsx74(
|
|
6746
6787
|
GameHeader,
|
|
6747
6788
|
{
|
|
6748
6789
|
title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
|
|
6749
6790
|
eyebrow: t.eyebrow(POINTS_PER_CORRECT),
|
|
6750
|
-
right: config ? /* @__PURE__ */
|
|
6791
|
+
right: config ? /* @__PURE__ */ jsx74(StatStack, { value: runLength, label: t.streak }) : void 0,
|
|
6751
6792
|
onBack,
|
|
6752
6793
|
backLabel: ui.back
|
|
6753
6794
|
}
|
|
6754
6795
|
),
|
|
6755
|
-
!config && /* @__PURE__ */
|
|
6756
|
-
config && /* @__PURE__ */
|
|
6757
|
-
/* @__PURE__ */
|
|
6758
|
-
/* @__PURE__ */
|
|
6759
|
-
/* @__PURE__ */
|
|
6760
|
-
/* @__PURE__ */
|
|
6761
|
-
/* @__PURE__ */
|
|
6796
|
+
!config && /* @__PURE__ */ jsx74("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
6797
|
+
config && /* @__PURE__ */ jsxs64(Fragment13, { children: [
|
|
6798
|
+
/* @__PURE__ */ jsxs64("div", { className: "ss-g-body", children: [
|
|
6799
|
+
/* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
|
|
6800
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
|
|
6801
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
|
|
6802
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
|
|
6762
6803
|
] }),
|
|
6763
|
-
currentPair && /* @__PURE__ */
|
|
6764
|
-
/* @__PURE__ */
|
|
6765
|
-
/* @__PURE__ */
|
|
6766
|
-
/* @__PURE__ */
|
|
6804
|
+
currentPair && /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-pair", children: [
|
|
6805
|
+
/* @__PURE__ */ jsxs64(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
|
|
6806
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
|
|
6807
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-stat", children: config.statLabel })
|
|
6767
6808
|
] }),
|
|
6768
|
-
/* @__PURE__ */
|
|
6769
|
-
/* @__PURE__ */
|
|
6770
|
-
/* @__PURE__ */
|
|
6771
|
-
/* @__PURE__ */
|
|
6809
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
|
|
6810
|
+
/* @__PURE__ */ jsx74(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-btns", children: [
|
|
6811
|
+
/* @__PURE__ */ jsxs64(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
|
|
6812
|
+
/* @__PURE__ */ jsx74(IconArrowUp, { size: 16 }),
|
|
6772
6813
|
t.higher
|
|
6773
6814
|
] }),
|
|
6774
|
-
/* @__PURE__ */
|
|
6775
|
-
/* @__PURE__ */
|
|
6815
|
+
/* @__PURE__ */ jsxs64(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
|
|
6816
|
+
/* @__PURE__ */ jsx74(IconArrowDown, { size: 16 }),
|
|
6776
6817
|
t.lower
|
|
6777
6818
|
] })
|
|
6778
6819
|
] }) })
|
|
6779
6820
|
] }),
|
|
6780
|
-
lastAnswer && lastAnswerPair && /* @__PURE__ */
|
|
6781
|
-
lastAnswer.wasCorrect ? /* @__PURE__ */
|
|
6821
|
+
lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs64("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
|
|
6822
|
+
lastAnswer.wasCorrect ? /* @__PURE__ */ jsx74(IconCheck, {}) : /* @__PURE__ */ jsx74(IconClose, {}),
|
|
6782
6823
|
t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
|
|
6783
6824
|
] }),
|
|
6784
|
-
isOver && /* @__PURE__ */
|
|
6825
|
+
isOver && /* @__PURE__ */ jsx74(
|
|
6785
6826
|
ResultCard,
|
|
6786
6827
|
{
|
|
6787
6828
|
tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
|
|
@@ -6793,15 +6834,15 @@ function HigherOrLowerGame({
|
|
|
6793
6834
|
}
|
|
6794
6835
|
)
|
|
6795
6836
|
] }),
|
|
6796
|
-
!isOver && /* @__PURE__ */
|
|
6797
|
-
/* @__PURE__ */
|
|
6837
|
+
!isOver && /* @__PURE__ */ jsx74(FooterBar, { children: /* @__PURE__ */ jsxs64("div", { className: "ss-g-hl-foot", children: [
|
|
6838
|
+
/* @__PURE__ */ jsx74("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
|
|
6798
6839
|
const a = answeredPairs[i];
|
|
6799
|
-
return /* @__PURE__ */
|
|
6840
|
+
return /* @__PURE__ */ jsx74("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
|
|
6800
6841
|
}) }),
|
|
6801
|
-
/* @__PURE__ */
|
|
6802
|
-
/* @__PURE__ */
|
|
6842
|
+
/* @__PURE__ */ jsxs64("span", { className: "ss-g-hl-pts", children: [
|
|
6843
|
+
/* @__PURE__ */ jsx74("span", { "data-testid": "hol-score", children: score }),
|
|
6803
6844
|
" ",
|
|
6804
|
-
/* @__PURE__ */
|
|
6845
|
+
/* @__PURE__ */ jsx74("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
|
|
6805
6846
|
] })
|
|
6806
6847
|
] }) })
|
|
6807
6848
|
] })
|
|
@@ -6813,17 +6854,17 @@ import { useState as useState31, useId as useId3 } from "react";
|
|
|
6813
6854
|
|
|
6814
6855
|
// src/components/games/ui/CrestShield.tsx
|
|
6815
6856
|
import { useState as useState30 } from "react";
|
|
6816
|
-
import { jsx as
|
|
6857
|
+
import { jsx as jsx75 } from "react/jsx-runtime";
|
|
6817
6858
|
function CrestShield({ src, name, size = 28 }) {
|
|
6818
6859
|
const [failed, setFailed] = useState30(false);
|
|
6819
6860
|
if (src && !isPlaceholderImage(src) && !failed) {
|
|
6820
|
-
return /* @__PURE__ */
|
|
6861
|
+
return /* @__PURE__ */ jsx75("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
|
|
6821
6862
|
}
|
|
6822
|
-
return /* @__PURE__ */
|
|
6863
|
+
return /* @__PURE__ */ jsx75("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__ */ jsx75("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
|
|
6823
6864
|
}
|
|
6824
6865
|
|
|
6825
6866
|
// src/components/games/CareerPathGame.tsx
|
|
6826
|
-
import { Fragment as
|
|
6867
|
+
import { Fragment as Fragment14, jsx as jsx76, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
6827
6868
|
function parseClientState3(json) {
|
|
6828
6869
|
if (!json) return null;
|
|
6829
6870
|
try {
|
|
@@ -6853,17 +6894,15 @@ function CareerPathGame({
|
|
|
6853
6894
|
const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
|
|
6854
6895
|
const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
|
|
6855
6896
|
if (!config) {
|
|
6856
|
-
return /* @__PURE__ */
|
|
6857
|
-
/* @__PURE__ */
|
|
6858
|
-
/* @__PURE__ */
|
|
6897
|
+
return /* @__PURE__ */ jsxs65("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
6898
|
+
/* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
6899
|
+
/* @__PURE__ */ jsx76("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
6859
6900
|
] });
|
|
6860
6901
|
}
|
|
6861
6902
|
const visiblePath = clientState?.visiblePath ?? config.initialPath;
|
|
6862
6903
|
const totalClubs = clientState?.totalClubs ?? config.totalClubs;
|
|
6863
6904
|
const hidden = isOver ? 0 : Math.max(0, totalClubs - visiblePath.length);
|
|
6864
|
-
const
|
|
6865
|
-
(p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
6866
|
-
) : [];
|
|
6905
|
+
const pool = !isOver ? config.typeaheadPool.filter((p) => !alreadyGuessedIds.has(p.id)) : [];
|
|
6867
6906
|
function handleSelect(playerId) {
|
|
6868
6907
|
if (!config || isOver || submitting) return;
|
|
6869
6908
|
const prevGuesses = clientState?.guessResults.map((g) => g.playerId) ?? [];
|
|
@@ -6871,60 +6910,61 @@ function CareerPathGame({
|
|
|
6871
6910
|
setQuery("");
|
|
6872
6911
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
6873
6912
|
}
|
|
6874
|
-
const right = !isOver && clientState ? /* @__PURE__ */
|
|
6913
|
+
const right = !isOver && clientState ? /* @__PURE__ */ jsx76("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs65(Chip, { variant: "neutral", children: [
|
|
6875
6914
|
ui.games.guess,
|
|
6876
6915
|
" ",
|
|
6877
|
-
/* @__PURE__ */
|
|
6916
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
|
|
6878
6917
|
" / ",
|
|
6879
6918
|
clientState.guessesUsed + clientState.guessesRemaining
|
|
6880
6919
|
] }) }) : void 0;
|
|
6881
6920
|
const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
|
|
6882
|
-
return /* @__PURE__ */
|
|
6883
|
-
/* @__PURE__ */
|
|
6884
|
-
/* @__PURE__ */
|
|
6885
|
-
/* @__PURE__ */
|
|
6886
|
-
|
|
6887
|
-
/* @__PURE__ */
|
|
6888
|
-
|
|
6889
|
-
|
|
6890
|
-
|
|
6891
|
-
/* @__PURE__ */
|
|
6921
|
+
return /* @__PURE__ */ jsxs65("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
6922
|
+
/* @__PURE__ */ jsx76(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
|
|
6923
|
+
/* @__PURE__ */ jsxs65("div", { className: "ss-g-body", children: [
|
|
6924
|
+
!isOver && /* @__PURE__ */ jsx76(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
|
|
6925
|
+
/* @__PURE__ */ jsxs65("div", { className: "ss-g-cp-card", children: [
|
|
6926
|
+
isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx76(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx76(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
|
|
6927
|
+
/* @__PURE__ */ jsxs65("div", { className: "ss-g-cp-card-text", children: [
|
|
6928
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
|
|
6929
|
+
clientState?.hintLine ? /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-locks", children: [
|
|
6930
|
+
/* @__PURE__ */ jsx76(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx76(IconLock, { size: 11 }), children: s.lockPosition }),
|
|
6931
|
+
/* @__PURE__ */ jsx76(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx76(IconLock, { size: 11 }), children: s.lockNationality })
|
|
6892
6932
|
] }) : null
|
|
6893
6933
|
] })
|
|
6894
6934
|
] }),
|
|
6895
|
-
/* @__PURE__ */
|
|
6935
|
+
/* @__PURE__ */ jsxs65("ol", { className: "ss-g-cp-line", children: [
|
|
6896
6936
|
visiblePath.map((spell, i) => {
|
|
6897
6937
|
const years = i === 0 ? s.firstClub : spellYears(spell);
|
|
6898
|
-
return /* @__PURE__ */
|
|
6899
|
-
/* @__PURE__ */
|
|
6900
|
-
/* @__PURE__ */
|
|
6901
|
-
/* @__PURE__ */
|
|
6938
|
+
return /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step", children: [
|
|
6939
|
+
/* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-rail", children: [
|
|
6940
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx76(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
|
|
6941
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
|
|
6902
6942
|
] }),
|
|
6903
|
-
/* @__PURE__ */
|
|
6904
|
-
/* @__PURE__ */
|
|
6905
|
-
/* @__PURE__ */
|
|
6906
|
-
/* @__PURE__ */
|
|
6907
|
-
spell.isLoan && /* @__PURE__ */
|
|
6943
|
+
/* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-step-text", children: [
|
|
6944
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-club", children: spell.clubName }),
|
|
6945
|
+
/* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-sub", children: [
|
|
6946
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-years", children: years }),
|
|
6947
|
+
spell.isLoan && /* @__PURE__ */ jsxs65(Fragment14, { children: [
|
|
6908
6948
|
years ? " \xB7 " : "",
|
|
6909
|
-
/* @__PURE__ */
|
|
6949
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-loan", children: s.loan })
|
|
6910
6950
|
] })
|
|
6911
6951
|
] })
|
|
6912
6952
|
] })
|
|
6913
6953
|
] }, `${spell.clubName}-${i}`);
|
|
6914
6954
|
}),
|
|
6915
|
-
hidden > 0 && /* @__PURE__ */
|
|
6916
|
-
/* @__PURE__ */
|
|
6917
|
-
/* @__PURE__ */
|
|
6918
|
-
hidden > 1 && /* @__PURE__ */
|
|
6955
|
+
hidden > 0 && /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
|
|
6956
|
+
/* @__PURE__ */ jsxs65("span", { className: "ss-g-cp-rail", children: [
|
|
6957
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx76(IconLock, { size: 18 }) }),
|
|
6958
|
+
hidden > 1 && /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
|
|
6919
6959
|
] }),
|
|
6920
|
-
/* @__PURE__ */
|
|
6960
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
|
|
6921
6961
|
] }),
|
|
6922
|
-
hidden > 1 && /* @__PURE__ */
|
|
6923
|
-
/* @__PURE__ */
|
|
6924
|
-
/* @__PURE__ */
|
|
6962
|
+
hidden > 1 && /* @__PURE__ */ jsxs65("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
|
|
6963
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx76(IconLock, { size: 18 }) }) }),
|
|
6964
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx76("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
|
|
6925
6965
|
] })
|
|
6926
6966
|
] }),
|
|
6927
|
-
isOver && /* @__PURE__ */
|
|
6967
|
+
isOver && /* @__PURE__ */ jsx76(
|
|
6928
6968
|
ResultCard,
|
|
6929
6969
|
{
|
|
6930
6970
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -6936,39 +6976,35 @@ function CareerPathGame({
|
|
|
6936
6976
|
}
|
|
6937
6977
|
)
|
|
6938
6978
|
] }),
|
|
6939
|
-
!isOver && /* @__PURE__ */
|
|
6940
|
-
|
|
6941
|
-
|
|
6942
|
-
|
|
6943
|
-
|
|
6944
|
-
|
|
6945
|
-
|
|
6946
|
-
|
|
6947
|
-
|
|
6948
|
-
|
|
6949
|
-
|
|
6950
|
-
|
|
6951
|
-
|
|
6952
|
-
|
|
6953
|
-
|
|
6954
|
-
/* @__PURE__ */ jsx75(
|
|
6955
|
-
SearchField,
|
|
6956
|
-
{
|
|
6957
|
-
id: inputId,
|
|
6958
|
-
label: s.searchLabel,
|
|
6959
|
-
placeholder: s.searchPlaceholder,
|
|
6960
|
-
value: query,
|
|
6961
|
-
onChange: setQuery,
|
|
6962
|
-
disabled: submitting
|
|
6963
|
-
}
|
|
6964
|
-
)
|
|
6965
|
-
] })
|
|
6979
|
+
!isOver && /* @__PURE__ */ jsx76(FooterBar, { children: /* @__PURE__ */ jsx76(
|
|
6980
|
+
AnswerTray,
|
|
6981
|
+
{
|
|
6982
|
+
id: inputId,
|
|
6983
|
+
label: s.searchLabel,
|
|
6984
|
+
placeholder: s.searchPlaceholder,
|
|
6985
|
+
optionsLabel: s.searchLabel,
|
|
6986
|
+
options: pool,
|
|
6987
|
+
query,
|
|
6988
|
+
onQuery: setQuery,
|
|
6989
|
+
onPick: handleSelect,
|
|
6990
|
+
disabled: submitting,
|
|
6991
|
+
minQuery: 1
|
|
6992
|
+
}
|
|
6993
|
+
) })
|
|
6966
6994
|
] });
|
|
6967
6995
|
}
|
|
6968
6996
|
|
|
6969
6997
|
// src/components/games/BeatTheGridGame.tsx
|
|
6970
6998
|
import React, { useEffect as useEffect20, useId as useId4, useRef as useRef17, useState as useState32 } from "react";
|
|
6971
|
-
|
|
6999
|
+
|
|
7000
|
+
// src/components/games/ui/OptionList.tsx
|
|
7001
|
+
import { jsx as jsx77 } from "react/jsx-runtime";
|
|
7002
|
+
function OptionList({ label, options, onPick }) {
|
|
7003
|
+
return /* @__PURE__ */ jsx77("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx77("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
|
|
7004
|
+
}
|
|
7005
|
+
|
|
7006
|
+
// src/components/games/BeatTheGridGame.tsx
|
|
7007
|
+
import { Fragment as Fragment15, jsx as jsx78, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
6972
7008
|
function criterionIconKind(label, key) {
|
|
6973
7009
|
const l = (key ?? label).toLowerCase();
|
|
6974
7010
|
if (l.includes("app")) return "calendar";
|
|
@@ -6986,34 +7022,34 @@ function rowAbbrev(label, map, key) {
|
|
|
6986
7022
|
function CriterionIcon({ kind }) {
|
|
6987
7023
|
switch (kind) {
|
|
6988
7024
|
case "calendar":
|
|
6989
|
-
return /* @__PURE__ */
|
|
7025
|
+
return /* @__PURE__ */ jsx78(IconCalendar, {});
|
|
6990
7026
|
case "ball":
|
|
6991
|
-
return /* @__PURE__ */
|
|
7027
|
+
return /* @__PURE__ */ jsx78(IconBall, {});
|
|
6992
7028
|
case "boot":
|
|
6993
|
-
return /* @__PURE__ */
|
|
7029
|
+
return /* @__PURE__ */ jsx78(IconBoot, {});
|
|
6994
7030
|
case "gloves":
|
|
6995
|
-
return /* @__PURE__ */
|
|
7031
|
+
return /* @__PURE__ */ jsx78(IconGloves, {});
|
|
6996
7032
|
case "shield":
|
|
6997
|
-
return /* @__PURE__ */
|
|
7033
|
+
return /* @__PURE__ */ jsx78(IconShield, {});
|
|
6998
7034
|
default:
|
|
6999
|
-
return /* @__PURE__ */
|
|
7035
|
+
return /* @__PURE__ */ jsx78(IconFlag, {});
|
|
7000
7036
|
}
|
|
7001
7037
|
}
|
|
7002
7038
|
function HeaderVisual({ label, textKey: iKey, meta }) {
|
|
7003
7039
|
if (!meta) {
|
|
7004
|
-
return /* @__PURE__ */
|
|
7040
|
+
return /* @__PURE__ */ jsx78(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
7005
7041
|
}
|
|
7006
7042
|
switch (meta.kind) {
|
|
7007
7043
|
case "club":
|
|
7008
|
-
return /* @__PURE__ */
|
|
7044
|
+
return /* @__PURE__ */ jsx78(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
|
|
7009
7045
|
case "coach":
|
|
7010
|
-
return /* @__PURE__ */
|
|
7046
|
+
return /* @__PURE__ */ jsx78(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
|
|
7011
7047
|
case "country":
|
|
7012
|
-
return /* @__PURE__ */
|
|
7048
|
+
return /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
|
|
7013
7049
|
case "position":
|
|
7014
|
-
return /* @__PURE__ */
|
|
7050
|
+
return /* @__PURE__ */ jsx78(Fragment15, {});
|
|
7015
7051
|
default:
|
|
7016
|
-
return /* @__PURE__ */
|
|
7052
|
+
return /* @__PURE__ */ jsx78(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
7017
7053
|
}
|
|
7018
7054
|
}
|
|
7019
7055
|
function parseClientState4(json) {
|
|
@@ -7057,12 +7093,12 @@ function SearchSheet({
|
|
|
7057
7093
|
const filtered = playerPool.filter(
|
|
7058
7094
|
(p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
7059
7095
|
);
|
|
7060
|
-
return /* @__PURE__ */
|
|
7061
|
-
/* @__PURE__ */
|
|
7062
|
-
/* @__PURE__ */
|
|
7063
|
-
/* @__PURE__ */
|
|
7064
|
-
/* @__PURE__ */
|
|
7065
|
-
/* @__PURE__ */
|
|
7096
|
+
return /* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
|
|
7097
|
+
/* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-sheet-hdr", children: [
|
|
7098
|
+
/* @__PURE__ */ jsx78(Chip, { variant: "neutral", children: rowLabel }),
|
|
7099
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconClose, { size: 12 }) }),
|
|
7100
|
+
/* @__PURE__ */ jsx78(Chip, { variant: "accent", children: colLabel }),
|
|
7101
|
+
/* @__PURE__ */ jsx78(
|
|
7066
7102
|
"button",
|
|
7067
7103
|
{
|
|
7068
7104
|
type: "button",
|
|
@@ -7070,12 +7106,12 @@ function SearchSheet({
|
|
|
7070
7106
|
"data-testid": "btg-sheet-dismiss",
|
|
7071
7107
|
"aria-label": s.closeSearch,
|
|
7072
7108
|
onClick: onDismiss,
|
|
7073
|
-
children: /* @__PURE__ */
|
|
7109
|
+
children: /* @__PURE__ */ jsx78(IconClose, {})
|
|
7074
7110
|
}
|
|
7075
7111
|
)
|
|
7076
7112
|
] }),
|
|
7077
|
-
playerPool.length === 0 ? /* @__PURE__ */
|
|
7078
|
-
/* @__PURE__ */
|
|
7113
|
+
playerPool.length === 0 ? /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs66(Fragment15, { children: [
|
|
7114
|
+
/* @__PURE__ */ jsx78(
|
|
7079
7115
|
SearchField,
|
|
7080
7116
|
{
|
|
7081
7117
|
id: inputId,
|
|
@@ -7087,16 +7123,16 @@ function SearchSheet({
|
|
|
7087
7123
|
inputRef
|
|
7088
7124
|
}
|
|
7089
7125
|
),
|
|
7090
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
7126
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx78(
|
|
7091
7127
|
OptionList,
|
|
7092
7128
|
{
|
|
7093
7129
|
label: s.searchLabel(rowLabel, colLabel),
|
|
7094
7130
|
options: filtered.map((p) => ({
|
|
7095
7131
|
key: p.id,
|
|
7096
|
-
content: /* @__PURE__ */
|
|
7097
|
-
/* @__PURE__ */
|
|
7098
|
-
/* @__PURE__ */
|
|
7099
|
-
/* @__PURE__ */
|
|
7132
|
+
content: /* @__PURE__ */ jsxs66(Fragment15, { children: [
|
|
7133
|
+
/* @__PURE__ */ jsx78(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
|
|
7134
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-btg-result-name", children: p.name }),
|
|
7135
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconPlus, { size: 18 }) })
|
|
7100
7136
|
] })
|
|
7101
7137
|
})),
|
|
7102
7138
|
onPick: (k) => onPick(row, col, Number(k))
|
|
@@ -7134,9 +7170,9 @@ function BeatTheGridGame({
|
|
|
7134
7170
|
onSubmit(JSON.stringify({ cells: newCells }));
|
|
7135
7171
|
}
|
|
7136
7172
|
if (!config) {
|
|
7137
|
-
return /* @__PURE__ */
|
|
7138
|
-
/* @__PURE__ */
|
|
7139
|
-
/* @__PURE__ */
|
|
7173
|
+
return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
7174
|
+
/* @__PURE__ */ jsx78(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
7175
|
+
/* @__PURE__ */ jsx78("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
7140
7176
|
] });
|
|
7141
7177
|
}
|
|
7142
7178
|
const rows = config.rows;
|
|
@@ -7149,20 +7185,20 @@ function BeatTheGridGame({
|
|
|
7149
7185
|
(_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
|
|
7150
7186
|
);
|
|
7151
7187
|
const totalScore = clientState?.totalScore ?? result?.score ?? 0;
|
|
7152
|
-
return /* @__PURE__ */
|
|
7153
|
-
/* @__PURE__ */
|
|
7154
|
-
/* @__PURE__ */
|
|
7188
|
+
return /* @__PURE__ */ jsxs66("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
7189
|
+
/* @__PURE__ */ jsx78(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
7190
|
+
/* @__PURE__ */ jsx78(
|
|
7155
7191
|
SegmentProgress,
|
|
7156
7192
|
{
|
|
7157
7193
|
segments,
|
|
7158
7194
|
ariaLabel: s.progressAria(filledCells.length, total),
|
|
7159
7195
|
leftLabel: s.filled(filledCells.length, total),
|
|
7160
7196
|
rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
|
|
7161
|
-
right: /* @__PURE__ */
|
|
7197
|
+
right: /* @__PURE__ */ jsx78(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
|
|
7162
7198
|
}
|
|
7163
7199
|
),
|
|
7164
|
-
/* @__PURE__ */
|
|
7165
|
-
/* @__PURE__ */
|
|
7200
|
+
/* @__PURE__ */ jsxs66("div", { className: "ss-g-body", children: [
|
|
7201
|
+
/* @__PURE__ */ jsxs66(
|
|
7166
7202
|
"div",
|
|
7167
7203
|
{
|
|
7168
7204
|
className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
|
|
@@ -7172,31 +7208,31 @@ function BeatTheGridGame({
|
|
|
7172
7208
|
},
|
|
7173
7209
|
role: "grid",
|
|
7174
7210
|
children: [
|
|
7175
|
-
/* @__PURE__ */
|
|
7211
|
+
/* @__PURE__ */ jsx78("div", { className: "ss-g-btg-corner" }),
|
|
7176
7212
|
cols.map((col, colIdx) => {
|
|
7177
7213
|
const colMeta = config.colsMeta?.[colIdx];
|
|
7178
|
-
return /* @__PURE__ */
|
|
7179
|
-
/* @__PURE__ */
|
|
7180
|
-
/* @__PURE__ */
|
|
7214
|
+
return /* @__PURE__ */ jsxs66("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
|
|
7215
|
+
/* @__PURE__ */ jsx78(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
|
|
7216
|
+
/* @__PURE__ */ jsx78("span", { children: col })
|
|
7181
7217
|
] }, col);
|
|
7182
7218
|
}),
|
|
7183
7219
|
rows.map((rowLabel, rowIdx) => {
|
|
7184
7220
|
const rowMeta = config.rowsMeta?.[rowIdx];
|
|
7185
7221
|
const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
|
|
7186
|
-
const rowHeaderContent = rowMeta ? /* @__PURE__ */
|
|
7187
|
-
/* @__PURE__ */
|
|
7188
|
-
/* @__PURE__ */
|
|
7189
|
-
] }) : abbr === rowLabel ? /* @__PURE__ */
|
|
7190
|
-
/* @__PURE__ */
|
|
7191
|
-
/* @__PURE__ */
|
|
7222
|
+
const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs66(Fragment15, { children: [
|
|
7223
|
+
/* @__PURE__ */ jsx78(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
|
|
7224
|
+
/* @__PURE__ */ jsx78("span", { children: rowLabel })
|
|
7225
|
+
] }) : abbr === rowLabel ? /* @__PURE__ */ jsx78("span", { children: rowLabel }) : /* @__PURE__ */ jsxs66(Fragment15, { children: [
|
|
7226
|
+
/* @__PURE__ */ jsx78("span", { "aria-hidden": "true", children: abbr }),
|
|
7227
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-sr", children: rowLabel })
|
|
7192
7228
|
] });
|
|
7193
|
-
return /* @__PURE__ */
|
|
7194
|
-
/* @__PURE__ */
|
|
7229
|
+
return /* @__PURE__ */ jsxs66(React.Fragment, { children: [
|
|
7230
|
+
/* @__PURE__ */ jsx78("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
|
|
7195
7231
|
cols.map((colLabel, colIdx) => {
|
|
7196
7232
|
const filled = findCellResult(filledCells, rowIdx, colIdx);
|
|
7197
7233
|
const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
|
|
7198
7234
|
const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
|
|
7199
|
-
return /* @__PURE__ */
|
|
7235
|
+
return /* @__PURE__ */ jsx78(
|
|
7200
7236
|
"button",
|
|
7201
7237
|
{
|
|
7202
7238
|
type: "button",
|
|
@@ -7207,20 +7243,20 @@ function BeatTheGridGame({
|
|
|
7207
7243
|
className: "ss-g-btg-cell",
|
|
7208
7244
|
disabled: isLocked2 || submitting,
|
|
7209
7245
|
onClick: () => handleCellClick(rowIdx, colIdx),
|
|
7210
|
-
children: filled ? /* @__PURE__ */
|
|
7211
|
-
/* @__PURE__ */
|
|
7246
|
+
children: filled ? /* @__PURE__ */ jsxs66(Fragment15, { children: [
|
|
7247
|
+
/* @__PURE__ */ jsx78(
|
|
7212
7248
|
"span",
|
|
7213
7249
|
{
|
|
7214
7250
|
className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
|
|
7215
7251
|
role: "img",
|
|
7216
7252
|
"aria-label": filled.isCorrect ? s.correct : s.wrong,
|
|
7217
|
-
children: filled.isCorrect ? /* @__PURE__ */
|
|
7253
|
+
children: filled.isCorrect ? /* @__PURE__ */ jsx78(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx78(IconClose, { size: 11 })
|
|
7218
7254
|
}
|
|
7219
7255
|
),
|
|
7220
|
-
/* @__PURE__ */
|
|
7256
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
|
|
7221
7257
|
(() => {
|
|
7222
7258
|
const entry = playerPool.find((p) => p.id === filled.playerId);
|
|
7223
|
-
return /* @__PURE__ */
|
|
7259
|
+
return /* @__PURE__ */ jsx78(
|
|
7224
7260
|
PlayerAvatar,
|
|
7225
7261
|
{
|
|
7226
7262
|
name: entry?.name ?? "",
|
|
@@ -7229,8 +7265,8 @@ function BeatTheGridGame({
|
|
|
7229
7265
|
}
|
|
7230
7266
|
);
|
|
7231
7267
|
})(),
|
|
7232
|
-
/* @__PURE__ */
|
|
7233
|
-
] }) : /* @__PURE__ */
|
|
7268
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
|
|
7269
|
+
] }) : /* @__PURE__ */ jsx78("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx78(IconPlus, { size: 22 }) })
|
|
7234
7270
|
},
|
|
7235
7271
|
`cell-${rowIdx}-${colIdx}`
|
|
7236
7272
|
);
|
|
@@ -7240,7 +7276,7 @@ function BeatTheGridGame({
|
|
|
7240
7276
|
]
|
|
7241
7277
|
}
|
|
7242
7278
|
),
|
|
7243
|
-
isLocked2 && /* @__PURE__ */
|
|
7279
|
+
isLocked2 && /* @__PURE__ */ jsx78(
|
|
7244
7280
|
ResultCard,
|
|
7245
7281
|
{
|
|
7246
7282
|
tone: "neutral",
|
|
@@ -7252,7 +7288,7 @@ function BeatTheGridGame({
|
|
|
7252
7288
|
}
|
|
7253
7289
|
)
|
|
7254
7290
|
] }),
|
|
7255
|
-
activeCell !== null && /* @__PURE__ */
|
|
7291
|
+
activeCell !== null && /* @__PURE__ */ jsx78("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx78(
|
|
7256
7292
|
SearchSheet,
|
|
7257
7293
|
{
|
|
7258
7294
|
row: activeCell.row,
|
|
@@ -7274,18 +7310,18 @@ function BeatTheGridGame({
|
|
|
7274
7310
|
import { useState as useState33, useId as useId5 } from "react";
|
|
7275
7311
|
|
|
7276
7312
|
// src/components/games/ui/PitchSvg.tsx
|
|
7277
|
-
import { Fragment as
|
|
7313
|
+
import { Fragment as Fragment16, jsx as jsx79, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
7278
7314
|
function PitchSvg({ variant }) {
|
|
7279
|
-
return /* @__PURE__ */
|
|
7280
|
-
/* @__PURE__ */
|
|
7281
|
-
variant === "full" ? /* @__PURE__ */
|
|
7282
|
-
/* @__PURE__ */
|
|
7283
|
-
/* @__PURE__ */
|
|
7284
|
-
/* @__PURE__ */
|
|
7285
|
-
/* @__PURE__ */
|
|
7286
|
-
] }) : /* @__PURE__ */
|
|
7287
|
-
/* @__PURE__ */
|
|
7288
|
-
/* @__PURE__ */
|
|
7315
|
+
return /* @__PURE__ */ jsxs67("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
|
|
7316
|
+
/* @__PURE__ */ jsx79("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
|
|
7317
|
+
variant === "full" ? /* @__PURE__ */ jsxs67(Fragment16, { children: [
|
|
7318
|
+
/* @__PURE__ */ jsx79("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
|
|
7319
|
+
/* @__PURE__ */ jsx79("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
|
|
7320
|
+
/* @__PURE__ */ jsx79("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
|
|
7321
|
+
/* @__PURE__ */ jsx79("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
|
|
7322
|
+
] }) : /* @__PURE__ */ jsxs67(Fragment16, { children: [
|
|
7323
|
+
/* @__PURE__ */ jsx79("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
|
|
7324
|
+
/* @__PURE__ */ jsx79("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
|
|
7289
7325
|
] })
|
|
7290
7326
|
] });
|
|
7291
7327
|
}
|
|
@@ -7341,7 +7377,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
|
|
|
7341
7377
|
}
|
|
7342
7378
|
|
|
7343
7379
|
// src/components/games/GuessTheXiGame.tsx
|
|
7344
|
-
import { Fragment as
|
|
7380
|
+
import { Fragment as Fragment17, jsx as jsx80, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
7345
7381
|
var MAX_GUESSES2 = 3;
|
|
7346
7382
|
function parseClientState5(json) {
|
|
7347
7383
|
if (!json) return null;
|
|
@@ -7391,30 +7427,31 @@ function GuessTheXiGame({
|
|
|
7391
7427
|
const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
|
|
7392
7428
|
const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
|
|
7393
7429
|
const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
|
|
7394
|
-
return /* @__PURE__ */
|
|
7395
|
-
/* @__PURE__ */
|
|
7430
|
+
return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
|
|
7431
|
+
/* @__PURE__ */ jsx80(
|
|
7396
7432
|
GameHeader,
|
|
7397
7433
|
{
|
|
7398
7434
|
title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
|
|
7399
7435
|
eyebrow: config?.poolLabel,
|
|
7400
|
-
right: formation ? /* @__PURE__ */
|
|
7436
|
+
right: formation ? /* @__PURE__ */ jsx80(Chip, { variant: "accent", children: formation }) : void 0,
|
|
7401
7437
|
onBack,
|
|
7402
7438
|
backLabel: ui.back
|
|
7403
7439
|
}
|
|
7404
7440
|
),
|
|
7405
|
-
!config && /* @__PURE__ */
|
|
7406
|
-
config && /* @__PURE__ */
|
|
7407
|
-
/* @__PURE__ */
|
|
7408
|
-
|
|
7409
|
-
|
|
7410
|
-
/* @__PURE__ */
|
|
7441
|
+
!config && /* @__PURE__ */ jsx80("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
7442
|
+
config && /* @__PURE__ */ jsxs68(Fragment17, { children: [
|
|
7443
|
+
/* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
|
|
7444
|
+
!isOver && /* @__PURE__ */ jsx80(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
|
|
7445
|
+
rows.length > 0 && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
|
|
7446
|
+
/* @__PURE__ */ jsx80(PitchSvg, { variant: "full" }),
|
|
7447
|
+
/* @__PURE__ */ jsx80("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx80("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
|
|
7411
7448
|
const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
|
|
7412
7449
|
const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
|
|
7413
7450
|
const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
|
|
7414
7451
|
const flag = nationalityFlag(pos.nationality);
|
|
7415
7452
|
if (lineupEntry) {
|
|
7416
|
-
return /* @__PURE__ */
|
|
7417
|
-
/* @__PURE__ */
|
|
7453
|
+
return /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
|
|
7454
|
+
/* @__PURE__ */ jsx80(
|
|
7418
7455
|
PlayerAvatar,
|
|
7419
7456
|
{
|
|
7420
7457
|
name: lineupEntry.name,
|
|
@@ -7422,11 +7459,11 @@ function GuessTheXiGame({
|
|
|
7422
7459
|
className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
|
|
7423
7460
|
}
|
|
7424
7461
|
),
|
|
7425
|
-
/* @__PURE__ */
|
|
7462
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
|
|
7426
7463
|
] }, `${pos.slot}-${c}`);
|
|
7427
7464
|
}
|
|
7428
|
-
return /* @__PURE__ */
|
|
7429
|
-
/* @__PURE__ */
|
|
7465
|
+
return /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
|
|
7466
|
+
/* @__PURE__ */ jsx80(
|
|
7430
7467
|
"span",
|
|
7431
7468
|
{
|
|
7432
7469
|
className: "ss-g-gxi-disc",
|
|
@@ -7437,22 +7474,22 @@ function GuessTheXiGame({
|
|
|
7437
7474
|
children: flag
|
|
7438
7475
|
}
|
|
7439
7476
|
),
|
|
7440
|
-
name ? /* @__PURE__ */
|
|
7477
|
+
name ? /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-pos", children: posLabel })
|
|
7441
7478
|
] }, `${pos.slot}-${c}`);
|
|
7442
7479
|
}) }, r)) })
|
|
7443
7480
|
] }),
|
|
7444
|
-
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */
|
|
7445
|
-
/* @__PURE__ */
|
|
7481
|
+
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-wrong", children: [
|
|
7482
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
|
|
7446
7483
|
wrongGuesses.map((g) => {
|
|
7447
7484
|
const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
|
|
7448
|
-
return /* @__PURE__ */
|
|
7449
|
-
/* @__PURE__ */
|
|
7450
|
-
/* @__PURE__ */
|
|
7485
|
+
return /* @__PURE__ */ jsxs68("span", { className: "ss-g-gxi-wrong-chip", children: [
|
|
7486
|
+
/* @__PURE__ */ jsx80(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
|
|
7487
|
+
/* @__PURE__ */ jsx80("s", { children: teamName(g.teamId) })
|
|
7451
7488
|
] }, g.teamId);
|
|
7452
7489
|
})
|
|
7453
7490
|
] }),
|
|
7454
|
-
isOver && /* @__PURE__ */
|
|
7455
|
-
/* @__PURE__ */
|
|
7491
|
+
isOver && /* @__PURE__ */ jsxs68(Fragment17, { children: [
|
|
7492
|
+
/* @__PURE__ */ jsx80(
|
|
7456
7493
|
ResultCard,
|
|
7457
7494
|
{
|
|
7458
7495
|
tone: solved ? "win" : failed ? "lose" : "neutral",
|
|
@@ -7463,29 +7500,29 @@ function GuessTheXiGame({
|
|
|
7463
7500
|
ui
|
|
7464
7501
|
}
|
|
7465
7502
|
),
|
|
7466
|
-
(solved || failed) && clientState?.answer && /* @__PURE__ */
|
|
7467
|
-
/* @__PURE__ */
|
|
7468
|
-
/* @__PURE__ */
|
|
7469
|
-
/* @__PURE__ */
|
|
7503
|
+
(solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs68("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
|
|
7504
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
|
|
7505
|
+
/* @__PURE__ */ jsx80(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
|
|
7506
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
|
|
7470
7507
|
] })
|
|
7471
7508
|
] })
|
|
7472
7509
|
] }),
|
|
7473
|
-
!isOver && /* @__PURE__ */
|
|
7474
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
7510
|
+
!isOver && /* @__PURE__ */ jsxs68(FooterBar, { children: [
|
|
7511
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx80(
|
|
7475
7512
|
OptionList,
|
|
7476
7513
|
{
|
|
7477
7514
|
label: t.optionsLabel,
|
|
7478
7515
|
options: filtered.map((tm) => ({
|
|
7479
7516
|
key: tm.teamId,
|
|
7480
|
-
content: /* @__PURE__ */
|
|
7481
|
-
/* @__PURE__ */
|
|
7482
|
-
/* @__PURE__ */
|
|
7517
|
+
content: /* @__PURE__ */ jsxs68(Fragment17, { children: [
|
|
7518
|
+
/* @__PURE__ */ jsx80(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
|
|
7519
|
+
/* @__PURE__ */ jsx80("span", { children: tm.teamName })
|
|
7483
7520
|
] })
|
|
7484
7521
|
})),
|
|
7485
7522
|
onPick: (k) => handlePick(Number(k))
|
|
7486
7523
|
}
|
|
7487
7524
|
),
|
|
7488
|
-
/* @__PURE__ */
|
|
7525
|
+
/* @__PURE__ */ jsx80(
|
|
7489
7526
|
SearchField,
|
|
7490
7527
|
{
|
|
7491
7528
|
id: inputId,
|
|
@@ -7503,7 +7540,7 @@ function GuessTheXiGame({
|
|
|
7503
7540
|
|
|
7504
7541
|
// src/components/games/DailyQuizGame.tsx
|
|
7505
7542
|
import { useState as useState34 } from "react";
|
|
7506
|
-
import { Fragment as
|
|
7543
|
+
import { Fragment as Fragment18, jsx as jsx81, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
7507
7544
|
function parseClientState6(json) {
|
|
7508
7545
|
if (!json) return null;
|
|
7509
7546
|
try {
|
|
@@ -7524,13 +7561,13 @@ function OptionName({ text }) {
|
|
|
7524
7561
|
const tokens = base.split(/\s+/).filter(Boolean);
|
|
7525
7562
|
const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
|
|
7526
7563
|
if (!isPlainName || base === "") {
|
|
7527
|
-
return /* @__PURE__ */
|
|
7564
|
+
return /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-full", children: text }) });
|
|
7528
7565
|
}
|
|
7529
7566
|
const { first, last } = splitName(base);
|
|
7530
|
-
return /* @__PURE__ */
|
|
7531
|
-
first && /* @__PURE__ */
|
|
7532
|
-
/* @__PURE__ */
|
|
7533
|
-
suffix && /* @__PURE__ */
|
|
7567
|
+
return /* @__PURE__ */ jsxs69("span", { className: "ss-g-dq-opt-name", children: [
|
|
7568
|
+
first && /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-first", children: first }),
|
|
7569
|
+
/* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-last", children: last }),
|
|
7570
|
+
suffix && /* @__PURE__ */ jsx81("span", { className: "ss-g-dq-opt-suffix", children: suffix })
|
|
7534
7571
|
] });
|
|
7535
7572
|
}
|
|
7536
7573
|
function DailyQuizGame({
|
|
@@ -7549,9 +7586,9 @@ function DailyQuizGame({
|
|
|
7549
7586
|
const results = clientState?.results ?? [];
|
|
7550
7587
|
const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
|
|
7551
7588
|
if (!config) {
|
|
7552
|
-
return /* @__PURE__ */
|
|
7553
|
-
/* @__PURE__ */
|
|
7554
|
-
/* @__PURE__ */
|
|
7589
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
7590
|
+
/* @__PURE__ */ jsx81(GameHeader, { title, onBack, backLabel: ui.back }),
|
|
7591
|
+
/* @__PURE__ */ jsx81("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
7555
7592
|
] });
|
|
7556
7593
|
}
|
|
7557
7594
|
const questions = config.questions;
|
|
@@ -7586,11 +7623,11 @@ function DailyQuizGame({
|
|
|
7586
7623
|
return r.isCorrect ? "correct" : "wrong";
|
|
7587
7624
|
});
|
|
7588
7625
|
const correctCount = results.filter((r) => r.isCorrect).length;
|
|
7589
|
-
return /* @__PURE__ */
|
|
7590
|
-
/* @__PURE__ */
|
|
7591
|
-
/* @__PURE__ */
|
|
7592
|
-
/* @__PURE__ */
|
|
7593
|
-
/* @__PURE__ */
|
|
7626
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
7627
|
+
/* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
|
|
7628
|
+
/* @__PURE__ */ jsx81(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
|
|
7629
|
+
/* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
|
|
7630
|
+
/* @__PURE__ */ jsx81(
|
|
7594
7631
|
ResultCard,
|
|
7595
7632
|
{
|
|
7596
7633
|
tone: "neutral",
|
|
@@ -7603,15 +7640,15 @@ function DailyQuizGame({
|
|
|
7603
7640
|
questions.map((q) => {
|
|
7604
7641
|
const r = findResult(results, q.index);
|
|
7605
7642
|
const picked = selections.get(q.index);
|
|
7606
|
-
return /* @__PURE__ */
|
|
7607
|
-
/* @__PURE__ */
|
|
7608
|
-
r && /* @__PURE__ */
|
|
7643
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-dq-rq", children: [
|
|
7644
|
+
/* @__PURE__ */ jsx81("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
|
|
7645
|
+
r && /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
|
|
7609
7646
|
let cls = "ss-g-dq-rq-opt";
|
|
7610
7647
|
if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
|
|
7611
7648
|
else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
|
|
7612
|
-
return /* @__PURE__ */
|
|
7649
|
+
return /* @__PURE__ */ jsx81("span", { className: cls, children: opt }, optIdx);
|
|
7613
7650
|
}) }),
|
|
7614
|
-
r?.revealText && /* @__PURE__ */
|
|
7651
|
+
r?.revealText && /* @__PURE__ */ jsx81("div", { className: "ss-g-dq-why", children: r.revealText })
|
|
7615
7652
|
] }, q.index);
|
|
7616
7653
|
})
|
|
7617
7654
|
] })
|
|
@@ -7619,16 +7656,16 @@ function DailyQuizGame({
|
|
|
7619
7656
|
}
|
|
7620
7657
|
const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
|
|
7621
7658
|
const selectedIdx = current ? selections.get(current.index) : void 0;
|
|
7622
|
-
return /* @__PURE__ */
|
|
7623
|
-
/* @__PURE__ */
|
|
7624
|
-
/* @__PURE__ */
|
|
7625
|
-
/* @__PURE__ */
|
|
7626
|
-
/* @__PURE__ */
|
|
7627
|
-
/* @__PURE__ */
|
|
7659
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
7660
|
+
/* @__PURE__ */ jsx81(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
|
|
7661
|
+
/* @__PURE__ */ jsx81(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
|
|
7662
|
+
/* @__PURE__ */ jsx81("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs69(Fragment18, { children: [
|
|
7663
|
+
/* @__PURE__ */ jsx81("h3", { className: "ss-g-dq-stem", children: current.stem }),
|
|
7664
|
+
/* @__PURE__ */ jsx81("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
|
|
7628
7665
|
const selected = optIdx === selectedIdx;
|
|
7629
7666
|
const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
|
|
7630
7667
|
const playerName = opt;
|
|
7631
|
-
return /* @__PURE__ */
|
|
7668
|
+
return /* @__PURE__ */ jsxs69(
|
|
7632
7669
|
"button",
|
|
7633
7670
|
{
|
|
7634
7671
|
type: "button",
|
|
@@ -7637,25 +7674,25 @@ function DailyQuizGame({
|
|
|
7637
7674
|
disabled: submitting,
|
|
7638
7675
|
onClick: () => handleSelect(current.index, optIdx),
|
|
7639
7676
|
children: [
|
|
7640
|
-
current.optionImagePaths && /* @__PURE__ */
|
|
7641
|
-
/* @__PURE__ */
|
|
7642
|
-
/* @__PURE__ */
|
|
7677
|
+
current.optionImagePaths && /* @__PURE__ */ jsx81(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
|
|
7678
|
+
/* @__PURE__ */ jsx81("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx81(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
|
|
7679
|
+
/* @__PURE__ */ jsx81(OptionName, { text: opt })
|
|
7643
7680
|
]
|
|
7644
7681
|
},
|
|
7645
7682
|
optIdx
|
|
7646
7683
|
);
|
|
7647
7684
|
}) })
|
|
7648
7685
|
] }) }),
|
|
7649
|
-
/* @__PURE__ */
|
|
7650
|
-
page > 0 && /* @__PURE__ */
|
|
7651
|
-
isLast ? /* @__PURE__ */
|
|
7686
|
+
/* @__PURE__ */ jsx81(FooterBar, { children: /* @__PURE__ */ jsxs69("div", { className: "ss-g-dq-nav", children: [
|
|
7687
|
+
page > 0 && /* @__PURE__ */ jsx81(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
|
|
7688
|
+
isLast ? /* @__PURE__ */ jsx81(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx81(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
|
|
7652
7689
|
] }) })
|
|
7653
7690
|
] });
|
|
7654
7691
|
}
|
|
7655
7692
|
|
|
7656
7693
|
// src/components/games/MatchdayPredictorGame.tsx
|
|
7657
7694
|
import { useId as useId6, useState as useState35 } from "react";
|
|
7658
|
-
import { jsx as
|
|
7695
|
+
import { jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
7659
7696
|
var SCORER_SEARCH_THRESHOLD = 9;
|
|
7660
7697
|
function parseClientState7(json) {
|
|
7661
7698
|
if (!json) return null;
|
|
@@ -7673,7 +7710,7 @@ function isLocked(kickoffUtc) {
|
|
|
7673
7710
|
}
|
|
7674
7711
|
}
|
|
7675
7712
|
function IconMinus() {
|
|
7676
|
-
return /* @__PURE__ */
|
|
7713
|
+
return /* @__PURE__ */ jsx82(
|
|
7677
7714
|
"svg",
|
|
7678
7715
|
{
|
|
7679
7716
|
width: 18,
|
|
@@ -7684,20 +7721,20 @@ function IconMinus() {
|
|
|
7684
7721
|
strokeWidth: 2.2,
|
|
7685
7722
|
strokeLinecap: "round",
|
|
7686
7723
|
"aria-hidden": "true",
|
|
7687
|
-
children: /* @__PURE__ */
|
|
7724
|
+
children: /* @__PURE__ */ jsx82("path", { d: "M5 12h14" })
|
|
7688
7725
|
}
|
|
7689
7726
|
);
|
|
7690
7727
|
}
|
|
7691
7728
|
function TeamBadge({ team, label }) {
|
|
7692
|
-
return /* @__PURE__ */
|
|
7693
|
-
/* @__PURE__ */
|
|
7694
|
-
/* @__PURE__ */
|
|
7695
|
-
/* @__PURE__ */
|
|
7729
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-team", children: [
|
|
7730
|
+
/* @__PURE__ */ jsx82(CrestShield, { name: team.name, size: 44 }),
|
|
7731
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-team-name", children: team.name }),
|
|
7732
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-team-side", children: label })
|
|
7696
7733
|
] });
|
|
7697
7734
|
}
|
|
7698
7735
|
function ScoreCard({ home, away, h, a, t, edit }) {
|
|
7699
|
-
const col = (side, team, value) => /* @__PURE__ */
|
|
7700
|
-
edit && /* @__PURE__ */
|
|
7736
|
+
const col = (side, team, value) => /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-col", children: [
|
|
7737
|
+
edit && /* @__PURE__ */ jsx82(
|
|
7701
7738
|
"button",
|
|
7702
7739
|
{
|
|
7703
7740
|
type: "button",
|
|
@@ -7705,11 +7742,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
7705
7742
|
"aria-label": t.goalsUp(team.name),
|
|
7706
7743
|
disabled: edit.disabled,
|
|
7707
7744
|
onClick: () => edit.onStep(side, 1),
|
|
7708
|
-
children: /* @__PURE__ */
|
|
7745
|
+
children: /* @__PURE__ */ jsx82(IconPlus, { size: 18 })
|
|
7709
7746
|
}
|
|
7710
7747
|
),
|
|
7711
|
-
/* @__PURE__ */
|
|
7712
|
-
edit && /* @__PURE__ */
|
|
7748
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
|
|
7749
|
+
edit && /* @__PURE__ */ jsx82(
|
|
7713
7750
|
"button",
|
|
7714
7751
|
{
|
|
7715
7752
|
type: "button",
|
|
@@ -7717,27 +7754,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
7717
7754
|
"aria-label": t.goalsDown(team.name),
|
|
7718
7755
|
disabled: edit.disabled || value <= 0,
|
|
7719
7756
|
onClick: () => edit.onStep(side, -1),
|
|
7720
|
-
children: /* @__PURE__ */
|
|
7757
|
+
children: /* @__PURE__ */ jsx82(IconMinus, {})
|
|
7721
7758
|
}
|
|
7722
7759
|
)
|
|
7723
7760
|
] });
|
|
7724
|
-
return /* @__PURE__ */
|
|
7725
|
-
/* @__PURE__ */
|
|
7726
|
-
/* @__PURE__ */
|
|
7761
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-card", children: [
|
|
7762
|
+
/* @__PURE__ */ jsx82(TeamBadge, { team: home, label: t.home }),
|
|
7763
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-scores", children: [
|
|
7727
7764
|
col("home", home, h),
|
|
7728
|
-
/* @__PURE__ */
|
|
7765
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
|
|
7729
7766
|
col("away", away, a)
|
|
7730
7767
|
] }),
|
|
7731
|
-
/* @__PURE__ */
|
|
7768
|
+
/* @__PURE__ */ jsx82(TeamBadge, { team: away, label: t.away })
|
|
7732
7769
|
] });
|
|
7733
7770
|
}
|
|
7734
7771
|
function OutcomeRow({ label, ok, detail, t }) {
|
|
7735
|
-
return /* @__PURE__ */
|
|
7736
|
-
/* @__PURE__ */
|
|
7737
|
-
/* @__PURE__ */
|
|
7738
|
-
ok ? /* @__PURE__ */
|
|
7739
|
-
/* @__PURE__ */
|
|
7740
|
-
detail ? /* @__PURE__ */
|
|
7772
|
+
return /* @__PURE__ */ jsxs70("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
|
|
7773
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-row-k", children: label }),
|
|
7774
|
+
/* @__PURE__ */ jsxs70("span", { className: "ss-g-mp-row-v", children: [
|
|
7775
|
+
ok ? /* @__PURE__ */ jsx82(IconCheck, {}) : /* @__PURE__ */ jsx82(IconClose, { size: 14 }),
|
|
7776
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
|
|
7777
|
+
detail ? /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-row-d", children: detail }) : null
|
|
7741
7778
|
] })
|
|
7742
7779
|
] });
|
|
7743
7780
|
}
|
|
@@ -7758,12 +7795,12 @@ function MatchdayPredictorGame({
|
|
|
7758
7795
|
const searchId = useId6();
|
|
7759
7796
|
const clientState = parseClientState7(result?.clientStateJson);
|
|
7760
7797
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
7761
|
-
const header = /* @__PURE__ */
|
|
7798
|
+
const header = /* @__PURE__ */ jsx82(
|
|
7762
7799
|
GameHeader,
|
|
7763
7800
|
{
|
|
7764
7801
|
title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
|
|
7765
7802
|
eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
|
|
7766
|
-
right: config ? /* @__PURE__ */
|
|
7803
|
+
right: config ? /* @__PURE__ */ jsx82(Chip, { icon: /* @__PURE__ */ jsx82(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
|
|
7767
7804
|
onBack,
|
|
7768
7805
|
backLabel: ui.back
|
|
7769
7806
|
}
|
|
@@ -7771,10 +7808,10 @@ function MatchdayPredictorGame({
|
|
|
7771
7808
|
if (alreadyPlayed && clientState) {
|
|
7772
7809
|
if (!clientState.graded) {
|
|
7773
7810
|
const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
|
|
7774
|
-
return /* @__PURE__ */
|
|
7811
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
7775
7812
|
header,
|
|
7776
|
-
/* @__PURE__ */
|
|
7777
|
-
config && /* @__PURE__ */
|
|
7813
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
|
|
7814
|
+
config && /* @__PURE__ */ jsx82(
|
|
7778
7815
|
ScoreCard,
|
|
7779
7816
|
{
|
|
7780
7817
|
home: config.homeTeam,
|
|
@@ -7784,7 +7821,7 @@ function MatchdayPredictorGame({
|
|
|
7784
7821
|
t
|
|
7785
7822
|
}
|
|
7786
7823
|
),
|
|
7787
|
-
/* @__PURE__ */
|
|
7824
|
+
/* @__PURE__ */ jsx82(
|
|
7788
7825
|
ResultCard,
|
|
7789
7826
|
{
|
|
7790
7827
|
tone: "neutral",
|
|
@@ -7801,28 +7838,28 @@ function MatchdayPredictorGame({
|
|
|
7801
7838
|
}
|
|
7802
7839
|
)
|
|
7803
7840
|
] }),
|
|
7804
|
-
/* @__PURE__ */
|
|
7841
|
+
/* @__PURE__ */ jsx82(FooterBar, { children: /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
7805
7842
|
] });
|
|
7806
7843
|
}
|
|
7807
7844
|
const r = clientState.result;
|
|
7808
|
-
return /* @__PURE__ */
|
|
7845
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
7809
7846
|
header,
|
|
7810
|
-
/* @__PURE__ */
|
|
7811
|
-
config && /* @__PURE__ */
|
|
7812
|
-
/* @__PURE__ */
|
|
7813
|
-
/* @__PURE__ */
|
|
7814
|
-
/* @__PURE__ */
|
|
7815
|
-
/* @__PURE__ */
|
|
7816
|
-
!clientState.firstScorerVoid && /* @__PURE__ */
|
|
7847
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
|
|
7848
|
+
config && /* @__PURE__ */ jsx82(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
|
|
7849
|
+
/* @__PURE__ */ jsx82(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
|
|
7850
|
+
/* @__PURE__ */ jsxs70("ul", { className: "ss-g-mp-rows", children: [
|
|
7851
|
+
/* @__PURE__ */ jsx82(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
|
|
7852
|
+
/* @__PURE__ */ jsx82(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
|
|
7853
|
+
!clientState.firstScorerVoid && /* @__PURE__ */ jsx82(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
|
|
7817
7854
|
] })
|
|
7818
7855
|
] }),
|
|
7819
|
-
/* @__PURE__ */
|
|
7856
|
+
/* @__PURE__ */ jsx82(FooterBar, { children: /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
7820
7857
|
] });
|
|
7821
7858
|
}
|
|
7822
7859
|
if (!config) {
|
|
7823
|
-
return /* @__PURE__ */
|
|
7860
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
7824
7861
|
header,
|
|
7825
|
-
/* @__PURE__ */
|
|
7862
|
+
/* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
7826
7863
|
] });
|
|
7827
7864
|
}
|
|
7828
7865
|
const locked = isLocked(config.kickoffUtc);
|
|
@@ -7846,10 +7883,10 @@ function MatchdayPredictorGame({
|
|
|
7846
7883
|
const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
|
|
7847
7884
|
const q = query.trim().toLowerCase();
|
|
7848
7885
|
const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
|
|
7849
|
-
return /* @__PURE__ */
|
|
7886
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
7850
7887
|
header,
|
|
7851
|
-
/* @__PURE__ */
|
|
7852
|
-
/* @__PURE__ */
|
|
7888
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
|
|
7889
|
+
/* @__PURE__ */ jsx82(
|
|
7853
7890
|
ScoreCard,
|
|
7854
7891
|
{
|
|
7855
7892
|
home: config.homeTeam,
|
|
@@ -7860,12 +7897,12 @@ function MatchdayPredictorGame({
|
|
|
7860
7897
|
edit: { disabled, active: lastEdited, onStep: step }
|
|
7861
7898
|
}
|
|
7862
7899
|
),
|
|
7863
|
-
pool.length > 0 && /* @__PURE__ */
|
|
7864
|
-
/* @__PURE__ */
|
|
7865
|
-
/* @__PURE__ */
|
|
7866
|
-
/* @__PURE__ */
|
|
7900
|
+
pool.length > 0 && /* @__PURE__ */ jsxs70("section", { className: "ss-g-mp-scorer", children: [
|
|
7901
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-mp-sec-head", children: [
|
|
7902
|
+
/* @__PURE__ */ jsx82("h3", { children: t.firstScorer }),
|
|
7903
|
+
/* @__PURE__ */ jsx82("span", { children: t.optional })
|
|
7867
7904
|
] }),
|
|
7868
|
-
showSearch && /* @__PURE__ */
|
|
7905
|
+
showSearch && /* @__PURE__ */ jsx82(
|
|
7869
7906
|
SearchField,
|
|
7870
7907
|
{
|
|
7871
7908
|
id: searchId,
|
|
@@ -7877,9 +7914,9 @@ function MatchdayPredictorGame({
|
|
|
7877
7914
|
disabled
|
|
7878
7915
|
}
|
|
7879
7916
|
),
|
|
7880
|
-
/* @__PURE__ */
|
|
7917
|
+
/* @__PURE__ */ jsx82("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
|
|
7881
7918
|
const selected = firstScorerPlayerId === p.playerId;
|
|
7882
|
-
return /* @__PURE__ */
|
|
7919
|
+
return /* @__PURE__ */ jsxs70(
|
|
7883
7920
|
"button",
|
|
7884
7921
|
{
|
|
7885
7922
|
type: "button",
|
|
@@ -7889,15 +7926,15 @@ function MatchdayPredictorGame({
|
|
|
7889
7926
|
disabled,
|
|
7890
7927
|
onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
|
|
7891
7928
|
children: [
|
|
7892
|
-
selected && /* @__PURE__ */
|
|
7893
|
-
/* @__PURE__ */
|
|
7894
|
-
/* @__PURE__ */
|
|
7929
|
+
selected && /* @__PURE__ */ jsx82("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx82(IconCheck, { size: 12 }) }),
|
|
7930
|
+
/* @__PURE__ */ jsx82(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
|
|
7931
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
|
|
7895
7932
|
]
|
|
7896
7933
|
},
|
|
7897
7934
|
p.playerId
|
|
7898
7935
|
);
|
|
7899
7936
|
}) }),
|
|
7900
|
-
/* @__PURE__ */
|
|
7937
|
+
/* @__PURE__ */ jsxs70(
|
|
7901
7938
|
"button",
|
|
7902
7939
|
{
|
|
7903
7940
|
type: "button",
|
|
@@ -7906,24 +7943,24 @@ function MatchdayPredictorGame({
|
|
|
7906
7943
|
disabled,
|
|
7907
7944
|
onClick: () => setFirstScorerPlayerId(null),
|
|
7908
7945
|
children: [
|
|
7909
|
-
/* @__PURE__ */
|
|
7946
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
|
|
7910
7947
|
t.noScorer
|
|
7911
7948
|
]
|
|
7912
7949
|
}
|
|
7913
7950
|
)
|
|
7914
7951
|
] }),
|
|
7915
|
-
locked && /* @__PURE__ */
|
|
7952
|
+
locked && /* @__PURE__ */ jsx82("p", { className: "ss-g-mp-closed", children: t.closed })
|
|
7916
7953
|
] }),
|
|
7917
|
-
/* @__PURE__ */
|
|
7918
|
-
/* @__PURE__ */
|
|
7919
|
-
/* @__PURE__ */
|
|
7954
|
+
/* @__PURE__ */ jsxs70(FooterBar, { children: [
|
|
7955
|
+
/* @__PURE__ */ jsx82(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
|
|
7956
|
+
/* @__PURE__ */ jsx82("p", { className: "ss-g-mp-fun", children: t.forFun })
|
|
7920
7957
|
] })
|
|
7921
7958
|
] });
|
|
7922
7959
|
}
|
|
7923
7960
|
|
|
7924
7961
|
// src/components/games/StartingXiGame.tsx
|
|
7925
7962
|
import { useId as useId7, useState as useState36 } from "react";
|
|
7926
|
-
import { Fragment as
|
|
7963
|
+
import { Fragment as Fragment19, jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
7927
7964
|
var POINTS_PER_STARTER = 8;
|
|
7928
7965
|
var XI_SIZE = 11;
|
|
7929
7966
|
var DEFAULT_FORMATION = "4-3-3";
|
|
@@ -7972,20 +8009,20 @@ function StartingXiGame({
|
|
|
7972
8009
|
const searchId = useId7();
|
|
7973
8010
|
const clientState = parseClientState8(result?.clientStateJson);
|
|
7974
8011
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
7975
|
-
const header = /* @__PURE__ */
|
|
8012
|
+
const header = /* @__PURE__ */ jsx83(
|
|
7976
8013
|
GameHeader,
|
|
7977
8014
|
{
|
|
7978
8015
|
title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
|
|
7979
8016
|
eyebrow: t.eyebrow,
|
|
7980
|
-
right: /* @__PURE__ */
|
|
8017
|
+
right: /* @__PURE__ */ jsx83(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
|
|
7981
8018
|
onBack,
|
|
7982
8019
|
backLabel: ui.back
|
|
7983
8020
|
}
|
|
7984
8021
|
);
|
|
7985
8022
|
function statusScreen(title, score) {
|
|
7986
|
-
return /* @__PURE__ */
|
|
8023
|
+
return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
7987
8024
|
header,
|
|
7988
|
-
/* @__PURE__ */
|
|
8025
|
+
/* @__PURE__ */ jsx83("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx83(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
|
|
7989
8026
|
] });
|
|
7990
8027
|
}
|
|
7991
8028
|
if (alreadyPlayed) {
|
|
@@ -7994,9 +8031,9 @@ function StartingXiGame({
|
|
|
7994
8031
|
if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
|
|
7995
8032
|
}
|
|
7996
8033
|
if (!config) {
|
|
7997
|
-
return /* @__PURE__ */
|
|
8034
|
+
return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
7998
8035
|
header,
|
|
7999
|
-
/* @__PURE__ */
|
|
8036
|
+
/* @__PURE__ */ jsx83("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8000
8037
|
] });
|
|
8001
8038
|
}
|
|
8002
8039
|
const { formation, slots } = formationSlots(config.formation);
|
|
@@ -8031,27 +8068,27 @@ function StartingXiGame({
|
|
|
8031
8068
|
onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
|
|
8032
8069
|
}
|
|
8033
8070
|
const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
|
|
8034
|
-
return /* @__PURE__ */
|
|
8071
|
+
return /* @__PURE__ */ jsxs71("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
8035
8072
|
header,
|
|
8036
|
-
/* @__PURE__ */
|
|
8073
|
+
/* @__PURE__ */ jsx83(
|
|
8037
8074
|
SegmentProgress,
|
|
8038
8075
|
{
|
|
8039
8076
|
segments,
|
|
8040
8077
|
ariaLabel: t.picked(pickedCount),
|
|
8041
8078
|
leftLabel: t.picked(pickedCount),
|
|
8042
8079
|
rightLabel: t.toGo(XI_SIZE - pickedCount),
|
|
8043
|
-
right: /* @__PURE__ */
|
|
8080
|
+
right: /* @__PURE__ */ jsx83(Chip, { children: formation })
|
|
8044
8081
|
}
|
|
8045
8082
|
),
|
|
8046
|
-
/* @__PURE__ */
|
|
8047
|
-
/* @__PURE__ */
|
|
8048
|
-
/* @__PURE__ */
|
|
8083
|
+
/* @__PURE__ */ jsxs71("div", { className: "ss-g-body", children: [
|
|
8084
|
+
/* @__PURE__ */ jsxs71("div", { className: "ss-g-xi-pitch", children: [
|
|
8085
|
+
/* @__PURE__ */ jsx83(PitchSvg, { variant: "half" }),
|
|
8049
8086
|
slots.map((s) => {
|
|
8050
8087
|
const playerId = slotPlayers[s.index] ?? null;
|
|
8051
8088
|
const player = playerId !== null ? byId.get(playerId) ?? null : null;
|
|
8052
8089
|
const name = player?.playerName ?? "";
|
|
8053
8090
|
const state = player ? "filled" : active === s.index ? "active" : "empty";
|
|
8054
|
-
return /* @__PURE__ */
|
|
8091
|
+
return /* @__PURE__ */ jsxs71(
|
|
8055
8092
|
"button",
|
|
8056
8093
|
{
|
|
8057
8094
|
type: "button",
|
|
@@ -8063,21 +8100,21 @@ function StartingXiGame({
|
|
|
8063
8100
|
disabled: submitting,
|
|
8064
8101
|
onClick: () => tapSlot(s.index),
|
|
8065
8102
|
children: [
|
|
8066
|
-
/* @__PURE__ */
|
|
8067
|
-
/* @__PURE__ */
|
|
8103
|
+
/* @__PURE__ */ jsx83("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx83(IconPlus, { size: 18 }) }),
|
|
8104
|
+
/* @__PURE__ */ jsx83("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
|
|
8068
8105
|
]
|
|
8069
8106
|
},
|
|
8070
8107
|
s.index
|
|
8071
8108
|
);
|
|
8072
8109
|
})
|
|
8073
8110
|
] }),
|
|
8074
|
-
/* @__PURE__ */
|
|
8075
|
-
/* @__PURE__ */
|
|
8076
|
-
/* @__PURE__ */
|
|
8077
|
-
/* @__PURE__ */
|
|
8078
|
-
] }) : /* @__PURE__ */
|
|
8079
|
-
activeSlot && /* @__PURE__ */
|
|
8080
|
-
/* @__PURE__ */
|
|
8111
|
+
/* @__PURE__ */ jsxs71("div", { className: "ss-g-xi-picker", children: [
|
|
8112
|
+
/* @__PURE__ */ jsx83("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs71(Fragment19, { children: [
|
|
8113
|
+
/* @__PURE__ */ jsx83(Chip, { variant: "badge", children: activeSlot.label }),
|
|
8114
|
+
/* @__PURE__ */ jsx83("strong", { children: t.pickFor(activeSlot.label) })
|
|
8115
|
+
] }) : /* @__PURE__ */ jsx83("strong", { children: t.allPicked }) }),
|
|
8116
|
+
activeSlot && /* @__PURE__ */ jsxs71(Fragment19, { children: [
|
|
8117
|
+
/* @__PURE__ */ jsx83(
|
|
8081
8118
|
SearchField,
|
|
8082
8119
|
{
|
|
8083
8120
|
id: searchId,
|
|
@@ -8089,18 +8126,18 @@ function StartingXiGame({
|
|
|
8089
8126
|
disabled: submitting
|
|
8090
8127
|
}
|
|
8091
8128
|
),
|
|
8092
|
-
/* @__PURE__ */
|
|
8093
|
-
/* @__PURE__ */
|
|
8094
|
-
/* @__PURE__ */
|
|
8095
|
-
/* @__PURE__ */
|
|
8129
|
+
/* @__PURE__ */ jsx83("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx83("li", { children: /* @__PURE__ */ jsxs71("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
|
|
8130
|
+
/* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
|
|
8131
|
+
/* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
|
|
8132
|
+
/* @__PURE__ */ jsx83("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
|
|
8096
8133
|
] }) }, p.playerId)) })
|
|
8097
8134
|
] })
|
|
8098
8135
|
] })
|
|
8099
8136
|
] }),
|
|
8100
|
-
/* @__PURE__ */
|
|
8101
|
-
/* @__PURE__ */
|
|
8102
|
-
/* @__PURE__ */
|
|
8103
|
-
/* @__PURE__ */
|
|
8137
|
+
/* @__PURE__ */ jsxs71(FooterBar, { children: [
|
|
8138
|
+
/* @__PURE__ */ jsx83(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
|
|
8139
|
+
/* @__PURE__ */ jsxs71("p", { className: "ss-g-xi-lock", children: [
|
|
8140
|
+
/* @__PURE__ */ jsx83(IconLock, {}),
|
|
8104
8141
|
lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
|
|
8105
8142
|
] })
|
|
8106
8143
|
] })
|
|
@@ -8109,7 +8146,7 @@ function StartingXiGame({
|
|
|
8109
8146
|
|
|
8110
8147
|
// src/components/games/StatLadderGame.tsx
|
|
8111
8148
|
import { useId as useId8, useState as useState37 } from "react";
|
|
8112
|
-
import { jsx as
|
|
8149
|
+
import { jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
8113
8150
|
function ladderClue(ladder) {
|
|
8114
8151
|
const mystery = ladder.find((r) => r.rank === 2);
|
|
8115
8152
|
if (!mystery) return null;
|
|
@@ -8131,9 +8168,9 @@ function parseClientState9(json) {
|
|
|
8131
8168
|
}
|
|
8132
8169
|
function NameStack({ name }) {
|
|
8133
8170
|
const { first, last } = splitName(name);
|
|
8134
|
-
return /* @__PURE__ */
|
|
8135
|
-
first && /* @__PURE__ */
|
|
8136
|
-
/* @__PURE__ */
|
|
8171
|
+
return /* @__PURE__ */ jsxs72("span", { className: "ss-g-sl-name", children: [
|
|
8172
|
+
first && /* @__PURE__ */ jsx84("small", { children: `${first[0]}.` }),
|
|
8173
|
+
/* @__PURE__ */ jsx84("b", { children: last })
|
|
8137
8174
|
] });
|
|
8138
8175
|
}
|
|
8139
8176
|
function StatLadderGame({
|
|
@@ -8150,11 +8187,11 @@ function StatLadderGame({
|
|
|
8150
8187
|
const searchId = useId8();
|
|
8151
8188
|
const clientState = parseClientState9(result?.clientStateJson);
|
|
8152
8189
|
const revealed = clientState != null;
|
|
8153
|
-
const header = /* @__PURE__ */
|
|
8190
|
+
const header = /* @__PURE__ */ jsx84(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
|
|
8154
8191
|
if (!config) {
|
|
8155
|
-
return /* @__PURE__ */
|
|
8192
|
+
return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
8156
8193
|
header,
|
|
8157
|
-
/* @__PURE__ */
|
|
8194
|
+
/* @__PURE__ */ jsx84("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8158
8195
|
] });
|
|
8159
8196
|
}
|
|
8160
8197
|
const question = t.question(config.statLabel);
|
|
@@ -8166,44 +8203,45 @@ function StatLadderGame({
|
|
|
8166
8203
|
if (selectedId === null || submitting || revealed) return;
|
|
8167
8204
|
onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
|
|
8168
8205
|
}
|
|
8169
|
-
return /* @__PURE__ */
|
|
8206
|
+
return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
8170
8207
|
header,
|
|
8171
|
-
/* @__PURE__ */
|
|
8172
|
-
/* @__PURE__ */
|
|
8173
|
-
|
|
8174
|
-
/* @__PURE__ */
|
|
8208
|
+
/* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
|
|
8209
|
+
!revealed && /* @__PURE__ */ jsx84(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
|
|
8210
|
+
/* @__PURE__ */ jsxs72("div", { className: "ss-g-sl-prompt", children: [
|
|
8211
|
+
/* @__PURE__ */ jsx84(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx84(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
|
|
8212
|
+
/* @__PURE__ */ jsxs72("h3", { className: "ss-g-sl-q", children: [
|
|
8175
8213
|
question.pre,
|
|
8176
|
-
/* @__PURE__ */
|
|
8214
|
+
/* @__PURE__ */ jsx84("em", { children: question.emph }),
|
|
8177
8215
|
question.post
|
|
8178
8216
|
] })
|
|
8179
8217
|
] }),
|
|
8180
|
-
/* @__PURE__ */
|
|
8181
|
-
(rung) => rung.rank === 2 ? /* @__PURE__ */
|
|
8218
|
+
/* @__PURE__ */ jsx84("ol", { className: "ss-g-sl-rungs", children: rungs.map(
|
|
8219
|
+
(rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs72(
|
|
8182
8220
|
"li",
|
|
8183
8221
|
{
|
|
8184
8222
|
className: "ss-g-sl-rung ss-g-sl-rung--mystery",
|
|
8185
8223
|
"data-testid": "sl-mystery-rung",
|
|
8186
8224
|
"data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
|
|
8187
8225
|
children: [
|
|
8188
|
-
/* @__PURE__ */
|
|
8189
|
-
revealed ? /* @__PURE__ */
|
|
8190
|
-
revealed ? /* @__PURE__ */
|
|
8191
|
-
/* @__PURE__ */
|
|
8226
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-sl-rank", children: "2" }),
|
|
8227
|
+
revealed ? /* @__PURE__ */ jsx84(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx84(Silhouette, { size: 52, variant: "mystery" }),
|
|
8228
|
+
revealed ? /* @__PURE__ */ jsx84(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx84("span", { className: "ss-g-sl-who", children: t.whoSecond }),
|
|
8229
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
|
|
8192
8230
|
]
|
|
8193
8231
|
},
|
|
8194
8232
|
rung.rank
|
|
8195
|
-
) : /* @__PURE__ */
|
|
8196
|
-
/* @__PURE__ */
|
|
8197
|
-
/* @__PURE__ */
|
|
8198
|
-
/* @__PURE__ */
|
|
8199
|
-
/* @__PURE__ */
|
|
8233
|
+
) : /* @__PURE__ */ jsxs72("li", { className: "ss-g-sl-rung", children: [
|
|
8234
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-sl-rank", children: rung.rank }),
|
|
8235
|
+
/* @__PURE__ */ jsx84(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
|
|
8236
|
+
/* @__PURE__ */ jsx84(NameStack, { name: rung.playerName ?? "?" }),
|
|
8237
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-sl-val", children: rung.statValue })
|
|
8200
8238
|
] }, rung.rank)
|
|
8201
8239
|
) }),
|
|
8202
|
-
clue && /* @__PURE__ */
|
|
8203
|
-
/* @__PURE__ */
|
|
8204
|
-
/* @__PURE__ */
|
|
8240
|
+
clue && /* @__PURE__ */ jsxs72("p", { className: "ss-g-sl-clue", children: [
|
|
8241
|
+
/* @__PURE__ */ jsx84(IconBulb, {}),
|
|
8242
|
+
/* @__PURE__ */ jsx84("span", { children: t.clue(clue, config.statLabel) })
|
|
8205
8243
|
] }),
|
|
8206
|
-
!revealed && /* @__PURE__ */
|
|
8244
|
+
!revealed && /* @__PURE__ */ jsx84("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx84("li", { children: /* @__PURE__ */ jsxs72(
|
|
8207
8245
|
"button",
|
|
8208
8246
|
{
|
|
8209
8247
|
type: "button",
|
|
@@ -8216,13 +8254,13 @@ function StatLadderGame({
|
|
|
8216
8254
|
setQuery(p.playerName);
|
|
8217
8255
|
},
|
|
8218
8256
|
children: [
|
|
8219
|
-
/* @__PURE__ */
|
|
8220
|
-
/* @__PURE__ */
|
|
8221
|
-
selectedId === p.playerId && /* @__PURE__ */
|
|
8257
|
+
/* @__PURE__ */ jsx84(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
|
|
8258
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
|
|
8259
|
+
selectedId === p.playerId && /* @__PURE__ */ jsx84(IconCheck, {})
|
|
8222
8260
|
]
|
|
8223
8261
|
}
|
|
8224
8262
|
) }, p.playerId)) }),
|
|
8225
|
-
revealed && /* @__PURE__ */
|
|
8263
|
+
revealed && /* @__PURE__ */ jsx84(
|
|
8226
8264
|
ResultCard,
|
|
8227
8265
|
{
|
|
8228
8266
|
tone: clientState.isCorrect ? "win" : "lose",
|
|
@@ -8233,8 +8271,8 @@ function StatLadderGame({
|
|
|
8233
8271
|
}
|
|
8234
8272
|
)
|
|
8235
8273
|
] }),
|
|
8236
|
-
!revealed && /* @__PURE__ */
|
|
8237
|
-
/* @__PURE__ */
|
|
8274
|
+
!revealed && /* @__PURE__ */ jsx84(FooterBar, { children: /* @__PURE__ */ jsxs72("div", { className: "ss-g-sl-guess", children: [
|
|
8275
|
+
/* @__PURE__ */ jsx84(
|
|
8238
8276
|
SearchField,
|
|
8239
8277
|
{
|
|
8240
8278
|
id: searchId,
|
|
@@ -8249,13 +8287,13 @@ function StatLadderGame({
|
|
|
8249
8287
|
disabled: submitting
|
|
8250
8288
|
}
|
|
8251
8289
|
),
|
|
8252
|
-
/* @__PURE__ */
|
|
8290
|
+
/* @__PURE__ */ jsx84(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
|
|
8253
8291
|
] }) })
|
|
8254
8292
|
] });
|
|
8255
8293
|
}
|
|
8256
8294
|
|
|
8257
8295
|
// src/components/games/FanMotmGame.tsx
|
|
8258
|
-
import { jsx as
|
|
8296
|
+
import { jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
8259
8297
|
function parseClientState10(json) {
|
|
8260
8298
|
if (!json) return null;
|
|
8261
8299
|
try {
|
|
@@ -8276,20 +8314,20 @@ function FanMotmGame({
|
|
|
8276
8314
|
const clientState = parseClientState10(result?.clientStateJson);
|
|
8277
8315
|
const alreadyVoted = result?.alreadyPlayed === true;
|
|
8278
8316
|
const pickedId = clientState?.pickedPlayerId ?? null;
|
|
8279
|
-
const header = /* @__PURE__ */
|
|
8317
|
+
const header = /* @__PURE__ */ jsx85(
|
|
8280
8318
|
GameHeader,
|
|
8281
8319
|
{
|
|
8282
8320
|
title: t.title,
|
|
8283
8321
|
eyebrow: t.eyebrow,
|
|
8284
|
-
right: alreadyVoted ? /* @__PURE__ */
|
|
8322
|
+
right: alreadyVoted ? /* @__PURE__ */ jsx85(Chip, { variant: "success", icon: /* @__PURE__ */ jsx85(IconCheck, {}), children: t.voted }) : void 0,
|
|
8285
8323
|
onBack,
|
|
8286
8324
|
backLabel: ui.back
|
|
8287
8325
|
}
|
|
8288
8326
|
);
|
|
8289
8327
|
if (!config) {
|
|
8290
|
-
return /* @__PURE__ */
|
|
8328
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
8291
8329
|
header,
|
|
8292
|
-
/* @__PURE__ */
|
|
8330
|
+
/* @__PURE__ */ jsx85("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8293
8331
|
] });
|
|
8294
8332
|
}
|
|
8295
8333
|
const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
|
|
@@ -8297,12 +8335,12 @@ function FanMotmGame({
|
|
|
8297
8335
|
if (alreadyVoted || submitting) return;
|
|
8298
8336
|
onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
|
|
8299
8337
|
}
|
|
8300
|
-
return /* @__PURE__ */
|
|
8338
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
8301
8339
|
header,
|
|
8302
|
-
/* @__PURE__ */
|
|
8303
|
-
/* @__PURE__ */
|
|
8340
|
+
/* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
|
|
8341
|
+
/* @__PURE__ */ jsx85("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
|
|
8304
8342
|
const isVoted = alreadyVoted && pickedId === c.playerId;
|
|
8305
|
-
return /* @__PURE__ */
|
|
8343
|
+
return /* @__PURE__ */ jsx85("li", { children: /* @__PURE__ */ jsxs73(
|
|
8306
8344
|
"button",
|
|
8307
8345
|
{
|
|
8308
8346
|
type: "button",
|
|
@@ -8311,24 +8349,24 @@ function FanMotmGame({
|
|
|
8311
8349
|
disabled: alreadyVoted || submitting,
|
|
8312
8350
|
onClick: () => handleVote(c.playerId),
|
|
8313
8351
|
children: [
|
|
8314
|
-
/* @__PURE__ */
|
|
8315
|
-
/* @__PURE__ */
|
|
8316
|
-
isVoted && /* @__PURE__ */
|
|
8352
|
+
/* @__PURE__ */ jsx85(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
|
|
8353
|
+
/* @__PURE__ */ jsx85("span", { className: "ss-g-motm-name", children: c.playerName }),
|
|
8354
|
+
isVoted && /* @__PURE__ */ jsx85(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
|
|
8317
8355
|
]
|
|
8318
8356
|
}
|
|
8319
8357
|
) }, c.playerId);
|
|
8320
8358
|
}) }),
|
|
8321
|
-
alreadyVoted && picked && /* @__PURE__ */
|
|
8359
|
+
alreadyVoted && picked && /* @__PURE__ */ jsx85(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
|
|
8322
8360
|
] }),
|
|
8323
|
-
/* @__PURE__ */
|
|
8324
|
-
!alreadyVoted && /* @__PURE__ */
|
|
8325
|
-
/* @__PURE__ */
|
|
8361
|
+
/* @__PURE__ */ jsxs73(FooterBar, { children: [
|
|
8362
|
+
!alreadyVoted && /* @__PURE__ */ jsx85("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
|
|
8363
|
+
/* @__PURE__ */ jsx85("p", { className: "ss-g-motm-fun", children: t.forFun })
|
|
8326
8364
|
] })
|
|
8327
8365
|
] });
|
|
8328
8366
|
}
|
|
8329
8367
|
|
|
8330
8368
|
// src/components/GameScreenHost.tsx
|
|
8331
|
-
import { jsx as
|
|
8369
|
+
import { jsx as jsx86 } from "react/jsx-runtime";
|
|
8332
8370
|
var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
|
|
8333
8371
|
"matchday-predictor",
|
|
8334
8372
|
"starting-xi",
|
|
@@ -8404,7 +8442,7 @@ function GameScreenHost({
|
|
|
8404
8442
|
function renderScreen() {
|
|
8405
8443
|
switch (gameId) {
|
|
8406
8444
|
case "mystery-tiger":
|
|
8407
|
-
return /* @__PURE__ */
|
|
8445
|
+
return /* @__PURE__ */ jsx86(
|
|
8408
8446
|
MysteryTigerGame,
|
|
8409
8447
|
{
|
|
8410
8448
|
...sharedProps,
|
|
@@ -8412,7 +8450,7 @@ function GameScreenHost({
|
|
|
8412
8450
|
}
|
|
8413
8451
|
);
|
|
8414
8452
|
case "higher-or-lower":
|
|
8415
|
-
return /* @__PURE__ */
|
|
8453
|
+
return /* @__PURE__ */ jsx86(
|
|
8416
8454
|
HigherOrLowerGame,
|
|
8417
8455
|
{
|
|
8418
8456
|
...sharedProps,
|
|
@@ -8420,7 +8458,7 @@ function GameScreenHost({
|
|
|
8420
8458
|
}
|
|
8421
8459
|
);
|
|
8422
8460
|
case "career-path":
|
|
8423
|
-
return /* @__PURE__ */
|
|
8461
|
+
return /* @__PURE__ */ jsx86(
|
|
8424
8462
|
CareerPathGame,
|
|
8425
8463
|
{
|
|
8426
8464
|
...sharedProps,
|
|
@@ -8429,7 +8467,7 @@ function GameScreenHost({
|
|
|
8429
8467
|
);
|
|
8430
8468
|
case "beat-the-grid": {
|
|
8431
8469
|
const btgConfig = safeParseConfig(configJson);
|
|
8432
|
-
return /* @__PURE__ */
|
|
8470
|
+
return /* @__PURE__ */ jsx86(
|
|
8433
8471
|
BeatTheGridGame,
|
|
8434
8472
|
{
|
|
8435
8473
|
...sharedProps,
|
|
@@ -8439,7 +8477,7 @@ function GameScreenHost({
|
|
|
8439
8477
|
);
|
|
8440
8478
|
}
|
|
8441
8479
|
case "guess-the-xi":
|
|
8442
|
-
return /* @__PURE__ */
|
|
8480
|
+
return /* @__PURE__ */ jsx86(
|
|
8443
8481
|
GuessTheXiGame,
|
|
8444
8482
|
{
|
|
8445
8483
|
...sharedProps,
|
|
@@ -8447,7 +8485,7 @@ function GameScreenHost({
|
|
|
8447
8485
|
}
|
|
8448
8486
|
);
|
|
8449
8487
|
case "daily-quiz":
|
|
8450
|
-
return /* @__PURE__ */
|
|
8488
|
+
return /* @__PURE__ */ jsx86(
|
|
8451
8489
|
DailyQuizGame,
|
|
8452
8490
|
{
|
|
8453
8491
|
...sharedProps,
|
|
@@ -8455,7 +8493,7 @@ function GameScreenHost({
|
|
|
8455
8493
|
}
|
|
8456
8494
|
);
|
|
8457
8495
|
case "matchday-predictor":
|
|
8458
|
-
return /* @__PURE__ */
|
|
8496
|
+
return /* @__PURE__ */ jsx86(
|
|
8459
8497
|
MatchdayPredictorGame,
|
|
8460
8498
|
{
|
|
8461
8499
|
...sharedProps,
|
|
@@ -8463,7 +8501,7 @@ function GameScreenHost({
|
|
|
8463
8501
|
}
|
|
8464
8502
|
);
|
|
8465
8503
|
case "starting-xi":
|
|
8466
|
-
return /* @__PURE__ */
|
|
8504
|
+
return /* @__PURE__ */ jsx86(
|
|
8467
8505
|
StartingXiGame,
|
|
8468
8506
|
{
|
|
8469
8507
|
...sharedProps,
|
|
@@ -8471,7 +8509,7 @@ function GameScreenHost({
|
|
|
8471
8509
|
}
|
|
8472
8510
|
);
|
|
8473
8511
|
case "stat-ladder":
|
|
8474
|
-
return /* @__PURE__ */
|
|
8512
|
+
return /* @__PURE__ */ jsx86(
|
|
8475
8513
|
StatLadderGame,
|
|
8476
8514
|
{
|
|
8477
8515
|
...sharedProps,
|
|
@@ -8479,7 +8517,7 @@ function GameScreenHost({
|
|
|
8479
8517
|
}
|
|
8480
8518
|
);
|
|
8481
8519
|
case "fan-motm":
|
|
8482
|
-
return /* @__PURE__ */
|
|
8520
|
+
return /* @__PURE__ */ jsx86(
|
|
8483
8521
|
FanMotmGame,
|
|
8484
8522
|
{
|
|
8485
8523
|
...sharedProps,
|
|
@@ -8487,10 +8525,10 @@ function GameScreenHost({
|
|
|
8487
8525
|
}
|
|
8488
8526
|
);
|
|
8489
8527
|
default:
|
|
8490
|
-
return /* @__PURE__ */
|
|
8528
|
+
return /* @__PURE__ */ jsx86("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx86(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
|
|
8491
8529
|
}
|
|
8492
8530
|
}
|
|
8493
|
-
return /* @__PURE__ */
|
|
8531
|
+
return /* @__PURE__ */ jsx86("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
|
|
8494
8532
|
}
|
|
8495
8533
|
|
|
8496
8534
|
// src/components/games/ui/fonts.ts
|
|
@@ -8507,7 +8545,7 @@ function ensureGamesFonts(doc = document) {
|
|
|
8507
8545
|
}
|
|
8508
8546
|
|
|
8509
8547
|
// src/components/GamesPanel.tsx
|
|
8510
|
-
import { jsx as
|
|
8548
|
+
import { jsx as jsx87 } from "react/jsx-runtime";
|
|
8511
8549
|
function GamesPanel({
|
|
8512
8550
|
loggedIn,
|
|
8513
8551
|
games,
|
|
@@ -8520,9 +8558,9 @@ function GamesPanel({
|
|
|
8520
8558
|
useEffect22(() => {
|
|
8521
8559
|
ensureGamesFonts();
|
|
8522
8560
|
}, []);
|
|
8523
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
8561
|
+
if (!loggedIn) return /* @__PURE__ */ jsx87(GamesLoginWall, { ui });
|
|
8524
8562
|
if (selected !== null) {
|
|
8525
|
-
return /* @__PURE__ */
|
|
8563
|
+
return /* @__PURE__ */ jsx87("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx87(
|
|
8526
8564
|
GameScreenHost,
|
|
8527
8565
|
{
|
|
8528
8566
|
selected,
|
|
@@ -8536,7 +8574,7 @@ function GamesPanel({
|
|
|
8536
8574
|
}
|
|
8537
8575
|
) });
|
|
8538
8576
|
}
|
|
8539
|
-
return /* @__PURE__ */
|
|
8577
|
+
return /* @__PURE__ */ jsx87("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx87(
|
|
8540
8578
|
GamesHub,
|
|
8541
8579
|
{
|
|
8542
8580
|
games,
|
|
@@ -8551,7 +8589,7 @@ function GamesPanel({
|
|
|
8551
8589
|
import { useState as useState40 } from "react";
|
|
8552
8590
|
|
|
8553
8591
|
// src/components/LeaderboardRow.tsx
|
|
8554
|
-
import { jsx as
|
|
8592
|
+
import { jsx as jsx88, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
8555
8593
|
function formatPoints(n) {
|
|
8556
8594
|
return n.toLocaleString("en");
|
|
8557
8595
|
}
|
|
@@ -8560,14 +8598,14 @@ function LeaderboardWeeklyRow({
|
|
|
8560
8598
|
isMe
|
|
8561
8599
|
}) {
|
|
8562
8600
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
8563
|
-
return /* @__PURE__ */
|
|
8564
|
-
/* @__PURE__ */
|
|
8601
|
+
return /* @__PURE__ */ jsxs74("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
8602
|
+
/* @__PURE__ */ jsxs74("span", { className: rankClass, children: [
|
|
8565
8603
|
"#",
|
|
8566
8604
|
row.rank
|
|
8567
8605
|
] }),
|
|
8568
|
-
/* @__PURE__ */
|
|
8569
|
-
/* @__PURE__ */
|
|
8570
|
-
row.currentStreak > 0 && /* @__PURE__ */
|
|
8606
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
8607
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
|
|
8608
|
+
row.currentStreak > 0 && /* @__PURE__ */ jsxs74("span", { className: "ss-w-lb2-streak", children: [
|
|
8571
8609
|
"\u{1F525} ",
|
|
8572
8610
|
row.currentStreak
|
|
8573
8611
|
] })
|
|
@@ -8578,18 +8616,18 @@ function LeaderboardAllTimeRow({
|
|
|
8578
8616
|
isMe
|
|
8579
8617
|
}) {
|
|
8580
8618
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
8581
|
-
return /* @__PURE__ */
|
|
8582
|
-
/* @__PURE__ */
|
|
8619
|
+
return /* @__PURE__ */ jsxs74("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
8620
|
+
/* @__PURE__ */ jsxs74("span", { className: rankClass, children: [
|
|
8583
8621
|
"#",
|
|
8584
8622
|
row.rank
|
|
8585
8623
|
] }),
|
|
8586
|
-
/* @__PURE__ */
|
|
8587
|
-
/* @__PURE__ */
|
|
8624
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
8625
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
|
|
8588
8626
|
] });
|
|
8589
8627
|
}
|
|
8590
8628
|
|
|
8591
8629
|
// src/components/LeaderboardEmpty.tsx
|
|
8592
|
-
import { jsx as
|
|
8630
|
+
import { jsx as jsx89, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
8593
8631
|
function LeaderboardEmpty({
|
|
8594
8632
|
segment,
|
|
8595
8633
|
lastWeek,
|
|
@@ -8598,36 +8636,36 @@ function LeaderboardEmpty({
|
|
|
8598
8636
|
ui
|
|
8599
8637
|
}) {
|
|
8600
8638
|
if (segment === "alltime") {
|
|
8601
|
-
return /* @__PURE__ */
|
|
8602
|
-
/* @__PURE__ */
|
|
8603
|
-
/* @__PURE__ */
|
|
8639
|
+
return /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
|
|
8640
|
+
/* @__PURE__ */ jsx89("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
|
|
8641
|
+
/* @__PURE__ */ jsx89("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
|
|
8604
8642
|
] });
|
|
8605
8643
|
}
|
|
8606
8644
|
const fresh = lastWeek != null;
|
|
8607
8645
|
const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
|
|
8608
8646
|
const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
|
|
8609
|
-
return /* @__PURE__ */
|
|
8610
|
-
weeklyPrize && /* @__PURE__ */
|
|
8611
|
-
/* @__PURE__ */
|
|
8612
|
-
/* @__PURE__ */
|
|
8647
|
+
return /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty", children: [
|
|
8648
|
+
weeklyPrize && /* @__PURE__ */ jsxs75("div", { className: "ss-w-prize", children: [
|
|
8649
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
|
|
8650
|
+
/* @__PURE__ */ jsx89("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx89("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
|
|
8613
8651
|
] }),
|
|
8614
|
-
/* @__PURE__ */
|
|
8615
|
-
/* @__PURE__ */
|
|
8616
|
-
/* @__PURE__ */
|
|
8617
|
-
/* @__PURE__ */
|
|
8618
|
-
onPlay && /* @__PURE__ */
|
|
8652
|
+
/* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-empty-hero", children: [
|
|
8653
|
+
/* @__PURE__ */ jsx89("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
|
|
8654
|
+
/* @__PURE__ */ jsx89("h4", { className: "ss-w-lb-empty-title", children: title }),
|
|
8655
|
+
/* @__PURE__ */ jsx89("p", { className: "ss-w-lb-empty-body", children: body }),
|
|
8656
|
+
onPlay && /* @__PURE__ */ jsx89("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
|
|
8619
8657
|
] }),
|
|
8620
|
-
fresh && lastWeek && /* @__PURE__ */
|
|
8621
|
-
/* @__PURE__ */
|
|
8622
|
-
/* @__PURE__ */
|
|
8623
|
-
/* @__PURE__ */
|
|
8624
|
-
/* @__PURE__ */
|
|
8658
|
+
fresh && lastWeek && /* @__PURE__ */ jsxs75("div", { className: "ss-w-lb-last", children: [
|
|
8659
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
|
|
8660
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
|
|
8661
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
|
|
8662
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
|
|
8625
8663
|
] })
|
|
8626
8664
|
] });
|
|
8627
8665
|
}
|
|
8628
8666
|
|
|
8629
8667
|
// src/components/Leaderboard.tsx
|
|
8630
|
-
import { Fragment as
|
|
8668
|
+
import { Fragment as Fragment20, jsx as jsx90, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
8631
8669
|
function Leaderboard({
|
|
8632
8670
|
data,
|
|
8633
8671
|
ui,
|
|
@@ -8637,9 +8675,9 @@ function Leaderboard({
|
|
|
8637
8675
|
const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
|
|
8638
8676
|
const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
|
|
8639
8677
|
const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
|
|
8640
|
-
return /* @__PURE__ */
|
|
8641
|
-
/* @__PURE__ */
|
|
8642
|
-
/* @__PURE__ */
|
|
8678
|
+
return /* @__PURE__ */ jsxs76("div", { className: "ss-w-lb2", children: [
|
|
8679
|
+
/* @__PURE__ */ jsxs76("div", { className: "ss-w-seg", children: [
|
|
8680
|
+
/* @__PURE__ */ jsx90(
|
|
8643
8681
|
"button",
|
|
8644
8682
|
{
|
|
8645
8683
|
type: "button",
|
|
@@ -8649,7 +8687,7 @@ function Leaderboard({
|
|
|
8649
8687
|
children: ui.leaderboardThisWeek
|
|
8650
8688
|
}
|
|
8651
8689
|
),
|
|
8652
|
-
/* @__PURE__ */
|
|
8690
|
+
/* @__PURE__ */ jsx90(
|
|
8653
8691
|
"button",
|
|
8654
8692
|
{
|
|
8655
8693
|
type: "button",
|
|
@@ -8660,7 +8698,7 @@ function Leaderboard({
|
|
|
8660
8698
|
}
|
|
8661
8699
|
)
|
|
8662
8700
|
] }),
|
|
8663
|
-
isEmpty ? /* @__PURE__ */
|
|
8701
|
+
isEmpty ? /* @__PURE__ */ jsx90(
|
|
8664
8702
|
LeaderboardEmpty,
|
|
8665
8703
|
{
|
|
8666
8704
|
segment,
|
|
@@ -8669,15 +8707,15 @@ function Leaderboard({
|
|
|
8669
8707
|
onPlay,
|
|
8670
8708
|
ui
|
|
8671
8709
|
}
|
|
8672
|
-
) : /* @__PURE__ */
|
|
8673
|
-
/* @__PURE__ */
|
|
8710
|
+
) : /* @__PURE__ */ jsxs76(Fragment20, { children: [
|
|
8711
|
+
/* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx90(
|
|
8674
8712
|
LeaderboardWeeklyRow,
|
|
8675
8713
|
{
|
|
8676
8714
|
row,
|
|
8677
8715
|
isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
|
|
8678
8716
|
},
|
|
8679
8717
|
row.operatorUserId
|
|
8680
|
-
)) : data.allTimeTop.map((row) => /* @__PURE__ */
|
|
8718
|
+
)) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx90(
|
|
8681
8719
|
LeaderboardAllTimeRow,
|
|
8682
8720
|
{
|
|
8683
8721
|
row,
|
|
@@ -8685,18 +8723,18 @@ function Leaderboard({
|
|
|
8685
8723
|
},
|
|
8686
8724
|
row.operatorUserId
|
|
8687
8725
|
)) }),
|
|
8688
|
-
/* @__PURE__ */
|
|
8689
|
-
myRow != null && (offBoard ? /* @__PURE__ */
|
|
8690
|
-
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */
|
|
8691
|
-
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */
|
|
8726
|
+
/* @__PURE__ */ jsx90("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
|
|
8727
|
+
myRow != null && (offBoard ? /* @__PURE__ */ jsx90("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs76("div", { className: "ss-w-lb2-rows", children: [
|
|
8728
|
+
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx90(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
|
|
8729
|
+
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx90(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
|
|
8692
8730
|
] })),
|
|
8693
|
-
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */
|
|
8731
|
+
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx90("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
|
|
8694
8732
|
] })
|
|
8695
8733
|
] });
|
|
8696
8734
|
}
|
|
8697
8735
|
|
|
8698
8736
|
// src/components/LeaderboardPanel.tsx
|
|
8699
|
-
import { jsx as
|
|
8737
|
+
import { jsx as jsx91 } from "react/jsx-runtime";
|
|
8700
8738
|
var EMPTY_PAYLOAD = {
|
|
8701
8739
|
week: "",
|
|
8702
8740
|
weeklyTop: [],
|
|
@@ -8707,19 +8745,19 @@ var EMPTY_PAYLOAD = {
|
|
|
8707
8745
|
lastWeek: null
|
|
8708
8746
|
};
|
|
8709
8747
|
function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
|
|
8710
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
8711
|
-
if (data === null && loading) return /* @__PURE__ */
|
|
8712
|
-
return /* @__PURE__ */
|
|
8748
|
+
if (!loggedIn) return /* @__PURE__ */ jsx91(GamesLoginWall, { ui });
|
|
8749
|
+
if (data === null && loading) return /* @__PURE__ */ jsx91("div", { className: "ss-w-mon-list" });
|
|
8750
|
+
return /* @__PURE__ */ jsx91("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx91(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
|
|
8713
8751
|
}
|
|
8714
8752
|
|
|
8715
8753
|
// src/components/PresetSpeedDial.tsx
|
|
8716
8754
|
import { useId as useId9 } from "react";
|
|
8717
|
-
import { jsx as
|
|
8755
|
+
import { jsx as jsx92, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
8718
8756
|
function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
|
|
8719
8757
|
const pillsId = useId9();
|
|
8720
8758
|
const tabIndex = expanded ? 0 : -1;
|
|
8721
|
-
return /* @__PURE__ */
|
|
8722
|
-
/* @__PURE__ */
|
|
8759
|
+
return /* @__PURE__ */ jsxs77("div", { ref: rootRef, className: "ss-w-dial", children: [
|
|
8760
|
+
/* @__PURE__ */ jsxs77(
|
|
8723
8761
|
"button",
|
|
8724
8762
|
{
|
|
8725
8763
|
ref: buttonRef,
|
|
@@ -8730,28 +8768,28 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
|
|
|
8730
8768
|
"aria-label": strings.dialName,
|
|
8731
8769
|
onClick: onToggle,
|
|
8732
8770
|
children: [
|
|
8733
|
-
/* @__PURE__ */
|
|
8734
|
-
/* @__PURE__ */
|
|
8735
|
-
showDot && !expanded ? /* @__PURE__ */
|
|
8771
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx92(SlidersIcon, {}) }),
|
|
8772
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx92(CloseIcon, {}) }),
|
|
8773
|
+
showDot && !expanded ? /* @__PURE__ */ jsx92("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
|
|
8736
8774
|
]
|
|
8737
8775
|
}
|
|
8738
8776
|
),
|
|
8739
|
-
/* @__PURE__ */
|
|
8740
|
-
/* @__PURE__ */
|
|
8741
|
-
/* @__PURE__ */
|
|
8742
|
-
/* @__PURE__ */
|
|
8777
|
+
/* @__PURE__ */ jsxs77("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
|
|
8778
|
+
/* @__PURE__ */ jsxs77("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
|
|
8779
|
+
/* @__PURE__ */ jsx92(SlidersIcon, {}),
|
|
8780
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
|
|
8743
8781
|
] }),
|
|
8744
|
-
/* @__PURE__ */
|
|
8745
|
-
/* @__PURE__ */
|
|
8746
|
-
/* @__PURE__ */
|
|
8782
|
+
/* @__PURE__ */ jsxs77("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
|
|
8783
|
+
/* @__PURE__ */ jsx92(ComboIcon, {}),
|
|
8784
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
|
|
8747
8785
|
] })
|
|
8748
8786
|
] })
|
|
8749
8787
|
] });
|
|
8750
8788
|
}
|
|
8751
8789
|
|
|
8752
8790
|
// src/components/PresetTools.tsx
|
|
8753
|
-
import { Fragment as
|
|
8754
|
-
import { Fragment as
|
|
8791
|
+
import { Fragment as Fragment21, useEffect as useEffect23, useId as useId10, useRef as useRef19, useState as useState41 } from "react";
|
|
8792
|
+
import { Fragment as Fragment22, jsx as jsx93, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
8755
8793
|
var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
8756
8794
|
function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
8757
8795
|
const dialogRef = useRef19(null);
|
|
@@ -8789,79 +8827,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
|
8789
8827
|
first.focus();
|
|
8790
8828
|
}
|
|
8791
8829
|
};
|
|
8792
|
-
return /* @__PURE__ */
|
|
8793
|
-
/* @__PURE__ */
|
|
8794
|
-
/* @__PURE__ */
|
|
8795
|
-
/* @__PURE__ */
|
|
8830
|
+
return /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs78("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
|
|
8831
|
+
/* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-head", children: [
|
|
8832
|
+
/* @__PURE__ */ jsx93("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
|
|
8833
|
+
/* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx93(CloseIcon, {}) })
|
|
8796
8834
|
] }),
|
|
8797
|
-
/* @__PURE__ */
|
|
8798
|
-
footer ? /* @__PURE__ */
|
|
8835
|
+
/* @__PURE__ */ jsx93("div", { className: "ss-w-tool-body", children }),
|
|
8836
|
+
footer ? /* @__PURE__ */ jsx93("div", { className: "ss-w-tool-foot", children: footer }) : null
|
|
8799
8837
|
] }) });
|
|
8800
8838
|
}
|
|
8801
8839
|
function fillTemplate(template, slots) {
|
|
8802
8840
|
return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
|
|
8803
8841
|
const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
|
|
8804
|
-
return /* @__PURE__ */
|
|
8842
|
+
return /* @__PURE__ */ jsx93(Fragment21, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
|
|
8805
8843
|
});
|
|
8806
8844
|
}
|
|
8807
8845
|
function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
|
|
8808
8846
|
const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
|
|
8809
|
-
return /* @__PURE__ */
|
|
8810
|
-
/* @__PURE__ */
|
|
8811
|
-
/* @__PURE__ */
|
|
8847
|
+
return /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-num", children: [
|
|
8848
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
|
|
8849
|
+
/* @__PURE__ */ jsx93("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
|
|
8812
8850
|
const c = choices2[Number(e.target.value)];
|
|
8813
8851
|
if (c) onChoose(c.value);
|
|
8814
|
-
}, children: choices2.map((c, i) => /* @__PURE__ */
|
|
8852
|
+
}, children: choices2.map((c, i) => /* @__PURE__ */ jsx93("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
|
|
8815
8853
|
] });
|
|
8816
8854
|
}
|
|
8817
8855
|
function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
|
|
8818
8856
|
const sizeText = sizeLabels[currentIdx] ?? "";
|
|
8819
|
-
return /* @__PURE__ */
|
|
8820
|
-
/* @__PURE__ */
|
|
8821
|
-
/* @__PURE__ */
|
|
8857
|
+
return /* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-num", children: [
|
|
8858
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
|
|
8859
|
+
/* @__PURE__ */ jsx93("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__ */ jsx93("option", { value: String(i), children: opt }, i)) })
|
|
8822
8860
|
] });
|
|
8823
8861
|
}
|
|
8824
8862
|
function SendButton({ label, display, disabled, onClick }) {
|
|
8825
|
-
return /* @__PURE__ */
|
|
8863
|
+
return /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
|
|
8826
8864
|
}
|
|
8827
8865
|
function PickList({ picks, formatKickoff }) {
|
|
8828
|
-
return /* @__PURE__ */
|
|
8829
|
-
/* @__PURE__ */
|
|
8866
|
+
return /* @__PURE__ */ jsx93("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs78("li", { className: "ss-w-tool-pick", children: [
|
|
8867
|
+
/* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-pick-match", children: [
|
|
8830
8868
|
p.homeTeamName,
|
|
8831
8869
|
" \u2013 ",
|
|
8832
8870
|
p.awayTeamName
|
|
8833
8871
|
] }),
|
|
8834
|
-
/* @__PURE__ */
|
|
8872
|
+
/* @__PURE__ */ jsxs78("span", { className: "ss-w-tool-pick-sel", children: [
|
|
8835
8873
|
p.marketLabel,
|
|
8836
8874
|
": ",
|
|
8837
8875
|
p.selectionLabel,
|
|
8838
8876
|
p.line ? ` ${p.line}` : ""
|
|
8839
8877
|
] }),
|
|
8840
|
-
/* @__PURE__ */
|
|
8841
|
-
/* @__PURE__ */
|
|
8878
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
|
|
8879
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
|
|
8842
8880
|
] }, p.matchOddsId)) });
|
|
8843
8881
|
}
|
|
8844
8882
|
function ComboPreview({ cell, formatKickoff }) {
|
|
8845
|
-
return /* @__PURE__ */
|
|
8846
|
-
/* @__PURE__ */
|
|
8847
|
-
/* @__PURE__ */
|
|
8883
|
+
return /* @__PURE__ */ jsxs78(Fragment22, { children: [
|
|
8884
|
+
/* @__PURE__ */ jsx93(PickList, { picks: cell.combo.legs, formatKickoff }),
|
|
8885
|
+
/* @__PURE__ */ jsx93("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
|
|
8848
8886
|
] });
|
|
8849
8887
|
}
|
|
8850
8888
|
function Unavailable({ text }) {
|
|
8851
|
-
return /* @__PURE__ */
|
|
8889
|
+
return /* @__PURE__ */ jsx93("p", { className: "ss-w-tool-unavailable", children: text });
|
|
8852
8890
|
}
|
|
8853
8891
|
function AskRow({ icon, ask, ready, send }) {
|
|
8854
|
-
return /* @__PURE__ */
|
|
8855
|
-
/* @__PURE__ */
|
|
8856
|
-
/* @__PURE__ */
|
|
8857
|
-
/* @__PURE__ */
|
|
8858
|
-
ready ? /* @__PURE__ */
|
|
8892
|
+
return /* @__PURE__ */ jsxs78("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
|
|
8893
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
|
|
8894
|
+
/* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-main", children: [
|
|
8895
|
+
/* @__PURE__ */ jsx93("p", { className: "ss-w-tool-ask", children: ask }),
|
|
8896
|
+
ready ? /* @__PURE__ */ jsx93("span", { className: "ss-w-tool-ready", children: ready }) : null
|
|
8859
8897
|
] }),
|
|
8860
8898
|
send
|
|
8861
8899
|
] });
|
|
8862
8900
|
}
|
|
8863
8901
|
function RoundSend({ label, display, disabled, onClick }) {
|
|
8864
|
-
return /* @__PURE__ */
|
|
8902
|
+
return /* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx93(SendIcon, {}) });
|
|
8865
8903
|
}
|
|
8866
8904
|
var BIG_COMBO = { total: 50, legs: 6 };
|
|
8867
8905
|
function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
@@ -8927,77 +8965,77 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
|
8927
8965
|
const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
|
|
8928
8966
|
const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
|
|
8929
8967
|
const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
|
|
8930
|
-
return /* @__PURE__ */
|
|
8931
|
-
/* @__PURE__ */
|
|
8968
|
+
return /* @__PURE__ */ jsxs78(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
|
|
8969
|
+
/* @__PURE__ */ jsx93(
|
|
8932
8970
|
AskRow,
|
|
8933
8971
|
{
|
|
8934
8972
|
icon: "\u{1F3AF}",
|
|
8935
8973
|
ask: fillTemplate(strings.maxPriceRow, {
|
|
8936
8974
|
count: String(count),
|
|
8937
|
-
price: /* @__PURE__ */
|
|
8975
|
+
price: /* @__PURE__ */ jsx93(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
|
|
8938
8976
|
}),
|
|
8939
8977
|
ready: singlesReady(maxCell),
|
|
8940
|
-
send: /* @__PURE__ */
|
|
8978
|
+
send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
|
|
8941
8979
|
if (maxCell) onSend(maxPriceAsk(maxCell, strings));
|
|
8942
8980
|
} })
|
|
8943
8981
|
}
|
|
8944
8982
|
),
|
|
8945
|
-
/* @__PURE__ */
|
|
8983
|
+
/* @__PURE__ */ jsx93(
|
|
8946
8984
|
AskRow,
|
|
8947
8985
|
{
|
|
8948
8986
|
icon: "\u{1F4C8}",
|
|
8949
8987
|
ask: fillTemplate(strings.minPriceRow, {
|
|
8950
8988
|
count: String(count),
|
|
8951
|
-
price: /* @__PURE__ */
|
|
8989
|
+
price: /* @__PURE__ */ jsx93(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
|
|
8952
8990
|
}),
|
|
8953
8991
|
ready: singlesReady(minCell),
|
|
8954
|
-
send: /* @__PURE__ */
|
|
8992
|
+
send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
|
|
8955
8993
|
if (minCell) onSend(minPriceAsk(minCell, strings));
|
|
8956
8994
|
} })
|
|
8957
8995
|
}
|
|
8958
8996
|
),
|
|
8959
|
-
/* @__PURE__ */
|
|
8997
|
+
/* @__PURE__ */ jsx93(
|
|
8960
8998
|
AskRow,
|
|
8961
8999
|
{
|
|
8962
9000
|
icon: "\u2728",
|
|
8963
9001
|
ask: fillTemplate(strings.comboRow, {
|
|
8964
|
-
legs: /* @__PURE__ */
|
|
8965
|
-
total: /* @__PURE__ */
|
|
9002
|
+
legs: /* @__PURE__ */ jsx93(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
|
|
9003
|
+
total: /* @__PURE__ */ jsx93(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
|
|
8966
9004
|
}),
|
|
8967
9005
|
ready: comboReady(comboCell),
|
|
8968
|
-
send: /* @__PURE__ */
|
|
9006
|
+
send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
|
|
8969
9007
|
if (comboCell) onSend(comboAsk(comboCell, strings));
|
|
8970
9008
|
} })
|
|
8971
9009
|
}
|
|
8972
9010
|
),
|
|
8973
|
-
/* @__PURE__ */
|
|
9011
|
+
/* @__PURE__ */ jsx93(
|
|
8974
9012
|
AskRow,
|
|
8975
9013
|
{
|
|
8976
9014
|
icon: "\u{1F3C6}",
|
|
8977
9015
|
ask: fillTemplate(strings.bigComboRow, {
|
|
8978
|
-
legs: /* @__PURE__ */
|
|
8979
|
-
total: /* @__PURE__ */
|
|
9016
|
+
legs: /* @__PURE__ */ jsx93(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
|
|
9017
|
+
total: /* @__PURE__ */ jsx93(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
|
|
8980
9018
|
}),
|
|
8981
9019
|
ready: comboReady(bigCell),
|
|
8982
|
-
send: /* @__PURE__ */
|
|
9020
|
+
send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
|
|
8983
9021
|
if (bigCell) onSend(comboAsk(bigCell, strings));
|
|
8984
9022
|
} })
|
|
8985
9023
|
}
|
|
8986
9024
|
),
|
|
8987
|
-
markets.length > 0 && /* @__PURE__ */
|
|
9025
|
+
markets.length > 0 && /* @__PURE__ */ jsx93(
|
|
8988
9026
|
AskRow,
|
|
8989
9027
|
{
|
|
8990
9028
|
icon: "\u26BD",
|
|
8991
9029
|
ask: fillTemplate(strings.marketRow, {
|
|
8992
|
-
market: /* @__PURE__ */
|
|
9030
|
+
market: /* @__PURE__ */ jsx93(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
|
|
8993
9031
|
}),
|
|
8994
9032
|
ready: marketCell ? strings.readyCount(marketCell.count) : null,
|
|
8995
|
-
send: /* @__PURE__ */
|
|
9033
|
+
send: /* @__PURE__ */ jsx93(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
|
|
8996
9034
|
if (marketCell) onSend(marketAsk(marketCell, strings));
|
|
8997
9035
|
} })
|
|
8998
9036
|
}
|
|
8999
9037
|
),
|
|
9000
|
-
/* @__PURE__ */
|
|
9038
|
+
/* @__PURE__ */ jsx93("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
9001
9039
|
] });
|
|
9002
9040
|
}
|
|
9003
9041
|
function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
|
|
@@ -9021,24 +9059,24 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
|
|
|
9021
9059
|
const d = strings.comboDisplay(nextLegs, nextTotal);
|
|
9022
9060
|
setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
|
|
9023
9061
|
};
|
|
9024
|
-
const footer = /* @__PURE__ */
|
|
9062
|
+
const footer = /* @__PURE__ */ jsx93(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
|
|
9025
9063
|
if (cell) onSend(comboAsk(cell, strings));
|
|
9026
9064
|
} });
|
|
9027
|
-
return /* @__PURE__ */
|
|
9028
|
-
/* @__PURE__ */
|
|
9029
|
-
/* @__PURE__ */
|
|
9030
|
-
/* @__PURE__ */
|
|
9065
|
+
return /* @__PURE__ */ jsxs78(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
|
|
9066
|
+
/* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
|
|
9067
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
|
|
9068
|
+
/* @__PURE__ */ jsx93("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx93("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)) })
|
|
9031
9069
|
] }),
|
|
9032
|
-
/* @__PURE__ */
|
|
9033
|
-
/* @__PURE__ */
|
|
9034
|
-
/* @__PURE__ */
|
|
9035
|
-
/* @__PURE__ */
|
|
9036
|
-
/* @__PURE__ */
|
|
9037
|
-
/* @__PURE__ */
|
|
9070
|
+
/* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
|
|
9071
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
|
|
9072
|
+
/* @__PURE__ */ jsxs78("div", { className: "ss-w-tool-stepper", children: [
|
|
9073
|
+
/* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
|
|
9074
|
+
/* @__PURE__ */ jsx93("span", { className: "ss-w-tool-count", children: legs }),
|
|
9075
|
+
/* @__PURE__ */ jsx93("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
|
|
9038
9076
|
] })
|
|
9039
9077
|
] }),
|
|
9040
|
-
cell ? /* @__PURE__ */
|
|
9041
|
-
/* @__PURE__ */
|
|
9078
|
+
cell ? /* @__PURE__ */ jsx93(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx93(Unavailable, { text: strings.unavailable }),
|
|
9079
|
+
/* @__PURE__ */ jsx93("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
9042
9080
|
] });
|
|
9043
9081
|
}
|
|
9044
9082
|
|
|
@@ -9140,7 +9178,7 @@ function markToolSeen() {
|
|
|
9140
9178
|
}
|
|
9141
9179
|
|
|
9142
9180
|
// src/components/ChatPanel.tsx
|
|
9143
|
-
import { jsx as
|
|
9181
|
+
import { jsx as jsx94, jsxs as jsxs79 } from "react/jsx-runtime";
|
|
9144
9182
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
9145
9183
|
function useIsModal() {
|
|
9146
9184
|
const [modal, setModal] = useState43(false);
|
|
@@ -9231,8 +9269,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9231
9269
|
focusAfterCloseRef.current = "composer";
|
|
9232
9270
|
setTool(null);
|
|
9233
9271
|
}, [tool, onChatTab, presetGrid]);
|
|
9234
|
-
return /* @__PURE__ */
|
|
9235
|
-
/* @__PURE__ */
|
|
9272
|
+
return /* @__PURE__ */ jsxs79("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
9273
|
+
/* @__PURE__ */ jsx94(
|
|
9236
9274
|
ChatHeader,
|
|
9237
9275
|
{
|
|
9238
9276
|
onClose: close,
|
|
@@ -9245,7 +9283,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9245
9283
|
moreOptionsLabel: ui.moreOptions
|
|
9246
9284
|
}
|
|
9247
9285
|
),
|
|
9248
|
-
monitor && /* @__PURE__ */
|
|
9286
|
+
monitor && /* @__PURE__ */ jsx94(
|
|
9249
9287
|
TabBar,
|
|
9250
9288
|
{
|
|
9251
9289
|
monitor,
|
|
@@ -9257,9 +9295,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9257
9295
|
gamesEnabled: gamesResult?.enabled ?? false
|
|
9258
9296
|
}
|
|
9259
9297
|
),
|
|
9260
|
-
/* @__PURE__ */
|
|
9261
|
-
/* @__PURE__ */
|
|
9262
|
-
showDial ? /* @__PURE__ */
|
|
9298
|
+
/* @__PURE__ */ jsxs79("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
|
|
9299
|
+
/* @__PURE__ */ jsx94(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx94(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
|
|
9300
|
+
showDial ? /* @__PURE__ */ jsx94(
|
|
9263
9301
|
PresetSpeedDial,
|
|
9264
9302
|
{
|
|
9265
9303
|
expanded: dial.expanded,
|
|
@@ -9271,12 +9309,12 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9271
9309
|
buttonRef: dialButtonRef
|
|
9272
9310
|
}
|
|
9273
9311
|
) : null,
|
|
9274
|
-
tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */
|
|
9312
|
+
tool && presetGrid && onChatTab ? tool.kind === "numbers" ? /* @__PURE__ */ jsx94(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx94(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
|
|
9275
9313
|
] }),
|
|
9276
|
-
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */
|
|
9277
|
-
monitor && monitor.activeTab === "following" && /* @__PURE__ */
|
|
9278
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */
|
|
9279
|
-
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */
|
|
9314
|
+
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx94(TodayPanel, { discovery, ui, monitor }),
|
|
9315
|
+
monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx94(MatchesPanel, { monitor, ui, slip, onAsk: handleAsk }),
|
|
9316
|
+
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx94(OddsPanel, { monitor, ui, slip }),
|
|
9317
|
+
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx94(
|
|
9280
9318
|
GamesPanel,
|
|
9281
9319
|
{
|
|
9282
9320
|
loggedIn: !!loggedIn,
|
|
@@ -9290,7 +9328,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9290
9328
|
}
|
|
9291
9329
|
}
|
|
9292
9330
|
),
|
|
9293
|
-
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */
|
|
9331
|
+
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ jsx94(
|
|
9294
9332
|
LeaderboardPanel,
|
|
9295
9333
|
{
|
|
9296
9334
|
loggedIn: !!loggedIn,
|
|
@@ -9300,7 +9338,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9300
9338
|
ui
|
|
9301
9339
|
}
|
|
9302
9340
|
),
|
|
9303
|
-
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */
|
|
9341
|
+
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ jsx94(
|
|
9304
9342
|
ChatInput,
|
|
9305
9343
|
{
|
|
9306
9344
|
ref: inputRef,
|
|
@@ -9318,9 +9356,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9318
9356
|
}
|
|
9319
9357
|
|
|
9320
9358
|
// src/components/HostEventsProvider.tsx
|
|
9321
|
-
import { jsx as
|
|
9359
|
+
import { jsx as jsx95 } from "react/jsx-runtime";
|
|
9322
9360
|
function HostEventsProvider({ value, children }) {
|
|
9323
|
-
return /* @__PURE__ */
|
|
9361
|
+
return /* @__PURE__ */ jsx95(SlipStateContext.Provider, { value: value.slipState, children });
|
|
9324
9362
|
}
|
|
9325
9363
|
|
|
9326
9364
|
// src/styles/css.generated.ts
|
|
@@ -10965,10 +11003,41 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
10965
11003
|
.ss-g-motm-pill { flex: none; padding: 3px 8px; font-size: 11px; }
|
|
10966
11004
|
.ss-g-motm-foot { font-size: 14px; font-weight: 600; }
|
|
10967
11005
|
.ss-g-motm-fun { font-size: 11px; color: var(--ss-g-faint); }
|
|
11006
|
+
|
|
11007
|
+
/* \u2500\u2500 tap-to-answer tray + per-game team-colour band (u503) \u2500\u2500 */
|
|
11008
|
+
.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; }
|
|
11009
|
+
.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; }
|
|
11010
|
+
.ss-g-tray-chip:hover, .ss-g-tray-chip:focus-visible { background: var(--ss-g-raised); border-color: var(--ss-w-accent); outline: none; }
|
|
11011
|
+
.ss-g-tray-chip:disabled { opacity: .5; cursor: default; }
|
|
11012
|
+
.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; }
|
|
11013
|
+
.ss-g-tray-av img { width: 100%; height: 100%; object-fit: cover; }
|
|
11014
|
+
.ss-g-tray-name { width: 100%; display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
|
|
11015
|
+
.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; }
|
|
11016
|
+
.ss-g-tray-last { max-width: 100%; font-size: 13px; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
11017
|
+
|
|
11018
|
+
/* Each game gets its own band colour: the operator accent mixed into the ground, hue-nudged per game.
|
|
11019
|
+
Browsers without relative colour syntax keep the plain accent mix. */
|
|
11020
|
+
.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)); }
|
|
11021
|
+
@supports (color: oklch(from red l c h)) {
|
|
11022
|
+
.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))); }
|
|
11023
|
+
}
|
|
11024
|
+
.ss-g-screen[data-game="mystery-tiger"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 0; }
|
|
11025
|
+
.ss-g-screen[data-game="career-path"] { --ss-g-band-mix: 11%; --ss-g-hue-shift: -24; }
|
|
11026
|
+
.ss-g-screen[data-game] > .ss-g-head { background: var(--ss-g-band); border-radius: 0 0 24px 24px; padding-bottom: 12px; }
|
|
11027
|
+
.ss-g-worth { flex: none; display: flex; align-items: baseline; gap: 10px; font-size: 13px; color: var(--ss-g-muted); }
|
|
11028
|
+
.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); }
|
|
11029
|
+
.ss-g-screen[data-game="beat-the-grid"] { --ss-g-band-mix: 13%; --ss-g-hue-shift: 14; }
|
|
11030
|
+
.ss-g-screen[data-game="guess-the-xi"] { --ss-g-band-mix: 12%; --ss-g-hue-shift: -36; }
|
|
11031
|
+
.ss-g-screen[data-game="higher-or-lower"] { --ss-g-band-mix: 16%; --ss-g-hue-shift: 28; }
|
|
11032
|
+
.ss-g-screen[data-game="daily-quiz"] { --ss-g-band-mix: 10%; --ss-g-hue-shift: -12; }
|
|
11033
|
+
.ss-g-screen[data-game="stat-ladder"] { --ss-g-band-mix: 15%; --ss-g-hue-shift: 36; }
|
|
11034
|
+
.ss-g-screen[data-game="matchday-predictor"] { --ss-g-band-mix: 18%; --ss-g-hue-shift: -4; }
|
|
11035
|
+
.ss-g-screen[data-game="starting-xi"] { --ss-g-band-mix: 9%; --ss-g-hue-shift: -30; }
|
|
11036
|
+
.ss-g-screen[data-game="fan-motm"] { --ss-g-band-mix: 14%; --ss-g-hue-shift: 8; }
|
|
10968
11037
|
`;
|
|
10969
11038
|
|
|
10970
11039
|
// src/StatsWidget.tsx
|
|
10971
|
-
import { jsx as
|
|
11040
|
+
import { jsx as jsx96 } from "react/jsx-runtime";
|
|
10972
11041
|
function buildClient(props) {
|
|
10973
11042
|
try {
|
|
10974
11043
|
if ("client" in props && props.client) {
|
|
@@ -11179,7 +11248,7 @@ function StatsWidget(props) {
|
|
|
11179
11248
|
}, [built, ui.injectStyles]);
|
|
11180
11249
|
if (!built) return null;
|
|
11181
11250
|
const attrs = themeAttrs(ui);
|
|
11182
|
-
return /* @__PURE__ */
|
|
11251
|
+
return /* @__PURE__ */ jsx96(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx96(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx96("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__ */ jsx96(
|
|
11183
11252
|
ChatPanel,
|
|
11184
11253
|
{
|
|
11185
11254
|
controller,
|
|
@@ -11194,7 +11263,7 @@ function StatsWidget(props) {
|
|
|
11194
11263
|
conversation: built?.conversation ?? null,
|
|
11195
11264
|
presetGrid
|
|
11196
11265
|
}
|
|
11197
|
-
) : /* @__PURE__ */
|
|
11266
|
+
) : /* @__PURE__ */ jsx96(
|
|
11198
11267
|
ChatFab,
|
|
11199
11268
|
{
|
|
11200
11269
|
label: ui.launcherLabel,
|