@sensiblestats/widget-react 0.58.0 → 0.59.1
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 +12 -0
- package/dist/index.cjs +531 -394
- 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 +381 -244
- package/dist/index.js.map +1 -1
- package/dist/styles.css +30 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/StatsWidget.tsx
|
|
2
|
-
import { useCallback as useCallback9, useEffect as useEffect15, useMemo as useMemo3, useRef as useRef13, useState as
|
|
2
|
+
import { useCallback as useCallback9, useEffect as useEffect15, useMemo as useMemo3, useRef as useRef13, useState as useState35 } from "react";
|
|
3
3
|
import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
|
|
4
4
|
|
|
5
5
|
// src/kickoff.ts
|
|
@@ -1896,7 +1896,7 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
|
|
|
1896
1896
|
}
|
|
1897
1897
|
|
|
1898
1898
|
// src/components/ChatPanel.tsx
|
|
1899
|
-
import { useEffect as useEffect14, useState as
|
|
1899
|
+
import { useEffect as useEffect14, useState as useState34 } from "react";
|
|
1900
1900
|
|
|
1901
1901
|
// src/components/ChatHeader.tsx
|
|
1902
1902
|
import { useEffect as useEffect8, useRef as useRef8, useState as useState8 } from "react";
|
|
@@ -3999,7 +3999,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
3999
3999
|
}
|
|
4000
4000
|
|
|
4001
4001
|
// src/components/GamesPanel.tsx
|
|
4002
|
-
import { useState as
|
|
4002
|
+
import { useState as useState32 } from "react";
|
|
4003
4003
|
|
|
4004
4004
|
// src/components/GamesLoginWall.tsx
|
|
4005
4005
|
import { jsx as jsx52 } from "react/jsx-runtime";
|
|
@@ -4133,7 +4133,7 @@ function GamesHub({
|
|
|
4133
4133
|
}
|
|
4134
4134
|
|
|
4135
4135
|
// src/components/GameScreenHost.tsx
|
|
4136
|
-
import { useEffect as useEffect13, useRef as useRef12, useState as
|
|
4136
|
+
import { useEffect as useEffect13, useRef as useRef12, useState as useState31 } from "react";
|
|
4137
4137
|
|
|
4138
4138
|
// src/useGamePlay.ts
|
|
4139
4139
|
import { useCallback as useCallback8, useRef as useRef11, useState as useState22 } from "react";
|
|
@@ -4208,7 +4208,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, refresh }) {
|
|
|
4208
4208
|
}
|
|
4209
4209
|
|
|
4210
4210
|
// src/components/games/MysteryTigerGame.tsx
|
|
4211
|
-
import { useState as
|
|
4211
|
+
import { useState as useState24, useId as useId2 } from "react";
|
|
4212
4212
|
|
|
4213
4213
|
// src/components/games/nationFlags.ts
|
|
4214
4214
|
var FLAGS = {
|
|
@@ -4291,8 +4291,29 @@ function nationalityFlag(nationality) {
|
|
|
4291
4291
|
return FLAGS[key] ?? nationality.slice(0, 3).toUpperCase();
|
|
4292
4292
|
}
|
|
4293
4293
|
|
|
4294
|
+
// src/components/games/PlayerAvatar.tsx
|
|
4295
|
+
import { useState as useState23 } from "react";
|
|
4296
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
4297
|
+
function initialsOf(name) {
|
|
4298
|
+
const parts = name.trim().split(/\s+/).filter(Boolean);
|
|
4299
|
+
const first = parts[0];
|
|
4300
|
+
if (!first) return "?";
|
|
4301
|
+
const last = parts[parts.length - 1];
|
|
4302
|
+
if (parts.length === 1 || !last) return first.slice(0, 2).toUpperCase();
|
|
4303
|
+
return ((first[0] ?? "") + (last[0] ?? "")).toUpperCase();
|
|
4304
|
+
}
|
|
4305
|
+
function PlayerAvatar({
|
|
4306
|
+
name,
|
|
4307
|
+
imagePath,
|
|
4308
|
+
className
|
|
4309
|
+
}) {
|
|
4310
|
+
const [failed, setFailed] = useState23(false);
|
|
4311
|
+
const showImage = Boolean(imagePath) && !failed;
|
|
4312
|
+
return /* @__PURE__ */ jsx55("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ jsx55("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx55("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
|
|
4313
|
+
}
|
|
4314
|
+
|
|
4294
4315
|
// src/components/games/MysteryTigerGame.tsx
|
|
4295
|
-
import { Fragment as Fragment9, jsx as
|
|
4316
|
+
import { Fragment as Fragment9, jsx as jsx56, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
4296
4317
|
function parseClientState(json) {
|
|
4297
4318
|
if (!json) return null;
|
|
4298
4319
|
try {
|
|
@@ -4315,6 +4336,14 @@ var ATTR_KEYS = [
|
|
|
4315
4336
|
"shirtNumber",
|
|
4316
4337
|
"apps"
|
|
4317
4338
|
];
|
|
4339
|
+
var PROFILE_ROWS = [
|
|
4340
|
+
{ key: "position", label: "Position" },
|
|
4341
|
+
{ key: "nationality", label: "Nationality" },
|
|
4342
|
+
{ key: "age", label: "Age" },
|
|
4343
|
+
{ key: "shirtNumber", label: "Jersey number" },
|
|
4344
|
+
{ key: "apps", label: "Match count" }
|
|
4345
|
+
];
|
|
4346
|
+
var MAX_GUESSES = 6;
|
|
4318
4347
|
function verdictGlyph(v) {
|
|
4319
4348
|
if (v.verdict === "exact") return "\u2713";
|
|
4320
4349
|
if (v.verdict === "miss") return "\u2717";
|
|
@@ -4327,9 +4356,49 @@ function directionArrow(v) {
|
|
|
4327
4356
|
if (v.direction === "down") return "\u25BC";
|
|
4328
4357
|
return "";
|
|
4329
4358
|
}
|
|
4359
|
+
var POSITION_SHORT = {
|
|
4360
|
+
goalkeeper: "GK",
|
|
4361
|
+
keeper: "GK",
|
|
4362
|
+
defender: "DEF",
|
|
4363
|
+
"centre back": "CB",
|
|
4364
|
+
"center back": "CB",
|
|
4365
|
+
"centre-back": "CB",
|
|
4366
|
+
"center-back": "CB",
|
|
4367
|
+
"left back": "LB",
|
|
4368
|
+
"right back": "RB",
|
|
4369
|
+
"left wing-back": "LWB",
|
|
4370
|
+
"right wing-back": "RWB",
|
|
4371
|
+
sweeper: "SW",
|
|
4372
|
+
midfielder: "MID",
|
|
4373
|
+
"defensive midfield": "DM",
|
|
4374
|
+
"central midfield": "CM",
|
|
4375
|
+
"centre midfield": "CM",
|
|
4376
|
+
"attacking midfield": "AM",
|
|
4377
|
+
"left midfield": "LM",
|
|
4378
|
+
"right midfield": "RM",
|
|
4379
|
+
"left wing": "LW",
|
|
4380
|
+
"right wing": "RW",
|
|
4381
|
+
"left winger": "LW",
|
|
4382
|
+
"right winger": "RW",
|
|
4383
|
+
forward: "FWD",
|
|
4384
|
+
attacker: "FWD",
|
|
4385
|
+
striker: "ST",
|
|
4386
|
+
"second striker": "SS",
|
|
4387
|
+
"centre forward": "CF",
|
|
4388
|
+
"center forward": "CF",
|
|
4389
|
+
"centre-forward": "CF"
|
|
4390
|
+
};
|
|
4391
|
+
function shortPosition(value) {
|
|
4392
|
+
const mapped = POSITION_SHORT[value.trim().toLowerCase()];
|
|
4393
|
+
if (mapped) return mapped;
|
|
4394
|
+
if (value.length <= 3) return value.toUpperCase();
|
|
4395
|
+
return value.split(/[\s-]+/).filter(Boolean).map((w) => (w[0] ?? "").toUpperCase()).join("").slice(0, 3);
|
|
4396
|
+
}
|
|
4330
4397
|
function tileFace(key, v) {
|
|
4331
4398
|
if (!v.value) return verdictGlyph(v);
|
|
4332
|
-
|
|
4399
|
+
if (key === "nationality") return nationalityFlag(v.value);
|
|
4400
|
+
if (key === "position") return shortPosition(v.value);
|
|
4401
|
+
return v.value;
|
|
4333
4402
|
}
|
|
4334
4403
|
function MysteryTigerGame({
|
|
4335
4404
|
config,
|
|
@@ -4337,12 +4406,17 @@ function MysteryTigerGame({
|
|
|
4337
4406
|
submitting,
|
|
4338
4407
|
onSubmit
|
|
4339
4408
|
}) {
|
|
4340
|
-
const [query, setQuery] =
|
|
4409
|
+
const [query, setQuery] = useState24("");
|
|
4410
|
+
const [portraitFailed, setPortraitFailed] = useState24(false);
|
|
4341
4411
|
const inputId = useId2();
|
|
4342
4412
|
const clientState = parseClientState(result?.clientStateJson);
|
|
4343
4413
|
const guessResults = clientState?.guessResults ?? [];
|
|
4344
4414
|
const alreadyGuessedIds = new Set(guessResults.map((g) => g.playerId));
|
|
4415
|
+
const shirtEnabled = config?.shirtTileEnabled ?? clientState?.shirtTileEnabled ?? false;
|
|
4345
4416
|
const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
|
|
4417
|
+
const guessesUsed = clientState?.guessesUsed ?? guessResults.length;
|
|
4418
|
+
const revealPhoto = isOver && Boolean(clientState?.revealedPlayerImagePath) && !portraitFailed;
|
|
4419
|
+
const revealName = isOver ? clientState?.revealedPlayerName : void 0;
|
|
4346
4420
|
const filtered = config && !isOver ? config.squadPlayers.filter(
|
|
4347
4421
|
(p) => !alreadyGuessedIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
4348
4422
|
) : [];
|
|
@@ -4354,12 +4428,12 @@ function MysteryTigerGame({
|
|
|
4354
4428
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
4355
4429
|
}
|
|
4356
4430
|
return /* @__PURE__ */ jsxs49("div", { className: "ss-w-gt", "data-testid": "game-screen-mystery-tiger", children: [
|
|
4357
|
-
!config && /* @__PURE__ */
|
|
4431
|
+
!config && /* @__PURE__ */ jsx56("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }),
|
|
4358
4432
|
config && /* @__PURE__ */ jsxs49(Fragment9, { children: [
|
|
4359
4433
|
/* @__PURE__ */ jsxs49("div", { className: "ss-w-gt-head", children: [
|
|
4360
4434
|
/* @__PURE__ */ jsxs49("div", { children: [
|
|
4361
|
-
/* @__PURE__ */
|
|
4362
|
-
/* @__PURE__ */
|
|
4435
|
+
/* @__PURE__ */ jsx56("div", { className: "ss-w-gt-title", children: "Mystery Tiger" }),
|
|
4436
|
+
/* @__PURE__ */ jsx56("div", { className: "ss-w-gt-sub", children: "Guess today's squad player" })
|
|
4363
4437
|
] }),
|
|
4364
4438
|
clientState && !isOver && /* @__PURE__ */ jsxs49("span", { className: "ss-w-gt-left", children: [
|
|
4365
4439
|
clientState.guessesRemaining,
|
|
@@ -4367,18 +4441,40 @@ function MysteryTigerGame({
|
|
|
4367
4441
|
] })
|
|
4368
4442
|
] }),
|
|
4369
4443
|
/* @__PURE__ */ jsxs49("div", { className: "ss-w-gscroll", children: [
|
|
4444
|
+
/* @__PURE__ */ jsxs49("div", { className: `ss-w-gt-card${isOver ? " ss-w-gt-card--reveal" : ""}`, children: [
|
|
4445
|
+
/* @__PURE__ */ jsx56("div", { className: "ss-w-gt-sil", children: revealPhoto ? /* @__PURE__ */ jsx56(
|
|
4446
|
+
"img",
|
|
4447
|
+
{
|
|
4448
|
+
src: clientState.revealedPlayerImagePath,
|
|
4449
|
+
alt: "",
|
|
4450
|
+
onError: () => setPortraitFailed(true)
|
|
4451
|
+
}
|
|
4452
|
+
) : isOver && revealName ? /* @__PURE__ */ jsx56("span", { className: "ss-w-av-initials", children: initialsOf(revealName) }) : /* @__PURE__ */ jsxs49("svg", { viewBox: "0 0 96 118", role: "img", "aria-label": "hidden player silhouette", children: [
|
|
4453
|
+
/* @__PURE__ */ jsx56("circle", { cx: "48", cy: "40", r: "21", fill: "var(--ss-w-faint)" }),
|
|
4454
|
+
/* @__PURE__ */ jsx56("path", { d: "M8 118c0-25 18-39 40-39s40 14 40 39z", fill: "var(--ss-w-faint)" })
|
|
4455
|
+
] }) }),
|
|
4456
|
+
!isOver && /* @__PURE__ */ jsx56("div", { className: "ss-w-gt-attrs", children: PROFILE_ROWS.filter((r) => r.key !== "shirtNumber" || shirtEnabled).map((row) => /* @__PURE__ */ jsxs49("div", { className: "ss-w-gt-attr", children: [
|
|
4457
|
+
/* @__PURE__ */ jsx56("span", { className: "ss-w-gt-attr-k", children: row.label }),
|
|
4458
|
+
/* @__PURE__ */ jsx56("span", { className: "ss-w-gt-attr-v", children: "\u2022\u2022\u2022" })
|
|
4459
|
+
] }, row.key)) })
|
|
4460
|
+
] }),
|
|
4461
|
+
!isOver && /* @__PURE__ */ jsx56("div", { className: "ss-w-gt-dots", "aria-label": `${guessesUsed} of ${MAX_GUESSES} guesses used`, children: Array.from({ length: MAX_GUESSES }).map((_, i) => /* @__PURE__ */ jsx56("i", { className: i < guessesUsed ? "ss-w-gt-dot ss-w-gt-dot--on" : "ss-w-gt-dot" }, i)) }),
|
|
4370
4462
|
!isOver && /* @__PURE__ */ jsxs49("div", { className: "ss-w-gt-lead", children: [
|
|
4371
4463
|
guessResults.length === 0 ? "Guess a squad player \u2014 each guess compares it to the mystery player on Pos, Nat, Age, Shirt & Apps: " : "Tiles: ",
|
|
4372
4464
|
/* @__PURE__ */ jsxs49("span", { className: "ss-w-gt-key", children: [
|
|
4373
|
-
/* @__PURE__ */
|
|
4374
|
-
" match \xB7
|
|
4375
|
-
|
|
4465
|
+
/* @__PURE__ */ jsx56("span", { className: "ss-w-gt-sw ss-w-gt-sw--exact", "aria-hidden": "true" }),
|
|
4466
|
+
" match \xB7",
|
|
4467
|
+
" ",
|
|
4468
|
+
/* @__PURE__ */ jsx56("span", { className: "ss-w-gt-sw ss-w-gt-sw--near", "aria-hidden": "true" }),
|
|
4469
|
+
" close \xB7",
|
|
4470
|
+
" ",
|
|
4471
|
+
/* @__PURE__ */ jsx56("b", { children: "\u25B2" }),
|
|
4376
4472
|
" higher \xB7 ",
|
|
4377
|
-
/* @__PURE__ */
|
|
4473
|
+
/* @__PURE__ */ jsx56("b", { children: "\u25BC" }),
|
|
4378
4474
|
" lower"
|
|
4379
4475
|
] })
|
|
4380
4476
|
] }),
|
|
4381
|
-
guessResults.length > 0 && /* @__PURE__ */
|
|
4477
|
+
guessResults.length > 0 && /* @__PURE__ */ jsx56("div", { className: "ss-w-gtrows", children: guessResults.map((gr, i) => {
|
|
4382
4478
|
const player = config.squadPlayers.find((p) => p.id === gr.playerId);
|
|
4383
4479
|
return /* @__PURE__ */ jsxs49("div", { className: "ss-w-gtguess", children: [
|
|
4384
4480
|
/* @__PURE__ */ jsxs49("div", { className: "ss-w-gtguess-nm", children: [
|
|
@@ -4386,7 +4482,7 @@ function MysteryTigerGame({
|
|
|
4386
4482
|
" \xB7 ",
|
|
4387
4483
|
player?.name ?? `#${gr.playerId}`
|
|
4388
4484
|
] }),
|
|
4389
|
-
/* @__PURE__ */
|
|
4485
|
+
/* @__PURE__ */ jsx56("div", { className: "ss-w-gtrow", children: ATTR_KEYS.map((key) => {
|
|
4390
4486
|
const v = gr[key];
|
|
4391
4487
|
const arrow = directionArrow(v);
|
|
4392
4488
|
return /* @__PURE__ */ jsxs49(
|
|
@@ -4397,10 +4493,10 @@ function MysteryTigerGame({
|
|
|
4397
4493
|
"data-verdict": v.verdict,
|
|
4398
4494
|
"aria-label": `${ATTR_LABELS[key]}: ${v.value ?? v.verdict}${v.direction ? ` ${v.direction}` : ""}`,
|
|
4399
4495
|
children: [
|
|
4400
|
-
/* @__PURE__ */
|
|
4496
|
+
/* @__PURE__ */ jsx56("span", { className: "ss-w-gtile-lab", children: ATTR_LABELS[key] }),
|
|
4401
4497
|
/* @__PURE__ */ jsxs49("span", { className: "ss-w-gtile-v", "aria-hidden": "true", children: [
|
|
4402
4498
|
tileFace(key, v),
|
|
4403
|
-
arrow && /* @__PURE__ */
|
|
4499
|
+
arrow && /* @__PURE__ */ jsx56("span", { className: "ss-w-gtile-dir", children: arrow })
|
|
4404
4500
|
] })
|
|
4405
4501
|
]
|
|
4406
4502
|
},
|
|
@@ -4414,8 +4510,8 @@ function MysteryTigerGame({
|
|
|
4414
4510
|
clientState.hintLine
|
|
4415
4511
|
] }),
|
|
4416
4512
|
isOver && clientState && /* @__PURE__ */ jsxs49("div", { className: `ss-w-gt-banner ss-w-gt-banner--${clientState.solved ? "solved" : "failed"}`, children: [
|
|
4417
|
-
/* @__PURE__ */
|
|
4418
|
-
clientState.revealedPlayerName && /* @__PURE__ */
|
|
4513
|
+
/* @__PURE__ */ jsx56("div", { className: "ss-w-gt-banner-label", children: clientState.solved ? "\u{1F42F} You found them!" : "\u{1F614} Out of guesses" }),
|
|
4514
|
+
clientState.revealedPlayerName && /* @__PURE__ */ jsx56("div", { className: "ss-w-gt-banner-name", children: clientState.revealedPlayerName }),
|
|
4419
4515
|
/* @__PURE__ */ jsxs49("div", { className: "ss-w-gt-banner-sub", children: [
|
|
4420
4516
|
clientState.guessesUsed,
|
|
4421
4517
|
" guess",
|
|
@@ -4425,7 +4521,7 @@ function MysteryTigerGame({
|
|
|
4425
4521
|
] })
|
|
4426
4522
|
] }),
|
|
4427
4523
|
!isOver && /* @__PURE__ */ jsxs49("div", { className: "ss-w-gpin ss-w-gtta", children: [
|
|
4428
|
-
/* @__PURE__ */
|
|
4524
|
+
/* @__PURE__ */ jsx56(
|
|
4429
4525
|
"input",
|
|
4430
4526
|
{
|
|
4431
4527
|
id: inputId,
|
|
@@ -4441,7 +4537,7 @@ function MysteryTigerGame({
|
|
|
4441
4537
|
"aria-autocomplete": "list"
|
|
4442
4538
|
}
|
|
4443
4539
|
),
|
|
4444
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
4540
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx56("div", { className: "ss-w-gtta-drop", role: "listbox", children: filtered.map((p) => /* @__PURE__ */ jsx56(
|
|
4445
4541
|
"div",
|
|
4446
4542
|
{
|
|
4447
4543
|
className: "ss-w-gtta-opt",
|
|
@@ -4462,7 +4558,7 @@ function MysteryTigerGame({
|
|
|
4462
4558
|
}
|
|
4463
4559
|
|
|
4464
4560
|
// src/components/games/HigherOrLowerGame.tsx
|
|
4465
|
-
import { Fragment as Fragment10, jsx as
|
|
4561
|
+
import { Fragment as Fragment10, jsx as jsx57, jsxs as jsxs50 } from "react/jsx-runtime";
|
|
4466
4562
|
var POINTS_PER_CORRECT = 10;
|
|
4467
4563
|
function parseClientState2(json) {
|
|
4468
4564
|
if (!json) return null;
|
|
@@ -4495,11 +4591,11 @@ function HigherOrLowerGame({
|
|
|
4495
4591
|
onSubmit(JSON.stringify({ answers: newAnswers }));
|
|
4496
4592
|
}
|
|
4497
4593
|
return /* @__PURE__ */ jsxs50("div", { className: "ss-w-hl", "data-testid": "game-screen-higher-or-lower", children: [
|
|
4498
|
-
!config && /* @__PURE__ */
|
|
4594
|
+
!config && /* @__PURE__ */ jsx57("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }),
|
|
4499
4595
|
config && /* @__PURE__ */ jsxs50(Fragment10, { children: [
|
|
4500
4596
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hl-head", children: [
|
|
4501
4597
|
/* @__PURE__ */ jsxs50("div", { children: [
|
|
4502
|
-
/* @__PURE__ */
|
|
4598
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hl-title", children: "Higher or Lower" }),
|
|
4503
4599
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hl-sub", children: [
|
|
4504
4600
|
config.statLabel,
|
|
4505
4601
|
" \xB7 ",
|
|
@@ -4519,13 +4615,20 @@ function HigherOrLowerGame({
|
|
|
4519
4615
|
] }),
|
|
4520
4616
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hlpair", children: [
|
|
4521
4617
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hlpc", children: [
|
|
4522
|
-
/* @__PURE__ */
|
|
4523
|
-
|
|
4524
|
-
|
|
4525
|
-
|
|
4618
|
+
/* @__PURE__ */ jsx57(
|
|
4619
|
+
PlayerAvatar,
|
|
4620
|
+
{
|
|
4621
|
+
className: "ss-w-hlpc-av",
|
|
4622
|
+
name: currentPair.playerAName,
|
|
4623
|
+
imagePath: currentPair.playerAImagePath
|
|
4624
|
+
}
|
|
4625
|
+
),
|
|
4626
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-name", children: currentPair.playerAName }),
|
|
4627
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-stat", children: config.statLabel }),
|
|
4628
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-val", children: currentPair.playerAValue })
|
|
4526
4629
|
] }),
|
|
4527
4630
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hlbtns", children: [
|
|
4528
|
-
/* @__PURE__ */
|
|
4631
|
+
/* @__PURE__ */ jsx57(
|
|
4529
4632
|
"button",
|
|
4530
4633
|
{
|
|
4531
4634
|
type: "button",
|
|
@@ -4535,8 +4638,8 @@ function HigherOrLowerGame({
|
|
|
4535
4638
|
children: "Higher \u25B2"
|
|
4536
4639
|
}
|
|
4537
4640
|
),
|
|
4538
|
-
/* @__PURE__ */
|
|
4539
|
-
/* @__PURE__ */
|
|
4641
|
+
/* @__PURE__ */ jsx57("span", { className: "ss-w-hl-or", children: "or" }),
|
|
4642
|
+
/* @__PURE__ */ jsx57(
|
|
4540
4643
|
"button",
|
|
4541
4644
|
{
|
|
4542
4645
|
type: "button",
|
|
@@ -4548,10 +4651,17 @@ function HigherOrLowerGame({
|
|
|
4548
4651
|
)
|
|
4549
4652
|
] }),
|
|
4550
4653
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hlpc ss-w-hlpc--b", children: [
|
|
4551
|
-
/* @__PURE__ */
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4654
|
+
/* @__PURE__ */ jsx57(
|
|
4655
|
+
PlayerAvatar,
|
|
4656
|
+
{
|
|
4657
|
+
className: "ss-w-hlpc-av",
|
|
4658
|
+
name: currentPair.playerBName,
|
|
4659
|
+
imagePath: currentPair.playerBImagePath
|
|
4660
|
+
}
|
|
4661
|
+
),
|
|
4662
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-name", children: currentPair.playerBName }),
|
|
4663
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-stat", children: config.statLabel }),
|
|
4664
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hlpc-val ss-w-hlpc-val--hidden", children: "?" })
|
|
4555
4665
|
] })
|
|
4556
4666
|
] })
|
|
4557
4667
|
] }),
|
|
@@ -4567,10 +4677,10 @@ function HigherOrLowerGame({
|
|
|
4567
4677
|
] })
|
|
4568
4678
|
] }),
|
|
4569
4679
|
isOver && /* @__PURE__ */ jsxs50("div", { className: "ss-w-hl-over", children: [
|
|
4570
|
-
/* @__PURE__ */
|
|
4680
|
+
/* @__PURE__ */ jsx57("div", { className: "ss-w-hl-over-title", children: runEndedWrong ? "\u{1F6AB} Run over" : "\u{1F389} Perfect run!" }),
|
|
4571
4681
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hl-over-score", children: [
|
|
4572
4682
|
score,
|
|
4573
|
-
/* @__PURE__ */
|
|
4683
|
+
/* @__PURE__ */ jsx57("span", { className: "ss-w-hl-over-unit", children: " pts" })
|
|
4574
4684
|
] }),
|
|
4575
4685
|
/* @__PURE__ */ jsxs50("div", { className: "ss-w-hl-over-sub", children: [
|
|
4576
4686
|
correctCount,
|
|
@@ -4584,8 +4694,8 @@ function HigherOrLowerGame({
|
|
|
4584
4694
|
}
|
|
4585
4695
|
|
|
4586
4696
|
// src/components/games/CareerPathGame.tsx
|
|
4587
|
-
import { useState as
|
|
4588
|
-
import { Fragment as Fragment12, jsx as
|
|
4697
|
+
import { useState as useState25, useId as useId3, Fragment as Fragment11 } from "react";
|
|
4698
|
+
import { Fragment as Fragment12, jsx as jsx58, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
4589
4699
|
function parseClientState3(json) {
|
|
4590
4700
|
if (!json) return null;
|
|
4591
4701
|
try {
|
|
@@ -4605,12 +4715,12 @@ function spellYears(spell) {
|
|
|
4605
4715
|
function ClubSpellCard({ spell }) {
|
|
4606
4716
|
const years = spellYears(spell);
|
|
4607
4717
|
return /* @__PURE__ */ jsxs51("div", { className: `ss-w-cpath-club${spell.isLoan ? " ss-w-cpath-club--loan" : ""}`, children: [
|
|
4608
|
-
spell.crestUrl ? /* @__PURE__ */
|
|
4718
|
+
spell.crestUrl ? /* @__PURE__ */ jsx58("img", { src: spell.crestUrl, alt: "", className: "ss-w-cpath-crest", loading: "lazy" }) : /* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-crest ss-w-cpath-crest--fallback", "aria-hidden": "true", children: spell.clubName.slice(0, 3).toUpperCase() }),
|
|
4609
4719
|
/* @__PURE__ */ jsxs51("span", { className: "ss-w-cpath-club-name", children: [
|
|
4610
4720
|
spell.clubName,
|
|
4611
|
-
spell.isLoan && /* @__PURE__ */
|
|
4721
|
+
spell.isLoan && /* @__PURE__ */ jsx58("span", { className: "ss-w-cpath-loan-note", children: " (loan)" })
|
|
4612
4722
|
] }),
|
|
4613
|
-
years && /* @__PURE__ */
|
|
4723
|
+
years && /* @__PURE__ */ jsx58("span", { className: "ss-w-cpath-spell-yr", children: years })
|
|
4614
4724
|
] });
|
|
4615
4725
|
}
|
|
4616
4726
|
function CareerPathGame({
|
|
@@ -4619,7 +4729,7 @@ function CareerPathGame({
|
|
|
4619
4729
|
submitting,
|
|
4620
4730
|
onSubmit
|
|
4621
4731
|
}) {
|
|
4622
|
-
const [query, setQuery] =
|
|
4732
|
+
const [query, setQuery] = useState25("");
|
|
4623
4733
|
const inputId = useId3();
|
|
4624
4734
|
const clientState = parseClientState3(result?.clientStateJson);
|
|
4625
4735
|
const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
|
|
@@ -4636,12 +4746,12 @@ function CareerPathGame({
|
|
|
4636
4746
|
onSubmit(JSON.stringify({ guesses: newGuesses }));
|
|
4637
4747
|
}
|
|
4638
4748
|
return /* @__PURE__ */ jsxs51("div", { className: "ss-w-cpath", "data-testid": "game-screen-career-path", children: [
|
|
4639
|
-
!config && /* @__PURE__ */
|
|
4749
|
+
!config && /* @__PURE__ */ jsx58("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }),
|
|
4640
4750
|
config && /* @__PURE__ */ jsxs51(Fragment12, { children: [
|
|
4641
4751
|
/* @__PURE__ */ jsxs51("div", { className: "ss-w-cpath-head", children: [
|
|
4642
4752
|
/* @__PURE__ */ jsxs51("div", { children: [
|
|
4643
|
-
/* @__PURE__ */
|
|
4644
|
-
/* @__PURE__ */
|
|
4753
|
+
/* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-title", children: "Career Path" }),
|
|
4754
|
+
/* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-sub", children: "Guess the mystery player from the clubs they've played for, oldest first." })
|
|
4645
4755
|
] }),
|
|
4646
4756
|
clientState && !isOver && /* @__PURE__ */ jsxs51("span", { className: "ss-w-cpath-left", children: [
|
|
4647
4757
|
clientState.guessesRemaining,
|
|
@@ -4649,17 +4759,17 @@ function CareerPathGame({
|
|
|
4649
4759
|
] })
|
|
4650
4760
|
] }),
|
|
4651
4761
|
/* @__PURE__ */ jsxs51("div", { className: "ss-w-gscroll", children: [
|
|
4652
|
-
/* @__PURE__ */
|
|
4653
|
-
i > 0 && /* @__PURE__ */
|
|
4654
|
-
/* @__PURE__ */
|
|
4762
|
+
/* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-seq", children: visiblePath.map((spell, i) => /* @__PURE__ */ jsxs51(Fragment11, { children: [
|
|
4763
|
+
i > 0 && /* @__PURE__ */ jsx58("span", { className: "ss-w-cpath-arrow", "aria-hidden": "true", children: "\u203A" }),
|
|
4764
|
+
/* @__PURE__ */ jsx58(ClubSpellCard, { spell })
|
|
4655
4765
|
] }, `${spell.clubName}-${i}`)) }),
|
|
4656
4766
|
clientState?.hintLine && !isOver && /* @__PURE__ */ jsxs51("div", { className: "ss-w-cpath-hint", children: [
|
|
4657
4767
|
"\u{1F4A1} ",
|
|
4658
4768
|
clientState.hintLine
|
|
4659
4769
|
] }),
|
|
4660
4770
|
isOver && clientState && /* @__PURE__ */ jsxs51("div", { className: `ss-w-cpath-banner ss-w-cpath-banner--${clientState.solved ? "solved" : "failed"}`, children: [
|
|
4661
|
-
/* @__PURE__ */
|
|
4662
|
-
clientState.revealedPlayerName && /* @__PURE__ */
|
|
4771
|
+
/* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-banner-label", children: clientState.solved ? "\u2705 Career traced!" : "\u{1F614} Out of guesses" }),
|
|
4772
|
+
clientState.revealedPlayerName && /* @__PURE__ */ jsx58("div", { className: "ss-w-cpath-banner-name", children: clientState.revealedPlayerName }),
|
|
4663
4773
|
/* @__PURE__ */ jsxs51("div", { className: "ss-w-cpath-banner-sub", children: [
|
|
4664
4774
|
clientState.guessesUsed,
|
|
4665
4775
|
" guess",
|
|
@@ -4669,7 +4779,7 @@ function CareerPathGame({
|
|
|
4669
4779
|
] })
|
|
4670
4780
|
] }),
|
|
4671
4781
|
!isOver && /* @__PURE__ */ jsxs51("div", { className: "ss-w-gpin ss-w-gtta", children: [
|
|
4672
|
-
/* @__PURE__ */
|
|
4782
|
+
/* @__PURE__ */ jsx58(
|
|
4673
4783
|
"input",
|
|
4674
4784
|
{
|
|
4675
4785
|
id: inputId,
|
|
@@ -4685,7 +4795,7 @@ function CareerPathGame({
|
|
|
4685
4795
|
"aria-autocomplete": "list"
|
|
4686
4796
|
}
|
|
4687
4797
|
),
|
|
4688
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
4798
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx58("div", { className: "ss-w-gtta-drop", role: "listbox", children: filtered.map((p) => /* @__PURE__ */ jsx58(
|
|
4689
4799
|
"div",
|
|
4690
4800
|
{
|
|
4691
4801
|
className: "ss-w-gtta-opt",
|
|
@@ -4706,8 +4816,8 @@ function CareerPathGame({
|
|
|
4706
4816
|
}
|
|
4707
4817
|
|
|
4708
4818
|
// src/components/games/BeatTheGridGame.tsx
|
|
4709
|
-
import React, { useState as
|
|
4710
|
-
import { Fragment as Fragment13, jsx as
|
|
4819
|
+
import React, { useState as useState26, useId as useId4 } from "react";
|
|
4820
|
+
import { Fragment as Fragment13, jsx as jsx59, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
4711
4821
|
function parseClientState4(json) {
|
|
4712
4822
|
if (!json) return null;
|
|
4713
4823
|
try {
|
|
@@ -4738,7 +4848,7 @@ function SearchSheet({
|
|
|
4738
4848
|
onPick,
|
|
4739
4849
|
onDismiss
|
|
4740
4850
|
}) {
|
|
4741
|
-
const [query, setQuery] =
|
|
4851
|
+
const [query, setQuery] = useState26("");
|
|
4742
4852
|
const inputId = useId4();
|
|
4743
4853
|
const filtered = playerPool.filter(
|
|
4744
4854
|
(p) => !alreadyFilledIds.has(p.id) && p.name.toLowerCase().includes(query.toLowerCase())
|
|
@@ -4746,11 +4856,11 @@ function SearchSheet({
|
|
|
4746
4856
|
return /* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-sheet", "data-testid": "btg-search-sheet", children: [
|
|
4747
4857
|
/* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-sheet-hdr", children: [
|
|
4748
4858
|
/* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-sheet-ctx", children: [
|
|
4749
|
-
/* @__PURE__ */
|
|
4750
|
-
/* @__PURE__ */
|
|
4751
|
-
/* @__PURE__ */
|
|
4859
|
+
/* @__PURE__ */ jsx59("span", { className: "ss-w-btg-sheet-row", children: rowLabel }),
|
|
4860
|
+
/* @__PURE__ */ jsx59("span", { className: "ss-w-btg-sheet-sep", children: "\xD7" }),
|
|
4861
|
+
/* @__PURE__ */ jsx59("span", { className: "ss-w-btg-sheet-col", children: colLabel })
|
|
4752
4862
|
] }),
|
|
4753
|
-
/* @__PURE__ */
|
|
4863
|
+
/* @__PURE__ */ jsx59(
|
|
4754
4864
|
"button",
|
|
4755
4865
|
{
|
|
4756
4866
|
type: "button",
|
|
@@ -4762,8 +4872,8 @@ function SearchSheet({
|
|
|
4762
4872
|
}
|
|
4763
4873
|
)
|
|
4764
4874
|
] }),
|
|
4765
|
-
playerPool.length === 0 ? /* @__PURE__ */
|
|
4766
|
-
/* @__PURE__ */
|
|
4875
|
+
playerPool.length === 0 ? /* @__PURE__ */ jsx59("div", { className: "ss-w-btg-sheet-empty", children: "No players available to search yet." }) : /* @__PURE__ */ jsxs52("div", { className: "ss-w-gtta", children: [
|
|
4876
|
+
/* @__PURE__ */ jsx59(
|
|
4767
4877
|
"input",
|
|
4768
4878
|
{
|
|
4769
4879
|
id: inputId,
|
|
@@ -4779,7 +4889,7 @@ function SearchSheet({
|
|
|
4779
4889
|
autoFocus: true
|
|
4780
4890
|
}
|
|
4781
4891
|
),
|
|
4782
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
4892
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx59("div", { className: "ss-w-gtta-drop ss-w-btg-ta-list", role: "listbox", children: filtered.map((p) => /* @__PURE__ */ jsx59(
|
|
4783
4893
|
"div",
|
|
4784
4894
|
{
|
|
4785
4895
|
className: "ss-w-gtta-opt",
|
|
@@ -4804,7 +4914,7 @@ function BeatTheGridGame({
|
|
|
4804
4914
|
onSubmit,
|
|
4805
4915
|
playerPool
|
|
4806
4916
|
}) {
|
|
4807
|
-
const [activeCell, setActiveCell] =
|
|
4917
|
+
const [activeCell, setActiveCell] = useState26(null);
|
|
4808
4918
|
const clientState = parseClientState4(result?.clientStateJson);
|
|
4809
4919
|
const filledCells = clientState?.cells ?? [];
|
|
4810
4920
|
const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
|
|
@@ -4822,15 +4932,15 @@ function BeatTheGridGame({
|
|
|
4822
4932
|
onSubmit(JSON.stringify({ cells: newCells }));
|
|
4823
4933
|
}
|
|
4824
4934
|
if (!config) {
|
|
4825
|
-
return /* @__PURE__ */
|
|
4935
|
+
return /* @__PURE__ */ jsx59("div", { className: "ss-w-btg", "data-testid": "game-screen-beat-the-grid", children: /* @__PURE__ */ jsx59("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }) });
|
|
4826
4936
|
}
|
|
4827
4937
|
const rows = config.rows;
|
|
4828
4938
|
const cols = config.cols;
|
|
4829
4939
|
return /* @__PURE__ */ jsxs52("div", { className: "ss-w-btg", "data-testid": "game-screen-beat-the-grid", children: [
|
|
4830
4940
|
/* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-head", children: [
|
|
4831
4941
|
/* @__PURE__ */ jsxs52("div", { children: [
|
|
4832
|
-
/* @__PURE__ */
|
|
4833
|
-
/* @__PURE__ */
|
|
4942
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-title", children: "Beat the Grid" }),
|
|
4943
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-sub", children: "Fill each cell with a player who fits" })
|
|
4834
4944
|
] }),
|
|
4835
4945
|
/* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-ctx", children: [
|
|
4836
4946
|
/* @__PURE__ */ jsxs52("span", { className: "ss-w-btg-ctx-score", children: [
|
|
@@ -4853,14 +4963,14 @@ function BeatTheGridGame({
|
|
|
4853
4963
|
style: { gridTemplateColumns: `auto repeat(${cols.length}, 1fr)` },
|
|
4854
4964
|
role: "grid",
|
|
4855
4965
|
children: [
|
|
4856
|
-
/* @__PURE__ */
|
|
4857
|
-
cols.map((col) => /* @__PURE__ */
|
|
4966
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-gc ss-w-btg-gc--corner" }),
|
|
4967
|
+
cols.map((col) => /* @__PURE__ */ jsx59("div", { className: "ss-w-btg-gc ss-w-btg-gc--colhdr", children: col }, col)),
|
|
4858
4968
|
rows.map((rowLabel, rowIdx) => /* @__PURE__ */ jsxs52(React.Fragment, { children: [
|
|
4859
|
-
/* @__PURE__ */
|
|
4969
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-gc ss-w-btg-gc--rowhdr", children: rowLabel }),
|
|
4860
4970
|
cols.map((colLabel, colIdx) => {
|
|
4861
4971
|
const filled = findCellResult(filledCells, rowIdx, colIdx);
|
|
4862
4972
|
const isActive = activeCell?.row === rowIdx && activeCell?.col === colIdx;
|
|
4863
|
-
return /* @__PURE__ */
|
|
4973
|
+
return /* @__PURE__ */ jsx59(
|
|
4864
4974
|
"button",
|
|
4865
4975
|
{
|
|
4866
4976
|
type: "button",
|
|
@@ -4874,12 +4984,12 @@ function BeatTheGridGame({
|
|
|
4874
4984
|
disabled: isLocked2 || submitting,
|
|
4875
4985
|
onClick: () => handleCellClick(rowIdx, colIdx),
|
|
4876
4986
|
children: filled ? /* @__PURE__ */ jsxs52(Fragment13, { children: [
|
|
4877
|
-
/* @__PURE__ */
|
|
4987
|
+
/* @__PURE__ */ jsx59("span", { className: "ss-w-btg-cell-nm", children: shortName(playerPool.find((p) => p.id === filled.playerId)?.name) }),
|
|
4878
4988
|
/* @__PURE__ */ jsxs52("span", { className: "ss-w-btg-cell-score", children: [
|
|
4879
4989
|
filled.rarityScore,
|
|
4880
|
-
filled.isCorrect && /* @__PURE__ */
|
|
4990
|
+
filled.isCorrect && /* @__PURE__ */ jsx59("span", { className: "ss-w-btg-cell-check", "aria-hidden": "true", children: " \u2713" })
|
|
4881
4991
|
] })
|
|
4882
|
-
] }) : /* @__PURE__ */
|
|
4992
|
+
] }) : /* @__PURE__ */ jsx59("span", { className: "ss-w-btg-cell-empty", "aria-hidden": "true", children: "+" })
|
|
4883
4993
|
},
|
|
4884
4994
|
`cell-${rowIdx}-${colIdx}`
|
|
4885
4995
|
);
|
|
@@ -4889,8 +4999,8 @@ function BeatTheGridGame({
|
|
|
4889
4999
|
}
|
|
4890
5000
|
),
|
|
4891
5001
|
isLocked2 && /* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-done", children: [
|
|
4892
|
-
/* @__PURE__ */
|
|
4893
|
-
/* @__PURE__ */
|
|
5002
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-done-label", children: "\u{1F532} Grid complete" }),
|
|
5003
|
+
/* @__PURE__ */ jsx59("div", { className: "ss-w-btg-done-score", children: clientState?.totalScore ?? 0 }),
|
|
4894
5004
|
/* @__PURE__ */ jsxs52("div", { className: "ss-w-btg-done-sub", children: [
|
|
4895
5005
|
filledCells.filter((c) => c.isCorrect).length,
|
|
4896
5006
|
"/",
|
|
@@ -4899,7 +5009,7 @@ function BeatTheGridGame({
|
|
|
4899
5009
|
] })
|
|
4900
5010
|
] })
|
|
4901
5011
|
] }),
|
|
4902
|
-
activeCell !== null && /* @__PURE__ */
|
|
5012
|
+
activeCell !== null && /* @__PURE__ */ jsx59("div", { className: "ss-w-gpin", children: /* @__PURE__ */ jsx59(
|
|
4903
5013
|
SearchSheet,
|
|
4904
5014
|
{
|
|
4905
5015
|
row: activeCell.row,
|
|
@@ -4916,9 +5026,9 @@ function BeatTheGridGame({
|
|
|
4916
5026
|
}
|
|
4917
5027
|
|
|
4918
5028
|
// src/components/games/GuessTheXiGame.tsx
|
|
4919
|
-
import { useState as
|
|
4920
|
-
import { Fragment as Fragment14, jsx as
|
|
4921
|
-
var
|
|
5029
|
+
import { useState as useState27, useId as useId5 } from "react";
|
|
5030
|
+
import { Fragment as Fragment14, jsx as jsx60, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
5031
|
+
var MAX_GUESSES2 = 3;
|
|
4922
5032
|
function parseClientState5(json) {
|
|
4923
5033
|
if (!json) return null;
|
|
4924
5034
|
try {
|
|
@@ -4984,7 +5094,7 @@ function GuessTheXiGame({
|
|
|
4984
5094
|
submitting,
|
|
4985
5095
|
onSubmit
|
|
4986
5096
|
}) {
|
|
4987
|
-
const [query, setQuery] =
|
|
5097
|
+
const [query, setQuery] = useState27("");
|
|
4988
5098
|
const inputId = useId5();
|
|
4989
5099
|
const clientState = parseClientState5(result?.clientStateJson);
|
|
4990
5100
|
const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
|
|
@@ -5010,13 +5120,13 @@ function GuessTheXiGame({
|
|
|
5010
5120
|
const wrongGuesses = (clientState?.guessHistory ?? []).filter((g) => !g.wasCorrect);
|
|
5011
5121
|
const revealCount = nameBySlot.size;
|
|
5012
5122
|
return /* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi", "data-testid": "game-screen-guess-the-xi", children: [
|
|
5013
|
-
!config && /* @__PURE__ */
|
|
5123
|
+
!config && /* @__PURE__ */ jsx60("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }),
|
|
5014
5124
|
config && /* @__PURE__ */ jsxs53(Fragment14, { children: [
|
|
5015
5125
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-head", children: [
|
|
5016
5126
|
/* @__PURE__ */ jsxs53("div", { children: [
|
|
5017
5127
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-title", children: [
|
|
5018
5128
|
"Guess the XI",
|
|
5019
|
-
formation && /* @__PURE__ */
|
|
5129
|
+
formation && /* @__PURE__ */ jsx60("span", { className: "ss-w-gxi-form", "aria-label": `Formation ${formation}`, children: formation })
|
|
5020
5130
|
] }),
|
|
5021
5131
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-sub", children: [
|
|
5022
5132
|
"Name the team \xB7 flags are each player's nationality \xB7 ",
|
|
@@ -5024,16 +5134,16 @@ function GuessTheXiGame({
|
|
|
5024
5134
|
] })
|
|
5025
5135
|
] }),
|
|
5026
5136
|
clientState && !isOver && /* @__PURE__ */ jsxs53("span", { className: "ss-w-gxi-left", children: [
|
|
5027
|
-
Math.max(0,
|
|
5137
|
+
Math.max(0, MAX_GUESSES2 - clientState.guessesUsed),
|
|
5028
5138
|
" left"
|
|
5029
5139
|
] })
|
|
5030
5140
|
] }),
|
|
5031
5141
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-gscroll", children: [
|
|
5032
|
-
rows.length > 0 && /* @__PURE__ */
|
|
5142
|
+
rows.length > 0 && /* @__PURE__ */ jsx60("div", { className: "ss-w-gxi-pitch", children: rows.map((row, r) => /* @__PURE__ */ jsx60("div", { className: "ss-w-gxi-prow", children: row.map((pos, c) => {
|
|
5033
5143
|
const posLabel = pos.slot ? posBySlot.get(pos.slot) ?? "" : "";
|
|
5034
5144
|
const name = pos.slot ? nameBySlot.get(pos.slot) : void 0;
|
|
5035
5145
|
return /* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-slot", children: [
|
|
5036
|
-
/* @__PURE__ */
|
|
5146
|
+
/* @__PURE__ */ jsx60(
|
|
5037
5147
|
"div",
|
|
5038
5148
|
{
|
|
5039
5149
|
className: `ss-w-gxi-flag${name ? " ss-w-gxi-flag--revealed" : ""}`,
|
|
@@ -5042,8 +5152,8 @@ function GuessTheXiGame({
|
|
|
5042
5152
|
children: nationalityFlag(pos.nationality)
|
|
5043
5153
|
}
|
|
5044
5154
|
),
|
|
5045
|
-
posLabel && /* @__PURE__ */
|
|
5046
|
-
name && /* @__PURE__ */
|
|
5155
|
+
posLabel && /* @__PURE__ */ jsx60("span", { className: "ss-w-gxi-pos", children: posLabel }),
|
|
5156
|
+
name && /* @__PURE__ */ jsx60("span", { className: "ss-w-gxi-flag-lab", children: surname(name) })
|
|
5047
5157
|
] }, `${pos.slot}-${c}`);
|
|
5048
5158
|
}) }, r)) }),
|
|
5049
5159
|
revealCount > 0 && !isOver && /* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-revnote", children: [
|
|
@@ -5053,13 +5163,13 @@ function GuessTheXiGame({
|
|
|
5053
5163
|
revealCount === 1 ? "" : "s",
|
|
5054
5164
|
" revealed \u2014 highlighted on the pitch"
|
|
5055
5165
|
] }),
|
|
5056
|
-
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */
|
|
5166
|
+
!isOver && wrongGuesses.length > 0 && /* @__PURE__ */ jsx60("div", { className: "ss-w-gxi-wrong", children: wrongGuesses.map((g) => {
|
|
5057
5167
|
const team = config.teamPool.find((t) => t.teamId === g.teamId);
|
|
5058
|
-
return /* @__PURE__ */
|
|
5168
|
+
return /* @__PURE__ */ jsx60("span", { className: "ss-w-gxi-wrong-pill", children: team?.teamName ?? `#${g.teamId}` }, g.teamId);
|
|
5059
5169
|
}) }),
|
|
5060
5170
|
isOver && clientState && /* @__PURE__ */ jsxs53("div", { className: `ss-w-gxi-banner ss-w-gxi-banner--${solved ? "solved" : "failed"}`, children: [
|
|
5061
|
-
/* @__PURE__ */
|
|
5062
|
-
/* @__PURE__ */
|
|
5171
|
+
/* @__PURE__ */ jsx60("div", { className: "ss-w-gxi-banner-label", children: solved ? "\u2705 Solved!" : "\u{1F614} Out of guesses" }),
|
|
5172
|
+
/* @__PURE__ */ jsx60("div", { className: "ss-w-gxi-banner-score", children: clientState.score }),
|
|
5063
5173
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-gxi-banner-sub", children: [
|
|
5064
5174
|
clientState.guessesUsed,
|
|
5065
5175
|
" guess",
|
|
@@ -5069,7 +5179,7 @@ function GuessTheXiGame({
|
|
|
5069
5179
|
] })
|
|
5070
5180
|
] }),
|
|
5071
5181
|
!isOver && /* @__PURE__ */ jsxs53("div", { className: "ss-w-gpin ss-w-gtta", children: [
|
|
5072
|
-
/* @__PURE__ */
|
|
5182
|
+
/* @__PURE__ */ jsx60(
|
|
5073
5183
|
"input",
|
|
5074
5184
|
{
|
|
5075
5185
|
id: inputId,
|
|
@@ -5085,7 +5195,7 @@ function GuessTheXiGame({
|
|
|
5085
5195
|
"aria-autocomplete": "list"
|
|
5086
5196
|
}
|
|
5087
5197
|
),
|
|
5088
|
-
query.length > 0 && filtered.length > 0 && /* @__PURE__ */
|
|
5198
|
+
query.length > 0 && filtered.length > 0 && /* @__PURE__ */ jsx60("div", { className: "ss-w-gtta-drop", role: "listbox", children: filtered.map((t) => /* @__PURE__ */ jsx60(
|
|
5089
5199
|
"div",
|
|
5090
5200
|
{
|
|
5091
5201
|
className: "ss-w-gtta-opt",
|
|
@@ -5106,8 +5216,8 @@ function GuessTheXiGame({
|
|
|
5106
5216
|
}
|
|
5107
5217
|
|
|
5108
5218
|
// src/components/games/DailyQuizGame.tsx
|
|
5109
|
-
import { useState as
|
|
5110
|
-
import { Fragment as Fragment15, jsx as
|
|
5219
|
+
import { useState as useState28 } from "react";
|
|
5220
|
+
import { Fragment as Fragment15, jsx as jsx61, jsxs as jsxs54 } from "react/jsx-runtime";
|
|
5111
5221
|
function parseClientState6(json) {
|
|
5112
5222
|
if (!json) return null;
|
|
5113
5223
|
try {
|
|
@@ -5125,7 +5235,7 @@ function DailyQuizGame({
|
|
|
5125
5235
|
submitting,
|
|
5126
5236
|
onSubmit
|
|
5127
5237
|
}) {
|
|
5128
|
-
const [selections, setSelections] =
|
|
5238
|
+
const [selections, setSelections] = useState28(/* @__PURE__ */ new Map());
|
|
5129
5239
|
const clientState = parseClientState6(result?.clientStateJson);
|
|
5130
5240
|
const isRevealed = (clientState?.results.length ?? 0) > 0 || result?.alreadyPlayed === true;
|
|
5131
5241
|
const allAnswered = config != null && selections.size === config.questions.length;
|
|
@@ -5142,25 +5252,25 @@ function DailyQuizGame({
|
|
|
5142
5252
|
onSubmit(JSON.stringify({ answers }));
|
|
5143
5253
|
}
|
|
5144
5254
|
return /* @__PURE__ */ jsxs54("div", { className: "ss-w-dq", "data-testid": "game-screen-daily-quiz", children: [
|
|
5145
|
-
!config && /* @__PURE__ */
|
|
5255
|
+
!config && /* @__PURE__ */ jsx61("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }),
|
|
5146
5256
|
config && /* @__PURE__ */ jsxs54(Fragment15, { children: [
|
|
5147
5257
|
isRevealed && result?.score != null && /* @__PURE__ */ jsxs54("div", { className: "ss-w-dq-score", children: [
|
|
5148
|
-
/* @__PURE__ */
|
|
5149
|
-
/* @__PURE__ */
|
|
5258
|
+
/* @__PURE__ */ jsx61("span", { className: "ss-w-dq-score-val", children: result.score }),
|
|
5259
|
+
/* @__PURE__ */ jsx61("span", { className: "ss-w-dq-score-label", children: "pts" })
|
|
5150
5260
|
] }),
|
|
5151
|
-
!isRevealed && /* @__PURE__ */
|
|
5261
|
+
!isRevealed && /* @__PURE__ */ jsx61("div", { className: "ss-w-dq-prog", children: /* @__PURE__ */ jsx61(
|
|
5152
5262
|
"div",
|
|
5153
5263
|
{
|
|
5154
5264
|
className: "ss-w-dq-prog-fill",
|
|
5155
5265
|
style: { width: `${Math.round(selections.size / config.questions.length * 100)}%` }
|
|
5156
5266
|
}
|
|
5157
5267
|
) }),
|
|
5158
|
-
/* @__PURE__ */
|
|
5268
|
+
/* @__PURE__ */ jsx61("div", { className: "ss-w-dq-questions", children: config.questions.map((q) => {
|
|
5159
5269
|
const qResult = clientState ? findResult(clientState.results, q.index) : void 0;
|
|
5160
5270
|
const selectedIdx = selections.get(q.index);
|
|
5161
5271
|
return /* @__PURE__ */ jsxs54("div", { className: "ss-w-dq-q", children: [
|
|
5162
|
-
/* @__PURE__ */
|
|
5163
|
-
/* @__PURE__ */
|
|
5272
|
+
/* @__PURE__ */ jsx61("div", { className: "ss-w-dq-qstem", children: q.stem }),
|
|
5273
|
+
/* @__PURE__ */ jsx61("div", { className: "ss-w-dq-opts", children: q.options.map((opt, optIdx) => {
|
|
5164
5274
|
let optCls = "ss-w-dq-qopt";
|
|
5165
5275
|
if (qResult) {
|
|
5166
5276
|
if (optIdx === qResult.correctOptionIndex) {
|
|
@@ -5179,17 +5289,17 @@ function DailyQuizGame({
|
|
|
5179
5289
|
disabled: isRevealed || submitting,
|
|
5180
5290
|
onClick: () => handleSelect(q.index, optIdx),
|
|
5181
5291
|
children: [
|
|
5182
|
-
/* @__PURE__ */
|
|
5183
|
-
/* @__PURE__ */
|
|
5292
|
+
/* @__PURE__ */ jsx61("span", { className: "ss-w-dq-qopt-letter", children: String.fromCharCode(65 + optIdx) }),
|
|
5293
|
+
/* @__PURE__ */ jsx61("span", { className: "ss-w-dq-qopt-text", children: opt })
|
|
5184
5294
|
]
|
|
5185
5295
|
},
|
|
5186
5296
|
optIdx
|
|
5187
5297
|
);
|
|
5188
5298
|
}) }),
|
|
5189
|
-
qResult?.revealText && /* @__PURE__ */
|
|
5299
|
+
qResult?.revealText && /* @__PURE__ */ jsx61("div", { className: `ss-w-dq-qwhy ss-w-dq-qwhy--${qResult.isCorrect ? "correct" : "wrong"}`, children: qResult.revealText })
|
|
5190
5300
|
] }, q.index);
|
|
5191
5301
|
}) }),
|
|
5192
|
-
!isRevealed && /* @__PURE__ */
|
|
5302
|
+
!isRevealed && /* @__PURE__ */ jsx61(
|
|
5193
5303
|
"button",
|
|
5194
5304
|
{
|
|
5195
5305
|
type: "button",
|
|
@@ -5205,8 +5315,8 @@ function DailyQuizGame({
|
|
|
5205
5315
|
}
|
|
5206
5316
|
|
|
5207
5317
|
// src/components/games/MatchdayPredictorGame.tsx
|
|
5208
|
-
import { useState as
|
|
5209
|
-
import { jsx as
|
|
5318
|
+
import { useState as useState29 } from "react";
|
|
5319
|
+
import { jsx as jsx62, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
5210
5320
|
function parseClientState7(json) {
|
|
5211
5321
|
if (!json) return null;
|
|
5212
5322
|
try {
|
|
@@ -5228,9 +5338,9 @@ function MatchdayPredictorGame({
|
|
|
5228
5338
|
submitting,
|
|
5229
5339
|
onSubmit
|
|
5230
5340
|
}) {
|
|
5231
|
-
const [homeScore, setHomeScore] =
|
|
5232
|
-
const [awayScore, setAwayScore] =
|
|
5233
|
-
const [firstScorerPlayerId, setFirstScorerPlayerId] =
|
|
5341
|
+
const [homeScore, setHomeScore] = useState29(0);
|
|
5342
|
+
const [awayScore, setAwayScore] = useState29(0);
|
|
5343
|
+
const [firstScorerPlayerId, setFirstScorerPlayerId] = useState29(null);
|
|
5234
5344
|
const clientState = parseClientState7(result?.clientStateJson);
|
|
5235
5345
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
5236
5346
|
if (alreadyPlayed && clientState) {
|
|
@@ -5242,28 +5352,28 @@ function MatchdayPredictorGame({
|
|
|
5242
5352
|
" \u2013 ",
|
|
5243
5353
|
clientState.predictedAwayScore
|
|
5244
5354
|
] }),
|
|
5245
|
-
/* @__PURE__ */
|
|
5355
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-live-label", children: "Locked in \u2014 awaiting result" })
|
|
5246
5356
|
] }),
|
|
5247
|
-
/* @__PURE__ */
|
|
5357
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-fun", children: "For fun \u2014 not in the leaderboard" })
|
|
5248
5358
|
] });
|
|
5249
5359
|
}
|
|
5250
5360
|
const r = clientState.result;
|
|
5251
5361
|
const actualScore = `${r.homeScore} \u2013 ${r.awayScore}`;
|
|
5252
5362
|
return /* @__PURE__ */ jsxs55("div", { className: "ss-w-mp", "data-testid": "game-screen-matchday-predictor", children: [
|
|
5253
5363
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-live", children: [
|
|
5254
|
-
/* @__PURE__ */
|
|
5255
|
-
/* @__PURE__ */
|
|
5364
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-live-score", children: actualScore }),
|
|
5365
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-live-label", children: "Full-time result" }),
|
|
5256
5366
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-live-outcome", children: [
|
|
5257
5367
|
/* @__PURE__ */ jsxs55("div", { className: `ss-w-mp-live-row${clientState.exactScoreCorrect ? " ss-w-mp-live-row--correct" : ""}`, children: [
|
|
5258
|
-
/* @__PURE__ */
|
|
5259
|
-
/* @__PURE__ */
|
|
5368
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-live-row-key", children: "Exact score" }),
|
|
5369
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-live-row-val", children: clientState.exactScoreCorrect ? "\u2713" : "\u2717" })
|
|
5260
5370
|
] }),
|
|
5261
5371
|
/* @__PURE__ */ jsxs55("div", { className: `ss-w-mp-live-row${clientState.outcomeCorrect ? " ss-w-mp-live-row--correct" : ""}`, children: [
|
|
5262
|
-
/* @__PURE__ */
|
|
5263
|
-
/* @__PURE__ */
|
|
5372
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-live-row-key", children: "Result (W/D/L)" }),
|
|
5373
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-live-row-val", children: clientState.outcomeCorrect ? "\u2713" : "\u2717" })
|
|
5264
5374
|
] }),
|
|
5265
5375
|
!clientState.firstScorerVoid && /* @__PURE__ */ jsxs55("div", { className: `ss-w-mp-live-row${clientState.firstScorerCorrect ? " ss-w-mp-live-row--correct" : ""}`, children: [
|
|
5266
|
-
/* @__PURE__ */
|
|
5376
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-live-row-key", children: "First scorer" }),
|
|
5267
5377
|
/* @__PURE__ */ jsxs55("span", { className: "ss-w-mp-live-row-val", children: [
|
|
5268
5378
|
clientState.firstScorerCorrect ? "\u2713" : "\u2717",
|
|
5269
5379
|
r.firstScorerName ? ` ${r.firstScorerName}` : ""
|
|
@@ -5271,11 +5381,11 @@ function MatchdayPredictorGame({
|
|
|
5271
5381
|
] })
|
|
5272
5382
|
] })
|
|
5273
5383
|
] }),
|
|
5274
|
-
/* @__PURE__ */
|
|
5384
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-fun", children: "For fun \u2014 not in the leaderboard" })
|
|
5275
5385
|
] });
|
|
5276
5386
|
}
|
|
5277
5387
|
if (!config) {
|
|
5278
|
-
return /* @__PURE__ */
|
|
5388
|
+
return /* @__PURE__ */ jsx62("div", { className: "ss-w-mp", "data-testid": "game-screen-matchday-predictor", children: /* @__PURE__ */ jsx62("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }) });
|
|
5279
5389
|
}
|
|
5280
5390
|
const locked = isLocked(config.kickoffUtc);
|
|
5281
5391
|
const disabled = locked || submitting;
|
|
@@ -5292,9 +5402,9 @@ function MatchdayPredictorGame({
|
|
|
5292
5402
|
return /* @__PURE__ */ jsxs55("div", { className: "ss-w-mp", "data-testid": "game-screen-matchday-predictor", children: [
|
|
5293
5403
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-pred-score", children: [
|
|
5294
5404
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-team", children: [
|
|
5295
|
-
/* @__PURE__ */
|
|
5405
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-team-name", children: config.homeTeam.name }),
|
|
5296
5406
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-stepper", children: [
|
|
5297
|
-
/* @__PURE__ */
|
|
5407
|
+
/* @__PURE__ */ jsx62(
|
|
5298
5408
|
"button",
|
|
5299
5409
|
{
|
|
5300
5410
|
type: "button",
|
|
@@ -5305,8 +5415,8 @@ function MatchdayPredictorGame({
|
|
|
5305
5415
|
children: "\u2212"
|
|
5306
5416
|
}
|
|
5307
5417
|
),
|
|
5308
|
-
/* @__PURE__ */
|
|
5309
|
-
/* @__PURE__ */
|
|
5418
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-stepper-val", children: homeScore }),
|
|
5419
|
+
/* @__PURE__ */ jsx62(
|
|
5310
5420
|
"button",
|
|
5311
5421
|
{
|
|
5312
5422
|
type: "button",
|
|
@@ -5319,11 +5429,11 @@ function MatchdayPredictorGame({
|
|
|
5319
5429
|
)
|
|
5320
5430
|
] })
|
|
5321
5431
|
] }),
|
|
5322
|
-
/* @__PURE__ */
|
|
5432
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-sep", children: "\u2013" }),
|
|
5323
5433
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-team", children: [
|
|
5324
|
-
/* @__PURE__ */
|
|
5434
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-team-name", children: config.awayTeam.name }),
|
|
5325
5435
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-stepper", children: [
|
|
5326
|
-
/* @__PURE__ */
|
|
5436
|
+
/* @__PURE__ */ jsx62(
|
|
5327
5437
|
"button",
|
|
5328
5438
|
{
|
|
5329
5439
|
type: "button",
|
|
@@ -5334,8 +5444,8 @@ function MatchdayPredictorGame({
|
|
|
5334
5444
|
children: "\u2212"
|
|
5335
5445
|
}
|
|
5336
5446
|
),
|
|
5337
|
-
/* @__PURE__ */
|
|
5338
|
-
/* @__PURE__ */
|
|
5447
|
+
/* @__PURE__ */ jsx62("span", { className: "ss-w-mp-stepper-val", children: awayScore }),
|
|
5448
|
+
/* @__PURE__ */ jsx62(
|
|
5339
5449
|
"button",
|
|
5340
5450
|
{
|
|
5341
5451
|
type: "button",
|
|
@@ -5350,8 +5460,8 @@ function MatchdayPredictorGame({
|
|
|
5350
5460
|
] })
|
|
5351
5461
|
] }),
|
|
5352
5462
|
config.scorerPool.length > 0 && /* @__PURE__ */ jsxs55("div", { className: "ss-w-mp-scorer", children: [
|
|
5353
|
-
/* @__PURE__ */
|
|
5354
|
-
/* @__PURE__ */
|
|
5463
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-scorer-label", children: "First scorer (optional)" }),
|
|
5464
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-scorer-list", children: config.scorerPool.map((p) => /* @__PURE__ */ jsx62(
|
|
5355
5465
|
"button",
|
|
5356
5466
|
{
|
|
5357
5467
|
type: "button",
|
|
@@ -5363,8 +5473,8 @@ function MatchdayPredictorGame({
|
|
|
5363
5473
|
p.playerId
|
|
5364
5474
|
)) })
|
|
5365
5475
|
] }),
|
|
5366
|
-
locked && /* @__PURE__ */
|
|
5367
|
-
/* @__PURE__ */
|
|
5476
|
+
locked && /* @__PURE__ */ jsx62("div", { className: "ss-w-mp-live-label", children: "Submissions are now closed" }),
|
|
5477
|
+
/* @__PURE__ */ jsx62(
|
|
5368
5478
|
"button",
|
|
5369
5479
|
{
|
|
5370
5480
|
type: "button",
|
|
@@ -5375,13 +5485,13 @@ function MatchdayPredictorGame({
|
|
|
5375
5485
|
children: submitting ? "Saving\u2026" : "Save prediction"
|
|
5376
5486
|
}
|
|
5377
5487
|
),
|
|
5378
|
-
/* @__PURE__ */
|
|
5488
|
+
/* @__PURE__ */ jsx62("div", { className: "ss-w-mp-fun", children: "For fun \u2014 not in the leaderboard" })
|
|
5379
5489
|
] });
|
|
5380
5490
|
}
|
|
5381
5491
|
|
|
5382
5492
|
// src/components/games/StartingXiGame.tsx
|
|
5383
|
-
import { useState as
|
|
5384
|
-
import { jsx as
|
|
5493
|
+
import { useState as useState30 } from "react";
|
|
5494
|
+
import { jsx as jsx63, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
5385
5495
|
function parseClientState8(json) {
|
|
5386
5496
|
if (!json) return null;
|
|
5387
5497
|
try {
|
|
@@ -5401,23 +5511,23 @@ function StartingXiGame({
|
|
|
5401
5511
|
submitting,
|
|
5402
5512
|
onSubmit
|
|
5403
5513
|
}) {
|
|
5404
|
-
const [picked, setPicked] =
|
|
5514
|
+
const [picked, setPicked] = useState30([]);
|
|
5405
5515
|
const clientState = parseClientState8(result?.clientStateJson);
|
|
5406
5516
|
const alreadyPlayed = result?.alreadyPlayed === true;
|
|
5407
5517
|
if (alreadyPlayed) {
|
|
5408
5518
|
if (!clientState) {
|
|
5409
|
-
return /* @__PURE__ */
|
|
5519
|
+
return /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi", "data-testid": "game-screen-starting-xi", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-status", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-status-label", children: "This game has been voided" }) }) });
|
|
5410
5520
|
}
|
|
5411
5521
|
if (clientState.status === "pending") {
|
|
5412
|
-
return /* @__PURE__ */
|
|
5522
|
+
return /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi", "data-testid": "game-screen-starting-xi", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-status", children: /* @__PURE__ */ jsxs56("div", { className: "ss-w-sxi-status-label", children: [
|
|
5413
5523
|
"Prediction locked in (",
|
|
5414
5524
|
clientState.predictedCount,
|
|
5415
5525
|
" players) \u2014 awaiting result"
|
|
5416
5526
|
] }) }) });
|
|
5417
5527
|
}
|
|
5418
5528
|
if (clientState.status === "graded") {
|
|
5419
|
-
return /* @__PURE__ */
|
|
5420
|
-
/* @__PURE__ */
|
|
5529
|
+
return /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi", "data-testid": "game-screen-starting-xi", children: /* @__PURE__ */ jsxs56("div", { className: "ss-w-sxi-status ss-w-sxi-status--graded", children: [
|
|
5530
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-status-score", children: clientState.score }),
|
|
5421
5531
|
/* @__PURE__ */ jsxs56("div", { className: "ss-w-sxi-status-label", children: [
|
|
5422
5532
|
clientState.correctCount,
|
|
5423
5533
|
" correct starters"
|
|
@@ -5426,7 +5536,7 @@ function StartingXiGame({
|
|
|
5426
5536
|
}
|
|
5427
5537
|
}
|
|
5428
5538
|
if (!config) {
|
|
5429
|
-
return /* @__PURE__ */
|
|
5539
|
+
return /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi", "data-testid": "game-screen-starting-xi", children: /* @__PURE__ */ jsx63("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }) });
|
|
5430
5540
|
}
|
|
5431
5541
|
const formationRows = parseFormationRows(config.formation);
|
|
5432
5542
|
const pickedSet = new Set(picked);
|
|
@@ -5452,8 +5562,8 @@ function StartingXiGame({
|
|
|
5452
5562
|
return { rowIdx, count, rowSlots };
|
|
5453
5563
|
});
|
|
5454
5564
|
return /* @__PURE__ */ jsxs56("div", { className: "ss-w-sxi", "data-testid": "game-screen-starting-xi", children: [
|
|
5455
|
-
/* @__PURE__ */
|
|
5456
|
-
/* @__PURE__ */
|
|
5565
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-formation", children: config.formation }),
|
|
5566
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-pitch", children: pitchRows.map(({ rowIdx, count, rowSlots }) => /* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-pitch-row", children: Array.from({ length: count }).map((_, i) => {
|
|
5457
5567
|
const playerId = rowSlots[i];
|
|
5458
5568
|
const player = playerId != null ? config.squadSheet.find((p) => p.playerId === playerId) : void 0;
|
|
5459
5569
|
return /* @__PURE__ */ jsxs56(
|
|
@@ -5470,14 +5580,14 @@ function StartingXiGame({
|
|
|
5470
5580
|
role: player ? "button" : void 0,
|
|
5471
5581
|
"aria-label": player ? `Remove ${player.playerName ?? ""}` : void 0,
|
|
5472
5582
|
children: [
|
|
5473
|
-
/* @__PURE__ */
|
|
5474
|
-
/* @__PURE__ */
|
|
5583
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-pslot-num", children: player?.jerseyNumber ?? (rowIdx === 0 ? "GK" : "?") }),
|
|
5584
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-pslot-name", children: player?.playerName ?? "" })
|
|
5475
5585
|
]
|
|
5476
5586
|
},
|
|
5477
5587
|
i
|
|
5478
5588
|
);
|
|
5479
5589
|
}) }, rowIdx)) }),
|
|
5480
|
-
/* @__PURE__ */
|
|
5590
|
+
/* @__PURE__ */ jsx63("div", { className: "ss-w-sxi-squad", children: config.squadSheet.map((p) => {
|
|
5481
5591
|
const isPicked = pickedSet.has(p.playerId);
|
|
5482
5592
|
return /* @__PURE__ */ jsxs56(
|
|
5483
5593
|
"div",
|
|
@@ -5491,14 +5601,14 @@ function StartingXiGame({
|
|
|
5491
5601
|
role: "button",
|
|
5492
5602
|
"aria-pressed": isPicked,
|
|
5493
5603
|
children: [
|
|
5494
|
-
/* @__PURE__ */
|
|
5495
|
-
/* @__PURE__ */
|
|
5604
|
+
/* @__PURE__ */ jsx63("span", { className: "ss-w-sxi-squad-name", children: p.playerName }),
|
|
5605
|
+
/* @__PURE__ */ jsx63("span", { className: "ss-w-sxi-squad-pos", children: p.positionName })
|
|
5496
5606
|
]
|
|
5497
5607
|
},
|
|
5498
5608
|
p.playerId
|
|
5499
5609
|
);
|
|
5500
5610
|
}) }),
|
|
5501
|
-
/* @__PURE__ */
|
|
5611
|
+
/* @__PURE__ */ jsx63(
|
|
5502
5612
|
"button",
|
|
5503
5613
|
{
|
|
5504
5614
|
type: "button",
|
|
@@ -5513,7 +5623,7 @@ function StartingXiGame({
|
|
|
5513
5623
|
}
|
|
5514
5624
|
|
|
5515
5625
|
// src/components/games/StatLadderGame.tsx
|
|
5516
|
-
import { jsx as
|
|
5626
|
+
import { jsx as jsx64, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
5517
5627
|
function parseClientState9(json) {
|
|
5518
5628
|
if (!json) return null;
|
|
5519
5629
|
try {
|
|
@@ -5531,12 +5641,12 @@ function StatLadderGame({
|
|
|
5531
5641
|
const clientState = parseClientState9(result?.clientStateJson);
|
|
5532
5642
|
const revealed = clientState != null;
|
|
5533
5643
|
if (!config) {
|
|
5534
|
-
return /* @__PURE__ */
|
|
5644
|
+
return /* @__PURE__ */ jsx64("div", { className: "ss-w-sl", "data-testid": "game-screen-stat-ladder", children: /* @__PURE__ */ jsx64("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }) });
|
|
5535
5645
|
}
|
|
5536
5646
|
const mysteryName = revealed ? clientState.revealedRank2.playerName : null;
|
|
5537
5647
|
return /* @__PURE__ */ jsxs57("div", { className: "ss-w-sl", "data-testid": "game-screen-stat-ladder", children: [
|
|
5538
|
-
/* @__PURE__ */
|
|
5539
|
-
/* @__PURE__ */
|
|
5648
|
+
/* @__PURE__ */ jsx64("div", { className: "ss-w-sl-title", children: config.statLabel }),
|
|
5649
|
+
/* @__PURE__ */ jsx64("div", { className: "ss-w-sl-ladder", children: config.ladder.map((rung) => {
|
|
5540
5650
|
const isMystery = rung.rank === 2;
|
|
5541
5651
|
let rowCls = "ss-w-sl-lrow";
|
|
5542
5652
|
if (isMystery) rowCls += " ss-w-sl-mystery";
|
|
@@ -5550,12 +5660,12 @@ function StatLadderGame({
|
|
|
5550
5660
|
"#",
|
|
5551
5661
|
rung.rank
|
|
5552
5662
|
] }),
|
|
5553
|
-
/* @__PURE__ */
|
|
5554
|
-
/* @__PURE__ */
|
|
5663
|
+
/* @__PURE__ */ jsx64("div", { className: "ss-w-sl-lrow-name", children: displayName }),
|
|
5664
|
+
/* @__PURE__ */ jsx64("div", { className: "ss-w-sl-lrow-stat", children: rung.statValue })
|
|
5555
5665
|
] }, rung.rank);
|
|
5556
5666
|
}) }),
|
|
5557
|
-
revealed && /* @__PURE__ */
|
|
5558
|
-
!revealed && /* @__PURE__ */
|
|
5667
|
+
revealed && /* @__PURE__ */ jsx64("div", { className: `ss-w-sl-reveal ss-w-sl-reveal--${clientState.isCorrect ? "correct" : "wrong"}`, children: clientState.isCorrect ? "Correct!" : `Wrong \u2014 it was ${clientState.revealedRank2.playerName}` }),
|
|
5668
|
+
!revealed && /* @__PURE__ */ jsx64("div", { className: "ss-w-sl-picker", children: config.playerPool.map((p) => /* @__PURE__ */ jsx64(
|
|
5559
5669
|
"button",
|
|
5560
5670
|
{
|
|
5561
5671
|
type: "button",
|
|
@@ -5571,7 +5681,7 @@ function StatLadderGame({
|
|
|
5571
5681
|
}
|
|
5572
5682
|
|
|
5573
5683
|
// src/components/games/FanMotmGame.tsx
|
|
5574
|
-
import { jsx as
|
|
5684
|
+
import { jsx as jsx65, jsxs as jsxs58 } from "react/jsx-runtime";
|
|
5575
5685
|
function parseClientState10(json) {
|
|
5576
5686
|
if (!json) return null;
|
|
5577
5687
|
try {
|
|
@@ -5589,7 +5699,7 @@ function FanMotmGame({
|
|
|
5589
5699
|
const clientState = parseClientState10(result?.clientStateJson);
|
|
5590
5700
|
const alreadyVoted = result?.alreadyPlayed === true;
|
|
5591
5701
|
if (!config) {
|
|
5592
|
-
return /* @__PURE__ */
|
|
5702
|
+
return /* @__PURE__ */ jsx65("div", { className: "ss-w-motm", "data-testid": "game-screen-fan-motm", children: /* @__PURE__ */ jsx65("div", { className: "ss-w-gscreen-body", children: "Loading\u2026" }) });
|
|
5593
5703
|
}
|
|
5594
5704
|
const pickedId = clientState?.pickedPlayerId ?? null;
|
|
5595
5705
|
function handleVote(candidateId) {
|
|
@@ -5597,8 +5707,8 @@ function FanMotmGame({
|
|
|
5597
5707
|
onSubmit(JSON.stringify({ pickedPlayerId: candidateId }));
|
|
5598
5708
|
}
|
|
5599
5709
|
return /* @__PURE__ */ jsxs58("div", { className: "ss-w-motm", "data-testid": "game-screen-fan-motm", children: [
|
|
5600
|
-
/* @__PURE__ */
|
|
5601
|
-
/* @__PURE__ */
|
|
5710
|
+
/* @__PURE__ */ jsx65("div", { className: "ss-w-motm-title", children: "Man of the Match \u2014 your vote" }),
|
|
5711
|
+
/* @__PURE__ */ jsx65("div", { className: "ss-w-motm-votes", children: config.candidates.map((c) => {
|
|
5602
5712
|
const isVoted = alreadyVoted && pickedId === c.playerId;
|
|
5603
5713
|
const rowCls = `ss-w-motm-vrow${isVoted ? " ss-w-motm-vrow--voted" : ""}${alreadyVoted ? " ss-w-motm-vrow--result" : ""}`;
|
|
5604
5714
|
return /* @__PURE__ */ jsxs58(
|
|
@@ -5610,19 +5720,19 @@ function FanMotmGame({
|
|
|
5610
5720
|
disabled: alreadyVoted || submitting,
|
|
5611
5721
|
onClick: () => handleVote(c.playerId),
|
|
5612
5722
|
children: [
|
|
5613
|
-
/* @__PURE__ */
|
|
5614
|
-
/* @__PURE__ */
|
|
5723
|
+
/* @__PURE__ */ jsx65("div", { className: "ss-w-motm-vfill", style: { width: isVoted ? "100%" : "0%" } }),
|
|
5724
|
+
/* @__PURE__ */ jsx65("span", { className: "ss-w-motm-vrow-name", children: c.playerName })
|
|
5615
5725
|
]
|
|
5616
5726
|
},
|
|
5617
5727
|
c.playerId
|
|
5618
5728
|
);
|
|
5619
5729
|
}) }),
|
|
5620
|
-
/* @__PURE__ */
|
|
5730
|
+
/* @__PURE__ */ jsx65("div", { className: "ss-w-motm-fun", children: "For fun \u2014 unranked community vote" })
|
|
5621
5731
|
] });
|
|
5622
5732
|
}
|
|
5623
5733
|
|
|
5624
5734
|
// src/components/GameScreenHost.tsx
|
|
5625
|
-
import { jsx as
|
|
5735
|
+
import { jsx as jsx66, jsxs as jsxs59 } from "react/jsx-runtime";
|
|
5626
5736
|
var FIXTURE_GAME_IDS = /* @__PURE__ */ new Set([
|
|
5627
5737
|
"matchday-predictor",
|
|
5628
5738
|
"starting-xi",
|
|
@@ -5645,7 +5755,7 @@ function GameScreenHost({
|
|
|
5645
5755
|
ui
|
|
5646
5756
|
}) {
|
|
5647
5757
|
const { gameId, fixtureId, gameDay = "" } = selected;
|
|
5648
|
-
const [configJson, setConfigJson] =
|
|
5758
|
+
const [configJson, setConfigJson] = useState31(null);
|
|
5649
5759
|
useEffect13(() => {
|
|
5650
5760
|
setConfigJson(null);
|
|
5651
5761
|
if (!conversation) return;
|
|
@@ -5690,7 +5800,7 @@ function GameScreenHost({
|
|
|
5690
5800
|
function renderScreen() {
|
|
5691
5801
|
switch (gameId) {
|
|
5692
5802
|
case "mystery-tiger":
|
|
5693
|
-
return /* @__PURE__ */
|
|
5803
|
+
return /* @__PURE__ */ jsx66(
|
|
5694
5804
|
MysteryTigerGame,
|
|
5695
5805
|
{
|
|
5696
5806
|
...sharedProps,
|
|
@@ -5698,7 +5808,7 @@ function GameScreenHost({
|
|
|
5698
5808
|
}
|
|
5699
5809
|
);
|
|
5700
5810
|
case "higher-or-lower":
|
|
5701
|
-
return /* @__PURE__ */
|
|
5811
|
+
return /* @__PURE__ */ jsx66(
|
|
5702
5812
|
HigherOrLowerGame,
|
|
5703
5813
|
{
|
|
5704
5814
|
...sharedProps,
|
|
@@ -5706,7 +5816,7 @@ function GameScreenHost({
|
|
|
5706
5816
|
}
|
|
5707
5817
|
);
|
|
5708
5818
|
case "career-path":
|
|
5709
|
-
return /* @__PURE__ */
|
|
5819
|
+
return /* @__PURE__ */ jsx66(
|
|
5710
5820
|
CareerPathGame,
|
|
5711
5821
|
{
|
|
5712
5822
|
...sharedProps,
|
|
@@ -5715,7 +5825,7 @@ function GameScreenHost({
|
|
|
5715
5825
|
);
|
|
5716
5826
|
case "beat-the-grid": {
|
|
5717
5827
|
const btgConfig = safeParseConfig(configJson);
|
|
5718
|
-
return /* @__PURE__ */
|
|
5828
|
+
return /* @__PURE__ */ jsx66(
|
|
5719
5829
|
BeatTheGridGame,
|
|
5720
5830
|
{
|
|
5721
5831
|
...sharedProps,
|
|
@@ -5725,7 +5835,7 @@ function GameScreenHost({
|
|
|
5725
5835
|
);
|
|
5726
5836
|
}
|
|
5727
5837
|
case "guess-the-xi":
|
|
5728
|
-
return /* @__PURE__ */
|
|
5838
|
+
return /* @__PURE__ */ jsx66(
|
|
5729
5839
|
GuessTheXiGame,
|
|
5730
5840
|
{
|
|
5731
5841
|
...sharedProps,
|
|
@@ -5733,7 +5843,7 @@ function GameScreenHost({
|
|
|
5733
5843
|
}
|
|
5734
5844
|
);
|
|
5735
5845
|
case "daily-quiz":
|
|
5736
|
-
return /* @__PURE__ */
|
|
5846
|
+
return /* @__PURE__ */ jsx66(
|
|
5737
5847
|
DailyQuizGame,
|
|
5738
5848
|
{
|
|
5739
5849
|
...sharedProps,
|
|
@@ -5741,7 +5851,7 @@ function GameScreenHost({
|
|
|
5741
5851
|
}
|
|
5742
5852
|
);
|
|
5743
5853
|
case "matchday-predictor":
|
|
5744
|
-
return /* @__PURE__ */
|
|
5854
|
+
return /* @__PURE__ */ jsx66(
|
|
5745
5855
|
MatchdayPredictorGame,
|
|
5746
5856
|
{
|
|
5747
5857
|
...sharedProps,
|
|
@@ -5749,7 +5859,7 @@ function GameScreenHost({
|
|
|
5749
5859
|
}
|
|
5750
5860
|
);
|
|
5751
5861
|
case "starting-xi":
|
|
5752
|
-
return /* @__PURE__ */
|
|
5862
|
+
return /* @__PURE__ */ jsx66(
|
|
5753
5863
|
StartingXiGame,
|
|
5754
5864
|
{
|
|
5755
5865
|
...sharedProps,
|
|
@@ -5757,7 +5867,7 @@ function GameScreenHost({
|
|
|
5757
5867
|
}
|
|
5758
5868
|
);
|
|
5759
5869
|
case "stat-ladder":
|
|
5760
|
-
return /* @__PURE__ */
|
|
5870
|
+
return /* @__PURE__ */ jsx66(
|
|
5761
5871
|
StatLadderGame,
|
|
5762
5872
|
{
|
|
5763
5873
|
...sharedProps,
|
|
@@ -5765,7 +5875,7 @@ function GameScreenHost({
|
|
|
5765
5875
|
}
|
|
5766
5876
|
);
|
|
5767
5877
|
case "fan-motm":
|
|
5768
|
-
return /* @__PURE__ */
|
|
5878
|
+
return /* @__PURE__ */ jsx66(
|
|
5769
5879
|
FanMotmGame,
|
|
5770
5880
|
{
|
|
5771
5881
|
...sharedProps,
|
|
@@ -5773,12 +5883,12 @@ function GameScreenHost({
|
|
|
5773
5883
|
}
|
|
5774
5884
|
);
|
|
5775
5885
|
default:
|
|
5776
|
-
return /* @__PURE__ */
|
|
5886
|
+
return /* @__PURE__ */ jsx66("div", { className: "ss-w-gscreen-body", "data-testid": `game-screen-${gameId}`, children: gameId });
|
|
5777
5887
|
}
|
|
5778
5888
|
}
|
|
5779
5889
|
return /* @__PURE__ */ jsxs59("div", { className: "ss-w-gscreen", children: [
|
|
5780
5890
|
/* @__PURE__ */ jsxs59("button", { type: "button", className: "ss-w-gscreen-back", onClick: onBack, children: [
|
|
5781
|
-
/* @__PURE__ */
|
|
5891
|
+
/* @__PURE__ */ jsx66("span", { className: "ss-w-gscreen-back-arrow", "aria-hidden": "true", children: "\u2039" }),
|
|
5782
5892
|
ui.back
|
|
5783
5893
|
] }),
|
|
5784
5894
|
renderScreen()
|
|
@@ -5786,17 +5896,17 @@ function GameScreenHost({
|
|
|
5786
5896
|
}
|
|
5787
5897
|
|
|
5788
5898
|
// src/components/GamesPanel.tsx
|
|
5789
|
-
import { jsx as
|
|
5899
|
+
import { jsx as jsx67 } from "react/jsx-runtime";
|
|
5790
5900
|
function GamesPanel({
|
|
5791
5901
|
loggedIn,
|
|
5792
5902
|
games,
|
|
5793
5903
|
ui,
|
|
5794
5904
|
conversation
|
|
5795
5905
|
}) {
|
|
5796
|
-
const [selected, setSelected] =
|
|
5797
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
5906
|
+
const [selected, setSelected] = useState32(null);
|
|
5907
|
+
if (!loggedIn) return /* @__PURE__ */ jsx67(GamesLoginWall, { ui });
|
|
5798
5908
|
if (selected !== null) {
|
|
5799
|
-
return /* @__PURE__ */
|
|
5909
|
+
return /* @__PURE__ */ jsx67("div", { className: "ss-w-gscreen-wrap", children: /* @__PURE__ */ jsx67(
|
|
5800
5910
|
GameScreenHost,
|
|
5801
5911
|
{
|
|
5802
5912
|
selected,
|
|
@@ -5806,7 +5916,7 @@ function GamesPanel({
|
|
|
5806
5916
|
}
|
|
5807
5917
|
) });
|
|
5808
5918
|
}
|
|
5809
|
-
return /* @__PURE__ */
|
|
5919
|
+
return /* @__PURE__ */ jsx67("div", { className: "ss-w-mon-list", "data-testid": "games-hub", children: /* @__PURE__ */ jsx67(
|
|
5810
5920
|
GamesHub,
|
|
5811
5921
|
{
|
|
5812
5922
|
games,
|
|
@@ -5817,10 +5927,10 @@ function GamesPanel({
|
|
|
5817
5927
|
}
|
|
5818
5928
|
|
|
5819
5929
|
// src/components/Leaderboard.tsx
|
|
5820
|
-
import { useState as
|
|
5930
|
+
import { useState as useState33 } from "react";
|
|
5821
5931
|
|
|
5822
5932
|
// src/components/LeaderboardRow.tsx
|
|
5823
|
-
import { jsx as
|
|
5933
|
+
import { jsx as jsx68, jsxs as jsxs60 } from "react/jsx-runtime";
|
|
5824
5934
|
function formatPoints(n) {
|
|
5825
5935
|
return n.toLocaleString("en");
|
|
5826
5936
|
}
|
|
@@ -5834,8 +5944,8 @@ function LeaderboardWeeklyRow({
|
|
|
5834
5944
|
"#",
|
|
5835
5945
|
row.rank
|
|
5836
5946
|
] }),
|
|
5837
|
-
/* @__PURE__ */
|
|
5838
|
-
/* @__PURE__ */
|
|
5947
|
+
/* @__PURE__ */ jsx68("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
5948
|
+
/* @__PURE__ */ jsx68("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
|
|
5839
5949
|
row.currentStreak > 0 && /* @__PURE__ */ jsxs60("span", { className: "ss-w-lb2-streak", children: [
|
|
5840
5950
|
"\u{1F525} ",
|
|
5841
5951
|
row.currentStreak
|
|
@@ -5852,13 +5962,13 @@ function LeaderboardAllTimeRow({
|
|
|
5852
5962
|
"#",
|
|
5853
5963
|
row.rank
|
|
5854
5964
|
] }),
|
|
5855
|
-
/* @__PURE__ */
|
|
5856
|
-
/* @__PURE__ */
|
|
5965
|
+
/* @__PURE__ */ jsx68("span", { className: "ss-w-lb2-handle", children: row.handle }),
|
|
5966
|
+
/* @__PURE__ */ jsx68("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
|
|
5857
5967
|
] });
|
|
5858
5968
|
}
|
|
5859
5969
|
|
|
5860
5970
|
// src/components/LeaderboardEmpty.tsx
|
|
5861
|
-
import { jsx as
|
|
5971
|
+
import { jsx as jsx69, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
5862
5972
|
function LeaderboardEmpty({
|
|
5863
5973
|
segment,
|
|
5864
5974
|
lastWeek,
|
|
@@ -5868,8 +5978,8 @@ function LeaderboardEmpty({
|
|
|
5868
5978
|
}) {
|
|
5869
5979
|
if (segment === "alltime") {
|
|
5870
5980
|
return /* @__PURE__ */ jsxs61("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
|
|
5871
|
-
/* @__PURE__ */
|
|
5872
|
-
/* @__PURE__ */
|
|
5981
|
+
/* @__PURE__ */ jsx69("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
|
|
5982
|
+
/* @__PURE__ */ jsx69("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
|
|
5873
5983
|
] });
|
|
5874
5984
|
}
|
|
5875
5985
|
const fresh = lastWeek != null;
|
|
@@ -5877,38 +5987,38 @@ function LeaderboardEmpty({
|
|
|
5877
5987
|
const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
|
|
5878
5988
|
return /* @__PURE__ */ jsxs61("div", { className: "ss-w-lb-empty", children: [
|
|
5879
5989
|
weeklyPrize && /* @__PURE__ */ jsxs61("div", { className: "ss-w-prize", children: [
|
|
5880
|
-
/* @__PURE__ */
|
|
5881
|
-
/* @__PURE__ */
|
|
5990
|
+
/* @__PURE__ */ jsx69("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
|
|
5991
|
+
/* @__PURE__ */ jsx69("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx69("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
|
|
5882
5992
|
] }),
|
|
5883
5993
|
/* @__PURE__ */ jsxs61("div", { className: "ss-w-lb-empty-hero", children: [
|
|
5884
|
-
/* @__PURE__ */
|
|
5885
|
-
/* @__PURE__ */
|
|
5886
|
-
/* @__PURE__ */
|
|
5887
|
-
onPlay && /* @__PURE__ */
|
|
5994
|
+
/* @__PURE__ */ jsx69("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
|
|
5995
|
+
/* @__PURE__ */ jsx69("h4", { className: "ss-w-lb-empty-title", children: title }),
|
|
5996
|
+
/* @__PURE__ */ jsx69("p", { className: "ss-w-lb-empty-body", children: body }),
|
|
5997
|
+
onPlay && /* @__PURE__ */ jsx69("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
|
|
5888
5998
|
] }),
|
|
5889
5999
|
fresh && lastWeek && /* @__PURE__ */ jsxs61("div", { className: "ss-w-lb-last", children: [
|
|
5890
|
-
/* @__PURE__ */
|
|
5891
|
-
/* @__PURE__ */
|
|
5892
|
-
/* @__PURE__ */
|
|
5893
|
-
/* @__PURE__ */
|
|
6000
|
+
/* @__PURE__ */ jsx69("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
|
|
6001
|
+
/* @__PURE__ */ jsx69("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
|
|
6002
|
+
/* @__PURE__ */ jsx69("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
|
|
6003
|
+
/* @__PURE__ */ jsx69("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
|
|
5894
6004
|
] })
|
|
5895
6005
|
] });
|
|
5896
6006
|
}
|
|
5897
6007
|
|
|
5898
6008
|
// src/components/Leaderboard.tsx
|
|
5899
|
-
import { Fragment as Fragment16, jsx as
|
|
6009
|
+
import { Fragment as Fragment16, jsx as jsx70, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
5900
6010
|
function Leaderboard({
|
|
5901
6011
|
data,
|
|
5902
6012
|
ui,
|
|
5903
6013
|
onPlay
|
|
5904
6014
|
}) {
|
|
5905
|
-
const [segment, setSegment] =
|
|
6015
|
+
const [segment, setSegment] = useState33("weekly");
|
|
5906
6016
|
const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
|
|
5907
6017
|
const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
|
|
5908
6018
|
const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
|
|
5909
6019
|
return /* @__PURE__ */ jsxs62("div", { className: "ss-w-lb2", children: [
|
|
5910
6020
|
/* @__PURE__ */ jsxs62("div", { className: "ss-w-seg", children: [
|
|
5911
|
-
/* @__PURE__ */
|
|
6021
|
+
/* @__PURE__ */ jsx70(
|
|
5912
6022
|
"button",
|
|
5913
6023
|
{
|
|
5914
6024
|
type: "button",
|
|
@@ -5918,7 +6028,7 @@ function Leaderboard({
|
|
|
5918
6028
|
children: ui.leaderboardThisWeek
|
|
5919
6029
|
}
|
|
5920
6030
|
),
|
|
5921
|
-
/* @__PURE__ */
|
|
6031
|
+
/* @__PURE__ */ jsx70(
|
|
5922
6032
|
"button",
|
|
5923
6033
|
{
|
|
5924
6034
|
type: "button",
|
|
@@ -5929,7 +6039,7 @@ function Leaderboard({
|
|
|
5929
6039
|
}
|
|
5930
6040
|
)
|
|
5931
6041
|
] }),
|
|
5932
|
-
isEmpty ? /* @__PURE__ */
|
|
6042
|
+
isEmpty ? /* @__PURE__ */ jsx70(
|
|
5933
6043
|
LeaderboardEmpty,
|
|
5934
6044
|
{
|
|
5935
6045
|
segment,
|
|
@@ -5939,14 +6049,14 @@ function Leaderboard({
|
|
|
5939
6049
|
ui
|
|
5940
6050
|
}
|
|
5941
6051
|
) : /* @__PURE__ */ jsxs62(Fragment16, { children: [
|
|
5942
|
-
/* @__PURE__ */
|
|
6052
|
+
/* @__PURE__ */ jsx70("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx70(
|
|
5943
6053
|
LeaderboardWeeklyRow,
|
|
5944
6054
|
{
|
|
5945
6055
|
row,
|
|
5946
6056
|
isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
|
|
5947
6057
|
},
|
|
5948
6058
|
row.operatorUserId
|
|
5949
|
-
)) : data.allTimeTop.map((row) => /* @__PURE__ */
|
|
6059
|
+
)) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx70(
|
|
5950
6060
|
LeaderboardAllTimeRow,
|
|
5951
6061
|
{
|
|
5952
6062
|
row,
|
|
@@ -5954,18 +6064,18 @@ function Leaderboard({
|
|
|
5954
6064
|
},
|
|
5955
6065
|
row.operatorUserId
|
|
5956
6066
|
)) }),
|
|
5957
|
-
/* @__PURE__ */
|
|
5958
|
-
myRow != null && (offBoard ? /* @__PURE__ */
|
|
5959
|
-
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */
|
|
5960
|
-
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */
|
|
6067
|
+
/* @__PURE__ */ jsx70("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
|
|
6068
|
+
myRow != null && (offBoard ? /* @__PURE__ */ jsx70("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs62("div", { className: "ss-w-lb2-rows", children: [
|
|
6069
|
+
segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx70(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
|
|
6070
|
+
segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx70(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
|
|
5961
6071
|
] })),
|
|
5962
|
-
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */
|
|
6072
|
+
segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx70("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx70("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx70("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
|
|
5963
6073
|
] })
|
|
5964
6074
|
] });
|
|
5965
6075
|
}
|
|
5966
6076
|
|
|
5967
6077
|
// src/components/LeaderboardPanel.tsx
|
|
5968
|
-
import { jsx as
|
|
6078
|
+
import { jsx as jsx71 } from "react/jsx-runtime";
|
|
5969
6079
|
var EMPTY_PAYLOAD = {
|
|
5970
6080
|
week: "",
|
|
5971
6081
|
weeklyTop: [],
|
|
@@ -5976,16 +6086,16 @@ var EMPTY_PAYLOAD = {
|
|
|
5976
6086
|
lastWeek: null
|
|
5977
6087
|
};
|
|
5978
6088
|
function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
|
|
5979
|
-
if (!loggedIn) return /* @__PURE__ */
|
|
5980
|
-
if (data === null && loading) return /* @__PURE__ */
|
|
5981
|
-
return /* @__PURE__ */
|
|
6089
|
+
if (!loggedIn) return /* @__PURE__ */ jsx71(GamesLoginWall, { ui });
|
|
6090
|
+
if (data === null && loading) return /* @__PURE__ */ jsx71("div", { className: "ss-w-mon-list" });
|
|
6091
|
+
return /* @__PURE__ */ jsx71("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx71(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
|
|
5982
6092
|
}
|
|
5983
6093
|
|
|
5984
6094
|
// src/components/ChatPanel.tsx
|
|
5985
|
-
import { jsx as
|
|
6095
|
+
import { jsx as jsx72, jsxs as jsxs63 } from "react/jsx-runtime";
|
|
5986
6096
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
5987
6097
|
function useIsModal() {
|
|
5988
|
-
const [modal, setModal] =
|
|
6098
|
+
const [modal, setModal] = useState34(false);
|
|
5989
6099
|
useEffect14(() => {
|
|
5990
6100
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
5991
6101
|
const mql = window.matchMedia(FULLSCREEN_QUERY);
|
|
@@ -6014,7 +6124,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
6014
6124
|
if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
|
|
6015
6125
|
}, [monitor, state.isStreaming, state.messages.length]);
|
|
6016
6126
|
return /* @__PURE__ */ jsxs63("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
6017
|
-
/* @__PURE__ */
|
|
6127
|
+
/* @__PURE__ */ jsx72(
|
|
6018
6128
|
ChatHeader,
|
|
6019
6129
|
{
|
|
6020
6130
|
onClose: close,
|
|
@@ -6027,7 +6137,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
6027
6137
|
moreOptionsLabel: ui.moreOptions
|
|
6028
6138
|
}
|
|
6029
6139
|
),
|
|
6030
|
-
monitor && /* @__PURE__ */
|
|
6140
|
+
monitor && /* @__PURE__ */ jsx72(
|
|
6031
6141
|
TabBar,
|
|
6032
6142
|
{
|
|
6033
6143
|
monitor,
|
|
@@ -6039,18 +6149,18 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
6039
6149
|
gamesEnabled: gamesResult?.enabled ?? false
|
|
6040
6150
|
}
|
|
6041
6151
|
),
|
|
6042
|
-
/* @__PURE__ */
|
|
6152
|
+
/* @__PURE__ */ jsx72(
|
|
6043
6153
|
"div",
|
|
6044
6154
|
{
|
|
6045
6155
|
style: !monitor || monitor.activeTab === "chat" ? { display: "contents" } : { position: "absolute", inset: 0, visibility: "hidden", display: "flex", flexDirection: "column" },
|
|
6046
|
-
children: /* @__PURE__ */
|
|
6156
|
+
children: /* @__PURE__ */ jsx72(MessageList, { controller, ui, slip, onDashboardTap, monitor })
|
|
6047
6157
|
}
|
|
6048
6158
|
),
|
|
6049
|
-
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */
|
|
6050
|
-
monitor && monitor.activeTab === "following" && /* @__PURE__ */
|
|
6051
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */
|
|
6052
|
-
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */
|
|
6053
|
-
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */
|
|
6159
|
+
monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx72(TodayPanel, { discovery, ui, monitor }),
|
|
6160
|
+
monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx72(MatchesPanel, { monitor, ui, slip }),
|
|
6161
|
+
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx72(OddsPanel, { monitor, ui, slip }),
|
|
6162
|
+
monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx72(GamesPanel, { loggedIn: !!loggedIn, games: gamesResult.games, ui, conversation }),
|
|
6163
|
+
monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ jsx72(
|
|
6054
6164
|
LeaderboardPanel,
|
|
6055
6165
|
{
|
|
6056
6166
|
loggedIn: !!loggedIn,
|
|
@@ -6060,7 +6170,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
6060
6170
|
ui
|
|
6061
6171
|
}
|
|
6062
6172
|
),
|
|
6063
|
-
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */
|
|
6173
|
+
(!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ jsx72(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: handleSend, onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
|
|
6064
6174
|
] });
|
|
6065
6175
|
}
|
|
6066
6176
|
|
|
@@ -7001,6 +7111,11 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
7001
7111
|
.ss-w-gt-key { white-space: nowrap; }
|
|
7002
7112
|
.ss-w-gt-key b { font-weight: 800; color: var(--ss-w-ink); }
|
|
7003
7113
|
.ss-w-gt-key-ok { color: var(--ss-w-correct) !important; }
|
|
7114
|
+
/* Legend colour swatches \u2014 green = exact match, amber = close (same broad line / confederation
|
|
7115
|
+
/ within tolerance). Mirrors .ss-w-gtile--exact / --near tile fills. */
|
|
7116
|
+
.ss-w-gt-sw { display: inline-block; width: 9px; height: 9px; border-radius: 3px; vertical-align: middle; }
|
|
7117
|
+
.ss-w-gt-sw--exact { background: var(--ss-w-correct); }
|
|
7118
|
+
.ss-w-gt-sw--near { background: var(--ss-w-accent); }
|
|
7004
7119
|
/* Higher or Lower terminal score unit. */
|
|
7005
7120
|
.ss-w-hl-over-unit { font-size: 14px; font-weight: 700; color: var(--ss-w-faint); }
|
|
7006
7121
|
.ss-w-gscreen-back { display: inline-flex; align-items: center; gap: 5px; background: none; border: none; color: var(--ss-w-accent); font: inherit; font-size: 13px; font-weight: 600; cursor: pointer; padding: 6px 0 10px; align-self: flex-start; }
|
|
@@ -7067,6 +7182,22 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
7067
7182
|
.ss-w-gt-title { font-size: 18px; font-weight: 800; text-transform: uppercase; letter-spacing: .02em; color: var(--ss-w-ink); line-height: 1; }
|
|
7068
7183
|
.ss-w-gt-sub { font-size: 11px; color: var(--ss-w-faint); margin-top: 4px; }
|
|
7069
7184
|
.ss-w-gt-left { margin-left: auto; flex: none; font-size: 11px; font-weight: 700; color: var(--ss-w-accent); background: color-mix(in srgb, var(--ss-w-accent) 11%, var(--ss-w-panel)); border: 1px solid color-mix(in srgb, var(--ss-w-accent) 22%, var(--ss-w-line)); border-radius: 999px; padding: 4px 10px; white-space: nowrap; }
|
|
7185
|
+
/* Hero card \u2014 portrait + the masked profile the fan is hunting on. On reveal the silhouette
|
|
7186
|
+
becomes the real photo (or initials) and the profile rows drop away. Fully token-driven. */
|
|
7187
|
+
.ss-w-gt-card { display: grid; grid-template-columns: 96px 1fr; gap: 12px; background: var(--ss-w-bubble); border: 1px solid var(--ss-w-line); border-radius: 14px; padding: 12px; }
|
|
7188
|
+
.ss-w-gt-card--reveal { grid-template-columns: 1fr; justify-items: center; }
|
|
7189
|
+
.ss-w-gt-sil { width: 96px; height: 118px; border-radius: 11px; overflow: hidden; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); display: grid; place-items: center; }
|
|
7190
|
+
.ss-w-gt-sil svg, .ss-w-gt-sil img { display: block; width: 100%; height: 100%; }
|
|
7191
|
+
.ss-w-gt-sil img { object-fit: cover; }
|
|
7192
|
+
.ss-w-gt-attrs { display: flex; flex-direction: column; justify-content: center; }
|
|
7193
|
+
.ss-w-gt-attr { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 2px; }
|
|
7194
|
+
.ss-w-gt-attr + .ss-w-gt-attr { border-top: 1px solid var(--ss-w-line); }
|
|
7195
|
+
.ss-w-gt-attr-k { color: var(--ss-w-faint); font-size: 12px; font-weight: 600; }
|
|
7196
|
+
.ss-w-gt-attr-v { color: var(--ss-w-faint); font-size: 13px; font-weight: 800; letter-spacing: .12em; }
|
|
7197
|
+
/* Progress dots \u2014 one per guess allowance; used guesses filled with the accent. */
|
|
7198
|
+
.ss-w-gt-dots { display: flex; gap: 7px; justify-content: center; }
|
|
7199
|
+
.ss-w-gt-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ss-w-wrong); }
|
|
7200
|
+
.ss-w-gt-dot--on { background: var(--ss-w-accent); }
|
|
7070
7201
|
/* Guess rows \u2014 one labelled block per guess */
|
|
7071
7202
|
.ss-w-gtrows { display: flex; flex-direction: column; gap: 8px; }
|
|
7072
7203
|
/* First-load legend (empty state) */
|
|
@@ -7104,13 +7235,19 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
7104
7235
|
/* Pair: player A | Higher/Lower | player B */
|
|
7105
7236
|
.ss-w-hlpair { display: grid; grid-template-columns: 1fr auto 1fr; gap: 8px; align-items: stretch; }
|
|
7106
7237
|
.ss-w-hlpc { background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-radius: 14px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; padding: 14px 6px; text-align: center; min-width: 0; }
|
|
7107
|
-
|
|
7238
|
+
/* Player photo (was a 42px ball emoji): fixed 60px circle on both cards so they stay identical
|
|
7239
|
+
regardless of name length. Falls back to initials when no photo URL is present. */
|
|
7240
|
+
.ss-w-hlpc-av { width: 60px; height: 60px; border-radius: 50%; overflow: hidden; background: var(--ss-w-bubble); border: 1px solid var(--ss-w-line); display: grid; place-items: center; flex: none; }
|
|
7241
|
+
.ss-w-hlpc-av img { width: 100%; height: 100%; object-fit: cover; display: block; }
|
|
7242
|
+
.ss-w-av-initials { font-size: 18px; font-weight: 800; color: var(--ss-w-faint); text-transform: uppercase; letter-spacing: .02em; }
|
|
7108
7243
|
.ss-w-hlpc-name { font-size: 12.5px; font-weight: 700; color: var(--ss-w-ink); line-height: 1.15; }
|
|
7109
7244
|
.ss-w-hlpc-stat { font-size: 8.5px; color: var(--ss-w-faint); text-transform: uppercase; letter-spacing: .04em; }
|
|
7110
7245
|
.ss-w-hlpc-val { font-size: 30px; font-weight: 800; color: var(--ss-w-accent); font-variant-numeric: tabular-nums; line-height: 1; }
|
|
7111
7246
|
.ss-w-hlpc-val--hidden { color: var(--ss-w-faint); }
|
|
7112
|
-
/* Higher / Lower \u2014 middle column
|
|
7113
|
-
|
|
7247
|
+
/* Higher / Lower \u2014 middle column. The pair grid stretches this column to the cards' height, so
|
|
7248
|
+
space-between pins Higher to the top and Lower to the bottom, with "or" centered between the
|
|
7249
|
+
two players. */
|
|
7250
|
+
.ss-w-hlbtns { display: flex; flex-direction: column; gap: 6px; justify-content: space-between; }
|
|
7114
7251
|
.ss-w-hl-or { text-align: center; font-size: 11px; font-weight: 700; color: var(--ss-w-faint); }
|
|
7115
7252
|
.ss-w-hlbtn { font: inherit; font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: .03em; border-radius: 9px; padding: 10px 12px; cursor: pointer; border: 1px solid var(--ss-w-line); white-space: nowrap; transition: border-color .1s, background .1s; }
|
|
7116
7253
|
/* Both options are neutral until picked \u2014 an amber default read as "already selected". */
|
|
@@ -7394,7 +7531,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
7394
7531
|
`;
|
|
7395
7532
|
|
|
7396
7533
|
// src/StatsWidget.tsx
|
|
7397
|
-
import { jsx as
|
|
7534
|
+
import { jsx as jsx73 } from "react/jsx-runtime";
|
|
7398
7535
|
function buildClient(props) {
|
|
7399
7536
|
try {
|
|
7400
7537
|
if ("client" in props && props.client) {
|
|
@@ -7435,7 +7572,7 @@ function StatsWidget(props) {
|
|
|
7435
7572
|
}, []);
|
|
7436
7573
|
const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
|
|
7437
7574
|
const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
|
|
7438
|
-
const [hasToday, setHasToday] =
|
|
7575
|
+
const [hasToday, setHasToday] = useState35(false);
|
|
7439
7576
|
const monitor = useLiveMonitor({
|
|
7440
7577
|
getLiveMonitor: (pins) => built ? built.conversation.getLiveMonitor(pins) : Promise.resolve(null),
|
|
7441
7578
|
getMarketOdds: (matchId, dev) => built ? built.conversation.getMarketOdds(matchId, dev) : Promise.resolve(null),
|
|
@@ -7533,7 +7670,7 @@ function StatsWidget(props) {
|
|
|
7533
7670
|
}, [built, ui.injectStyles]);
|
|
7534
7671
|
if (!built) return null;
|
|
7535
7672
|
const attrs = themeAttrs(ui);
|
|
7536
|
-
return /* @__PURE__ */
|
|
7673
|
+
return /* @__PURE__ */ jsx73(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx73("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__ */ jsx73(
|
|
7537
7674
|
ChatPanel,
|
|
7538
7675
|
{
|
|
7539
7676
|
controller,
|
|
@@ -7547,7 +7684,7 @@ function StatsWidget(props) {
|
|
|
7547
7684
|
loggedIn: !!operatorUserId,
|
|
7548
7685
|
conversation: built?.conversation ?? null
|
|
7549
7686
|
}
|
|
7550
|
-
) : /* @__PURE__ */
|
|
7687
|
+
) : /* @__PURE__ */ jsx73(
|
|
7551
7688
|
ChatFab,
|
|
7552
7689
|
{
|
|
7553
7690
|
label: ui.launcherLabel,
|