@sensiblestats/widget-react 0.86.1 → 0.87.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 +11 -0
- package/dist/index.cjs +1345 -1206
- 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 +1249 -1110
- package/dist/index.js.map +1 -1
- package/dist/styles.css +35 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/StatsWidget.tsx
|
|
2
|
-
import { useCallback as useCallback23, useEffect as useEffect34, useMemo as useMemo6, useRef as useRef31, useState as
|
|
2
|
+
import { useCallback as useCallback23, useEffect as useEffect34, useMemo as useMemo6, useRef as useRef31, useState as useState56 } from "react";
|
|
3
3
|
import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
|
|
4
4
|
|
|
5
5
|
// src/kickoff.ts
|
|
@@ -111,6 +111,7 @@ var STRINGS = {
|
|
|
111
111
|
inSlipLabel: "In slip",
|
|
112
112
|
oddsUnavailable: "Odds unavailable right now",
|
|
113
113
|
momentumLabel: "Momentum",
|
|
114
|
+
formAndH2HLabel: "Form & Head-to-head",
|
|
114
115
|
liveFactLabel: "Live fact",
|
|
115
116
|
liveFactAsk: "Ask about this",
|
|
116
117
|
liveFactEarlier: (n) => `Earlier facts (${n})`,
|
|
@@ -578,6 +579,7 @@ var STRINGS = {
|
|
|
578
579
|
inSlipLabel: "Kuponda",
|
|
579
580
|
oddsUnavailable: "Oranlar \u015Fu anda kullan\u0131lam\u0131yor",
|
|
580
581
|
momentumLabel: "Momentum",
|
|
582
|
+
formAndH2HLabel: "Form ve Kar\u015F\u0131l\u0131kl\u0131 Ma\xE7lar",
|
|
581
583
|
liveFactLabel: "Canl\u0131 bilgi",
|
|
582
584
|
liveFactAsk: "Bunu sor",
|
|
583
585
|
liveFactEarlier: (n) => `\xD6nceki bilgiler (${n})`,
|
|
@@ -1168,6 +1170,7 @@ function normalizeUi(cfg) {
|
|
|
1168
1170
|
inSlipLabel: strings.inSlipLabel,
|
|
1169
1171
|
oddsUnavailable: strings.oddsUnavailable,
|
|
1170
1172
|
momentumLabel: strings.momentumLabel,
|
|
1173
|
+
formAndH2HLabel: strings.formAndH2HLabel,
|
|
1171
1174
|
liveFactLabel: strings.liveFactLabel,
|
|
1172
1175
|
liveFactAsk: strings.liveFactAsk,
|
|
1173
1176
|
liveFactEarlier: strings.liveFactEarlier,
|
|
@@ -3935,7 +3938,7 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
|
|
|
3935
3938
|
}
|
|
3936
3939
|
|
|
3937
3940
|
// src/components/ChatPanel.tsx
|
|
3938
|
-
import { useCallback as useCallback22, useEffect as useEffect33, useLayoutEffect, useMemo as useMemo5, useRef as useRef30, useState as
|
|
3941
|
+
import { useCallback as useCallback22, useEffect as useEffect33, useLayoutEffect, useMemo as useMemo5, useRef as useRef30, useState as useState55 } from "react";
|
|
3939
3942
|
|
|
3940
3943
|
// src/components/ChatHeader.tsx
|
|
3941
3944
|
import { useEffect as useEffect16, useRef as useRef17, useState as useState15 } from "react";
|
|
@@ -6267,8 +6270,100 @@ function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
|
|
|
6267
6270
|
] });
|
|
6268
6271
|
}
|
|
6269
6272
|
|
|
6273
|
+
// src/components/MonitorFormH2H.tsx
|
|
6274
|
+
import { useState as useState32 } from "react";
|
|
6275
|
+
import { Fragment as Fragment8, jsx as jsx53, jsxs as jsxs48 } from "react/jsx-runtime";
|
|
6276
|
+
function resultClass2(result) {
|
|
6277
|
+
if (result === "W") return "ss-w-h2h-result--win";
|
|
6278
|
+
if (result === "L") return "ss-w-h2h-result--loss";
|
|
6279
|
+
return "ss-w-h2h-result--draw";
|
|
6280
|
+
}
|
|
6281
|
+
function resultLabel(result, ui) {
|
|
6282
|
+
if (result === "W") return ui.standingsColWon;
|
|
6283
|
+
if (result === "L") return ui.standingsColLost;
|
|
6284
|
+
return ui.standingsColDrawn;
|
|
6285
|
+
}
|
|
6286
|
+
function FormDots({ form, ui }) {
|
|
6287
|
+
return /* @__PURE__ */ jsx53("div", { className: "ss-w-h2h-dots", children: form.map((m, i) => /* @__PURE__ */ jsx53("span", { className: `ss-w-h2h-result ${resultClass2(m.result)}`, children: resultLabel(m.result, ui) }, i)) });
|
|
6288
|
+
}
|
|
6289
|
+
function MonitorFormH2H({ formAndH2H, homeTeamName, awayTeamName, ui }) {
|
|
6290
|
+
const [expanded, setExpanded] = useState32(false);
|
|
6291
|
+
const { homeForm, awayForm, h2h } = formAndH2H;
|
|
6292
|
+
if (homeForm.length === 0 && awayForm.length === 0 && !h2h) {
|
|
6293
|
+
return /* @__PURE__ */ jsx53(Fragment8, {});
|
|
6294
|
+
}
|
|
6295
|
+
const total = h2h ? h2h.wins + h2h.draws + h2h.losses : 0;
|
|
6296
|
+
const winsPct = total > 0 && h2h ? h2h.wins / total * 100 : 0;
|
|
6297
|
+
const drawsPct = total > 0 && h2h ? h2h.draws / total * 100 : 0;
|
|
6298
|
+
const lossesPct = total > 0 && h2h ? h2h.losses / total * 100 : 0;
|
|
6299
|
+
return /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h", children: [
|
|
6300
|
+
/* @__PURE__ */ jsxs48("button", { type: "button", className: "ss-w-h2h-head", "aria-expanded": expanded, onClick: () => setExpanded((v) => !v), children: [
|
|
6301
|
+
/* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-head-l", children: [
|
|
6302
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-dot", "aria-hidden": "true" }),
|
|
6303
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-title", children: ui.formAndH2HLabel })
|
|
6304
|
+
] }),
|
|
6305
|
+
/* @__PURE__ */ jsx53(
|
|
6306
|
+
"svg",
|
|
6307
|
+
{
|
|
6308
|
+
className: expanded ? "ss-w-h2h-chevron ss-w-h2h-chevron--open" : "ss-w-h2h-chevron",
|
|
6309
|
+
width: "16",
|
|
6310
|
+
height: "16",
|
|
6311
|
+
viewBox: "0 0 24 24",
|
|
6312
|
+
fill: "none",
|
|
6313
|
+
stroke: "currentColor",
|
|
6314
|
+
strokeWidth: "2",
|
|
6315
|
+
strokeLinecap: "round",
|
|
6316
|
+
strokeLinejoin: "round",
|
|
6317
|
+
"aria-hidden": "true",
|
|
6318
|
+
children: /* @__PURE__ */ jsx53("path", { d: "M6 9l6 6 6-6" })
|
|
6319
|
+
}
|
|
6320
|
+
)
|
|
6321
|
+
] }),
|
|
6322
|
+
expanded && /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-body", children: [
|
|
6323
|
+
/* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-forms", children: [
|
|
6324
|
+
/* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-form-col", children: [
|
|
6325
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-form-team", children: homeTeamName }),
|
|
6326
|
+
/* @__PURE__ */ jsx53(FormDots, { form: homeForm, ui })
|
|
6327
|
+
] }),
|
|
6328
|
+
/* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-form-col ss-w-h2h-form-col--away", children: [
|
|
6329
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-form-team", children: awayTeamName }),
|
|
6330
|
+
/* @__PURE__ */ jsx53(FormDots, { form: awayForm, ui })
|
|
6331
|
+
] })
|
|
6332
|
+
] }),
|
|
6333
|
+
h2h && /* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-record", children: [
|
|
6334
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-meta", children: h2h.label }),
|
|
6335
|
+
/* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-bar", children: [
|
|
6336
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--win", style: { width: `${winsPct}%` } }),
|
|
6337
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--draw", style: { width: `${drawsPct}%` } }),
|
|
6338
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-bar-seg ss-w-h2h-bar-seg--loss", style: { width: `${lossesPct}%` } })
|
|
6339
|
+
] }),
|
|
6340
|
+
/* @__PURE__ */ jsxs48("div", { className: "ss-w-h2h-legend", children: [
|
|
6341
|
+
/* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
|
|
6342
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--win", "aria-hidden": "true" }),
|
|
6343
|
+
h2h.wins,
|
|
6344
|
+
" ",
|
|
6345
|
+
h2h.homeWinsLabel
|
|
6346
|
+
] }),
|
|
6347
|
+
/* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
|
|
6348
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--draw", "aria-hidden": "true" }),
|
|
6349
|
+
h2h.draws,
|
|
6350
|
+
" ",
|
|
6351
|
+
h2h.drawsLabel
|
|
6352
|
+
] }),
|
|
6353
|
+
/* @__PURE__ */ jsxs48("span", { className: "ss-w-h2h-legend-item", children: [
|
|
6354
|
+
/* @__PURE__ */ jsx53("span", { className: "ss-w-h2h-legend-dot ss-w-h2h-legend-dot--loss", "aria-hidden": "true" }),
|
|
6355
|
+
h2h.losses,
|
|
6356
|
+
" ",
|
|
6357
|
+
h2h.awayWinsLabel
|
|
6358
|
+
] })
|
|
6359
|
+
] })
|
|
6360
|
+
] })
|
|
6361
|
+
] })
|
|
6362
|
+
] });
|
|
6363
|
+
}
|
|
6364
|
+
|
|
6270
6365
|
// src/components/MonitorMatchCard.tsx
|
|
6271
|
-
import { jsx as
|
|
6366
|
+
import { jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
6272
6367
|
function isPromoted(row, promotedPins) {
|
|
6273
6368
|
const chip = row.market;
|
|
6274
6369
|
if (!chip) return false;
|
|
@@ -6303,68 +6398,77 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip, onAsk }) {
|
|
|
6303
6398
|
const otherRows = match.statRows.filter((row) => !isPromoted(row, promotedPins));
|
|
6304
6399
|
const orderedRows = [...promotedRows, ...otherRows];
|
|
6305
6400
|
const kickoff = match.phase === "preMatch" && match.kickoffUtc ? ui.bettingKickoff(match.kickoffUtc) : void 0;
|
|
6306
|
-
return /* @__PURE__ */
|
|
6307
|
-
/* @__PURE__ */
|
|
6308
|
-
live && /* @__PURE__ */
|
|
6309
|
-
/* @__PURE__ */
|
|
6401
|
+
return /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon", children: [
|
|
6402
|
+
/* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-top", children: [
|
|
6403
|
+
live && /* @__PURE__ */ jsxs49("span", { className: "ss-w-fandash-live-pill", children: [
|
|
6404
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
6310
6405
|
ui.liveLabel
|
|
6311
6406
|
] }),
|
|
6312
|
-
match.phase === "fullTime" && /* @__PURE__ */
|
|
6313
|
-
kickoff && /* @__PURE__ */
|
|
6407
|
+
match.phase === "fullTime" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
|
|
6408
|
+
kickoff && /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-pill", children: [
|
|
6314
6409
|
kickoff.dayLabel,
|
|
6315
6410
|
" \xB7 ",
|
|
6316
6411
|
kickoff.time
|
|
6317
6412
|
] }),
|
|
6318
|
-
live && match.minuteLabel && /* @__PURE__ */
|
|
6319
|
-
match.competitionName && /* @__PURE__ */
|
|
6320
|
-
/* @__PURE__ */
|
|
6413
|
+
live && match.minuteLabel && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
|
|
6414
|
+
match.competitionName && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-comp", children: match.competitionName }),
|
|
6415
|
+
/* @__PURE__ */ jsx54(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
|
|
6321
6416
|
] }),
|
|
6322
|
-
/* @__PURE__ */
|
|
6323
|
-
/* @__PURE__ */
|
|
6324
|
-
/* @__PURE__ */
|
|
6325
|
-
/* @__PURE__ */
|
|
6417
|
+
/* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-main", children: [
|
|
6418
|
+
/* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-side", children: [
|
|
6419
|
+
/* @__PURE__ */ jsx54(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
|
|
6420
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-name", children: match.homeTeamName })
|
|
6326
6421
|
] }),
|
|
6327
|
-
match.phase === "preMatch" ? /* @__PURE__ */
|
|
6422
|
+
match.phase === "preMatch" ? /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-score", children: [
|
|
6328
6423
|
match.homeScore,
|
|
6329
|
-
/* @__PURE__ */
|
|
6424
|
+
/* @__PURE__ */ jsx54("i", { children: "\u2013" }),
|
|
6330
6425
|
match.awayScore
|
|
6331
6426
|
] }),
|
|
6332
|
-
/* @__PURE__ */
|
|
6333
|
-
/* @__PURE__ */
|
|
6334
|
-
/* @__PURE__ */
|
|
6427
|
+
/* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
|
|
6428
|
+
/* @__PURE__ */ jsx54(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
|
|
6429
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-name", children: match.awayTeamName })
|
|
6335
6430
|
] })
|
|
6336
6431
|
] }),
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6432
|
+
match.phase === "preMatch" && match.formAndH2H && /* @__PURE__ */ jsx54(
|
|
6433
|
+
MonitorFormH2H,
|
|
6434
|
+
{
|
|
6435
|
+
formAndH2H: match.formAndH2H,
|
|
6436
|
+
homeTeamName: match.homeTeamName,
|
|
6437
|
+
awayTeamName: match.awayTeamName,
|
|
6438
|
+
ui
|
|
6439
|
+
}
|
|
6440
|
+
),
|
|
6441
|
+
(homeScorers.length > 0 || awayScorers.length > 0) && /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-scorers", children: [
|
|
6442
|
+
/* @__PURE__ */ jsx54("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-home", children: homeScorers.map((s, i) => /* @__PURE__ */ jsx54("li", { children: s.label }, `${s.player}-${i}`)) }),
|
|
6443
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-scorers-ball", "aria-hidden": "true", children: "\u26BD" }),
|
|
6444
|
+
/* @__PURE__ */ jsx54("ul", { className: "ss-w-mon-scorers-col ss-w-mon-scorers-away", children: awayScorers.map((s, i) => /* @__PURE__ */ jsx54("li", { children: s.label }, `${s.player}-${i}`)) })
|
|
6341
6445
|
] }),
|
|
6342
|
-
live && match.facts && match.facts.length > 0 && /* @__PURE__ */
|
|
6343
|
-
/* @__PURE__ */
|
|
6446
|
+
live && match.facts && match.facts.length > 0 && /* @__PURE__ */ jsx54(LiveFactBlock, { facts: match.facts, matchId: match.matchId, ui, slip, onAsk }),
|
|
6447
|
+
/* @__PURE__ */ jsx54("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
|
|
6344
6448
|
const total = row.homeNum + row.awayNum;
|
|
6345
6449
|
const homePct = total > 0 ? row.homeNum / total * 75 : 0;
|
|
6346
6450
|
const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
|
|
6347
6451
|
const promoted = isPromoted(row, promotedPins);
|
|
6348
6452
|
const selection = chipSelection(row.market, match.matchId, slip.conversationId);
|
|
6349
|
-
return /* @__PURE__ */
|
|
6350
|
-
/* @__PURE__ */
|
|
6351
|
-
/* @__PURE__ */
|
|
6352
|
-
/* @__PURE__ */
|
|
6353
|
-
/* @__PURE__ */
|
|
6453
|
+
return /* @__PURE__ */ jsxs49("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
|
|
6454
|
+
/* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-stat-row", children: [
|
|
6455
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
|
|
6456
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-l", children: row.label }),
|
|
6457
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
|
|
6354
6458
|
] }),
|
|
6355
|
-
/* @__PURE__ */
|
|
6356
|
-
/* @__PURE__ */
|
|
6357
|
-
/* @__PURE__ */
|
|
6459
|
+
/* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-bar", children: [
|
|
6460
|
+
/* @__PURE__ */ jsx54("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
|
|
6461
|
+
/* @__PURE__ */ jsx54("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
|
|
6358
6462
|
] }),
|
|
6359
|
-
row.market && !row.market.isSuspended && /* @__PURE__ */
|
|
6360
|
-
/* @__PURE__ */
|
|
6463
|
+
row.market && !row.market.isSuspended && /* @__PURE__ */ jsxs49("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
|
|
6464
|
+
/* @__PURE__ */ jsxs49("span", { children: [
|
|
6361
6465
|
row.market.marketLabel,
|
|
6362
6466
|
" \xB7 ",
|
|
6363
6467
|
row.market.selectionLabel
|
|
6364
6468
|
] }),
|
|
6365
|
-
/* @__PURE__ */
|
|
6366
|
-
typeof row.market.price === "number" && /* @__PURE__ */
|
|
6367
|
-
/* @__PURE__ */
|
|
6469
|
+
/* @__PURE__ */ jsxs49("span", { className: "ss-w-mon-stat-mkt-right", children: [
|
|
6470
|
+
typeof row.market.price === "number" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
|
|
6471
|
+
/* @__PURE__ */ jsx54(
|
|
6368
6472
|
SlipButton,
|
|
6369
6473
|
{
|
|
6370
6474
|
selection,
|
|
@@ -6379,23 +6483,23 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip, onAsk }) {
|
|
|
6379
6483
|
] })
|
|
6380
6484
|
] }, row.label);
|
|
6381
6485
|
}) }),
|
|
6382
|
-
match.status === "stale" && /* @__PURE__ */
|
|
6383
|
-
match.momentum.length > 0 && /* @__PURE__ */
|
|
6384
|
-
/* @__PURE__ */
|
|
6385
|
-
/* @__PURE__ */
|
|
6486
|
+
match.status === "stale" && /* @__PURE__ */ jsx54("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
|
|
6487
|
+
match.momentum.length > 0 && /* @__PURE__ */ jsxs49("div", { className: "ss-w-mon-mom", children: [
|
|
6488
|
+
/* @__PURE__ */ jsx54("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
|
|
6489
|
+
/* @__PURE__ */ jsx54(MomentumWave, { points: match.momentum, clubIsHome: true })
|
|
6386
6490
|
] }),
|
|
6387
|
-
match.phase === "fullTime" && /* @__PURE__ */
|
|
6491
|
+
match.phase === "fullTime" && /* @__PURE__ */ jsx54("div", { className: "ss-w-mon-grace", children: ui.graceNote })
|
|
6388
6492
|
] });
|
|
6389
6493
|
}
|
|
6390
6494
|
|
|
6391
6495
|
// src/components/MonitorTabs.tsx
|
|
6392
|
-
import { jsx as
|
|
6496
|
+
import { jsx as jsx55, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
6393
6497
|
function OddsLiveStrip({ m, ui }) {
|
|
6394
6498
|
const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
|
|
6395
6499
|
const stale = m.status === "stale";
|
|
6396
6500
|
if (!showScore && !m.minuteLabel && !(m.isSuspended && !m.isSettled) && !m.isSettled && !stale) return null;
|
|
6397
|
-
return /* @__PURE__ */
|
|
6398
|
-
showScore && /* @__PURE__ */
|
|
6501
|
+
return /* @__PURE__ */ jsxs50("div", { className: "ss-w-mk-live", children: [
|
|
6502
|
+
showScore && /* @__PURE__ */ jsxs50("b", { className: "ss-w-mk-live-score", children: [
|
|
6399
6503
|
m.homeTeamName,
|
|
6400
6504
|
" ",
|
|
6401
6505
|
m.homeScore,
|
|
@@ -6404,19 +6508,19 @@ function OddsLiveStrip({ m, ui }) {
|
|
|
6404
6508
|
" ",
|
|
6405
6509
|
m.awayTeamName
|
|
6406
6510
|
] }),
|
|
6407
|
-
m.minuteLabel && /* @__PURE__ */
|
|
6408
|
-
m.isSuspended && !m.isSettled && /* @__PURE__ */
|
|
6409
|
-
m.isSettled && /* @__PURE__ */
|
|
6410
|
-
stale && /* @__PURE__ */
|
|
6511
|
+
m.minuteLabel && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
|
|
6512
|
+
m.isSuspended && !m.isSettled && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
|
|
6513
|
+
m.isSettled && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
|
|
6514
|
+
stale && /* @__PURE__ */ jsx55("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) })
|
|
6411
6515
|
] });
|
|
6412
6516
|
}
|
|
6413
6517
|
function MatchesPanel({ monitor, ui, slip, onAsk }) {
|
|
6414
6518
|
const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
|
|
6415
6519
|
if (matches.length === 0) {
|
|
6416
|
-
return monitor.pins.some((p) => p.kind === "match") ? /* @__PURE__ */
|
|
6520
|
+
return monitor.pins.some((p) => p.kind === "match") ? /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list" }) : /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
|
|
6417
6521
|
}
|
|
6418
|
-
return /* @__PURE__ */
|
|
6419
|
-
/* @__PURE__ */
|
|
6522
|
+
return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs50("div", { className: "ss-w-mon-item", children: [
|
|
6523
|
+
/* @__PURE__ */ jsx55(
|
|
6420
6524
|
MonitorMatchCard,
|
|
6421
6525
|
{
|
|
6422
6526
|
match: m,
|
|
@@ -6427,7 +6531,7 @@ function MatchesPanel({ monitor, ui, slip, onAsk }) {
|
|
|
6427
6531
|
onAsk
|
|
6428
6532
|
}
|
|
6429
6533
|
),
|
|
6430
|
-
/* @__PURE__ */
|
|
6534
|
+
/* @__PURE__ */ jsx55(MarketAccordion, { match: m, monitor, ui, slip })
|
|
6431
6535
|
] }, m.matchId)) });
|
|
6432
6536
|
}
|
|
6433
6537
|
function withSinceViewMovement(vm, prev) {
|
|
@@ -6443,12 +6547,12 @@ function withSinceViewMovement(vm, prev) {
|
|
|
6443
6547
|
function OddsPanel({ monitor, ui, slip }) {
|
|
6444
6548
|
const slipState = useSlipState();
|
|
6445
6549
|
const markets = (monitor.snapshot?.markets ?? []).filter((m) => monitor.pins.some((p) => p.key === m.key));
|
|
6446
|
-
if (markets.length === 0) return /* @__PURE__ */
|
|
6447
|
-
return /* @__PURE__ */
|
|
6550
|
+
if (markets.length === 0) return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
|
|
6551
|
+
return /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-list", children: markets.map((m) => {
|
|
6448
6552
|
const pin = monitor.pins.find((p) => p.key === m.key);
|
|
6449
|
-
return /* @__PURE__ */
|
|
6450
|
-
/* @__PURE__ */
|
|
6451
|
-
m.card && /* @__PURE__ */
|
|
6553
|
+
return /* @__PURE__ */ jsxs50("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
|
|
6554
|
+
/* @__PURE__ */ jsx55(OddsLiveStrip, { m, ui }),
|
|
6555
|
+
m.card && /* @__PURE__ */ jsx55(
|
|
6452
6556
|
MarketOddsCardList,
|
|
6453
6557
|
{
|
|
6454
6558
|
cards: [withSinceViewMovement(toMarketOddsVM(m.card), monitor.lastViewedPrices[m.key])],
|
|
@@ -6459,14 +6563,14 @@ function OddsPanel({ monitor, ui, slip }) {
|
|
|
6459
6563
|
inSlipIds: slipState?.added
|
|
6460
6564
|
}
|
|
6461
6565
|
),
|
|
6462
|
-
m.history && /* @__PURE__ */
|
|
6463
|
-
!m.card && !m.history && /* @__PURE__ */
|
|
6566
|
+
m.history && /* @__PURE__ */ jsx55(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
|
|
6567
|
+
!m.card && !m.history && /* @__PURE__ */ jsx55("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
|
|
6464
6568
|
] }, m.key);
|
|
6465
6569
|
}) });
|
|
6466
6570
|
}
|
|
6467
6571
|
|
|
6468
6572
|
// src/components/TodayPanel.tsx
|
|
6469
|
-
import { useEffect as useEffect26, useId as useId2, useMemo as useMemo4, useState as
|
|
6573
|
+
import { useEffect as useEffect26, useId as useId2, useMemo as useMemo4, useState as useState35 } from "react";
|
|
6470
6574
|
|
|
6471
6575
|
// src/placement.ts
|
|
6472
6576
|
function placeLeagues(visible, pinnedMatchIds) {
|
|
@@ -6529,9 +6633,9 @@ function matchingFixtures(group, query) {
|
|
|
6529
6633
|
}
|
|
6530
6634
|
|
|
6531
6635
|
// src/useStarTap.ts
|
|
6532
|
-
import { useCallback as useCallback18, useRef as useRef23, useState as
|
|
6636
|
+
import { useCallback as useCallback18, useRef as useRef23, useState as useState33 } from "react";
|
|
6533
6637
|
function useStarTap(starLeague) {
|
|
6534
|
-
const [pendingId, setPendingId] =
|
|
6638
|
+
const [pendingId, setPendingId] = useState33(null);
|
|
6535
6639
|
const pendingRef = useRef23(null);
|
|
6536
6640
|
const tap = useCallback18(async (competitionId, next) => {
|
|
6537
6641
|
if (pendingRef.current !== null) return false;
|
|
@@ -6548,25 +6652,25 @@ function useStarTap(starLeague) {
|
|
|
6548
6652
|
}
|
|
6549
6653
|
|
|
6550
6654
|
// src/components/LeagueTile.tsx
|
|
6551
|
-
import { jsx as
|
|
6655
|
+
import { jsx as jsx56, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
6552
6656
|
var STAR_PATH = "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";
|
|
6553
6657
|
function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen, starTap, ui }) {
|
|
6554
6658
|
const onStarClick = () => {
|
|
6555
6659
|
void starTap.tap(group.competitionId, !group.isStarred);
|
|
6556
6660
|
};
|
|
6557
|
-
return /* @__PURE__ */
|
|
6558
|
-
/* @__PURE__ */
|
|
6559
|
-
/* @__PURE__ */
|
|
6560
|
-
/* @__PURE__ */
|
|
6661
|
+
return /* @__PURE__ */ jsxs51("div", { className: "ss-w-today-tile", children: [
|
|
6662
|
+
/* @__PURE__ */ jsxs51("button", { type: "button", className: "ss-w-today-tile-body", onClick: onOpen, children: [
|
|
6663
|
+
/* @__PURE__ */ jsx56(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
6664
|
+
/* @__PURE__ */ jsxs51("span", { className: "ss-w-today-tile-name", children: [
|
|
6561
6665
|
group.competitionName,
|
|
6562
|
-
disambiguate && group.competitionCountry ? /* @__PURE__ */
|
|
6666
|
+
disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs51("span", { className: "ss-w-today-tile-country", children: [
|
|
6563
6667
|
" (",
|
|
6564
6668
|
group.competitionCountry,
|
|
6565
6669
|
")"
|
|
6566
6670
|
] }) : null
|
|
6567
6671
|
] })
|
|
6568
6672
|
] }),
|
|
6569
|
-
/* @__PURE__ */
|
|
6673
|
+
/* @__PURE__ */ jsx56(
|
|
6570
6674
|
"button",
|
|
6571
6675
|
{
|
|
6572
6676
|
type: "button",
|
|
@@ -6575,7 +6679,7 @@ function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen
|
|
|
6575
6679
|
"aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
|
|
6576
6680
|
disabled: !starClickable2 || starTap.pendingId !== null,
|
|
6577
6681
|
onClick: onStarClick,
|
|
6578
|
-
children: /* @__PURE__ */
|
|
6682
|
+
children: /* @__PURE__ */ jsx56("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx56(
|
|
6579
6683
|
"path",
|
|
6580
6684
|
{
|
|
6581
6685
|
d: STAR_PATH,
|
|
@@ -6592,18 +6696,18 @@ function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen
|
|
|
6592
6696
|
}
|
|
6593
6697
|
|
|
6594
6698
|
// src/components/LeagueDetail.tsx
|
|
6595
|
-
import { useEffect as useEffect25, useState as
|
|
6699
|
+
import { useEffect as useEffect25, useState as useState34 } from "react";
|
|
6596
6700
|
|
|
6597
6701
|
// src/components/FixtureRow.tsx
|
|
6598
|
-
import { jsx as
|
|
6702
|
+
import { jsx as jsx57, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
6599
6703
|
function kickoffLabel(kickoffUnix) {
|
|
6600
6704
|
const d = new Date(kickoffUnix * 1e3);
|
|
6601
6705
|
return `${`${d.getHours()}`.padStart(2, "0")}:${`${d.getMinutes()}`.padStart(2, "0")}`;
|
|
6602
6706
|
}
|
|
6603
6707
|
function Side({ name, crest, away = false }) {
|
|
6604
|
-
return /* @__PURE__ */
|
|
6605
|
-
crest ? /* @__PURE__ */
|
|
6606
|
-
/* @__PURE__ */
|
|
6708
|
+
return /* @__PURE__ */ jsxs52("span", { className: away ? "ss-w-drow-side ss-w-drow-side--away" : "ss-w-drow-side", children: [
|
|
6709
|
+
crest ? /* @__PURE__ */ jsx57("img", { className: "ss-w-drow-crest", src: crest, alt: "" }) : null,
|
|
6710
|
+
/* @__PURE__ */ jsx57("span", { className: "ss-w-drow-nm", children: name })
|
|
6607
6711
|
] });
|
|
6608
6712
|
}
|
|
6609
6713
|
function FixtureRow({ match, state, stale, ui, monitor }) {
|
|
@@ -6612,22 +6716,22 @@ function FixtureRow({ match, state, stale, ui, monitor }) {
|
|
|
6612
6716
|
const score = hasScore ? `${state.homeScore}\u2013${state.awayScore}` : void 0;
|
|
6613
6717
|
const ticked = state?.phase === "live" ? state.minuteLabel ?? null : null;
|
|
6614
6718
|
const when = state?.isHalfTime && !stale ? ui.halfTime : isLive ? ticked ?? "\u2014" : state?.phase === "live" ? "\u2014" : kickoffLabel(match.kickoffUnix);
|
|
6615
|
-
return /* @__PURE__ */
|
|
6616
|
-
/* @__PURE__ */
|
|
6617
|
-
/* @__PURE__ */
|
|
6618
|
-
/* @__PURE__ */
|
|
6619
|
-
/* @__PURE__ */
|
|
6620
|
-
/* @__PURE__ */
|
|
6719
|
+
return /* @__PURE__ */ jsxs52("div", { className: isLive || state?.isHalfTime ? "ss-w-drow ss-w-drow--live" : "ss-w-drow", children: [
|
|
6720
|
+
/* @__PURE__ */ jsx57("span", { className: isLive || state?.isHalfTime ? "ss-w-drow-when ss-w-drow-when--live" : "ss-w-drow-when", children: when }),
|
|
6721
|
+
/* @__PURE__ */ jsxs52("span", { className: "ss-w-drow-fx", children: [
|
|
6722
|
+
/* @__PURE__ */ jsx57(Side, { name: match.homeTeamName, crest: match.homeTeamImagePath }),
|
|
6723
|
+
/* @__PURE__ */ jsx57("span", { className: hasScore ? "ss-w-drow-sc" : "ss-w-drow-sc ss-w-drow-sc--idle", children: score ?? "\u2013" }),
|
|
6724
|
+
/* @__PURE__ */ jsx57(Side, { name: match.awayTeamName, crest: match.awayTeamImagePath, away: true })
|
|
6621
6725
|
] }),
|
|
6622
|
-
/* @__PURE__ */
|
|
6726
|
+
/* @__PURE__ */ jsx57(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
|
|
6623
6727
|
] });
|
|
6624
6728
|
}
|
|
6625
6729
|
|
|
6626
6730
|
// src/components/LeagueDetail.tsx
|
|
6627
|
-
import { jsx as
|
|
6731
|
+
import { jsx as jsx58, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
6628
6732
|
var STAR_PATH2 = "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";
|
|
6629
6733
|
function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, onBack, onPrev, onNext }) {
|
|
6630
|
-
const [toast, setToast] =
|
|
6734
|
+
const [toast, setToast] = useState34(null);
|
|
6631
6735
|
useEffect25(() => {
|
|
6632
6736
|
setToast(null);
|
|
6633
6737
|
}, [group.competitionId]);
|
|
@@ -6643,12 +6747,12 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6643
6747
|
if (ok) setToast(next ? ui.starredToast : ui.unstarredToast);
|
|
6644
6748
|
});
|
|
6645
6749
|
};
|
|
6646
|
-
return /* @__PURE__ */
|
|
6647
|
-
/* @__PURE__ */
|
|
6648
|
-
/* @__PURE__ */
|
|
6649
|
-
/* @__PURE__ */
|
|
6650
|
-
/* @__PURE__ */
|
|
6651
|
-
/* @__PURE__ */
|
|
6750
|
+
return /* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail", children: [
|
|
6751
|
+
/* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-head", children: [
|
|
6752
|
+
/* @__PURE__ */ jsx58("button", { type: "button", className: "ss-w-today-detail-back", "aria-label": ui.back, onClick: onBack, children: /* @__PURE__ */ jsx58(ChevronIcon, {}) }),
|
|
6753
|
+
/* @__PURE__ */ jsx58(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
6754
|
+
/* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-name", children: group.competitionName }),
|
|
6755
|
+
/* @__PURE__ */ jsx58(
|
|
6652
6756
|
"button",
|
|
6653
6757
|
{
|
|
6654
6758
|
type: "button",
|
|
@@ -6657,7 +6761,7 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6657
6761
|
"aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
|
|
6658
6762
|
disabled: starTap.pendingId !== null,
|
|
6659
6763
|
onClick: onStarClick,
|
|
6660
|
-
children: /* @__PURE__ */
|
|
6764
|
+
children: /* @__PURE__ */ jsx58("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx58(
|
|
6661
6765
|
"path",
|
|
6662
6766
|
{
|
|
6663
6767
|
d: STAR_PATH2,
|
|
@@ -6671,8 +6775,8 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6671
6775
|
}
|
|
6672
6776
|
)
|
|
6673
6777
|
] }),
|
|
6674
|
-
/* @__PURE__ */
|
|
6675
|
-
/* @__PURE__ */
|
|
6778
|
+
/* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-nav", children: [
|
|
6779
|
+
/* @__PURE__ */ jsx58(
|
|
6676
6780
|
"button",
|
|
6677
6781
|
{
|
|
6678
6782
|
type: "button",
|
|
@@ -6680,11 +6784,11 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6680
6784
|
"aria-label": ui.prevLeagueLabel,
|
|
6681
6785
|
disabled: position.index <= 1,
|
|
6682
6786
|
onClick: onPrev,
|
|
6683
|
-
children: /* @__PURE__ */
|
|
6787
|
+
children: /* @__PURE__ */ jsx58(ChevronIcon, {})
|
|
6684
6788
|
}
|
|
6685
6789
|
),
|
|
6686
|
-
/* @__PURE__ */
|
|
6687
|
-
/* @__PURE__ */
|
|
6790
|
+
/* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-pos", children: ui.leagueDetailPosition(position.index, position.total) }),
|
|
6791
|
+
/* @__PURE__ */ jsx58(
|
|
6688
6792
|
"button",
|
|
6689
6793
|
{
|
|
6690
6794
|
type: "button",
|
|
@@ -6692,20 +6796,20 @@ function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, on
|
|
|
6692
6796
|
"aria-label": ui.nextLeagueLabel,
|
|
6693
6797
|
disabled: position.index >= position.total,
|
|
6694
6798
|
onClick: onNext,
|
|
6695
|
-
children: /* @__PURE__ */
|
|
6799
|
+
children: /* @__PURE__ */ jsx58(ChevronIcon, {})
|
|
6696
6800
|
}
|
|
6697
6801
|
)
|
|
6698
6802
|
] }),
|
|
6699
|
-
/* @__PURE__ */
|
|
6700
|
-
/* @__PURE__ */
|
|
6701
|
-
own.map((m) => /* @__PURE__ */
|
|
6803
|
+
/* @__PURE__ */ jsxs53("div", { className: "ss-w-today-detail-body", children: [
|
|
6804
|
+
/* @__PURE__ */ jsx58("span", { className: "ss-w-today-detail-count", children: own.length }),
|
|
6805
|
+
own.map((m) => /* @__PURE__ */ jsx58(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId))
|
|
6702
6806
|
] }),
|
|
6703
|
-
toast !== null && /* @__PURE__ */
|
|
6807
|
+
toast !== null && /* @__PURE__ */ jsx58("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast })
|
|
6704
6808
|
] });
|
|
6705
6809
|
}
|
|
6706
6810
|
|
|
6707
6811
|
// src/components/LeagueRowGroup.tsx
|
|
6708
|
-
import { jsx as
|
|
6812
|
+
import { jsx as jsx59, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
6709
6813
|
var ROW_CAP_PER_LEAGUE = 3;
|
|
6710
6814
|
var SECTION_ROW_BUDGET = 12;
|
|
6711
6815
|
function rowsFor(group, states, stale) {
|
|
@@ -6721,20 +6825,20 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
|
|
|
6721
6825
|
const onStarClick = () => {
|
|
6722
6826
|
void starTap.tap(group.competitionId, !group.isStarred);
|
|
6723
6827
|
};
|
|
6724
|
-
return /* @__PURE__ */
|
|
6725
|
-
/* @__PURE__ */
|
|
6726
|
-
/* @__PURE__ */
|
|
6727
|
-
/* @__PURE__ */
|
|
6728
|
-
/* @__PURE__ */
|
|
6828
|
+
return /* @__PURE__ */ jsxs54("div", { className: "ss-w-today-rowgroup", children: [
|
|
6829
|
+
/* @__PURE__ */ jsxs54("div", { className: "ss-w-today-rowgroup-head", children: [
|
|
6830
|
+
/* @__PURE__ */ jsxs54("button", { type: "button", className: "ss-w-today-rowgroup-head-body", onClick: onOpen, children: [
|
|
6831
|
+
/* @__PURE__ */ jsx59(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
6832
|
+
/* @__PURE__ */ jsxs54("span", { className: "ss-w-today-rowgroup-name", children: [
|
|
6729
6833
|
group.competitionName,
|
|
6730
|
-
disambiguate && group.competitionCountry ? /* @__PURE__ */
|
|
6834
|
+
disambiguate && group.competitionCountry ? /* @__PURE__ */ jsxs54("span", { className: "ss-w-today-tile-country", children: [
|
|
6731
6835
|
" (",
|
|
6732
6836
|
group.competitionCountry,
|
|
6733
6837
|
")"
|
|
6734
6838
|
] }) : null
|
|
6735
6839
|
] })
|
|
6736
6840
|
] }),
|
|
6737
|
-
/* @__PURE__ */
|
|
6841
|
+
/* @__PURE__ */ jsx59(
|
|
6738
6842
|
"button",
|
|
6739
6843
|
{
|
|
6740
6844
|
type: "button",
|
|
@@ -6743,7 +6847,7 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
|
|
|
6743
6847
|
"aria-label": group.isStarred ? ui.starOffLabel : ui.starOnLabel,
|
|
6744
6848
|
disabled: !starClickable2 || starTap.pendingId !== null,
|
|
6745
6849
|
onClick: onStarClick,
|
|
6746
|
-
children: /* @__PURE__ */
|
|
6850
|
+
children: /* @__PURE__ */ jsx59("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", children: /* @__PURE__ */ jsx59(
|
|
6747
6851
|
"path",
|
|
6748
6852
|
{
|
|
6749
6853
|
d: STAR_PATH3,
|
|
@@ -6757,8 +6861,8 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
|
|
|
6757
6861
|
}
|
|
6758
6862
|
)
|
|
6759
6863
|
] }),
|
|
6760
|
-
/* @__PURE__ */
|
|
6761
|
-
overflow > 0 && /* @__PURE__ */
|
|
6864
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-today-rowgroup-rows", children: shown.map((m) => /* @__PURE__ */ jsx59(FixtureRow, { match: m, state: states[m.matchId], stale, ui, monitor }, m.matchId)) }),
|
|
6865
|
+
overflow > 0 && /* @__PURE__ */ jsx59("button", { type: "button", className: "ss-w-today-rowgroup-seeall", onClick: onOpen, children: ui.seeAllFixturesLabel(sorted.length) })
|
|
6762
6866
|
] });
|
|
6763
6867
|
}
|
|
6764
6868
|
|
|
@@ -6766,8 +6870,8 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
|
|
|
6766
6870
|
import { useCallback as useCallback19, useRef as useRef24 } from "react";
|
|
6767
6871
|
|
|
6768
6872
|
// src/components/games/ui/icons.tsx
|
|
6769
|
-
import { jsx as
|
|
6770
|
-
var svg = (size, children, fill = false) => /* @__PURE__ */
|
|
6873
|
+
import { jsx as jsx60 } from "react/jsx-runtime";
|
|
6874
|
+
var svg = (size, children, fill = false) => /* @__PURE__ */ jsx60(
|
|
6771
6875
|
"svg",
|
|
6772
6876
|
{
|
|
6773
6877
|
width: size,
|
|
@@ -6782,25 +6886,25 @@ var svg = (size, children, fill = false) => /* @__PURE__ */ jsx59(
|
|
|
6782
6886
|
children
|
|
6783
6887
|
}
|
|
6784
6888
|
);
|
|
6785
|
-
var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */
|
|
6786
|
-
var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */
|
|
6787
|
-
var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */
|
|
6788
|
-
var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */
|
|
6789
|
-
var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */
|
|
6790
|
-
var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */
|
|
6791
|
-
var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */
|
|
6792
|
-
var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */
|
|
6793
|
-
var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */
|
|
6794
|
-
var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */
|
|
6795
|
-
var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */
|
|
6796
|
-
var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */
|
|
6797
|
-
var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */
|
|
6798
|
-
var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */
|
|
6799
|
-
var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */
|
|
6800
|
-
var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */
|
|
6889
|
+
var IconChevronLeft = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M15 18l-6-6 6-6" }));
|
|
6890
|
+
var IconLock = ({ size = 14 }) => svg(size, [/* @__PURE__ */ jsx60("rect", { x: "5", y: "11", width: "14", height: "10", rx: "2" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" }, "b")]);
|
|
6891
|
+
var IconCheck = ({ size = 14 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M5 12l5 5 9-10" }));
|
|
6892
|
+
var IconClose = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M6 6l12 12M18 6L6 18" }));
|
|
6893
|
+
var IconSearch = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("circle", { cx: "11", cy: "11", r: "7" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M20 20l-3.5-3.5" }, "b")]);
|
|
6894
|
+
var IconPlus = ({ size = 20 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 5v14M5 12h14" }));
|
|
6895
|
+
var IconBulb = ({ size = 16 }) => svg(size, [/* @__PURE__ */ jsx60("path", { d: "M9 18h6M10 21h4" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M12 3a6 6 0 0 0-3.5 10.9V16h7v-2.1A6 6 0 0 0 12 3z" }, "b")]);
|
|
6896
|
+
var IconArrowUp = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 19V5M5 12l7-7 7 7" }));
|
|
6897
|
+
var IconArrowDown = ({ size = 12 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 5v14M19 12l-7 7-7-7" }));
|
|
6898
|
+
var IconCalendar = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("rect", { x: "4", y: "5", width: "16", height: "15", rx: "2" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M4 10h16M9 3v4M15 3v4" }, "b")]);
|
|
6899
|
+
var IconShield = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M12 3l7 3v6c0 5-3 8-7 9-4-1-7-4-7-9V6z" }));
|
|
6900
|
+
var IconFlag = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M5 21V4M5 4h12l-2 4 2 4H5" }));
|
|
6901
|
+
var IconBall = ({ size = 18 }) => svg(size, [/* @__PURE__ */ jsx60("circle", { cx: "12", cy: "12", r: "9" }, "a"), /* @__PURE__ */ jsx60("path", { d: "M12 7l4 3-1.5 4.5h-5L8 10z" }, "b")]);
|
|
6902
|
+
var IconBoot = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("path", { d: "M4 6h6l1 6 8 3v3H4z" }));
|
|
6903
|
+
var IconGloves = ({ size = 18 }) => svg(size, /* @__PURE__ */ jsx60("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" }));
|
|
6904
|
+
var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx60("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);
|
|
6801
6905
|
|
|
6802
6906
|
// src/components/games/ui/SearchField.tsx
|
|
6803
|
-
import { jsx as
|
|
6907
|
+
import { jsx as jsx61, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
6804
6908
|
function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown, clearLabel }) {
|
|
6805
6909
|
const localRef = useRef24(null);
|
|
6806
6910
|
const setInputRef = useCallback19((node) => {
|
|
@@ -6808,11 +6912,11 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6808
6912
|
if (typeof inputRef === "function") inputRef(node);
|
|
6809
6913
|
else if (inputRef) inputRef.current = node;
|
|
6810
6914
|
}, [inputRef]);
|
|
6811
|
-
return /* @__PURE__ */
|
|
6812
|
-
/* @__PURE__ */
|
|
6813
|
-
/* @__PURE__ */
|
|
6814
|
-
/* @__PURE__ */
|
|
6815
|
-
/* @__PURE__ */
|
|
6915
|
+
return /* @__PURE__ */ jsxs55("div", { className: "ss-g-search", children: [
|
|
6916
|
+
/* @__PURE__ */ jsx61("label", { htmlFor: id, className: labelHidden ? "ss-g-sr" : "ss-g-search-label", children: label }),
|
|
6917
|
+
/* @__PURE__ */ jsxs55("div", { className: "ss-g-search-box", children: [
|
|
6918
|
+
/* @__PURE__ */ jsx61(IconSearch, {}),
|
|
6919
|
+
/* @__PURE__ */ jsx61(
|
|
6816
6920
|
"input",
|
|
6817
6921
|
{
|
|
6818
6922
|
id,
|
|
@@ -6826,7 +6930,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6826
6930
|
onChange: (e) => onChange(e.target.value)
|
|
6827
6931
|
}
|
|
6828
6932
|
),
|
|
6829
|
-
clearLabel && value.length > 0 ? /* @__PURE__ */
|
|
6933
|
+
clearLabel && value.length > 0 ? /* @__PURE__ */ jsx61(
|
|
6830
6934
|
"button",
|
|
6831
6935
|
{
|
|
6832
6936
|
type: "button",
|
|
@@ -6836,7 +6940,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6836
6940
|
onChange("");
|
|
6837
6941
|
localRef.current?.focus();
|
|
6838
6942
|
},
|
|
6839
|
-
children: /* @__PURE__ */
|
|
6943
|
+
children: /* @__PURE__ */ jsx61(IconClose, { size: 11 })
|
|
6840
6944
|
}
|
|
6841
6945
|
) : null
|
|
6842
6946
|
] })
|
|
@@ -6844,13 +6948,13 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
6844
6948
|
}
|
|
6845
6949
|
|
|
6846
6950
|
// src/components/TodayPanel.tsx
|
|
6847
|
-
import { Fragment as
|
|
6951
|
+
import { Fragment as Fragment9, jsx as jsx62, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
6848
6952
|
function TodayPanel({ discovery, ui, monitor }) {
|
|
6849
6953
|
const { groups, states, stale, starLeague } = discovery;
|
|
6850
6954
|
const searchId = useId2();
|
|
6851
|
-
const [query, setQuery] =
|
|
6852
|
-
const [selectedCompetitionId, setSelectedCompetitionId] =
|
|
6853
|
-
const [toast, setToast] =
|
|
6955
|
+
const [query, setQuery] = useState35("");
|
|
6956
|
+
const [selectedCompetitionId, setSelectedCompetitionId] = useState35(null);
|
|
6957
|
+
const [toast, setToast] = useState35(null);
|
|
6854
6958
|
useEffect26(() => {
|
|
6855
6959
|
if (toast === null) return;
|
|
6856
6960
|
const id = setTimeout(() => setToast(null), 4e3);
|
|
@@ -6901,12 +7005,12 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6901
7005
|
if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
|
|
6902
7006
|
}, [selectedCompetitionId, openGroup]);
|
|
6903
7007
|
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);
|
|
6904
|
-
const liveBand = liveRows.length > 0 && /* @__PURE__ */
|
|
6905
|
-
/* @__PURE__ */
|
|
6906
|
-
/* @__PURE__ */
|
|
7008
|
+
const liveBand = liveRows.length > 0 && /* @__PURE__ */ jsxs56(Fragment9, { children: [
|
|
7009
|
+
/* @__PURE__ */ jsxs56("div", { className: "ss-w-sec-head", children: [
|
|
7010
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
|
|
6907
7011
|
ui.sectionLive
|
|
6908
7012
|
] }),
|
|
6909
|
-
/* @__PURE__ */
|
|
7013
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-today-live", children: liveRows.map(({ match }) => /* @__PURE__ */ jsx62(
|
|
6910
7014
|
FixtureRow,
|
|
6911
7015
|
{
|
|
6912
7016
|
match,
|
|
@@ -6919,10 +7023,10 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6919
7023
|
)) })
|
|
6920
7024
|
] });
|
|
6921
7025
|
if (openGroup !== void 0) {
|
|
6922
|
-
return /* @__PURE__ */
|
|
6923
|
-
stale && /* @__PURE__ */
|
|
7026
|
+
return /* @__PURE__ */ jsx62("div", { className: "ss-w-today-root", children: /* @__PURE__ */ jsxs56("div", { className: "ss-w-mon-list", children: [
|
|
7027
|
+
stale && /* @__PURE__ */ jsx62("div", { className: "ss-w-stale", children: ui.staleStates }),
|
|
6924
7028
|
liveBand,
|
|
6925
|
-
/* @__PURE__ */
|
|
7029
|
+
/* @__PURE__ */ jsx62(
|
|
6926
7030
|
LeagueDetail,
|
|
6927
7031
|
{
|
|
6928
7032
|
group: openGroup,
|
|
@@ -6943,11 +7047,11 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6943
7047
|
}
|
|
6944
7048
|
const searching = query.trim().length > 0;
|
|
6945
7049
|
const searchResults = searching ? placement.order.filter((g) => matchesQuery(g, query)) : [];
|
|
6946
|
-
return /* @__PURE__ */
|
|
6947
|
-
/* @__PURE__ */
|
|
6948
|
-
stale && /* @__PURE__ */
|
|
7050
|
+
return /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-root", children: [
|
|
7051
|
+
/* @__PURE__ */ jsxs56("div", { className: "ss-w-mon-list", children: [
|
|
7052
|
+
stale && /* @__PURE__ */ jsx62("div", { className: "ss-w-stale", children: ui.staleStates }),
|
|
6949
7053
|
!searching && liveBand,
|
|
6950
|
-
/* @__PURE__ */
|
|
7054
|
+
/* @__PURE__ */ jsx62(
|
|
6951
7055
|
SearchField,
|
|
6952
7056
|
{
|
|
6953
7057
|
id: searchId,
|
|
@@ -6959,19 +7063,19 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6959
7063
|
clearLabel: ui.clearSearchLabel
|
|
6960
7064
|
}
|
|
6961
7065
|
),
|
|
6962
|
-
searching ? searchResults.length === 0 ? /* @__PURE__ */
|
|
6963
|
-
/* @__PURE__ */
|
|
6964
|
-
/* @__PURE__ */
|
|
6965
|
-
/* @__PURE__ */
|
|
7066
|
+
searching ? searchResults.length === 0 ? /* @__PURE__ */ jsx62("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ jsx62(Fragment9, { children: searchResults.map((group) => /* @__PURE__ */ jsxs56("div", { className: "ss-w-today-search-block", children: [
|
|
7067
|
+
/* @__PURE__ */ jsxs56("div", { className: "ss-w-today-search-group", children: [
|
|
7068
|
+
/* @__PURE__ */ jsx62(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
7069
|
+
/* @__PURE__ */ jsxs56("span", { className: "ss-w-today-search-group-name", children: [
|
|
6966
7070
|
group.competitionName,
|
|
6967
|
-
(nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */
|
|
7071
|
+
(nameCounts[group.competitionName] ?? 0) > 1 && group.competitionCountry ? /* @__PURE__ */ jsxs56("span", { className: "ss-w-today-tile-country", children: [
|
|
6968
7072
|
" (",
|
|
6969
7073
|
group.competitionCountry,
|
|
6970
7074
|
")"
|
|
6971
7075
|
] }) : null
|
|
6972
7076
|
] })
|
|
6973
7077
|
] }),
|
|
6974
|
-
matchingFixtures(group, query).map((match) => /* @__PURE__ */
|
|
7078
|
+
matchingFixtures(group, query).map((match) => /* @__PURE__ */ jsx62(
|
|
6975
7079
|
"div",
|
|
6976
7080
|
{
|
|
6977
7081
|
role: "button",
|
|
@@ -6985,17 +7089,17 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
6985
7089
|
setSelectedCompetitionId(group.competitionId);
|
|
6986
7090
|
}
|
|
6987
7091
|
},
|
|
6988
|
-
children: /* @__PURE__ */
|
|
7092
|
+
children: /* @__PURE__ */ jsx62(FixtureRow, { match, state: states[match.matchId], stale, ui, monitor })
|
|
6989
7093
|
},
|
|
6990
7094
|
match.matchId
|
|
6991
7095
|
))
|
|
6992
|
-
] }, group.competitionId)) }) : /* @__PURE__ */
|
|
6993
|
-
/* @__PURE__ */
|
|
7096
|
+
] }, group.competitionId)) }) : /* @__PURE__ */ jsxs56(Fragment9, { children: [
|
|
7097
|
+
/* @__PURE__ */ jsxs56("div", { className: "ss-w-today-sec", children: [
|
|
6994
7098
|
placement.personal ? ui.yourLeagues : ui.topLeagues,
|
|
6995
|
-
!placement.personal && /* @__PURE__ */
|
|
7099
|
+
!placement.personal && /* @__PURE__ */ jsx62("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
|
|
6996
7100
|
] }),
|
|
6997
|
-
/* @__PURE__ */
|
|
6998
|
-
rowedCandidates.map((group) => /* @__PURE__ */
|
|
7101
|
+
/* @__PURE__ */ jsxs56("div", { className: "ss-w-today-rowsection", children: [
|
|
7102
|
+
rowedCandidates.map((group) => /* @__PURE__ */ jsx62(
|
|
6999
7103
|
LeagueRowGroup,
|
|
7000
7104
|
{
|
|
7001
7105
|
group,
|
|
@@ -7011,7 +7115,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
7011
7115
|
},
|
|
7012
7116
|
group.competitionId
|
|
7013
7117
|
)),
|
|
7014
|
-
tiledCandidates.length > 0 && /* @__PURE__ */
|
|
7118
|
+
tiledCandidates.length > 0 && /* @__PURE__ */ jsx62("div", { className: "ss-w-today-tiles", children: tiledCandidates.map((group) => /* @__PURE__ */ jsx62(
|
|
7015
7119
|
LeagueTile,
|
|
7016
7120
|
{
|
|
7017
7121
|
group,
|
|
@@ -7024,8 +7128,8 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
7024
7128
|
group.competitionId
|
|
7025
7129
|
)) })
|
|
7026
7130
|
] }),
|
|
7027
|
-
/* @__PURE__ */
|
|
7028
|
-
/* @__PURE__ */
|
|
7131
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-today-sec", children: ui.allLeagues }),
|
|
7132
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-today-tiles", children: placement.others.map((group) => /* @__PURE__ */ jsx62(
|
|
7029
7133
|
LeagueTile,
|
|
7030
7134
|
{
|
|
7031
7135
|
group,
|
|
@@ -7039,21 +7143,21 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
7039
7143
|
)) })
|
|
7040
7144
|
] })
|
|
7041
7145
|
] }),
|
|
7042
|
-
toast !== null && /* @__PURE__ */
|
|
7146
|
+
toast !== null && /* @__PURE__ */ jsx62("p", { className: "ss-w-today-toast", role: "status", "aria-live": "polite", children: toast === "starred" ? ui.starredToast : ui.unstarredToast })
|
|
7043
7147
|
] });
|
|
7044
7148
|
}
|
|
7045
7149
|
|
|
7046
7150
|
// src/components/GamesPanel.tsx
|
|
7047
|
-
import { useEffect as useEffect30, useState as
|
|
7151
|
+
import { useEffect as useEffect30, useState as useState50 } from "react";
|
|
7048
7152
|
|
|
7049
7153
|
// src/components/GamesLoginWall.tsx
|
|
7050
|
-
import { jsx as
|
|
7154
|
+
import { jsx as jsx63 } from "react/jsx-runtime";
|
|
7051
7155
|
function GamesLoginWall({ ui }) {
|
|
7052
|
-
return /* @__PURE__ */
|
|
7156
|
+
return /* @__PURE__ */ jsx63("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-games-wall", children: /* @__PURE__ */ jsx63("p", { children: ui.gamesLoginRequired }) }) });
|
|
7053
7157
|
}
|
|
7054
7158
|
|
|
7055
7159
|
// src/components/GamesHub.tsx
|
|
7056
|
-
import { useEffect as useEffect27, useState as
|
|
7160
|
+
import { useEffect as useEffect27, useState as useState36 } from "react";
|
|
7057
7161
|
|
|
7058
7162
|
// src/components/games/ui/gameMeta.ts
|
|
7059
7163
|
function prettifyGameId(gameId) {
|
|
@@ -7069,74 +7173,74 @@ function splitName(full) {
|
|
|
7069
7173
|
}
|
|
7070
7174
|
|
|
7071
7175
|
// src/components/GameTileArt.tsx
|
|
7072
|
-
import { Fragment as
|
|
7176
|
+
import { Fragment as Fragment10, jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
7073
7177
|
function GameTileArt({ gameId }) {
|
|
7074
|
-
return /* @__PURE__ */
|
|
7178
|
+
return /* @__PURE__ */ jsx64("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
|
|
7075
7179
|
}
|
|
7076
|
-
var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */
|
|
7077
|
-
/* @__PURE__ */
|
|
7078
|
-
/* @__PURE__ */
|
|
7180
|
+
var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ jsxs57("g", { className: cls, children: [
|
|
7181
|
+
/* @__PURE__ */ jsx64("circle", { cx, cy: cy - r * 0.3, r: r * 0.45 }),
|
|
7182
|
+
/* @__PURE__ */ jsx64("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` })
|
|
7079
7183
|
] });
|
|
7080
7184
|
var ART = {
|
|
7081
|
-
"mystery-tiger": /* @__PURE__ */
|
|
7185
|
+
"mystery-tiger": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7082
7186
|
head(60, 38, 26, "ss-g-art-fg"),
|
|
7083
|
-
/* @__PURE__ */
|
|
7187
|
+
/* @__PURE__ */ jsx64("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
7084
7188
|
] }),
|
|
7085
|
-
"higher-or-lower": /* @__PURE__ */
|
|
7189
|
+
"higher-or-lower": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7086
7190
|
head(32, 38, 20),
|
|
7087
7191
|
head(88, 38, 20),
|
|
7088
|
-
/* @__PURE__ */
|
|
7089
|
-
/* @__PURE__ */
|
|
7192
|
+
/* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
|
|
7193
|
+
/* @__PURE__ */ jsx64("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
|
|
7090
7194
|
] }),
|
|
7091
|
-
"guess-the-xi": /* @__PURE__ */
|
|
7092
|
-
/* @__PURE__ */
|
|
7093
|
-
[[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__ */
|
|
7195
|
+
"guess-the-xi": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7196
|
+
/* @__PURE__ */ jsx64("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
7197
|
+
[[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__ */ jsx64("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
|
|
7094
7198
|
] }),
|
|
7095
|
-
"daily-quiz": /* @__PURE__ */
|
|
7096
|
-
"career-path": /* @__PURE__ */
|
|
7097
|
-
/* @__PURE__ */
|
|
7098
|
-
/* @__PURE__ */
|
|
7099
|
-
/* @__PURE__ */
|
|
7100
|
-
/* @__PURE__ */
|
|
7101
|
-
/* @__PURE__ */
|
|
7199
|
+
"daily-quiz": /* @__PURE__ */ jsx64(Fragment10, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ jsx64("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
|
|
7200
|
+
"career-path": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7201
|
+
/* @__PURE__ */ jsx64("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
7202
|
+
/* @__PURE__ */ jsx64("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
|
|
7203
|
+
/* @__PURE__ */ jsx64("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
7204
|
+
/* @__PURE__ */ jsx64("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
|
|
7205
|
+
/* @__PURE__ */ jsx64("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
7102
7206
|
] }),
|
|
7103
|
-
"beat-the-grid": /* @__PURE__ */
|
|
7104
|
-
"matchday-predictor": /* @__PURE__ */
|
|
7105
|
-
/* @__PURE__ */
|
|
7106
|
-
/* @__PURE__ */
|
|
7107
|
-
/* @__PURE__ */
|
|
7108
|
-
/* @__PURE__ */
|
|
7207
|
+
"beat-the-grid": /* @__PURE__ */ jsx64(Fragment10, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ jsx64("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}`))) }),
|
|
7208
|
+
"matchday-predictor": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7209
|
+
/* @__PURE__ */ jsx64("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
|
|
7210
|
+
/* @__PURE__ */ jsx64("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
|
|
7211
|
+
/* @__PURE__ */ jsx64("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
|
|
7212
|
+
/* @__PURE__ */ jsx64("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
|
|
7109
7213
|
] }),
|
|
7110
|
-
"starting-xi": /* @__PURE__ */
|
|
7111
|
-
/* @__PURE__ */
|
|
7112
|
-
[[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__ */
|
|
7214
|
+
"starting-xi": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7215
|
+
/* @__PURE__ */ jsx64("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
7216
|
+
[[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__ */ jsx64("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
|
|
7113
7217
|
] }),
|
|
7114
|
-
"stat-ladder": /* @__PURE__ */
|
|
7115
|
-
"fan-motm": /* @__PURE__ */
|
|
7116
|
-
/* @__PURE__ */
|
|
7218
|
+
"stat-ladder": /* @__PURE__ */ jsx64(Fragment10, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ jsx64("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
|
|
7219
|
+
"fan-motm": /* @__PURE__ */ jsxs57(Fragment10, { children: [
|
|
7220
|
+
/* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
|
|
7117
7221
|
head(60, 40, 18),
|
|
7118
|
-
/* @__PURE__ */
|
|
7222
|
+
/* @__PURE__ */ jsx64("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" })
|
|
7119
7223
|
] }),
|
|
7120
|
-
default: /* @__PURE__ */
|
|
7224
|
+
default: /* @__PURE__ */ jsx64("circle", { cx: "60", cy: "37", r: "22", className: "ss-g-art-fg" })
|
|
7121
7225
|
};
|
|
7122
7226
|
|
|
7123
7227
|
// src/components/games/ui/Chip.tsx
|
|
7124
|
-
import { jsx as
|
|
7228
|
+
import { jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
7125
7229
|
function Chip({ variant = "neutral", icon, children, className }) {
|
|
7126
|
-
return /* @__PURE__ */
|
|
7230
|
+
return /* @__PURE__ */ jsxs58("span", { className: `ss-g-chip ss-g-chip--${variant}${className ? ` ${className}` : ""}`, children: [
|
|
7127
7231
|
icon,
|
|
7128
7232
|
children
|
|
7129
7233
|
] });
|
|
7130
7234
|
}
|
|
7131
7235
|
function StatStack({ value, label }) {
|
|
7132
|
-
return /* @__PURE__ */
|
|
7133
|
-
/* @__PURE__ */
|
|
7134
|
-
/* @__PURE__ */
|
|
7236
|
+
return /* @__PURE__ */ jsxs58("span", { className: "ss-g-statstack", children: [
|
|
7237
|
+
/* @__PURE__ */ jsx65("span", { className: "ss-g-statstack-v", children: value }),
|
|
7238
|
+
/* @__PURE__ */ jsx65("span", { className: "ss-g-statstack-l", children: label })
|
|
7135
7239
|
] });
|
|
7136
7240
|
}
|
|
7137
7241
|
|
|
7138
7242
|
// src/components/GameTile.tsx
|
|
7139
|
-
import { Fragment as
|
|
7243
|
+
import { Fragment as Fragment11, jsx as jsx66, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
7140
7244
|
function tileStatus(game, ui) {
|
|
7141
7245
|
switch (game.status) {
|
|
7142
7246
|
case "locked":
|
|
@@ -7160,38 +7264,38 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
7160
7264
|
const status = tileStatus(game, ui);
|
|
7161
7265
|
const disabled = DISABLED.has(game.status);
|
|
7162
7266
|
const title = gameTitle(game, ui.games.titles);
|
|
7163
|
-
const body = variant === "hero" ? /* @__PURE__ */
|
|
7164
|
-
/* @__PURE__ */
|
|
7165
|
-
/* @__PURE__ */
|
|
7166
|
-
status.tone === "new" && /* @__PURE__ */
|
|
7167
|
-
/* @__PURE__ */
|
|
7168
|
-
/* @__PURE__ */
|
|
7169
|
-
status.tone === "success" ? /* @__PURE__ */
|
|
7267
|
+
const body = variant === "hero" ? /* @__PURE__ */ jsxs59(Fragment11, { children: [
|
|
7268
|
+
/* @__PURE__ */ jsxs59("span", { className: "ss-g-hero-text", children: [
|
|
7269
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
|
|
7270
|
+
status.tone === "new" && /* @__PURE__ */ jsx66(Chip, { variant: "badge", children: ui.games.newToday }),
|
|
7271
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-hero-title", children: title }),
|
|
7272
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-hero-sub", children: ui.games.taglines[game.gameId] ?? "" }),
|
|
7273
|
+
status.tone === "success" ? /* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": "success", children: status.text }) : /* @__PURE__ */ jsxs59("span", { className: "ss-g-hero-cta", children: [
|
|
7170
7274
|
status.tone === "accent" ? ui.games.resume : ui.games.playNow,
|
|
7171
7275
|
" \u2192"
|
|
7172
7276
|
] })
|
|
7173
7277
|
] }),
|
|
7174
|
-
/* @__PURE__ */
|
|
7175
|
-
] }) : variant === "wide" ? /* @__PURE__ */
|
|
7176
|
-
/* @__PURE__ */
|
|
7177
|
-
/* @__PURE__ */
|
|
7178
|
-
/* @__PURE__ */
|
|
7179
|
-
/* @__PURE__ */
|
|
7180
|
-
status.tone === "new" && /* @__PURE__ */
|
|
7278
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) })
|
|
7279
|
+
] }) : variant === "wide" ? /* @__PURE__ */ jsxs59(Fragment11, { children: [
|
|
7280
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) }),
|
|
7281
|
+
/* @__PURE__ */ jsxs59("span", { className: "ss-g-wide-text", children: [
|
|
7282
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-tile-title", children: title }),
|
|
7283
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text }),
|
|
7284
|
+
status.tone === "new" && /* @__PURE__ */ jsx66(Chip, { variant: "badge", children: ui.games.newToday })
|
|
7181
7285
|
] }),
|
|
7182
|
-
/* @__PURE__ */
|
|
7183
|
-
] }) : /* @__PURE__ */
|
|
7184
|
-
/* @__PURE__ */
|
|
7185
|
-
/* @__PURE__ */
|
|
7186
|
-
/* @__PURE__ */
|
|
7286
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ jsx66(IconChevronLeft, { size: 18 }) })
|
|
7287
|
+
] }) : /* @__PURE__ */ jsxs59(Fragment11, { children: [
|
|
7288
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ jsx66(GameTileArt, { gameId: game.gameId }) }),
|
|
7289
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-tile-title", children: title }),
|
|
7290
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
|
|
7187
7291
|
] });
|
|
7188
7292
|
const cls = `ss-g-tile ss-g-tile--${variant}`;
|
|
7189
|
-
if (disabled) return /* @__PURE__ */
|
|
7190
|
-
return /* @__PURE__ */
|
|
7293
|
+
if (disabled) return /* @__PURE__ */ jsx66("div", { className: cls, "data-disabled": true, "aria-disabled": "true", children: body });
|
|
7294
|
+
return /* @__PURE__ */ jsx66("button", { type: "button", className: cls, "aria-label": `${title} \u2014 ${status.text}`, onClick: () => onOpen(game), children: body });
|
|
7191
7295
|
}
|
|
7192
7296
|
|
|
7193
7297
|
// src/components/GamesHub.tsx
|
|
7194
|
-
import { Fragment as
|
|
7298
|
+
import { Fragment as Fragment12, jsx as jsx67, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
7195
7299
|
var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
|
|
7196
7300
|
var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
|
|
7197
7301
|
function pickHeroGame(games) {
|
|
@@ -7204,7 +7308,7 @@ function pickHeroGame(games) {
|
|
|
7204
7308
|
}
|
|
7205
7309
|
var tileKey = (g) => `${g.gameId}-${g.gameDay}-${g.fixtureId}`;
|
|
7206
7310
|
function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
|
|
7207
|
-
const [, setTick] =
|
|
7311
|
+
const [, setTick] = useState36(0);
|
|
7208
7312
|
useEffect27(() => {
|
|
7209
7313
|
const id = setInterval(() => setTick((t) => t + 1), 6e4);
|
|
7210
7314
|
return () => clearInterval(id);
|
|
@@ -7217,58 +7321,58 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
|
|
|
7217
7321
|
const kickoffs = fixtures.map((g) => g.kickoffUtc).filter((k) => !!k).sort();
|
|
7218
7322
|
const todayPts = games.filter((g) => DONE.has(g.status)).reduce((s, g) => s + (g.score ?? 0), 0);
|
|
7219
7323
|
const dash = "\u2014";
|
|
7220
|
-
return /* @__PURE__ */
|
|
7221
|
-
/* @__PURE__ */
|
|
7222
|
-
/* @__PURE__ */
|
|
7223
|
-
/* @__PURE__ */
|
|
7224
|
-
/* @__PURE__ */
|
|
7225
|
-
myWeeklyRow ? /* @__PURE__ */
|
|
7226
|
-
/* @__PURE__ */
|
|
7324
|
+
return /* @__PURE__ */ jsxs60("div", { className: "ss-g-hub", children: [
|
|
7325
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-stats", children: [
|
|
7326
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
|
|
7327
|
+
/* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
|
|
7328
|
+
/* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
|
|
7329
|
+
myWeeklyRow ? /* @__PURE__ */ jsxs60(Fragment12, { children: [
|
|
7330
|
+
/* @__PURE__ */ jsx67(IconFlame, {}),
|
|
7227
7331
|
myWeeklyRow.currentStreak
|
|
7228
7332
|
] }) : dash,
|
|
7229
|
-
myWeeklyRow && /* @__PURE__ */
|
|
7333
|
+
myWeeklyRow && /* @__PURE__ */ jsx67("small", { children: ui.games.unitDays })
|
|
7230
7334
|
] })
|
|
7231
7335
|
] }),
|
|
7232
|
-
/* @__PURE__ */
|
|
7233
|
-
/* @__PURE__ */
|
|
7234
|
-
/* @__PURE__ */
|
|
7336
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
|
|
7337
|
+
/* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statToday }),
|
|
7338
|
+
/* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v ss-g-stat-v--accent", "data-testid": "stat-today", children: [
|
|
7235
7339
|
ui.games.formatPts(todayPts),
|
|
7236
|
-
/* @__PURE__ */
|
|
7340
|
+
/* @__PURE__ */ jsx67("small", { children: ui.games.unitPts })
|
|
7237
7341
|
] })
|
|
7238
7342
|
] }),
|
|
7239
|
-
/* @__PURE__ */
|
|
7240
|
-
/* @__PURE__ */
|
|
7241
|
-
/* @__PURE__ */
|
|
7343
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-stat", children: [
|
|
7344
|
+
/* @__PURE__ */ jsx67("span", { className: "ss-g-stat-l", children: ui.games.statRank }),
|
|
7345
|
+
/* @__PURE__ */ jsxs60("span", { className: "ss-g-stat-v", "data-testid": "stat-rank", children: [
|
|
7242
7346
|
myWeeklyRow ? `#${myWeeklyRow.rank}` : dash,
|
|
7243
|
-
myWeeklyRow && /* @__PURE__ */
|
|
7347
|
+
myWeeklyRow && /* @__PURE__ */ jsx67("small", { children: ui.games.thisWeek })
|
|
7244
7348
|
] })
|
|
7245
7349
|
] })
|
|
7246
7350
|
] }),
|
|
7247
|
-
weeklyPrize && /* @__PURE__ */
|
|
7248
|
-
hero && /* @__PURE__ */
|
|
7249
|
-
(grid.length > 0 || wide) && /* @__PURE__ */
|
|
7250
|
-
/* @__PURE__ */
|
|
7251
|
-
/* @__PURE__ */
|
|
7252
|
-
/* @__PURE__ */
|
|
7351
|
+
weeklyPrize && /* @__PURE__ */ jsx67(Chip, { variant: "accent", className: "ss-g-prize", children: weeklyPrize }),
|
|
7352
|
+
hero && /* @__PURE__ */ jsx67(GameTile, { game: hero, onOpen, ui, variant: "hero" }),
|
|
7353
|
+
(grid.length > 0 || wide) && /* @__PURE__ */ jsxs60("section", { className: "ss-g-sec", children: [
|
|
7354
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-sec-head", children: [
|
|
7355
|
+
/* @__PURE__ */ jsx67("h3", { children: ui.games.dailyGames }),
|
|
7356
|
+
/* @__PURE__ */ jsx67("span", { children: ui.games.newSetAtMidnight })
|
|
7253
7357
|
] }),
|
|
7254
|
-
grid.length > 0 && /* @__PURE__ */
|
|
7255
|
-
wide && /* @__PURE__ */
|
|
7358
|
+
grid.length > 0 && /* @__PURE__ */ jsx67("div", { className: "ss-g-grid", children: grid.map((g) => /* @__PURE__ */ jsx67(GameTile, { game: g, onOpen, ui }, tileKey(g))) }),
|
|
7359
|
+
wide && /* @__PURE__ */ jsx67(GameTile, { game: wide, onOpen, ui, variant: "wide" })
|
|
7256
7360
|
] }),
|
|
7257
|
-
fixtures.length > 0 && /* @__PURE__ */
|
|
7258
|
-
/* @__PURE__ */
|
|
7259
|
-
/* @__PURE__ */
|
|
7260
|
-
kickoffs[0] && /* @__PURE__ */
|
|
7361
|
+
fixtures.length > 0 && /* @__PURE__ */ jsxs60("section", { className: "ss-g-sec", children: [
|
|
7362
|
+
/* @__PURE__ */ jsxs60("div", { className: "ss-g-sec-head", children: [
|
|
7363
|
+
/* @__PURE__ */ jsx67("h3", { children: ui.games.matchdayGames }),
|
|
7364
|
+
kickoffs[0] && /* @__PURE__ */ jsx67("span", { children: ui.games.kickoffAt(ui.games.formatDayTime(kickoffs[0])) })
|
|
7261
7365
|
] }),
|
|
7262
|
-
/* @__PURE__ */
|
|
7366
|
+
/* @__PURE__ */ jsx67("div", { className: "ss-g-grid", children: fixtures.map((g) => /* @__PURE__ */ jsx67(GameTile, { game: g, onOpen, ui }, tileKey(g))) })
|
|
7263
7367
|
] })
|
|
7264
7368
|
] });
|
|
7265
7369
|
}
|
|
7266
7370
|
|
|
7267
7371
|
// src/components/GameScreenHost.tsx
|
|
7268
|
-
import { useEffect as useEffect29, useRef as useRef27, useState as
|
|
7372
|
+
import { useEffect as useEffect29, useRef as useRef27, useState as useState48 } from "react";
|
|
7269
7373
|
|
|
7270
7374
|
// src/useGamePlay.ts
|
|
7271
|
-
import { useCallback as useCallback20, useRef as useRef25, useState as
|
|
7375
|
+
import { useCallback as useCallback20, useRef as useRef25, useState as useState37 } from "react";
|
|
7272
7376
|
function toSubmitResult(payload) {
|
|
7273
7377
|
return {
|
|
7274
7378
|
// 'pending' means the play is recorded but awaiting resolution (fixture games)
|
|
@@ -7280,9 +7384,9 @@ function toSubmitResult(payload) {
|
|
|
7280
7384
|
};
|
|
7281
7385
|
}
|
|
7282
7386
|
function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh }) {
|
|
7283
|
-
const [result, setResult] =
|
|
7284
|
-
const [submitting, setSubmitting] =
|
|
7285
|
-
const [rawStatus, setRawStatus] =
|
|
7387
|
+
const [result, setResult] = useState37(null);
|
|
7388
|
+
const [submitting, setSubmitting] = useState37(false);
|
|
7389
|
+
const [rawStatus, setRawStatus] = useState37(null);
|
|
7286
7390
|
const inFlightRef = useRef25(false);
|
|
7287
7391
|
const convRef = useRef25(conversation);
|
|
7288
7392
|
convRef.current = conversation;
|
|
@@ -7340,7 +7444,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
|
|
|
7340
7444
|
}
|
|
7341
7445
|
|
|
7342
7446
|
// src/components/games/MysteryTigerGame.tsx
|
|
7343
|
-
import { useState as
|
|
7447
|
+
import { useState as useState39, useId as useId3 } from "react";
|
|
7344
7448
|
|
|
7345
7449
|
// src/components/games/nationFlags.ts
|
|
7346
7450
|
var FLAGS = {
|
|
@@ -7551,8 +7655,8 @@ function isNationCode(flag) {
|
|
|
7551
7655
|
}
|
|
7552
7656
|
|
|
7553
7657
|
// src/components/games/PlayerAvatar.tsx
|
|
7554
|
-
import { useState as
|
|
7555
|
-
import { jsx as
|
|
7658
|
+
import { useState as useState38 } from "react";
|
|
7659
|
+
import { jsx as jsx68 } from "react/jsx-runtime";
|
|
7556
7660
|
function initialsOf(name) {
|
|
7557
7661
|
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
7558
7662
|
const first = parts[0];
|
|
@@ -7569,41 +7673,41 @@ function PlayerAvatar({
|
|
|
7569
7673
|
imagePath,
|
|
7570
7674
|
className
|
|
7571
7675
|
}) {
|
|
7572
|
-
const [failed, setFailed] =
|
|
7676
|
+
const [failed, setFailed] = useState38(false);
|
|
7573
7677
|
const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
|
|
7574
|
-
return /* @__PURE__ */
|
|
7678
|
+
return /* @__PURE__ */ jsx68("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ jsx68("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx68("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
|
|
7575
7679
|
}
|
|
7576
7680
|
|
|
7577
7681
|
// src/components/games/ui/GameHeader.tsx
|
|
7578
|
-
import { jsx as
|
|
7682
|
+
import { jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
7579
7683
|
function GameHeader({ title, eyebrow, right, onBack, backLabel }) {
|
|
7580
|
-
return /* @__PURE__ */
|
|
7581
|
-
onBack && /* @__PURE__ */
|
|
7582
|
-
/* @__PURE__ */
|
|
7583
|
-
eyebrow && /* @__PURE__ */
|
|
7584
|
-
/* @__PURE__ */
|
|
7684
|
+
return /* @__PURE__ */ jsxs61("div", { className: "ss-g-head", children: [
|
|
7685
|
+
onBack && /* @__PURE__ */ jsx69("button", { type: "button", className: "ss-g-back", "aria-label": backLabel, onClick: onBack, children: /* @__PURE__ */ jsx69(IconChevronLeft, {}) }),
|
|
7686
|
+
/* @__PURE__ */ jsxs61("div", { className: "ss-g-head-text", children: [
|
|
7687
|
+
eyebrow && /* @__PURE__ */ jsx69("span", { className: "ss-g-eyebrow", children: eyebrow }),
|
|
7688
|
+
/* @__PURE__ */ jsx69("h2", { className: "ss-g-title", children: title })
|
|
7585
7689
|
] }),
|
|
7586
|
-
right && /* @__PURE__ */
|
|
7690
|
+
right && /* @__PURE__ */ jsx69("div", { className: "ss-g-head-right", children: right })
|
|
7587
7691
|
] });
|
|
7588
7692
|
}
|
|
7589
7693
|
|
|
7590
7694
|
// src/components/games/ui/SegmentProgress.tsx
|
|
7591
|
-
import { jsx as
|
|
7695
|
+
import { jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
7592
7696
|
function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right }) {
|
|
7593
|
-
return /* @__PURE__ */
|
|
7594
|
-
/* @__PURE__ */
|
|
7595
|
-
(leftLabel || rightLabel) && /* @__PURE__ */
|
|
7596
|
-
/* @__PURE__ */
|
|
7597
|
-
/* @__PURE__ */
|
|
7697
|
+
return /* @__PURE__ */ jsxs62("div", { className: "ss-g-progress", children: [
|
|
7698
|
+
/* @__PURE__ */ jsxs62("div", { className: "ss-g-progress-main", children: [
|
|
7699
|
+
(leftLabel || rightLabel) && /* @__PURE__ */ jsxs62("div", { className: "ss-g-progress-labels", children: [
|
|
7700
|
+
/* @__PURE__ */ jsx70("span", { children: leftLabel }),
|
|
7701
|
+
/* @__PURE__ */ jsx70("span", { className: "ss-g-progress-rl", children: rightLabel })
|
|
7598
7702
|
] }),
|
|
7599
|
-
/* @__PURE__ */
|
|
7703
|
+
/* @__PURE__ */ jsx70(
|
|
7600
7704
|
"div",
|
|
7601
7705
|
{
|
|
7602
7706
|
className: "ss-g-segs",
|
|
7603
7707
|
role: "img",
|
|
7604
7708
|
"aria-label": ariaLabel,
|
|
7605
7709
|
style: { gridTemplateColumns: `repeat(${segments.length}, minmax(0, 1fr))` },
|
|
7606
|
-
children: segments.map((s, i) => /* @__PURE__ */
|
|
7710
|
+
children: segments.map((s, i) => /* @__PURE__ */ jsx70("span", { className: "ss-g-seg", "data-state": s }, i))
|
|
7607
7711
|
}
|
|
7608
7712
|
)
|
|
7609
7713
|
] }),
|
|
@@ -7612,12 +7716,12 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
|
|
|
7612
7716
|
}
|
|
7613
7717
|
|
|
7614
7718
|
// src/components/games/ui/AnswerTray.tsx
|
|
7615
|
-
import { Fragment as
|
|
7719
|
+
import { Fragment as Fragment13, jsx as jsx71, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
7616
7720
|
function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
|
|
7617
7721
|
const needle = query.trim().toLowerCase();
|
|
7618
7722
|
const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
|
|
7619
|
-
return /* @__PURE__ */
|
|
7620
|
-
/* @__PURE__ */
|
|
7723
|
+
return /* @__PURE__ */ jsxs63(Fragment13, { children: [
|
|
7724
|
+
/* @__PURE__ */ jsx71(
|
|
7621
7725
|
SearchField,
|
|
7622
7726
|
{
|
|
7623
7727
|
id,
|
|
@@ -7629,9 +7733,9 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7629
7733
|
disabled
|
|
7630
7734
|
}
|
|
7631
7735
|
),
|
|
7632
|
-
shown.length > 0 && /* @__PURE__ */
|
|
7736
|
+
shown.length > 0 && /* @__PURE__ */ jsx71("div", { className: "ss-g-tray", role: "listbox", "aria-label": optionsLabel, children: shown.map((o) => {
|
|
7633
7737
|
const { first, last } = splitName(o.name);
|
|
7634
|
-
return /* @__PURE__ */
|
|
7738
|
+
return /* @__PURE__ */ jsxs63(
|
|
7635
7739
|
"button",
|
|
7636
7740
|
{
|
|
7637
7741
|
type: "button",
|
|
@@ -7642,10 +7746,10 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7642
7746
|
disabled,
|
|
7643
7747
|
onClick: () => onPick(o.id),
|
|
7644
7748
|
children: [
|
|
7645
|
-
/* @__PURE__ */
|
|
7646
|
-
/* @__PURE__ */
|
|
7647
|
-
first && /* @__PURE__ */
|
|
7648
|
-
/* @__PURE__ */
|
|
7749
|
+
/* @__PURE__ */ jsx71(PlayerAvatar, { className: "ss-g-tray-av", name: o.name, imagePath: o.imagePath }),
|
|
7750
|
+
/* @__PURE__ */ jsxs63("span", { className: "ss-g-tray-name", "aria-hidden": "true", children: [
|
|
7751
|
+
first && /* @__PURE__ */ jsx71("span", { className: "ss-g-tray-first", children: first }),
|
|
7752
|
+
/* @__PURE__ */ jsx71("span", { className: "ss-g-tray-last", children: last })
|
|
7649
7753
|
] })
|
|
7650
7754
|
]
|
|
7651
7755
|
},
|
|
@@ -7656,59 +7760,59 @@ function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQu
|
|
|
7656
7760
|
}
|
|
7657
7761
|
|
|
7658
7762
|
// src/components/games/ui/FooterBar.tsx
|
|
7659
|
-
import { jsx as
|
|
7763
|
+
import { jsx as jsx72 } from "react/jsx-runtime";
|
|
7660
7764
|
function FooterBar({ children }) {
|
|
7661
|
-
return /* @__PURE__ */
|
|
7765
|
+
return /* @__PURE__ */ jsx72("div", { className: "ss-g-footer", children });
|
|
7662
7766
|
}
|
|
7663
7767
|
|
|
7664
7768
|
// src/components/games/ui/Silhouette.tsx
|
|
7665
|
-
import { jsx as
|
|
7769
|
+
import { jsx as jsx73, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
7666
7770
|
function Silhouette({ size, variant = "default" }) {
|
|
7667
|
-
return /* @__PURE__ */
|
|
7668
|
-
/* @__PURE__ */
|
|
7669
|
-
/* @__PURE__ */
|
|
7670
|
-
/* @__PURE__ */
|
|
7771
|
+
return /* @__PURE__ */ jsxs64("span", { className: `ss-g-sil ss-g-sil--${variant}`, style: { width: size, height: size }, "aria-hidden": "true", children: [
|
|
7772
|
+
/* @__PURE__ */ jsxs64("svg", { width: size * 0.86, height: size * 0.86, viewBox: "0 0 100 100", children: [
|
|
7773
|
+
/* @__PURE__ */ jsx73("circle", { cx: "50", cy: "40", r: "19", fill: "currentColor" }),
|
|
7774
|
+
/* @__PURE__ */ jsx73("path", { d: "M12 100c0-23 17-38 38-38s38 15 38 38z", fill: "currentColor" })
|
|
7671
7775
|
] }),
|
|
7672
|
-
variant === "mystery" && /* @__PURE__ */
|
|
7776
|
+
variant === "mystery" && /* @__PURE__ */ jsx73("span", { className: "ss-g-sil-q", children: "?" })
|
|
7673
7777
|
] });
|
|
7674
7778
|
}
|
|
7675
7779
|
|
|
7676
7780
|
// src/components/games/ui/GameButton.tsx
|
|
7677
|
-
import { jsx as
|
|
7781
|
+
import { jsx as jsx74 } from "react/jsx-runtime";
|
|
7678
7782
|
function GameButton({ variant = "primary", block = false, className, type = "button", ...rest }) {
|
|
7679
7783
|
const cls = `ss-g-btn ss-g-btn--${variant}${block ? " ss-g-btn--block" : ""}${className ? ` ${className}` : ""}`;
|
|
7680
|
-
return /* @__PURE__ */
|
|
7784
|
+
return /* @__PURE__ */ jsx74("button", { type, className: cls, ...rest });
|
|
7681
7785
|
}
|
|
7682
7786
|
|
|
7683
7787
|
// src/components/games/ui/ResultCard.tsx
|
|
7684
|
-
import { jsx as
|
|
7788
|
+
import { jsx as jsx75, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
7685
7789
|
function ResultCard({ tone, title, score, detail, onBack, ui }) {
|
|
7686
|
-
return /* @__PURE__ */
|
|
7687
|
-
/* @__PURE__ */
|
|
7688
|
-
score !== void 0 && /* @__PURE__ */
|
|
7689
|
-
/* @__PURE__ */
|
|
7790
|
+
return /* @__PURE__ */ jsxs65("div", { className: "ss-g-result", "data-tone": tone, role: "status", children: [
|
|
7791
|
+
/* @__PURE__ */ jsx75("span", { className: "ss-g-result-title", children: title }),
|
|
7792
|
+
score !== void 0 && /* @__PURE__ */ jsxs65("span", { className: "ss-g-result-score", children: [
|
|
7793
|
+
/* @__PURE__ */ jsx75("span", { className: "ss-g-result-num", children: score }),
|
|
7690
7794
|
ui.games.unitPts
|
|
7691
7795
|
] }),
|
|
7692
|
-
detail && /* @__PURE__ */
|
|
7693
|
-
onBack && /* @__PURE__ */
|
|
7796
|
+
detail && /* @__PURE__ */ jsx75("span", { className: "ss-g-result-detail", children: detail }),
|
|
7797
|
+
onBack && /* @__PURE__ */ jsx75(GameButton, { variant: "outline", onClick: onBack, children: ui.games.backToGames })
|
|
7694
7798
|
] });
|
|
7695
7799
|
}
|
|
7696
7800
|
|
|
7697
7801
|
// src/components/games/ui/PointsLadderRow.tsx
|
|
7698
|
-
import { jsx as
|
|
7802
|
+
import { jsx as jsx76, jsxs as jsxs66 } from "react/jsx-runtime";
|
|
7699
7803
|
function PointsLadderRow({ ladder, guessesUsed, ui }) {
|
|
7700
7804
|
if (!ladder || ladder.length === 0) return null;
|
|
7701
7805
|
const now = ladder[Math.min(guessesUsed, ladder.length - 1)];
|
|
7702
7806
|
const next = ladder[guessesUsed + 1];
|
|
7703
7807
|
if (now === void 0) return null;
|
|
7704
|
-
return /* @__PURE__ */
|
|
7705
|
-
/* @__PURE__ */
|
|
7706
|
-
next !== void 0 && next !== now && /* @__PURE__ */
|
|
7808
|
+
return /* @__PURE__ */ jsxs66("div", { className: "ss-g-worth", "data-testid": "points-ladder", children: [
|
|
7809
|
+
/* @__PURE__ */ jsx76("span", { className: "ss-g-worth-now", children: ui.games.worthNow(now) }),
|
|
7810
|
+
next !== void 0 && next !== now && /* @__PURE__ */ jsx76("span", { className: "ss-g-worth-next", children: ui.games.worthAfterMiss(next) })
|
|
7707
7811
|
] });
|
|
7708
7812
|
}
|
|
7709
7813
|
|
|
7710
7814
|
// src/components/games/MysteryTigerGame.tsx
|
|
7711
|
-
import { Fragment as
|
|
7815
|
+
import { Fragment as Fragment14, jsx as jsx77, jsxs as jsxs67 } from "react/jsx-runtime";
|
|
7712
7816
|
function parseClientState(json) {
|
|
7713
7817
|
if (!json) return null;
|
|
7714
7818
|
try {
|
|
@@ -7810,7 +7914,7 @@ function MysteryTigerGame({
|
|
|
7810
7914
|
onBack
|
|
7811
7915
|
}) {
|
|
7812
7916
|
const t = ui.games.mysteryTiger;
|
|
7813
|
-
const [query, setQuery] =
|
|
7917
|
+
const [query, setQuery] = useState39("");
|
|
7814
7918
|
const inputId = useId3();
|
|
7815
7919
|
const clientState = parseClientState(result?.clientStateJson);
|
|
7816
7920
|
const guessResults = clientState?.guessResults ?? [];
|
|
@@ -7830,22 +7934,22 @@ function MysteryTigerGame({
|
|
|
7830
7934
|
setQuery("");
|
|
7831
7935
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
7832
7936
|
}
|
|
7833
|
-
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */
|
|
7937
|
+
const headerRight = !config ? void 0 : isOver ? /* @__PURE__ */ jsxs67(Chip, { variant: "accent", children: [
|
|
7834
7938
|
score,
|
|
7835
7939
|
" ",
|
|
7836
7940
|
ui.games.unitPts
|
|
7837
|
-
] }) : /* @__PURE__ */
|
|
7941
|
+
] }) : /* @__PURE__ */ jsx77("span", { "data-testid": "mt-chip", children: /* @__PURE__ */ jsxs67(Chip, { children: [
|
|
7838
7942
|
ui.games.guess,
|
|
7839
7943
|
" ",
|
|
7840
|
-
/* @__PURE__ */
|
|
7944
|
+
/* @__PURE__ */ jsx77("span", { className: "ss-g-num", children: guessesUsed + 1 }),
|
|
7841
7945
|
" / ",
|
|
7842
7946
|
totalGuesses
|
|
7843
7947
|
] }) });
|
|
7844
7948
|
const segments = Array.from({ length: totalGuesses }, (_, i) => i < guessesUsed ? "done" : i === guessesUsed ? "current" : "todo");
|
|
7845
7949
|
const cols = { gridTemplateColumns: `minmax(0, 1fr) repeat(${keys.length}, 42px)` };
|
|
7846
7950
|
const known = deriveKnownAttributes(guessResults, keys);
|
|
7847
|
-
return /* @__PURE__ */
|
|
7848
|
-
/* @__PURE__ */
|
|
7951
|
+
return /* @__PURE__ */ jsxs67("div", { className: "ss-g-screen ss-g-mt", "data-game": "mystery-tiger", "data-testid": "game-screen-mystery-tiger", children: [
|
|
7952
|
+
/* @__PURE__ */ jsx77(
|
|
7849
7953
|
GameHeader,
|
|
7850
7954
|
{
|
|
7851
7955
|
title: gameTitle({ gameId: "mystery-tiger" }, ui.games.titles),
|
|
@@ -7855,41 +7959,41 @@ function MysteryTigerGame({
|
|
|
7855
7959
|
backLabel: ui.back
|
|
7856
7960
|
}
|
|
7857
7961
|
),
|
|
7858
|
-
!config && /* @__PURE__ */
|
|
7859
|
-
config && /* @__PURE__ */
|
|
7860
|
-
/* @__PURE__ */
|
|
7861
|
-
!isOver && /* @__PURE__ */
|
|
7862
|
-
/* @__PURE__ */
|
|
7863
|
-
/* @__PURE__ */
|
|
7864
|
-
revealName ? /* @__PURE__ */
|
|
7865
|
-
revealName && /* @__PURE__ */
|
|
7962
|
+
!config && /* @__PURE__ */ jsx77("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
7963
|
+
config && /* @__PURE__ */ jsxs67(Fragment14, { children: [
|
|
7964
|
+
/* @__PURE__ */ jsxs67("div", { className: "ss-g-body", children: [
|
|
7965
|
+
!isOver && /* @__PURE__ */ jsx77(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
|
|
7966
|
+
/* @__PURE__ */ jsxs67("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
|
|
7967
|
+
/* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-portrait", children: [
|
|
7968
|
+
revealName ? /* @__PURE__ */ jsx77(PlayerAvatar, { className: "ss-g-mt-photo", name: revealName, imagePath: clientState?.revealedPlayerImagePath }) : /* @__PURE__ */ jsx77(Silhouette, { size: 150, variant: "mystery" }),
|
|
7969
|
+
revealName && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-reveal-name", children: revealName })
|
|
7866
7970
|
] }),
|
|
7867
|
-
/* @__PURE__ */
|
|
7868
|
-
/* @__PURE__ */
|
|
7869
|
-
/* @__PURE__ */
|
|
7971
|
+
/* @__PURE__ */ jsx77("div", { className: "ss-g-mt-known", style: { gridTemplateColumns: `repeat(${keys.length}, minmax(0, 1fr))` }, children: known.map((k) => /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-known-cell", children: [
|
|
7972
|
+
/* @__PURE__ */ jsx77("span", { className: "ss-g-mt-lab", children: t.labels[k.key] }),
|
|
7973
|
+
/* @__PURE__ */ jsx77("span", { className: "ss-g-mt-known-v", "data-state": k.state, "data-testid": `known-${k.key}`, children: k.text })
|
|
7870
7974
|
] }, k.key)) })
|
|
7871
7975
|
] }),
|
|
7872
|
-
!isOver && /* @__PURE__ */
|
|
7873
|
-
guessResults.length > 0 && /* @__PURE__ */
|
|
7874
|
-
/* @__PURE__ */
|
|
7875
|
-
/* @__PURE__ */
|
|
7876
|
-
keys.map((k) => /* @__PURE__ */
|
|
7976
|
+
!isOver && /* @__PURE__ */ jsx77(SegmentProgress, { segments, ariaLabel: t.progress(guessesUsed, totalGuesses) }),
|
|
7977
|
+
guessResults.length > 0 && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-table", children: [
|
|
7978
|
+
/* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-thead", style: cols, children: [
|
|
7979
|
+
/* @__PURE__ */ jsx77("span", { children: t.yourGuesses }),
|
|
7980
|
+
keys.map((k) => /* @__PURE__ */ jsx77("span", { children: t.labels[k] }, k))
|
|
7877
7981
|
] }),
|
|
7878
7982
|
guessResults.map((gr, i) => {
|
|
7879
7983
|
const name = config.squadPlayers.find((p) => p.id === gr.playerId)?.name ?? `#${gr.playerId}`;
|
|
7880
7984
|
const { first, last } = splitName(name);
|
|
7881
|
-
return /* @__PURE__ */
|
|
7882
|
-
/* @__PURE__ */
|
|
7883
|
-
/* @__PURE__ */
|
|
7884
|
-
/* @__PURE__ */
|
|
7885
|
-
first && /* @__PURE__ */
|
|
7886
|
-
/* @__PURE__ */
|
|
7985
|
+
return /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-row", style: cols, children: [
|
|
7986
|
+
/* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-who", children: [
|
|
7987
|
+
/* @__PURE__ */ jsx77(PlayerAvatar, { className: "ss-g-mt-av", name }),
|
|
7988
|
+
/* @__PURE__ */ jsxs67("span", { className: "ss-g-mt-names", children: [
|
|
7989
|
+
first && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-first", children: first }),
|
|
7990
|
+
/* @__PURE__ */ jsx77("span", { className: "ss-g-mt-last", children: last })
|
|
7887
7991
|
] })
|
|
7888
7992
|
] }),
|
|
7889
7993
|
keys.map((key) => {
|
|
7890
7994
|
const v = gr[key];
|
|
7891
7995
|
const arrow = directionArrow(v);
|
|
7892
|
-
return /* @__PURE__ */
|
|
7996
|
+
return /* @__PURE__ */ jsxs67(
|
|
7893
7997
|
"div",
|
|
7894
7998
|
{
|
|
7895
7999
|
className: "ss-g-mt-cell",
|
|
@@ -7897,8 +8001,8 @@ function MysteryTigerGame({
|
|
|
7897
8001
|
"data-verdict": v.verdict,
|
|
7898
8002
|
"aria-label": `${t.labels[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
|
|
7899
8003
|
children: [
|
|
7900
|
-
/* @__PURE__ */
|
|
7901
|
-
arrow && /* @__PURE__ */
|
|
8004
|
+
/* @__PURE__ */ jsx77("span", { className: "ss-g-mt-cell-v", "aria-hidden": "true", children: tileFace(key, v) }),
|
|
8005
|
+
arrow && /* @__PURE__ */ jsx77("span", { className: "ss-g-mt-cell-dir", "aria-hidden": "true", children: arrow })
|
|
7902
8006
|
]
|
|
7903
8007
|
},
|
|
7904
8008
|
key
|
|
@@ -7907,25 +8011,25 @@ function MysteryTigerGame({
|
|
|
7907
8011
|
] }, gr.playerId);
|
|
7908
8012
|
})
|
|
7909
8013
|
] }),
|
|
7910
|
-
!isOver && /* @__PURE__ */
|
|
7911
|
-
/* @__PURE__ */
|
|
7912
|
-
/* @__PURE__ */
|
|
8014
|
+
!isOver && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-legend", children: [
|
|
8015
|
+
/* @__PURE__ */ jsxs67("span", { children: [
|
|
8016
|
+
/* @__PURE__ */ jsx77("i", { className: "ss-g-mt-sw", "data-verdict": "exact" }),
|
|
7913
8017
|
t.legendMatch
|
|
7914
8018
|
] }),
|
|
7915
|
-
/* @__PURE__ */
|
|
7916
|
-
/* @__PURE__ */
|
|
8019
|
+
/* @__PURE__ */ jsxs67("span", { children: [
|
|
8020
|
+
/* @__PURE__ */ jsx77("i", { className: "ss-g-mt-sw", "data-verdict": "near" }),
|
|
7917
8021
|
t.legendClose
|
|
7918
8022
|
] }),
|
|
7919
|
-
/* @__PURE__ */
|
|
8023
|
+
/* @__PURE__ */ jsxs67("span", { children: [
|
|
7920
8024
|
"\u25B2 ",
|
|
7921
8025
|
t.legendHigher
|
|
7922
8026
|
] })
|
|
7923
8027
|
] }),
|
|
7924
|
-
clientState?.hintLine && !isOver && /* @__PURE__ */
|
|
7925
|
-
/* @__PURE__ */
|
|
7926
|
-
/* @__PURE__ */
|
|
8028
|
+
clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs67("div", { className: "ss-g-mt-hint", children: [
|
|
8029
|
+
/* @__PURE__ */ jsx77(IconBulb, {}),
|
|
8030
|
+
/* @__PURE__ */ jsx77("span", { children: clientState.hintLine })
|
|
7927
8031
|
] }),
|
|
7928
|
-
isOver && /* @__PURE__ */
|
|
8032
|
+
isOver && /* @__PURE__ */ jsx77(
|
|
7929
8033
|
ResultCard,
|
|
7930
8034
|
{
|
|
7931
8035
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -7937,7 +8041,7 @@ function MysteryTigerGame({
|
|
|
7937
8041
|
}
|
|
7938
8042
|
)
|
|
7939
8043
|
] }),
|
|
7940
|
-
!isOver && /* @__PURE__ */
|
|
8044
|
+
!isOver && /* @__PURE__ */ jsx77(FooterBar, { children: /* @__PURE__ */ jsx77(
|
|
7941
8045
|
AnswerTray,
|
|
7942
8046
|
{
|
|
7943
8047
|
id: inputId,
|
|
@@ -7956,7 +8060,7 @@ function MysteryTigerGame({
|
|
|
7956
8060
|
}
|
|
7957
8061
|
|
|
7958
8062
|
// src/components/games/HigherOrLowerGame.tsx
|
|
7959
|
-
import { Fragment as
|
|
8063
|
+
import { Fragment as Fragment15, jsx as jsx78, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
7960
8064
|
var POINTS_PER_CORRECT = 10;
|
|
7961
8065
|
function parseClientState2(json) {
|
|
7962
8066
|
if (!json) return null;
|
|
@@ -7968,11 +8072,11 @@ function parseClientState2(json) {
|
|
|
7968
8072
|
}
|
|
7969
8073
|
function PlayerCard({ name, imagePath, highlight, children }) {
|
|
7970
8074
|
const { first, last } = splitName(name);
|
|
7971
|
-
return /* @__PURE__ */
|
|
7972
|
-
/* @__PURE__ */
|
|
7973
|
-
/* @__PURE__ */
|
|
7974
|
-
first && /* @__PURE__ */
|
|
7975
|
-
/* @__PURE__ */
|
|
8075
|
+
return /* @__PURE__ */ jsxs68("div", { className: `ss-g-hl-card${highlight ? " ss-g-hl-card--b" : ""}`, children: [
|
|
8076
|
+
/* @__PURE__ */ jsx78("div", { className: "ss-g-hl-photo-wrap", children: imagePath ? /* @__PURE__ */ jsx78(PlayerAvatar, { className: "ss-g-hl-photo", name, imagePath }) : /* @__PURE__ */ jsx78(Silhouette, { size: 150 }) }),
|
|
8077
|
+
/* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-info", children: [
|
|
8078
|
+
first && /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-first", children: first }),
|
|
8079
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-surname", children: last }),
|
|
7976
8080
|
children
|
|
7977
8081
|
] })
|
|
7978
8082
|
] });
|
|
@@ -8004,47 +8108,47 @@ function HigherOrLowerGame({
|
|
|
8004
8108
|
const newAnswers = [...prevAnswers, { pairIndex: currentPair.pairIndex, pick }];
|
|
8005
8109
|
onSubmit(JSON.stringify({ answers: newAnswers }));
|
|
8006
8110
|
}
|
|
8007
|
-
return /* @__PURE__ */
|
|
8008
|
-
/* @__PURE__ */
|
|
8111
|
+
return /* @__PURE__ */ jsxs68("div", { className: "ss-g-screen ss-g-hl", "data-game": "higher-or-lower", "data-testid": "game-screen-higher-or-lower", children: [
|
|
8112
|
+
/* @__PURE__ */ jsx78(
|
|
8009
8113
|
GameHeader,
|
|
8010
8114
|
{
|
|
8011
8115
|
title: gameTitle({ gameId: "higher-or-lower" }, ui.games.titles),
|
|
8012
8116
|
eyebrow: t.eyebrow(POINTS_PER_CORRECT),
|
|
8013
|
-
right: config ? /* @__PURE__ */
|
|
8117
|
+
right: config ? /* @__PURE__ */ jsx78(StatStack, { value: runLength, label: t.streak }) : void 0,
|
|
8014
8118
|
onBack,
|
|
8015
8119
|
backLabel: ui.back
|
|
8016
8120
|
}
|
|
8017
8121
|
),
|
|
8018
|
-
!config && /* @__PURE__ */
|
|
8019
|
-
config && /* @__PURE__ */
|
|
8020
|
-
/* @__PURE__ */
|
|
8021
|
-
/* @__PURE__ */
|
|
8022
|
-
/* @__PURE__ */
|
|
8023
|
-
/* @__PURE__ */
|
|
8024
|
-
/* @__PURE__ */
|
|
8122
|
+
!config && /* @__PURE__ */ jsx78("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
8123
|
+
config && /* @__PURE__ */ jsxs68(Fragment15, { children: [
|
|
8124
|
+
/* @__PURE__ */ jsxs68("div", { className: "ss-g-body", children: [
|
|
8125
|
+
/* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
|
|
8126
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
|
|
8127
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-stat", children: config.statLabel }),
|
|
8128
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-prompt-season", children: t.season(config.seasonLabel) })
|
|
8025
8129
|
] }),
|
|
8026
|
-
currentPair && /* @__PURE__ */
|
|
8027
|
-
/* @__PURE__ */
|
|
8028
|
-
/* @__PURE__ */
|
|
8029
|
-
/* @__PURE__ */
|
|
8130
|
+
currentPair && /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-pair", children: [
|
|
8131
|
+
/* @__PURE__ */ jsxs68(PlayerCard, { name: currentPair.playerAName, imagePath: currentPair.playerAImagePath, children: [
|
|
8132
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-value", children: currentPair.playerAValue }),
|
|
8133
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-stat", children: config.statLabel })
|
|
8030
8134
|
] }),
|
|
8031
|
-
/* @__PURE__ */
|
|
8032
|
-
/* @__PURE__ */
|
|
8033
|
-
/* @__PURE__ */
|
|
8034
|
-
/* @__PURE__ */
|
|
8135
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-vs", "aria-hidden": "true", children: t.vs }),
|
|
8136
|
+
/* @__PURE__ */ jsx78(PlayerCard, { name: currentPair.playerBName, imagePath: currentPair.playerBImagePath, highlight: true, children: /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-btns", children: [
|
|
8137
|
+
/* @__PURE__ */ jsxs68(GameButton, { variant: "primary", disabled: submitting, onClick: () => handlePick("higher"), children: [
|
|
8138
|
+
/* @__PURE__ */ jsx78(IconArrowUp, { size: 16 }),
|
|
8035
8139
|
t.higher
|
|
8036
8140
|
] }),
|
|
8037
|
-
/* @__PURE__ */
|
|
8038
|
-
/* @__PURE__ */
|
|
8141
|
+
/* @__PURE__ */ jsxs68(GameButton, { variant: "outline", disabled: submitting, onClick: () => handlePick("lower"), children: [
|
|
8142
|
+
/* @__PURE__ */ jsx78(IconArrowDown, { size: 16 }),
|
|
8039
8143
|
t.lower
|
|
8040
8144
|
] })
|
|
8041
8145
|
] }) })
|
|
8042
8146
|
] }),
|
|
8043
|
-
lastAnswer && lastAnswerPair && /* @__PURE__ */
|
|
8044
|
-
lastAnswer.wasCorrect ? /* @__PURE__ */
|
|
8147
|
+
lastAnswer && lastAnswerPair && /* @__PURE__ */ jsxs68("p", { className: "ss-g-hl-feedback", "data-testid": "hol-last", "data-correct": lastAnswer.wasCorrect ? "true" : "false", children: [
|
|
8148
|
+
lastAnswer.wasCorrect ? /* @__PURE__ */ jsx78(IconCheck, {}) : /* @__PURE__ */ jsx78(IconClose, {}),
|
|
8045
8149
|
t.lastAnswer(splitName(lastAnswerPair.playerBName).last, lastAnswer.playerBValue)
|
|
8046
8150
|
] }),
|
|
8047
|
-
isOver && /* @__PURE__ */
|
|
8151
|
+
isOver && /* @__PURE__ */ jsx78(
|
|
8048
8152
|
ResultCard,
|
|
8049
8153
|
{
|
|
8050
8154
|
tone: runEndedWrong ? "lose" : allPairsAnswered ? "win" : "neutral",
|
|
@@ -8056,15 +8160,15 @@ function HigherOrLowerGame({
|
|
|
8056
8160
|
}
|
|
8057
8161
|
)
|
|
8058
8162
|
] }),
|
|
8059
|
-
!isOver && /* @__PURE__ */
|
|
8060
|
-
/* @__PURE__ */
|
|
8163
|
+
!isOver && /* @__PURE__ */ jsx78(FooterBar, { children: /* @__PURE__ */ jsxs68("div", { className: "ss-g-hl-foot", children: [
|
|
8164
|
+
/* @__PURE__ */ jsx78("div", { className: "ss-g-hl-dots", role: "img", "aria-label": t.answersSoFar(answeredCount, config.pairs.length), children: config.pairs.map((p, i) => {
|
|
8061
8165
|
const a = answeredPairs[i];
|
|
8062
|
-
return /* @__PURE__ */
|
|
8166
|
+
return /* @__PURE__ */ jsx78("span", { className: "ss-g-hl-dot", "data-state": a ? a.wasCorrect ? "correct" : "wrong" : "todo" }, p.pairIndex);
|
|
8063
8167
|
}) }),
|
|
8064
|
-
/* @__PURE__ */
|
|
8065
|
-
/* @__PURE__ */
|
|
8168
|
+
/* @__PURE__ */ jsxs68("span", { className: "ss-g-hl-pts", children: [
|
|
8169
|
+
/* @__PURE__ */ jsx78("span", { "data-testid": "hol-score", children: score }),
|
|
8066
8170
|
" ",
|
|
8067
|
-
/* @__PURE__ */
|
|
8171
|
+
/* @__PURE__ */ jsx78("span", { className: "ss-g-hl-pts-unit", children: ui.games.unitPts })
|
|
8068
8172
|
] })
|
|
8069
8173
|
] }) })
|
|
8070
8174
|
] })
|
|
@@ -8072,21 +8176,21 @@ function HigherOrLowerGame({
|
|
|
8072
8176
|
}
|
|
8073
8177
|
|
|
8074
8178
|
// src/components/games/CareerPathGame.tsx
|
|
8075
|
-
import { useState as
|
|
8179
|
+
import { useState as useState41, useId as useId4 } from "react";
|
|
8076
8180
|
|
|
8077
8181
|
// src/components/games/ui/CrestShield.tsx
|
|
8078
|
-
import { useState as
|
|
8079
|
-
import { jsx as
|
|
8182
|
+
import { useState as useState40 } from "react";
|
|
8183
|
+
import { jsx as jsx79 } from "react/jsx-runtime";
|
|
8080
8184
|
function CrestShield({ src, name, size = 28 }) {
|
|
8081
|
-
const [failed, setFailed] =
|
|
8185
|
+
const [failed, setFailed] = useState40(false);
|
|
8082
8186
|
if (src && !isPlaceholderImage(src) && !failed) {
|
|
8083
|
-
return /* @__PURE__ */
|
|
8187
|
+
return /* @__PURE__ */ jsx79("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
|
|
8084
8188
|
}
|
|
8085
|
-
return /* @__PURE__ */
|
|
8189
|
+
return /* @__PURE__ */ jsx79("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__ */ jsx79("path", { d: "M2 3h24v12c0 9-6 14-12 17C8 29 2 24 2 15z", fill: "currentColor" }) });
|
|
8086
8190
|
}
|
|
8087
8191
|
|
|
8088
8192
|
// src/components/games/CareerPathGame.tsx
|
|
8089
|
-
import { Fragment as
|
|
8193
|
+
import { Fragment as Fragment16, jsx as jsx80, jsxs as jsxs69 } from "react/jsx-runtime";
|
|
8090
8194
|
function parseClientState3(json) {
|
|
8091
8195
|
if (!json) return null;
|
|
8092
8196
|
try {
|
|
@@ -8110,15 +8214,15 @@ function CareerPathGame({
|
|
|
8110
8214
|
}) {
|
|
8111
8215
|
const s = ui.games.careerPath;
|
|
8112
8216
|
const title = gameTitle({ gameId: "career-path" }, ui.games.titles);
|
|
8113
|
-
const [query, setQuery] =
|
|
8217
|
+
const [query, setQuery] = useState41("");
|
|
8114
8218
|
const inputId = useId4();
|
|
8115
8219
|
const clientState = parseClientState3(result?.clientStateJson);
|
|
8116
8220
|
const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
|
|
8117
8221
|
const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
|
|
8118
8222
|
if (!config) {
|
|
8119
|
-
return /* @__PURE__ */
|
|
8120
|
-
/* @__PURE__ */
|
|
8121
|
-
/* @__PURE__ */
|
|
8223
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
8224
|
+
/* @__PURE__ */ jsx80(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
8225
|
+
/* @__PURE__ */ jsx80("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8122
8226
|
] });
|
|
8123
8227
|
}
|
|
8124
8228
|
const visiblePath = clientState?.visiblePath ?? config.initialPath;
|
|
@@ -8132,61 +8236,61 @@ function CareerPathGame({
|
|
|
8132
8236
|
setQuery("");
|
|
8133
8237
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
8134
8238
|
}
|
|
8135
|
-
const right = !isOver && clientState ? /* @__PURE__ */
|
|
8239
|
+
const right = !isOver && clientState ? /* @__PURE__ */ jsx80("span", { "data-testid": "cp-guess-chip", children: /* @__PURE__ */ jsxs69(Chip, { variant: "neutral", children: [
|
|
8136
8240
|
ui.games.guess,
|
|
8137
8241
|
" ",
|
|
8138
|
-
/* @__PURE__ */
|
|
8242
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-num", children: clientState.guessesUsed + 1 }),
|
|
8139
8243
|
" / ",
|
|
8140
8244
|
clientState.guessesUsed + clientState.guessesRemaining
|
|
8141
8245
|
] }) }) : void 0;
|
|
8142
8246
|
const outcome = clientState?.solved ? s.solved : clientState?.failed ? s.failed : ui.games.done;
|
|
8143
|
-
return /* @__PURE__ */
|
|
8144
|
-
/* @__PURE__ */
|
|
8145
|
-
/* @__PURE__ */
|
|
8146
|
-
!isOver && /* @__PURE__ */
|
|
8147
|
-
/* @__PURE__ */
|
|
8148
|
-
isOver && clientState?.revealedPlayerName ? /* @__PURE__ */
|
|
8149
|
-
/* @__PURE__ */
|
|
8150
|
-
/* @__PURE__ */
|
|
8151
|
-
clientState?.hintLine ? /* @__PURE__ */
|
|
8152
|
-
/* @__PURE__ */
|
|
8153
|
-
/* @__PURE__ */
|
|
8247
|
+
return /* @__PURE__ */ jsxs69("div", { className: "ss-g-screen", "data-game": "career-path", "data-testid": "game-screen-career-path", children: [
|
|
8248
|
+
/* @__PURE__ */ jsx80(GameHeader, { title, eyebrow: s.eyebrow, right, onBack, backLabel: ui.back }),
|
|
8249
|
+
/* @__PURE__ */ jsxs69("div", { className: "ss-g-body", children: [
|
|
8250
|
+
!isOver && /* @__PURE__ */ jsx80(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessesUsed ?? 0, ui }),
|
|
8251
|
+
/* @__PURE__ */ jsxs69("div", { className: "ss-g-cp-card", children: [
|
|
8252
|
+
isOver && clientState?.revealedPlayerName ? /* @__PURE__ */ jsx80(PlayerAvatar, { className: "ss-g-cp-photo", name: clientState.revealedPlayerName, imagePath: clientState.revealedPlayerImagePath }) : /* @__PURE__ */ jsx80(Silhouette, { size: 64, variant: isOver ? "default" : "mystery" }),
|
|
8253
|
+
/* @__PURE__ */ jsxs69("div", { className: "ss-g-cp-card-text", children: [
|
|
8254
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-card-title", children: isOver && clientState?.revealedPlayerName ? clientState.revealedPlayerName : s.mysteryPlayer }),
|
|
8255
|
+
clientState?.hintLine ? /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-hint", children: clientState.hintLine }) : !isOver ? /* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-locks", children: [
|
|
8256
|
+
/* @__PURE__ */ jsx80(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx80(IconLock, { size: 11 }), children: s.lockPosition }),
|
|
8257
|
+
/* @__PURE__ */ jsx80(Chip, { variant: "lock", icon: /* @__PURE__ */ jsx80(IconLock, { size: 11 }), children: s.lockNationality })
|
|
8154
8258
|
] }) : null
|
|
8155
8259
|
] })
|
|
8156
8260
|
] }),
|
|
8157
|
-
/* @__PURE__ */
|
|
8261
|
+
/* @__PURE__ */ jsxs69("ol", { className: "ss-g-cp-line", children: [
|
|
8158
8262
|
visiblePath.map((spell, i) => {
|
|
8159
8263
|
const years = i === 0 ? s.firstClub : spellYears(spell);
|
|
8160
|
-
return /* @__PURE__ */
|
|
8161
|
-
/* @__PURE__ */
|
|
8162
|
-
/* @__PURE__ */
|
|
8163
|
-
/* @__PURE__ */
|
|
8264
|
+
return /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step", children: [
|
|
8265
|
+
/* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-rail", children: [
|
|
8266
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile", children: /* @__PURE__ */ jsx80(CrestShield, { src: spell.crestUrl, name: spell.clubName, size: 30 }) }),
|
|
8267
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-conn", "aria-hidden": "true" })
|
|
8164
8268
|
] }),
|
|
8165
|
-
/* @__PURE__ */
|
|
8166
|
-
/* @__PURE__ */
|
|
8167
|
-
/* @__PURE__ */
|
|
8168
|
-
/* @__PURE__ */
|
|
8169
|
-
spell.isLoan && /* @__PURE__ */
|
|
8269
|
+
/* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-step-text", children: [
|
|
8270
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-club", children: spell.clubName }),
|
|
8271
|
+
/* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-sub", children: [
|
|
8272
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-years", children: years }),
|
|
8273
|
+
spell.isLoan && /* @__PURE__ */ jsxs69(Fragment16, { children: [
|
|
8170
8274
|
years ? " \xB7 " : "",
|
|
8171
|
-
/* @__PURE__ */
|
|
8275
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-loan", children: s.loan })
|
|
8172
8276
|
] })
|
|
8173
8277
|
] })
|
|
8174
8278
|
] })
|
|
8175
8279
|
] }, `${spell.clubName}-${i}`);
|
|
8176
8280
|
}),
|
|
8177
|
-
hidden > 0 && /* @__PURE__ */
|
|
8178
|
-
/* @__PURE__ */
|
|
8179
|
-
/* @__PURE__ */
|
|
8180
|
-
hidden > 1 && /* @__PURE__ */
|
|
8281
|
+
hidden > 0 && /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step ss-g-cp-step--hidden", children: [
|
|
8282
|
+
/* @__PURE__ */ jsxs69("span", { className: "ss-g-cp-rail", children: [
|
|
8283
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile ss-g-cp-tile--locked", children: /* @__PURE__ */ jsx80(IconLock, { size: 18 }) }),
|
|
8284
|
+
hidden > 1 && /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-conn ss-g-cp-conn--faint", "aria-hidden": "true" })
|
|
8181
8285
|
] }),
|
|
8182
|
-
/* @__PURE__ */
|
|
8286
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-sub", children: s.nextClubHidden }) })
|
|
8183
8287
|
] }),
|
|
8184
|
-
hidden > 1 && /* @__PURE__ */
|
|
8185
|
-
/* @__PURE__ */
|
|
8186
|
-
/* @__PURE__ */
|
|
8288
|
+
hidden > 1 && /* @__PURE__ */ jsxs69("li", { className: "ss-g-cp-step ss-g-cp-step--more", children: [
|
|
8289
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-rail", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-tile ss-g-cp-tile--faint", children: /* @__PURE__ */ jsx80(IconLock, { size: 18 }) }) }),
|
|
8290
|
+
/* @__PURE__ */ jsx80("span", { className: "ss-g-cp-step-text", children: /* @__PURE__ */ jsx80("span", { className: "ss-g-cp-sub", children: s.moreClubs(hidden - 1) }) })
|
|
8187
8291
|
] })
|
|
8188
8292
|
] }),
|
|
8189
|
-
isOver && /* @__PURE__ */
|
|
8293
|
+
isOver && /* @__PURE__ */ jsx80(
|
|
8190
8294
|
ResultCard,
|
|
8191
8295
|
{
|
|
8192
8296
|
tone: clientState?.solved ? "win" : clientState?.failed ? "lose" : "neutral",
|
|
@@ -8198,7 +8302,7 @@ function CareerPathGame({
|
|
|
8198
8302
|
}
|
|
8199
8303
|
)
|
|
8200
8304
|
] }),
|
|
8201
|
-
!isOver && /* @__PURE__ */
|
|
8305
|
+
!isOver && /* @__PURE__ */ jsx80(FooterBar, { children: /* @__PURE__ */ jsx80(
|
|
8202
8306
|
AnswerTray,
|
|
8203
8307
|
{
|
|
8204
8308
|
id: inputId,
|
|
@@ -8217,16 +8321,16 @@ function CareerPathGame({
|
|
|
8217
8321
|
}
|
|
8218
8322
|
|
|
8219
8323
|
// src/components/games/BeatTheGridGame.tsx
|
|
8220
|
-
import React, { useEffect as useEffect28, useId as useId5, useRef as useRef26, useState as
|
|
8324
|
+
import React, { useEffect as useEffect28, useId as useId5, useRef as useRef26, useState as useState42 } from "react";
|
|
8221
8325
|
|
|
8222
8326
|
// src/components/games/ui/OptionList.tsx
|
|
8223
|
-
import { jsx as
|
|
8327
|
+
import { jsx as jsx81 } from "react/jsx-runtime";
|
|
8224
8328
|
function OptionList({ label, options, onPick }) {
|
|
8225
|
-
return /* @__PURE__ */
|
|
8329
|
+
return /* @__PURE__ */ jsx81("div", { className: "ss-g-opts", role: "listbox", "aria-label": label, children: options.map((o) => /* @__PURE__ */ jsx81("button", { type: "button", role: "option", "aria-selected": false, className: "ss-g-opt", onClick: () => onPick(o.key), children: o.content }, o.key)) });
|
|
8226
8330
|
}
|
|
8227
8331
|
|
|
8228
8332
|
// src/components/games/BeatTheGridGame.tsx
|
|
8229
|
-
import { Fragment as
|
|
8333
|
+
import { Fragment as Fragment17, jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
|
|
8230
8334
|
function criterionIconKind(label, key) {
|
|
8231
8335
|
const l = (key ?? label).toLowerCase();
|
|
8232
8336
|
if (l.includes("app")) return "calendar";
|
|
@@ -8244,34 +8348,34 @@ function rowAbbrev(label, map, key) {
|
|
|
8244
8348
|
function CriterionIcon({ kind }) {
|
|
8245
8349
|
switch (kind) {
|
|
8246
8350
|
case "calendar":
|
|
8247
|
-
return /* @__PURE__ */
|
|
8351
|
+
return /* @__PURE__ */ jsx82(IconCalendar, {});
|
|
8248
8352
|
case "ball":
|
|
8249
|
-
return /* @__PURE__ */
|
|
8353
|
+
return /* @__PURE__ */ jsx82(IconBall, {});
|
|
8250
8354
|
case "boot":
|
|
8251
|
-
return /* @__PURE__ */
|
|
8355
|
+
return /* @__PURE__ */ jsx82(IconBoot, {});
|
|
8252
8356
|
case "gloves":
|
|
8253
|
-
return /* @__PURE__ */
|
|
8357
|
+
return /* @__PURE__ */ jsx82(IconGloves, {});
|
|
8254
8358
|
case "shield":
|
|
8255
|
-
return /* @__PURE__ */
|
|
8359
|
+
return /* @__PURE__ */ jsx82(IconShield, {});
|
|
8256
8360
|
default:
|
|
8257
|
-
return /* @__PURE__ */
|
|
8361
|
+
return /* @__PURE__ */ jsx82(IconFlag, {});
|
|
8258
8362
|
}
|
|
8259
8363
|
}
|
|
8260
8364
|
function HeaderVisual({ label, textKey: iKey, meta }) {
|
|
8261
8365
|
if (!meta) {
|
|
8262
|
-
return /* @__PURE__ */
|
|
8366
|
+
return /* @__PURE__ */ jsx82(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
8263
8367
|
}
|
|
8264
8368
|
switch (meta.kind) {
|
|
8265
8369
|
case "club":
|
|
8266
|
-
return /* @__PURE__ */
|
|
8370
|
+
return /* @__PURE__ */ jsx82(CrestShield, { src: meta.imageUrl, name: label, size: 24 });
|
|
8267
8371
|
case "coach":
|
|
8268
|
-
return /* @__PURE__ */
|
|
8372
|
+
return /* @__PURE__ */ jsx82(PlayerAvatar, { name: label, imagePath: meta.imageUrl, className: "ss-g-btg-coach-av" });
|
|
8269
8373
|
case "country":
|
|
8270
|
-
return /* @__PURE__ */
|
|
8374
|
+
return /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
|
|
8271
8375
|
case "position":
|
|
8272
|
-
return /* @__PURE__ */
|
|
8376
|
+
return /* @__PURE__ */ jsx82(Fragment17, {});
|
|
8273
8377
|
default:
|
|
8274
|
-
return /* @__PURE__ */
|
|
8378
|
+
return /* @__PURE__ */ jsx82(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
8275
8379
|
}
|
|
8276
8380
|
}
|
|
8277
8381
|
function parseClientState4(json) {
|
|
@@ -8306,7 +8410,7 @@ function SearchSheet({
|
|
|
8306
8410
|
ui
|
|
8307
8411
|
}) {
|
|
8308
8412
|
const s = ui.games.beatTheGrid;
|
|
8309
|
-
const [query, setQuery] =
|
|
8413
|
+
const [query, setQuery] = useState42("");
|
|
8310
8414
|
const inputId = useId5();
|
|
8311
8415
|
const inputRef = useRef26(null);
|
|
8312
8416
|
useEffect28(() => {
|
|
@@ -8315,12 +8419,12 @@ function SearchSheet({
|
|
|
8315
8419
|
const filtered = playerPool.filter(
|
|
8316
8420
|
(p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
8317
8421
|
);
|
|
8318
|
-
return /* @__PURE__ */
|
|
8319
|
-
/* @__PURE__ */
|
|
8320
|
-
/* @__PURE__ */
|
|
8321
|
-
/* @__PURE__ */
|
|
8322
|
-
/* @__PURE__ */
|
|
8323
|
-
/* @__PURE__ */
|
|
8422
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-sheet", "data-testid": "btg-search-sheet", children: [
|
|
8423
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-sheet-hdr", children: [
|
|
8424
|
+
/* @__PURE__ */ jsx82(Chip, { variant: "neutral", children: rowLabel }),
|
|
8425
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-btg-sheet-x", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconClose, { size: 12 }) }),
|
|
8426
|
+
/* @__PURE__ */ jsx82(Chip, { variant: "accent", children: colLabel }),
|
|
8427
|
+
/* @__PURE__ */ jsx82(
|
|
8324
8428
|
"button",
|
|
8325
8429
|
{
|
|
8326
8430
|
type: "button",
|
|
@@ -8328,12 +8432,12 @@ function SearchSheet({
|
|
|
8328
8432
|
"data-testid": "btg-sheet-dismiss",
|
|
8329
8433
|
"aria-label": s.closeSearch,
|
|
8330
8434
|
onClick: onDismiss,
|
|
8331
|
-
children: /* @__PURE__ */
|
|
8435
|
+
children: /* @__PURE__ */ jsx82(IconClose, {})
|
|
8332
8436
|
}
|
|
8333
8437
|
)
|
|
8334
8438
|
] }),
|
|
8335
|
-
playerPool.length === 0 ? /* @__PURE__ */
|
|
8336
|
-
/* @__PURE__ */
|
|
8439
|
+
playerPool.length === 0 ? /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs70(Fragment17, { children: [
|
|
8440
|
+
/* @__PURE__ */ jsx82(
|
|
8337
8441
|
SearchField,
|
|
8338
8442
|
{
|
|
8339
8443
|
id: inputId,
|
|
@@ -8345,16 +8449,16 @@ function SearchSheet({
|
|
|
8345
8449
|
inputRef
|
|
8346
8450
|
}
|
|
8347
8451
|
),
|
|
8348
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
8452
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx82(
|
|
8349
8453
|
OptionList,
|
|
8350
8454
|
{
|
|
8351
8455
|
label: s.searchLabel(rowLabel, colLabel),
|
|
8352
8456
|
options: filtered.map((p) => ({
|
|
8353
8457
|
key: p.id,
|
|
8354
|
-
content: /* @__PURE__ */
|
|
8355
|
-
/* @__PURE__ */
|
|
8356
|
-
/* @__PURE__ */
|
|
8357
|
-
/* @__PURE__ */
|
|
8458
|
+
content: /* @__PURE__ */ jsxs70(Fragment17, { children: [
|
|
8459
|
+
/* @__PURE__ */ jsx82(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
|
|
8460
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-btg-result-name", children: p.name }),
|
|
8461
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconPlus, { size: 18 }) })
|
|
8358
8462
|
] })
|
|
8359
8463
|
})),
|
|
8360
8464
|
onPick: (k) => onPick(row, col, Number(k))
|
|
@@ -8374,7 +8478,7 @@ function BeatTheGridGame({
|
|
|
8374
8478
|
}) {
|
|
8375
8479
|
const s = ui.games.beatTheGrid;
|
|
8376
8480
|
const title = gameTitle({ gameId: "beat-the-grid" }, ui.games.titles);
|
|
8377
|
-
const [activeCell, setActiveCell] =
|
|
8481
|
+
const [activeCell, setActiveCell] = useState42(null);
|
|
8378
8482
|
const clientState = parseClientState4(result?.clientStateJson);
|
|
8379
8483
|
const filledCells = clientState?.cells ?? [];
|
|
8380
8484
|
const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
|
|
@@ -8392,9 +8496,9 @@ function BeatTheGridGame({
|
|
|
8392
8496
|
onSubmit(JSON.stringify({ cells: newCells }));
|
|
8393
8497
|
}
|
|
8394
8498
|
if (!config) {
|
|
8395
|
-
return /* @__PURE__ */
|
|
8396
|
-
/* @__PURE__ */
|
|
8397
|
-
/* @__PURE__ */
|
|
8499
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
8500
|
+
/* @__PURE__ */ jsx82(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
8501
|
+
/* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8398
8502
|
] });
|
|
8399
8503
|
}
|
|
8400
8504
|
const rows = config.rows;
|
|
@@ -8407,20 +8511,20 @@ function BeatTheGridGame({
|
|
|
8407
8511
|
(_, i) => i < correctCount ? "correct" : i < correctCount + wrongCount ? "wrong" : "todo"
|
|
8408
8512
|
);
|
|
8409
8513
|
const totalScore = clientState?.totalScore ?? result?.score ?? 0;
|
|
8410
|
-
return /* @__PURE__ */
|
|
8411
|
-
/* @__PURE__ */
|
|
8412
|
-
/* @__PURE__ */
|
|
8514
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-screen", "data-game": "beat-the-grid", "data-testid": "game-screen-beat-the-grid", children: [
|
|
8515
|
+
/* @__PURE__ */ jsx82(GameHeader, { title, eyebrow: s.eyebrow, onBack, backLabel: ui.back }),
|
|
8516
|
+
/* @__PURE__ */ jsx82(
|
|
8413
8517
|
SegmentProgress,
|
|
8414
8518
|
{
|
|
8415
8519
|
segments,
|
|
8416
8520
|
ariaLabel: s.progressAria(filledCells.length, total),
|
|
8417
8521
|
leftLabel: s.filled(filledCells.length, total),
|
|
8418
8522
|
rightLabel: s.toGo(Math.max(0, total - filledCells.length)),
|
|
8419
|
-
right: /* @__PURE__ */
|
|
8523
|
+
right: /* @__PURE__ */ jsx82(Chip, { variant: "accent", children: `${totalScore} ${ui.games.unitPts}` })
|
|
8420
8524
|
}
|
|
8421
8525
|
),
|
|
8422
|
-
/* @__PURE__ */
|
|
8423
|
-
/* @__PURE__ */
|
|
8526
|
+
/* @__PURE__ */ jsxs70("div", { className: "ss-g-body", children: [
|
|
8527
|
+
/* @__PURE__ */ jsxs70(
|
|
8424
8528
|
"div",
|
|
8425
8529
|
{
|
|
8426
8530
|
className: activeCell !== null ? "ss-g-btg-grid ss-g-btg-grid--fit" : "ss-g-btg-grid",
|
|
@@ -8430,31 +8534,31 @@ function BeatTheGridGame({
|
|
|
8430
8534
|
},
|
|
8431
8535
|
role: "grid",
|
|
8432
8536
|
children: [
|
|
8433
|
-
/* @__PURE__ */
|
|
8537
|
+
/* @__PURE__ */ jsx82("div", { className: "ss-g-btg-corner" }),
|
|
8434
8538
|
cols.map((col, colIdx) => {
|
|
8435
8539
|
const colMeta = config.colsMeta?.[colIdx];
|
|
8436
|
-
return /* @__PURE__ */
|
|
8437
|
-
/* @__PURE__ */
|
|
8438
|
-
/* @__PURE__ */
|
|
8540
|
+
return /* @__PURE__ */ jsxs70("div", { className: "ss-g-btg-colhdr", "data-meta": colMeta ? "true" : void 0, children: [
|
|
8541
|
+
/* @__PURE__ */ jsx82(HeaderVisual, { label: col, textKey: config.colsI18n?.[colIdx]?.key, meta: colMeta }),
|
|
8542
|
+
/* @__PURE__ */ jsx82("span", { children: col })
|
|
8439
8543
|
] }, col);
|
|
8440
8544
|
}),
|
|
8441
8545
|
rows.map((rowLabel, rowIdx) => {
|
|
8442
8546
|
const rowMeta = config.rowsMeta?.[rowIdx];
|
|
8443
8547
|
const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
|
|
8444
|
-
const rowHeaderContent = rowMeta ? /* @__PURE__ */
|
|
8445
|
-
/* @__PURE__ */
|
|
8446
|
-
/* @__PURE__ */
|
|
8447
|
-
] }) : abbr === rowLabel ? /* @__PURE__ */
|
|
8448
|
-
/* @__PURE__ */
|
|
8449
|
-
/* @__PURE__ */
|
|
8548
|
+
const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs70(Fragment17, { children: [
|
|
8549
|
+
/* @__PURE__ */ jsx82(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
|
|
8550
|
+
/* @__PURE__ */ jsx82("span", { children: rowLabel })
|
|
8551
|
+
] }) : abbr === rowLabel ? /* @__PURE__ */ jsx82("span", { children: rowLabel }) : /* @__PURE__ */ jsxs70(Fragment17, { children: [
|
|
8552
|
+
/* @__PURE__ */ jsx82("span", { "aria-hidden": "true", children: abbr }),
|
|
8553
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-sr", children: rowLabel })
|
|
8450
8554
|
] });
|
|
8451
|
-
return /* @__PURE__ */
|
|
8452
|
-
/* @__PURE__ */
|
|
8555
|
+
return /* @__PURE__ */ jsxs70(React.Fragment, { children: [
|
|
8556
|
+
/* @__PURE__ */ jsx82("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
|
|
8453
8557
|
cols.map((colLabel, colIdx) => {
|
|
8454
8558
|
const filled = findCellResult(filledCells, rowIdx, colIdx);
|
|
8455
8559
|
const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
|
|
8456
8560
|
const state = filled ? filled.isCorrect ? "correct" : "wrong" : isActive ? "active" : "empty";
|
|
8457
|
-
return /* @__PURE__ */
|
|
8561
|
+
return /* @__PURE__ */ jsx82(
|
|
8458
8562
|
"button",
|
|
8459
8563
|
{
|
|
8460
8564
|
type: "button",
|
|
@@ -8465,20 +8569,20 @@ function BeatTheGridGame({
|
|
|
8465
8569
|
className: "ss-g-btg-cell",
|
|
8466
8570
|
disabled: isLocked2 || submitting,
|
|
8467
8571
|
onClick: () => handleCellClick(rowIdx, colIdx),
|
|
8468
|
-
children: filled ? /* @__PURE__ */
|
|
8469
|
-
/* @__PURE__ */
|
|
8572
|
+
children: filled ? /* @__PURE__ */ jsxs70(Fragment17, { children: [
|
|
8573
|
+
/* @__PURE__ */ jsx82(
|
|
8470
8574
|
"span",
|
|
8471
8575
|
{
|
|
8472
8576
|
className: `ss-g-btg-badge ss-g-btg-badge--${filled.isCorrect ? "correct" : "wrong"}`,
|
|
8473
8577
|
role: "img",
|
|
8474
8578
|
"aria-label": filled.isCorrect ? s.correct : s.wrong,
|
|
8475
|
-
children: filled.isCorrect ? /* @__PURE__ */
|
|
8579
|
+
children: filled.isCorrect ? /* @__PURE__ */ jsx82(IconCheck, { size: 11 }) : /* @__PURE__ */ jsx82(IconClose, { size: 11 })
|
|
8476
8580
|
}
|
|
8477
8581
|
),
|
|
8478
|
-
/* @__PURE__ */
|
|
8582
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-btg-rarity", children: filled.rarityScore }),
|
|
8479
8583
|
(() => {
|
|
8480
8584
|
const entry = playerPool.find((p) => p.id === filled.playerId);
|
|
8481
|
-
return /* @__PURE__ */
|
|
8585
|
+
return /* @__PURE__ */ jsx82(
|
|
8482
8586
|
PlayerAvatar,
|
|
8483
8587
|
{
|
|
8484
8588
|
name: entry?.name ?? "",
|
|
@@ -8487,8 +8591,8 @@ function BeatTheGridGame({
|
|
|
8487
8591
|
}
|
|
8488
8592
|
);
|
|
8489
8593
|
})(),
|
|
8490
|
-
/* @__PURE__ */
|
|
8491
|
-
] }) : /* @__PURE__ */
|
|
8594
|
+
/* @__PURE__ */ jsx82("span", { className: "ss-g-btg-name", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) })
|
|
8595
|
+
] }) : /* @__PURE__ */ jsx82("span", { className: "ss-g-btg-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx82(IconPlus, { size: 22 }) })
|
|
8492
8596
|
},
|
|
8493
8597
|
`cell-${rowIdx}-${colIdx}`
|
|
8494
8598
|
);
|
|
@@ -8498,7 +8602,7 @@ function BeatTheGridGame({
|
|
|
8498
8602
|
]
|
|
8499
8603
|
}
|
|
8500
8604
|
),
|
|
8501
|
-
isLocked2 && /* @__PURE__ */
|
|
8605
|
+
isLocked2 && /* @__PURE__ */ jsx82(
|
|
8502
8606
|
ResultCard,
|
|
8503
8607
|
{
|
|
8504
8608
|
tone: "neutral",
|
|
@@ -8510,7 +8614,7 @@ function BeatTheGridGame({
|
|
|
8510
8614
|
}
|
|
8511
8615
|
)
|
|
8512
8616
|
] }),
|
|
8513
|
-
activeCell !== null && /* @__PURE__ */
|
|
8617
|
+
activeCell !== null && /* @__PURE__ */ jsx82("div", { className: "ss-g-btg-pin", children: /* @__PURE__ */ jsx82(
|
|
8514
8618
|
SearchSheet,
|
|
8515
8619
|
{
|
|
8516
8620
|
row: activeCell.row,
|
|
@@ -8529,21 +8633,21 @@ function BeatTheGridGame({
|
|
|
8529
8633
|
}
|
|
8530
8634
|
|
|
8531
8635
|
// src/components/games/GuessTheXiGame.tsx
|
|
8532
|
-
import { useState as
|
|
8636
|
+
import { useState as useState43, useId as useId6 } from "react";
|
|
8533
8637
|
|
|
8534
8638
|
// src/components/games/ui/PitchSvg.tsx
|
|
8535
|
-
import { Fragment as
|
|
8639
|
+
import { Fragment as Fragment18, jsx as jsx83, jsxs as jsxs71 } from "react/jsx-runtime";
|
|
8536
8640
|
function PitchSvg({ variant }) {
|
|
8537
|
-
return /* @__PURE__ */
|
|
8538
|
-
/* @__PURE__ */
|
|
8539
|
-
variant === "full" ? /* @__PURE__ */
|
|
8540
|
-
/* @__PURE__ */
|
|
8541
|
-
/* @__PURE__ */
|
|
8542
|
-
/* @__PURE__ */
|
|
8543
|
-
/* @__PURE__ */
|
|
8544
|
-
] }) : /* @__PURE__ */
|
|
8545
|
-
/* @__PURE__ */
|
|
8546
|
-
/* @__PURE__ */
|
|
8641
|
+
return /* @__PURE__ */ jsxs71("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
|
|
8642
|
+
/* @__PURE__ */ jsx83("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
|
|
8643
|
+
variant === "full" ? /* @__PURE__ */ jsxs71(Fragment18, { children: [
|
|
8644
|
+
/* @__PURE__ */ jsx83("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
|
|
8645
|
+
/* @__PURE__ */ jsx83("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
|
|
8646
|
+
/* @__PURE__ */ jsx83("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
|
|
8647
|
+
/* @__PURE__ */ jsx83("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
|
|
8648
|
+
] }) : /* @__PURE__ */ jsxs71(Fragment18, { children: [
|
|
8649
|
+
/* @__PURE__ */ jsx83("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
|
|
8650
|
+
/* @__PURE__ */ jsx83("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
|
|
8547
8651
|
] })
|
|
8548
8652
|
] });
|
|
8549
8653
|
}
|
|
@@ -8599,7 +8703,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
|
|
|
8599
8703
|
}
|
|
8600
8704
|
|
|
8601
8705
|
// src/components/games/GuessTheXiGame.tsx
|
|
8602
|
-
import { Fragment as
|
|
8706
|
+
import { Fragment as Fragment19, jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
8603
8707
|
var MAX_GUESSES2 = 3;
|
|
8604
8708
|
function parseClientState5(json) {
|
|
8605
8709
|
if (!json) return null;
|
|
@@ -8618,7 +8722,7 @@ function GuessTheXiGame({
|
|
|
8618
8722
|
onBack
|
|
8619
8723
|
}) {
|
|
8620
8724
|
const t = ui.games.guessTheXi;
|
|
8621
|
-
const [query, setQuery] =
|
|
8725
|
+
const [query, setQuery] = useState43("");
|
|
8622
8726
|
const inputId = useId6();
|
|
8623
8727
|
const clientState = parseClientState5(result?.clientStateJson);
|
|
8624
8728
|
const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
|
|
@@ -8649,31 +8753,31 @@ function GuessTheXiGame({
|
|
|
8649
8753
|
const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
|
|
8650
8754
|
const guessesLeft = Math.max(0, MAX_GUESSES2 - (clientState?.guessesUsed ?? 0));
|
|
8651
8755
|
const teamName = (id) => config?.teamPool.find((tm) => tm.teamId === id)?.teamName ?? `#${id}`;
|
|
8652
|
-
return /* @__PURE__ */
|
|
8653
|
-
/* @__PURE__ */
|
|
8756
|
+
return /* @__PURE__ */ jsxs72("div", { className: "ss-g-screen ss-g-gxi", "data-game": "guess-the-xi", "data-testid": "game-screen-guess-the-xi", children: [
|
|
8757
|
+
/* @__PURE__ */ jsx84(
|
|
8654
8758
|
GameHeader,
|
|
8655
8759
|
{
|
|
8656
8760
|
title: gameTitle({ gameId: "guess-the-xi" }, ui.games.titles),
|
|
8657
8761
|
eyebrow: config?.poolLabel,
|
|
8658
|
-
right: formation ? /* @__PURE__ */
|
|
8762
|
+
right: formation ? /* @__PURE__ */ jsx84(Chip, { variant: "accent", children: formation }) : void 0,
|
|
8659
8763
|
onBack,
|
|
8660
8764
|
backLabel: ui.back
|
|
8661
8765
|
}
|
|
8662
8766
|
),
|
|
8663
|
-
!config && /* @__PURE__ */
|
|
8664
|
-
config && /* @__PURE__ */
|
|
8665
|
-
/* @__PURE__ */
|
|
8666
|
-
!isOver && /* @__PURE__ */
|
|
8667
|
-
rows.length > 0 && /* @__PURE__ */
|
|
8668
|
-
/* @__PURE__ */
|
|
8669
|
-
/* @__PURE__ */
|
|
8767
|
+
!config && /* @__PURE__ */ jsx84("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
8768
|
+
config && /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
8769
|
+
/* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
|
|
8770
|
+
!isOver && /* @__PURE__ */ jsx84(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
|
|
8771
|
+
rows.length > 0 && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
|
|
8772
|
+
/* @__PURE__ */ jsx84(PitchSvg, { variant: "full" }),
|
|
8773
|
+
/* @__PURE__ */ jsx84("div", { className: "ss-g-gxi-rows", children: rows.map((row, r) => /* @__PURE__ */ jsx84("div", { className: "ss-g-gxi-row", children: row.map((pos, c) => {
|
|
8670
8774
|
const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
|
|
8671
8775
|
const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
|
|
8672
8776
|
const lineupEntry = pos.slot ? lineupBySlot.get(pos.slot) : void 0;
|
|
8673
8777
|
const flag = nationalityFlag(pos.nationality);
|
|
8674
8778
|
if (lineupEntry) {
|
|
8675
|
-
return /* @__PURE__ */
|
|
8676
|
-
/* @__PURE__ */
|
|
8779
|
+
return /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-node", "data-revealed": "true", children: [
|
|
8780
|
+
/* @__PURE__ */ jsx84(
|
|
8677
8781
|
PlayerAvatar,
|
|
8678
8782
|
{
|
|
8679
8783
|
name: lineupEntry.name,
|
|
@@ -8681,11 +8785,11 @@ function GuessTheXiGame({
|
|
|
8681
8785
|
className: "ss-g-gxi-disc ss-g-gxi-disc--photo"
|
|
8682
8786
|
}
|
|
8683
8787
|
),
|
|
8684
|
-
/* @__PURE__ */
|
|
8788
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(lineupEntry.name).last })
|
|
8685
8789
|
] }, `${pos.slot}-${c}`);
|
|
8686
8790
|
}
|
|
8687
|
-
return /* @__PURE__ */
|
|
8688
|
-
/* @__PURE__ */
|
|
8791
|
+
return /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-node", "data-revealed": name ? "true" : void 0, children: [
|
|
8792
|
+
/* @__PURE__ */ jsx84(
|
|
8689
8793
|
"span",
|
|
8690
8794
|
{
|
|
8691
8795
|
className: "ss-g-gxi-disc",
|
|
@@ -8696,22 +8800,22 @@ function GuessTheXiGame({
|
|
|
8696
8800
|
children: flag
|
|
8697
8801
|
}
|
|
8698
8802
|
),
|
|
8699
|
-
name ? /* @__PURE__ */
|
|
8803
|
+
name ? /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos ss-g-gxi-pos--name", children: splitName(name).last }) : posLabel && /* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-pos", children: posLabel })
|
|
8700
8804
|
] }, `${pos.slot}-${c}`);
|
|
8701
8805
|
}) }, r)) })
|
|
8702
8806
|
] }),
|
|
8703
|
-
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */
|
|
8704
|
-
/* @__PURE__ */
|
|
8807
|
+
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-wrong", children: [
|
|
8808
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-wrong-l", children: t.notThem }),
|
|
8705
8809
|
wrongGuesses.map((g) => {
|
|
8706
8810
|
const crestUrl = config?.teamPool.find((tm) => tm.teamId === g.teamId)?.crestUrl;
|
|
8707
|
-
return /* @__PURE__ */
|
|
8708
|
-
/* @__PURE__ */
|
|
8709
|
-
/* @__PURE__ */
|
|
8811
|
+
return /* @__PURE__ */ jsxs72("span", { className: "ss-g-gxi-wrong-chip", children: [
|
|
8812
|
+
/* @__PURE__ */ jsx84(CrestShield, { src: crestUrl, name: teamName(g.teamId), size: 18 }),
|
|
8813
|
+
/* @__PURE__ */ jsx84("s", { children: teamName(g.teamId) })
|
|
8710
8814
|
] }, g.teamId);
|
|
8711
8815
|
})
|
|
8712
8816
|
] }),
|
|
8713
|
-
isOver && /* @__PURE__ */
|
|
8714
|
-
/* @__PURE__ */
|
|
8817
|
+
isOver && /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
8818
|
+
/* @__PURE__ */ jsx84(
|
|
8715
8819
|
ResultCard,
|
|
8716
8820
|
{
|
|
8717
8821
|
tone: solved ? "win" : failed ? "lose" : "neutral",
|
|
@@ -8722,29 +8826,29 @@ function GuessTheXiGame({
|
|
|
8722
8826
|
ui
|
|
8723
8827
|
}
|
|
8724
8828
|
),
|
|
8725
|
-
(solved || failed) && clientState?.answer && /* @__PURE__ */
|
|
8726
|
-
/* @__PURE__ */
|
|
8727
|
-
/* @__PURE__ */
|
|
8728
|
-
/* @__PURE__ */
|
|
8829
|
+
(solved || failed) && clientState?.answer && /* @__PURE__ */ jsxs72("div", { className: "ss-g-gxi-answer", "data-testid": "gxi-answer-reveal", children: [
|
|
8830
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-answer-label", children: t.theAnswer }),
|
|
8831
|
+
/* @__PURE__ */ jsx84(CrestShield, { src: clientState.answer.crestUrl, name: clientState.answer.teamName, size: 32 }),
|
|
8832
|
+
/* @__PURE__ */ jsx84("span", { className: "ss-g-gxi-answer-name", children: clientState.answer.teamName })
|
|
8729
8833
|
] })
|
|
8730
8834
|
] })
|
|
8731
8835
|
] }),
|
|
8732
|
-
!isOver && /* @__PURE__ */
|
|
8733
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
8836
|
+
!isOver && /* @__PURE__ */ jsxs72(FooterBar, { children: [
|
|
8837
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx84(
|
|
8734
8838
|
OptionList,
|
|
8735
8839
|
{
|
|
8736
8840
|
label: t.optionsLabel,
|
|
8737
8841
|
options: filtered.map((tm) => ({
|
|
8738
8842
|
key: tm.teamId,
|
|
8739
|
-
content: /* @__PURE__ */
|
|
8740
|
-
/* @__PURE__ */
|
|
8741
|
-
/* @__PURE__ */
|
|
8843
|
+
content: /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
8844
|
+
/* @__PURE__ */ jsx84(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
|
|
8845
|
+
/* @__PURE__ */ jsx84("span", { children: tm.teamName })
|
|
8742
8846
|
] })
|
|
8743
8847
|
})),
|
|
8744
8848
|
onPick: (k) => handlePick(Number(k))
|
|
8745
8849
|
}
|
|
8746
8850
|
),
|
|
8747
|
-
/* @__PURE__ */
|
|
8851
|
+
/* @__PURE__ */ jsx84(
|
|
8748
8852
|
SearchField,
|
|
8749
8853
|
{
|
|
8750
8854
|
id: inputId,
|
|
@@ -8761,8 +8865,8 @@ function GuessTheXiGame({
|
|
|
8761
8865
|
}
|
|
8762
8866
|
|
|
8763
8867
|
// src/components/games/DailyQuizGame.tsx
|
|
8764
|
-
import { useState as
|
|
8765
|
-
import { Fragment as
|
|
8868
|
+
import { useState as useState44 } from "react";
|
|
8869
|
+
import { Fragment as Fragment20, jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
8766
8870
|
function parseClientState6(json) {
|
|
8767
8871
|
if (!json) return null;
|
|
8768
8872
|
try {
|
|
@@ -8783,13 +8887,13 @@ function OptionName({ text }) {
|
|
|
8783
8887
|
const tokens = base.split(/\s+/).filter(Boolean);
|
|
8784
8888
|
const isPlainName = tokens.length >= 1 && tokens.length <= 4 && tokens.every((t) => NAME_TOKEN.test(t));
|
|
8785
8889
|
if (!isPlainName || base === "") {
|
|
8786
|
-
return /* @__PURE__ */
|
|
8890
|
+
return /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-name", children: /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-full", children: text }) });
|
|
8787
8891
|
}
|
|
8788
8892
|
const { first, last } = splitName(base);
|
|
8789
|
-
return /* @__PURE__ */
|
|
8790
|
-
first && /* @__PURE__ */
|
|
8791
|
-
/* @__PURE__ */
|
|
8792
|
-
suffix && /* @__PURE__ */
|
|
8893
|
+
return /* @__PURE__ */ jsxs73("span", { className: "ss-g-dq-opt-name", children: [
|
|
8894
|
+
first && /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-first", children: first }),
|
|
8895
|
+
/* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-last", children: last }),
|
|
8896
|
+
suffix && /* @__PURE__ */ jsx85("span", { className: "ss-g-dq-opt-suffix", children: suffix })
|
|
8793
8897
|
] });
|
|
8794
8898
|
}
|
|
8795
8899
|
function DailyQuizGame({
|
|
@@ -8802,15 +8906,15 @@ function DailyQuizGame({
|
|
|
8802
8906
|
}) {
|
|
8803
8907
|
const s = ui.games.dailyQuiz;
|
|
8804
8908
|
const title = gameTitle({ gameId: "daily-quiz" }, ui.games.titles);
|
|
8805
|
-
const [selections, setSelections] =
|
|
8806
|
-
const [page, setPage] =
|
|
8909
|
+
const [selections, setSelections] = useState44(/* @__PURE__ */ new Map());
|
|
8910
|
+
const [page, setPage] = useState44(0);
|
|
8807
8911
|
const clientState = parseClientState6(result?.clientStateJson);
|
|
8808
8912
|
const results = clientState?.results ?? [];
|
|
8809
8913
|
const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
|
|
8810
8914
|
if (!config) {
|
|
8811
|
-
return /* @__PURE__ */
|
|
8812
|
-
/* @__PURE__ */
|
|
8813
|
-
/* @__PURE__ */
|
|
8915
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8916
|
+
/* @__PURE__ */ jsx85(GameHeader, { title, onBack, backLabel: ui.back }),
|
|
8917
|
+
/* @__PURE__ */ jsx85("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
8814
8918
|
] });
|
|
8815
8919
|
}
|
|
8816
8920
|
const questions = config.questions;
|
|
@@ -8845,11 +8949,11 @@ function DailyQuizGame({
|
|
|
8845
8949
|
return r.isCorrect ? "correct" : "wrong";
|
|
8846
8950
|
});
|
|
8847
8951
|
const correctCount = results.filter((r) => r.isCorrect).length;
|
|
8848
|
-
return /* @__PURE__ */
|
|
8849
|
-
/* @__PURE__ */
|
|
8850
|
-
/* @__PURE__ */
|
|
8851
|
-
/* @__PURE__ */
|
|
8852
|
-
/* @__PURE__ */
|
|
8952
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8953
|
+
/* @__PURE__ */ jsx85(GameHeader, { title, eyebrow: s.results, onBack, backLabel: ui.back }),
|
|
8954
|
+
/* @__PURE__ */ jsx85(SegmentProgress, { segments: segments2, ariaLabel: s.results }),
|
|
8955
|
+
/* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
|
|
8956
|
+
/* @__PURE__ */ jsx85(
|
|
8853
8957
|
ResultCard,
|
|
8854
8958
|
{
|
|
8855
8959
|
tone: "neutral",
|
|
@@ -8862,15 +8966,15 @@ function DailyQuizGame({
|
|
|
8862
8966
|
questions.map((q) => {
|
|
8863
8967
|
const r = findResult(results, q.index);
|
|
8864
8968
|
const picked = selections.get(q.index);
|
|
8865
|
-
return /* @__PURE__ */
|
|
8866
|
-
/* @__PURE__ */
|
|
8867
|
-
r && /* @__PURE__ */
|
|
8969
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-dq-rq", children: [
|
|
8970
|
+
/* @__PURE__ */ jsx85("div", { className: "ss-g-dq-rq-stem", children: q.stem }),
|
|
8971
|
+
r && /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-rq-opts", children: q.options.map((opt, optIdx) => {
|
|
8868
8972
|
let cls = "ss-g-dq-rq-opt";
|
|
8869
8973
|
if (optIdx === r.correctOptionIndex) cls += " ss-g-dq-rq-opt--correct";
|
|
8870
8974
|
else if (optIdx === picked && !r.isCorrect) cls += " ss-g-dq-rq-opt--wrong";
|
|
8871
|
-
return /* @__PURE__ */
|
|
8975
|
+
return /* @__PURE__ */ jsx85("span", { className: cls, children: opt }, optIdx);
|
|
8872
8976
|
}) }),
|
|
8873
|
-
r?.revealText && /* @__PURE__ */
|
|
8977
|
+
r?.revealText && /* @__PURE__ */ jsx85("div", { className: "ss-g-dq-why", children: r.revealText })
|
|
8874
8978
|
] }, q.index);
|
|
8875
8979
|
})
|
|
8876
8980
|
] })
|
|
@@ -8878,16 +8982,16 @@ function DailyQuizGame({
|
|
|
8878
8982
|
}
|
|
8879
8983
|
const segments = questions.map((_, i) => i < page ? "done" : i === page ? "current" : "todo");
|
|
8880
8984
|
const selectedIdx = current ? selections.get(current.index) : void 0;
|
|
8881
|
-
return /* @__PURE__ */
|
|
8882
|
-
/* @__PURE__ */
|
|
8883
|
-
/* @__PURE__ */
|
|
8884
|
-
/* @__PURE__ */
|
|
8885
|
-
/* @__PURE__ */
|
|
8886
|
-
/* @__PURE__ */
|
|
8985
|
+
return /* @__PURE__ */ jsxs73("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
8986
|
+
/* @__PURE__ */ jsx85(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
|
|
8987
|
+
/* @__PURE__ */ jsx85(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
|
|
8988
|
+
/* @__PURE__ */ jsx85("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs73(Fragment20, { children: [
|
|
8989
|
+
/* @__PURE__ */ jsx85("h3", { className: "ss-g-dq-stem", children: current.stem }),
|
|
8990
|
+
/* @__PURE__ */ jsx85("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
|
|
8887
8991
|
const selected = optIdx === selectedIdx;
|
|
8888
8992
|
const imagePath = current.optionImagePaths?.[optIdx] ?? void 0;
|
|
8889
8993
|
const playerName = opt;
|
|
8890
|
-
return /* @__PURE__ */
|
|
8994
|
+
return /* @__PURE__ */ jsxs73(
|
|
8891
8995
|
"button",
|
|
8892
8996
|
{
|
|
8893
8997
|
type: "button",
|
|
@@ -8896,25 +9000,25 @@ function DailyQuizGame({
|
|
|
8896
9000
|
disabled: submitting,
|
|
8897
9001
|
onClick: () => handleSelect(current.index, optIdx),
|
|
8898
9002
|
children: [
|
|
8899
|
-
current.optionImagePaths && /* @__PURE__ */
|
|
8900
|
-
/* @__PURE__ */
|
|
8901
|
-
/* @__PURE__ */
|
|
9003
|
+
current.optionImagePaths && /* @__PURE__ */ jsx85(PlayerAvatar, { name: playerName, imagePath, className: "ss-g-dq-opt-av" }),
|
|
9004
|
+
/* @__PURE__ */ jsx85("span", { className: "ss-g-dq-badge", "aria-hidden": "true", children: selected ? /* @__PURE__ */ jsx85(IconCheck, {}) : String.fromCharCode(65 + optIdx) }),
|
|
9005
|
+
/* @__PURE__ */ jsx85(OptionName, { text: opt })
|
|
8902
9006
|
]
|
|
8903
9007
|
},
|
|
8904
9008
|
optIdx
|
|
8905
9009
|
);
|
|
8906
9010
|
}) })
|
|
8907
9011
|
] }) }),
|
|
8908
|
-
/* @__PURE__ */
|
|
8909
|
-
page > 0 && /* @__PURE__ */
|
|
8910
|
-
isLast ? /* @__PURE__ */
|
|
9012
|
+
/* @__PURE__ */ jsx85(FooterBar, { children: /* @__PURE__ */ jsxs73("div", { className: "ss-g-dq-nav", children: [
|
|
9013
|
+
page > 0 && /* @__PURE__ */ jsx85(GameButton, { variant: "outline", onClick: goPrev, disabled: submitting, children: s.previous }),
|
|
9014
|
+
isLast ? /* @__PURE__ */ jsx85(GameButton, { variant: "primary", block: true, onClick: handleSubmit, disabled: !currentAnswered || !allAnswered || submitting, children: submitting ? s.submitting : s.submit }) : /* @__PURE__ */ jsx85(GameButton, { variant: "primary", block: true, onClick: goNext, disabled: !currentAnswered || submitting, children: s.next })
|
|
8911
9015
|
] }) })
|
|
8912
9016
|
] });
|
|
8913
9017
|
}
|
|
8914
9018
|
|
|
8915
9019
|
// src/components/games/MatchdayPredictorGame.tsx
|
|
8916
|
-
import { useId as useId7, useState as
|
|
8917
|
-
import { jsx as
|
|
9020
|
+
import { useId as useId7, useState as useState45 } from "react";
|
|
9021
|
+
import { jsx as jsx86, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
8918
9022
|
var SCORER_SEARCH_THRESHOLD = 9;
|
|
8919
9023
|
function parseClientState7(json) {
|
|
8920
9024
|
if (!json) return null;
|
|
@@ -8932,7 +9036,7 @@ function isLocked(kickoffUtc) {
|
|
|
8932
9036
|
}
|
|
8933
9037
|
}
|
|
8934
9038
|
function IconMinus() {
|
|
8935
|
-
return /* @__PURE__ */
|
|
9039
|
+
return /* @__PURE__ */ jsx86(
|
|
8936
9040
|
"svg",
|
|
8937
9041
|
{
|
|
8938
9042
|
width: 18,
|
|
@@ -8943,20 +9047,20 @@ function IconMinus() {
|
|
|
8943
9047
|
strokeWidth: 2.2,
|
|
8944
9048
|
strokeLinecap: "round",
|
|
8945
9049
|
"aria-hidden": "true",
|
|
8946
|
-
children: /* @__PURE__ */
|
|
9050
|
+
children: /* @__PURE__ */ jsx86("path", { d: "M5 12h14" })
|
|
8947
9051
|
}
|
|
8948
9052
|
);
|
|
8949
9053
|
}
|
|
8950
9054
|
function TeamBadge({ team, label }) {
|
|
8951
|
-
return /* @__PURE__ */
|
|
8952
|
-
/* @__PURE__ */
|
|
8953
|
-
/* @__PURE__ */
|
|
8954
|
-
/* @__PURE__ */
|
|
9055
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-team", children: [
|
|
9056
|
+
/* @__PURE__ */ jsx86(CrestShield, { name: team.name, size: 44 }),
|
|
9057
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-team-name", children: team.name }),
|
|
9058
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-team-side", children: label })
|
|
8955
9059
|
] });
|
|
8956
9060
|
}
|
|
8957
9061
|
function ScoreCard({ home, away, h, a, t, edit }) {
|
|
8958
|
-
const col = (side, team, value) => /* @__PURE__ */
|
|
8959
|
-
edit && /* @__PURE__ */
|
|
9062
|
+
const col = (side, team, value) => /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-col", children: [
|
|
9063
|
+
edit && /* @__PURE__ */ jsx86(
|
|
8960
9064
|
"button",
|
|
8961
9065
|
{
|
|
8962
9066
|
type: "button",
|
|
@@ -8964,11 +9068,11 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
8964
9068
|
"aria-label": t.goalsUp(team.name),
|
|
8965
9069
|
disabled: edit.disabled,
|
|
8966
9070
|
onClick: () => edit.onStep(side, 1),
|
|
8967
|
-
children: /* @__PURE__ */
|
|
9071
|
+
children: /* @__PURE__ */ jsx86(IconPlus, { size: 18 })
|
|
8968
9072
|
}
|
|
8969
9073
|
),
|
|
8970
|
-
/* @__PURE__ */
|
|
8971
|
-
edit && /* @__PURE__ */
|
|
9074
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-digit", "data-testid": "mp-digit", "data-active": edit ? String(edit.active === side) : "false", children: value }),
|
|
9075
|
+
edit && /* @__PURE__ */ jsx86(
|
|
8972
9076
|
"button",
|
|
8973
9077
|
{
|
|
8974
9078
|
type: "button",
|
|
@@ -8976,27 +9080,27 @@ function ScoreCard({ home, away, h, a, t, edit }) {
|
|
|
8976
9080
|
"aria-label": t.goalsDown(team.name),
|
|
8977
9081
|
disabled: edit.disabled || value <= 0,
|
|
8978
9082
|
onClick: () => edit.onStep(side, -1),
|
|
8979
|
-
children: /* @__PURE__ */
|
|
9083
|
+
children: /* @__PURE__ */ jsx86(IconMinus, {})
|
|
8980
9084
|
}
|
|
8981
9085
|
)
|
|
8982
9086
|
] });
|
|
8983
|
-
return /* @__PURE__ */
|
|
8984
|
-
/* @__PURE__ */
|
|
8985
|
-
/* @__PURE__ */
|
|
9087
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-card", children: [
|
|
9088
|
+
/* @__PURE__ */ jsx86(TeamBadge, { team: home, label: t.home }),
|
|
9089
|
+
/* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-scores", children: [
|
|
8986
9090
|
col("home", home, h),
|
|
8987
|
-
/* @__PURE__ */
|
|
9091
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-dash", "aria-hidden": "true", children: "\u2013" }),
|
|
8988
9092
|
col("away", away, a)
|
|
8989
9093
|
] }),
|
|
8990
|
-
/* @__PURE__ */
|
|
9094
|
+
/* @__PURE__ */ jsx86(TeamBadge, { team: away, label: t.away })
|
|
8991
9095
|
] });
|
|
8992
9096
|
}
|
|
8993
9097
|
function OutcomeRow({ label, ok, detail, t }) {
|
|
8994
|
-
return /* @__PURE__ */
|
|
8995
|
-
/* @__PURE__ */
|
|
8996
|
-
/* @__PURE__ */
|
|
8997
|
-
ok ? /* @__PURE__ */
|
|
8998
|
-
/* @__PURE__ */
|
|
8999
|
-
detail ? /* @__PURE__ */
|
|
9098
|
+
return /* @__PURE__ */ jsxs74("li", { className: "ss-g-mp-row", "data-testid": "mp-row", "data-ok": String(ok), children: [
|
|
9099
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-row-k", children: label }),
|
|
9100
|
+
/* @__PURE__ */ jsxs74("span", { className: "ss-g-mp-row-v", children: [
|
|
9101
|
+
ok ? /* @__PURE__ */ jsx86(IconCheck, {}) : /* @__PURE__ */ jsx86(IconClose, { size: 14 }),
|
|
9102
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-sr", children: ok ? t.correct : t.incorrect }),
|
|
9103
|
+
detail ? /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-row-d", children: detail }) : null
|
|
9000
9104
|
] })
|
|
9001
9105
|
] });
|
|
9002
9106
|
}
|
|
@@ -9009,20 +9113,20 @@ function MatchdayPredictorGame({
|
|
|
9009
9113
|
onBack
|
|
9010
9114
|
}) {
|
|
9011
9115
|
const t = ui.games.predictor;
|
|
9012
|
-
const [homeScore, setHomeScore] =
|
|
9013
|
-
const [awayScore, setAwayScore] =
|
|
9014
|
-
const [firstScorerPlayerId, setFirstScorerPlayerId] =
|
|
9015
|
-
const [lastEdited, setLastEdited] =
|
|
9016
|
-
const [query, setQuery] =
|
|
9116
|
+
const [homeScore, setHomeScore] = useState45(0);
|
|
9117
|
+
const [awayScore, setAwayScore] = useState45(0);
|
|
9118
|
+
const [firstScorerPlayerId, setFirstScorerPlayerId] = useState45(null);
|
|
9119
|
+
const [lastEdited, setLastEdited] = useState45("home");
|
|
9120
|
+
const [query, setQuery] = useState45("");
|
|
9017
9121
|
const searchId = useId7();
|
|
9018
9122
|
const clientState = parseClientState7(result?.clientStateJson);
|
|
9019
9123
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
9020
|
-
const header = /* @__PURE__ */
|
|
9124
|
+
const header = /* @__PURE__ */ jsx86(
|
|
9021
9125
|
GameHeader,
|
|
9022
9126
|
{
|
|
9023
9127
|
title: gameTitle({ gameId: "matchday-predictor" }, ui.games.titles),
|
|
9024
9128
|
eyebrow: config ? t.eyebrow(config.homeTeam.name, config.awayTeam.name) : void 0,
|
|
9025
|
-
right: config ? /* @__PURE__ */
|
|
9129
|
+
right: config ? /* @__PURE__ */ jsx86(Chip, { icon: /* @__PURE__ */ jsx86(IconLock, {}), children: ui.games.formatDayTime(config.kickoffUtc) }) : void 0,
|
|
9026
9130
|
onBack,
|
|
9027
9131
|
backLabel: ui.back
|
|
9028
9132
|
}
|
|
@@ -9030,10 +9134,10 @@ function MatchdayPredictorGame({
|
|
|
9030
9134
|
if (alreadyPlayed && clientState) {
|
|
9031
9135
|
if (!clientState.graded) {
|
|
9032
9136
|
const scorer = config?.scorerPool.find((p) => p.playerId === clientState.predictedFirstScorerPlayerId) ?? null;
|
|
9033
|
-
return /* @__PURE__ */
|
|
9137
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
9034
9138
|
header,
|
|
9035
|
-
/* @__PURE__ */
|
|
9036
|
-
config && /* @__PURE__ */
|
|
9139
|
+
/* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
|
|
9140
|
+
config && /* @__PURE__ */ jsx86(
|
|
9037
9141
|
ScoreCard,
|
|
9038
9142
|
{
|
|
9039
9143
|
home: config.homeTeam,
|
|
@@ -9043,7 +9147,7 @@ function MatchdayPredictorGame({
|
|
|
9043
9147
|
t
|
|
9044
9148
|
}
|
|
9045
9149
|
),
|
|
9046
|
-
/* @__PURE__ */
|
|
9150
|
+
/* @__PURE__ */ jsx86(
|
|
9047
9151
|
ResultCard,
|
|
9048
9152
|
{
|
|
9049
9153
|
tone: "neutral",
|
|
@@ -9060,28 +9164,28 @@ function MatchdayPredictorGame({
|
|
|
9060
9164
|
}
|
|
9061
9165
|
)
|
|
9062
9166
|
] }),
|
|
9063
|
-
/* @__PURE__ */
|
|
9167
|
+
/* @__PURE__ */ jsx86(FooterBar, { children: /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
9064
9168
|
] });
|
|
9065
9169
|
}
|
|
9066
9170
|
const r = clientState.result;
|
|
9067
|
-
return /* @__PURE__ */
|
|
9171
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
9068
9172
|
header,
|
|
9069
|
-
/* @__PURE__ */
|
|
9070
|
-
config && /* @__PURE__ */
|
|
9071
|
-
/* @__PURE__ */
|
|
9072
|
-
/* @__PURE__ */
|
|
9073
|
-
/* @__PURE__ */
|
|
9074
|
-
/* @__PURE__ */
|
|
9075
|
-
!clientState.firstScorerVoid && /* @__PURE__ */
|
|
9173
|
+
/* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
|
|
9174
|
+
config && /* @__PURE__ */ jsx86(ScoreCard, { home: config.homeTeam, away: config.awayTeam, h: r.homeScore, a: r.awayScore, t }),
|
|
9175
|
+
/* @__PURE__ */ jsx86(ResultCard, { tone: "neutral", title: t.fullTime(r.homeScore, r.awayScore), onBack, ui }),
|
|
9176
|
+
/* @__PURE__ */ jsxs74("ul", { className: "ss-g-mp-rows", children: [
|
|
9177
|
+
/* @__PURE__ */ jsx86(OutcomeRow, { label: t.exactScore, ok: clientState.exactScoreCorrect, t }),
|
|
9178
|
+
/* @__PURE__ */ jsx86(OutcomeRow, { label: t.outcome, ok: clientState.outcomeCorrect, t }),
|
|
9179
|
+
!clientState.firstScorerVoid && /* @__PURE__ */ jsx86(OutcomeRow, { label: t.firstScorerRow, ok: clientState.firstScorerCorrect, detail: r.firstScorerName, t })
|
|
9076
9180
|
] })
|
|
9077
9181
|
] }),
|
|
9078
|
-
/* @__PURE__ */
|
|
9182
|
+
/* @__PURE__ */ jsx86(FooterBar, { children: /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun }) })
|
|
9079
9183
|
] });
|
|
9080
9184
|
}
|
|
9081
9185
|
if (!config) {
|
|
9082
|
-
return /* @__PURE__ */
|
|
9186
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
9083
9187
|
header,
|
|
9084
|
-
/* @__PURE__ */
|
|
9188
|
+
/* @__PURE__ */ jsx86("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
9085
9189
|
] });
|
|
9086
9190
|
}
|
|
9087
9191
|
const locked = isLocked(config.kickoffUtc);
|
|
@@ -9105,10 +9209,10 @@ function MatchdayPredictorGame({
|
|
|
9105
9209
|
const showSearch = pool.length > SCORER_SEARCH_THRESHOLD;
|
|
9106
9210
|
const q = query.trim().toLowerCase();
|
|
9107
9211
|
const visible = showSearch && q ? pool.filter((p) => p.playerName.toLowerCase().includes(q)) : pool;
|
|
9108
|
-
return /* @__PURE__ */
|
|
9212
|
+
return /* @__PURE__ */ jsxs74("div", { className: "ss-g-screen", "data-game": "matchday-predictor", "data-testid": "game-screen-matchday-predictor", children: [
|
|
9109
9213
|
header,
|
|
9110
|
-
/* @__PURE__ */
|
|
9111
|
-
/* @__PURE__ */
|
|
9214
|
+
/* @__PURE__ */ jsxs74("div", { className: "ss-g-body", children: [
|
|
9215
|
+
/* @__PURE__ */ jsx86(
|
|
9112
9216
|
ScoreCard,
|
|
9113
9217
|
{
|
|
9114
9218
|
home: config.homeTeam,
|
|
@@ -9119,12 +9223,12 @@ function MatchdayPredictorGame({
|
|
|
9119
9223
|
edit: { disabled, active: lastEdited, onStep: step }
|
|
9120
9224
|
}
|
|
9121
9225
|
),
|
|
9122
|
-
pool.length > 0 && /* @__PURE__ */
|
|
9123
|
-
/* @__PURE__ */
|
|
9124
|
-
/* @__PURE__ */
|
|
9125
|
-
/* @__PURE__ */
|
|
9226
|
+
pool.length > 0 && /* @__PURE__ */ jsxs74("section", { className: "ss-g-mp-scorer", children: [
|
|
9227
|
+
/* @__PURE__ */ jsxs74("div", { className: "ss-g-mp-sec-head", children: [
|
|
9228
|
+
/* @__PURE__ */ jsx86("h3", { children: t.firstScorer }),
|
|
9229
|
+
/* @__PURE__ */ jsx86("span", { children: t.optional })
|
|
9126
9230
|
] }),
|
|
9127
|
-
showSearch && /* @__PURE__ */
|
|
9231
|
+
showSearch && /* @__PURE__ */ jsx86(
|
|
9128
9232
|
SearchField,
|
|
9129
9233
|
{
|
|
9130
9234
|
id: searchId,
|
|
@@ -9136,9 +9240,9 @@ function MatchdayPredictorGame({
|
|
|
9136
9240
|
disabled
|
|
9137
9241
|
}
|
|
9138
9242
|
),
|
|
9139
|
-
/* @__PURE__ */
|
|
9243
|
+
/* @__PURE__ */ jsx86("div", { className: "ss-g-mp-grid", children: visible.map((p) => {
|
|
9140
9244
|
const selected = firstScorerPlayerId === p.playerId;
|
|
9141
|
-
return /* @__PURE__ */
|
|
9245
|
+
return /* @__PURE__ */ jsxs74(
|
|
9142
9246
|
"button",
|
|
9143
9247
|
{
|
|
9144
9248
|
type: "button",
|
|
@@ -9148,15 +9252,15 @@ function MatchdayPredictorGame({
|
|
|
9148
9252
|
disabled,
|
|
9149
9253
|
onClick: () => setFirstScorerPlayerId((id) => id === p.playerId ? null : p.playerId),
|
|
9150
9254
|
children: [
|
|
9151
|
-
selected && /* @__PURE__ */
|
|
9152
|
-
/* @__PURE__ */
|
|
9153
|
-
/* @__PURE__ */
|
|
9255
|
+
selected && /* @__PURE__ */ jsx86("span", { className: "ss-g-mp-pcheck", children: /* @__PURE__ */ jsx86(IconCheck, { size: 12 }) }),
|
|
9256
|
+
/* @__PURE__ */ jsx86(Silhouette, { size: 52, variant: selected ? "selected" : "default" }),
|
|
9257
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-pname", children: splitName(p.playerName).last })
|
|
9154
9258
|
]
|
|
9155
9259
|
},
|
|
9156
9260
|
p.playerId
|
|
9157
9261
|
);
|
|
9158
9262
|
}) }),
|
|
9159
|
-
/* @__PURE__ */
|
|
9263
|
+
/* @__PURE__ */ jsxs74(
|
|
9160
9264
|
"button",
|
|
9161
9265
|
{
|
|
9162
9266
|
type: "button",
|
|
@@ -9165,24 +9269,24 @@ function MatchdayPredictorGame({
|
|
|
9165
9269
|
disabled,
|
|
9166
9270
|
onClick: () => setFirstScorerPlayerId(null),
|
|
9167
9271
|
children: [
|
|
9168
|
-
/* @__PURE__ */
|
|
9272
|
+
/* @__PURE__ */ jsx86("span", { className: "ss-g-mp-radio", "aria-hidden": "true" }),
|
|
9169
9273
|
t.noScorer
|
|
9170
9274
|
]
|
|
9171
9275
|
}
|
|
9172
9276
|
)
|
|
9173
9277
|
] }),
|
|
9174
|
-
locked && /* @__PURE__ */
|
|
9278
|
+
locked && /* @__PURE__ */ jsx86("p", { className: "ss-g-mp-closed", children: t.closed })
|
|
9175
9279
|
] }),
|
|
9176
|
-
/* @__PURE__ */
|
|
9177
|
-
/* @__PURE__ */
|
|
9178
|
-
/* @__PURE__ */
|
|
9280
|
+
/* @__PURE__ */ jsxs74(FooterBar, { children: [
|
|
9281
|
+
/* @__PURE__ */ jsx86(GameButton, { variant: "primary", block: true, disabled, onClick: handleSubmit, children: submitting ? t.saving : t.save }),
|
|
9282
|
+
/* @__PURE__ */ jsx86("p", { className: "ss-g-mp-fun", children: t.forFun })
|
|
9179
9283
|
] })
|
|
9180
9284
|
] });
|
|
9181
9285
|
}
|
|
9182
9286
|
|
|
9183
9287
|
// src/components/games/StartingXiGame.tsx
|
|
9184
|
-
import { useId as useId8, useState as
|
|
9185
|
-
import { Fragment as
|
|
9288
|
+
import { useId as useId8, useState as useState46 } from "react";
|
|
9289
|
+
import { Fragment as Fragment21, jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
9186
9290
|
var POINTS_PER_STARTER = 8;
|
|
9187
9291
|
var XI_SIZE = 11;
|
|
9188
9292
|
var DEFAULT_FORMATION = "4-3-3";
|
|
@@ -9225,26 +9329,26 @@ function StartingXiGame({
|
|
|
9225
9329
|
lockAtUtc
|
|
9226
9330
|
}) {
|
|
9227
9331
|
const t = ui.games.startingXi;
|
|
9228
|
-
const [slotPlayers, setSlotPlayers] =
|
|
9229
|
-
const [active, setActive] =
|
|
9230
|
-
const [query, setQuery] =
|
|
9332
|
+
const [slotPlayers, setSlotPlayers] = useState46(() => Array(XI_SIZE).fill(null));
|
|
9333
|
+
const [active, setActive] = useState46(0);
|
|
9334
|
+
const [query, setQuery] = useState46("");
|
|
9231
9335
|
const searchId = useId8();
|
|
9232
9336
|
const clientState = parseClientState8(result?.clientStateJson);
|
|
9233
9337
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
9234
|
-
const header = /* @__PURE__ */
|
|
9338
|
+
const header = /* @__PURE__ */ jsx87(
|
|
9235
9339
|
GameHeader,
|
|
9236
9340
|
{
|
|
9237
9341
|
title: gameTitle({ gameId: "starting-xi" }, ui.games.titles),
|
|
9238
9342
|
eyebrow: t.eyebrow,
|
|
9239
|
-
right: /* @__PURE__ */
|
|
9343
|
+
right: /* @__PURE__ */ jsx87(Chip, { variant: "accent", children: t.perStarter(POINTS_PER_STARTER) }),
|
|
9240
9344
|
onBack,
|
|
9241
9345
|
backLabel: ui.back
|
|
9242
9346
|
}
|
|
9243
9347
|
);
|
|
9244
9348
|
function statusScreen(title, score) {
|
|
9245
|
-
return /* @__PURE__ */
|
|
9349
|
+
return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
9246
9350
|
header,
|
|
9247
|
-
/* @__PURE__ */
|
|
9351
|
+
/* @__PURE__ */ jsx87("div", { className: "ss-g-body", children: /* @__PURE__ */ jsx87(ResultCard, { tone: "neutral", title, score, onBack, ui }) })
|
|
9248
9352
|
] });
|
|
9249
9353
|
}
|
|
9250
9354
|
if (alreadyPlayed) {
|
|
@@ -9253,9 +9357,9 @@ function StartingXiGame({
|
|
|
9253
9357
|
if (clientState.status === "graded") return statusScreen(t.gradedLine(clientState.correctCount), clientState.score);
|
|
9254
9358
|
}
|
|
9255
9359
|
if (!config) {
|
|
9256
|
-
return /* @__PURE__ */
|
|
9360
|
+
return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
9257
9361
|
header,
|
|
9258
|
-
/* @__PURE__ */
|
|
9362
|
+
/* @__PURE__ */ jsx87("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
9259
9363
|
] });
|
|
9260
9364
|
}
|
|
9261
9365
|
const { formation, slots } = formationSlots(config.formation);
|
|
@@ -9290,27 +9394,27 @@ function StartingXiGame({
|
|
|
9290
9394
|
onSubmit(JSON.stringify({ predictedPlayerIds: slotPlayers }));
|
|
9291
9395
|
}
|
|
9292
9396
|
const segments = slotPlayers.map((p) => p !== null ? "current" : "todo");
|
|
9293
|
-
return /* @__PURE__ */
|
|
9397
|
+
return /* @__PURE__ */ jsxs75("div", { className: "ss-g-screen", "data-game": "starting-xi", "data-testid": "game-screen-starting-xi", children: [
|
|
9294
9398
|
header,
|
|
9295
|
-
/* @__PURE__ */
|
|
9399
|
+
/* @__PURE__ */ jsx87(
|
|
9296
9400
|
SegmentProgress,
|
|
9297
9401
|
{
|
|
9298
9402
|
segments,
|
|
9299
9403
|
ariaLabel: t.picked(pickedCount),
|
|
9300
9404
|
leftLabel: t.picked(pickedCount),
|
|
9301
9405
|
rightLabel: t.toGo(XI_SIZE - pickedCount),
|
|
9302
|
-
right: /* @__PURE__ */
|
|
9406
|
+
right: /* @__PURE__ */ jsx87(Chip, { children: formation })
|
|
9303
9407
|
}
|
|
9304
9408
|
),
|
|
9305
|
-
/* @__PURE__ */
|
|
9306
|
-
/* @__PURE__ */
|
|
9307
|
-
/* @__PURE__ */
|
|
9409
|
+
/* @__PURE__ */ jsxs75("div", { className: "ss-g-body", children: [
|
|
9410
|
+
/* @__PURE__ */ jsxs75("div", { className: "ss-g-xi-pitch", children: [
|
|
9411
|
+
/* @__PURE__ */ jsx87(PitchSvg, { variant: "half" }),
|
|
9308
9412
|
slots.map((s) => {
|
|
9309
9413
|
const playerId = slotPlayers[s.index] ?? null;
|
|
9310
9414
|
const player = playerId !== null ? byId.get(playerId) ?? null : null;
|
|
9311
9415
|
const name = player?.playerName ?? "";
|
|
9312
9416
|
const state = player ? "filled" : active === s.index ? "active" : "empty";
|
|
9313
|
-
return /* @__PURE__ */
|
|
9417
|
+
return /* @__PURE__ */ jsxs75(
|
|
9314
9418
|
"button",
|
|
9315
9419
|
{
|
|
9316
9420
|
type: "button",
|
|
@@ -9322,21 +9426,21 @@ function StartingXiGame({
|
|
|
9322
9426
|
disabled: submitting,
|
|
9323
9427
|
onClick: () => tapSlot(s.index),
|
|
9324
9428
|
children: [
|
|
9325
|
-
/* @__PURE__ */
|
|
9326
|
-
/* @__PURE__ */
|
|
9429
|
+
/* @__PURE__ */ jsx87("span", { className: "ss-g-xi-ring", "aria-hidden": "true", children: player ? player.jerseyNumber ?? "" : /* @__PURE__ */ jsx87(IconPlus, { size: 18 }) }),
|
|
9430
|
+
/* @__PURE__ */ jsx87("span", { className: "ss-g-xi-tag", "aria-hidden": "true", children: player ? splitName(name).last : s.label })
|
|
9327
9431
|
]
|
|
9328
9432
|
},
|
|
9329
9433
|
s.index
|
|
9330
9434
|
);
|
|
9331
9435
|
})
|
|
9332
9436
|
] }),
|
|
9333
|
-
/* @__PURE__ */
|
|
9334
|
-
/* @__PURE__ */
|
|
9335
|
-
/* @__PURE__ */
|
|
9336
|
-
/* @__PURE__ */
|
|
9337
|
-
] }) : /* @__PURE__ */
|
|
9338
|
-
activeSlot && /* @__PURE__ */
|
|
9339
|
-
/* @__PURE__ */
|
|
9437
|
+
/* @__PURE__ */ jsxs75("div", { className: "ss-g-xi-picker", children: [
|
|
9438
|
+
/* @__PURE__ */ jsx87("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs75(Fragment21, { children: [
|
|
9439
|
+
/* @__PURE__ */ jsx87(Chip, { variant: "badge", children: activeSlot.label }),
|
|
9440
|
+
/* @__PURE__ */ jsx87("strong", { children: t.pickFor(activeSlot.label) })
|
|
9441
|
+
] }) : /* @__PURE__ */ jsx87("strong", { children: t.allPicked }) }),
|
|
9442
|
+
activeSlot && /* @__PURE__ */ jsxs75(Fragment21, { children: [
|
|
9443
|
+
/* @__PURE__ */ jsx87(
|
|
9340
9444
|
SearchField,
|
|
9341
9445
|
{
|
|
9342
9446
|
id: searchId,
|
|
@@ -9348,18 +9452,18 @@ function StartingXiGame({
|
|
|
9348
9452
|
disabled: submitting
|
|
9349
9453
|
}
|
|
9350
9454
|
),
|
|
9351
|
-
/* @__PURE__ */
|
|
9352
|
-
/* @__PURE__ */
|
|
9353
|
-
/* @__PURE__ */
|
|
9354
|
-
/* @__PURE__ */
|
|
9455
|
+
/* @__PURE__ */ jsx87("ul", { className: "ss-g-xi-list", children: available.map((p) => /* @__PURE__ */ jsx87("li", { children: /* @__PURE__ */ jsxs75("button", { type: "button", className: "ss-g-xi-opt", disabled: submitting, onClick: () => pick(p.playerId), children: [
|
|
9456
|
+
/* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-no", "aria-hidden": "true", children: p.jerseyNumber ?? "" }),
|
|
9457
|
+
/* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-name", children: p.playerName }),
|
|
9458
|
+
/* @__PURE__ */ jsx87("span", { className: "ss-g-xi-opt-pos", children: p.positionName })
|
|
9355
9459
|
] }) }, p.playerId)) })
|
|
9356
9460
|
] })
|
|
9357
9461
|
] })
|
|
9358
9462
|
] }),
|
|
9359
|
-
/* @__PURE__ */
|
|
9360
|
-
/* @__PURE__ */
|
|
9361
|
-
/* @__PURE__ */
|
|
9362
|
-
/* @__PURE__ */
|
|
9463
|
+
/* @__PURE__ */ jsxs75(FooterBar, { children: [
|
|
9464
|
+
/* @__PURE__ */ jsx87(GameButton, { variant: "primary", block: true, disabled: !canSubmit, onClick: handleSubmit, children: submitting ? t.submitting : t.submit }),
|
|
9465
|
+
/* @__PURE__ */ jsxs75("p", { className: "ss-g-xi-lock", children: [
|
|
9466
|
+
/* @__PURE__ */ jsx87(IconLock, {}),
|
|
9363
9467
|
lockAtUtc ? t.locksAt(ui.games.formatDayTime(lockAtUtc)) : t.locksSoon
|
|
9364
9468
|
] })
|
|
9365
9469
|
] })
|
|
@@ -9367,8 +9471,8 @@ function StartingXiGame({
|
|
|
9367
9471
|
}
|
|
9368
9472
|
|
|
9369
9473
|
// src/components/games/StatLadderGame.tsx
|
|
9370
|
-
import { useId as useId9, useState as
|
|
9371
|
-
import { jsx as
|
|
9474
|
+
import { useId as useId9, useState as useState47 } from "react";
|
|
9475
|
+
import { jsx as jsx88, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
9372
9476
|
function ladderClue(ladder) {
|
|
9373
9477
|
const mystery = ladder.find((r) => r.rank === 2);
|
|
9374
9478
|
if (!mystery) return null;
|
|
@@ -9390,9 +9494,9 @@ function parseClientState9(json) {
|
|
|
9390
9494
|
}
|
|
9391
9495
|
function NameStack({ name }) {
|
|
9392
9496
|
const { first, last } = splitName(name);
|
|
9393
|
-
return /* @__PURE__ */
|
|
9394
|
-
first && /* @__PURE__ */
|
|
9395
|
-
/* @__PURE__ */
|
|
9497
|
+
return /* @__PURE__ */ jsxs76("span", { className: "ss-g-sl-name", children: [
|
|
9498
|
+
first && /* @__PURE__ */ jsx88("small", { children: `${first[0]}.` }),
|
|
9499
|
+
/* @__PURE__ */ jsx88("b", { children: last })
|
|
9396
9500
|
] });
|
|
9397
9501
|
}
|
|
9398
9502
|
function StatLadderGame({
|
|
@@ -9404,16 +9508,16 @@ function StatLadderGame({
|
|
|
9404
9508
|
onBack
|
|
9405
9509
|
}) {
|
|
9406
9510
|
const t = ui.games.statLadder;
|
|
9407
|
-
const [query, setQuery] =
|
|
9408
|
-
const [selectedId, setSelectedId] =
|
|
9511
|
+
const [query, setQuery] = useState47("");
|
|
9512
|
+
const [selectedId, setSelectedId] = useState47(null);
|
|
9409
9513
|
const searchId = useId9();
|
|
9410
9514
|
const clientState = parseClientState9(result?.clientStateJson);
|
|
9411
9515
|
const revealed = clientState != null;
|
|
9412
|
-
const header = /* @__PURE__ */
|
|
9516
|
+
const header = /* @__PURE__ */ jsx88(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
|
|
9413
9517
|
if (!config) {
|
|
9414
|
-
return /* @__PURE__ */
|
|
9518
|
+
return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
9415
9519
|
header,
|
|
9416
|
-
/* @__PURE__ */
|
|
9520
|
+
/* @__PURE__ */ jsx88("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
9417
9521
|
] });
|
|
9418
9522
|
}
|
|
9419
9523
|
const question = t.question(config.statLabel);
|
|
@@ -9425,45 +9529,45 @@ function StatLadderGame({
|
|
|
9425
9529
|
if (selectedId === null || submitting || revealed) return;
|
|
9426
9530
|
onSubmit(JSON.stringify({ guessedPlayerId: selectedId }));
|
|
9427
9531
|
}
|
|
9428
|
-
return /* @__PURE__ */
|
|
9532
|
+
return /* @__PURE__ */ jsxs76("div", { className: "ss-g-screen", "data-game": "stat-ladder", "data-testid": "game-screen-stat-ladder", children: [
|
|
9429
9533
|
header,
|
|
9430
|
-
/* @__PURE__ */
|
|
9431
|
-
!revealed && /* @__PURE__ */
|
|
9432
|
-
/* @__PURE__ */
|
|
9433
|
-
/* @__PURE__ */
|
|
9434
|
-
/* @__PURE__ */
|
|
9534
|
+
/* @__PURE__ */ jsxs76("div", { className: "ss-g-body", children: [
|
|
9535
|
+
!revealed && /* @__PURE__ */ jsx88(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: 0, ui }),
|
|
9536
|
+
/* @__PURE__ */ jsxs76("div", { className: "ss-g-sl-prompt", children: [
|
|
9537
|
+
/* @__PURE__ */ jsx88(Chip, { variant: "accent", icon: /* @__PURE__ */ jsx88(IconShield, { size: 14 }), className: "ss-g-sl-stat", children: config.statLabel }),
|
|
9538
|
+
/* @__PURE__ */ jsxs76("h3", { className: "ss-g-sl-q", children: [
|
|
9435
9539
|
question.pre,
|
|
9436
|
-
/* @__PURE__ */
|
|
9540
|
+
/* @__PURE__ */ jsx88("em", { children: question.emph }),
|
|
9437
9541
|
question.post
|
|
9438
9542
|
] })
|
|
9439
9543
|
] }),
|
|
9440
|
-
/* @__PURE__ */
|
|
9441
|
-
(rung) => rung.rank === 2 ? /* @__PURE__ */
|
|
9544
|
+
/* @__PURE__ */ jsx88("ol", { className: "ss-g-sl-rungs", children: rungs.map(
|
|
9545
|
+
(rung) => rung.rank === 2 ? /* @__PURE__ */ jsxs76(
|
|
9442
9546
|
"li",
|
|
9443
9547
|
{
|
|
9444
9548
|
className: "ss-g-sl-rung ss-g-sl-rung--mystery",
|
|
9445
9549
|
"data-testid": "sl-mystery-rung",
|
|
9446
9550
|
"data-result": revealed ? clientState.isCorrect ? "correct" : "wrong" : void 0,
|
|
9447
9551
|
children: [
|
|
9448
|
-
/* @__PURE__ */
|
|
9449
|
-
revealed ? /* @__PURE__ */
|
|
9450
|
-
revealed ? /* @__PURE__ */
|
|
9451
|
-
/* @__PURE__ */
|
|
9552
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-g-sl-rank", children: "2" }),
|
|
9553
|
+
revealed ? /* @__PURE__ */ jsx88(PlayerAvatar, { name: clientState.revealedRank2.playerName, className: "ss-g-sl-av" }) : /* @__PURE__ */ jsx88(Silhouette, { size: 52, variant: "mystery" }),
|
|
9554
|
+
revealed ? /* @__PURE__ */ jsx88(NameStack, { name: clientState.revealedRank2.playerName }) : /* @__PURE__ */ jsx88("span", { className: "ss-g-sl-who", children: t.whoSecond }),
|
|
9555
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-g-sl-val ss-g-sl-val--mystery", children: rung.statValue })
|
|
9452
9556
|
]
|
|
9453
9557
|
},
|
|
9454
9558
|
rung.rank
|
|
9455
|
-
) : /* @__PURE__ */
|
|
9456
|
-
/* @__PURE__ */
|
|
9457
|
-
/* @__PURE__ */
|
|
9458
|
-
/* @__PURE__ */
|
|
9459
|
-
/* @__PURE__ */
|
|
9559
|
+
) : /* @__PURE__ */ jsxs76("li", { className: "ss-g-sl-rung", children: [
|
|
9560
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-g-sl-rank", children: rung.rank }),
|
|
9561
|
+
/* @__PURE__ */ jsx88(PlayerAvatar, { name: rung.playerName ?? "?", className: "ss-g-sl-av" }),
|
|
9562
|
+
/* @__PURE__ */ jsx88(NameStack, { name: rung.playerName ?? "?" }),
|
|
9563
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-g-sl-val", children: rung.statValue })
|
|
9460
9564
|
] }, rung.rank)
|
|
9461
9565
|
) }),
|
|
9462
|
-
clue && /* @__PURE__ */
|
|
9463
|
-
/* @__PURE__ */
|
|
9464
|
-
/* @__PURE__ */
|
|
9566
|
+
clue && /* @__PURE__ */ jsxs76("p", { className: "ss-g-sl-clue", children: [
|
|
9567
|
+
/* @__PURE__ */ jsx88(IconBulb, {}),
|
|
9568
|
+
/* @__PURE__ */ jsx88("span", { children: t.clue(clue, config.statLabel) })
|
|
9465
9569
|
] }),
|
|
9466
|
-
!revealed && /* @__PURE__ */
|
|
9570
|
+
!revealed && /* @__PURE__ */ jsx88("ul", { className: "ss-g-sl-pool", children: pool.map((p) => /* @__PURE__ */ jsx88("li", { children: /* @__PURE__ */ jsxs76(
|
|
9467
9571
|
"button",
|
|
9468
9572
|
{
|
|
9469
9573
|
type: "button",
|
|
@@ -9476,13 +9580,13 @@ function StatLadderGame({
|
|
|
9476
9580
|
setQuery(p.playerName);
|
|
9477
9581
|
},
|
|
9478
9582
|
children: [
|
|
9479
|
-
/* @__PURE__ */
|
|
9480
|
-
/* @__PURE__ */
|
|
9481
|
-
selectedId === p.playerId && /* @__PURE__ */
|
|
9583
|
+
/* @__PURE__ */ jsx88(PlayerAvatar, { name: p.playerName, className: "ss-g-sl-opt-av" }),
|
|
9584
|
+
/* @__PURE__ */ jsx88("span", { className: "ss-g-sl-opt-name", children: p.playerName }),
|
|
9585
|
+
selectedId === p.playerId && /* @__PURE__ */ jsx88(IconCheck, {})
|
|
9482
9586
|
]
|
|
9483
9587
|
}
|
|
9484
9588
|
) }, p.playerId)) }),
|
|
9485
|
-
revealed && /* @__PURE__ */
|
|
9589
|
+
revealed && /* @__PURE__ */ jsx88(
|
|
9486
9590
|
ResultCard,
|
|
9487
9591
|
{
|
|
9488
9592
|
tone: clientState.isCorrect ? "win" : "lose",
|
|
@@ -9493,8 +9597,8 @@ function StatLadderGame({
|
|
|
9493
9597
|
}
|
|
9494
9598
|
)
|
|
9495
9599
|
] }),
|
|
9496
|
-
!revealed && /* @__PURE__ */
|
|
9497
|
-
/* @__PURE__ */
|
|
9600
|
+
!revealed && /* @__PURE__ */ jsx88(FooterBar, { children: /* @__PURE__ */ jsxs76("div", { className: "ss-g-sl-guess", children: [
|
|
9601
|
+
/* @__PURE__ */ jsx88(
|
|
9498
9602
|
SearchField,
|
|
9499
9603
|
{
|
|
9500
9604
|
id: searchId,
|
|
@@ -9509,13 +9613,13 @@ function StatLadderGame({
|
|
|
9509
9613
|
disabled: submitting
|
|
9510
9614
|
}
|
|
9511
9615
|
),
|
|
9512
|
-
/* @__PURE__ */
|
|
9616
|
+
/* @__PURE__ */ jsx88(GameButton, { variant: "primary", disabled: selectedId === null || submitting, onClick: guess, children: t.guess })
|
|
9513
9617
|
] }) })
|
|
9514
9618
|
] });
|
|
9515
9619
|
}
|
|
9516
9620
|
|
|
9517
9621
|
// src/components/games/FanMotmGame.tsx
|
|
9518
|
-
import { jsx as
|
|
9622
|
+
import { jsx as jsx89, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
9519
9623
|
function parseClientState10(json) {
|
|
9520
9624
|
if (!json) return null;
|
|
9521
9625
|
try {
|
|
@@ -9536,20 +9640,20 @@ function FanMotmGame({
|
|
|
9536
9640
|
const clientState = parseClientState10(result?.clientStateJson);
|
|
9537
9641
|
const alreadyVoted = result?.alreadyPlayed === true;
|
|
9538
9642
|
const pickedId = clientState?.pickedPlayerId ?? null;
|
|
9539
|
-
const header = /* @__PURE__ */
|
|
9643
|
+
const header = /* @__PURE__ */ jsx89(
|
|
9540
9644
|
GameHeader,
|
|
9541
9645
|
{
|
|
9542
9646
|
title: t.title,
|
|
9543
9647
|
eyebrow: t.eyebrow,
|
|
9544
|
-
right: alreadyVoted ? /* @__PURE__ */
|
|
9648
|
+
right: alreadyVoted ? /* @__PURE__ */ jsx89(Chip, { variant: "success", icon: /* @__PURE__ */ jsx89(IconCheck, {}), children: t.voted }) : void 0,
|
|
9545
9649
|
onBack,
|
|
9546
9650
|
backLabel: ui.back
|
|
9547
9651
|
}
|
|
9548
9652
|
);
|
|
9549
9653
|
if (!config) {
|
|
9550
|
-
return /* @__PURE__ */
|
|
9654
|
+
return /* @__PURE__ */ jsxs77("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
9551
9655
|
header,
|
|
9552
|
-
/* @__PURE__ */
|
|
9656
|
+
/* @__PURE__ */ jsx89("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading })
|
|
9553
9657
|
] });
|
|
9554
9658
|
}
|
|
9555
9659
|
const picked = config.candidates.find((c) => c.playerId === pickedId) ?? null;
|
|
@@ -9557,12 +9661,12 @@ function FanMotmGame({
|
|
|
9557
9661
|
if (alreadyVoted || submitting) return;
|
|
9558
9662
|
onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
|
|
9559
9663
|
}
|
|
9560
|
-
return /* @__PURE__ */
|
|
9664
|
+
return /* @__PURE__ */ jsxs77("div", { className: "ss-g-screen", "data-game": "fan-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
9561
9665
|
header,
|
|
9562
|
-
/* @__PURE__ */
|
|
9563
|
-
/* @__PURE__ */
|
|
9666
|
+
/* @__PURE__ */ jsxs77("div", { className: "ss-g-body", children: [
|
|
9667
|
+
/* @__PURE__ */ jsx89("ul", { className: "ss-g-motm-list", children: config.candidates.map((c) => {
|
|
9564
9668
|
const isVoted = alreadyVoted && pickedId === c.playerId;
|
|
9565
|
-
return /* @__PURE__ */
|
|
9669
|
+
return /* @__PURE__ */ jsx89("li", { children: /* @__PURE__ */ jsxs77(
|
|
9566
9670
|
"button",
|
|
9567
9671
|
{
|
|
9568
9672
|
type: "button",
|
|
@@ -9571,24 +9675,24 @@ function FanMotmGame({
|
|
|
9571
9675
|
disabled: alreadyVoted || submitting,
|
|
9572
9676
|
onClick: () => handleVote(c.playerId),
|
|
9573
9677
|
children: [
|
|
9574
|
-
/* @__PURE__ */
|
|
9575
|
-
/* @__PURE__ */
|
|
9576
|
-
isVoted && /* @__PURE__ */
|
|
9678
|
+
/* @__PURE__ */ jsx89(PlayerAvatar, { name: c.playerName, className: "ss-g-motm-av" }),
|
|
9679
|
+
/* @__PURE__ */ jsx89("span", { className: "ss-g-motm-name", children: c.playerName }),
|
|
9680
|
+
isVoted && /* @__PURE__ */ jsx89(Chip, { variant: "accent", className: "ss-g-motm-pill", children: t.yourVote })
|
|
9577
9681
|
]
|
|
9578
9682
|
}
|
|
9579
9683
|
) }, c.playerId);
|
|
9580
9684
|
}) }),
|
|
9581
|
-
alreadyVoted && picked && /* @__PURE__ */
|
|
9685
|
+
alreadyVoted && picked && /* @__PURE__ */ jsx89(ResultCard, { tone: "neutral", title: t.youVoted(picked.playerName), detail: t.thanks, onBack, ui })
|
|
9582
9686
|
] }),
|
|
9583
|
-
/* @__PURE__ */
|
|
9584
|
-
!alreadyVoted && /* @__PURE__ */
|
|
9585
|
-
/* @__PURE__ */
|
|
9687
|
+
/* @__PURE__ */ jsxs77(FooterBar, { children: [
|
|
9688
|
+
!alreadyVoted && /* @__PURE__ */ jsx89("p", { className: "ss-g-motm-foot", children: t.tapToVote }),
|
|
9689
|
+
/* @__PURE__ */ jsx89("p", { className: "ss-g-motm-fun", children: t.forFun })
|
|
9586
9690
|
] })
|
|
9587
9691
|
] });
|
|
9588
9692
|
}
|
|
9589
9693
|
|
|
9590
9694
|
// src/components/GameScreenHost.tsx
|
|
9591
|
-
import { jsx as
|
|
9695
|
+
import { jsx as jsx90 } from "react/jsx-runtime";
|
|
9592
9696
|
var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
|
|
9593
9697
|
"matchday-predictor",
|
|
9594
9698
|
"starting-xi",
|
|
@@ -9612,7 +9716,7 @@ function GameScreenHost({
|
|
|
9612
9716
|
ui
|
|
9613
9717
|
}) {
|
|
9614
9718
|
const { gameId, fixtureId, gameDay = "", lockAtUtc = null } = selected;
|
|
9615
|
-
const [configJson, setConfigJson] =
|
|
9719
|
+
const [configJson, setConfigJson] = useState48(null);
|
|
9616
9720
|
useEffect29(() => {
|
|
9617
9721
|
setConfigJson(null);
|
|
9618
9722
|
if (!conversation) return;
|
|
@@ -9664,7 +9768,7 @@ function GameScreenHost({
|
|
|
9664
9768
|
function renderScreen() {
|
|
9665
9769
|
switch (gameId) {
|
|
9666
9770
|
case "mystery-tiger":
|
|
9667
|
-
return /* @__PURE__ */
|
|
9771
|
+
return /* @__PURE__ */ jsx90(
|
|
9668
9772
|
MysteryTigerGame,
|
|
9669
9773
|
{
|
|
9670
9774
|
...sharedProps,
|
|
@@ -9672,7 +9776,7 @@ function GameScreenHost({
|
|
|
9672
9776
|
}
|
|
9673
9777
|
);
|
|
9674
9778
|
case "higher-or-lower":
|
|
9675
|
-
return /* @__PURE__ */
|
|
9779
|
+
return /* @__PURE__ */ jsx90(
|
|
9676
9780
|
HigherOrLowerGame,
|
|
9677
9781
|
{
|
|
9678
9782
|
...sharedProps,
|
|
@@ -9680,7 +9784,7 @@ function GameScreenHost({
|
|
|
9680
9784
|
}
|
|
9681
9785
|
);
|
|
9682
9786
|
case "career-path":
|
|
9683
|
-
return /* @__PURE__ */
|
|
9787
|
+
return /* @__PURE__ */ jsx90(
|
|
9684
9788
|
CareerPathGame,
|
|
9685
9789
|
{
|
|
9686
9790
|
...sharedProps,
|
|
@@ -9689,7 +9793,7 @@ function GameScreenHost({
|
|
|
9689
9793
|
);
|
|
9690
9794
|
case "beat-the-grid": {
|
|
9691
9795
|
const btgConfig = safeParseConfig(configJson);
|
|
9692
|
-
return /* @__PURE__ */
|
|
9796
|
+
return /* @__PURE__ */ jsx90(
|
|
9693
9797
|
BeatTheGridGame,
|
|
9694
9798
|
{
|
|
9695
9799
|
...sharedProps,
|
|
@@ -9699,7 +9803,7 @@ function GameScreenHost({
|
|
|
9699
9803
|
);
|
|
9700
9804
|
}
|
|
9701
9805
|
case "guess-the-xi":
|
|
9702
|
-
return /* @__PURE__ */
|
|
9806
|
+
return /* @__PURE__ */ jsx90(
|
|
9703
9807
|
GuessTheXiGame,
|
|
9704
9808
|
{
|
|
9705
9809
|
...sharedProps,
|
|
@@ -9707,7 +9811,7 @@ function GameScreenHost({
|
|
|
9707
9811
|
}
|
|
9708
9812
|
);
|
|
9709
9813
|
case "daily-quiz":
|
|
9710
|
-
return /* @__PURE__ */
|
|
9814
|
+
return /* @__PURE__ */ jsx90(
|
|
9711
9815
|
DailyQuizGame,
|
|
9712
9816
|
{
|
|
9713
9817
|
...sharedProps,
|
|
@@ -9715,7 +9819,7 @@ function GameScreenHost({
|
|
|
9715
9819
|
}
|
|
9716
9820
|
);
|
|
9717
9821
|
case "matchday-predictor":
|
|
9718
|
-
return /* @__PURE__ */
|
|
9822
|
+
return /* @__PURE__ */ jsx90(
|
|
9719
9823
|
MatchdayPredictorGame,
|
|
9720
9824
|
{
|
|
9721
9825
|
...sharedProps,
|
|
@@ -9723,7 +9827,7 @@ function GameScreenHost({
|
|
|
9723
9827
|
}
|
|
9724
9828
|
);
|
|
9725
9829
|
case "starting-xi":
|
|
9726
|
-
return /* @__PURE__ */
|
|
9830
|
+
return /* @__PURE__ */ jsx90(
|
|
9727
9831
|
StartingXiGame,
|
|
9728
9832
|
{
|
|
9729
9833
|
...sharedProps,
|
|
@@ -9731,7 +9835,7 @@ function GameScreenHost({
|
|
|
9731
9835
|
}
|
|
9732
9836
|
);
|
|
9733
9837
|
case "stat-ladder":
|
|
9734
|
-
return /* @__PURE__ */
|
|
9838
|
+
return /* @__PURE__ */ jsx90(
|
|
9735
9839
|
StatLadderGame,
|
|
9736
9840
|
{
|
|
9737
9841
|
...sharedProps,
|
|
@@ -9739,7 +9843,7 @@ function GameScreenHost({
|
|
|
9739
9843
|
}
|
|
9740
9844
|
);
|
|
9741
9845
|
case "fan-motm":
|
|
9742
|
-
return /* @__PURE__ */
|
|
9846
|
+
return /* @__PURE__ */ jsx90(
|
|
9743
9847
|
FanMotmGame,
|
|
9744
9848
|
{
|
|
9745
9849
|
...sharedProps,
|
|
@@ -9747,17 +9851,17 @@ function GameScreenHost({
|
|
|
9747
9851
|
}
|
|
9748
9852
|
);
|
|
9749
9853
|
default:
|
|
9750
|
-
return /* @__PURE__ */
|
|
9854
|
+
return /* @__PURE__ */ jsx90("div", { className: "ss-g-screen", "data-testid": `game-screen-${gameId}`, children: /* @__PURE__ */ jsx90(GameHeader, { title: gameTitle({ gameId }, ui.games.titles), onBack, backLabel: ui.back }) });
|
|
9751
9855
|
}
|
|
9752
9856
|
}
|
|
9753
|
-
return /* @__PURE__ */
|
|
9857
|
+
return /* @__PURE__ */ jsx90("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
|
|
9754
9858
|
}
|
|
9755
9859
|
|
|
9756
9860
|
// src/components/Leaderboard.tsx
|
|
9757
|
-
import { useState as
|
|
9861
|
+
import { useState as useState49 } from "react";
|
|
9758
9862
|
|
|
9759
9863
|
// src/components/LeaderboardRow.tsx
|
|
9760
|
-
import { jsx as
|
|
9864
|
+
import { jsx as jsx91, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
9761
9865
|
function formatPoints(n) {
|
|
9762
9866
|
return n.toLocaleString("en");
|
|
9763
9867
|
}
|
|
@@ -9766,14 +9870,14 @@ function LeaderboardWeeklyRow({
|
|
|
9766
9870
|
isMe
|
|
9767
9871
|
}) {
|
|
9768
9872
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
9769
|
-
return /* @__PURE__ */
|
|
9770
|
-
/* @__PURE__ */
|
|
9873
|
+
return /* @__PURE__ */ jsxs78("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
9874
|
+
/* @__PURE__ */ jsxs78("span", { className: rankClass, children: [
|
|
9771
9875
|
"#",
|
|
9772
9876
|
row.rank
|
|
9773
9877
|
] }),
|
|
9774
|
-
/* @__PURE__ */
|
|
9775
|
-
/* @__PURE__ */
|
|
9776
|
-
row.currentStreak > 0 && /* @__PURE__ */
|
|
9878
|
+
/* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
9879
|
+
/* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
|
|
9880
|
+
row.currentStreak > 0 && /* @__PURE__ */ jsxs78("span", { className: "ss-w-lb2-streak", children: [
|
|
9777
9881
|
"\u{1F525} ",
|
|
9778
9882
|
row.currentStreak
|
|
9779
9883
|
] })
|
|
@@ -9784,18 +9888,18 @@ function LeaderboardAllTimeRow({
|
|
|
9784
9888
|
isMe
|
|
9785
9889
|
}) {
|
|
9786
9890
|
const rankClass = `ss-w-lb2-rank${row.rank <= 3 ? " ss-w-lb2-rank--top3" : ""}`;
|
|
9787
|
-
return /* @__PURE__ */
|
|
9788
|
-
/* @__PURE__ */
|
|
9891
|
+
return /* @__PURE__ */ jsxs78("div", { className: `ss-w-lb2-row${isMe ? " ss-w-lb2-row--you" : ""}`, children: [
|
|
9892
|
+
/* @__PURE__ */ jsxs78("span", { className: rankClass, children: [
|
|
9789
9893
|
"#",
|
|
9790
9894
|
row.rank
|
|
9791
9895
|
] }),
|
|
9792
|
-
/* @__PURE__ */
|
|
9793
|
-
/* @__PURE__ */
|
|
9896
|
+
/* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
9897
|
+
/* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
|
|
9794
9898
|
] });
|
|
9795
9899
|
}
|
|
9796
9900
|
|
|
9797
9901
|
// src/components/LeaderboardEmpty.tsx
|
|
9798
|
-
import { jsx as
|
|
9902
|
+
import { jsx as jsx92, jsxs as jsxs79 } from "react/jsx-runtime";
|
|
9799
9903
|
function LeaderboardEmpty({
|
|
9800
9904
|
segment,
|
|
9801
9905
|
lastWeek,
|
|
@@ -9804,48 +9908,48 @@ function LeaderboardEmpty({
|
|
|
9804
9908
|
ui
|
|
9805
9909
|
}) {
|
|
9806
9910
|
if (segment === "alltime") {
|
|
9807
|
-
return /* @__PURE__ */
|
|
9808
|
-
/* @__PURE__ */
|
|
9809
|
-
/* @__PURE__ */
|
|
9911
|
+
return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
|
|
9912
|
+
/* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
|
|
9913
|
+
/* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
|
|
9810
9914
|
] });
|
|
9811
9915
|
}
|
|
9812
9916
|
const fresh = lastWeek != null;
|
|
9813
9917
|
const title = fresh ? ui.leaderboardEmptyFreshTitle : ui.leaderboardEmptyColdTitle;
|
|
9814
9918
|
const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
|
|
9815
|
-
return /* @__PURE__ */
|
|
9816
|
-
weeklyPrize && /* @__PURE__ */
|
|
9817
|
-
/* @__PURE__ */
|
|
9818
|
-
/* @__PURE__ */
|
|
9919
|
+
return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty", children: [
|
|
9920
|
+
weeklyPrize && /* @__PURE__ */ jsxs79("div", { className: "ss-w-prize", children: [
|
|
9921
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
|
|
9922
|
+
/* @__PURE__ */ jsx92("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx92("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
|
|
9819
9923
|
] }),
|
|
9820
|
-
/* @__PURE__ */
|
|
9821
|
-
/* @__PURE__ */
|
|
9822
|
-
/* @__PURE__ */
|
|
9823
|
-
/* @__PURE__ */
|
|
9824
|
-
onPlay && /* @__PURE__ */
|
|
9924
|
+
/* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-empty-hero", children: [
|
|
9925
|
+
/* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
|
|
9926
|
+
/* @__PURE__ */ jsx92("h4", { className: "ss-w-lb-empty-title", children: title }),
|
|
9927
|
+
/* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: body }),
|
|
9928
|
+
onPlay && /* @__PURE__ */ jsx92("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
|
|
9825
9929
|
] }),
|
|
9826
|
-
fresh && lastWeek && /* @__PURE__ */
|
|
9827
|
-
/* @__PURE__ */
|
|
9828
|
-
/* @__PURE__ */
|
|
9829
|
-
/* @__PURE__ */
|
|
9830
|
-
/* @__PURE__ */
|
|
9930
|
+
fresh && lastWeek && /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb-last", children: [
|
|
9931
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
|
|
9932
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
|
|
9933
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
|
|
9934
|
+
/* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
|
|
9831
9935
|
] })
|
|
9832
9936
|
] });
|
|
9833
9937
|
}
|
|
9834
9938
|
|
|
9835
9939
|
// src/components/Leaderboard.tsx
|
|
9836
|
-
import { Fragment as
|
|
9940
|
+
import { Fragment as Fragment22, jsx as jsx93, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
9837
9941
|
function Leaderboard({
|
|
9838
9942
|
data,
|
|
9839
9943
|
ui,
|
|
9840
9944
|
onPlay
|
|
9841
9945
|
}) {
|
|
9842
|
-
const [segment, setSegment] =
|
|
9946
|
+
const [segment, setSegment] = useState49("weekly");
|
|
9843
9947
|
const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
|
|
9844
9948
|
const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
|
|
9845
9949
|
const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
|
|
9846
|
-
return /* @__PURE__ */
|
|
9847
|
-
/* @__PURE__ */
|
|
9848
|
-
/* @__PURE__ */
|
|
9950
|
+
return /* @__PURE__ */ jsxs80("div", { className: "ss-w-lb2", children: [
|
|
9951
|
+
/* @__PURE__ */ jsxs80("div", { className: "ss-w-seg", children: [
|
|
9952
|
+
/* @__PURE__ */ jsx93(
|
|
9849
9953
|
"button",
|
|
9850
9954
|
{
|
|
9851
9955
|
type: "button",
|
|
@@ -9855,7 +9959,7 @@ function Leaderboard({
|
|
|
9855
9959
|
children: ui.leaderboardThisWeek
|
|
9856
9960
|
}
|
|
9857
9961
|
),
|
|
9858
|
-
/* @__PURE__ */
|
|
9962
|
+
/* @__PURE__ */ jsx93(
|
|
9859
9963
|
"button",
|
|
9860
9964
|
{
|
|
9861
9965
|
type: "button",
|
|
@@ -9866,7 +9970,7 @@ function Leaderboard({
|
|
|
9866
9970
|
}
|
|
9867
9971
|
)
|
|
9868
9972
|
] }),
|
|
9869
|
-
isEmpty ? /* @__PURE__ */
|
|
9973
|
+
isEmpty ? /* @__PURE__ */ jsx93(
|
|
9870
9974
|
LeaderboardEmpty,
|
|
9871
9975
|
{
|
|
9872
9976
|
segment,
|
|
@@ -9875,15 +9979,15 @@ function Leaderboard({
|
|
|
9875
9979
|
onPlay,
|
|
9876
9980
|
ui
|
|
9877
9981
|
}
|
|
9878
|
-
) : /* @__PURE__ */
|
|
9879
|
-
/* @__PURE__ */
|
|
9982
|
+
) : /* @__PURE__ */ jsxs80(Fragment22, { children: [
|
|
9983
|
+
/* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx93(
|
|
9880
9984
|
LeaderboardWeeklyRow,
|
|
9881
9985
|
{
|
|
9882
9986
|
row,
|
|
9883
9987
|
isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
|
|
9884
9988
|
},
|
|
9885
9989
|
row.operatorUserId
|
|
9886
|
-
)) : data.allTimeTop.map((row) => /* @__PURE__ */
|
|
9990
|
+
)) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx93(
|
|
9887
9991
|
LeaderboardAllTimeRow,
|
|
9888
9992
|
{
|
|
9889
9993
|
row,
|
|
@@ -9891,18 +9995,18 @@ function Leaderboard({
|
|
|
9891
9995
|
},
|
|
9892
9996
|
row.operatorUserId
|
|
9893
9997
|
)) }),
|
|
9894
|
-
/* @__PURE__ */
|
|
9895
|
-
myRow != null && (offBoard ? /* @__PURE__ */
|
|
9896
|
-
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */
|
|
9897
|
-
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */
|
|
9998
|
+
/* @__PURE__ */ jsx93("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
|
|
9999
|
+
myRow != null && (offBoard ? /* @__PURE__ */ jsx93("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs80("div", { className: "ss-w-lb2-rows", children: [
|
|
10000
|
+
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx93(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
|
|
10001
|
+
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx93(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
|
|
9898
10002
|
] })),
|
|
9899
|
-
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */
|
|
10003
|
+
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx93("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
|
|
9900
10004
|
] })
|
|
9901
10005
|
] });
|
|
9902
10006
|
}
|
|
9903
10007
|
|
|
9904
10008
|
// src/components/LeaderboardPanel.tsx
|
|
9905
|
-
import { jsx as
|
|
10009
|
+
import { jsx as jsx94 } from "react/jsx-runtime";
|
|
9906
10010
|
var EMPTY_PAYLOAD = {
|
|
9907
10011
|
week: "",
|
|
9908
10012
|
weeklyTop: [],
|
|
@@ -9913,9 +10017,9 @@ var EMPTY_PAYLOAD = {
|
|
|
9913
10017
|
lastWeek: null
|
|
9914
10018
|
};
|
|
9915
10019
|
function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
|
|
9916
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
9917
|
-
if (data === null && loading) return /* @__PURE__ */
|
|
9918
|
-
return /* @__PURE__ */
|
|
10020
|
+
if (!loggedIn) return /* @__PURE__ */ jsx94(GamesLoginWall, { ui });
|
|
10021
|
+
if (data === null && loading) return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list" });
|
|
10022
|
+
return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx94(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
|
|
9919
10023
|
}
|
|
9920
10024
|
|
|
9921
10025
|
// src/components/games/ui/fonts.ts
|
|
@@ -9932,7 +10036,7 @@ function ensureGamesFonts(doc = document) {
|
|
|
9932
10036
|
}
|
|
9933
10037
|
|
|
9934
10038
|
// src/components/GamesPanel.tsx
|
|
9935
|
-
import { jsx as
|
|
10039
|
+
import { jsx as jsx95, jsxs as jsxs81 } from "react/jsx-runtime";
|
|
9936
10040
|
function GamesPanel({
|
|
9937
10041
|
loggedIn,
|
|
9938
10042
|
games,
|
|
@@ -9942,14 +10046,14 @@ function GamesPanel({
|
|
|
9942
10046
|
leaderboardLoading,
|
|
9943
10047
|
refreshHub
|
|
9944
10048
|
}) {
|
|
9945
|
-
const [selected, setSelected] =
|
|
9946
|
-
const [segment, setSegment] =
|
|
10049
|
+
const [selected, setSelected] = useState50(null);
|
|
10050
|
+
const [segment, setSegment] = useState50("play");
|
|
9947
10051
|
useEffect30(() => {
|
|
9948
10052
|
ensureGamesFonts();
|
|
9949
10053
|
}, []);
|
|
9950
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
10054
|
+
if (!loggedIn) return /* @__PURE__ */ jsx95(GamesLoginWall, { ui });
|
|
9951
10055
|
if (selected !== null) {
|
|
9952
|
-
return /* @__PURE__ */
|
|
10056
|
+
return /* @__PURE__ */ jsx95("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx95(
|
|
9953
10057
|
GameScreenHost,
|
|
9954
10058
|
{
|
|
9955
10059
|
selected,
|
|
@@ -9963,9 +10067,9 @@ function GamesPanel({
|
|
|
9963
10067
|
}
|
|
9964
10068
|
) });
|
|
9965
10069
|
}
|
|
9966
|
-
return /* @__PURE__ */
|
|
9967
|
-
/* @__PURE__ */
|
|
9968
|
-
/* @__PURE__ */
|
|
10070
|
+
return /* @__PURE__ */ jsxs81("div", { className: "ss-g-hub-wrap", lang: ui.games.lang, children: [
|
|
10071
|
+
/* @__PURE__ */ jsxs81("div", { className: "ss-w-seg", children: [
|
|
10072
|
+
/* @__PURE__ */ jsx95(
|
|
9969
10073
|
"button",
|
|
9970
10074
|
{
|
|
9971
10075
|
type: "button",
|
|
@@ -9975,7 +10079,7 @@ function GamesPanel({
|
|
|
9975
10079
|
children: ui.gamesPlaySegment
|
|
9976
10080
|
}
|
|
9977
10081
|
),
|
|
9978
|
-
/* @__PURE__ */
|
|
10082
|
+
/* @__PURE__ */ jsx95(
|
|
9979
10083
|
"button",
|
|
9980
10084
|
{
|
|
9981
10085
|
type: "button",
|
|
@@ -9986,7 +10090,7 @@ function GamesPanel({
|
|
|
9986
10090
|
}
|
|
9987
10091
|
)
|
|
9988
10092
|
] }),
|
|
9989
|
-
segment === "play" ? /* @__PURE__ */
|
|
10093
|
+
segment === "play" ? /* @__PURE__ */ jsx95("div", { "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx95(
|
|
9990
10094
|
GamesHub,
|
|
9991
10095
|
{
|
|
9992
10096
|
games,
|
|
@@ -9994,7 +10098,7 @@ function GamesPanel({
|
|
|
9994
10098
|
myWeeklyRow: leaderboard?.myWeeklyRow ?? null,
|
|
9995
10099
|
ui
|
|
9996
10100
|
}
|
|
9997
|
-
) }) : /* @__PURE__ */
|
|
10101
|
+
) }) : /* @__PURE__ */ jsx95(
|
|
9998
10102
|
LeaderboardPanel,
|
|
9999
10103
|
{
|
|
10000
10104
|
loggedIn,
|
|
@@ -10008,7 +10112,7 @@ function GamesPanel({
|
|
|
10008
10112
|
}
|
|
10009
10113
|
|
|
10010
10114
|
// src/components/Fixtures.tsx
|
|
10011
|
-
import { jsx as
|
|
10115
|
+
import { jsx as jsx96, jsxs as jsxs82 } from "react/jsx-runtime";
|
|
10012
10116
|
function groupByRound(fixtures) {
|
|
10013
10117
|
const groups = [];
|
|
10014
10118
|
for (const fx of fixtures) {
|
|
@@ -10020,31 +10124,31 @@ function groupByRound(fixtures) {
|
|
|
10020
10124
|
}
|
|
10021
10125
|
function Fixtures({ fixtures, loading, ui }) {
|
|
10022
10126
|
if (fixtures.length === 0) {
|
|
10023
|
-
if (loading) return /* @__PURE__ */
|
|
10024
|
-
return /* @__PURE__ */
|
|
10127
|
+
if (loading) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list" });
|
|
10128
|
+
return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-empty", children: ui.clubFixturesEmpty });
|
|
10025
10129
|
}
|
|
10026
|
-
return /* @__PURE__ */
|
|
10027
|
-
group.round && /* @__PURE__ */
|
|
10130
|
+
return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list", children: groupByRound(fixtures).map((group, gi) => /* @__PURE__ */ jsxs82("div", { children: [
|
|
10131
|
+
group.round && /* @__PURE__ */ jsx96("div", { className: "ss-w-club-eyebrow", children: group.round }),
|
|
10028
10132
|
group.items.map((fx) => {
|
|
10029
10133
|
const played = fx.homeScore !== null && fx.awayScore !== null;
|
|
10030
10134
|
const kickoff = fx.matchDateTime ? ui.bettingKickoff(fx.matchDateTime) : null;
|
|
10031
|
-
return /* @__PURE__ */
|
|
10032
|
-
/* @__PURE__ */
|
|
10033
|
-
fx.competitionName && /* @__PURE__ */
|
|
10034
|
-
!played && kickoff && /* @__PURE__ */
|
|
10135
|
+
return /* @__PURE__ */ jsxs82("div", { className: "ss-w-mon", children: [
|
|
10136
|
+
/* @__PURE__ */ jsxs82("div", { className: "ss-w-mon-top", children: [
|
|
10137
|
+
fx.competitionName && /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-comp", children: fx.competitionName }),
|
|
10138
|
+
!played && kickoff && /* @__PURE__ */ jsxs82("span", { className: "ss-w-mon-pill", children: [
|
|
10035
10139
|
kickoff.dayLabel,
|
|
10036
10140
|
" \xB7 ",
|
|
10037
10141
|
kickoff.time
|
|
10038
10142
|
] })
|
|
10039
10143
|
] }),
|
|
10040
|
-
/* @__PURE__ */
|
|
10041
|
-
/* @__PURE__ */
|
|
10042
|
-
played ? /* @__PURE__ */
|
|
10144
|
+
/* @__PURE__ */ jsxs82("div", { className: "ss-w-mon-main", children: [
|
|
10145
|
+
/* @__PURE__ */ jsx96("span", { className: "ss-w-mon-side", children: /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-name", children: fx.homeTeamName }) }),
|
|
10146
|
+
played ? /* @__PURE__ */ jsxs82("span", { className: "ss-w-mon-score", children: [
|
|
10043
10147
|
fx.homeScore,
|
|
10044
|
-
/* @__PURE__ */
|
|
10148
|
+
/* @__PURE__ */ jsx96("i", { children: "-" }),
|
|
10045
10149
|
fx.awayScore
|
|
10046
|
-
] }) : /* @__PURE__ */
|
|
10047
|
-
/* @__PURE__ */
|
|
10150
|
+
] }) : /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-vs", children: "vs" }),
|
|
10151
|
+
/* @__PURE__ */ jsx96("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: /* @__PURE__ */ jsx96("span", { className: "ss-w-mon-name", children: fx.awayTeamName }) })
|
|
10048
10152
|
] })
|
|
10049
10153
|
] }, fx.id);
|
|
10050
10154
|
})
|
|
@@ -10052,7 +10156,7 @@ function Fixtures({ fixtures, loading, ui }) {
|
|
|
10052
10156
|
}
|
|
10053
10157
|
|
|
10054
10158
|
// src/components/Standings.tsx
|
|
10055
|
-
import { jsx as
|
|
10159
|
+
import { jsx as jsx97, jsxs as jsxs83 } from "react/jsx-runtime";
|
|
10056
10160
|
function groupByTable(rows) {
|
|
10057
10161
|
const groups = [];
|
|
10058
10162
|
for (const row of rows) {
|
|
@@ -10063,30 +10167,30 @@ function groupByTable(rows) {
|
|
|
10063
10167
|
return groups;
|
|
10064
10168
|
}
|
|
10065
10169
|
function Standings({ standings, loading, ui }) {
|
|
10066
|
-
if (standings === null && loading) return /* @__PURE__ */
|
|
10067
|
-
if (standings === null || standings.length === 0) return /* @__PURE__ */
|
|
10068
|
-
return /* @__PURE__ */
|
|
10069
|
-
group.table && /* @__PURE__ */
|
|
10070
|
-
/* @__PURE__ */
|
|
10071
|
-
/* @__PURE__ */
|
|
10072
|
-
/* @__PURE__ */
|
|
10073
|
-
/* @__PURE__ */
|
|
10074
|
-
/* @__PURE__ */
|
|
10075
|
-
/* @__PURE__ */
|
|
10076
|
-
/* @__PURE__ */
|
|
10077
|
-
/* @__PURE__ */
|
|
10078
|
-
/* @__PURE__ */
|
|
10079
|
-
/* @__PURE__ */
|
|
10170
|
+
if (standings === null && loading) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list" });
|
|
10171
|
+
if (standings === null || standings.length === 0) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-empty", children: ui.clubStandingsEmpty });
|
|
10172
|
+
return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list", children: groupByTable(standings).map((group, gi) => /* @__PURE__ */ jsxs83("div", { className: "ss-w-table-wrap", children: [
|
|
10173
|
+
group.table && /* @__PURE__ */ jsx97("div", { className: "ss-w-club-eyebrow", children: group.table }),
|
|
10174
|
+
/* @__PURE__ */ jsxs83("table", { className: "ss-w-md-table", children: [
|
|
10175
|
+
/* @__PURE__ */ jsx97("thead", { children: /* @__PURE__ */ jsxs83("tr", { children: [
|
|
10176
|
+
/* @__PURE__ */ jsx97("th", { children: "#" }),
|
|
10177
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColClub }),
|
|
10178
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColPlayed }),
|
|
10179
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColWon }),
|
|
10180
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColDrawn }),
|
|
10181
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColLost }),
|
|
10182
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColGoalDiff }),
|
|
10183
|
+
/* @__PURE__ */ jsx97("th", { children: ui.standingsColPoints })
|
|
10080
10184
|
] }) }),
|
|
10081
|
-
/* @__PURE__ */
|
|
10082
|
-
/* @__PURE__ */
|
|
10083
|
-
/* @__PURE__ */
|
|
10084
|
-
/* @__PURE__ */
|
|
10085
|
-
/* @__PURE__ */
|
|
10086
|
-
/* @__PURE__ */
|
|
10087
|
-
/* @__PURE__ */
|
|
10088
|
-
/* @__PURE__ */
|
|
10089
|
-
/* @__PURE__ */
|
|
10185
|
+
/* @__PURE__ */ jsx97("tbody", { children: group.items.map((row) => /* @__PURE__ */ jsxs83("tr", { children: [
|
|
10186
|
+
/* @__PURE__ */ jsx97("td", { children: row.position }),
|
|
10187
|
+
/* @__PURE__ */ jsx97("td", { children: row.teamName }),
|
|
10188
|
+
/* @__PURE__ */ jsx97("td", { children: row.playedGames }),
|
|
10189
|
+
/* @__PURE__ */ jsx97("td", { children: row.wins }),
|
|
10190
|
+
/* @__PURE__ */ jsx97("td", { children: row.draws }),
|
|
10191
|
+
/* @__PURE__ */ jsx97("td", { children: row.losses }),
|
|
10192
|
+
/* @__PURE__ */ jsx97("td", { children: row.goalDifference }),
|
|
10193
|
+
/* @__PURE__ */ jsx97("td", { children: row.points })
|
|
10090
10194
|
] }, row.teamId)) })
|
|
10091
10195
|
] })
|
|
10092
10196
|
] }, `${gi}-${group.table ?? "none"}`)) });
|
|
@@ -10144,7 +10248,7 @@ function statsEyebrow(ui, season, competition, matches) {
|
|
|
10144
10248
|
}
|
|
10145
10249
|
|
|
10146
10250
|
// src/components/SquadStats.tsx
|
|
10147
|
-
import { jsx as
|
|
10251
|
+
import { jsx as jsx98, jsxs as jsxs84 } from "react/jsx-runtime";
|
|
10148
10252
|
function leader(stats, pick) {
|
|
10149
10253
|
let best = null;
|
|
10150
10254
|
for (const p of stats) {
|
|
@@ -10158,53 +10262,53 @@ function ratingClass(rating) {
|
|
|
10158
10262
|
return Number(rating.toFixed(1)) >= 7 ? "ss-w-sq-c36 ss-w-sq-rtg ss-w-pos-ink" : "ss-w-sq-c36 ss-w-sq-rtg";
|
|
10159
10263
|
}
|
|
10160
10264
|
function SquadStats({ stats, loading, ui, onSelectPlayer }) {
|
|
10161
|
-
if (stats === null && loading) return /* @__PURE__ */
|
|
10162
|
-
if (stats === null || stats.length === 0) return /* @__PURE__ */
|
|
10265
|
+
if (stats === null && loading) return /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-list" });
|
|
10266
|
+
if (stats === null || stats.length === 0) return /* @__PURE__ */ jsx98("div", { className: "ss-w-mon-empty", children: ui.clubSquadStatsEmpty });
|
|
10163
10267
|
const scorer = leader(stats, (p) => p.goals);
|
|
10164
10268
|
const assister = leader(stats, (p) => p.assists);
|
|
10165
10269
|
const footer = [
|
|
10166
10270
|
scorer && ui.squadTopScorer(scorer.playerName, scorer.goals),
|
|
10167
10271
|
assister && ui.squadTopAssists(assister.playerName, assister.assists)
|
|
10168
10272
|
].filter((part) => !!part).join(" \xB7 ");
|
|
10169
|
-
return /* @__PURE__ */
|
|
10170
|
-
/* @__PURE__ */
|
|
10171
|
-
/* @__PURE__ */
|
|
10172
|
-
/* @__PURE__ */
|
|
10173
|
-
/* @__PURE__ */
|
|
10174
|
-
/* @__PURE__ */
|
|
10175
|
-
/* @__PURE__ */
|
|
10176
|
-
/* @__PURE__ */
|
|
10177
|
-
/* @__PURE__ */
|
|
10178
|
-
/* @__PURE__ */
|
|
10179
|
-
/* @__PURE__ */
|
|
10180
|
-
/* @__PURE__ */
|
|
10273
|
+
return /* @__PURE__ */ jsxs84("div", { className: "ss-w-mon-list ss-w-sq-stats", children: [
|
|
10274
|
+
/* @__PURE__ */ jsxs84("div", { className: "ss-w-sq-card", children: [
|
|
10275
|
+
/* @__PURE__ */ jsxs84("div", { className: "ss-w-sq-row ss-w-sq-head", "aria-hidden": "true", children: [
|
|
10276
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-name" }),
|
|
10277
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-pos", children: ui.statHeadPos }),
|
|
10278
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c30", children: ui.statColApps }),
|
|
10279
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: ui.statHeadMins }),
|
|
10280
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: ui.statHeadGoals }),
|
|
10281
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: ui.statHeadAssists }),
|
|
10282
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadYellow }),
|
|
10283
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: ui.statHeadRed }),
|
|
10284
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: ui.statHeadRating })
|
|
10181
10285
|
] }),
|
|
10182
|
-
stats.map((p) => /* @__PURE__ */
|
|
10183
|
-
/* @__PURE__ */
|
|
10184
|
-
p.jerseyNumber !== null && /* @__PURE__ */
|
|
10185
|
-
/* @__PURE__ */
|
|
10286
|
+
stats.map((p) => /* @__PURE__ */ jsxs84("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
|
|
10287
|
+
/* @__PURE__ */ jsxs84("span", { className: "ss-w-sq-player", children: [
|
|
10288
|
+
p.jerseyNumber !== null && /* @__PURE__ */ jsx98("span", { className: "ss-w-sq-badge", children: p.jerseyNumber }),
|
|
10289
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-name ss-w-sq-name-1", children: p.playerName })
|
|
10186
10290
|
] }),
|
|
10187
|
-
/* @__PURE__ */
|
|
10188
|
-
/* @__PURE__ */
|
|
10189
|
-
/* @__PURE__ */
|
|
10190
|
-
/* @__PURE__ */
|
|
10191
|
-
/* @__PURE__ */
|
|
10192
|
-
/* @__PURE__ */
|
|
10193
|
-
/* @__PURE__ */
|
|
10194
|
-
/* @__PURE__ */
|
|
10291
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-pos", children: positionShort(p.positionCode, p.positionName) }),
|
|
10292
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c30", children: p.appearances }),
|
|
10293
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c36", children: p.minutesPlayed }),
|
|
10294
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: p.goals }),
|
|
10295
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20", children: p.assists }),
|
|
10296
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.yellowCards }),
|
|
10297
|
+
/* @__PURE__ */ jsx98("span", { className: "ss-w-sq-c20 ss-w-sq-yr", children: p.redCards }),
|
|
10298
|
+
/* @__PURE__ */ jsx98("span", { className: ratingClass(p.averageRating), children: p.averageRating === null ? "\u2013" : p.averageRating.toFixed(1) })
|
|
10195
10299
|
] }, p.playerId))
|
|
10196
10300
|
] }),
|
|
10197
|
-
footer !== "" && /* @__PURE__ */
|
|
10301
|
+
footer !== "" && /* @__PURE__ */ jsx98("div", { className: "ss-w-sq-foot", children: footer })
|
|
10198
10302
|
] });
|
|
10199
10303
|
}
|
|
10200
10304
|
|
|
10201
10305
|
// src/components/Squad.tsx
|
|
10202
|
-
import { Fragment as
|
|
10306
|
+
import { Fragment as Fragment23, jsx as jsx99, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
10203
10307
|
function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, seasonName = null, competitionName = null, matchesPlayed = null, onSelectPlayer }) {
|
|
10204
10308
|
const eyebrow = view === "stats" ? statsEyebrow(ui, seasonName, competitionName, matchesPlayed) : null;
|
|
10205
|
-
const toggle = /* @__PURE__ */
|
|
10206
|
-
eyebrow !== null && /* @__PURE__ */
|
|
10207
|
-
/* @__PURE__ */
|
|
10309
|
+
const toggle = /* @__PURE__ */ jsxs85("div", { className: "ss-w-sq-bar", children: [
|
|
10310
|
+
eyebrow !== null && /* @__PURE__ */ jsx99("div", { className: "ss-w-sq-eyebrow", children: eyebrow }),
|
|
10311
|
+
/* @__PURE__ */ jsx99("div", { className: "ss-w-sq-seg", role: "group", children: ["roster", "stats"].map((v) => /* @__PURE__ */ jsx99(
|
|
10208
10312
|
"button",
|
|
10209
10313
|
{
|
|
10210
10314
|
type: "button",
|
|
@@ -10219,45 +10323,45 @@ function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, se
|
|
|
10219
10323
|
)) })
|
|
10220
10324
|
] });
|
|
10221
10325
|
if (view === "stats") {
|
|
10222
|
-
return /* @__PURE__ */
|
|
10326
|
+
return /* @__PURE__ */ jsxs85(Fragment23, { children: [
|
|
10223
10327
|
toggle,
|
|
10224
|
-
/* @__PURE__ */
|
|
10328
|
+
/* @__PURE__ */ jsx99(SquadStats, { stats, loading: statsLoading, ui, onSelectPlayer })
|
|
10225
10329
|
] });
|
|
10226
10330
|
}
|
|
10227
|
-
if (squad === null && loading) return /* @__PURE__ */
|
|
10331
|
+
if (squad === null && loading) return /* @__PURE__ */ jsxs85(Fragment23, { children: [
|
|
10228
10332
|
toggle,
|
|
10229
|
-
/* @__PURE__ */
|
|
10333
|
+
/* @__PURE__ */ jsx99("div", { className: "ss-w-mon-list" })
|
|
10230
10334
|
] });
|
|
10231
|
-
if (squad === null || squad.length === 0) return /* @__PURE__ */
|
|
10335
|
+
if (squad === null || squad.length === 0) return /* @__PURE__ */ jsxs85(Fragment23, { children: [
|
|
10232
10336
|
toggle,
|
|
10233
|
-
/* @__PURE__ */
|
|
10337
|
+
/* @__PURE__ */ jsx99("div", { className: "ss-w-mon-empty", children: ui.clubSquadEmpty })
|
|
10234
10338
|
] });
|
|
10235
|
-
return /* @__PURE__ */
|
|
10339
|
+
return /* @__PURE__ */ jsxs85(Fragment23, { children: [
|
|
10236
10340
|
toggle,
|
|
10237
|
-
/* @__PURE__ */
|
|
10238
|
-
group.positionName && /* @__PURE__ */
|
|
10239
|
-
group.items.map((p) => /* @__PURE__ */
|
|
10240
|
-
/* @__PURE__ */
|
|
10241
|
-
/* @__PURE__ */
|
|
10341
|
+
/* @__PURE__ */ jsx99("div", { className: "ss-w-mon-list", children: groupByPosition(squad).map((group, gi) => /* @__PURE__ */ jsxs85("div", { children: [
|
|
10342
|
+
group.positionName && /* @__PURE__ */ jsx99("div", { className: "ss-w-club-eyebrow", children: positionLabel(ui, group.positionName) }),
|
|
10343
|
+
group.items.map((p) => /* @__PURE__ */ jsxs85("button", { type: "button", className: "ss-w-sq-row ss-w-sq-tap", onClick: () => onSelectPlayer(p.playerId), children: [
|
|
10344
|
+
/* @__PURE__ */ jsx99("span", { className: "ss-w-sq-num", children: p.jerseyNumber ?? "" }),
|
|
10345
|
+
/* @__PURE__ */ jsx99("span", { className: "ss-w-sq-name", children: p.playerName })
|
|
10242
10346
|
] }, p.playerId))
|
|
10243
10347
|
] }, `${gi}-${group.positionName ?? "none"}`)) })
|
|
10244
10348
|
] });
|
|
10245
10349
|
}
|
|
10246
10350
|
|
|
10247
10351
|
// src/components/PlayerPhoto.tsx
|
|
10248
|
-
import { useState as
|
|
10249
|
-
import { jsx as
|
|
10352
|
+
import { useState as useState51 } from "react";
|
|
10353
|
+
import { jsx as jsx100 } from "react/jsx-runtime";
|
|
10250
10354
|
function PlayerPhoto({ photoUrl, jerseyNumber, size }) {
|
|
10251
|
-
const [failed, setFailed] =
|
|
10355
|
+
const [failed, setFailed] = useState51(false);
|
|
10252
10356
|
const box = { width: size, height: size };
|
|
10253
10357
|
if (photoUrl && !failed) {
|
|
10254
|
-
return /* @__PURE__ */
|
|
10358
|
+
return /* @__PURE__ */ jsx100("img", { className: "ss-w-pd-photo", style: box, src: photoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
10255
10359
|
}
|
|
10256
|
-
return /* @__PURE__ */
|
|
10360
|
+
return /* @__PURE__ */ jsx100("span", { className: "ss-w-pd-photo ss-w-pd-avatar", style: { ...box, fontSize: Math.round(size * 0.35) }, "aria-hidden": "true", children: jerseyNumber ?? "" });
|
|
10257
10361
|
}
|
|
10258
10362
|
|
|
10259
10363
|
// src/components/MiniPitch.tsx
|
|
10260
|
-
import { jsx as
|
|
10364
|
+
import { jsx as jsx101 } from "react/jsx-runtime";
|
|
10261
10365
|
var SPOT = {
|
|
10262
10366
|
GK: [50, 90],
|
|
10263
10367
|
CB: [50, 75],
|
|
@@ -10279,12 +10383,12 @@ var SPOT = {
|
|
|
10279
10383
|
function MiniPitch({ positionCode }) {
|
|
10280
10384
|
const spot = SPOT[positionCode?.trim().toUpperCase() ?? ""];
|
|
10281
10385
|
if (spot === void 0) return null;
|
|
10282
|
-
return /* @__PURE__ */
|
|
10386
|
+
return /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-pitch", "aria-hidden": "true", children: /* @__PURE__ */ jsx101("div", { className: "ss-w-pd-pitch-dot", style: { left: `${spot[0]}%`, top: `${spot[1]}%` } }) });
|
|
10283
10387
|
}
|
|
10284
10388
|
|
|
10285
10389
|
// src/components/PerformanceBars.tsx
|
|
10286
|
-
import { useState as
|
|
10287
|
-
import { jsx as
|
|
10390
|
+
import { useState as useState52 } from "react";
|
|
10391
|
+
import { jsx as jsx102, jsxs as jsxs86 } from "react/jsx-runtime";
|
|
10288
10392
|
var GROUPS = ["shooting", "passing", "possession", "defending"];
|
|
10289
10393
|
function finite3(v) {
|
|
10290
10394
|
return typeof v === "number" && Number.isFinite(v) ? v : null;
|
|
@@ -10329,40 +10433,40 @@ function unrankedLine(ui, reason) {
|
|
|
10329
10433
|
}
|
|
10330
10434
|
}
|
|
10331
10435
|
function PerformanceBars({ performance, competitionName, strings }) {
|
|
10332
|
-
const [mode, setMode] =
|
|
10436
|
+
const [mode, setMode] = useState52("total");
|
|
10333
10437
|
const labelled = performance.metrics.filter((m) => Object.prototype.hasOwnProperty.call(strings.perfMetric, m.key));
|
|
10334
10438
|
if (!labelled.some((m) => valueOf(m, "total") !== null || valueOf(m, "per90") !== null)) return null;
|
|
10335
10439
|
const subtitle = !performance.ranked ? unrankedLine(strings, performance.unrankedReason) : competitionName ? strings.perfRankedAgainst(competitionName, performance.positionGroup) : null;
|
|
10336
10440
|
const cards = GROUPS.map((g) => {
|
|
10337
10441
|
const rows = labelled.filter((m) => m.group === g && valueOf(m, mode) !== null);
|
|
10338
10442
|
if (rows.length === 0) return null;
|
|
10339
|
-
return /* @__PURE__ */
|
|
10340
|
-
/* @__PURE__ */
|
|
10443
|
+
return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-card ss-w-pd-perf-card", children: [
|
|
10444
|
+
/* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-group", children: groupTitle(strings, g) }),
|
|
10341
10445
|
rows.map((m) => {
|
|
10342
10446
|
const v = valueOf(m, mode);
|
|
10343
10447
|
const rank = performance.ranked ? rankOf(m, mode) : null;
|
|
10344
|
-
return /* @__PURE__ */
|
|
10345
|
-
/* @__PURE__ */
|
|
10346
|
-
/* @__PURE__ */
|
|
10347
|
-
/* @__PURE__ */
|
|
10448
|
+
return /* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bar-row", children: [
|
|
10449
|
+
/* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-bar-top", children: [
|
|
10450
|
+
/* @__PURE__ */ jsx102("span", { className: "ss-w-pd-bar-label", children: strings.perfMetric[m.key] }),
|
|
10451
|
+
/* @__PURE__ */ jsx102("span", { className: "ss-w-pd-bar-value", children: format(m, v, mode) })
|
|
10348
10452
|
] }),
|
|
10349
|
-
rank !== null && /* @__PURE__ */
|
|
10453
|
+
rank !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-track", children: /* @__PURE__ */ jsx102("div", { className: `ss-w-pd-fill ss-w-pd-fill--${band(rank)}`, style: { width: `${rank}%` } }) })
|
|
10350
10454
|
] }, m.key);
|
|
10351
10455
|
})
|
|
10352
10456
|
] }, g);
|
|
10353
10457
|
});
|
|
10354
|
-
return /* @__PURE__ */
|
|
10355
|
-
/* @__PURE__ */
|
|
10356
|
-
/* @__PURE__ */
|
|
10357
|
-
/* @__PURE__ */
|
|
10458
|
+
return /* @__PURE__ */ jsxs86("div", { children: [
|
|
10459
|
+
/* @__PURE__ */ jsxs86("div", { className: "ss-w-pd-perf-head", children: [
|
|
10460
|
+
/* @__PURE__ */ jsx102("div", { className: "ss-w-pd-eyebrow", children: strings.perfTitle }),
|
|
10461
|
+
/* @__PURE__ */ jsx102("div", { className: "ss-w-pd-seg", role: "group", children: ["total", "per90"].map((m) => /* @__PURE__ */ jsx102("button", { type: "button", className: "ss-w-pd-seg-btn", "aria-pressed": mode === m, onClick: () => setMode(m), children: m === "total" ? strings.perfTotal : strings.perfPer90 }, m)) })
|
|
10358
10462
|
] }),
|
|
10359
|
-
subtitle !== null && /* @__PURE__ */
|
|
10360
|
-
/* @__PURE__ */
|
|
10463
|
+
subtitle !== null && /* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-sub", children: subtitle }),
|
|
10464
|
+
/* @__PURE__ */ jsx102("div", { className: "ss-w-pd-perf-cards", children: cards })
|
|
10361
10465
|
] });
|
|
10362
10466
|
}
|
|
10363
10467
|
|
|
10364
10468
|
// src/components/PlayerDetail.tsx
|
|
10365
|
-
import { Fragment as
|
|
10469
|
+
import { Fragment as Fragment24, jsx as jsx103, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
10366
10470
|
var DASH = "\u2014";
|
|
10367
10471
|
function ageFrom(dobMs) {
|
|
10368
10472
|
if (dobMs === null) return DASH;
|
|
@@ -10382,16 +10486,16 @@ function ratingTone(rounded) {
|
|
|
10382
10486
|
return "neg";
|
|
10383
10487
|
}
|
|
10384
10488
|
function Bio({ label, value }) {
|
|
10385
|
-
return /* @__PURE__ */
|
|
10386
|
-
/* @__PURE__ */
|
|
10489
|
+
return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-bio-item", children: [
|
|
10490
|
+
/* @__PURE__ */ jsx103("span", { className: "ss-w-pd-faint", children: label }),
|
|
10387
10491
|
" ",
|
|
10388
|
-
/* @__PURE__ */
|
|
10492
|
+
/* @__PURE__ */ jsx103("span", { children: value })
|
|
10389
10493
|
] });
|
|
10390
10494
|
}
|
|
10391
10495
|
function Tile({ label, value, pos }) {
|
|
10392
|
-
return /* @__PURE__ */
|
|
10393
|
-
/* @__PURE__ */
|
|
10394
|
-
/* @__PURE__ */
|
|
10496
|
+
return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-tile", children: [
|
|
10497
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-tile-label", children: label }),
|
|
10498
|
+
/* @__PURE__ */ jsx103("div", { className: pos ? "ss-w-pd-tile-value ss-w-pd-pos-ink" : "ss-w-pd-tile-value", children: value })
|
|
10395
10499
|
] });
|
|
10396
10500
|
}
|
|
10397
10501
|
function AvailabilityCard({ ui, next, availability }) {
|
|
@@ -10407,12 +10511,12 @@ function AvailabilityCard({ ui, next, availability }) {
|
|
|
10407
10511
|
pill = availability.status === "injured" ? { text: ui.availabilityInjured, tone: "neg" } : availability.status === "suspended" ? { text: ui.availabilitySuspended, tone: "warn" } : { text: ui.availabilityUnavailable, tone: "warn" };
|
|
10408
10512
|
}
|
|
10409
10513
|
}
|
|
10410
|
-
return /* @__PURE__ */
|
|
10411
|
-
/* @__PURE__ */
|
|
10412
|
-
next !== null && /* @__PURE__ */
|
|
10413
|
-
note !== null && /* @__PURE__ */
|
|
10514
|
+
return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-card ss-w-pd-avail", children: [
|
|
10515
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-avail-text", children: [
|
|
10516
|
+
next !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-avail-next", children: ui.availabilityNext(next.opponentName, next.isHome, validMs(next.kickoffUnixMs)) }),
|
|
10517
|
+
note !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-avail-note", children: note })
|
|
10414
10518
|
] }),
|
|
10415
|
-
pill !== null && /* @__PURE__ */
|
|
10519
|
+
pill !== null && /* @__PURE__ */ jsx103("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pill.tone}`, children: pill.text })
|
|
10416
10520
|
] });
|
|
10417
10521
|
}
|
|
10418
10522
|
function MatchRow({ ui, row }) {
|
|
@@ -10426,28 +10530,28 @@ function MatchRow({ ui, row }) {
|
|
|
10426
10530
|
const sub = [`${ui.resultLetter[row.result]} ${row.goalsFor}\u2013${row.goalsAgainst}`, `${row.minutes}\u2032`, ...extras].join(" \xB7 ");
|
|
10427
10531
|
const rating = typeof row.rating === "number" && Number.isFinite(row.rating) ? Math.round(row.rating * 10) / 10 : null;
|
|
10428
10532
|
const pillTone = row.result === "W" ? "pos" : row.result === "L" ? "neg" : "draw";
|
|
10429
|
-
return /* @__PURE__ */
|
|
10430
|
-
/* @__PURE__ */
|
|
10431
|
-
/* @__PURE__ */
|
|
10432
|
-
/* @__PURE__ */
|
|
10433
|
-
/* @__PURE__ */
|
|
10533
|
+
return /* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-match", children: [
|
|
10534
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-date", children: date === null ? "" : ui.logShortDate(date) }),
|
|
10535
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-match-main", children: [
|
|
10536
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-opp", children: ui.matchLogOpponent(row.opponentName, row.isHome) }),
|
|
10537
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-match-sub", children: sub })
|
|
10434
10538
|
] }),
|
|
10435
|
-
/* @__PURE__ */
|
|
10436
|
-
rating === null ? /* @__PURE__ */
|
|
10539
|
+
/* @__PURE__ */ jsx103("div", { className: `ss-w-pd-pill ss-w-pd-pill--${pillTone}`, children: ui.resultLetter[row.result] }),
|
|
10540
|
+
rating === null ? /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-chip-empty" }) : /* @__PURE__ */ jsx103("div", { className: `ss-w-pd-chip ss-w-pd-chip--${ratingTone(rating)}`, children: rating.toFixed(1) })
|
|
10437
10541
|
] });
|
|
10438
10542
|
}
|
|
10439
10543
|
function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
|
|
10440
|
-
const back = /* @__PURE__ */
|
|
10441
|
-
/* @__PURE__ */
|
|
10544
|
+
const back = /* @__PURE__ */ jsxs87("button", { type: "button", className: "ss-w-pd-back", onClick: onClose, children: [
|
|
10545
|
+
/* @__PURE__ */ jsx103("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: /* @__PURE__ */ jsx103("path", { d: "M15 18l-6-6 6-6" }) }),
|
|
10442
10546
|
ui.clubPlayerBack
|
|
10443
10547
|
] });
|
|
10444
10548
|
if (detail === null) {
|
|
10445
|
-
return loading ? /* @__PURE__ */
|
|
10446
|
-
/* @__PURE__ */
|
|
10447
|
-
/* @__PURE__ */
|
|
10448
|
-
] }) : /* @__PURE__ */
|
|
10449
|
-
/* @__PURE__ */
|
|
10450
|
-
/* @__PURE__ */
|
|
10549
|
+
return loading ? /* @__PURE__ */ jsxs87(Fragment24, { children: [
|
|
10550
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
|
|
10551
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-mon-list" })
|
|
10552
|
+
] }) : /* @__PURE__ */ jsxs87(Fragment24, { children: [
|
|
10553
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
|
|
10554
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-mon-empty", children: ui.clubPlayerDetailEmpty })
|
|
10451
10555
|
] });
|
|
10452
10556
|
}
|
|
10453
10557
|
const s = detail.seasonStats;
|
|
@@ -10460,41 +10564,41 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
|
|
|
10460
10564
|
const next = detail.nextFixture ?? null;
|
|
10461
10565
|
const availability = detail.availability ?? null;
|
|
10462
10566
|
const log = detail.matchLog ?? [];
|
|
10463
|
-
return /* @__PURE__ */
|
|
10464
|
-
/* @__PURE__ */
|
|
10465
|
-
/* @__PURE__ */
|
|
10466
|
-
/* @__PURE__ */
|
|
10467
|
-
/* @__PURE__ */
|
|
10468
|
-
/* @__PURE__ */
|
|
10469
|
-
/* @__PURE__ */
|
|
10470
|
-
subLine !== "" && /* @__PURE__ */
|
|
10471
|
-
/* @__PURE__ */
|
|
10472
|
-
/* @__PURE__ */
|
|
10473
|
-
/* @__PURE__ */
|
|
10474
|
-
foot !== null && /* @__PURE__ */
|
|
10475
|
-
/* @__PURE__ */
|
|
10567
|
+
return /* @__PURE__ */ jsxs87(Fragment24, { children: [
|
|
10568
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-bar", children: back }),
|
|
10569
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-mon-list ss-w-pd-list", children: [
|
|
10570
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-card ss-w-pd-profile", children: [
|
|
10571
|
+
/* @__PURE__ */ jsx103(PlayerPhoto, { photoUrl: detail.photoUrl, jerseyNumber: detail.jerseyNumber, size: 52 }, detail.photoUrl ?? ""),
|
|
10572
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-profile-main", children: [
|
|
10573
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-name", children: detail.playerName }),
|
|
10574
|
+
subLine !== "" && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-sub", children: subLine }),
|
|
10575
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-bio", children: [
|
|
10576
|
+
/* @__PURE__ */ jsx103(Bio, { label: ui.detailAge, value: ageFrom(detail.dateOfBirthUnixMs) }),
|
|
10577
|
+
/* @__PURE__ */ jsx103(Bio, { label: ui.detailHeight, value: detail.heightCm === null ? DASH : `${detail.heightCm} cm` }),
|
|
10578
|
+
foot !== null && /* @__PURE__ */ jsx103(Bio, { label: ui.detailFoot, value: foot }),
|
|
10579
|
+
/* @__PURE__ */ jsx103(Bio, { label: ui.detailNatShort, value: detail.nationality ?? DASH })
|
|
10476
10580
|
] })
|
|
10477
10581
|
] }),
|
|
10478
|
-
/* @__PURE__ */
|
|
10582
|
+
/* @__PURE__ */ jsx103(MiniPitch, { positionCode: detail.positionCode })
|
|
10479
10583
|
] }),
|
|
10480
|
-
(next !== null || availability !== null) && /* @__PURE__ */
|
|
10481
|
-
/* @__PURE__ */
|
|
10482
|
-
eyebrow !== null && /* @__PURE__ */
|
|
10483
|
-
/* @__PURE__ */
|
|
10484
|
-
/* @__PURE__ */
|
|
10485
|
-
/* @__PURE__ */
|
|
10486
|
-
typeof s.starts === "number" && /* @__PURE__ */
|
|
10487
|
-
/* @__PURE__ */
|
|
10488
|
-
/* @__PURE__ */
|
|
10489
|
-
rating !== null && /* @__PURE__ */
|
|
10490
|
-
/* @__PURE__ */
|
|
10491
|
-
/* @__PURE__ */
|
|
10584
|
+
(next !== null || availability !== null) && /* @__PURE__ */ jsx103(AvailabilityCard, { ui, next, availability }),
|
|
10585
|
+
/* @__PURE__ */ jsxs87("div", { children: [
|
|
10586
|
+
eyebrow !== null && /* @__PURE__ */ jsx103("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: eyebrow }),
|
|
10587
|
+
/* @__PURE__ */ jsxs87("div", { className: "ss-w-pd-tiles", children: [
|
|
10588
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.statColGoals, value: String(s.goals) }),
|
|
10589
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.statColAssists, value: String(s.assists) }),
|
|
10590
|
+
typeof s.starts === "number" && /* @__PURE__ */ jsx103(Tile, { label: ui.detailStarted, value: String(s.starts) }),
|
|
10591
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.detailMatches, value: String(s.appearances) }),
|
|
10592
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.statColMinutes, value: String(s.minutesPlayed) }),
|
|
10593
|
+
rating !== null && /* @__PURE__ */ jsx103(Tile, { label: ui.statColRating, value: rating.toFixed(2), pos: Math.round(rating * 100) / 100 >= 7 }),
|
|
10594
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.detailYellows, value: String(s.yellowCards) }),
|
|
10595
|
+
/* @__PURE__ */ jsx103(Tile, { label: ui.detailReds, value: String(s.redCards) })
|
|
10492
10596
|
] })
|
|
10493
10597
|
] }),
|
|
10494
|
-
detail.performance != null && /* @__PURE__ */
|
|
10495
|
-
log.length > 0 && /* @__PURE__ */
|
|
10496
|
-
/* @__PURE__ */
|
|
10497
|
-
/* @__PURE__ */
|
|
10598
|
+
detail.performance != null && /* @__PURE__ */ jsx103(PerformanceBars, { performance: detail.performance, competitionName: competition, strings: ui }),
|
|
10599
|
+
log.length > 0 && /* @__PURE__ */ jsxs87("div", { children: [
|
|
10600
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-eyebrow ss-w-pd-eyebrow--block", children: ui.matchLogTitle }),
|
|
10601
|
+
/* @__PURE__ */ jsx103("div", { className: "ss-w-pd-card ss-w-pd-log", children: log.map((row) => /* @__PURE__ */ jsx103(MatchRow, { ui, row }, row.matchId)) })
|
|
10498
10602
|
] })
|
|
10499
10603
|
] })
|
|
10500
10604
|
] });
|
|
@@ -10502,12 +10606,12 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
|
|
|
10502
10606
|
|
|
10503
10607
|
// src/components/PresetSpeedDial.tsx
|
|
10504
10608
|
import { useId as useId10 } from "react";
|
|
10505
|
-
import { jsx as
|
|
10609
|
+
import { jsx as jsx104, jsxs as jsxs88 } from "react/jsx-runtime";
|
|
10506
10610
|
function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
|
|
10507
10611
|
const pillsId = useId10();
|
|
10508
10612
|
const tabIndex = expanded ? 0 : -1;
|
|
10509
|
-
return /* @__PURE__ */
|
|
10510
|
-
/* @__PURE__ */
|
|
10613
|
+
return /* @__PURE__ */ jsxs88("div", { ref: rootRef, className: "ss-w-dial", children: [
|
|
10614
|
+
/* @__PURE__ */ jsxs88(
|
|
10511
10615
|
"button",
|
|
10512
10616
|
{
|
|
10513
10617
|
ref: buttonRef,
|
|
@@ -10518,28 +10622,28 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
|
|
|
10518
10622
|
"aria-label": strings.dialName,
|
|
10519
10623
|
onClick: onToggle,
|
|
10520
10624
|
children: [
|
|
10521
|
-
/* @__PURE__ */
|
|
10522
|
-
/* @__PURE__ */
|
|
10523
|
-
showDot && !expanded ? /* @__PURE__ */
|
|
10625
|
+
/* @__PURE__ */ jsx104("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx104(SlidersIcon, {}) }),
|
|
10626
|
+
/* @__PURE__ */ jsx104("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx104(CloseIcon, {}) }),
|
|
10627
|
+
showDot && !expanded ? /* @__PURE__ */ jsx104("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
|
|
10524
10628
|
]
|
|
10525
10629
|
}
|
|
10526
10630
|
),
|
|
10527
|
-
/* @__PURE__ */
|
|
10528
|
-
/* @__PURE__ */
|
|
10529
|
-
/* @__PURE__ */
|
|
10530
|
-
/* @__PURE__ */
|
|
10631
|
+
/* @__PURE__ */ jsxs88("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
|
|
10632
|
+
/* @__PURE__ */ jsxs88("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
|
|
10633
|
+
/* @__PURE__ */ jsx104(SlidersIcon, {}),
|
|
10634
|
+
/* @__PURE__ */ jsx104("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
|
|
10531
10635
|
] }),
|
|
10532
|
-
/* @__PURE__ */
|
|
10533
|
-
/* @__PURE__ */
|
|
10534
|
-
/* @__PURE__ */
|
|
10636
|
+
/* @__PURE__ */ jsxs88("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
|
|
10637
|
+
/* @__PURE__ */ jsx104(ComboIcon, {}),
|
|
10638
|
+
/* @__PURE__ */ jsx104("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
|
|
10535
10639
|
] })
|
|
10536
10640
|
] })
|
|
10537
10641
|
] });
|
|
10538
10642
|
}
|
|
10539
10643
|
|
|
10540
10644
|
// src/components/PresetTools.tsx
|
|
10541
|
-
import { Fragment as
|
|
10542
|
-
import { Fragment as
|
|
10645
|
+
import { Fragment as Fragment25, useEffect as useEffect31, useId as useId11, useRef as useRef28, useState as useState53 } from "react";
|
|
10646
|
+
import { Fragment as Fragment26, jsx as jsx105, jsxs as jsxs89 } from "react/jsx-runtime";
|
|
10543
10647
|
var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
10544
10648
|
function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
10545
10649
|
const dialogRef = useRef28(null);
|
|
@@ -10577,79 +10681,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
|
10577
10681
|
first.focus();
|
|
10578
10682
|
}
|
|
10579
10683
|
};
|
|
10580
|
-
return /* @__PURE__ */
|
|
10581
|
-
/* @__PURE__ */
|
|
10582
|
-
/* @__PURE__ */
|
|
10583
|
-
/* @__PURE__ */
|
|
10684
|
+
return /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs89("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
|
|
10685
|
+
/* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-head", children: [
|
|
10686
|
+
/* @__PURE__ */ jsx105("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
|
|
10687
|
+
/* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx105(CloseIcon, {}) })
|
|
10584
10688
|
] }),
|
|
10585
|
-
/* @__PURE__ */
|
|
10586
|
-
footer ? /* @__PURE__ */
|
|
10689
|
+
/* @__PURE__ */ jsx105("div", { className: "ss-w-tool-body", children }),
|
|
10690
|
+
footer ? /* @__PURE__ */ jsx105("div", { className: "ss-w-tool-foot", children: footer }) : null
|
|
10587
10691
|
] }) });
|
|
10588
10692
|
}
|
|
10589
10693
|
function fillTemplate(template, slots) {
|
|
10590
10694
|
return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
|
|
10591
10695
|
const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
|
|
10592
|
-
return /* @__PURE__ */
|
|
10696
|
+
return /* @__PURE__ */ jsx105(Fragment25, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
|
|
10593
10697
|
});
|
|
10594
10698
|
}
|
|
10595
10699
|
function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
|
|
10596
10700
|
const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
|
|
10597
|
-
return /* @__PURE__ */
|
|
10598
|
-
/* @__PURE__ */
|
|
10599
|
-
/* @__PURE__ */
|
|
10701
|
+
return /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-num", children: [
|
|
10702
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
|
|
10703
|
+
/* @__PURE__ */ jsx105("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
|
|
10600
10704
|
const c = choices2[Number(e.target.value)];
|
|
10601
10705
|
if (c) onChoose(c.value);
|
|
10602
|
-
}, children: choices2.map((c, i) => /* @__PURE__ */
|
|
10706
|
+
}, children: choices2.map((c, i) => /* @__PURE__ */ jsx105("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
|
|
10603
10707
|
] });
|
|
10604
10708
|
}
|
|
10605
10709
|
function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
|
|
10606
10710
|
const sizeText = sizeLabels[currentIdx] ?? "";
|
|
10607
|
-
return /* @__PURE__ */
|
|
10608
|
-
/* @__PURE__ */
|
|
10609
|
-
/* @__PURE__ */
|
|
10711
|
+
return /* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-num", children: [
|
|
10712
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
|
|
10713
|
+
/* @__PURE__ */ jsx105("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__ */ jsx105("option", { value: String(i), children: opt }, i)) })
|
|
10610
10714
|
] });
|
|
10611
10715
|
}
|
|
10612
10716
|
function SendButton({ label, display, disabled, onClick }) {
|
|
10613
|
-
return /* @__PURE__ */
|
|
10717
|
+
return /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
|
|
10614
10718
|
}
|
|
10615
10719
|
function PickList({ picks, formatKickoff }) {
|
|
10616
|
-
return /* @__PURE__ */
|
|
10617
|
-
/* @__PURE__ */
|
|
10720
|
+
return /* @__PURE__ */ jsx105("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs89("li", { className: "ss-w-tool-pick", children: [
|
|
10721
|
+
/* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-pick-match", children: [
|
|
10618
10722
|
p.homeTeamName,
|
|
10619
10723
|
" \u2013 ",
|
|
10620
10724
|
p.awayTeamName
|
|
10621
10725
|
] }),
|
|
10622
|
-
/* @__PURE__ */
|
|
10726
|
+
/* @__PURE__ */ jsxs89("span", { className: "ss-w-tool-pick-sel", children: [
|
|
10623
10727
|
p.marketLabel,
|
|
10624
10728
|
": ",
|
|
10625
10729
|
p.selectionLabel,
|
|
10626
10730
|
p.line ? ` ${p.line}` : ""
|
|
10627
10731
|
] }),
|
|
10628
|
-
/* @__PURE__ */
|
|
10629
|
-
/* @__PURE__ */
|
|
10732
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
|
|
10733
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
|
|
10630
10734
|
] }, p.matchOddsId)) });
|
|
10631
10735
|
}
|
|
10632
10736
|
function ComboPreview({ cell, formatKickoff }) {
|
|
10633
|
-
return /* @__PURE__ */
|
|
10634
|
-
/* @__PURE__ */
|
|
10635
|
-
/* @__PURE__ */
|
|
10737
|
+
return /* @__PURE__ */ jsxs89(Fragment26, { children: [
|
|
10738
|
+
/* @__PURE__ */ jsx105(PickList, { picks: cell.combo.legs, formatKickoff }),
|
|
10739
|
+
/* @__PURE__ */ jsx105("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
|
|
10636
10740
|
] });
|
|
10637
10741
|
}
|
|
10638
10742
|
function Unavailable({ text }) {
|
|
10639
|
-
return /* @__PURE__ */
|
|
10743
|
+
return /* @__PURE__ */ jsx105("p", { className: "ss-w-tool-unavailable", children: text });
|
|
10640
10744
|
}
|
|
10641
10745
|
function AskRow({ icon, ask, ready, send }) {
|
|
10642
|
-
return /* @__PURE__ */
|
|
10643
|
-
/* @__PURE__ */
|
|
10644
|
-
/* @__PURE__ */
|
|
10645
|
-
/* @__PURE__ */
|
|
10646
|
-
ready ? /* @__PURE__ */
|
|
10746
|
+
return /* @__PURE__ */ jsxs89("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
|
|
10747
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
|
|
10748
|
+
/* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-main", children: [
|
|
10749
|
+
/* @__PURE__ */ jsx105("p", { className: "ss-w-tool-ask", children: ask }),
|
|
10750
|
+
ready ? /* @__PURE__ */ jsx105("span", { className: "ss-w-tool-ready", children: ready }) : null
|
|
10647
10751
|
] }),
|
|
10648
10752
|
send
|
|
10649
10753
|
] });
|
|
10650
10754
|
}
|
|
10651
10755
|
function RoundSend({ label, display, disabled, onClick }) {
|
|
10652
|
-
return /* @__PURE__ */
|
|
10756
|
+
return /* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx105(SendIcon, {}) });
|
|
10653
10757
|
}
|
|
10654
10758
|
var BIG_COMBO = { total: 50, legs: 6 };
|
|
10655
10759
|
function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
@@ -10658,15 +10762,15 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
|
10658
10762
|
const totals = comboTotals(grid);
|
|
10659
10763
|
const legChoices = comboLegChoices(grid);
|
|
10660
10764
|
const count = FIXED_SINGLES_COUNT;
|
|
10661
|
-
const [maxPrice, setMaxPrice] =
|
|
10662
|
-
const [minPrice, setMinPrice] =
|
|
10663
|
-
const [start] =
|
|
10664
|
-
const [total, setTotal] =
|
|
10665
|
-
const [legs, setLegs] =
|
|
10666
|
-
const [bigStart] =
|
|
10667
|
-
const [bigTotal, setBigTotal] =
|
|
10668
|
-
const [bigLegs, setBigLegs] =
|
|
10669
|
-
const [announcement, setAnnouncement] =
|
|
10765
|
+
const [maxPrice, setMaxPrice] = useState53(() => startSingles(grid.singles, limits, START.maxPrice, count));
|
|
10766
|
+
const [minPrice, setMinPrice] = useState53(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
|
|
10767
|
+
const [start] = useState53(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
|
|
10768
|
+
const [total, setTotal] = useState53(start.total);
|
|
10769
|
+
const [legs, setLegs] = useState53(start.legs);
|
|
10770
|
+
const [bigStart] = useState53(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
|
|
10771
|
+
const [bigTotal, setBigTotal] = useState53(bigStart.total);
|
|
10772
|
+
const [bigLegs, setBigLegs] = useState53(bigStart.legs);
|
|
10773
|
+
const [announcement, setAnnouncement] = useState53("");
|
|
10670
10774
|
const maxCell = findSingles(grid.singles, maxPrice, count);
|
|
10671
10775
|
const minCell = findSingles(grid.singlesFrom, minPrice, count);
|
|
10672
10776
|
const comboCell = findCombo(grid, total, legs);
|
|
@@ -10710,95 +10814,95 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
|
|
|
10710
10814
|
const totalChoices = totals.map((v) => ({ value: v, text: v.toFixed(1), available: legChoices.some((n) => !!findCombo(grid, v, n)) }));
|
|
10711
10815
|
const legChoicesFor = (t) => legChoices.map((n) => ({ value: n, text: String(n), available: !!findCombo(grid, t, n) }));
|
|
10712
10816
|
const markets = grid.markets ?? [];
|
|
10713
|
-
const [marketIdx, setMarketIdx] =
|
|
10817
|
+
const [marketIdx, setMarketIdx] = useState53(0);
|
|
10714
10818
|
const marketCell = markets[marketIdx] ?? null;
|
|
10715
10819
|
const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
|
|
10716
10820
|
const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
|
|
10717
10821
|
const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
|
|
10718
|
-
return /* @__PURE__ */
|
|
10719
|
-
/* @__PURE__ */
|
|
10822
|
+
return /* @__PURE__ */ jsxs89(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
|
|
10823
|
+
/* @__PURE__ */ jsx105(
|
|
10720
10824
|
AskRow,
|
|
10721
10825
|
{
|
|
10722
10826
|
icon: "\u{1F3AF}",
|
|
10723
10827
|
ask: fillTemplate(strings.maxPriceRow, {
|
|
10724
10828
|
count: String(count),
|
|
10725
|
-
price: /* @__PURE__ */
|
|
10829
|
+
price: /* @__PURE__ */ jsx105(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
|
|
10726
10830
|
}),
|
|
10727
10831
|
ready: singlesReady(maxCell),
|
|
10728
|
-
send: /* @__PURE__ */
|
|
10832
|
+
send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
|
|
10729
10833
|
if (maxCell) onSend(maxPriceAsk(maxCell, strings));
|
|
10730
10834
|
} })
|
|
10731
10835
|
}
|
|
10732
10836
|
),
|
|
10733
|
-
/* @__PURE__ */
|
|
10837
|
+
/* @__PURE__ */ jsx105(
|
|
10734
10838
|
AskRow,
|
|
10735
10839
|
{
|
|
10736
10840
|
icon: "\u{1F4C8}",
|
|
10737
10841
|
ask: fillTemplate(strings.minPriceRow, {
|
|
10738
10842
|
count: String(count),
|
|
10739
|
-
price: /* @__PURE__ */
|
|
10843
|
+
price: /* @__PURE__ */ jsx105(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
|
|
10740
10844
|
}),
|
|
10741
10845
|
ready: singlesReady(minCell),
|
|
10742
|
-
send: /* @__PURE__ */
|
|
10846
|
+
send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
|
|
10743
10847
|
if (minCell) onSend(minPriceAsk(minCell, strings));
|
|
10744
10848
|
} })
|
|
10745
10849
|
}
|
|
10746
10850
|
),
|
|
10747
|
-
/* @__PURE__ */
|
|
10851
|
+
/* @__PURE__ */ jsx105(
|
|
10748
10852
|
AskRow,
|
|
10749
10853
|
{
|
|
10750
10854
|
icon: "\u2728",
|
|
10751
10855
|
ask: fillTemplate(strings.comboRow, {
|
|
10752
|
-
legs: /* @__PURE__ */
|
|
10753
|
-
total: /* @__PURE__ */
|
|
10856
|
+
legs: /* @__PURE__ */ jsx105(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
|
|
10857
|
+
total: /* @__PURE__ */ jsx105(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
|
|
10754
10858
|
}),
|
|
10755
10859
|
ready: comboReady(comboCell),
|
|
10756
|
-
send: /* @__PURE__ */
|
|
10860
|
+
send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
|
|
10757
10861
|
if (comboCell) onSend(comboAsk(comboCell, strings));
|
|
10758
10862
|
} })
|
|
10759
10863
|
}
|
|
10760
10864
|
),
|
|
10761
|
-
/* @__PURE__ */
|
|
10865
|
+
/* @__PURE__ */ jsx105(
|
|
10762
10866
|
AskRow,
|
|
10763
10867
|
{
|
|
10764
10868
|
icon: "\u{1F3C6}",
|
|
10765
10869
|
ask: fillTemplate(strings.bigComboRow, {
|
|
10766
|
-
legs: /* @__PURE__ */
|
|
10767
|
-
total: /* @__PURE__ */
|
|
10870
|
+
legs: /* @__PURE__ */ jsx105(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
|
|
10871
|
+
total: /* @__PURE__ */ jsx105(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
|
|
10768
10872
|
}),
|
|
10769
10873
|
ready: comboReady(bigCell),
|
|
10770
|
-
send: /* @__PURE__ */
|
|
10874
|
+
send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
|
|
10771
10875
|
if (bigCell) onSend(comboAsk(bigCell, strings));
|
|
10772
10876
|
} })
|
|
10773
10877
|
}
|
|
10774
10878
|
),
|
|
10775
|
-
markets.length > 0 && /* @__PURE__ */
|
|
10879
|
+
markets.length > 0 && /* @__PURE__ */ jsx105(
|
|
10776
10880
|
AskRow,
|
|
10777
10881
|
{
|
|
10778
10882
|
icon: "\u26BD",
|
|
10779
10883
|
ask: fillTemplate(strings.marketRow, {
|
|
10780
|
-
market: /* @__PURE__ */
|
|
10884
|
+
market: /* @__PURE__ */ jsx105(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
|
|
10781
10885
|
}),
|
|
10782
10886
|
ready: marketCell ? strings.readyCount(marketCell.count) : null,
|
|
10783
|
-
send: /* @__PURE__ */
|
|
10887
|
+
send: /* @__PURE__ */ jsx105(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
|
|
10784
10888
|
if (marketCell) onSend(marketAsk(marketCell, strings));
|
|
10785
10889
|
} })
|
|
10786
10890
|
}
|
|
10787
10891
|
),
|
|
10788
|
-
/* @__PURE__ */
|
|
10892
|
+
/* @__PURE__ */ jsx105("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
10789
10893
|
] });
|
|
10790
10894
|
}
|
|
10791
10895
|
function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
|
|
10792
10896
|
const totals = comboTotals(grid);
|
|
10793
10897
|
const legChoices = comboLegChoices(grid);
|
|
10794
|
-
const [start] =
|
|
10795
|
-
const [total, setTotal] =
|
|
10796
|
-
const [legs, setLegs] =
|
|
10898
|
+
const [start] = useState53(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
|
|
10899
|
+
const [total, setTotal] = useState53(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
|
|
10900
|
+
const [legs, setLegs] = useState53(() => {
|
|
10797
10901
|
if (initialTotal === void 0) return initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : start.legs;
|
|
10798
10902
|
const from = initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : startValue(legChoices, START.comboLegs);
|
|
10799
10903
|
return legsForTotal(grid, nearest(totals, initialTotal), from);
|
|
10800
10904
|
});
|
|
10801
|
-
const [announcement, setAnnouncement] =
|
|
10905
|
+
const [announcement, setAnnouncement] = useState53("");
|
|
10802
10906
|
const cell = findCombo(grid, total, legs);
|
|
10803
10907
|
const minLegs = legChoices[0] ?? legs;
|
|
10804
10908
|
const maxLegs = legChoices[legChoices.length - 1] ?? legs;
|
|
@@ -10809,29 +10913,29 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
|
|
|
10809
10913
|
const d = strings.comboDisplay(nextLegs, nextTotal);
|
|
10810
10914
|
setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
|
|
10811
10915
|
};
|
|
10812
|
-
const footer = /* @__PURE__ */
|
|
10916
|
+
const footer = /* @__PURE__ */ jsx105(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
|
|
10813
10917
|
if (cell) onSend(comboAsk(cell, strings));
|
|
10814
10918
|
} });
|
|
10815
|
-
return /* @__PURE__ */
|
|
10816
|
-
/* @__PURE__ */
|
|
10817
|
-
/* @__PURE__ */
|
|
10818
|
-
/* @__PURE__ */
|
|
10919
|
+
return /* @__PURE__ */ jsxs89(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
|
|
10920
|
+
/* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
|
|
10921
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
|
|
10922
|
+
/* @__PURE__ */ jsx105("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx105("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)) })
|
|
10819
10923
|
] }),
|
|
10820
|
-
/* @__PURE__ */
|
|
10821
|
-
/* @__PURE__ */
|
|
10822
|
-
/* @__PURE__ */
|
|
10823
|
-
/* @__PURE__ */
|
|
10824
|
-
/* @__PURE__ */
|
|
10825
|
-
/* @__PURE__ */
|
|
10924
|
+
/* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
|
|
10925
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
|
|
10926
|
+
/* @__PURE__ */ jsxs89("div", { className: "ss-w-tool-stepper", children: [
|
|
10927
|
+
/* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
|
|
10928
|
+
/* @__PURE__ */ jsx105("span", { className: "ss-w-tool-count", children: legs }),
|
|
10929
|
+
/* @__PURE__ */ jsx105("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
|
|
10826
10930
|
] })
|
|
10827
10931
|
] }),
|
|
10828
|
-
cell ? /* @__PURE__ */
|
|
10829
|
-
/* @__PURE__ */
|
|
10932
|
+
cell ? /* @__PURE__ */ jsx105(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx105(Unavailable, { text: strings.unavailable }),
|
|
10933
|
+
/* @__PURE__ */ jsx105("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
|
|
10830
10934
|
] });
|
|
10831
10935
|
}
|
|
10832
10936
|
|
|
10833
10937
|
// src/usePresetDial.ts
|
|
10834
|
-
import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef29, useState as
|
|
10938
|
+
import { useCallback as useCallback21, useEffect as useEffect32, useRef as useRef29, useState as useState54 } from "react";
|
|
10835
10939
|
function sendInFlight(messages, isStreaming) {
|
|
10836
10940
|
const last = messages[messages.length - 1];
|
|
10837
10941
|
return isStreaming && !!last && last.role === "assistant" && !last.done && !last.isGreeting;
|
|
@@ -10845,7 +10949,7 @@ function lastUserId(messages) {
|
|
|
10845
10949
|
}
|
|
10846
10950
|
var SCROLL_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " "]);
|
|
10847
10951
|
function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming, activeTab }) {
|
|
10848
|
-
const [expanded, setExpanded] =
|
|
10952
|
+
const [expanded, setExpanded] = useState54(() => !sendInFlight(messages, isStreaming));
|
|
10849
10953
|
const fold = useCallback21(() => setExpanded(false), []);
|
|
10850
10954
|
const toggle = useCallback21(() => setExpanded((e) => !e), []);
|
|
10851
10955
|
const currentUserId = lastUserId(messages);
|
|
@@ -10928,10 +11032,10 @@ function markToolSeen() {
|
|
|
10928
11032
|
}
|
|
10929
11033
|
|
|
10930
11034
|
// src/components/ChatPanel.tsx
|
|
10931
|
-
import { Fragment as
|
|
11035
|
+
import { Fragment as Fragment27, jsx as jsx106, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
10932
11036
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
10933
11037
|
function useIsModal() {
|
|
10934
|
-
const [modal, setModal] =
|
|
11038
|
+
const [modal, setModal] = useState55(false);
|
|
10935
11039
|
useEffect33(() => {
|
|
10936
11040
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
10937
11041
|
const mql = window.matchMedia(FULLSCREEN_QUERY);
|
|
@@ -10946,8 +11050,8 @@ var HIDDEN_LAYER_STYLE = { position: "absolute", inset: 0, visibility: "hidden",
|
|
|
10946
11050
|
var SQUAD_LAYER_STYLE = { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 };
|
|
10947
11051
|
function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, clubFixturesResult, clubStandingsResult, clubSquadResult, clubSquadStatsResult, clubPlayerDetailResult, loggedIn, conversation, presetGrid }) {
|
|
10948
11052
|
const { state, close, stop, send, reset } = controller;
|
|
10949
|
-
const [squadView, setSquadView] =
|
|
10950
|
-
const [selectedPlayerId, setSelectedPlayerId] =
|
|
11053
|
+
const [squadView, setSquadView] = useState55("roster");
|
|
11054
|
+
const [selectedPlayerId, setSelectedPlayerId] = useState55(null);
|
|
10951
11055
|
const clearPlayerDetail = clubPlayerDetailResult?.clear;
|
|
10952
11056
|
const fetchPlayerDetail = clubPlayerDetailResult?.fetch;
|
|
10953
11057
|
const squadLayerRef = useRef30(null);
|
|
@@ -11001,8 +11105,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11001
11105
|
const limitRef = useRef30(null);
|
|
11002
11106
|
const typedSendRef = useRef30(false);
|
|
11003
11107
|
const focusAfterCloseRef = useRef30(null);
|
|
11004
|
-
const [tool, setTool] =
|
|
11005
|
-
const [toolSeen, setToolSeen] =
|
|
11108
|
+
const [tool, setTool] = useState55(null);
|
|
11109
|
+
const [toolSeen, setToolSeen] = useState55(readToolSeen);
|
|
11006
11110
|
const dial = usePresetDial({
|
|
11007
11111
|
layerRef,
|
|
11008
11112
|
dialRef,
|
|
@@ -11059,8 +11163,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11059
11163
|
focusAfterCloseRef.current = "composer";
|
|
11060
11164
|
setTool(null);
|
|
11061
11165
|
}, [tool, onChatTab, presetGrid]);
|
|
11062
|
-
return /* @__PURE__ */
|
|
11063
|
-
/* @__PURE__ */
|
|
11166
|
+
return /* @__PURE__ */ jsxs90("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
11167
|
+
/* @__PURE__ */ jsx106(
|
|
11064
11168
|
ChatHeader,
|
|
11065
11169
|
{
|
|
11066
11170
|
onClose: close,
|
|
@@ -11073,7 +11177,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11073
11177
|
moreOptionsLabel: ui.moreOptions
|
|
11074
11178
|
}
|
|
11075
11179
|
),
|
|
11076
|
-
monitor && /* @__PURE__ */
|
|
11180
|
+
monitor && /* @__PURE__ */ jsx106(
|
|
11077
11181
|
TabBar,
|
|
11078
11182
|
{
|
|
11079
11183
|
monitor,
|
|
@@ -11086,9 +11190,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11086
11190
|
clubEnabled: clubFixturesResult?.enabled ?? false
|
|
11087
11191
|
}
|
|
11088
11192
|
),
|
|
11089
|
-
/* @__PURE__ */
|
|
11090
|
-
/* @__PURE__ */
|
|
11091
|
-
showDial ? /* @__PURE__ */
|
|
11193
|
+
/* @__PURE__ */ jsxs90("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
|
|
11194
|
+
/* @__PURE__ */ jsx106(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx106(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
|
|
11195
|
+
showDial ? /* @__PURE__ */ jsx106(
|
|
11092
11196
|
PresetSpeedDial,
|
|
11093
11197
|
{
|
|
11094
11198
|
expanded: dial.expanded,
|
|
@@ -11100,21 +11204,21 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11100
11204
|
buttonRef: dialButtonRef
|
|
11101
11205
|
}
|
|
11102
11206
|
) : null,
|
|
11103
|
-
tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */
|
|
11207
|
+
tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ jsx106(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx106(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
|
|
11104
11208
|
] }),
|
|
11105
|
-
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */
|
|
11106
|
-
monitor && monitor.activeTab === "following" && /* @__PURE__ */
|
|
11107
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */
|
|
11108
|
-
monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */
|
|
11109
|
-
monitor && monitor.activeTab === "standings" && /* @__PURE__ */
|
|
11110
|
-
monitor && monitor.activeTab === "squad" && /* @__PURE__ */
|
|
11111
|
-
/* @__PURE__ */
|
|
11209
|
+
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx106(TodayPanel, { discovery, ui, monitor }),
|
|
11210
|
+
monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx106(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
|
|
11211
|
+
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx106(OddsPanel, { monitor, ui, slip }),
|
|
11212
|
+
monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */ jsx106(Fixtures, { fixtures: clubFixturesResult?.fixtures ?? [], loading: clubFixturesResult?.loading ?? false, ui }),
|
|
11213
|
+
monitor && monitor.activeTab === "standings" && /* @__PURE__ */ jsx106(Standings, { standings: clubStandingsResult?.data ?? null, loading: clubStandingsResult?.loading ?? false, ui }),
|
|
11214
|
+
monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsxs90(Fragment27, { children: [
|
|
11215
|
+
/* @__PURE__ */ jsx106(
|
|
11112
11216
|
"div",
|
|
11113
11217
|
{
|
|
11114
11218
|
ref: squadLayerRef,
|
|
11115
11219
|
style: selectedPlayerId === null ? SQUAD_LAYER_STYLE : HIDDEN_LAYER_STYLE,
|
|
11116
11220
|
"aria-hidden": selectedPlayerId !== null ? true : void 0,
|
|
11117
|
-
children: /* @__PURE__ */
|
|
11221
|
+
children: /* @__PURE__ */ jsx106(
|
|
11118
11222
|
Squad,
|
|
11119
11223
|
{
|
|
11120
11224
|
squad: clubSquadResult?.data ?? null,
|
|
@@ -11132,9 +11236,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11132
11236
|
)
|
|
11133
11237
|
}
|
|
11134
11238
|
),
|
|
11135
|
-
selectedPlayerId !== null && /* @__PURE__ */
|
|
11239
|
+
selectedPlayerId !== null && /* @__PURE__ */ jsx106(PlayerDetail, { detail: clubPlayerDetailResult?.data ?? null, loading: clubPlayerDetailResult?.loading ?? false, ui, seasonName: clubSquadStatsResult?.seasonName ?? null, onClose: closePlayer })
|
|
11136
11240
|
] }),
|
|
11137
|
-
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */
|
|
11241
|
+
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx106(
|
|
11138
11242
|
GamesPanel,
|
|
11139
11243
|
{
|
|
11140
11244
|
loggedIn: !!loggedIn,
|
|
@@ -11149,9 +11253,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11149
11253
|
}
|
|
11150
11254
|
}
|
|
11151
11255
|
),
|
|
11152
|
-
(!monitor || monitor.activeTab !== "games") && /* @__PURE__ */
|
|
11153
|
-
/* @__PURE__ */
|
|
11154
|
-
paused ? null : /* @__PURE__ */
|
|
11256
|
+
(!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs90(Fragment27, { children: [
|
|
11257
|
+
/* @__PURE__ */ jsx106("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
|
|
11258
|
+
paused ? null : /* @__PURE__ */ jsx106(
|
|
11155
11259
|
ChatInput,
|
|
11156
11260
|
{
|
|
11157
11261
|
ref: inputRef,
|
|
@@ -11170,9 +11274,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
11170
11274
|
}
|
|
11171
11275
|
|
|
11172
11276
|
// src/components/HostEventsProvider.tsx
|
|
11173
|
-
import { jsx as
|
|
11277
|
+
import { jsx as jsx107 } from "react/jsx-runtime";
|
|
11174
11278
|
function HostEventsProvider({ value, children }) {
|
|
11175
|
-
return /* @__PURE__ */
|
|
11279
|
+
return /* @__PURE__ */ jsx107(SlipStateContext.Provider, { value: value.slipState, children });
|
|
11176
11280
|
}
|
|
11177
11281
|
|
|
11178
11282
|
// src/styles/css.generated.ts
|
|
@@ -12286,6 +12390,41 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
12286
12390
|
.ss-w-mon-scorers-home { text-align: right; }
|
|
12287
12391
|
.ss-w-mon-scorers-away { text-align: left; }
|
|
12288
12392
|
.ss-w-mon-scorers-ball { flex: none; align-self: start; line-height: 1.35; }
|
|
12393
|
+
|
|
12394
|
+
/* Pinned pre-match form + head-to-head (MonitorFormH2H): collapsed by default, a real <button>
|
|
12395
|
+
header toggles it. W/D/L dots and the H2H bar/legend keep fixed, theme-independent colors
|
|
12396
|
+
(same convention as the dashboard tile accents above) since they're self-contained badges
|
|
12397
|
+
carrying their own ink color, not page-background-dependent text. */
|
|
12398
|
+
.ss-w-h2h { border-left: 3px solid #16A34A; padding-left: 12px; }
|
|
12399
|
+
.ss-w-h2h-head { display: flex; align-items: center; justify-content: space-between; width: 100%; background: none; border: none; cursor: pointer; text-align: left; font: inherit; color: inherit; padding: 0; }
|
|
12400
|
+
.ss-w-h2h-head-l { display: flex; align-items: center; gap: 6px; }
|
|
12401
|
+
.ss-w-h2h-dot { width: 4px; height: 4px; border-radius: 999px; background: var(--ss-w-faint); flex: none; }
|
|
12402
|
+
.ss-w-h2h-title { font-size: 13px; font-weight: 700; color: var(--ss-w-ink); }
|
|
12403
|
+
.ss-w-h2h-chevron { flex: none; color: var(--ss-w-faint); transition: transform .15s ease; }
|
|
12404
|
+
.ss-w-h2h-chevron--open { transform: rotate(180deg); }
|
|
12405
|
+
.ss-w-h2h-body { padding-top: 12px; display: flex; flex-direction: column; gap: 12px; }
|
|
12406
|
+
.ss-w-h2h-forms { display: flex; align-items: flex-start; justify-content: space-between; }
|
|
12407
|
+
.ss-w-h2h-form-col { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; }
|
|
12408
|
+
.ss-w-h2h-form-col--away { align-items: flex-end; }
|
|
12409
|
+
.ss-w-h2h-form-team { font-size: 11px; color: var(--ss-w-faint); }
|
|
12410
|
+
.ss-w-h2h-dots { display: flex; gap: 4px; }
|
|
12411
|
+
.ss-w-h2h-result { width: 20px; height: 20px; border-radius: 999px; font-size: 10px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex: none; }
|
|
12412
|
+
.ss-w-h2h-result--win { background: #16A34A; color: #FFFFFF; }
|
|
12413
|
+
.ss-w-h2h-result--draw { background: #E5E7EB; color: #4B5563; }
|
|
12414
|
+
.ss-w-h2h-result--loss { background: #F5A623; color: #1F2937; }
|
|
12415
|
+
.ss-w-h2h-record { display: flex; flex-direction: column; gap: 6px; }
|
|
12416
|
+
.ss-w-h2h-meta { font-size: 11px; color: var(--ss-w-faint); }
|
|
12417
|
+
.ss-w-h2h-bar { display: flex; width: 100%; height: 8px; border-radius: 999px; overflow: hidden; }
|
|
12418
|
+
.ss-w-h2h-bar-seg--win { background: #16A34A; }
|
|
12419
|
+
.ss-w-h2h-bar-seg--draw { background: #D1D5DB; }
|
|
12420
|
+
.ss-w-h2h-bar-seg--loss { background: #2563EB; }
|
|
12421
|
+
.ss-w-h2h-legend { display: flex; align-items: center; justify-content: space-between; margin-top: 2px; }
|
|
12422
|
+
.ss-w-h2h-legend-item { font-size: 11px; color: var(--ss-w-ink); display: flex; align-items: center; gap: 5px; }
|
|
12423
|
+
.ss-w-h2h-legend-dot { width: 7px; height: 7px; border-radius: 999px; display: inline-block; flex: none; }
|
|
12424
|
+
.ss-w-h2h-legend-dot--win { background: #16A34A; }
|
|
12425
|
+
.ss-w-h2h-legend-dot--draw { background: #D1D5DB; }
|
|
12426
|
+
.ss-w-h2h-legend-dot--loss { background: #2563EB; }
|
|
12427
|
+
|
|
12289
12428
|
.ss-w-fact { display: flex; flex-direction: column; gap: 7px; padding: 10px 12px; border-radius: 10px; background: color-mix(in srgb, var(--ss-w-accent) 9%, transparent); border: 1px solid color-mix(in srgb, var(--ss-w-accent) 22%, transparent); }
|
|
12290
12429
|
.ss-w-fact-k { display: flex; align-items: center; gap: 6px; font-size: 10.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--ss-w-accent); }
|
|
12291
12430
|
.ss-w-fact-min { color: var(--ss-w-ink); letter-spacing: 0; }
|
|
@@ -13043,7 +13182,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13043
13182
|
`;
|
|
13044
13183
|
|
|
13045
13184
|
// src/StatsWidget.tsx
|
|
13046
|
-
import { jsx as
|
|
13185
|
+
import { jsx as jsx108 } from "react/jsx-runtime";
|
|
13047
13186
|
function buildClient(props) {
|
|
13048
13187
|
try {
|
|
13049
13188
|
if ("client" in props && props.client) {
|
|
@@ -13084,7 +13223,7 @@ function StatsWidget(props) {
|
|
|
13084
13223
|
}, []);
|
|
13085
13224
|
const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
|
|
13086
13225
|
const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
|
|
13087
|
-
const [hasToday, setHasToday] =
|
|
13226
|
+
const [hasToday, setHasToday] = useState56(false);
|
|
13088
13227
|
const liveCardWatches = useMemo6(() => {
|
|
13089
13228
|
const seen = /* @__PURE__ */ new Set();
|
|
13090
13229
|
const out = [];
|
|
@@ -13268,7 +13407,7 @@ function StatsWidget(props) {
|
|
|
13268
13407
|
}, [built, ui.injectStyles]);
|
|
13269
13408
|
if (!built) return null;
|
|
13270
13409
|
const attrs = themeAttrs(ui);
|
|
13271
|
-
return /* @__PURE__ */
|
|
13410
|
+
return /* @__PURE__ */ jsx108(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx108(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx108("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__ */ jsx108(
|
|
13272
13411
|
ChatPanel,
|
|
13273
13412
|
{
|
|
13274
13413
|
controller,
|
|
@@ -13288,7 +13427,7 @@ function StatsWidget(props) {
|
|
|
13288
13427
|
conversation: built?.conversation ?? null,
|
|
13289
13428
|
presetGrid
|
|
13290
13429
|
}
|
|
13291
|
-
) : /* @__PURE__ */
|
|
13430
|
+
) : /* @__PURE__ */ jsx108(
|
|
13292
13431
|
ChatFab,
|
|
13293
13432
|
{
|
|
13294
13433
|
label: ui.launcherLabel,
|