@sensiblestats/widget-react 0.81.1 → 0.82.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 +15 -0
- package/dist/index.cjs +891 -764
- 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 +891 -764
- package/dist/index.js.map +1 -1
- package/dist/styles.css +18 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -156,6 +156,7 @@ var STRINGS = {
|
|
|
156
156
|
topLeagues: "Top leagues",
|
|
157
157
|
topLeaguesSub: "Popular today.",
|
|
158
158
|
allLeagues: "All leagues",
|
|
159
|
+
seeAllFixturesLabel: (n) => `All fixtures (${n})`,
|
|
159
160
|
searchLeaguesPlaceholder: "Search leagues or teams",
|
|
160
161
|
noLeagueResults: "No league or team matches that search.",
|
|
161
162
|
clearSearchLabel: "Clear search",
|
|
@@ -522,6 +523,7 @@ var STRINGS = {
|
|
|
522
523
|
topLeagues: "\xD6ne \xE7\u0131kan ligler",
|
|
523
524
|
topLeaguesSub: "Bug\xFCn pop\xFCler.",
|
|
524
525
|
allLeagues: "T\xFCm ligler",
|
|
526
|
+
seeAllFixturesLabel: (n) => `T\xFCm ma\xE7lar (${n})`,
|
|
525
527
|
searchLeaguesPlaceholder: "Lig veya tak\u0131m ara",
|
|
526
528
|
noLeagueResults: "Aramana uyan lig veya tak\u0131m yok.",
|
|
527
529
|
clearSearchLabel: "Aramay\u0131 temizle",
|
|
@@ -885,6 +887,7 @@ function normalizeUi(cfg) {
|
|
|
885
887
|
topLeagues: strings.topLeagues,
|
|
886
888
|
topLeaguesSub: strings.topLeaguesSub,
|
|
887
889
|
allLeagues: strings.allLeagues,
|
|
890
|
+
seeAllFixturesLabel: strings.seeAllFixturesLabel,
|
|
888
891
|
searchLeaguesPlaceholder: strings.searchLeaguesPlaceholder,
|
|
889
892
|
noLeagueResults: strings.noLeagueResults,
|
|
890
893
|
clearSearchLabel: strings.clearSearchLabel,
|
|
@@ -6004,15 +6007,25 @@ function starClickable(group, pinnedCompetitionId) {
|
|
|
6004
6007
|
function foldSearchText(s) {
|
|
6005
6008
|
return s.replace(/İ/g, "I").replace(/ı/g, "i").normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
|
|
6006
6009
|
}
|
|
6010
|
+
function competitionMatchesQuery(group, q) {
|
|
6011
|
+
if (foldSearchText(group.competitionName).includes(q)) return true;
|
|
6012
|
+
return !!group.competitionCountry && foldSearchText(group.competitionCountry).includes(q);
|
|
6013
|
+
}
|
|
6007
6014
|
function matchesQuery(group, query) {
|
|
6008
6015
|
const q = foldSearchText(query.trim());
|
|
6009
6016
|
if (!q) return true;
|
|
6010
|
-
if (
|
|
6011
|
-
if (group.competitionCountry && foldSearchText(group.competitionCountry).includes(q)) return true;
|
|
6017
|
+
if (competitionMatchesQuery(group, q)) return true;
|
|
6012
6018
|
return group.matches.some(
|
|
6013
6019
|
(m) => foldSearchText(m.homeTeamName).includes(q) || foldSearchText(m.awayTeamName).includes(q)
|
|
6014
6020
|
);
|
|
6015
6021
|
}
|
|
6022
|
+
function matchingFixtures(group, query) {
|
|
6023
|
+
const q = foldSearchText(query.trim());
|
|
6024
|
+
if (!q || competitionMatchesQuery(group, q)) return group.matches;
|
|
6025
|
+
return group.matches.filter(
|
|
6026
|
+
(m) => foldSearchText(m.homeTeamName).includes(q) || foldSearchText(m.awayTeamName).includes(q)
|
|
6027
|
+
);
|
|
6028
|
+
}
|
|
6016
6029
|
|
|
6017
6030
|
// src/useStarTap.ts
|
|
6018
6031
|
var import_react38 = require("react");
|
|
@@ -6190,12 +6203,70 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6190
6203
|
] });
|
|
6191
6204
|
}
|
|
6192
6205
|
|
|
6206
|
+
// src/components/LeagueRowGroup.tsx
|
|
6207
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
6208
|
+
var ROW_CAP_PER_LEAGUE = 3;
|
|
6209
|
+
var SECTION_ROW_BUDGET = 12;
|
|
6210
|
+
function rowsFor(group, states, stale) {
|
|
6211
|
+
const nonLive = group.matches.filter((m) => !isTreatedLive(states[m.matchId], stale)).length;
|
|
6212
|
+
return Math.min(nonLive, ROW_CAP_PER_LEAGUE);
|
|
6213
|
+
}
|
|
6214
|
+
var STAR_PATH3 = "M12 2.5l2.9 5.9 6.5.95-4.7 4.58 1.1 6.47L12 17.35 6.1 20.4l1.1-6.47L2.5 9.35l6.5-.95z";
|
|
6215
|
+
function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickable2, disambiguate, onOpen, starTap, ui, monitor }) {
|
|
6216
|
+
const sorted = group.matches.filter((m) => !isTreatedLive(states[m.matchId], stale)).sort((a, b) => a.kickoffUnix - b.kickoffUnix);
|
|
6217
|
+
if (sorted.length === 0) return null;
|
|
6218
|
+
const shown = sorted.slice(0, cap);
|
|
6219
|
+
const overflow = sorted.length - shown.length;
|
|
6220
|
+
const onStarClick = () => {
|
|
6221
|
+
void starTap.tap(group.competitionId, !group.isStarred);
|
|
6222
|
+
};
|
|
6223
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-w-today-rowgroup", children: [
|
|
6224
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { className: "ss-w-today-rowgroup-head", children: [
|
|
6225
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("button", { type: "button", className: "ss-w-today-rowgroup-head-body", onClick: onOpen, children: [
|
|
6226
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
6227
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-w-today-rowgroup-name", children: [
|
|
6228
|
+
group.competitionName,
|
|
6229
|
+
disambiguate && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("span", { className: "ss-w-today-tile-country", children: [
|
|
6230
|
+
" (",
|
|
6231
|
+
group.competitionCountry,
|
|
6232
|
+
")"
|
|
6233
|
+
] }) : null
|
|
6234
|
+
] })
|
|
6235
|
+
] }),
|
|
6236
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
6237
|
+
"button",
|
|
6238
|
+
{
|
|
6239
|
+
type: "button",
|
|
6240
|
+
className: "ss-w-today-rowgroup-star",
|
|
6241
|
+
"aria-pressed": group.isStarred,
|
|
6242
|
+
"aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
|
|
6243
|
+
disabled: !starClickable2 || starTap.pendingId !== null,
|
|
6244
|
+
onClick: onStarClick,
|
|
6245
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
6246
|
+
"path",
|
|
6247
|
+
{
|
|
6248
|
+
d: STAR_PATH3,
|
|
6249
|
+
fill: group.isStarred ? "currentColor" : "none",
|
|
6250
|
+
stroke: group.isStarred ? "none" : "currentColor",
|
|
6251
|
+
strokeWidth: 2,
|
|
6252
|
+
strokeLinejoin: "round",
|
|
6253
|
+
strokeLinecap: "round"
|
|
6254
|
+
}
|
|
6255
|
+
) })
|
|
6256
|
+
}
|
|
6257
|
+
)
|
|
6258
|
+
] }),
|
|
6259
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "ss-w-today-rowgroup-rows", children: shown.map((m) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) }),
|
|
6260
|
+
overflow > 0 && /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("button", { type: "button", className: "ss-w-today-rowgroup-seeall", onClick: onOpen, children: ui.seeAllFixturesLabel(sorted.length) })
|
|
6261
|
+
] });
|
|
6262
|
+
}
|
|
6263
|
+
|
|
6193
6264
|
// src/components/games/ui/SearchField.tsx
|
|
6194
6265
|
var import_react40 = require("react");
|
|
6195
6266
|
|
|
6196
6267
|
// src/components/games/ui/icons.tsx
|
|
6197
|
-
var
|
|
6198
|
-
var svg = (size, children, fill = false) => /* @__PURE__ */ (0,
|
|
6268
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
6269
|
+
var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
6199
6270
|
"svg",
|
|
6200
6271
|
{
|
|
6201
6272
|
width: size,
|
|
@@ -6210,25 +6281,25 @@ var svg = (size, children, fill = false) => /* @__PURE__ */ (0, import_jsx_runti
|
|
|
6210
6281
|
children
|
|
6211
6282
|
}
|
|
6212
6283
|
);
|
|
6213
|
-
var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0,
|
|
6214
|
-
var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0,
|
|
6215
|
-
var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0,
|
|
6216
|
-
var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0,
|
|
6217
|
-
var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0,
|
|
6218
|
-
var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0,
|
|
6219
|
-
var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0,
|
|
6220
|
-
var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0,
|
|
6221
|
-
var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0,
|
|
6222
|
-
var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0,
|
|
6223
|
-
var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0,
|
|
6224
|
-
var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0,
|
|
6225
|
-
var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0,
|
|
6226
|
-
var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0,
|
|
6227
|
-
var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0,
|
|
6228
|
-
var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0,
|
|
6284
|
+
var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M15 18l-6-6 6-6" }));
|
|
6285
|
+
var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
|
|
6286
|
+
var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M5 12l5 5 9-10" }));
|
|
6287
|
+
var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M6 6l12 12M18 6L6 18" }));
|
|
6288
|
+
var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M20 20l-3.5-3.5" }, "b")]);
|
|
6289
|
+
var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 5v14M5 12h14" }));
|
|
6290
|
+
var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
|
|
6291
|
+
var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }));
|
|
6292
|
+
var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
|
|
6293
|
+
var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
|
|
6294
|
+
var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
|
|
6295
|
+
var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
|
|
6296
|
+
var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ (0, import_jsx_runtime59.jsx)("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
|
|
6297
|
+
var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
|
|
6298
|
+
var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M7 21v-8l-2-3V6a1.5 1.5 0 0 1 3 0v3V4a1.5 1.5 0 0 1 3 0v5V3.5a1.5 1.5 0 0 1 3 0V9V5a1.5 1.5 0 0 1 3 0v9l-2 3v4z" }));
|
|
6299
|
+
var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("path", { d: "M12 3c1 4 5 5 5 10a5 5 0 0 1-10 0c0-3 2-4 2-7 1.5 1 2 2 2 3 1-2 1-4 1-6z" }), true);
|
|
6229
6300
|
|
|
6230
6301
|
// src/components/games/ui/SearchField.tsx
|
|
6231
|
-
var
|
|
6302
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
6232
6303
|
function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown, clearLabel }) {
|
|
6233
6304
|
const localRef = (0, import_react40.useRef)(null);
|
|
6234
6305
|
const setInputRef = (0, import_react40.useCallback)((node) => {
|
|
@@ -6236,11 +6307,11 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6236
6307
|
if (typeof inputRef === "function") inputRef(node);
|
|
6237
6308
|
else if (inputRef) inputRef.current = node;
|
|
6238
6309
|
}, [inputRef]);
|
|
6239
|
-
return /* @__PURE__ */ (0,
|
|
6240
|
-
/* @__PURE__ */ (0,
|
|
6241
|
-
/* @__PURE__ */ (0,
|
|
6242
|
-
/* @__PURE__ */ (0,
|
|
6243
|
-
/* @__PURE__ */ (0,
|
|
6310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-search", children: [
|
|
6311
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
|
|
6312
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: "ss-g-search-box", children: [
|
|
6313
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconSearch, {}),
|
|
6314
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
6244
6315
|
"input",
|
|
6245
6316
|
{
|
|
6246
6317
|
id,
|
|
@@ -6254,7 +6325,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6254
6325
|
onChange: (e) => onChange(e.target.value)
|
|
6255
6326
|
}
|
|
6256
6327
|
),
|
|
6257
|
-
clearLabel && value.length > 0 ? /* @__PURE__ */ (0,
|
|
6328
|
+
clearLabel && value.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
6258
6329
|
"button",
|
|
6259
6330
|
{
|
|
6260
6331
|
type: "button",
|
|
@@ -6264,7 +6335,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6264
6335
|
onChange("");
|
|
6265
6336
|
localRef.current?.focus();
|
|
6266
6337
|
},
|
|
6267
|
-
children: /* @__PURE__ */ (0,
|
|
6338
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconClose, { size: 11 })
|
|
6268
6339
|
}
|
|
6269
6340
|
) : null
|
|
6270
6341
|
] })
|
|
@@ -6272,7 +6343,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6272
6343
|
}
|
|
6273
6344
|
|
|
6274
6345
|
// src/components/TodayPanel.tsx
|
|
6275
|
-
var
|
|
6346
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
6276
6347
|
function TodayPanel({ discovery, ui, monitor }) {
|
|
6277
6348
|
const { groups, states, stale, starLeague } = discovery;
|
|
6278
6349
|
const searchId = (0, import_react41.useId)();
|
|
@@ -6303,18 +6374,38 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6303
6374
|
acc[g.competitionName] = (acc[g.competitionName] ?? 0) + 1;
|
|
6304
6375
|
return acc;
|
|
6305
6376
|
}, {});
|
|
6377
|
+
const rowedCandidates = [];
|
|
6378
|
+
const tiledCandidates = [];
|
|
6379
|
+
{
|
|
6380
|
+
let budget = SECTION_ROW_BUDGET;
|
|
6381
|
+
let overBudget = false;
|
|
6382
|
+
for (const group of placement.candidates) {
|
|
6383
|
+
const rows = rowsFor(group, states, stale);
|
|
6384
|
+
if (rows === 0) {
|
|
6385
|
+
tiledCandidates.push(group);
|
|
6386
|
+
continue;
|
|
6387
|
+
}
|
|
6388
|
+
if (!overBudget && rows <= budget) {
|
|
6389
|
+
rowedCandidates.push(group);
|
|
6390
|
+
budget -= rows;
|
|
6391
|
+
} else {
|
|
6392
|
+
overBudget = true;
|
|
6393
|
+
tiledCandidates.push(group);
|
|
6394
|
+
}
|
|
6395
|
+
}
|
|
6396
|
+
}
|
|
6306
6397
|
const openIndex = selectedCompetitionId === null ? -1 : placement.order.findIndex((g) => g.competitionId === selectedCompetitionId);
|
|
6307
6398
|
const openGroup = openIndex === -1 ? void 0 : placement.order[openIndex];
|
|
6308
6399
|
(0, import_react41.useEffect)(() => {
|
|
6309
6400
|
if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
|
|
6310
6401
|
}, [selectedCompetitionId, openGroup]);
|
|
6311
6402
|
const liveRows = stale ? [] : visibleGroups.flatMap((group) => group.matches.filter((m) => isTreatedLive(states[m.matchId], stale)).map((match) => ({ match, rank: group.rank }))).sort((a, b) => a.rank - b.rank);
|
|
6312
|
-
const liveBand = liveRows.length > 0 && /* @__PURE__ */ (0,
|
|
6313
|
-
/* @__PURE__ */ (0,
|
|
6314
|
-
/* @__PURE__ */ (0,
|
|
6403
|
+
const liveBand = liveRows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
6404
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-sec-head", children: [
|
|
6405
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
|
|
6315
6406
|
ui.sectionLive
|
|
6316
6407
|
] }),
|
|
6317
|
-
/* @__PURE__ */ (0,
|
|
6408
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6318
6409
|
FixtureRow,
|
|
6319
6410
|
{
|
|
6320
6411
|
match,
|
|
@@ -6327,10 +6418,10 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6327
6418
|
)) })
|
|
6328
6419
|
] });
|
|
6329
6420
|
if (openGroup !== void 0) {
|
|
6330
|
-
return /* @__PURE__ */ (0,
|
|
6331
|
-
stale && /* @__PURE__ */ (0,
|
|
6421
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-root", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-mon-list", children: [
|
|
6422
|
+
stale && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
|
|
6332
6423
|
liveBand,
|
|
6333
|
-
/* @__PURE__ */ (0,
|
|
6424
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6334
6425
|
LeagueDetail,
|
|
6335
6426
|
{
|
|
6336
6427
|
group: openGroup,
|
|
@@ -6351,11 +6442,11 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6351
6442
|
}
|
|
6352
6443
|
const searching = query.trim().length > 0;
|
|
6353
6444
|
const searchResults = searching ? placement.order.filter((g) => matchesQuery(g, query)) : [];
|
|
6354
|
-
return /* @__PURE__ */ (0,
|
|
6355
|
-
/* @__PURE__ */ (0,
|
|
6356
|
-
stale && /* @__PURE__ */ (0,
|
|
6445
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-root", children: [
|
|
6446
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-mon-list", children: [
|
|
6447
|
+
stale && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-stale", children: ui.staleStates }),
|
|
6357
6448
|
!searching && liveBand,
|
|
6358
|
-
/* @__PURE__ */ (0,
|
|
6449
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6359
6450
|
SearchField,
|
|
6360
6451
|
{
|
|
6361
6452
|
id: searchId,
|
|
@@ -6367,19 +6458,19 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6367
6458
|
clearLabel: ui.clearSearchLabel
|
|
6368
6459
|
}
|
|
6369
6460
|
),
|
|
6370
|
-
searching ? searchResults.length === 0 ? /* @__PURE__ */ (0,
|
|
6371
|
-
/* @__PURE__ */ (0,
|
|
6372
|
-
/* @__PURE__ */ (0,
|
|
6373
|
-
/* @__PURE__ */ (0,
|
|
6461
|
+
searching ? searchResults.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment, { children: searchResults.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-search-block", children: [
|
|
6462
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-search-group", children: [
|
|
6463
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
6464
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "ss-w-today-search-group-name", children: [
|
|
6374
6465
|
group.competitionName,
|
|
6375
|
-
(nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ (0,
|
|
6466
|
+
(nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("span", { className: "ss-w-today-tile-country", children: [
|
|
6376
6467
|
" (",
|
|
6377
6468
|
group.competitionCountry,
|
|
6378
6469
|
")"
|
|
6379
6470
|
] }) : null
|
|
6380
6471
|
] })
|
|
6381
6472
|
] }),
|
|
6382
|
-
group.
|
|
6473
|
+
matchingFixtures(group, query).map((match) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6383
6474
|
"div",
|
|
6384
6475
|
{
|
|
6385
6476
|
role: "button",
|
|
@@ -6393,29 +6484,47 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6393
6484
|
setSelectedCompetitionId(group.competitionId);
|
|
6394
6485
|
}
|
|
6395
6486
|
},
|
|
6396
|
-
children: /* @__PURE__ */ (0,
|
|
6487
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
|
|
6397
6488
|
},
|
|
6398
6489
|
match.matchId
|
|
6399
6490
|
))
|
|
6400
|
-
] }, group.competitionId)) }) : /* @__PURE__ */ (0,
|
|
6401
|
-
/* @__PURE__ */ (0,
|
|
6491
|
+
] }, group.competitionId)) }) : /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment, { children: [
|
|
6492
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-sec", children: [
|
|
6402
6493
|
placement.personal ? ui.yourLeagues : ui.topLeagues,
|
|
6403
|
-
!placement.personal && /* @__PURE__ */ (0,
|
|
6494
|
+
!placement.personal && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
|
|
6404
6495
|
] }),
|
|
6405
|
-
/* @__PURE__ */ (0,
|
|
6406
|
-
|
|
6407
|
-
|
|
6408
|
-
|
|
6409
|
-
|
|
6410
|
-
|
|
6411
|
-
|
|
6412
|
-
|
|
6413
|
-
|
|
6414
|
-
|
|
6415
|
-
|
|
6416
|
-
|
|
6417
|
-
|
|
6418
|
-
|
|
6496
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: "ss-w-today-rowsection", children: [
|
|
6497
|
+
rowedCandidates.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6498
|
+
LeagueRowGroup,
|
|
6499
|
+
{
|
|
6500
|
+
group,
|
|
6501
|
+
states,
|
|
6502
|
+
stale,
|
|
6503
|
+
cap: ROW_CAP_PER_LEAGUE,
|
|
6504
|
+
starClickable: starClickable(group, placement.pinnedCompetitionId),
|
|
6505
|
+
disambiguate: (nameCounts[group.competitionName] ?? 0) > 1,
|
|
6506
|
+
onOpen: () => setSelectedCompetitionId(group.competitionId),
|
|
6507
|
+
starTap: gridStarTap,
|
|
6508
|
+
ui,
|
|
6509
|
+
monitor
|
|
6510
|
+
},
|
|
6511
|
+
group.competitionId
|
|
6512
|
+
)),
|
|
6513
|
+
tiledCandidates.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-tiles", children: tiledCandidates.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6514
|
+
LeagueTile,
|
|
6515
|
+
{
|
|
6516
|
+
group,
|
|
6517
|
+
starClickable: starClickable(group, placement.pinnedCompetitionId),
|
|
6518
|
+
disambiguate: (nameCounts[group.competitionName] ?? 0) > 1,
|
|
6519
|
+
onOpen: () => setSelectedCompetitionId(group.competitionId),
|
|
6520
|
+
starTap: gridStarTap,
|
|
6521
|
+
ui
|
|
6522
|
+
},
|
|
6523
|
+
group.competitionId
|
|
6524
|
+
)) })
|
|
6525
|
+
] }),
|
|
6526
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
|
|
6527
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
6419
6528
|
LeagueTile,
|
|
6420
6529
|
{
|
|
6421
6530
|
group,
|
|
@@ -6429,7 +6538,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6429
6538
|
)) })
|
|
6430
6539
|
] })
|
|
6431
6540
|
] }),
|
|
6432
|
-
toast !== null && /* @__PURE__ */ (0,
|
|
6541
|
+
toast !== null && /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
|
|
6433
6542
|
] });
|
|
6434
6543
|
}
|
|
6435
6544
|
|
|
@@ -6437,9 +6546,9 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6437
6546
|
var import_react55 = require("react");
|
|
6438
6547
|
|
|
6439
6548
|
// src/components/GamesLoginWall.tsx
|
|
6440
|
-
var
|
|
6549
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
6441
6550
|
function GamesLoginWall({ ui }) {
|
|
6442
|
-
return /* @__PURE__ */ (0,
|
|
6551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("p", { children: ui.gamesLoginRequired }) }) });
|
|
6443
6552
|
}
|
|
6444
6553
|
|
|
6445
6554
|
// src/components/GamesHub.tsx
|
|
@@ -6459,74 +6568,74 @@ function splitName(full) {
|
|
|
6459
6568
|
}
|
|
6460
6569
|
|
|
6461
6570
|
// src/components/GameTileArt.tsx
|
|
6462
|
-
var
|
|
6571
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
6463
6572
|
function GameTileArt({ gameId }) {
|
|
6464
|
-
return /* @__PURE__ */ (0,
|
|
6573
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
|
|
6465
6574
|
}
|
|
6466
|
-
var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0,
|
|
6467
|
-
/* @__PURE__ */ (0,
|
|
6468
|
-
/* @__PURE__ */ (0,
|
|
6575
|
+
var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("g", { className: cls, children: [
|
|
6576
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
|
|
6577
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: `M${cx - r} ${cy + r}c0-${r * 0.8} ${r * 0.45}-${r * 1.1} ${r}-${r * 1.1}s${r} ${r * 0.3} ${r} ${r * 1.1}z` })
|
|
6469
6578
|
] });
|
|
6470
6579
|
var ART = {
|
|
6471
|
-
"mystery-tiger": /* @__PURE__ */ (0,
|
|
6580
|
+
"mystery-tiger": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6472
6581
|
head(60, 38, 26, "ss-g-art-fg"),
|
|
6473
|
-
/* @__PURE__ */ (0,
|
|
6582
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
6474
6583
|
] }),
|
|
6475
|
-
"higher-or-lower": /* @__PURE__ */ (0,
|
|
6584
|
+
"higher-or-lower": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6476
6585
|
head(32, 38, 20),
|
|
6477
6586
|
head(88, 38, 20),
|
|
6478
|
-
/* @__PURE__ */ (0,
|
|
6479
|
-
/* @__PURE__ */ (0,
|
|
6587
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
|
|
6588
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
|
|
6480
6589
|
] }),
|
|
6481
|
-
"guess-the-xi": /* @__PURE__ */ (0,
|
|
6482
|
-
/* @__PURE__ */ (0,
|
|
6483
|
-
[[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ (0,
|
|
6590
|
+
"guess-the-xi": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6591
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
6592
|
+
[[60, 60, "a"], [24, 46], [48, 46], [72, 46], [96, 46], [36, 30], [60, 30], [84, 30], [40, 14], [60, 14], [80, 14]].map(([x, y, a], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
|
|
6484
6593
|
] }),
|
|
6485
|
-
"daily-quiz": /* @__PURE__ */ (0,
|
|
6486
|
-
"career-path": /* @__PURE__ */ (0,
|
|
6487
|
-
/* @__PURE__ */ (0,
|
|
6488
|
-
/* @__PURE__ */ (0,
|
|
6489
|
-
/* @__PURE__ */ (0,
|
|
6490
|
-
/* @__PURE__ */ (0,
|
|
6491
|
-
/* @__PURE__ */ (0,
|
|
6594
|
+
"daily-quiz": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
|
|
6595
|
+
"career-path": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6596
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
6597
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
|
|
6598
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
6599
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
|
|
6600
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
6492
6601
|
] }),
|
|
6493
|
-
"beat-the-grid": /* @__PURE__ */ (0,
|
|
6494
|
-
"matchday-predictor": /* @__PURE__ */ (0,
|
|
6495
|
-
/* @__PURE__ */ (0,
|
|
6496
|
-
/* @__PURE__ */ (0,
|
|
6497
|
-
/* @__PURE__ */ (0,
|
|
6498
|
-
/* @__PURE__ */ (0,
|
|
6602
|
+
"beat-the-grid": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: 33 + c * 19, y: 10 + r * 19, width: "16", height: "16", rx: "3", className: (r + c) % 3 === 0 ? "ss-g-art-accent" : "ss-g-art-block" }, `${r}${c}`))) }),
|
|
6603
|
+
"matchday-predictor": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6604
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
|
|
6605
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
|
|
6606
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
|
|
6607
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
|
|
6499
6608
|
] }),
|
|
6500
|
-
"starting-xi": /* @__PURE__ */ (0,
|
|
6501
|
-
/* @__PURE__ */ (0,
|
|
6502
|
-
[[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ (0,
|
|
6609
|
+
"starting-xi": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6610
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
6611
|
+
[[60, 60], [30, 46], [50, 46], [70, 46], [90, 46], [45, 30], [75, 30], [30, 16], [60, 16], [90, 16]].map(([x, y], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
|
|
6503
6612
|
] }),
|
|
6504
|
-
"stat-ladder": /* @__PURE__ */ (0,
|
|
6505
|
-
"fan-motm": /* @__PURE__ */ (0,
|
|
6506
|
-
/* @__PURE__ */ (0,
|
|
6613
|
+
"stat-ladder": /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_jsx_runtime63.Fragment, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
|
|
6614
|
+
"fan-motm": /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment, { children: [
|
|
6615
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
|
|
6507
6616
|
head(60, 40, 18),
|
|
6508
|
-
/* @__PURE__ */ (0,
|
|
6617
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("path", { d: "M84 8l2.4 5 5.4.6-4 3.7 1.1 5.4-4.9-2.7-4.9 2.7 1.1-5.4-4-3.7 5.4-.6z", className: "ss-g-art-accent" })
|
|
6509
6618
|
] }),
|
|
6510
|
-
default: /* @__PURE__ */ (0,
|
|
6619
|
+
default: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
|
|
6511
6620
|
};
|
|
6512
6621
|
|
|
6513
6622
|
// src/components/games/ui/Chip.tsx
|
|
6514
|
-
var
|
|
6623
|
+
var import_jsx_runtime64 = require("react/jsx-runtime");
|
|
6515
6624
|
function Chip({ variant = "neutral", icon, children, className }) {
|
|
6516
|
-
return /* @__PURE__ */ (0,
|
|
6625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
|
|
6517
6626
|
icon,
|
|
6518
6627
|
children
|
|
6519
6628
|
] });
|
|
6520
6629
|
}
|
|
6521
6630
|
function StatStack({ value, label }) {
|
|
6522
|
-
return /* @__PURE__ */ (0,
|
|
6523
|
-
/* @__PURE__ */ (0,
|
|
6524
|
-
/* @__PURE__ */ (0,
|
|
6631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime64.jsxs)("span", { className: "ss-g-statstack", children: [
|
|
6632
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-statstack-v", children: value }),
|
|
6633
|
+
/* @__PURE__ */ (0, import_jsx_runtime64.jsx)("span", { className: "ss-g-statstack-l", children: label })
|
|
6525
6634
|
] });
|
|
6526
6635
|
}
|
|
6527
6636
|
|
|
6528
6637
|
// src/components/GameTile.tsx
|
|
6529
|
-
var
|
|
6638
|
+
var import_jsx_runtime65 = require("react/jsx-runtime");
|
|
6530
6639
|
function tileStatus(game, ui) {
|
|
6531
6640
|
switch (game.status) {
|
|
6532
6641
|
case "locked":
|
|
@@ -6550,38 +6659,38 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
6550
6659
|
const status = tileStatus(game, ui);
|
|
6551
6660
|
const disabled = DISABLED.has(game.status);
|
|
6552
6661
|
const title = gameTitle(game, ui.games.titles);
|
|
6553
|
-
const body = variant === "hero" ? /* @__PURE__ */ (0,
|
|
6554
|
-
/* @__PURE__ */ (0,
|
|
6555
|
-
/* @__PURE__ */ (0,
|
|
6556
|
-
status.tone === "new" && /* @__PURE__ */ (0,
|
|
6557
|
-
/* @__PURE__ */ (0,
|
|
6558
|
-
/* @__PURE__ */ (0,
|
|
6559
|
-
status.tone === "success" ? /* @__PURE__ */ (0,
|
|
6662
|
+
const body = variant === "hero" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
|
|
6663
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-hero-text", children: [
|
|
6664
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
|
|
6665
|
+
status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Chip, { variant: "badge", children: ui.games.newToday }),
|
|
6666
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-title", children: title }),
|
|
6667
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
|
|
6668
|
+
status.tone === "success" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-hero-cta", children: [
|
|
6560
6669
|
status.tone === "accent" ? ui.games.resume : ui.games.playNow,
|
|
6561
6670
|
" \u2192"
|
|
6562
6671
|
] })
|
|
6563
6672
|
] }),
|
|
6564
|
-
/* @__PURE__ */ (0,
|
|
6565
|
-
] }) : variant === "wide" ? /* @__PURE__ */ (0,
|
|
6566
|
-
/* @__PURE__ */ (0,
|
|
6567
|
-
/* @__PURE__ */ (0,
|
|
6568
|
-
/* @__PURE__ */ (0,
|
|
6569
|
-
/* @__PURE__ */ (0,
|
|
6570
|
-
status.tone === "new" && /* @__PURE__ */ (0,
|
|
6673
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) })
|
|
6674
|
+
] }) : variant === "wide" ? /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
|
|
6675
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) }),
|
|
6676
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsxs)("span", { className: "ss-g-wide-text", children: [
|
|
6677
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-title", children: title }),
|
|
6678
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
|
|
6679
|
+
status.tone === "new" && /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(Chip, { variant: "badge", children: ui.games.newToday })
|
|
6571
6680
|
] }),
|
|
6572
|
-
/* @__PURE__ */ (0,
|
|
6573
|
-
] }) : /* @__PURE__ */ (0,
|
|
6574
|
-
/* @__PURE__ */ (0,
|
|
6575
|
-
/* @__PURE__ */ (0,
|
|
6576
|
-
/* @__PURE__ */ (0,
|
|
6681
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(IconChevronLeft, { size: 18 }) })
|
|
6682
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment, { children: [
|
|
6683
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ (0, import_jsx_runtime65.jsx)(GameTileArt, { gameId: game.gameId }) }),
|
|
6684
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-title", children: title }),
|
|
6685
|
+
/* @__PURE__ */ (0, import_jsx_runtime65.jsx)("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
|
|
6577
6686
|
] });
|
|
6578
6687
|
const cls = `ss-g-tile ss-g-tile--${variant}`;
|
|
6579
|
-
if (disabled) return /* @__PURE__ */ (0,
|
|
6580
|
-
return /* @__PURE__ */ (0,
|
|
6688
|
+
if (disabled) return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
|
|
6689
|
+
return /* @__PURE__ */ (0, import_jsx_runtime65.jsx)("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
|
|
6581
6690
|
}
|
|
6582
6691
|
|
|
6583
6692
|
// src/components/GamesHub.tsx
|
|
6584
|
-
var
|
|
6693
|
+
var import_jsx_runtime66 = require("react/jsx-runtime");
|
|
6585
6694
|
var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
|
|
6586
6695
|
var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
|
|
6587
6696
|
function pickHeroGame(games) {
|
|
@@ -6607,49 +6716,49 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
|
|
|
6607
6716
|
const kickoffs = fixtures.map((g) => g.kickoffUtc).filter((k) => !!k).sort();
|
|
6608
6717
|
const todayPts = games.filter((g) => DONE.has(g.status)).reduce((s, g) => s + (g.score ?? 0), 0);
|
|
6609
6718
|
const dash = "\u2014";
|
|
6610
|
-
return /* @__PURE__ */ (0,
|
|
6611
|
-
/* @__PURE__ */ (0,
|
|
6612
|
-
/* @__PURE__ */ (0,
|
|
6613
|
-
/* @__PURE__ */ (0,
|
|
6614
|
-
/* @__PURE__ */ (0,
|
|
6615
|
-
myWeeklyRow ? /* @__PURE__ */ (0,
|
|
6616
|
-
/* @__PURE__ */ (0,
|
|
6719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-hub", children: [
|
|
6720
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stats", children: [
|
|
6721
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
|
|
6722
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
|
|
6723
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
|
|
6724
|
+
myWeeklyRow ? /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)(import_jsx_runtime66.Fragment, { children: [
|
|
6725
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)(IconFlame, {}),
|
|
6617
6726
|
myWeeklyRow.currentStreak
|
|
6618
6727
|
] }) : dash,
|
|
6619
|
-
myWeeklyRow && /* @__PURE__ */ (0,
|
|
6728
|
+
myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.unitDays })
|
|
6620
6729
|
] })
|
|
6621
6730
|
] }),
|
|
6622
|
-
/* @__PURE__ */ (0,
|
|
6623
|
-
/* @__PURE__ */ (0,
|
|
6624
|
-
/* @__PURE__ */ (0,
|
|
6731
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
|
|
6732
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
|
|
6733
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
|
|
6625
6734
|
ui.games.formatPts(todayPts),
|
|
6626
|
-
/* @__PURE__ */ (0,
|
|
6735
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.unitPts })
|
|
6627
6736
|
] })
|
|
6628
6737
|
] }),
|
|
6629
|
-
/* @__PURE__ */ (0,
|
|
6630
|
-
/* @__PURE__ */ (0,
|
|
6631
|
-
/* @__PURE__ */ (0,
|
|
6738
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-stat", children: [
|
|
6739
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
|
|
6740
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
|
|
6632
6741
|
myWeeklyRow ? `#${myWeeklyRow.rank}` : dash,
|
|
6633
|
-
myWeeklyRow && /* @__PURE__ */ (0,
|
|
6742
|
+
myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("small", { children: ui.games.thisWeek })
|
|
6634
6743
|
] })
|
|
6635
6744
|
] })
|
|
6636
6745
|
] }),
|
|
6637
|
-
weeklyPrize && /* @__PURE__ */ (0,
|
|
6638
|
-
hero && /* @__PURE__ */ (0,
|
|
6639
|
-
(grid.length > 0 || wide) && /* @__PURE__ */ (0,
|
|
6640
|
-
/* @__PURE__ */ (0,
|
|
6641
|
-
/* @__PURE__ */ (0,
|
|
6642
|
-
/* @__PURE__ */ (0,
|
|
6746
|
+
weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
|
|
6747
|
+
hero && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
|
|
6748
|
+
(grid.length > 0 || wide) && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: "ss-g-sec", children: [
|
|
6749
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-sec-head", children: [
|
|
6750
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { children: ui.games.dailyGames }),
|
|
6751
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: ui.games.newSetAtMidnight })
|
|
6643
6752
|
] }),
|
|
6644
|
-
grid.length > 0 && /* @__PURE__ */ (0,
|
|
6645
|
-
wide && /* @__PURE__ */ (0,
|
|
6753
|
+
grid.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
|
|
6754
|
+
wide && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: wide, onOpen, ui, variant: "wide" })
|
|
6646
6755
|
] }),
|
|
6647
|
-
fixtures.length > 0 && /* @__PURE__ */ (0,
|
|
6648
|
-
/* @__PURE__ */ (0,
|
|
6649
|
-
/* @__PURE__ */ (0,
|
|
6650
|
-
kickoffs[0] && /* @__PURE__ */ (0,
|
|
6756
|
+
fixtures.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("section", { className: "ss-g-sec", children: [
|
|
6757
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsxs)("div", { className: "ss-g-sec-head", children: [
|
|
6758
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("h3", { children: ui.games.matchdayGames }),
|
|
6759
|
+
kickoffs[0] && /* @__PURE__ */ (0, import_jsx_runtime66.jsx)("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
|
|
6651
6760
|
] }),
|
|
6652
|
-
/* @__PURE__ */ (0,
|
|
6761
|
+
/* @__PURE__ */ (0, import_jsx_runtime66.jsx)("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ (0, import_jsx_runtime66.jsx)(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
|
|
6653
6762
|
] })
|
|
6654
6763
|
] });
|
|
6655
6764
|
}
|
|
@@ -6942,7 +7051,7 @@ function isNationCode(flag) {
|
|
|
6942
7051
|
|
|
6943
7052
|
// src/components/games/PlayerAvatar.tsx
|
|
6944
7053
|
var import_react44 = require("react");
|
|
6945
|
-
var
|
|
7054
|
+
var import_jsx_runtime67 = require("react/jsx-runtime");
|
|
6946
7055
|
function initialsOf(name) {
|
|
6947
7056
|
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
6948
7057
|
const first = parts[0];
|
|
@@ -6961,39 +7070,39 @@ function PlayerAvatar({
|
|
|
6961
7070
|
}) {
|
|
6962
7071
|
const [failed, setFailed] = (0, import_react44.useState)(false);
|
|
6963
7072
|
const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
|
|
6964
|
-
return /* @__PURE__ */ (0,
|
|
7073
|
+
return /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime67.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
|
|
6965
7074
|
}
|
|
6966
7075
|
|
|
6967
7076
|
// src/components/games/ui/GameHeader.tsx
|
|
6968
|
-
var
|
|
7077
|
+
var import_jsx_runtime68 = require("react/jsx-runtime");
|
|
6969
7078
|
function GameHeader({ title, eyebrow, right, onBack, backLabel }) {
|
|
6970
|
-
return /* @__PURE__ */ (0,
|
|
6971
|
-
onBack && /* @__PURE__ */ (0,
|
|
6972
|
-
/* @__PURE__ */ (0,
|
|
6973
|
-
eyebrow && /* @__PURE__ */ (0,
|
|
6974
|
-
/* @__PURE__ */ (0,
|
|
7079
|
+
return /* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-head", children: [
|
|
7080
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ (0, import_jsx_runtime68.jsx)(IconChevronLeft, {}) }),
|
|
7081
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsxs)("div", { className: "ss-g-head-text", children: [
|
|
7082
|
+
eyebrow && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("span", { className: "ss-g-eyebrow", children: eyebrow }),
|
|
7083
|
+
/* @__PURE__ */ (0, import_jsx_runtime68.jsx)("h2", { className: "ss-g-title", children: title })
|
|
6975
7084
|
] }),
|
|
6976
|
-
right && /* @__PURE__ */ (0,
|
|
7085
|
+
right && /* @__PURE__ */ (0, import_jsx_runtime68.jsx)("div", { className: "ss-g-head-right", children: right })
|
|
6977
7086
|
] });
|
|
6978
7087
|
}
|
|
6979
7088
|
|
|
6980
7089
|
// src/components/games/ui/SegmentProgress.tsx
|
|
6981
|
-
var
|
|
7090
|
+
var import_jsx_runtime69 = require("react/jsx-runtime");
|
|
6982
7091
|
function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right }) {
|
|
6983
|
-
return /* @__PURE__ */ (0,
|
|
6984
|
-
/* @__PURE__ */ (0,
|
|
6985
|
-
(leftLabel || rightLabel) && /* @__PURE__ */ (0,
|
|
6986
|
-
/* @__PURE__ */ (0,
|
|
6987
|
-
/* @__PURE__ */ (0,
|
|
7092
|
+
return /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress", children: [
|
|
7093
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress-main", children: [
|
|
7094
|
+
(leftLabel || rightLabel) && /* @__PURE__ */ (0, import_jsx_runtime69.jsxs)("div", { className: "ss-g-progress-labels", children: [
|
|
7095
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { children: leftLabel }),
|
|
7096
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-progress-rl", children: rightLabel })
|
|
6988
7097
|
] }),
|
|
6989
|
-
/* @__PURE__ */ (0,
|
|
7098
|
+
/* @__PURE__ */ (0, import_jsx_runtime69.jsx)(
|
|
6990
7099
|
"div",
|
|
6991
7100
|
{
|
|
6992
7101
|
className: "ss-g-segs",
|
|
6993
7102
|
role: "img",
|
|
6994
7103
|
"aria-label": ariaLabel,
|
|
6995
7104
|
style: { gridTemplateColumns: `repeat(${segments.length}, minmax(0, 1fr))` },
|
|
6996
|
-
children: segments.map((s, i) => /* @__PURE__ */ (0,
|
|
7105
|
+
children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime69.jsx)("span", { className: "ss-g-seg", "data-state": s }, i))
|
|
6997
7106
|
}
|
|
6998
7107
|
)
|
|
6999
7108
|
] }),
|
|
@@ -7002,12 +7111,12 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
|
|
|
7002
7111
|
}
|
|
7003
7112
|
|
|
7004
7113
|
// src/components/games/ui/AnswerTray.tsx
|
|
7005
|
-
var
|
|
7114
|
+
var import_jsx_runtime70 = require("react/jsx-runtime");
|
|
7006
7115
|
function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
|
|
7007
7116
|
const needle = query.trim().toLowerCase();
|
|
7008
7117
|
const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
|
|
7009
|
-
return /* @__PURE__ */ (0,
|
|
7010
|
-
/* @__PURE__ */ (0,
|
|
7118
|
+
return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(import_jsx_runtime70.Fragment, { children: [
|
|
7119
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(
|
|
7011
7120
|
SearchField,
|
|
7012
7121
|
{
|
|
7013
7122
|
id,
|
|
@@ -7019,9 +7128,9 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7019
7128
|
disabled
|
|
7020
7129
|
}
|
|
7021
7130
|
),
|
|
7022
|
-
shown.length > 0 && /* @__PURE__ */ (0,
|
|
7131
|
+
shown.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
|
|
7023
7132
|
const { first, last } = splitName(o.name);
|
|
7024
|
-
return /* @__PURE__ */ (0,
|
|
7133
|
+
return /* @__PURE__ */ (0, import_jsx_runtime70.jsxs)(
|
|
7025
7134
|
"button",
|
|
7026
7135
|
{
|
|
7027
7136
|
type: "button",
|
|
@@ -7032,10 +7141,10 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7032
7141
|
disabled,
|
|
7033
7142
|
onClick: () => onPick(o.id),
|
|
7034
7143
|
children: [
|
|
7035
|
-
/* @__PURE__ */ (0,
|
|
7036
|
-
/* @__PURE__ */ (0,
|
|
7037
|
-
first && /* @__PURE__ */ (0,
|
|
7038
|
-
/* @__PURE__ */ (0,
|
|
7144
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
|
|
7145
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsxs)("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
|
|
7146
|
+
first && /* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-tray-first", children: first }),
|
|
7147
|
+
/* @__PURE__ */ (0, import_jsx_runtime70.jsx)("span", { className: "ss-g-tray-last", children: last })
|
|
7039
7148
|
] })
|
|
7040
7149
|
]
|
|
7041
7150
|
},
|
|
@@ -7046,59 +7155,59 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7046
7155
|
}
|
|
7047
7156
|
|
|
7048
7157
|
// src/components/games/ui/FooterBar.tsx
|
|
7049
|
-
var
|
|
7158
|
+
var import_jsx_runtime71 = require("react/jsx-runtime");
|
|
7050
7159
|
function FooterBar({ children }) {
|
|
7051
|
-
return /* @__PURE__ */ (0,
|
|
7160
|
+
return /* @__PURE__ */ (0, import_jsx_runtime71.jsx)("div", { className: "ss-g-footer", children });
|
|
7052
7161
|
}
|
|
7053
7162
|
|
|
7054
7163
|
// src/components/games/ui/Silhouette.tsx
|
|
7055
|
-
var
|
|
7164
|
+
var import_jsx_runtime72 = require("react/jsx-runtime");
|
|
7056
7165
|
function Silhouette({ size, variant = "default" }) {
|
|
7057
|
-
return /* @__PURE__ */ (0,
|
|
7058
|
-
/* @__PURE__ */ (0,
|
|
7059
|
-
/* @__PURE__ */ (0,
|
|
7060
|
-
/* @__PURE__ */ (0,
|
|
7166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
|
|
7167
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsxs)("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
|
|
7168
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
|
|
7169
|
+
/* @__PURE__ */ (0, import_jsx_runtime72.jsx)("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
|
|
7061
7170
|
] }),
|
|
7062
|
-
variant === "mystery" && /* @__PURE__ */ (0,
|
|
7171
|
+
variant === "mystery" && /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "ss-g-sil-q", children: "?" })
|
|
7063
7172
|
] });
|
|
7064
7173
|
}
|
|
7065
7174
|
|
|
7066
7175
|
// src/components/games/ui/GameButton.tsx
|
|
7067
|
-
var
|
|
7176
|
+
var import_jsx_runtime73 = require("react/jsx-runtime");
|
|
7068
7177
|
function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
|
|
7069
7178
|
const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
|
|
7070
|
-
return /* @__PURE__ */ (0,
|
|
7179
|
+
return /* @__PURE__ */ (0, import_jsx_runtime73.jsx)("button", { type, className: cls, ...rest });
|
|
7071
7180
|
}
|
|
7072
7181
|
|
|
7073
7182
|
// src/components/games/ui/ResultCard.tsx
|
|
7074
|
-
var
|
|
7183
|
+
var import_jsx_runtime74 = require("react/jsx-runtime");
|
|
7075
7184
|
function ResultCard({ tone, title, score, detail, onBack, ui }) {
|
|
7076
|
-
return /* @__PURE__ */ (0,
|
|
7077
|
-
/* @__PURE__ */ (0,
|
|
7078
|
-
score !== void 0 && /* @__PURE__ */ (0,
|
|
7079
|
-
/* @__PURE__ */ (0,
|
|
7185
|
+
return /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
|
|
7186
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-title", children: title }),
|
|
7187
|
+
score !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime74.jsxs)("span", { className: "ss-g-result-score", children: [
|
|
7188
|
+
/* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-num", children: score }),
|
|
7080
7189
|
ui.games.unitPts
|
|
7081
7190
|
] }),
|
|
7082
|
-
detail && /* @__PURE__ */ (0,
|
|
7083
|
-
onBack && /* @__PURE__ */ (0,
|
|
7191
|
+
detail && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)("span", { className: "ss-g-result-detail", children: detail }),
|
|
7192
|
+
onBack && /* @__PURE__ */ (0, import_jsx_runtime74.jsx)(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
|
|
7084
7193
|
] });
|
|
7085
7194
|
}
|
|
7086
7195
|
|
|
7087
7196
|
// src/components/games/ui/PointsLadderRow.tsx
|
|
7088
|
-
var
|
|
7197
|
+
var import_jsx_runtime75 = require("react/jsx-runtime");
|
|
7089
7198
|
function PointsLadderRow({ ladder, guessesUsed, ui }) {
|
|
7090
7199
|
if (!ladder || ladder.length === 0) return null;
|
|
7091
7200
|
const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
|
|
7092
7201
|
const next = ladder[guessesUsed + 1];
|
|
7093
7202
|
if (now === void 0) return null;
|
|
7094
|
-
return /* @__PURE__ */ (0,
|
|
7095
|
-
/* @__PURE__ */ (0,
|
|
7096
|
-
next !== void 0 && next !== now && /* @__PURE__ */ (0,
|
|
7203
|
+
return /* @__PURE__ */ (0, import_jsx_runtime75.jsxs)("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
|
|
7204
|
+
/* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
|
|
7205
|
+
next !== void 0 && next !== now && /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
|
|
7097
7206
|
] });
|
|
7098
7207
|
}
|
|
7099
7208
|
|
|
7100
7209
|
// src/components/games/MysteryTigerGame.tsx
|
|
7101
|
-
var
|
|
7210
|
+
var import_jsx_runtime76 = require("react/jsx-runtime");
|
|
7102
7211
|
function parseClientState(json) {
|
|
7103
7212
|
if (!json) return null;
|
|
7104
7213
|
try {
|
|
@@ -7220,22 +7329,22 @@ function MysteryTigerGame({
|
|
|
7220
7329
|
setQuery("");
|
|
7221
7330
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
7222
7331
|
}
|
|
7223
|
-
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0,
|
|
7332
|
+
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Chip, { variant: "accent", children: [
|
|
7224
7333
|
score,
|
|
7225
7334
|
" ",
|
|
7226
7335
|
ui.games.unitPts
|
|
7227
|
-
] }) : /* @__PURE__ */ (0,
|
|
7336
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(Chip, { children: [
|
|
7228
7337
|
ui.games.guess,
|
|
7229
7338
|
" ",
|
|
7230
|
-
/* @__PURE__ */ (0,
|
|
7339
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-num", children: guessesUsed + 1 }),
|
|
7231
7340
|
" / ",
|
|
7232
7341
|
totalGuesses
|
|
7233
7342
|
] }) });
|
|
7234
7343
|
const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
|
|
7235
7344
|
const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
|
|
7236
7345
|
const known = deriveKnownAttributes(guessResults, keys);
|
|
7237
|
-
return /* @__PURE__ */ (0,
|
|
7238
|
-
/* @__PURE__ */ (0,
|
|
7346
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
|
|
7347
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
7239
7348
|
GameHeader,
|
|
7240
7349
|
{
|
|
7241
7350
|
title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
|
|
@@ -7245,41 +7354,41 @@ function MysteryTigerGame({
|
|
|
7245
7354
|
backLabel: ui.back
|
|
7246
7355
|
}
|
|
7247
7356
|
),
|
|
7248
|
-
!config && /* @__PURE__ */ (0,
|
|
7249
|
-
config && /* @__PURE__ */ (0,
|
|
7250
|
-
/* @__PURE__ */ (0,
|
|
7251
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7252
|
-
/* @__PURE__ */ (0,
|
|
7253
|
-
/* @__PURE__ */ (0,
|
|
7254
|
-
revealName ? /* @__PURE__ */ (0,
|
|
7255
|
-
revealName && /* @__PURE__ */ (0,
|
|
7357
|
+
!config && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
7358
|
+
config && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment, { children: [
|
|
7359
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-body", children: [
|
|
7360
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
|
|
7361
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
|
|
7362
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-portrait", children: [
|
|
7363
|
+
revealName ? /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(Silhouette, { size: 150, variant: "mystery" }),
|
|
7364
|
+
revealName && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-reveal-name", children: revealName })
|
|
7256
7365
|
] }),
|
|
7257
|
-
/* @__PURE__ */ (0,
|
|
7258
|
-
/* @__PURE__ */ (0,
|
|
7259
|
-
/* @__PURE__ */ (0,
|
|
7366
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-known-cell", children: [
|
|
7367
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
|
|
7368
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
|
|
7260
7369
|
] }, k.key)) })
|
|
7261
7370
|
] }),
|
|
7262
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7263
|
-
guessResults.length > 0 && /* @__PURE__ */ (0,
|
|
7264
|
-
/* @__PURE__ */ (0,
|
|
7265
|
-
/* @__PURE__ */ (0,
|
|
7266
|
-
keys.map((k) => /* @__PURE__ */ (0,
|
|
7371
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
|
|
7372
|
+
guessResults.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-table", children: [
|
|
7373
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-thead", style: cols, children: [
|
|
7374
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: t.yourGuesses }),
|
|
7375
|
+
keys.map((k) => /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: t.labels[k] }, k))
|
|
7267
7376
|
] }),
|
|
7268
7377
|
guessResults.map((gr, i) => {
|
|
7269
7378
|
const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
|
|
7270
7379
|
const { first, last } = splitName(name);
|
|
7271
|
-
return /* @__PURE__ */ (0,
|
|
7272
|
-
/* @__PURE__ */ (0,
|
|
7273
|
-
/* @__PURE__ */ (0,
|
|
7274
|
-
/* @__PURE__ */ (0,
|
|
7275
|
-
first && /* @__PURE__ */ (0,
|
|
7276
|
-
/* @__PURE__ */ (0,
|
|
7380
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-row", style: cols, children: [
|
|
7381
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-who", children: [
|
|
7382
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(PlayerAvatar, { className: "ss-g-mt-av", name }),
|
|
7383
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { className: "ss-g-mt-names", children: [
|
|
7384
|
+
first && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-first", children: first }),
|
|
7385
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-last", children: last })
|
|
7277
7386
|
] })
|
|
7278
7387
|
] }),
|
|
7279
7388
|
keys.map((key) => {
|
|
7280
7389
|
const v = gr[key];
|
|
7281
7390
|
const arrow = directionArrow(v);
|
|
7282
|
-
return /* @__PURE__ */ (0,
|
|
7391
|
+
return /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)(
|
|
7283
7392
|
"div",
|
|
7284
7393
|
{
|
|
7285
7394
|
className: "ss-g-mt-cell",
|
|
@@ -7287,8 +7396,8 @@ function MysteryTigerGame({
|
|
|
7287
7396
|
"data-verdict": v.verdict,
|
|
7288
7397
|
"aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
|
|
7289
7398
|
children: [
|
|
7290
|
-
/* @__PURE__ */ (0,
|
|
7291
|
-
arrow && /* @__PURE__ */ (0,
|
|
7399
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
|
|
7400
|
+
arrow && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
|
|
7292
7401
|
]
|
|
7293
7402
|
},
|
|
7294
7403
|
key
|
|
@@ -7297,25 +7406,25 @@ function MysteryTigerGame({
|
|
|
7297
7406
|
] }, gr.playerId);
|
|
7298
7407
|
})
|
|
7299
7408
|
] }),
|
|
7300
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7301
|
-
/* @__PURE__ */ (0,
|
|
7302
|
-
/* @__PURE__ */ (0,
|
|
7409
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-legend", children: [
|
|
7410
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
|
|
7411
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
|
|
7303
7412
|
t.legendMatch
|
|
7304
7413
|
] }),
|
|
7305
|
-
/* @__PURE__ */ (0,
|
|
7306
|
-
/* @__PURE__ */ (0,
|
|
7414
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
|
|
7415
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
|
|
7307
7416
|
t.legendClose
|
|
7308
7417
|
] }),
|
|
7309
|
-
/* @__PURE__ */ (0,
|
|
7418
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("span", { children: [
|
|
7310
7419
|
"\u25B2 ",
|
|
7311
7420
|
t.legendHigher
|
|
7312
7421
|
] })
|
|
7313
7422
|
] }),
|
|
7314
|
-
clientState?.hintLine && !isOver && /* @__PURE__ */ (0,
|
|
7315
|
-
/* @__PURE__ */ (0,
|
|
7316
|
-
/* @__PURE__ */ (0,
|
|
7423
|
+
clientState?.hintLine && !isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsxs)("div", { className: "ss-g-mt-hint", children: [
|
|
7424
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)(IconBulb, {}),
|
|
7425
|
+
/* @__PURE__ */ (0, import_jsx_runtime76.jsx)("span", { children: clientState.hintLine })
|
|
7317
7426
|
] }),
|
|
7318
|
-
isOver && /* @__PURE__ */ (0,
|
|
7427
|
+
isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
7319
7428
|
ResultCard,
|
|
7320
7429
|
{
|
|
7321
7430
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -7327,7 +7436,7 @@ function MysteryTigerGame({
|
|
|
7327
7436
|
}
|
|
7328
7437
|
)
|
|
7329
7438
|
] }),
|
|
7330
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7439
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime76.jsx)(
|
|
7331
7440
|
AnswerTray,
|
|
7332
7441
|
{
|
|
7333
7442
|
id: inputId,
|
|
@@ -7346,7 +7455,7 @@ function MysteryTigerGame({
|
|
|
7346
7455
|
}
|
|
7347
7456
|
|
|
7348
7457
|
// src/components/games/HigherOrLowerGame.tsx
|
|
7349
|
-
var
|
|
7458
|
+
var import_jsx_runtime77 = require("react/jsx-runtime");
|
|
7350
7459
|
var POINTS_PER_CORRECT = 10;
|
|
7351
7460
|
function parseClientState2(json) {
|
|
7352
7461
|
if (!json) return null;
|
|
@@ -7358,11 +7467,11 @@ function parseClientState2(json) {
|
|
|
7358
7467
|
}
|
|
7359
7468
|
function PlayerCard({ name, imagePath, highlight, children }) {
|
|
7360
7469
|
const { first, last } = splitName(name);
|
|
7361
|
-
return /* @__PURE__ */ (0,
|
|
7362
|
-
/* @__PURE__ */ (0,
|
|
7363
|
-
/* @__PURE__ */ (0,
|
|
7364
|
-
first && /* @__PURE__ */ (0,
|
|
7365
|
-
/* @__PURE__ */ (0,
|
|
7470
|
+
return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
|
|
7471
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(Silhouette, { size: 150 }) }),
|
|
7472
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-info", children: [
|
|
7473
|
+
first && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-first", children: first }),
|
|
7474
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-surname", children: last }),
|
|
7366
7475
|
children
|
|
7367
7476
|
] })
|
|
7368
7477
|
] });
|
|
@@ -7394,47 +7503,47 @@ function HigherOrLowerGame({
|
|
|
7394
7503
|
const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
|
|
7395
7504
|
onSubmit(JSON.stringify({ answers: newAnswers }));
|
|
7396
7505
|
}
|
|
7397
|
-
return /* @__PURE__ */ (0,
|
|
7398
|
-
/* @__PURE__ */ (0,
|
|
7506
|
+
return /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
|
|
7507
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
7399
7508
|
GameHeader,
|
|
7400
7509
|
{
|
|
7401
7510
|
title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
|
|
7402
7511
|
eyebrow: t.eyebrow(POINTS_PER_CORRECT),
|
|
7403
|
-
right: config ? /* @__PURE__ */ (0,
|
|
7512
|
+
right: config ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(StatStack, { value: runLength, label: t.streak }) : void 0,
|
|
7404
7513
|
onBack,
|
|
7405
7514
|
backLabel: ui.back
|
|
7406
7515
|
}
|
|
7407
7516
|
),
|
|
7408
|
-
!config && /* @__PURE__ */ (0,
|
|
7409
|
-
config && /* @__PURE__ */ (0,
|
|
7410
|
-
/* @__PURE__ */ (0,
|
|
7411
|
-
/* @__PURE__ */ (0,
|
|
7412
|
-
/* @__PURE__ */ (0,
|
|
7413
|
-
/* @__PURE__ */ (0,
|
|
7414
|
-
/* @__PURE__ */ (0,
|
|
7517
|
+
!config && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
7518
|
+
config && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(import_jsx_runtime77.Fragment, { children: [
|
|
7519
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-body", children: [
|
|
7520
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
|
|
7521
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
|
|
7522
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
|
|
7523
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
|
|
7415
7524
|
] }),
|
|
7416
|
-
currentPair && /* @__PURE__ */ (0,
|
|
7417
|
-
/* @__PURE__ */ (0,
|
|
7418
|
-
/* @__PURE__ */ (0,
|
|
7419
|
-
/* @__PURE__ */ (0,
|
|
7525
|
+
currentPair && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-pair", children: [
|
|
7526
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
|
|
7527
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
|
|
7528
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-stat", children: config.statLabel })
|
|
7420
7529
|
] }),
|
|
7421
|
-
/* @__PURE__ */ (0,
|
|
7422
|
-
/* @__PURE__ */ (0,
|
|
7423
|
-
/* @__PURE__ */ (0,
|
|
7424
|
-
/* @__PURE__ */ (0,
|
|
7530
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
|
|
7531
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-btns", children: [
|
|
7532
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
|
|
7533
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconArrowUp, { size: 16 }),
|
|
7425
7534
|
t.higher
|
|
7426
7535
|
] }),
|
|
7427
|
-
/* @__PURE__ */ (0,
|
|
7428
|
-
/* @__PURE__ */ (0,
|
|
7536
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
|
|
7537
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconArrowDown, { size: 16 }),
|
|
7429
7538
|
t.lower
|
|
7430
7539
|
] })
|
|
7431
7540
|
] }) })
|
|
7432
7541
|
] }),
|
|
7433
|
-
lastAnswer && lastAnswerPair && /* @__PURE__ */ (0,
|
|
7434
|
-
lastAnswer.wasCorrect ? /* @__PURE__ */ (0,
|
|
7542
|
+
lastAnswer && lastAnswerPair && /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
|
|
7543
|
+
lastAnswer.wasCorrect ? /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(IconClose, {}),
|
|
7435
7544
|
t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
|
|
7436
7545
|
] }),
|
|
7437
|
-
isOver && /* @__PURE__ */ (0,
|
|
7546
|
+
isOver && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(
|
|
7438
7547
|
ResultCard,
|
|
7439
7548
|
{
|
|
7440
7549
|
tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
|
|
@@ -7446,15 +7555,15 @@ function HigherOrLowerGame({
|
|
|
7446
7555
|
}
|
|
7447
7556
|
)
|
|
7448
7557
|
] }),
|
|
7449
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7450
|
-
/* @__PURE__ */ (0,
|
|
7558
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime77.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("div", { className: "ss-g-hl-foot", children: [
|
|
7559
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
|
|
7451
7560
|
const a = answeredPairs[i];
|
|
7452
|
-
return /* @__PURE__ */ (0,
|
|
7561
|
+
return /* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
|
|
7453
7562
|
}) }),
|
|
7454
|
-
/* @__PURE__ */ (0,
|
|
7455
|
-
/* @__PURE__ */ (0,
|
|
7563
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsxs)("span", { className: "ss-g-hl-pts", children: [
|
|
7564
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { "data-testid": "hol-score", children: score }),
|
|
7456
7565
|
" ",
|
|
7457
|
-
/* @__PURE__ */ (0,
|
|
7566
|
+
/* @__PURE__ */ (0, import_jsx_runtime77.jsx)("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
|
|
7458
7567
|
] })
|
|
7459
7568
|
] }) })
|
|
7460
7569
|
] })
|
|
@@ -7466,17 +7575,17 @@ var import_react47 = require("react");
|
|
|
7466
7575
|
|
|
7467
7576
|
// src/components/games/ui/CrestShield.tsx
|
|
7468
7577
|
var import_react46 = require("react");
|
|
7469
|
-
var
|
|
7578
|
+
var import_jsx_runtime78 = require("react/jsx-runtime");
|
|
7470
7579
|
function CrestShield({ src, name, size = 28 }) {
|
|
7471
7580
|
const [failed, setFailed] = (0, import_react46.useState)(false);
|
|
7472
7581
|
if (src && !isPlaceholderImage(src) && !failed) {
|
|
7473
|
-
return /* @__PURE__ */ (0,
|
|
7582
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
|
|
7474
7583
|
}
|
|
7475
|
-
return /* @__PURE__ */ (0,
|
|
7584
|
+
return /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("svg", { className: "ss-g-crest ss-g-crest--ph", width: size, height: size * 32 / 28, viewBox: "0 0 28 32", role: "img", "aria-label": name, children: /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
|
|
7476
7585
|
}
|
|
7477
7586
|
|
|
7478
7587
|
// src/components/games/CareerPathGame.tsx
|
|
7479
|
-
var
|
|
7588
|
+
var import_jsx_runtime79 = require("react/jsx-runtime");
|
|
7480
7589
|
function parseClientState3(json) {
|
|
7481
7590
|
if (!json) return null;
|
|
7482
7591
|
try {
|
|
@@ -7506,9 +7615,9 @@ function CareerPathGame({
|
|
|
7506
7615
|
const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
|
|
7507
7616
|
const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
|
|
7508
7617
|
if (!config) {
|
|
7509
|
-
return /* @__PURE__ */ (0,
|
|
7510
|
-
/* @__PURE__ */ (0,
|
|
7511
|
-
/* @__PURE__ */ (0,
|
|
7618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
7619
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
7620
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
7512
7621
|
] });
|
|
7513
7622
|
}
|
|
7514
7623
|
const visiblePath = clientState?.visiblePath ?? config.initialPath;
|
|
@@ -7522,61 +7631,61 @@ function CareerPathGame({
|
|
|
7522
7631
|
setQuery("");
|
|
7523
7632
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
7524
7633
|
}
|
|
7525
|
-
const right = !isOver && clientState ? /* @__PURE__ */ (0,
|
|
7634
|
+
const right = !isOver && clientState ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(Chip, { variant: "neutral", children: [
|
|
7526
7635
|
ui.games.guess,
|
|
7527
7636
|
" ",
|
|
7528
|
-
/* @__PURE__ */ (0,
|
|
7637
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
|
|
7529
7638
|
" / ",
|
|
7530
7639
|
clientState.guessesUsed + clientState.guessesRemaining
|
|
7531
7640
|
] }) }) : void 0;
|
|
7532
7641
|
const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
|
|
7533
|
-
return /* @__PURE__ */ (0,
|
|
7534
|
-
/* @__PURE__ */ (0,
|
|
7535
|
-
/* @__PURE__ */ (0,
|
|
7536
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7537
|
-
/* @__PURE__ */ (0,
|
|
7538
|
-
isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0,
|
|
7539
|
-
/* @__PURE__ */ (0,
|
|
7540
|
-
/* @__PURE__ */ (0,
|
|
7541
|
-
clientState?.hintLine ? /* @__PURE__ */ (0,
|
|
7542
|
-
/* @__PURE__ */ (0,
|
|
7543
|
-
/* @__PURE__ */ (0,
|
|
7642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
7643
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
|
|
7644
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-body", children: [
|
|
7645
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
|
|
7646
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-cp-card", children: [
|
|
7647
|
+
isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
|
|
7648
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("div", { className: "ss-g-cp-card-text", children: [
|
|
7649
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
|
|
7650
|
+
clientState?.hintLine ? /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-locks", children: [
|
|
7651
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 11 }), children: s.lockPosition }),
|
|
7652
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)(Chip, { variant: "lock", icon: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 11 }), children: s.lockNationality })
|
|
7544
7653
|
] }) : null
|
|
7545
7654
|
] })
|
|
7546
7655
|
] }),
|
|
7547
|
-
/* @__PURE__ */ (0,
|
|
7656
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("ol", { className: "ss-g-cp-line", children: [
|
|
7548
7657
|
visiblePath.map((spell, i) => {
|
|
7549
7658
|
const years = i === 0 ? s.firstClub : spellYears(spell);
|
|
7550
|
-
return /* @__PURE__ */ (0,
|
|
7551
|
-
/* @__PURE__ */ (0,
|
|
7552
|
-
/* @__PURE__ */ (0,
|
|
7553
|
-
/* @__PURE__ */ (0,
|
|
7659
|
+
return /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step", children: [
|
|
7660
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-rail", children: [
|
|
7661
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
|
|
7662
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
|
|
7554
7663
|
] }),
|
|
7555
|
-
/* @__PURE__ */ (0,
|
|
7556
|
-
/* @__PURE__ */ (0,
|
|
7557
|
-
/* @__PURE__ */ (0,
|
|
7558
|
-
/* @__PURE__ */ (0,
|
|
7559
|
-
spell.isLoan && /* @__PURE__ */ (0,
|
|
7664
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-step-text", children: [
|
|
7665
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-club", children: spell.clubName }),
|
|
7666
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-sub", children: [
|
|
7667
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-years", children: years }),
|
|
7668
|
+
spell.isLoan && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)(import_jsx_runtime79.Fragment, { children: [
|
|
7560
7669
|
years ? " \xB7 " : "",
|
|
7561
|
-
/* @__PURE__ */ (0,
|
|
7670
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-loan", children: s.loan })
|
|
7562
7671
|
] })
|
|
7563
7672
|
] })
|
|
7564
7673
|
] })
|
|
7565
7674
|
] }, `${spell.clubName}-${i}`);
|
|
7566
7675
|
}),
|
|
7567
|
-
hidden > 0 && /* @__PURE__ */ (0,
|
|
7568
|
-
/* @__PURE__ */ (0,
|
|
7569
|
-
/* @__PURE__ */ (0,
|
|
7570
|
-
hidden > 1 && /* @__PURE__ */ (0,
|
|
7676
|
+
hidden > 0 && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
|
|
7677
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("span", { className: "ss-g-cp-rail", children: [
|
|
7678
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 18 }) }),
|
|
7679
|
+
hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
|
|
7571
7680
|
] }),
|
|
7572
|
-
/* @__PURE__ */ (0,
|
|
7681
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
|
|
7573
7682
|
] }),
|
|
7574
|
-
hidden > 1 && /* @__PURE__ */ (0,
|
|
7575
|
-
/* @__PURE__ */ (0,
|
|
7576
|
-
/* @__PURE__ */ (0,
|
|
7683
|
+
hidden > 1 && /* @__PURE__ */ (0, import_jsx_runtime79.jsxs)("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
|
|
7684
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(IconLock, { size: 18 }) }) }),
|
|
7685
|
+
/* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
|
|
7577
7686
|
] })
|
|
7578
7687
|
] }),
|
|
7579
|
-
isOver && /* @__PURE__ */ (0,
|
|
7688
|
+
isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
|
|
7580
7689
|
ResultCard,
|
|
7581
7690
|
{
|
|
7582
7691
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -7588,7 +7697,7 @@ function CareerPathGame({
|
|
|
7588
7697
|
}
|
|
7589
7698
|
)
|
|
7590
7699
|
] }),
|
|
7591
|
-
!isOver && /* @__PURE__ */ (0,
|
|
7700
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime79.jsx)(
|
|
7592
7701
|
AnswerTray,
|
|
7593
7702
|
{
|
|
7594
7703
|
id: inputId,
|
|
@@ -7610,13 +7719,13 @@ function CareerPathGame({
|
|
|
7610
7719
|
var import_react48 = __toESM(require("react"), 1);
|
|
7611
7720
|
|
|
7612
7721
|
// src/components/games/ui/OptionList.tsx
|
|
7613
|
-
var
|
|
7722
|
+
var import_jsx_runtime80 = require("react/jsx-runtime");
|
|
7614
7723
|
function OptionList({ label, options, onPick }) {
|
|
7615
|
-
return /* @__PURE__ */ (0,
|
|
7724
|
+
return /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
|
|
7616
7725
|
}
|
|
7617
7726
|
|
|
7618
7727
|
// src/components/games/BeatTheGridGame.tsx
|
|
7619
|
-
var
|
|
7728
|
+
var import_jsx_runtime81 = require("react/jsx-runtime");
|
|
7620
7729
|
function criterionIconKind(label, key) {
|
|
7621
7730
|
const l = (key ?? label).toLowerCase();
|
|
7622
7731
|
if (l.includes("app")) return "calendar";
|
|
@@ -7634,34 +7743,34 @@ function rowAbbrev(label, map, key) {
|
|
|
7634
7743
|
function CriterionIcon({ kind }) {
|
|
7635
7744
|
switch (kind) {
|
|
7636
7745
|
case "calendar":
|
|
7637
|
-
return /* @__PURE__ */ (0,
|
|
7746
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconCalendar, {});
|
|
7638
7747
|
case "ball":
|
|
7639
|
-
return /* @__PURE__ */ (0,
|
|
7748
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconBall, {});
|
|
7640
7749
|
case "boot":
|
|
7641
|
-
return /* @__PURE__ */ (0,
|
|
7750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconBoot, {});
|
|
7642
7751
|
case "gloves":
|
|
7643
|
-
return /* @__PURE__ */ (0,
|
|
7752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconGloves, {});
|
|
7644
7753
|
case "shield":
|
|
7645
|
-
return /* @__PURE__ */ (0,
|
|
7754
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconShield, {});
|
|
7646
7755
|
default:
|
|
7647
|
-
return /* @__PURE__ */ (0,
|
|
7756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconFlag, {});
|
|
7648
7757
|
}
|
|
7649
7758
|
}
|
|
7650
7759
|
function HeaderVisual({ label, textKey: iKey, meta }) {
|
|
7651
7760
|
if (!meta) {
|
|
7652
|
-
return /* @__PURE__ */ (0,
|
|
7761
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
7653
7762
|
}
|
|
7654
7763
|
switch (meta.kind) {
|
|
7655
7764
|
case "club":
|
|
7656
|
-
return /* @__PURE__ */ (0,
|
|
7765
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
|
|
7657
7766
|
case "coach":
|
|
7658
|
-
return /* @__PURE__ */ (0,
|
|
7767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
|
|
7659
7768
|
case "country":
|
|
7660
|
-
return /* @__PURE__ */ (0,
|
|
7769
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
|
|
7661
7770
|
case "position":
|
|
7662
|
-
return /* @__PURE__ */ (0,
|
|
7771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(import_jsx_runtime81.Fragment, {});
|
|
7663
7772
|
default:
|
|
7664
|
-
return /* @__PURE__ */ (0,
|
|
7773
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
7665
7774
|
}
|
|
7666
7775
|
}
|
|
7667
7776
|
function parseClientState4(json) {
|
|
@@ -7705,12 +7814,12 @@ function SearchSheet({
|
|
|
7705
7814
|
const filtered = playerPool.filter(
|
|
7706
7815
|
(p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
7707
7816
|
);
|
|
7708
|
-
return /* @__PURE__ */ (0,
|
|
7709
|
-
/* @__PURE__ */ (0,
|
|
7710
|
-
/* @__PURE__ */ (0,
|
|
7711
|
-
/* @__PURE__ */ (0,
|
|
7712
|
-
/* @__PURE__ */ (0,
|
|
7713
|
-
/* @__PURE__ */ (0,
|
|
7817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
|
|
7818
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-sheet-hdr", children: [
|
|
7819
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "neutral", children: rowLabel }),
|
|
7820
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, { size: 12 }) }),
|
|
7821
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "accent", children: colLabel }),
|
|
7822
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7714
7823
|
"button",
|
|
7715
7824
|
{
|
|
7716
7825
|
type: "button",
|
|
@@ -7718,12 +7827,12 @@ function SearchSheet({
|
|
|
7718
7827
|
"data-testid": "btg-sheet-dismiss",
|
|
7719
7828
|
"aria-label": s.closeSearch,
|
|
7720
7829
|
onClick: onDismiss,
|
|
7721
|
-
children: /* @__PURE__ */ (0,
|
|
7830
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, {})
|
|
7722
7831
|
}
|
|
7723
7832
|
)
|
|
7724
7833
|
] }),
|
|
7725
|
-
playerPool.length === 0 ? /* @__PURE__ */ (0,
|
|
7726
|
-
/* @__PURE__ */ (0,
|
|
7834
|
+
playerPool.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
7835
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7727
7836
|
SearchField,
|
|
7728
7837
|
{
|
|
7729
7838
|
id: inputId,
|
|
@@ -7735,16 +7844,16 @@ function SearchSheet({
|
|
|
7735
7844
|
inputRef
|
|
7736
7845
|
}
|
|
7737
7846
|
),
|
|
7738
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0,
|
|
7847
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7739
7848
|
OptionList,
|
|
7740
7849
|
{
|
|
7741
7850
|
label: s.searchLabel(rowLabel, colLabel),
|
|
7742
7851
|
options: filtered.map((p) => ({
|
|
7743
7852
|
key: p.id,
|
|
7744
|
-
content: /* @__PURE__ */ (0,
|
|
7745
|
-
/* @__PURE__ */ (0,
|
|
7746
|
-
/* @__PURE__ */ (0,
|
|
7747
|
-
/* @__PURE__ */ (0,
|
|
7853
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
7854
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
|
|
7855
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-result-name", children: p.name }),
|
|
7856
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconPlus, { size: 18 }) })
|
|
7748
7857
|
] })
|
|
7749
7858
|
})),
|
|
7750
7859
|
onPick: (k) => onPick(row, col, Number(k))
|
|
@@ -7782,9 +7891,9 @@ function BeatTheGridGame({
|
|
|
7782
7891
|
onSubmit(JSON.stringify({ cells: newCells }));
|
|
7783
7892
|
}
|
|
7784
7893
|
if (!config) {
|
|
7785
|
-
return /* @__PURE__ */ (0,
|
|
7786
|
-
/* @__PURE__ */ (0,
|
|
7787
|
-
/* @__PURE__ */ (0,
|
|
7894
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
7895
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
7896
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
7788
7897
|
] });
|
|
7789
7898
|
}
|
|
7790
7899
|
const rows = config.rows;
|
|
@@ -7797,20 +7906,20 @@ function BeatTheGridGame({
|
|
|
7797
7906
|
(_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
|
|
7798
7907
|
);
|
|
7799
7908
|
const totalScore = clientState?.totalScore ?? result?.score ?? 0;
|
|
7800
|
-
return /* @__PURE__ */ (0,
|
|
7801
|
-
/* @__PURE__ */ (0,
|
|
7802
|
-
/* @__PURE__ */ (0,
|
|
7909
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
7910
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
7911
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7803
7912
|
SegmentProgress,
|
|
7804
7913
|
{
|
|
7805
7914
|
segments,
|
|
7806
7915
|
ariaLabel: s.progressAria(filledCells.length, total),
|
|
7807
7916
|
leftLabel: s.filled(filledCells.length, total),
|
|
7808
7917
|
rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
|
|
7809
|
-
right: /* @__PURE__ */ (0,
|
|
7918
|
+
right: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
|
|
7810
7919
|
}
|
|
7811
7920
|
),
|
|
7812
|
-
/* @__PURE__ */ (0,
|
|
7813
|
-
/* @__PURE__ */ (0,
|
|
7921
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-body", children: [
|
|
7922
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(
|
|
7814
7923
|
"div",
|
|
7815
7924
|
{
|
|
7816
7925
|
className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
|
|
@@ -7820,31 +7929,31 @@ function BeatTheGridGame({
|
|
|
7820
7929
|
},
|
|
7821
7930
|
role: "grid",
|
|
7822
7931
|
children: [
|
|
7823
|
-
/* @__PURE__ */ (0,
|
|
7932
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-corner" }),
|
|
7824
7933
|
cols.map((col, colIdx) => {
|
|
7825
7934
|
const colMeta = config.colsMeta?.[colIdx];
|
|
7826
|
-
return /* @__PURE__ */ (0,
|
|
7827
|
-
/* @__PURE__ */ (0,
|
|
7828
|
-
/* @__PURE__ */ (0,
|
|
7935
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
|
|
7936
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
|
|
7937
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: col })
|
|
7829
7938
|
] }, col);
|
|
7830
7939
|
}),
|
|
7831
7940
|
rows.map((rowLabel, rowIdx) => {
|
|
7832
7941
|
const rowMeta = config.rowsMeta?.[rowIdx];
|
|
7833
7942
|
const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
|
|
7834
|
-
const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0,
|
|
7835
|
-
/* @__PURE__ */ (0,
|
|
7836
|
-
/* @__PURE__ */ (0,
|
|
7837
|
-
] }) : abbr === rowLabel ? /* @__PURE__ */ (0,
|
|
7838
|
-
/* @__PURE__ */ (0,
|
|
7839
|
-
/* @__PURE__ */ (0,
|
|
7943
|
+
const rowHeaderContent = rowMeta ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
7944
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
|
|
7945
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: rowLabel })
|
|
7946
|
+
] }) : abbr === rowLabel ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { children: rowLabel }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
7947
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { "aria-hidden": "true", children: abbr }),
|
|
7948
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-sr", children: rowLabel })
|
|
7840
7949
|
] });
|
|
7841
|
-
return /* @__PURE__ */ (0,
|
|
7842
|
-
/* @__PURE__ */ (0,
|
|
7950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_react48.default.Fragment, { children: [
|
|
7951
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
|
|
7843
7952
|
cols.map((colLabel, colIdx) => {
|
|
7844
7953
|
const filled = findCellResult(filledCells, rowIdx, colIdx);
|
|
7845
7954
|
const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
|
|
7846
7955
|
const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
|
|
7847
|
-
return /* @__PURE__ */ (0,
|
|
7956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7848
7957
|
"button",
|
|
7849
7958
|
{
|
|
7850
7959
|
type: "button",
|
|
@@ -7855,20 +7964,20 @@ function BeatTheGridGame({
|
|
|
7855
7964
|
className: "ss-g-btg-cell",
|
|
7856
7965
|
disabled: isLocked2 || submitting,
|
|
7857
7966
|
onClick: () => handleCellClick(rowIdx, colIdx),
|
|
7858
|
-
children: filled ? /* @__PURE__ */ (0,
|
|
7859
|
-
/* @__PURE__ */ (0,
|
|
7967
|
+
children: filled ? /* @__PURE__ */ (0, import_jsx_runtime81.jsxs)(import_jsx_runtime81.Fragment, { children: [
|
|
7968
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7860
7969
|
"span",
|
|
7861
7970
|
{
|
|
7862
7971
|
className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
|
|
7863
7972
|
role: "img",
|
|
7864
7973
|
"aria-label": filled.isCorrect ? s.correct : s.wrong,
|
|
7865
|
-
children: filled.isCorrect ? /* @__PURE__ */ (0,
|
|
7974
|
+
children: filled.isCorrect ? /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconCheck, { size: 11 }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconClose, { size: 11 })
|
|
7866
7975
|
}
|
|
7867
7976
|
),
|
|
7868
|
-
/* @__PURE__ */ (0,
|
|
7977
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
|
|
7869
7978
|
(() => {
|
|
7870
7979
|
const entry = playerPool.find((p) => p.id === filled.playerId);
|
|
7871
|
-
return /* @__PURE__ */ (0,
|
|
7980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7872
7981
|
PlayerAvatar,
|
|
7873
7982
|
{
|
|
7874
7983
|
name: entry?.name ?? "",
|
|
@@ -7877,8 +7986,8 @@ function BeatTheGridGame({
|
|
|
7877
7986
|
}
|
|
7878
7987
|
);
|
|
7879
7988
|
})(),
|
|
7880
|
-
/* @__PURE__ */ (0,
|
|
7881
|
-
] }) : /* @__PURE__ */ (0,
|
|
7989
|
+
/* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
|
|
7990
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(IconPlus, { size: 22 }) })
|
|
7882
7991
|
},
|
|
7883
7992
|
`cell-${rowIdx}-${colIdx}`
|
|
7884
7993
|
);
|
|
@@ -7888,7 +7997,7 @@ function BeatTheGridGame({
|
|
|
7888
7997
|
]
|
|
7889
7998
|
}
|
|
7890
7999
|
),
|
|
7891
|
-
isLocked2 && /* @__PURE__ */ (0,
|
|
8000
|
+
isLocked2 && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7892
8001
|
ResultCard,
|
|
7893
8002
|
{
|
|
7894
8003
|
tone: "neutral",
|
|
@@ -7900,7 +8009,7 @@ function BeatTheGridGame({
|
|
|
7900
8009
|
}
|
|
7901
8010
|
)
|
|
7902
8011
|
] }),
|
|
7903
|
-
activeCell !== null && /* @__PURE__ */ (0,
|
|
8012
|
+
activeCell !== null && /* @__PURE__ */ (0, import_jsx_runtime81.jsx)("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ (0, import_jsx_runtime81.jsx)(
|
|
7904
8013
|
SearchSheet,
|
|
7905
8014
|
{
|
|
7906
8015
|
row: activeCell.row,
|
|
@@ -7922,18 +8031,18 @@ function BeatTheGridGame({
|
|
|
7922
8031
|
var import_react49 = require("react");
|
|
7923
8032
|
|
|
7924
8033
|
// src/components/games/ui/PitchSvg.tsx
|
|
7925
|
-
var
|
|
8034
|
+
var import_jsx_runtime82 = require("react/jsx-runtime");
|
|
7926
8035
|
function PitchSvg({ variant }) {
|
|
7927
|
-
return /* @__PURE__ */ (0,
|
|
7928
|
-
/* @__PURE__ */ (0,
|
|
7929
|
-
variant === "full" ? /* @__PURE__ */ (0,
|
|
7930
|
-
/* @__PURE__ */ (0,
|
|
7931
|
-
/* @__PURE__ */ (0,
|
|
7932
|
-
/* @__PURE__ */ (0,
|
|
7933
|
-
/* @__PURE__ */ (0,
|
|
7934
|
-
] }) : /* @__PURE__ */ (0,
|
|
7935
|
-
/* @__PURE__ */ (0,
|
|
7936
|
-
/* @__PURE__ */ (0,
|
|
8036
|
+
return /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
|
|
8037
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
|
|
8038
|
+
variant === "full" ? /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
|
|
8039
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
|
|
8040
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
|
|
8041
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
|
|
8042
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
|
|
8043
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment, { children: [
|
|
8044
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
|
|
8045
|
+
/* @__PURE__ */ (0, import_jsx_runtime82.jsx)("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
|
|
7937
8046
|
] })
|
|
7938
8047
|
] });
|
|
7939
8048
|
}
|
|
@@ -7989,7 +8098,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
|
|
|
7989
8098
|
}
|
|
7990
8099
|
|
|
7991
8100
|
// src/components/games/GuessTheXiGame.tsx
|
|
7992
|
-
var
|
|
8101
|
+
var import_jsx_runtime83 = require("react/jsx-runtime");
|
|
7993
8102
|
var MAX_GUESSES2 = 3;
|
|
7994
8103
|
function parseClientState5(json) {
|
|
7995
8104
|
if (!json) return null;
|
|
@@ -8039,31 +8148,31 @@ function GuessTheXiGame({
|
|
|
8039
8148
|
const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
|
|
8040
8149
|
const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
|
|
8041
8150
|
const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
|
|
8042
|
-
return /* @__PURE__ */ (0,
|
|
8043
|
-
/* @__PURE__ */ (0,
|
|
8151
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
|
|
8152
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8044
8153
|
GameHeader,
|
|
8045
8154
|
{
|
|
8046
8155
|
title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
|
|
8047
8156
|
eyebrow: config?.poolLabel,
|
|
8048
|
-
right: formation ? /* @__PURE__ */ (0,
|
|
8157
|
+
right: formation ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(Chip, { variant: "accent", children: formation }) : void 0,
|
|
8049
8158
|
onBack,
|
|
8050
8159
|
backLabel: ui.back
|
|
8051
8160
|
}
|
|
8052
8161
|
),
|
|
8053
|
-
!config && /* @__PURE__ */ (0,
|
|
8054
|
-
config && /* @__PURE__ */ (0,
|
|
8055
|
-
/* @__PURE__ */ (0,
|
|
8056
|
-
!isOver && /* @__PURE__ */ (0,
|
|
8057
|
-
rows.length > 0 && /* @__PURE__ */ (0,
|
|
8058
|
-
/* @__PURE__ */ (0,
|
|
8059
|
-
/* @__PURE__ */ (0,
|
|
8162
|
+
!config && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
8163
|
+
config && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
|
|
8164
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-body", children: [
|
|
8165
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
|
|
8166
|
+
rows.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
|
|
8167
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(PitchSvg, { variant: "full" }),
|
|
8168
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
|
|
8060
8169
|
const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
|
|
8061
8170
|
const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
|
|
8062
8171
|
const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
|
|
8063
8172
|
const flag = nationalityFlag(pos.nationality);
|
|
8064
8173
|
if (lineupEntry) {
|
|
8065
|
-
return /* @__PURE__ */ (0,
|
|
8066
|
-
/* @__PURE__ */ (0,
|
|
8174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
|
|
8175
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8067
8176
|
PlayerAvatar,
|
|
8068
8177
|
{
|
|
8069
8178
|
name: lineupEntry.name,
|
|
@@ -8071,11 +8180,11 @@ function GuessTheXiGame({
|
|
|
8071
8180
|
className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
|
|
8072
8181
|
}
|
|
8073
8182
|
),
|
|
8074
|
-
/* @__PURE__ */ (0,
|
|
8183
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
|
|
8075
8184
|
] }, `${pos.slot}-${c}`);
|
|
8076
8185
|
}
|
|
8077
|
-
return /* @__PURE__ */ (0,
|
|
8078
|
-
/* @__PURE__ */ (0,
|
|
8186
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
|
|
8187
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8079
8188
|
"span",
|
|
8080
8189
|
{
|
|
8081
8190
|
className: "ss-g-gxi-disc",
|
|
@@ -8086,22 +8195,22 @@ function GuessTheXiGame({
|
|
|
8086
8195
|
children: flag
|
|
8087
8196
|
}
|
|
8088
8197
|
),
|
|
8089
|
-
name ? /* @__PURE__ */ (0,
|
|
8198
|
+
name ? /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-pos", children: posLabel })
|
|
8090
8199
|
] }, `${pos.slot}-${c}`);
|
|
8091
8200
|
}) }, r)) })
|
|
8092
8201
|
] }),
|
|
8093
|
-
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0,
|
|
8094
|
-
/* @__PURE__ */ (0,
|
|
8202
|
+
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-wrong", children: [
|
|
8203
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
|
|
8095
8204
|
wrongGuesses.map((g) => {
|
|
8096
8205
|
const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
|
|
8097
|
-
return /* @__PURE__ */ (0,
|
|
8098
|
-
/* @__PURE__ */ (0,
|
|
8099
|
-
/* @__PURE__ */ (0,
|
|
8206
|
+
return /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("span", { className: "ss-g-gxi-wrong-chip", children: [
|
|
8207
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
|
|
8208
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("s", { children: teamName(g.teamId) })
|
|
8100
8209
|
] }, g.teamId);
|
|
8101
8210
|
})
|
|
8102
8211
|
] }),
|
|
8103
|
-
isOver && /* @__PURE__ */ (0,
|
|
8104
|
-
/* @__PURE__ */ (0,
|
|
8212
|
+
isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
|
|
8213
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8105
8214
|
ResultCard,
|
|
8106
8215
|
{
|
|
8107
8216
|
tone: solved ? "win" : failed ? "lose" : "neutral",
|
|
@@ -8112,29 +8221,29 @@ function GuessTheXiGame({
|
|
|
8112
8221
|
ui
|
|
8113
8222
|
}
|
|
8114
8223
|
),
|
|
8115
|
-
(solved || failed) && clientState?.answer && /* @__PURE__ */ (0,
|
|
8116
|
-
/* @__PURE__ */ (0,
|
|
8117
|
-
/* @__PURE__ */ (0,
|
|
8118
|
-
/* @__PURE__ */ (0,
|
|
8224
|
+
(solved || failed) && clientState?.answer && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
|
|
8225
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
|
|
8226
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
|
|
8227
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
|
|
8119
8228
|
] })
|
|
8120
8229
|
] })
|
|
8121
8230
|
] }),
|
|
8122
|
-
!isOver && /* @__PURE__ */ (0,
|
|
8123
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0,
|
|
8231
|
+
!isOver && /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(FooterBar, { children: [
|
|
8232
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8124
8233
|
OptionList,
|
|
8125
8234
|
{
|
|
8126
8235
|
label: t.optionsLabel,
|
|
8127
8236
|
options: filtered.map((tm) => ({
|
|
8128
8237
|
key: tm.teamId,
|
|
8129
|
-
content: /* @__PURE__ */ (0,
|
|
8130
|
-
/* @__PURE__ */ (0,
|
|
8131
|
-
/* @__PURE__ */ (0,
|
|
8238
|
+
content: /* @__PURE__ */ (0, import_jsx_runtime83.jsxs)(import_jsx_runtime83.Fragment, { children: [
|
|
8239
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
|
|
8240
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)("span", { children: tm.teamName })
|
|
8132
8241
|
] })
|
|
8133
8242
|
})),
|
|
8134
8243
|
onPick: (k) => handlePick(Number(k))
|
|
8135
8244
|
}
|
|
8136
8245
|
),
|
|
8137
|
-
/* @__PURE__ */ (0,
|
|
8246
|
+
/* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
|
|
8138
8247
|
SearchField,
|
|
8139
8248
|
{
|
|
8140
8249
|
id: inputId,
|
|
@@ -8152,7 +8261,7 @@ function GuessTheXiGame({
|
|
|
8152
8261
|
|
|
8153
8262
|
// src/components/games/DailyQuizGame.tsx
|
|
8154
8263
|
var import_react50 = require("react");
|
|
8155
|
-
var
|
|
8264
|
+
var import_jsx_runtime84 = require("react/jsx-runtime");
|
|
8156
8265
|
function parseClientState6(json) {
|
|
8157
8266
|
if (!json) return null;
|
|
8158
8267
|
try {
|
|
@@ -8173,13 +8282,13 @@ function OptionName({ text }) {
|
|
|
8173
8282
|
const tokens = base.split(/\s+/).filter(Boolean);
|
|
8174
8283
|
const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
|
|
8175
8284
|
if (!isPlainName || base === "") {
|
|
8176
|
-
return /* @__PURE__ */ (0,
|
|
8285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-full", children: text }) });
|
|
8177
8286
|
}
|
|
8178
8287
|
const { first, last } = splitName(base);
|
|
8179
|
-
return /* @__PURE__ */ (0,
|
|
8180
|
-
first && /* @__PURE__ */ (0,
|
|
8181
|
-
/* @__PURE__ */ (0,
|
|
8182
|
-
suffix && /* @__PURE__ */ (0,
|
|
8288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("span", { className: "ss-g-dq-opt-name", children: [
|
|
8289
|
+
first && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-first", children: first }),
|
|
8290
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-last", children: last }),
|
|
8291
|
+
suffix && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-opt-suffix", children: suffix })
|
|
8183
8292
|
] });
|
|
8184
8293
|
}
|
|
8185
8294
|
function DailyQuizGame({
|
|
@@ -8198,9 +8307,9 @@ function DailyQuizGame({
|
|
|
8198
8307
|
const results = clientState?.results ?? [];
|
|
8199
8308
|
const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
|
|
8200
8309
|
if (!config) {
|
|
8201
|
-
return /* @__PURE__ */ (0,
|
|
8202
|
-
/* @__PURE__ */ (0,
|
|
8203
|
-
/* @__PURE__ */ (0,
|
|
8310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8311
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, onBack, backLabel: ui.back }),
|
|
8312
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8204
8313
|
] });
|
|
8205
8314
|
}
|
|
8206
8315
|
const questions = config.questions;
|
|
@@ -8235,11 +8344,11 @@ function DailyQuizGame({
|
|
|
8235
8344
|
return r.isCorrect ? "correct" : "wrong";
|
|
8236
8345
|
});
|
|
8237
8346
|
const correctCount = results.filter((r) => r.isCorrect).length;
|
|
8238
|
-
return /* @__PURE__ */ (0,
|
|
8239
|
-
/* @__PURE__ */ (0,
|
|
8240
|
-
/* @__PURE__ */ (0,
|
|
8241
|
-
/* @__PURE__ */ (0,
|
|
8242
|
-
/* @__PURE__ */ (0,
|
|
8347
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8348
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
|
|
8349
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
|
|
8350
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-body", children: [
|
|
8351
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(
|
|
8243
8352
|
ResultCard,
|
|
8244
8353
|
{
|
|
8245
8354
|
tone: "neutral",
|
|
@@ -8252,15 +8361,15 @@ function DailyQuizGame({
|
|
|
8252
8361
|
questions.map((q) => {
|
|
8253
8362
|
const r = findResult(results, q.index);
|
|
8254
8363
|
const picked = selections.get(q.index);
|
|
8255
|
-
return /* @__PURE__ */ (0,
|
|
8256
|
-
/* @__PURE__ */ (0,
|
|
8257
|
-
r && /* @__PURE__ */ (0,
|
|
8364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-dq-rq", children: [
|
|
8365
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
|
|
8366
|
+
r && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
|
|
8258
8367
|
let cls = "ss-g-dq-rq-opt";
|
|
8259
8368
|
if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
|
|
8260
8369
|
else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
|
|
8261
|
-
return /* @__PURE__ */ (0,
|
|
8370
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: cls, children: opt }, optIdx);
|
|
8262
8371
|
}) }),
|
|
8263
|
-
r?.revealText && /* @__PURE__ */ (0,
|
|
8372
|
+
r?.revealText && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-why", children: r.revealText })
|
|
8264
8373
|
] }, q.index);
|
|
8265
8374
|
})
|
|
8266
8375
|
] })
|
|
@@ -8268,16 +8377,16 @@ function DailyQuizGame({
|
|
|
8268
8377
|
}
|
|
8269
8378
|
const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
|
|
8270
8379
|
const selectedIdx = current ? selections.get(current.index) : void 0;
|
|
8271
|
-
return /* @__PURE__ */ (0,
|
|
8272
|
-
/* @__PURE__ */ (0,
|
|
8273
|
-
/* @__PURE__ */ (0,
|
|
8274
|
-
/* @__PURE__ */ (0,
|
|
8275
|
-
/* @__PURE__ */ (0,
|
|
8276
|
-
/* @__PURE__ */ (0,
|
|
8380
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8381
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
|
|
8382
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
|
|
8383
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-body", children: current && /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(import_jsx_runtime84.Fragment, { children: [
|
|
8384
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("h3", { className: "ss-g-dq-stem", children: current.stem }),
|
|
8385
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
|
|
8277
8386
|
const selected = optIdx === selectedIdx;
|
|
8278
8387
|
const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
|
|
8279
8388
|
const playerName = opt;
|
|
8280
|
-
return /* @__PURE__ */ (0,
|
|
8389
|
+
return /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)(
|
|
8281
8390
|
"button",
|
|
8282
8391
|
{
|
|
8283
8392
|
type: "button",
|
|
@@ -8286,25 +8395,25 @@ function DailyQuizGame({
|
|
|
8286
8395
|
disabled: submitting,
|
|
8287
8396
|
onClick: () => handleSelect(current.index, optIdx),
|
|
8288
8397
|
children: [
|
|
8289
|
-
current.optionImagePaths && /* @__PURE__ */ (0,
|
|
8290
|
-
/* @__PURE__ */ (0,
|
|
8291
|
-
/* @__PURE__ */ (0,
|
|
8398
|
+
current.optionImagePaths && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
|
|
8399
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
|
|
8400
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(OptionName, { text: opt })
|
|
8292
8401
|
]
|
|
8293
8402
|
},
|
|
8294
8403
|
optIdx
|
|
8295
8404
|
);
|
|
8296
8405
|
}) })
|
|
8297
8406
|
] }) }),
|
|
8298
|
-
/* @__PURE__ */ (0,
|
|
8299
|
-
page > 0 && /* @__PURE__ */ (0,
|
|
8300
|
-
isLast ? /* @__PURE__ */ (0,
|
|
8407
|
+
/* @__PURE__ */ (0, import_jsx_runtime84.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime84.jsxs)("div", { className: "ss-g-dq-nav", children: [
|
|
8408
|
+
page > 0 && /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
|
|
8409
|
+
isLast ? /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
|
|
8301
8410
|
] }) })
|
|
8302
8411
|
] });
|
|
8303
8412
|
}
|
|
8304
8413
|
|
|
8305
8414
|
// src/components/games/MatchdayPredictorGame.tsx
|
|
8306
8415
|
var import_react51 = require("react");
|
|
8307
|
-
var
|
|
8416
|
+
var import_jsx_runtime85 = require("react/jsx-runtime");
|
|
8308
8417
|
var SCORER_SEARCH_THRESHOLD = 9;
|
|
8309
8418
|
function parseClientState7(json) {
|
|
8310
8419
|
if (!json) return null;
|
|
@@ -8322,7 +8431,7 @@ function isLocked(kickoffUtc) {
|
|
|
8322
8431
|
}
|
|
8323
8432
|
}
|
|
8324
8433
|
function IconMinus() {
|
|
8325
|
-
return /* @__PURE__ */ (0,
|
|
8434
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8326
8435
|
"svg",
|
|
8327
8436
|
{
|
|
8328
8437
|
width: 18,
|
|
@@ -8333,20 +8442,20 @@ function IconMinus() {
|
|
|
8333
8442
|
strokeWidth: 2.2,
|
|
8334
8443
|
strokeLinecap: "round",
|
|
8335
8444
|
"aria-hidden": "true",
|
|
8336
|
-
children: /* @__PURE__ */ (0,
|
|
8445
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("path", { d: "M5 12h14" })
|
|
8337
8446
|
}
|
|
8338
8447
|
);
|
|
8339
8448
|
}
|
|
8340
8449
|
function TeamBadge({ team, label }) {
|
|
8341
|
-
return /* @__PURE__ */ (0,
|
|
8342
|
-
/* @__PURE__ */ (0,
|
|
8343
|
-
/* @__PURE__ */ (0,
|
|
8344
|
-
/* @__PURE__ */ (0,
|
|
8450
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-team", children: [
|
|
8451
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(CrestShield, { name: team.name, size: 44 }),
|
|
8452
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-team-name", children: team.name }),
|
|
8453
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-team-side", children: label })
|
|
8345
8454
|
] });
|
|
8346
8455
|
}
|
|
8347
8456
|
function ScoreCard({ home, away, h, a, t, edit }) {
|
|
8348
|
-
const col = (side, team, value) => /* @__PURE__ */ (0,
|
|
8349
|
-
edit && /* @__PURE__ */ (0,
|
|
8457
|
+
const col = (side, team, value) => /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-col", children: [
|
|
8458
|
+
edit && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8350
8459
|
"button",
|
|
8351
8460
|
{
|
|
8352
8461
|
type: "button",
|
|
@@ -8354,11 +8463,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
8354
8463
|
"aria-label": t.goalsUp(team.name),
|
|
8355
8464
|
disabled: edit.disabled,
|
|
8356
8465
|
onClick: () => edit.onStep(side, 1),
|
|
8357
|
-
children: /* @__PURE__ */ (0,
|
|
8466
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconPlus, { size: 18 })
|
|
8358
8467
|
}
|
|
8359
8468
|
),
|
|
8360
|
-
/* @__PURE__ */ (0,
|
|
8361
|
-
edit && /* @__PURE__ */ (0,
|
|
8469
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
|
|
8470
|
+
edit && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8362
8471
|
"button",
|
|
8363
8472
|
{
|
|
8364
8473
|
type: "button",
|
|
@@ -8366,27 +8475,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
8366
8475
|
"aria-label": t.goalsDown(team.name),
|
|
8367
8476
|
disabled: edit.disabled || value <= 0,
|
|
8368
8477
|
onClick: () => edit.onStep(side, -1),
|
|
8369
|
-
children: /* @__PURE__ */ (0,
|
|
8478
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconMinus, {})
|
|
8370
8479
|
}
|
|
8371
8480
|
)
|
|
8372
8481
|
] });
|
|
8373
|
-
return /* @__PURE__ */ (0,
|
|
8374
|
-
/* @__PURE__ */ (0,
|
|
8375
|
-
/* @__PURE__ */ (0,
|
|
8482
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-card", children: [
|
|
8483
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(TeamBadge, { team: home, label: t.home }),
|
|
8484
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-scores", children: [
|
|
8376
8485
|
col("home", home, h),
|
|
8377
|
-
/* @__PURE__ */ (0,
|
|
8486
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
|
|
8378
8487
|
col("away", away, a)
|
|
8379
8488
|
] }),
|
|
8380
|
-
/* @__PURE__ */ (0,
|
|
8489
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(TeamBadge, { team: away, label: t.away })
|
|
8381
8490
|
] });
|
|
8382
8491
|
}
|
|
8383
8492
|
function OutcomeRow({ label, ok, detail, t }) {
|
|
8384
|
-
return /* @__PURE__ */ (0,
|
|
8385
|
-
/* @__PURE__ */ (0,
|
|
8386
|
-
/* @__PURE__ */ (0,
|
|
8387
|
-
ok ? /* @__PURE__ */ (0,
|
|
8388
|
-
/* @__PURE__ */ (0,
|
|
8389
|
-
detail ? /* @__PURE__ */ (0,
|
|
8493
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
|
|
8494
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-row-k", children: label }),
|
|
8495
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("span", { className: "ss-g-mp-row-v", children: [
|
|
8496
|
+
ok ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconCheck, {}) : /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconClose, { size: 14 }),
|
|
8497
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
|
|
8498
|
+
detail ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-row-d", children: detail }) : null
|
|
8390
8499
|
] })
|
|
8391
8500
|
] });
|
|
8392
8501
|
}
|
|
@@ -8407,12 +8516,12 @@ function MatchdayPredictorGame({
|
|
|
8407
8516
|
const searchId = (0, import_react51.useId)();
|
|
8408
8517
|
const clientState = parseClientState7(result?.clientStateJson);
|
|
8409
8518
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
8410
|
-
const header = /* @__PURE__ */ (0,
|
|
8519
|
+
const header = /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8411
8520
|
GameHeader,
|
|
8412
8521
|
{
|
|
8413
8522
|
title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
|
|
8414
8523
|
eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
|
|
8415
|
-
right: config ? /* @__PURE__ */ (0,
|
|
8524
|
+
right: config ? /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Chip, { icon: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
|
|
8416
8525
|
onBack,
|
|
8417
8526
|
backLabel: ui.back
|
|
8418
8527
|
}
|
|
@@ -8420,10 +8529,10 @@ function MatchdayPredictorGame({
|
|
|
8420
8529
|
if (alreadyPlayed && clientState) {
|
|
8421
8530
|
if (!clientState.graded) {
|
|
8422
8531
|
const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
|
|
8423
|
-
return /* @__PURE__ */ (0,
|
|
8532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
8424
8533
|
header,
|
|
8425
|
-
/* @__PURE__ */ (0,
|
|
8426
|
-
config && /* @__PURE__ */ (0,
|
|
8534
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
|
|
8535
|
+
config && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8427
8536
|
ScoreCard,
|
|
8428
8537
|
{
|
|
8429
8538
|
home: config.homeTeam,
|
|
@@ -8433,7 +8542,7 @@ function MatchdayPredictorGame({
|
|
|
8433
8542
|
t
|
|
8434
8543
|
}
|
|
8435
8544
|
),
|
|
8436
|
-
/* @__PURE__ */ (0,
|
|
8545
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8437
8546
|
ResultCard,
|
|
8438
8547
|
{
|
|
8439
8548
|
tone: "neutral",
|
|
@@ -8450,28 +8559,28 @@ function MatchdayPredictorGame({
|
|
|
8450
8559
|
}
|
|
8451
8560
|
)
|
|
8452
8561
|
] }),
|
|
8453
|
-
/* @__PURE__ */ (0,
|
|
8562
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
8454
8563
|
] });
|
|
8455
8564
|
}
|
|
8456
8565
|
const r = clientState.result;
|
|
8457
|
-
return /* @__PURE__ */ (0,
|
|
8566
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
8458
8567
|
header,
|
|
8459
|
-
/* @__PURE__ */ (0,
|
|
8460
|
-
config && /* @__PURE__ */ (0,
|
|
8461
|
-
/* @__PURE__ */ (0,
|
|
8462
|
-
/* @__PURE__ */ (0,
|
|
8463
|
-
/* @__PURE__ */ (0,
|
|
8464
|
-
/* @__PURE__ */ (0,
|
|
8465
|
-
!clientState.firstScorerVoid && /* @__PURE__ */ (0,
|
|
8568
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
|
|
8569
|
+
config && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
|
|
8570
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
|
|
8571
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("ul", { className: "ss-g-mp-rows", children: [
|
|
8572
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
|
|
8573
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
|
|
8574
|
+
!clientState.firstScorerVoid && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
|
|
8466
8575
|
] })
|
|
8467
8576
|
] }),
|
|
8468
|
-
/* @__PURE__ */ (0,
|
|
8577
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
8469
8578
|
] });
|
|
8470
8579
|
}
|
|
8471
8580
|
if (!config) {
|
|
8472
|
-
return /* @__PURE__ */ (0,
|
|
8581
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
8473
8582
|
header,
|
|
8474
|
-
/* @__PURE__ */ (0,
|
|
8583
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8475
8584
|
] });
|
|
8476
8585
|
}
|
|
8477
8586
|
const locked = isLocked(config.kickoffUtc);
|
|
@@ -8495,10 +8604,10 @@ function MatchdayPredictorGame({
|
|
|
8495
8604
|
const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
|
|
8496
8605
|
const q = query.trim().toLowerCase();
|
|
8497
8606
|
const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
|
|
8498
|
-
return /* @__PURE__ */ (0,
|
|
8607
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
8499
8608
|
header,
|
|
8500
|
-
/* @__PURE__ */ (0,
|
|
8501
|
-
/* @__PURE__ */ (0,
|
|
8609
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-body", children: [
|
|
8610
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8502
8611
|
ScoreCard,
|
|
8503
8612
|
{
|
|
8504
8613
|
home: config.homeTeam,
|
|
@@ -8509,12 +8618,12 @@ function MatchdayPredictorGame({
|
|
|
8509
8618
|
edit: { disabled, active: lastEdited, onStep: step }
|
|
8510
8619
|
}
|
|
8511
8620
|
),
|
|
8512
|
-
pool.length > 0 && /* @__PURE__ */ (0,
|
|
8513
|
-
/* @__PURE__ */ (0,
|
|
8514
|
-
/* @__PURE__ */ (0,
|
|
8515
|
-
/* @__PURE__ */ (0,
|
|
8621
|
+
pool.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("section", { className: "ss-g-mp-scorer", children: [
|
|
8622
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)("div", { className: "ss-g-mp-sec-head", children: [
|
|
8623
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("h3", { children: t.firstScorer }),
|
|
8624
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { children: t.optional })
|
|
8516
8625
|
] }),
|
|
8517
|
-
showSearch && /* @__PURE__ */ (0,
|
|
8626
|
+
showSearch && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(
|
|
8518
8627
|
SearchField,
|
|
8519
8628
|
{
|
|
8520
8629
|
id: searchId,
|
|
@@ -8526,9 +8635,9 @@ function MatchdayPredictorGame({
|
|
|
8526
8635
|
disabled
|
|
8527
8636
|
}
|
|
8528
8637
|
),
|
|
8529
|
-
/* @__PURE__ */ (0,
|
|
8638
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
|
|
8530
8639
|
const selected = firstScorerPlayerId === p.playerId;
|
|
8531
|
-
return /* @__PURE__ */ (0,
|
|
8640
|
+
return /* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
|
|
8532
8641
|
"button",
|
|
8533
8642
|
{
|
|
8534
8643
|
type: "button",
|
|
@@ -8538,15 +8647,15 @@ function MatchdayPredictorGame({
|
|
|
8538
8647
|
disabled,
|
|
8539
8648
|
onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
|
|
8540
8649
|
children: [
|
|
8541
|
-
selected && /* @__PURE__ */ (0,
|
|
8542
|
-
/* @__PURE__ */ (0,
|
|
8543
|
-
/* @__PURE__ */ (0,
|
|
8650
|
+
selected && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ (0, import_jsx_runtime85.jsx)(IconCheck, { size: 12 }) }),
|
|
8651
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
|
|
8652
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
|
|
8544
8653
|
]
|
|
8545
8654
|
},
|
|
8546
8655
|
p.playerId
|
|
8547
8656
|
);
|
|
8548
8657
|
}) }),
|
|
8549
|
-
/* @__PURE__ */ (0,
|
|
8658
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(
|
|
8550
8659
|
"button",
|
|
8551
8660
|
{
|
|
8552
8661
|
type: "button",
|
|
@@ -8555,24 +8664,24 @@ function MatchdayPredictorGame({
|
|
|
8555
8664
|
disabled,
|
|
8556
8665
|
onClick: () => setFirstScorerPlayerId(null),
|
|
8557
8666
|
children: [
|
|
8558
|
-
/* @__PURE__ */ (0,
|
|
8667
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
|
|
8559
8668
|
t.noScorer
|
|
8560
8669
|
]
|
|
8561
8670
|
}
|
|
8562
8671
|
)
|
|
8563
8672
|
] }),
|
|
8564
|
-
locked && /* @__PURE__ */ (0,
|
|
8673
|
+
locked && /* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-closed", children: t.closed })
|
|
8565
8674
|
] }),
|
|
8566
|
-
/* @__PURE__ */ (0,
|
|
8567
|
-
/* @__PURE__ */ (0,
|
|
8568
|
-
/* @__PURE__ */ (0,
|
|
8675
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsxs)(FooterBar, { children: [
|
|
8676
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
|
|
8677
|
+
/* @__PURE__ */ (0, import_jsx_runtime85.jsx)("p", { className: "ss-g-mp-fun", children: t.forFun })
|
|
8569
8678
|
] })
|
|
8570
8679
|
] });
|
|
8571
8680
|
}
|
|
8572
8681
|
|
|
8573
8682
|
// src/components/games/StartingXiGame.tsx
|
|
8574
8683
|
var import_react52 = require("react");
|
|
8575
|
-
var
|
|
8684
|
+
var import_jsx_runtime86 = require("react/jsx-runtime");
|
|
8576
8685
|
var POINTS_PER_STARTER = 8;
|
|
8577
8686
|
var XI_SIZE = 11;
|
|
8578
8687
|
var DEFAULT_FORMATION = "4-3-3";
|
|
@@ -8621,20 +8730,20 @@ function StartingXiGame({
|
|
|
8621
8730
|
const searchId = (0, import_react52.useId)();
|
|
8622
8731
|
const clientState = parseClientState8(result?.clientStateJson);
|
|
8623
8732
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
8624
|
-
const header = /* @__PURE__ */ (0,
|
|
8733
|
+
const header = /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
8625
8734
|
GameHeader,
|
|
8626
8735
|
{
|
|
8627
8736
|
title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
|
|
8628
8737
|
eyebrow: t.eyebrow,
|
|
8629
|
-
right: /* @__PURE__ */ (0,
|
|
8738
|
+
right: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
|
|
8630
8739
|
onBack,
|
|
8631
8740
|
backLabel: ui.back
|
|
8632
8741
|
}
|
|
8633
8742
|
);
|
|
8634
8743
|
function statusScreen(title, score) {
|
|
8635
|
-
return /* @__PURE__ */ (0,
|
|
8744
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
8636
8745
|
header,
|
|
8637
|
-
/* @__PURE__ */ (0,
|
|
8746
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-body", children: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
|
|
8638
8747
|
] });
|
|
8639
8748
|
}
|
|
8640
8749
|
if (alreadyPlayed) {
|
|
@@ -8643,9 +8752,9 @@ function StartingXiGame({
|
|
|
8643
8752
|
if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
|
|
8644
8753
|
}
|
|
8645
8754
|
if (!config) {
|
|
8646
|
-
return /* @__PURE__ */ (0,
|
|
8755
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
8647
8756
|
header,
|
|
8648
|
-
/* @__PURE__ */ (0,
|
|
8757
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8649
8758
|
] });
|
|
8650
8759
|
}
|
|
8651
8760
|
const { formation, slots } = formationSlots(config.formation);
|
|
@@ -8680,27 +8789,27 @@ function StartingXiGame({
|
|
|
8680
8789
|
onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
|
|
8681
8790
|
}
|
|
8682
8791
|
const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
|
|
8683
|
-
return /* @__PURE__ */ (0,
|
|
8792
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
8684
8793
|
header,
|
|
8685
|
-
/* @__PURE__ */ (0,
|
|
8794
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
8686
8795
|
SegmentProgress,
|
|
8687
8796
|
{
|
|
8688
8797
|
segments,
|
|
8689
8798
|
ariaLabel: t.picked(pickedCount),
|
|
8690
8799
|
leftLabel: t.picked(pickedCount),
|
|
8691
8800
|
rightLabel: t.toGo(XI_SIZE - pickedCount),
|
|
8692
|
-
right: /* @__PURE__ */ (0,
|
|
8801
|
+
right: /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { children: formation })
|
|
8693
8802
|
}
|
|
8694
8803
|
),
|
|
8695
|
-
/* @__PURE__ */ (0,
|
|
8696
|
-
/* @__PURE__ */ (0,
|
|
8697
|
-
/* @__PURE__ */ (0,
|
|
8804
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-body", children: [
|
|
8805
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-xi-pitch", children: [
|
|
8806
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(PitchSvg, { variant: "half" }),
|
|
8698
8807
|
slots.map((s) => {
|
|
8699
8808
|
const playerId = slotPlayers[s.index] ?? null;
|
|
8700
8809
|
const player = playerId !== null ? byId.get(playerId) ?? null : null;
|
|
8701
8810
|
const name = player?.playerName ?? "";
|
|
8702
8811
|
const state = player ? "filled" : active === s.index ? "active" : "empty";
|
|
8703
|
-
return /* @__PURE__ */ (0,
|
|
8812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(
|
|
8704
8813
|
"button",
|
|
8705
8814
|
{
|
|
8706
8815
|
type: "button",
|
|
@@ -8712,21 +8821,21 @@ function StartingXiGame({
|
|
|
8712
8821
|
disabled: submitting,
|
|
8713
8822
|
onClick: () => tapSlot(s.index),
|
|
8714
8823
|
children: [
|
|
8715
|
-
/* @__PURE__ */ (0,
|
|
8716
|
-
/* @__PURE__ */ (0,
|
|
8824
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconPlus, { size: 18 }) }),
|
|
8825
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
|
|
8717
8826
|
]
|
|
8718
8827
|
},
|
|
8719
8828
|
s.index
|
|
8720
8829
|
);
|
|
8721
8830
|
})
|
|
8722
8831
|
] }),
|
|
8723
|
-
/* @__PURE__ */ (0,
|
|
8724
|
-
/* @__PURE__ */ (0,
|
|
8725
|
-
/* @__PURE__ */ (0,
|
|
8726
|
-
/* @__PURE__ */ (0,
|
|
8727
|
-
] }) : /* @__PURE__ */ (0,
|
|
8728
|
-
activeSlot && /* @__PURE__ */ (0,
|
|
8729
|
-
/* @__PURE__ */ (0,
|
|
8832
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("div", { className: "ss-g-xi-picker", children: [
|
|
8833
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(import_jsx_runtime86.Fragment, { children: [
|
|
8834
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(Chip, { variant: "badge", children: activeSlot.label }),
|
|
8835
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("strong", { children: t.pickFor(activeSlot.label) })
|
|
8836
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("strong", { children: t.allPicked }) }),
|
|
8837
|
+
activeSlot && /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(import_jsx_runtime86.Fragment, { children: [
|
|
8838
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(
|
|
8730
8839
|
SearchField,
|
|
8731
8840
|
{
|
|
8732
8841
|
id: searchId,
|
|
@@ -8738,18 +8847,18 @@ function StartingXiGame({
|
|
|
8738
8847
|
disabled: submitting
|
|
8739
8848
|
}
|
|
8740
8849
|
),
|
|
8741
|
-
/* @__PURE__ */ (0,
|
|
8742
|
-
/* @__PURE__ */ (0,
|
|
8743
|
-
/* @__PURE__ */ (0,
|
|
8744
|
-
/* @__PURE__ */ (0,
|
|
8850
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ (0, import_jsx_runtime86.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
|
|
8851
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
|
|
8852
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
|
|
8853
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
|
|
8745
8854
|
] }) }, p.playerId)) })
|
|
8746
8855
|
] })
|
|
8747
8856
|
] })
|
|
8748
8857
|
] }),
|
|
8749
|
-
/* @__PURE__ */ (0,
|
|
8750
|
-
/* @__PURE__ */ (0,
|
|
8751
|
-
/* @__PURE__ */ (0,
|
|
8752
|
-
/* @__PURE__ */ (0,
|
|
8858
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)(FooterBar, { children: [
|
|
8859
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
|
|
8860
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsxs)("p", { className: "ss-g-xi-lock", children: [
|
|
8861
|
+
/* @__PURE__ */ (0, import_jsx_runtime86.jsx)(IconLock, {}),
|
|
8753
8862
|
lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
|
|
8754
8863
|
] })
|
|
8755
8864
|
] })
|
|
@@ -8758,7 +8867,7 @@ function StartingXiGame({
|
|
|
8758
8867
|
|
|
8759
8868
|
// src/components/games/StatLadderGame.tsx
|
|
8760
8869
|
var import_react53 = require("react");
|
|
8761
|
-
var
|
|
8870
|
+
var import_jsx_runtime87 = require("react/jsx-runtime");
|
|
8762
8871
|
function ladderClue(ladder) {
|
|
8763
8872
|
const mystery = ladder.find((r) => r.rank === 2);
|
|
8764
8873
|
if (!mystery) return null;
|
|
@@ -8780,9 +8889,9 @@ function parseClientState9(json) {
|
|
|
8780
8889
|
}
|
|
8781
8890
|
function NameStack({ name }) {
|
|
8782
8891
|
const { first, last } = splitName(name);
|
|
8783
|
-
return /* @__PURE__ */ (0,
|
|
8784
|
-
first && /* @__PURE__ */ (0,
|
|
8785
|
-
/* @__PURE__ */ (0,
|
|
8892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("span", { className: "ss-g-sl-name", children: [
|
|
8893
|
+
first && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("small", { children: `${first[0]}.` }),
|
|
8894
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("b", { children: last })
|
|
8786
8895
|
] });
|
|
8787
8896
|
}
|
|
8788
8897
|
function StatLadderGame({
|
|
@@ -8799,11 +8908,11 @@ function StatLadderGame({
|
|
|
8799
8908
|
const searchId = (0, import_react53.useId)();
|
|
8800
8909
|
const clientState = parseClientState9(result?.clientStateJson);
|
|
8801
8910
|
const revealed = clientState != null;
|
|
8802
|
-
const header = /* @__PURE__ */ (0,
|
|
8911
|
+
const header = /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
|
|
8803
8912
|
if (!config) {
|
|
8804
|
-
return /* @__PURE__ */ (0,
|
|
8913
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
8805
8914
|
header,
|
|
8806
|
-
/* @__PURE__ */ (0,
|
|
8915
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8807
8916
|
] });
|
|
8808
8917
|
}
|
|
8809
8918
|
const question = t.question(config.statLabel);
|
|
@@ -8815,45 +8924,45 @@ function StatLadderGame({
|
|
|
8815
8924
|
if (selectedId === null || submitting || revealed) return;
|
|
8816
8925
|
onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
|
|
8817
8926
|
}
|
|
8818
|
-
return /* @__PURE__ */ (0,
|
|
8927
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
8819
8928
|
header,
|
|
8820
|
-
/* @__PURE__ */ (0,
|
|
8821
|
-
!revealed && /* @__PURE__ */ (0,
|
|
8822
|
-
/* @__PURE__ */ (0,
|
|
8823
|
-
/* @__PURE__ */ (0,
|
|
8824
|
-
/* @__PURE__ */ (0,
|
|
8929
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-body", children: [
|
|
8930
|
+
!revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
|
|
8931
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-sl-prompt", children: [
|
|
8932
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Chip, { variant: "accent", icon: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
|
|
8933
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("h3", { className: "ss-g-sl-q", children: [
|
|
8825
8934
|
question.pre,
|
|
8826
|
-
/* @__PURE__ */ (0,
|
|
8935
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("em", { children: question.emph }),
|
|
8827
8936
|
question.post
|
|
8828
8937
|
] })
|
|
8829
8938
|
] }),
|
|
8830
|
-
/* @__PURE__ */ (0,
|
|
8831
|
-
(rung) => rung.rank === 2 ? /* @__PURE__ */ (0,
|
|
8939
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("ol", { className: "ss-g-sl-rungs", children: rungs.map(
|
|
8940
|
+
(rung) => rung.rank === 2 ? /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
|
|
8832
8941
|
"li",
|
|
8833
8942
|
{
|
|
8834
8943
|
className: "ss-g-sl-rung ss-g-sl-rung--mystery",
|
|
8835
8944
|
"data-testid": "sl-mystery-rung",
|
|
8836
8945
|
"data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
|
|
8837
8946
|
children: [
|
|
8838
|
-
/* @__PURE__ */ (0,
|
|
8839
|
-
revealed ? /* @__PURE__ */ (0,
|
|
8840
|
-
revealed ? /* @__PURE__ */ (0,
|
|
8841
|
-
/* @__PURE__ */ (0,
|
|
8947
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-rank", children: "2" }),
|
|
8948
|
+
revealed ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(Silhouette, { size: 52, variant: "mystery" }),
|
|
8949
|
+
revealed ? /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-who", children: t.whoSecond }),
|
|
8950
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
|
|
8842
8951
|
]
|
|
8843
8952
|
},
|
|
8844
8953
|
rung.rank
|
|
8845
|
-
) : /* @__PURE__ */ (0,
|
|
8846
|
-
/* @__PURE__ */ (0,
|
|
8847
|
-
/* @__PURE__ */ (0,
|
|
8848
|
-
/* @__PURE__ */ (0,
|
|
8849
|
-
/* @__PURE__ */ (0,
|
|
8954
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("li", { className: "ss-g-sl-rung", children: [
|
|
8955
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-rank", children: rung.rank }),
|
|
8956
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
|
|
8957
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(NameStack, { name: rung.playerName ?? "?" }),
|
|
8958
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-val", children: rung.statValue })
|
|
8850
8959
|
] }, rung.rank)
|
|
8851
8960
|
) }),
|
|
8852
|
-
clue && /* @__PURE__ */ (0,
|
|
8853
|
-
/* @__PURE__ */ (0,
|
|
8854
|
-
/* @__PURE__ */ (0,
|
|
8961
|
+
clue && /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("p", { className: "ss-g-sl-clue", children: [
|
|
8962
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconBulb, {}),
|
|
8963
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { children: t.clue(clue, config.statLabel) })
|
|
8855
8964
|
] }),
|
|
8856
|
-
!revealed && /* @__PURE__ */ (0,
|
|
8965
|
+
!revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)(
|
|
8857
8966
|
"button",
|
|
8858
8967
|
{
|
|
8859
8968
|
type: "button",
|
|
@@ -8866,13 +8975,13 @@ function StatLadderGame({
|
|
|
8866
8975
|
setQuery(p.playerName);
|
|
8867
8976
|
},
|
|
8868
8977
|
children: [
|
|
8869
|
-
/* @__PURE__ */ (0,
|
|
8870
|
-
/* @__PURE__ */ (0,
|
|
8871
|
-
selectedId === p.playerId && /* @__PURE__ */ (0,
|
|
8978
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
|
|
8979
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
|
|
8980
|
+
selectedId === p.playerId && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(IconCheck, {})
|
|
8872
8981
|
]
|
|
8873
8982
|
}
|
|
8874
8983
|
) }, p.playerId)) }),
|
|
8875
|
-
revealed && /* @__PURE__ */ (0,
|
|
8984
|
+
revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
8876
8985
|
ResultCard,
|
|
8877
8986
|
{
|
|
8878
8987
|
tone: clientState.isCorrect ? "win" : "lose",
|
|
@@ -8883,8 +8992,8 @@ function StatLadderGame({
|
|
|
8883
8992
|
}
|
|
8884
8993
|
)
|
|
8885
8994
|
] }),
|
|
8886
|
-
!revealed && /* @__PURE__ */ (0,
|
|
8887
|
-
/* @__PURE__ */ (0,
|
|
8995
|
+
!revealed && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(FooterBar, { children: /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: "ss-g-sl-guess", children: [
|
|
8996
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
8888
8997
|
SearchField,
|
|
8889
8998
|
{
|
|
8890
8999
|
id: searchId,
|
|
@@ -8899,13 +9008,13 @@ function StatLadderGame({
|
|
|
8899
9008
|
disabled: submitting
|
|
8900
9009
|
}
|
|
8901
9010
|
),
|
|
8902
|
-
/* @__PURE__ */ (0,
|
|
9011
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
|
|
8903
9012
|
] }) })
|
|
8904
9013
|
] });
|
|
8905
9014
|
}
|
|
8906
9015
|
|
|
8907
9016
|
// src/components/games/FanMotmGame.tsx
|
|
8908
|
-
var
|
|
9017
|
+
var import_jsx_runtime88 = require("react/jsx-runtime");
|
|
8909
9018
|
function parseClientState10(json) {
|
|
8910
9019
|
if (!json) return null;
|
|
8911
9020
|
try {
|
|
@@ -8926,20 +9035,20 @@ function FanMotmGame({
|
|
|
8926
9035
|
const clientState = parseClientState10(result?.clientStateJson);
|
|
8927
9036
|
const alreadyVoted = result?.alreadyPlayed === true;
|
|
8928
9037
|
const pickedId = clientState?.pickedPlayerId ?? null;
|
|
8929
|
-
const header = /* @__PURE__ */ (0,
|
|
9038
|
+
const header = /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(
|
|
8930
9039
|
GameHeader,
|
|
8931
9040
|
{
|
|
8932
9041
|
title: t.title,
|
|
8933
9042
|
eyebrow: t.eyebrow,
|
|
8934
|
-
right: alreadyVoted ? /* @__PURE__ */ (0,
|
|
9043
|
+
right: alreadyVoted ? /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Chip, { variant: "success", icon: /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(IconCheck, {}), children: t.voted }) : void 0,
|
|
8935
9044
|
onBack,
|
|
8936
9045
|
backLabel: ui.back
|
|
8937
9046
|
}
|
|
8938
9047
|
);
|
|
8939
9048
|
if (!config) {
|
|
8940
|
-
return /* @__PURE__ */ (0,
|
|
9049
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
8941
9050
|
header,
|
|
8942
|
-
/* @__PURE__ */ (0,
|
|
9051
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8943
9052
|
] });
|
|
8944
9053
|
}
|
|
8945
9054
|
const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
|
|
@@ -8947,12 +9056,12 @@ function FanMotmGame({
|
|
|
8947
9056
|
if (alreadyVoted || submitting) return;
|
|
8948
9057
|
onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
|
|
8949
9058
|
}
|
|
8950
|
-
return /* @__PURE__ */ (0,
|
|
9059
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
8951
9060
|
header,
|
|
8952
|
-
/* @__PURE__ */ (0,
|
|
8953
|
-
/* @__PURE__ */ (0,
|
|
9061
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)("div", { className: "ss-g-body", children: [
|
|
9062
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
|
|
8954
9063
|
const isVoted = alreadyVoted && pickedId === c.playerId;
|
|
8955
|
-
return /* @__PURE__ */ (0,
|
|
9064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(
|
|
8956
9065
|
"button",
|
|
8957
9066
|
{
|
|
8958
9067
|
type: "button",
|
|
@@ -8961,24 +9070,24 @@ function FanMotmGame({
|
|
|
8961
9070
|
disabled: alreadyVoted || submitting,
|
|
8962
9071
|
onClick: () => handleVote(c.playerId),
|
|
8963
9072
|
children: [
|
|
8964
|
-
/* @__PURE__ */ (0,
|
|
8965
|
-
/* @__PURE__ */ (0,
|
|
8966
|
-
isVoted && /* @__PURE__ */ (0,
|
|
9073
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
|
|
9074
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("span", { className: "ss-g-motm-name", children: c.playerName }),
|
|
9075
|
+
isVoted && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
|
|
8967
9076
|
]
|
|
8968
9077
|
}
|
|
8969
9078
|
) }, c.playerId);
|
|
8970
9079
|
}) }),
|
|
8971
|
-
alreadyVoted && picked && /* @__PURE__ */ (0,
|
|
9080
|
+
alreadyVoted && picked && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
|
|
8972
9081
|
] }),
|
|
8973
|
-
/* @__PURE__ */ (0,
|
|
8974
|
-
!alreadyVoted && /* @__PURE__ */ (0,
|
|
8975
|
-
/* @__PURE__ */ (0,
|
|
9082
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsxs)(FooterBar, { children: [
|
|
9083
|
+
!alreadyVoted && /* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
|
|
9084
|
+
/* @__PURE__ */ (0, import_jsx_runtime88.jsx)("p", { className: "ss-g-motm-fun", children: t.forFun })
|
|
8976
9085
|
] })
|
|
8977
9086
|
] });
|
|
8978
9087
|
}
|
|
8979
9088
|
|
|
8980
9089
|
// src/components/GameScreenHost.tsx
|
|
8981
|
-
var
|
|
9090
|
+
var import_jsx_runtime89 = require("react/jsx-runtime");
|
|
8982
9091
|
var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
|
|
8983
9092
|
"matchday-predictor",
|
|
8984
9093
|
"starting-xi",
|
|
@@ -9054,7 +9163,7 @@ function GameScreenHost({
|
|
|
9054
9163
|
function renderScreen() {
|
|
9055
9164
|
switch (gameId) {
|
|
9056
9165
|
case "mystery-tiger":
|
|
9057
|
-
return /* @__PURE__ */ (0,
|
|
9166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9058
9167
|
MysteryTigerGame,
|
|
9059
9168
|
{
|
|
9060
9169
|
...sharedProps,
|
|
@@ -9062,7 +9171,7 @@ function GameScreenHost({
|
|
|
9062
9171
|
}
|
|
9063
9172
|
);
|
|
9064
9173
|
case "higher-or-lower":
|
|
9065
|
-
return /* @__PURE__ */ (0,
|
|
9174
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9066
9175
|
HigherOrLowerGame,
|
|
9067
9176
|
{
|
|
9068
9177
|
...sharedProps,
|
|
@@ -9070,7 +9179,7 @@ function GameScreenHost({
|
|
|
9070
9179
|
}
|
|
9071
9180
|
);
|
|
9072
9181
|
case "career-path":
|
|
9073
|
-
return /* @__PURE__ */ (0,
|
|
9182
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9074
9183
|
CareerPathGame,
|
|
9075
9184
|
{
|
|
9076
9185
|
...sharedProps,
|
|
@@ -9079,7 +9188,7 @@ function GameScreenHost({
|
|
|
9079
9188
|
);
|
|
9080
9189
|
case "beat-the-grid": {
|
|
9081
9190
|
const btgConfig = safeParseConfig(configJson);
|
|
9082
|
-
return /* @__PURE__ */ (0,
|
|
9191
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9083
9192
|
BeatTheGridGame,
|
|
9084
9193
|
{
|
|
9085
9194
|
...sharedProps,
|
|
@@ -9089,7 +9198,7 @@ function GameScreenHost({
|
|
|
9089
9198
|
);
|
|
9090
9199
|
}
|
|
9091
9200
|
case "guess-the-xi":
|
|
9092
|
-
return /* @__PURE__ */ (0,
|
|
9201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9093
9202
|
GuessTheXiGame,
|
|
9094
9203
|
{
|
|
9095
9204
|
...sharedProps,
|
|
@@ -9097,7 +9206,7 @@ function GameScreenHost({
|
|
|
9097
9206
|
}
|
|
9098
9207
|
);
|
|
9099
9208
|
case "daily-quiz":
|
|
9100
|
-
return /* @__PURE__ */ (0,
|
|
9209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9101
9210
|
DailyQuizGame,
|
|
9102
9211
|
{
|
|
9103
9212
|
...sharedProps,
|
|
@@ -9105,7 +9214,7 @@ function GameScreenHost({
|
|
|
9105
9214
|
}
|
|
9106
9215
|
);
|
|
9107
9216
|
case "matchday-predictor":
|
|
9108
|
-
return /* @__PURE__ */ (0,
|
|
9217
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9109
9218
|
MatchdayPredictorGame,
|
|
9110
9219
|
{
|
|
9111
9220
|
...sharedProps,
|
|
@@ -9113,7 +9222,7 @@ function GameScreenHost({
|
|
|
9113
9222
|
}
|
|
9114
9223
|
);
|
|
9115
9224
|
case "starting-xi":
|
|
9116
|
-
return /* @__PURE__ */ (0,
|
|
9225
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9117
9226
|
StartingXiGame,
|
|
9118
9227
|
{
|
|
9119
9228
|
...sharedProps,
|
|
@@ -9121,7 +9230,7 @@ function GameScreenHost({
|
|
|
9121
9230
|
}
|
|
9122
9231
|
);
|
|
9123
9232
|
case "stat-ladder":
|
|
9124
|
-
return /* @__PURE__ */ (0,
|
|
9233
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9125
9234
|
StatLadderGame,
|
|
9126
9235
|
{
|
|
9127
9236
|
...sharedProps,
|
|
@@ -9129,7 +9238,7 @@ function GameScreenHost({
|
|
|
9129
9238
|
}
|
|
9130
9239
|
);
|
|
9131
9240
|
case "fan-motm":
|
|
9132
|
-
return /* @__PURE__ */ (0,
|
|
9241
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(
|
|
9133
9242
|
FanMotmGame,
|
|
9134
9243
|
{
|
|
9135
9244
|
...sharedProps,
|
|
@@ -9137,10 +9246,10 @@ function GameScreenHost({
|
|
|
9137
9246
|
}
|
|
9138
9247
|
);
|
|
9139
9248
|
default:
|
|
9140
|
-
return /* @__PURE__ */ (0,
|
|
9249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ (0, import_jsx_runtime89.jsx)(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
|
|
9141
9250
|
}
|
|
9142
9251
|
}
|
|
9143
|
-
return /* @__PURE__ */ (0,
|
|
9252
|
+
return /* @__PURE__ */ (0, import_jsx_runtime89.jsx)("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
|
|
9144
9253
|
}
|
|
9145
9254
|
|
|
9146
9255
|
// src/components/games/ui/fonts.ts
|
|
@@ -9157,7 +9266,7 @@ function ensureGamesFonts(doc = document) {
|
|
|
9157
9266
|
}
|
|
9158
9267
|
|
|
9159
9268
|
// src/components/GamesPanel.tsx
|
|
9160
|
-
var
|
|
9269
|
+
var import_jsx_runtime90 = require("react/jsx-runtime");
|
|
9161
9270
|
function GamesPanel({
|
|
9162
9271
|
loggedIn,
|
|
9163
9272
|
games,
|
|
@@ -9170,9 +9279,9 @@ function GamesPanel({
|
|
|
9170
9279
|
(0, import_react55.useEffect)(() => {
|
|
9171
9280
|
ensureGamesFonts();
|
|
9172
9281
|
}, []);
|
|
9173
|
-
if (!loggedIn) return /* @__PURE__ */ (0,
|
|
9282
|
+
if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(GamesLoginWall, { ui });
|
|
9174
9283
|
if (selected !== null) {
|
|
9175
|
-
return /* @__PURE__ */ (0,
|
|
9284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
9176
9285
|
GameScreenHost,
|
|
9177
9286
|
{
|
|
9178
9287
|
selected,
|
|
@@ -9186,7 +9295,7 @@ function GamesPanel({
|
|
|
9186
9295
|
}
|
|
9187
9296
|
) });
|
|
9188
9297
|
}
|
|
9189
|
-
return /* @__PURE__ */ (0,
|
|
9298
|
+
return /* @__PURE__ */ (0, import_jsx_runtime90.jsx)("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ (0, import_jsx_runtime90.jsx)(
|
|
9190
9299
|
GamesHub,
|
|
9191
9300
|
{
|
|
9192
9301
|
games,
|
|
@@ -9201,7 +9310,7 @@ function GamesPanel({
|
|
|
9201
9310
|
var import_react56 = require("react");
|
|
9202
9311
|
|
|
9203
9312
|
// src/components/LeaderboardRow.tsx
|
|
9204
|
-
var
|
|
9313
|
+
var import_jsx_runtime91 = require("react/jsx-runtime");
|
|
9205
9314
|
function formatPoints(n) {
|
|
9206
9315
|
return n.toLocaleString("en");
|
|
9207
9316
|
}
|
|
@@ -9210,14 +9319,14 @@ function LeaderboardWeeklyRow({
|
|
|
9210
9319
|
isMe
|
|
9211
9320
|
}) {
|
|
9212
9321
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
9213
|
-
return /* @__PURE__ */ (0,
|
|
9214
|
-
/* @__PURE__ */ (0,
|
|
9322
|
+
return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
9323
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: rankClass, children: [
|
|
9215
9324
|
"#",
|
|
9216
9325
|
row.rank
|
|
9217
9326
|
] }),
|
|
9218
|
-
/* @__PURE__ */ (0,
|
|
9219
|
-
/* @__PURE__ */ (0,
|
|
9220
|
-
row.currentStreak > 0 && /* @__PURE__ */ (0,
|
|
9327
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
9328
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
|
|
9329
|
+
row.currentStreak > 0 && /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: "ss-w-lb2-streak", children: [
|
|
9221
9330
|
"\u{1F525} ",
|
|
9222
9331
|
row.currentStreak
|
|
9223
9332
|
] })
|
|
@@ -9228,18 +9337,18 @@ function LeaderboardAllTimeRow({
|
|
|
9228
9337
|
isMe
|
|
9229
9338
|
}) {
|
|
9230
9339
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
9231
|
-
return /* @__PURE__ */ (0,
|
|
9232
|
-
/* @__PURE__ */ (0,
|
|
9340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
9341
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsxs)("span", { className: rankClass, children: [
|
|
9233
9342
|
"#",
|
|
9234
9343
|
row.rank
|
|
9235
9344
|
] }),
|
|
9236
|
-
/* @__PURE__ */ (0,
|
|
9237
|
-
/* @__PURE__ */ (0,
|
|
9345
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
9346
|
+
/* @__PURE__ */ (0, import_jsx_runtime91.jsx)("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
|
|
9238
9347
|
] });
|
|
9239
9348
|
}
|
|
9240
9349
|
|
|
9241
9350
|
// src/components/LeaderboardEmpty.tsx
|
|
9242
|
-
var
|
|
9351
|
+
var import_jsx_runtime92 = require("react/jsx-runtime");
|
|
9243
9352
|
function LeaderboardEmpty({
|
|
9244
9353
|
segment,
|
|
9245
9354
|
lastWeek,
|
|
@@ -9248,36 +9357,36 @@ function LeaderboardEmpty({
|
|
|
9248
9357
|
ui
|
|
9249
9358
|
}) {
|
|
9250
9359
|
if (segment === "alltime") {
|
|
9251
|
-
return /* @__PURE__ */ (0,
|
|
9252
|
-
/* @__PURE__ */ (0,
|
|
9253
|
-
/* @__PURE__ */ (0,
|
|
9360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
|
|
9361
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
|
|
9362
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
|
|
9254
9363
|
] });
|
|
9255
9364
|
}
|
|
9256
9365
|
const fresh = lastWeek != null;
|
|
9257
9366
|
const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
|
|
9258
9367
|
const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
|
|
9259
|
-
return /* @__PURE__ */ (0,
|
|
9260
|
-
weeklyPrize && /* @__PURE__ */ (0,
|
|
9261
|
-
/* @__PURE__ */ (0,
|
|
9262
|
-
/* @__PURE__ */ (0,
|
|
9368
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty", children: [
|
|
9369
|
+
weeklyPrize && /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-prize", children: [
|
|
9370
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
|
|
9371
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
|
|
9263
9372
|
] }),
|
|
9264
|
-
/* @__PURE__ */ (0,
|
|
9265
|
-
/* @__PURE__ */ (0,
|
|
9266
|
-
/* @__PURE__ */ (0,
|
|
9267
|
-
/* @__PURE__ */ (0,
|
|
9268
|
-
onPlay && /* @__PURE__ */ (0,
|
|
9373
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-empty-hero", children: [
|
|
9374
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
|
|
9375
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("h4", { className: "ss-w-lb-empty-title", children: title }),
|
|
9376
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("p", { className: "ss-w-lb-empty-body", children: body }),
|
|
9377
|
+
onPlay && /* @__PURE__ */ (0, import_jsx_runtime92.jsx)("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
|
|
9269
9378
|
] }),
|
|
9270
|
-
fresh && lastWeek && /* @__PURE__ */ (0,
|
|
9271
|
-
/* @__PURE__ */ (0,
|
|
9272
|
-
/* @__PURE__ */ (0,
|
|
9273
|
-
/* @__PURE__ */ (0,
|
|
9274
|
-
/* @__PURE__ */ (0,
|
|
9379
|
+
fresh && lastWeek && /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { className: "ss-w-lb-last", children: [
|
|
9380
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
|
|
9381
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
|
|
9382
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
|
|
9383
|
+
/* @__PURE__ */ (0, import_jsx_runtime92.jsx)("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
|
|
9275
9384
|
] })
|
|
9276
9385
|
] });
|
|
9277
9386
|
}
|
|
9278
9387
|
|
|
9279
9388
|
// src/components/Leaderboard.tsx
|
|
9280
|
-
var
|
|
9389
|
+
var import_jsx_runtime93 = require("react/jsx-runtime");
|
|
9281
9390
|
function Leaderboard({
|
|
9282
9391
|
data,
|
|
9283
9392
|
ui,
|
|
@@ -9287,9 +9396,9 @@ function Leaderboard({
|
|
|
9287
9396
|
const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
|
|
9288
9397
|
const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
|
|
9289
9398
|
const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
|
|
9290
|
-
return /* @__PURE__ */ (0,
|
|
9291
|
-
/* @__PURE__ */ (0,
|
|
9292
|
-
/* @__PURE__ */ (0,
|
|
9399
|
+
return /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-lb2", children: [
|
|
9400
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-seg", children: [
|
|
9401
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
9293
9402
|
"button",
|
|
9294
9403
|
{
|
|
9295
9404
|
type: "button",
|
|
@@ -9299,7 +9408,7 @@ function Leaderboard({
|
|
|
9299
9408
|
children: ui.leaderboardThisWeek
|
|
9300
9409
|
}
|
|
9301
9410
|
),
|
|
9302
|
-
/* @__PURE__ */ (0,
|
|
9411
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
9303
9412
|
"button",
|
|
9304
9413
|
{
|
|
9305
9414
|
type: "button",
|
|
@@ -9310,7 +9419,7 @@ function Leaderboard({
|
|
|
9310
9419
|
}
|
|
9311
9420
|
)
|
|
9312
9421
|
] }),
|
|
9313
|
-
isEmpty ? /* @__PURE__ */ (0,
|
|
9422
|
+
isEmpty ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
9314
9423
|
LeaderboardEmpty,
|
|
9315
9424
|
{
|
|
9316
9425
|
segment,
|
|
@@ -9319,15 +9428,15 @@ function Leaderboard({
|
|
|
9319
9428
|
onPlay,
|
|
9320
9429
|
ui
|
|
9321
9430
|
}
|
|
9322
|
-
) : /* @__PURE__ */ (0,
|
|
9323
|
-
/* @__PURE__ */ (0,
|
|
9431
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment, { children: [
|
|
9432
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
9324
9433
|
LeaderboardWeeklyRow,
|
|
9325
9434
|
{
|
|
9326
9435
|
row,
|
|
9327
9436
|
isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
|
|
9328
9437
|
},
|
|
9329
9438
|
row.operatorUserId
|
|
9330
|
-
)) : data.allTimeTop.map((row) => /* @__PURE__ */ (0,
|
|
9439
|
+
)) : data.allTimeTop.map((row) => /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
|
|
9331
9440
|
LeaderboardAllTimeRow,
|
|
9332
9441
|
{
|
|
9333
9442
|
row,
|
|
@@ -9335,18 +9444,18 @@ function Leaderboard({
|
|
|
9335
9444
|
},
|
|
9336
9445
|
row.operatorUserId
|
|
9337
9446
|
)) }),
|
|
9338
|
-
/* @__PURE__ */ (0,
|
|
9339
|
-
myRow != null && (offBoard ? /* @__PURE__ */ (0,
|
|
9340
|
-
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0,
|
|
9341
|
-
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0,
|
|
9447
|
+
/* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
|
|
9448
|
+
myRow != null && (offBoard ? /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ (0, import_jsx_runtime93.jsxs)("div", { className: "ss-w-lb2-rows", children: [
|
|
9449
|
+
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
|
|
9450
|
+
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
|
|
9342
9451
|
] })),
|
|
9343
|
-
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0,
|
|
9452
|
+
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ (0, import_jsx_runtime93.jsx)("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
|
|
9344
9453
|
] })
|
|
9345
9454
|
] });
|
|
9346
9455
|
}
|
|
9347
9456
|
|
|
9348
9457
|
// src/components/LeaderboardPanel.tsx
|
|
9349
|
-
var
|
|
9458
|
+
var import_jsx_runtime94 = require("react/jsx-runtime");
|
|
9350
9459
|
var EMPTY_PAYLOAD = {
|
|
9351
9460
|
week: "",
|
|
9352
9461
|
weeklyTop: [],
|
|
@@ -9357,19 +9466,19 @@ var EMPTY_PAYLOAD = {
|
|
|
9357
9466
|
lastWeek: null
|
|
9358
9467
|
};
|
|
9359
9468
|
function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
|
|
9360
|
-
if (!loggedIn) return /* @__PURE__ */ (0,
|
|
9361
|
-
if (data === null && loading) return /* @__PURE__ */ (0,
|
|
9362
|
-
return /* @__PURE__ */ (0,
|
|
9469
|
+
if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(GamesLoginWall, { ui });
|
|
9470
|
+
if (data === null && loading) return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "ss-w-mon-list" });
|
|
9471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime94.jsx)("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ (0, import_jsx_runtime94.jsx)(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
|
|
9363
9472
|
}
|
|
9364
9473
|
|
|
9365
9474
|
// src/components/PresetSpeedDial.tsx
|
|
9366
9475
|
var import_react57 = require("react");
|
|
9367
|
-
var
|
|
9476
|
+
var import_jsx_runtime95 = require("react/jsx-runtime");
|
|
9368
9477
|
function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
|
|
9369
9478
|
const pillsId = (0, import_react57.useId)();
|
|
9370
9479
|
const tabIndex = expanded ? 0 : -1;
|
|
9371
|
-
return /* @__PURE__ */ (0,
|
|
9372
|
-
/* @__PURE__ */ (0,
|
|
9480
|
+
return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
|
|
9481
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
|
|
9373
9482
|
"button",
|
|
9374
9483
|
{
|
|
9375
9484
|
ref: buttonRef,
|
|
@@ -9380,20 +9489,20 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
|
|
|
9380
9489
|
"aria-label": strings.dialName,
|
|
9381
9490
|
onClick: onToggle,
|
|
9382
9491
|
children: [
|
|
9383
|
-
/* @__PURE__ */ (0,
|
|
9384
|
-
/* @__PURE__ */ (0,
|
|
9385
|
-
showDot && !expanded ? /* @__PURE__ */ (0,
|
|
9492
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SlidersIcon, {}) }),
|
|
9493
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ (0, import_jsx_runtime95.jsx)(CloseIcon, {}) }),
|
|
9494
|
+
showDot && !expanded ? /* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
|
|
9386
9495
|
]
|
|
9387
9496
|
}
|
|
9388
9497
|
),
|
|
9389
|
-
/* @__PURE__ */ (0,
|
|
9390
|
-
/* @__PURE__ */ (0,
|
|
9391
|
-
/* @__PURE__ */ (0,
|
|
9392
|
-
/* @__PURE__ */ (0,
|
|
9498
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
|
|
9499
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
|
|
9500
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)(SlidersIcon, {}),
|
|
9501
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
|
|
9393
9502
|
] }),
|
|
9394
|
-
/* @__PURE__ */ (0,
|
|
9395
|
-
/* @__PURE__ */ (0,
|
|
9396
|
-
/* @__PURE__ */ (0,
|
|
9503
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsxs)("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
|
|
9504
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)(ComboIcon, {}),
|
|
9505
|
+
/* @__PURE__ */ (0, import_jsx_runtime95.jsx)("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
|
|
9397
9506
|
] })
|
|
9398
9507
|
] })
|
|
9399
9508
|
] });
|
|
@@ -9401,7 +9510,7 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
|
|
|
9401
9510
|
|
|
9402
9511
|
// src/components/PresetTools.tsx
|
|
9403
9512
|
var import_react58 = require("react");
|
|
9404
|
-
var
|
|
9513
|
+
var import_jsx_runtime96 = require("react/jsx-runtime");
|
|
9405
9514
|
var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
9406
9515
|
function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
9407
9516
|
const dialogRef = (0, import_react58.useRef)(null);
|
|
@@ -9439,79 +9548,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
|
9439
9548
|
first.focus();
|
|
9440
9549
|
}
|
|
9441
9550
|
};
|
|
9442
|
-
return /* @__PURE__ */ (0,
|
|
9443
|
-
/* @__PURE__ */ (0,
|
|
9444
|
-
/* @__PURE__ */ (0,
|
|
9445
|
-
/* @__PURE__ */ (0,
|
|
9551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
|
|
9552
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-head", children: [
|
|
9553
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
|
|
9554
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(CloseIcon, {}) })
|
|
9446
9555
|
] }),
|
|
9447
|
-
/* @__PURE__ */ (0,
|
|
9448
|
-
footer ? /* @__PURE__ */ (0,
|
|
9556
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-body", children }),
|
|
9557
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-foot", children: footer }) : null
|
|
9449
9558
|
] }) });
|
|
9450
9559
|
}
|
|
9451
9560
|
function fillTemplate(template, slots) {
|
|
9452
9561
|
return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
|
|
9453
9562
|
const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
|
|
9454
|
-
return /* @__PURE__ */ (0,
|
|
9563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(import_react58.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
|
|
9455
9564
|
});
|
|
9456
9565
|
}
|
|
9457
9566
|
function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
|
|
9458
9567
|
const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
|
|
9459
|
-
return /* @__PURE__ */ (0,
|
|
9460
|
-
/* @__PURE__ */ (0,
|
|
9461
|
-
/* @__PURE__ */ (0,
|
|
9568
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-num", children: [
|
|
9569
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
|
|
9570
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
|
|
9462
9571
|
const c = choices2[Number(e.target.value)];
|
|
9463
9572
|
if (c) onChoose(c.value);
|
|
9464
|
-
}, children: choices2.map((c, i) => /* @__PURE__ */ (0,
|
|
9573
|
+
}, children: choices2.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
|
|
9465
9574
|
] });
|
|
9466
9575
|
}
|
|
9467
9576
|
function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
|
|
9468
9577
|
const sizeText = sizeLabels[currentIdx] ?? "";
|
|
9469
|
-
return /* @__PURE__ */ (0,
|
|
9470
|
-
/* @__PURE__ */ (0,
|
|
9471
|
-
/* @__PURE__ */ (0,
|
|
9578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-num", children: [
|
|
9579
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
|
|
9580
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("option", { value: String(i), children: opt }, i)) })
|
|
9472
9581
|
] });
|
|
9473
9582
|
}
|
|
9474
9583
|
function SendButton({ label, display, disabled, onClick }) {
|
|
9475
|
-
return /* @__PURE__ */ (0,
|
|
9584
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
|
|
9476
9585
|
}
|
|
9477
9586
|
function PickList({ picks, formatKickoff }) {
|
|
9478
|
-
return /* @__PURE__ */ (0,
|
|
9479
|
-
/* @__PURE__ */ (0,
|
|
9587
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("li", { className: "ss-w-tool-pick", children: [
|
|
9588
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-pick-match", children: [
|
|
9480
9589
|
p.homeTeamName,
|
|
9481
9590
|
" \u2013 ",
|
|
9482
9591
|
p.awayTeamName
|
|
9483
9592
|
] }),
|
|
9484
|
-
/* @__PURE__ */ (0,
|
|
9593
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("span", { className: "ss-w-tool-pick-sel", children: [
|
|
9485
9594
|
p.marketLabel,
|
|
9486
9595
|
": ",
|
|
9487
9596
|
p.selectionLabel,
|
|
9488
9597
|
p.line ? ` ${p.line}` : ""
|
|
9489
9598
|
] }),
|
|
9490
|
-
/* @__PURE__ */ (0,
|
|
9491
|
-
/* @__PURE__ */ (0,
|
|
9599
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
|
|
9600
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
|
|
9492
9601
|
] }, p.matchOddsId)) });
|
|
9493
9602
|
}
|
|
9494
9603
|
function ComboPreview({ cell, formatKickoff }) {
|
|
9495
|
-
return /* @__PURE__ */ (0,
|
|
9496
|
-
/* @__PURE__ */ (0,
|
|
9497
|
-
/* @__PURE__ */ (0,
|
|
9604
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment, { children: [
|
|
9605
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(PickList, { picks: cell.combo.legs, formatKickoff }),
|
|
9606
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
|
|
9498
9607
|
] });
|
|
9499
9608
|
}
|
|
9500
9609
|
function Unavailable({ text }) {
|
|
9501
|
-
return /* @__PURE__ */ (0,
|
|
9610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-tool-unavailable", children: text });
|
|
9502
9611
|
}
|
|
9503
9612
|
function AskRow({ icon, ask, ready, send }) {
|
|
9504
|
-
return /* @__PURE__ */ (0,
|
|
9505
|
-
/* @__PURE__ */ (0,
|
|
9506
|
-
/* @__PURE__ */ (0,
|
|
9507
|
-
/* @__PURE__ */ (0,
|
|
9508
|
-
ready ? /* @__PURE__ */ (0,
|
|
9613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
|
|
9614
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
|
|
9615
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-main", children: [
|
|
9616
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-tool-ask", children: ask }),
|
|
9617
|
+
ready ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-ready", children: ready }) : null
|
|
9509
9618
|
] }),
|
|
9510
9619
|
send
|
|
9511
9620
|
] });
|
|
9512
9621
|
}
|
|
9513
9622
|
function RoundSend({ label, display, disabled, onClick }) {
|
|
9514
|
-
return /* @__PURE__ */ (0,
|
|
9623
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(SendIcon, {}) });
|
|
9515
9624
|
}
|
|
9516
9625
|
var BIG_COMBO = { total: 50, legs: 6 };
|
|
9517
9626
|
function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
@@ -9577,77 +9686,77 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
|
9577
9686
|
const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
|
|
9578
9687
|
const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
|
|
9579
9688
|
const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
|
|
9580
|
-
return /* @__PURE__ */ (0,
|
|
9581
|
-
/* @__PURE__ */ (0,
|
|
9689
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
|
|
9690
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
9582
9691
|
AskRow,
|
|
9583
9692
|
{
|
|
9584
9693
|
icon: "\u{1F3AF}",
|
|
9585
9694
|
ask: fillTemplate(strings.maxPriceRow, {
|
|
9586
9695
|
count: String(count),
|
|
9587
|
-
price: /* @__PURE__ */ (0,
|
|
9696
|
+
price: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
|
|
9588
9697
|
}),
|
|
9589
9698
|
ready: singlesReady(maxCell),
|
|
9590
|
-
send: /* @__PURE__ */ (0,
|
|
9699
|
+
send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
|
|
9591
9700
|
if (maxCell) onSend(maxPriceAsk(maxCell, strings));
|
|
9592
9701
|
} })
|
|
9593
9702
|
}
|
|
9594
9703
|
),
|
|
9595
|
-
/* @__PURE__ */ (0,
|
|
9704
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
9596
9705
|
AskRow,
|
|
9597
9706
|
{
|
|
9598
9707
|
icon: "\u{1F4C8}",
|
|
9599
9708
|
ask: fillTemplate(strings.minPriceRow, {
|
|
9600
9709
|
count: String(count),
|
|
9601
|
-
price: /* @__PURE__ */ (0,
|
|
9710
|
+
price: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
|
|
9602
9711
|
}),
|
|
9603
9712
|
ready: singlesReady(minCell),
|
|
9604
|
-
send: /* @__PURE__ */ (0,
|
|
9713
|
+
send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
|
|
9605
9714
|
if (minCell) onSend(minPriceAsk(minCell, strings));
|
|
9606
9715
|
} })
|
|
9607
9716
|
}
|
|
9608
9717
|
),
|
|
9609
|
-
/* @__PURE__ */ (0,
|
|
9718
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
9610
9719
|
AskRow,
|
|
9611
9720
|
{
|
|
9612
9721
|
icon: "\u2728",
|
|
9613
9722
|
ask: fillTemplate(strings.comboRow, {
|
|
9614
|
-
legs: /* @__PURE__ */ (0,
|
|
9615
|
-
total: /* @__PURE__ */ (0,
|
|
9723
|
+
legs: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
|
|
9724
|
+
total: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
|
|
9616
9725
|
}),
|
|
9617
9726
|
ready: comboReady(comboCell),
|
|
9618
|
-
send: /* @__PURE__ */ (0,
|
|
9727
|
+
send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
|
|
9619
9728
|
if (comboCell) onSend(comboAsk(comboCell, strings));
|
|
9620
9729
|
} })
|
|
9621
9730
|
}
|
|
9622
9731
|
),
|
|
9623
|
-
/* @__PURE__ */ (0,
|
|
9732
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
9624
9733
|
AskRow,
|
|
9625
9734
|
{
|
|
9626
9735
|
icon: "\u{1F3C6}",
|
|
9627
9736
|
ask: fillTemplate(strings.bigComboRow, {
|
|
9628
|
-
legs: /* @__PURE__ */ (0,
|
|
9629
|
-
total: /* @__PURE__ */ (0,
|
|
9737
|
+
legs: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
|
|
9738
|
+
total: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
|
|
9630
9739
|
}),
|
|
9631
9740
|
ready: comboReady(bigCell),
|
|
9632
|
-
send: /* @__PURE__ */ (0,
|
|
9741
|
+
send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
|
|
9633
9742
|
if (bigCell) onSend(comboAsk(bigCell, strings));
|
|
9634
9743
|
} })
|
|
9635
9744
|
}
|
|
9636
9745
|
),
|
|
9637
|
-
markets.length > 0 && /* @__PURE__ */ (0,
|
|
9746
|
+
markets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(
|
|
9638
9747
|
AskRow,
|
|
9639
9748
|
{
|
|
9640
9749
|
icon: "\u26BD",
|
|
9641
9750
|
ask: fillTemplate(strings.marketRow, {
|
|
9642
|
-
market: /* @__PURE__ */ (0,
|
|
9751
|
+
market: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
|
|
9643
9752
|
}),
|
|
9644
9753
|
ready: marketCell ? strings.readyCount(marketCell.count) : null,
|
|
9645
|
-
send: /* @__PURE__ */ (0,
|
|
9754
|
+
send: /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
|
|
9646
9755
|
if (marketCell) onSend(marketAsk(marketCell, strings));
|
|
9647
9756
|
} })
|
|
9648
9757
|
}
|
|
9649
9758
|
),
|
|
9650
|
-
/* @__PURE__ */ (0,
|
|
9759
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
9651
9760
|
] });
|
|
9652
9761
|
}
|
|
9653
9762
|
function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
|
|
@@ -9671,24 +9780,24 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
|
|
|
9671
9780
|
const d = strings.comboDisplay(nextLegs, nextTotal);
|
|
9672
9781
|
setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
|
|
9673
9782
|
};
|
|
9674
|
-
const footer = /* @__PURE__ */ (0,
|
|
9783
|
+
const footer = /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
|
|
9675
9784
|
if (cell) onSend(comboAsk(cell, strings));
|
|
9676
9785
|
} });
|
|
9677
|
-
return /* @__PURE__ */ (0,
|
|
9678
|
-
/* @__PURE__ */ (0,
|
|
9679
|
-
/* @__PURE__ */ (0,
|
|
9680
|
-
/* @__PURE__ */ (0,
|
|
9786
|
+
return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
|
|
9787
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
|
|
9788
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
|
|
9789
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
|
|
9681
9790
|
] }),
|
|
9682
|
-
/* @__PURE__ */ (0,
|
|
9683
|
-
/* @__PURE__ */ (0,
|
|
9684
|
-
/* @__PURE__ */ (0,
|
|
9685
|
-
/* @__PURE__ */ (0,
|
|
9686
|
-
/* @__PURE__ */ (0,
|
|
9687
|
-
/* @__PURE__ */ (0,
|
|
9791
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
|
|
9792
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
|
|
9793
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsxs)("div", { className: "ss-w-tool-stepper", children: [
|
|
9794
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
|
|
9795
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("span", { className: "ss-w-tool-count", children: legs }),
|
|
9796
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
|
|
9688
9797
|
] })
|
|
9689
9798
|
] }),
|
|
9690
|
-
cell ? /* @__PURE__ */ (0,
|
|
9691
|
-
/* @__PURE__ */ (0,
|
|
9799
|
+
cell ? /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ (0, import_jsx_runtime96.jsx)(Unavailable, { text: strings.unavailable }),
|
|
9800
|
+
/* @__PURE__ */ (0, import_jsx_runtime96.jsx)("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
9692
9801
|
] });
|
|
9693
9802
|
}
|
|
9694
9803
|
|
|
@@ -9790,7 +9899,7 @@ function markToolSeen() {
|
|
|
9790
9899
|
}
|
|
9791
9900
|
|
|
9792
9901
|
// src/components/ChatPanel.tsx
|
|
9793
|
-
var
|
|
9902
|
+
var import_jsx_runtime97 = require("react/jsx-runtime");
|
|
9794
9903
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
9795
9904
|
function useIsModal() {
|
|
9796
9905
|
const [modal, setModal] = (0, import_react60.useState)(false);
|
|
@@ -9893,8 +10002,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9893
10002
|
focusAfterCloseRef.current = "composer";
|
|
9894
10003
|
setTool(null);
|
|
9895
10004
|
}, [tool, onChatTab, presetGrid]);
|
|
9896
|
-
return /* @__PURE__ */ (0,
|
|
9897
|
-
/* @__PURE__ */ (0,
|
|
10005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
10006
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9898
10007
|
ChatHeader,
|
|
9899
10008
|
{
|
|
9900
10009
|
onClose: close,
|
|
@@ -9907,7 +10016,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9907
10016
|
moreOptionsLabel: ui.moreOptions
|
|
9908
10017
|
}
|
|
9909
10018
|
),
|
|
9910
|
-
monitor && /* @__PURE__ */ (0,
|
|
10019
|
+
monitor && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9911
10020
|
TabBar,
|
|
9912
10021
|
{
|
|
9913
10022
|
monitor,
|
|
@@ -9919,9 +10028,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9919
10028
|
gamesEnabled: gamesResult?.enabled ?? false
|
|
9920
10029
|
}
|
|
9921
10030
|
),
|
|
9922
|
-
/* @__PURE__ */ (0,
|
|
9923
|
-
/* @__PURE__ */ (0,
|
|
9924
|
-
showDial ? /* @__PURE__ */ (0,
|
|
10031
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsxs)("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
|
|
10032
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
|
|
10033
|
+
showDial ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9925
10034
|
PresetSpeedDial,
|
|
9926
10035
|
{
|
|
9927
10036
|
expanded: dial.expanded,
|
|
@@ -9933,12 +10042,12 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9933
10042
|
buttonRef: dialButtonRef
|
|
9934
10043
|
}
|
|
9935
10044
|
) : null,
|
|
9936
|
-
tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ (0,
|
|
10045
|
+
tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
|
|
9937
10046
|
] }),
|
|
9938
|
-
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0,
|
|
9939
|
-
monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0,
|
|
9940
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0,
|
|
9941
|
-
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0,
|
|
10047
|
+
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(TodayPanel, { discovery, ui, monitor }),
|
|
10048
|
+
monitor && monitor.activeTab === "following" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
|
|
10049
|
+
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(OddsPanel, { monitor, ui, slip }),
|
|
10050
|
+
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9942
10051
|
GamesPanel,
|
|
9943
10052
|
{
|
|
9944
10053
|
loggedIn: !!loggedIn,
|
|
@@ -9952,7 +10061,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9952
10061
|
}
|
|
9953
10062
|
}
|
|
9954
10063
|
),
|
|
9955
|
-
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0,
|
|
10064
|
+
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9956
10065
|
LeaderboardPanel,
|
|
9957
10066
|
{
|
|
9958
10067
|
loggedIn: !!loggedIn,
|
|
@@ -9962,9 +10071,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9962
10071
|
ui
|
|
9963
10072
|
}
|
|
9964
10073
|
),
|
|
9965
|
-
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0,
|
|
9966
|
-
/* @__PURE__ */ (0,
|
|
9967
|
-
paused ? null : /* @__PURE__ */ (0,
|
|
10074
|
+
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(import_jsx_runtime97.Fragment, { children: [
|
|
10075
|
+
/* @__PURE__ */ (0, import_jsx_runtime97.jsx)("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
|
|
10076
|
+
paused ? null : /* @__PURE__ */ (0, import_jsx_runtime97.jsx)(
|
|
9968
10077
|
ChatInput,
|
|
9969
10078
|
{
|
|
9970
10079
|
ref: inputRef,
|
|
@@ -9983,9 +10092,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
9983
10092
|
}
|
|
9984
10093
|
|
|
9985
10094
|
// src/components/HostEventsProvider.tsx
|
|
9986
|
-
var
|
|
10095
|
+
var import_jsx_runtime98 = require("react/jsx-runtime");
|
|
9987
10096
|
function HostEventsProvider({ value, children }) {
|
|
9988
|
-
return /* @__PURE__ */ (0,
|
|
10097
|
+
return /* @__PURE__ */ (0, import_jsx_runtime98.jsx)(SlipStateContext.Provider, { value: value.slipState, children });
|
|
9989
10098
|
}
|
|
9990
10099
|
|
|
9991
10100
|
// src/styles/css.generated.ts
|
|
@@ -11220,6 +11329,24 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
11220
11329
|
.ss-w-today-tile-star:disabled { cursor: default; opacity: .4; }
|
|
11221
11330
|
.ss-w-today-tile-star svg { width: 18px; height: 18px; }
|
|
11222
11331
|
|
|
11332
|
+
/* Capped row groups (variant B of u521): one league's section-header plus up to
|
|
11333
|
+
ROW_CAP_PER_LEAGUE inline fixture rows, used in place of a tile when the section row budget
|
|
11334
|
+
allows it. Mirrors LeagueTile's button-body + sibling-star-button shape. */
|
|
11335
|
+
.ss-w-today-rowsection { display: flex; flex-direction: column; gap: 12px; }
|
|
11336
|
+
.ss-w-today-rowgroup { display: flex; flex-direction: column; }
|
|
11337
|
+
.ss-w-today-rowgroup-head { display: flex; align-items: center; gap: 4px; }
|
|
11338
|
+
.ss-w-today-rowgroup-head-body { flex: 1; min-width: 0; display: flex; align-items: center; gap: 8px; padding: 2px; background: none; border: none; font: inherit; color: var(--ss-w-ink); cursor: pointer; text-align: left; }
|
|
11339
|
+
.ss-w-today-rowgroup-head-body:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
|
|
11340
|
+
.ss-w-today-rowgroup-name { font-size: 11px; font-weight: 800; letter-spacing: .02em; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
11341
|
+
.ss-w-today-rowgroup-star { flex: none; display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; background: none; border: none; border-radius: 8px; color: var(--ss-w-faint); cursor: pointer; }
|
|
11342
|
+
.ss-w-today-rowgroup-star:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
|
|
11343
|
+
.ss-w-today-rowgroup-star[aria-pressed="true"] { color: var(--ss-w-accent); }
|
|
11344
|
+
.ss-w-today-rowgroup-star:disabled { cursor: default; opacity: .4; }
|
|
11345
|
+
.ss-w-today-rowgroup-star svg { width: 16px; height: 16px; }
|
|
11346
|
+
.ss-w-today-rowgroup-rows { display: flex; flex-direction: column; }
|
|
11347
|
+
.ss-w-today-rowgroup-seeall { align-self: flex-start; background: none; border: none; font: inherit; font-size: 11px; font-weight: 700; color: var(--ss-w-faint); cursor: pointer; padding: 4px 2px 0; }
|
|
11348
|
+
.ss-w-today-rowgroup-seeall:focus-visible { outline: 2px solid var(--ss-w-accent); outline-offset: -2px; }
|
|
11349
|
+
|
|
11223
11350
|
/* League detail (Task 6): the drill-in view opened from a tile. Its header star is always
|
|
11224
11351
|
enabled (spec \xA73/\xA77's one exception to the tile rule), so it carries no :disabled styling. */
|
|
11225
11352
|
.ss-w-today-detail { position: relative; display: flex; flex-direction: column; gap: 10px; }
|
|
@@ -11726,7 +11853,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
11726
11853
|
`;
|
|
11727
11854
|
|
|
11728
11855
|
// src/StatsWidget.tsx
|
|
11729
|
-
var
|
|
11856
|
+
var import_jsx_runtime99 = require("react/jsx-runtime");
|
|
11730
11857
|
function buildClient(props) {
|
|
11731
11858
|
try {
|
|
11732
11859
|
if ("client" in props && props.client) {
|
|
@@ -11945,7 +12072,7 @@ function StatsWidget(props) {
|
|
|
11945
12072
|
}, [built, ui.injectStyles]);
|
|
11946
12073
|
if (!built) return null;
|
|
11947
12074
|
const attrs = themeAttrs(ui);
|
|
11948
|
-
return /* @__PURE__ */ (0,
|
|
12075
|
+
return /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ (0, import_jsx_runtime99.jsx)("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
11949
12076
|
ChatPanel,
|
|
11950
12077
|
{
|
|
11951
12078
|
controller,
|
|
@@ -11960,7 +12087,7 @@ function StatsWidget(props) {
|
|
|
11960
12087
|
conversation: built?.conversation ?? null,
|
|
11961
12088
|
presetGrid
|
|
11962
12089
|
}
|
|
11963
|
-
) : /* @__PURE__ */ (0,
|
|
12090
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime99.jsx)(
|
|
11964
12091
|
ChatFab,
|
|
11965
12092
|
{
|
|
11966
12093
|
label: ui.launcherLabel,
|