@sensiblestats/widget-react 0.98.0 → 0.99.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/README.md +11 -0
- package/dist/index.cjs +111 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +195 -102
- package/dist/index.js.map +1 -1
- package/dist/styles.css +47 -7
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1099,7 +1099,7 @@ function isEnglishLocale(locale) {
|
|
|
1099
1099
|
}
|
|
1100
1100
|
|
|
1101
1101
|
// src/version.generated.ts
|
|
1102
|
-
var WIDGET_REACT_VERSION = "0.
|
|
1102
|
+
var WIDGET_REACT_VERSION = "0.99.0";
|
|
1103
1103
|
|
|
1104
1104
|
// src/config.ts
|
|
1105
1105
|
function normalizeUi(cfg) {
|
|
@@ -2734,7 +2734,9 @@ function seedIdCounter(messages) {
|
|
|
2734
2734
|
}
|
|
2735
2735
|
return max + 1;
|
|
2736
2736
|
}
|
|
2737
|
-
|
|
2737
|
+
var pageKey = (p) => p ? `${p.sport}|${p.kind ?? "section"}|${p.matchId ?? p.competitionId ?? ""}` : "";
|
|
2738
|
+
var REGREET_DEBOUNCE_MS = 300;
|
|
2739
|
+
function useChatStream(conversation, starterTexts, greetingMessage, storageKey, page) {
|
|
2738
2740
|
const boot = useMemo2(() => {
|
|
2739
2741
|
const payload = storageKey ? readConversation(storageKey, Date.now()) : null;
|
|
2740
2742
|
const restored = payload != null && payload !== "expired" && payload !== "corrupt";
|
|
@@ -2752,6 +2754,10 @@ function useChatStream(conversation, starterTexts, greetingMessage, storageKey)
|
|
|
2752
2754
|
stateRef.current = state;
|
|
2753
2755
|
const greetedRef = useRef3(boot.restored);
|
|
2754
2756
|
const hydratedRef = useRef3(false);
|
|
2757
|
+
const pageRef = useRef3(page);
|
|
2758
|
+
pageRef.current = page;
|
|
2759
|
+
const greetedKeyRef = useRef3(null);
|
|
2760
|
+
const greetingCancelledRef = useRef3(false);
|
|
2755
2761
|
const restoreSeededRef = useRef3(false);
|
|
2756
2762
|
if (!restoreSeededRef.current) {
|
|
2757
2763
|
restoreSeededRef.current = true;
|
|
@@ -2827,7 +2833,13 @@ function useChatStream(conversation, starterTexts, greetingMessage, storageKey)
|
|
|
2827
2833
|
handleRef.current?.cancel();
|
|
2828
2834
|
clearFallbackTimer();
|
|
2829
2835
|
dispatch({ kind: "GREETING_SENT", assistantId: nextId() });
|
|
2830
|
-
|
|
2836
|
+
greetedKeyRef.current = pageKey(pageRef.current);
|
|
2837
|
+
greetingCancelledRef.current = false;
|
|
2838
|
+
const handle = conversation.send({
|
|
2839
|
+
message,
|
|
2840
|
+
clientCapabilities: [...CLIENT_CAPABILITIES],
|
|
2841
|
+
...pageRef.current ? { page: pageRef.current } : {}
|
|
2842
|
+
});
|
|
2831
2843
|
handleRef.current = handle;
|
|
2832
2844
|
armFallbackTimer(() => dispatch({ kind: "STOP" }));
|
|
2833
2845
|
consume(handle, () => dispatch({ kind: "STOP" }));
|
|
@@ -2840,6 +2852,24 @@ function useChatStream(conversation, starterTexts, greetingMessage, storageKey)
|
|
|
2840
2852
|
greetedRef.current = true;
|
|
2841
2853
|
fireGreeting();
|
|
2842
2854
|
}, [fireGreeting]);
|
|
2855
|
+
const key = pageKey(page);
|
|
2856
|
+
useEffect3(() => {
|
|
2857
|
+
if (greetedKeyRef.current === null) return;
|
|
2858
|
+
if (key === greetedKeyRef.current && !greetingCancelledRef.current) return;
|
|
2859
|
+
if (stateRef.current.messages.some((m) => m.role === "user")) return;
|
|
2860
|
+
if (key !== greetedKeyRef.current && handleRef.current) {
|
|
2861
|
+
handleRef.current.cancel();
|
|
2862
|
+
greetingCancelledRef.current = true;
|
|
2863
|
+
}
|
|
2864
|
+
const timer = setTimeout(() => {
|
|
2865
|
+
if (stateRef.current.messages.some((m) => m.role === "user")) return;
|
|
2866
|
+
idRef.current = 0;
|
|
2867
|
+
conversation.conversationId = void 0;
|
|
2868
|
+
dispatch({ kind: "RESET" });
|
|
2869
|
+
fireGreeting();
|
|
2870
|
+
}, REGREET_DEBOUNCE_MS);
|
|
2871
|
+
return () => clearTimeout(timer);
|
|
2872
|
+
}, [key, conversation, fireGreeting]);
|
|
2843
2873
|
useEffect3(() => {
|
|
2844
2874
|
if (!state.limit) return;
|
|
2845
2875
|
const delay = limitDelayMs(state.limit, Date.now());
|
|
@@ -5964,15 +5994,34 @@ function ActionButtons({ actions, loading, disabled, onAct }) {
|
|
|
5964
5994
|
}
|
|
5965
5995
|
|
|
5966
5996
|
// src/components/dashboard/DashboardTile.tsx
|
|
5967
|
-
import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5997
|
+
import { Fragment as Fragment6, jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
5968
5998
|
var MAX_CRESTS = 3;
|
|
5969
5999
|
var ODDS_TAIL = /\s*·\s*@(\d+(?:\.\d+)?)\s*$/;
|
|
5970
6000
|
function splitOdds(subtitle) {
|
|
5971
6001
|
const m = ODDS_TAIL.exec(subtitle);
|
|
5972
6002
|
return m ? { text: subtitle.slice(0, m.index), odds: m[1] } : { text: subtitle };
|
|
5973
6003
|
}
|
|
6004
|
+
function codesOf(tile) {
|
|
6005
|
+
return (tile.imageCodes ?? []).filter(Boolean);
|
|
6006
|
+
}
|
|
6007
|
+
function Marks({ codes }) {
|
|
6008
|
+
return /* @__PURE__ */ jsx23(Fragment6, { children: codes.map((code, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-dash__mark", children: code }, `${code}-${i}`)) });
|
|
6009
|
+
}
|
|
6010
|
+
var KEEP_MAX = 16;
|
|
6011
|
+
function DotSeparated({ text }) {
|
|
6012
|
+
const parts = text.split(" \xB7 ");
|
|
6013
|
+
return /* @__PURE__ */ jsx23(Fragment6, { children: parts.map((part, i) => {
|
|
6014
|
+
const piece = i < parts.length - 1 ? `${part} \xB7` : part;
|
|
6015
|
+
return /* @__PURE__ */ jsxs19("span", { children: [
|
|
6016
|
+
i > 0 ? " " : null,
|
|
6017
|
+
part.length <= KEEP_MAX ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash__keep", children: piece }) : piece
|
|
6018
|
+
] }, i);
|
|
6019
|
+
}) });
|
|
6020
|
+
}
|
|
6021
|
+
var keepDashWithHome = (title) => title.replace(/ - /g, "\xA0- ");
|
|
5974
6022
|
function HeroTile({ tile, onTap, oddsLabel }) {
|
|
5975
6023
|
const crests = (tile.imageUrls ?? []).filter(Boolean).slice(0, 2);
|
|
6024
|
+
const codes = crests.length === 0 ? codesOf(tile).slice(0, 2) : [];
|
|
5976
6025
|
const sub = tile.subtitle ? splitOdds(tile.subtitle) : null;
|
|
5977
6026
|
return /* @__PURE__ */ jsxs19("button", { type: "button", className: "ss-w-dash-tile ss-w-dash-tile--full ss-w-dash-hero", onClick: onTap, children: [
|
|
5978
6027
|
/* @__PURE__ */ jsxs19("span", { className: "ss-w-dash-hero-top", children: [
|
|
@@ -5984,36 +6033,40 @@ function HeroTile({ tile, onTap, oddsLabel }) {
|
|
|
5984
6033
|
] }),
|
|
5985
6034
|
sub.odds
|
|
5986
6035
|
] }) : null,
|
|
6036
|
+
!sub?.odds && tile.meta ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash__meta", children: /* @__PURE__ */ jsx23(DotSeparated, { text: tile.meta }) }) : null,
|
|
5987
6037
|
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-chevron", children: /* @__PURE__ */ jsx23(ChevronIcon, {}) })
|
|
5988
6038
|
] }),
|
|
5989
6039
|
/* @__PURE__ */ jsxs19("span", { className: "ss-w-dash-hero-main", children: [
|
|
5990
|
-
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-visual", "aria-hidden": "true", children: crests.length > 0 ? crests.map((url, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-crest", style: { backgroundImage: `url(${url})` } }, `${url}-${i}`)) : /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-icon", children: /* @__PURE__ */ jsx23(DashboardIcon, { name: tile.icon }) }) }),
|
|
6040
|
+
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-visual", "aria-hidden": "true", children: crests.length > 0 ? crests.map((url, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-crest", style: { backgroundImage: `url(${url})` } }, `${url}-${i}`)) : codes.length > 0 ? /* @__PURE__ */ jsx23(Marks, { codes }) : /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-icon", children: /* @__PURE__ */ jsx23(DashboardIcon, { name: tile.icon }) }) }),
|
|
5991
6041
|
/* @__PURE__ */ jsxs19("span", { className: "ss-w-dash-hero-body", children: [
|
|
5992
|
-
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-title", children: tile.title }),
|
|
5993
|
-
sub?.text ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-subtitle", children: sub.text }) : null
|
|
6042
|
+
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-title", children: keepDashWithHome(tile.title) }),
|
|
6043
|
+
sub?.text ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-hero-subtitle", children: sub.text.includes(" \xB7 ") ? /* @__PURE__ */ jsx23(DotSeparated, { text: sub.text }) : sub.text }) : null
|
|
5994
6044
|
] })
|
|
5995
6045
|
] })
|
|
5996
6046
|
] });
|
|
5997
6047
|
}
|
|
6048
|
+
var PRICE_BADGE = /^\d+(?:[.,]\d+)?$/;
|
|
5998
6049
|
function DashboardTile({ tile, onTap, oddsLabel = "Odds", badgePlacement = "meta" }) {
|
|
5999
6050
|
if (tile.emphasis === "hero") return /* @__PURE__ */ jsx23(HeroTile, { tile, onTap, oddsLabel });
|
|
6000
6051
|
const spanClass = tile.span === "full" ? "ss-w-dash-tile--full" : "ss-w-dash-tile--half";
|
|
6001
6052
|
const crests = (tile.imageUrls ?? []).slice(0, MAX_CRESTS);
|
|
6002
|
-
const endBadge = badgePlacement === "end" && tile.badgeText ? tile.badgeText : null;
|
|
6053
|
+
const endBadge = badgePlacement === "end" && tile.badgeText && PRICE_BADGE.test(tile.badgeText.trim()) ? tile.badgeText : null;
|
|
6003
6054
|
const metaBadge = endBadge ? null : tile.badgeText;
|
|
6004
|
-
const
|
|
6055
|
+
const codes = crests.length === 0 ? codesOf(tile).slice(0, MAX_CRESTS) : [];
|
|
6056
|
+
const hasMeta = Boolean(metaBadge) || crests.length > 0 || codes.length > 0;
|
|
6005
6057
|
return /* @__PURE__ */ jsxs19("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
|
|
6006
6058
|
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-icon", children: /* @__PURE__ */ jsx23(DashboardIcon, { name: tile.icon }) }),
|
|
6007
6059
|
/* @__PURE__ */ jsxs19("span", { className: "ss-w-dash-tile-body", children: [
|
|
6008
6060
|
/* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-title", children: tile.title }),
|
|
6009
|
-
tile.subtitle ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle }) : null,
|
|
6061
|
+
tile.subtitle ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle.includes(" \xB7 ") ? /* @__PURE__ */ jsx23(DotSeparated, { text: tile.subtitle }) : tile.subtitle }) : null,
|
|
6010
6062
|
hasMeta ? (
|
|
6011
6063
|
// Badge + crests sit on their own row, below the title, instead of sharing the
|
|
6012
6064
|
// icon/chevron row -- at the half-span tile's ~180px width a nowrap badge alone
|
|
6013
6065
|
// (~70px) left the title column at ~22px and forced character-by-character wrapping.
|
|
6014
6066
|
/* @__PURE__ */ jsxs19("span", { className: "ss-w-dash-tile-meta", children: [
|
|
6015
6067
|
metaBadge ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-badge", children: metaBadge }) : null,
|
|
6016
|
-
crests.length > 0 ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-crests", children: crests.map((url, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-crest", style: { backgroundImage: `url(${url})` }, "aria-hidden": "true" }, `${url}-${i}`)) }) : null
|
|
6068
|
+
crests.length > 0 ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-crests", children: crests.map((url, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-crest", style: { backgroundImage: `url(${url})` }, "aria-hidden": "true" }, `${url}-${i}`)) }) : null,
|
|
6069
|
+
codes.length > 0 ? /* @__PURE__ */ jsx23("span", { className: "ss-w-dash-tile-crests", "aria-hidden": "true", children: /* @__PURE__ */ jsx23(Marks, { codes }) }) : null
|
|
6017
6070
|
] })
|
|
6018
6071
|
) : null
|
|
6019
6072
|
] }),
|
|
@@ -6045,7 +6098,7 @@ function GreetingDashboard({ dashboard, onTap, oddsLabel }) {
|
|
|
6045
6098
|
}
|
|
6046
6099
|
|
|
6047
6100
|
// src/components/dashboard/FixtureCard.tsx
|
|
6048
|
-
import { Fragment as
|
|
6101
|
+
import { Fragment as Fragment7, jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
6049
6102
|
function teamFormResultClass(result) {
|
|
6050
6103
|
if (result === "W") return "ss-w-fandash-teamform-cell--win";
|
|
6051
6104
|
if (result === "L") return "ss-w-fandash-teamform-cell--loss";
|
|
@@ -6071,7 +6124,7 @@ function teamFormRows(data) {
|
|
|
6071
6124
|
function FixtureCard({ card }) {
|
|
6072
6125
|
const { data } = card;
|
|
6073
6126
|
const h2h = data.h2H;
|
|
6074
|
-
return /* @__PURE__ */ jsxs21(
|
|
6127
|
+
return /* @__PURE__ */ jsxs21(Fragment7, { children: [
|
|
6075
6128
|
/* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-fixture", children: [
|
|
6076
6129
|
/* @__PURE__ */ jsxs21("span", { className: "ss-w-fandash-eyebrow", children: [
|
|
6077
6130
|
card.title,
|
|
@@ -6112,7 +6165,7 @@ function FixtureCard({ card }) {
|
|
|
6112
6165
|
/* @__PURE__ */ jsx25("div", { className: "ss-w-fandash-teamform-rows", children: teamFormRows(data) })
|
|
6113
6166
|
] }),
|
|
6114
6167
|
h2h || data.fact ? /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-h2h", children: [
|
|
6115
|
-
h2h ? /* @__PURE__ */ jsxs21(
|
|
6168
|
+
h2h ? /* @__PURE__ */ jsxs21(Fragment7, { children: [
|
|
6116
6169
|
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-eyebrow", children: h2h.label }),
|
|
6117
6170
|
/* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-split", children: [
|
|
6118
6171
|
/* @__PURE__ */ jsxs21("span", { className: "ss-w-fandash-split-cell", children: [
|
|
@@ -6135,7 +6188,7 @@ function FixtureCard({ card }) {
|
|
|
6135
6188
|
}
|
|
6136
6189
|
|
|
6137
6190
|
// src/components/dashboard/CountdownCard.tsx
|
|
6138
|
-
import { Fragment as
|
|
6191
|
+
import { Fragment as Fragment8, useEffect as useEffect20, useState as useState25 } from "react";
|
|
6139
6192
|
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
6140
6193
|
var DAY_MS = 864e5;
|
|
6141
6194
|
function remainingSegments(kickoffUnix, nowMs, withSeconds) {
|
|
@@ -6167,7 +6220,7 @@ function CountdownCard({ card }) {
|
|
|
6167
6220
|
const segments = remainingSegments(data.kickoffUnix, nowMs, withinDay && !reduced);
|
|
6168
6221
|
return /* @__PURE__ */ jsx26("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-countdown-top", children: [
|
|
6169
6222
|
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-eyebrow", children: card.title ?? "Kick-off in" }),
|
|
6170
|
-
segments ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs22(
|
|
6223
|
+
segments ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs22(Fragment8, { children: [
|
|
6171
6224
|
i > 0 ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-countdown-colon", children: ":" }) : null,
|
|
6172
6225
|
/* @__PURE__ */ jsxs22("span", { className: "ss-w-fandash-countdown-seg", children: [
|
|
6173
6226
|
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-countdown-value", children: s.value }),
|
|
@@ -6543,7 +6596,7 @@ function useLiveClock(minute, clockRunning, receivedAtMs) {
|
|
|
6543
6596
|
}
|
|
6544
6597
|
|
|
6545
6598
|
// src/components/dashboard/LiveScoreCard.tsx
|
|
6546
|
-
import { Fragment as
|
|
6599
|
+
import { Fragment as Fragment9, jsx as jsx42, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
6547
6600
|
function initials5(name) {
|
|
6548
6601
|
return name.trim().slice(0, 3).toUpperCase();
|
|
6549
6602
|
}
|
|
@@ -6603,11 +6656,11 @@ function LiveScoreCard({
|
|
|
6603
6656
|
] })
|
|
6604
6657
|
] }),
|
|
6605
6658
|
homeScorers || awayScorers ? /* @__PURE__ */ jsxs38("div", { className: "ss-w-fandash-live-scorers-row", children: [
|
|
6606
|
-
/* @__PURE__ */ jsx42("div", { className: "ss-w-fandash-live-scorers ss-w-fandash-live-scorers--home", children: homeScorers ? /* @__PURE__ */ jsxs38(
|
|
6659
|
+
/* @__PURE__ */ jsx42("div", { className: "ss-w-fandash-live-scorers ss-w-fandash-live-scorers--home", children: homeScorers ? /* @__PURE__ */ jsxs38(Fragment9, { children: [
|
|
6607
6660
|
/* @__PURE__ */ jsx42("span", { className: "ss-w-fandash-live-scorers-icon", "aria-hidden": "true", children: "\u26BD" }),
|
|
6608
6661
|
homeScorers
|
|
6609
6662
|
] }) : null }),
|
|
6610
|
-
/* @__PURE__ */ jsx42("div", { className: "ss-w-fandash-live-scorers ss-w-fandash-live-scorers--away", children: awayScorers ? /* @__PURE__ */ jsxs38(
|
|
6663
|
+
/* @__PURE__ */ jsx42("div", { className: "ss-w-fandash-live-scorers ss-w-fandash-live-scorers--away", children: awayScorers ? /* @__PURE__ */ jsxs38(Fragment9, { children: [
|
|
6611
6664
|
awayScorers,
|
|
6612
6665
|
/* @__PURE__ */ jsx42("span", { className: "ss-w-fandash-live-scorers-icon", "aria-hidden": "true", children: "\u26BD" })
|
|
6613
6666
|
] }) : null })
|
|
@@ -7207,7 +7260,7 @@ function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
|
|
|
7207
7260
|
|
|
7208
7261
|
// src/components/MonitorFormH2H.tsx
|
|
7209
7262
|
import { useState as useState33 } from "react";
|
|
7210
|
-
import { Fragment as
|
|
7263
|
+
import { Fragment as Fragment10, jsx as jsx54, jsxs as jsxs49 } from "react/jsx-runtime";
|
|
7211
7264
|
function resultClass2(result) {
|
|
7212
7265
|
if (result === "W") return "ss-w-h2h-result--win";
|
|
7213
7266
|
if (result === "L") return "ss-w-h2h-result--loss";
|
|
@@ -7225,7 +7278,7 @@ function MonitorFormH2H({ formAndH2H, homeTeamName, awayTeamName, ui }) {
|
|
|
7225
7278
|
const [expanded, setExpanded] = useState33(false);
|
|
7226
7279
|
const { homeForm, awayForm, h2h, homeShortCode, awayShortCode } = formAndH2H;
|
|
7227
7280
|
if (homeForm.length === 0 && awayForm.length === 0 && !h2h) {
|
|
7228
|
-
return /* @__PURE__ */ jsx54(
|
|
7281
|
+
return /* @__PURE__ */ jsx54(Fragment10, {});
|
|
7229
7282
|
}
|
|
7230
7283
|
const homeLabel = homeShortCode || homeTeamName;
|
|
7231
7284
|
const awayLabel = awayShortCode || awayTeamName;
|
|
@@ -7453,7 +7506,7 @@ function MonitorSkeleton({ pin, monitor, ui }) {
|
|
|
7453
7506
|
|
|
7454
7507
|
// src/components/NbaPropsSection.tsx
|
|
7455
7508
|
import { useEffect as useEffect25, useState as useState34 } from "react";
|
|
7456
|
-
import { Fragment as
|
|
7509
|
+
import { Fragment as Fragment11, jsx as jsx57, jsxs as jsxs52 } from "react/jsx-runtime";
|
|
7457
7510
|
var STAT_ORDER = ["points", "rebounds", "assists", "threes"];
|
|
7458
7511
|
var MAX_TIMER_MS = 2147483647;
|
|
7459
7512
|
var GAME_VALUE = {
|
|
@@ -7570,7 +7623,7 @@ function Roster({ bundle, players, side, ui, slip }) {
|
|
|
7570
7623
|
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-name", children: p.name }),
|
|
7571
7624
|
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-meta", children: meta })
|
|
7572
7625
|
] }),
|
|
7573
|
-
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-main", children: main?.line != null ? /* @__PURE__ */ jsxs52(
|
|
7626
|
+
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-main", children: main?.line != null ? /* @__PURE__ */ jsxs52(Fragment11, { children: [
|
|
7574
7627
|
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-stat", children: ui.nba.propsStatShort(main.stat) }),
|
|
7575
7628
|
/* @__PURE__ */ jsx57("span", { className: "ss-w-props-line", children: ui.nba.lineText(String(main.line)) })
|
|
7576
7629
|
] }) : /* @__PURE__ */ jsx57("span", { className: "ss-w-props-stat", children: ui.nba.propsLadderOnly }) })
|
|
@@ -7613,7 +7666,7 @@ function NbaPropsSection({ match, monitor, ui, slip }) {
|
|
|
7613
7666
|
}
|
|
7614
7667
|
|
|
7615
7668
|
// src/components/NbaMonitorCard.tsx
|
|
7616
|
-
import { Fragment as
|
|
7669
|
+
import { Fragment as Fragment12, jsx as jsx58, jsxs as jsxs53 } from "react/jsx-runtime";
|
|
7617
7670
|
var REGULATION_PERIODS = 4;
|
|
7618
7671
|
function periodLabel(period) {
|
|
7619
7672
|
if (period <= REGULATION_PERIODS) return `Q${period}`;
|
|
@@ -7682,7 +7735,7 @@ function NbaMonitorCard({ match, monitor, ui, slip }) {
|
|
|
7682
7735
|
return /* @__PURE__ */ jsxs53("div", { className: "ss-w-mon-item", children: [
|
|
7683
7736
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-mon", children: [
|
|
7684
7737
|
/* @__PURE__ */ jsxs53("div", { className: "ss-w-mon-top", children: [
|
|
7685
|
-
inPlay && /* @__PURE__ */ jsxs53(
|
|
7738
|
+
inPlay && /* @__PURE__ */ jsxs53(Fragment12, { children: [
|
|
7686
7739
|
/* @__PURE__ */ jsxs53("span", { className: "ss-w-fandash-live-pill", children: [
|
|
7687
7740
|
/* @__PURE__ */ jsx58("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
7688
7741
|
ui.liveLabel
|
|
@@ -7709,7 +7762,7 @@ function NbaMonitorCard({ match, monitor, ui, slip }) {
|
|
|
7709
7762
|
] }) : /* @__PURE__ */ jsx58("span", { className: "ss-w-mon-vs", children: "@" }),
|
|
7710
7763
|
/* @__PURE__ */ jsx58(Side, { abbreviation: b.homeAbbreviation, nickname: b.homeNickname, teamName: match.homeTeamName })
|
|
7711
7764
|
] }),
|
|
7712
|
-
scored && /* @__PURE__ */ jsxs53(
|
|
7765
|
+
scored && /* @__PURE__ */ jsxs53(Fragment12, { children: [
|
|
7713
7766
|
/* @__PURE__ */ jsxs53("table", { className: "ss-w-nbamon-ls", children: [
|
|
7714
7767
|
/* @__PURE__ */ jsx58("thead", { children: /* @__PURE__ */ jsxs53("tr", { children: [
|
|
7715
7768
|
/* @__PURE__ */ jsx58("th", {}),
|
|
@@ -7883,7 +7936,7 @@ function seedFor(pin, index, states, stale, now) {
|
|
|
7883
7936
|
}
|
|
7884
7937
|
|
|
7885
7938
|
// src/components/MonitorTabs.tsx
|
|
7886
|
-
import { Fragment as
|
|
7939
|
+
import { Fragment as Fragment13, jsx as jsx60, jsxs as jsxs55 } from "react/jsx-runtime";
|
|
7887
7940
|
function OddsLiveStrip({ m, ui }) {
|
|
7888
7941
|
const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
|
|
7889
7942
|
const stale = m.status === "stale";
|
|
@@ -7914,7 +7967,7 @@ function MatchesPanel({ monitor, ui, slip, onAsk, discovery }) {
|
|
|
7914
7967
|
if (tiles.length === 0) return /* @__PURE__ */ jsx60("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
|
|
7915
7968
|
const selected = tiles.find((t) => t.pin.key === monitor.selectedMatchKey) ?? tiles[0];
|
|
7916
7969
|
const m = selected.match;
|
|
7917
|
-
return /* @__PURE__ */ jsxs55(
|
|
7970
|
+
return /* @__PURE__ */ jsxs55(Fragment13, { children: [
|
|
7918
7971
|
tiles.filter((t) => t.match).length >= 2 && /* @__PURE__ */ jsx60(ScoreboardStrip, { tiles, selectedKey: selected.pin.key, onSelect: monitor.selectMatch, ui }),
|
|
7919
7972
|
/* @__PURE__ */ jsxs55("div", { className: "ss-w-mon-list", children: [
|
|
7920
7973
|
!m && /* @__PURE__ */ jsx60(MonitorSkeleton, { pin: selected.pin, monitor, ui }),
|
|
@@ -8398,7 +8451,7 @@ function SearchField({ id, label, labelHidden = false, placeholder, value, onCha
|
|
|
8398
8451
|
}
|
|
8399
8452
|
|
|
8400
8453
|
// src/components/TodayPanel.tsx
|
|
8401
|
-
import { Fragment as
|
|
8454
|
+
import { Fragment as Fragment14, jsx as jsx67, jsxs as jsxs61 } from "react/jsx-runtime";
|
|
8402
8455
|
function TodayPanel({ discovery, ui, monitor }) {
|
|
8403
8456
|
const { groups, states, stale, starLeague } = discovery;
|
|
8404
8457
|
const searchId = useId2();
|
|
@@ -8455,7 +8508,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
8455
8508
|
if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
|
|
8456
8509
|
}, [selectedCompetitionId, openGroup]);
|
|
8457
8510
|
const liveRows = stale ? [] : visibleGroups.flatMap((group) => group.matches.filter((m) => isTreatedLive(states.get(matchKey7(m.sport, m.matchId)), stale)).map((match) => ({ match, rank: group.rank }))).sort((a, b) => a.rank - b.rank);
|
|
8458
|
-
const liveBand = liveRows.length > 0 && /* @__PURE__ */ jsxs61(
|
|
8511
|
+
const liveBand = liveRows.length > 0 && /* @__PURE__ */ jsxs61(Fragment14, { children: [
|
|
8459
8512
|
/* @__PURE__ */ jsxs61("div", { className: "ss-w-sec-head", children: [
|
|
8460
8513
|
/* @__PURE__ */ jsx67("span", { className: "ss-w-sec-dot", "aria-hidden": "true" }),
|
|
8461
8514
|
ui.sectionLive
|
|
@@ -8513,7 +8566,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
8513
8566
|
clearLabel: ui.clearSearchLabel
|
|
8514
8567
|
}
|
|
8515
8568
|
),
|
|
8516
|
-
searching ? searchResults.length === 0 ? /* @__PURE__ */ jsx67("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ jsx67(
|
|
8569
|
+
searching ? searchResults.length === 0 ? /* @__PURE__ */ jsx67("div", { className: "ss-w-today-empty", children: ui.noLeagueResults }) : /* @__PURE__ */ jsx67(Fragment14, { children: searchResults.map((group) => /* @__PURE__ */ jsxs61("div", { className: "ss-w-today-search-block", children: [
|
|
8517
8570
|
/* @__PURE__ */ jsxs61("div", { className: "ss-w-today-search-group", children: [
|
|
8518
8571
|
/* @__PURE__ */ jsx67(Crest2, { url: group.competitionImagePath ?? void 0, name: group.competitionName, kind: "comp" }),
|
|
8519
8572
|
/* @__PURE__ */ jsxs61("span", { className: "ss-w-today-search-group-name", children: [
|
|
@@ -8552,7 +8605,7 @@ function TodayPanel({ discovery, ui, monitor }) {
|
|
|
8552
8605
|
},
|
|
8553
8606
|
matchKey7(match.sport, match.matchId)
|
|
8554
8607
|
))
|
|
8555
|
-
] }, group.competitionId)) }) : /* @__PURE__ */ jsxs61(
|
|
8608
|
+
] }, group.competitionId)) }) : /* @__PURE__ */ jsxs61(Fragment14, { children: [
|
|
8556
8609
|
/* @__PURE__ */ jsxs61("div", { className: "ss-w-today-sec", children: [
|
|
8557
8610
|
placement.personal ? ui.yourLeagues : ui.topLeagues,
|
|
8558
8611
|
!placement.personal && /* @__PURE__ */ jsx67("span", { className: "ss-w-today-sec-sub", children: ui.topLeaguesSub })
|
|
@@ -8632,7 +8685,7 @@ function splitName(full) {
|
|
|
8632
8685
|
}
|
|
8633
8686
|
|
|
8634
8687
|
// src/components/GameTileArt.tsx
|
|
8635
|
-
import { Fragment as
|
|
8688
|
+
import { Fragment as Fragment15, jsx as jsx69, jsxs as jsxs62 } from "react/jsx-runtime";
|
|
8636
8689
|
function GameTileArt({ gameId }) {
|
|
8637
8690
|
return /* @__PURE__ */ jsx69("svg", { className: "ss-g-art", viewBox: "0 0 120 74", "aria-hidden": "true", children: ART[gameId] ?? ART.default });
|
|
8638
8691
|
}
|
|
@@ -8641,41 +8694,41 @@ var head = (cx, cy, r, cls = "ss-g-art-fg") => /* @__PURE__ */ jsxs62("g", { cla
|
|
|
8641
8694
|
/* @__PURE__ */ jsx69("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` })
|
|
8642
8695
|
] });
|
|
8643
8696
|
var ART = {
|
|
8644
|
-
"mystery-tiger": /* @__PURE__ */ jsxs62(
|
|
8697
|
+
"mystery-tiger": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8645
8698
|
head(60, 38, 26, "ss-g-art-fg"),
|
|
8646
8699
|
/* @__PURE__ */ jsx69("text", { x: "60", y: "36", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
8647
8700
|
] }),
|
|
8648
|
-
"higher-or-lower": /* @__PURE__ */ jsxs62(
|
|
8701
|
+
"higher-or-lower": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8649
8702
|
head(32, 38, 20),
|
|
8650
8703
|
head(88, 38, 20),
|
|
8651
8704
|
/* @__PURE__ */ jsx69("circle", { cx: "60", cy: "37", r: "11", className: "ss-g-art-accent" }),
|
|
8652
8705
|
/* @__PURE__ */ jsx69("path", { d: "M57 33l3-3 3 3M57 41l3 3 3-3", className: "ss-g-art-ink" })
|
|
8653
8706
|
] }),
|
|
8654
|
-
"guess-the-xi": /* @__PURE__ */ jsxs62(
|
|
8707
|
+
"guess-the-xi": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8655
8708
|
/* @__PURE__ */ jsx69("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
8656
8709
|
[[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__ */ jsx69("circle", { cx: x, cy: y, r: "4", className: a ? "ss-g-art-accent" : "ss-g-art-dot" }, i))
|
|
8657
8710
|
] }),
|
|
8658
|
-
"daily-quiz": /* @__PURE__ */ jsx69(
|
|
8659
|
-
"career-path": /* @__PURE__ */ jsxs62(
|
|
8711
|
+
"daily-quiz": /* @__PURE__ */ jsx69(Fragment15, { children: [[14, 8], [62, 8], [14, 40], [62, 40]].map(([x, y], i) => /* @__PURE__ */ jsx69("rect", { x, y, width: "44", height: "26", rx: "5", className: i === 1 ? "ss-g-art-correct" : "ss-g-art-block" }, i)) }),
|
|
8712
|
+
"career-path": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8660
8713
|
/* @__PURE__ */ jsx69("path", { d: "M18 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
8661
8714
|
/* @__PURE__ */ jsx69("path", { d: "M48 37h8M84 37h8", className: "ss-g-art-line" }),
|
|
8662
8715
|
/* @__PURE__ */ jsx69("path", { d: "M60 22h24v10c0 7-5 11-12 13-7-2-12-6-12-13z", className: "ss-g-art-fg" }),
|
|
8663
8716
|
/* @__PURE__ */ jsx69("rect", { x: "96", y: "22", width: "18", height: "26", rx: "4", className: "ss-g-art-dash" }),
|
|
8664
8717
|
/* @__PURE__ */ jsx69("text", { x: "105", y: "40", className: "ss-g-art-q", textAnchor: "middle", children: "?" })
|
|
8665
8718
|
] }),
|
|
8666
|
-
"beat-the-grid": /* @__PURE__ */ jsx69(
|
|
8667
|
-
"matchday-predictor": /* @__PURE__ */ jsxs62(
|
|
8719
|
+
"beat-the-grid": /* @__PURE__ */ jsx69(Fragment15, { children: [0, 1, 2].flatMap((r) => [0, 1, 2].map((c) => /* @__PURE__ */ jsx69("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}`))) }),
|
|
8720
|
+
"matchday-predictor": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8668
8721
|
/* @__PURE__ */ jsx69("path", { d: "M10 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" }),
|
|
8669
8722
|
/* @__PURE__ */ jsx69("rect", { x: "38", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-accent-stroke" }),
|
|
8670
8723
|
/* @__PURE__ */ jsx69("rect", { x: "64", y: "22", width: "18", height: "24", rx: "4", className: "ss-g-art-dash" }),
|
|
8671
8724
|
/* @__PURE__ */ jsx69("path", { d: "M90 20h20v9c0 6-4 9-10 11-6-2-10-5-10-11z", className: "ss-g-art-fg" })
|
|
8672
8725
|
] }),
|
|
8673
|
-
"starting-xi": /* @__PURE__ */ jsxs62(
|
|
8726
|
+
"starting-xi": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8674
8727
|
/* @__PURE__ */ jsx69("rect", { x: "8", y: "4", width: "104", height: "66", rx: "6", className: "ss-g-art-pitch" }),
|
|
8675
8728
|
[[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__ */ jsx69("circle", { cx: x, cy: y, r: "5", className: i < 7 ? "ss-g-art-accent" : "ss-g-art-dash" }, i))
|
|
8676
8729
|
] }),
|
|
8677
|
-
"stat-ladder": /* @__PURE__ */ jsx69(
|
|
8678
|
-
"fan-motm": /* @__PURE__ */ jsxs62(
|
|
8730
|
+
"stat-ladder": /* @__PURE__ */ jsx69(Fragment15, { children: [[20, 70], [34, 52], [48, 34]].map(([y, w], i) => /* @__PURE__ */ jsx69("rect", { x: "24", y, width: w, height: "12", rx: "3", className: i === 1 ? "ss-g-art-accent" : "ss-g-art-block" }, i)) }),
|
|
8731
|
+
"fan-motm": /* @__PURE__ */ jsxs62(Fragment15, { children: [
|
|
8679
8732
|
/* @__PURE__ */ jsx69("circle", { cx: "60", cy: "37", r: "26", className: "ss-g-art-accent-stroke" }),
|
|
8680
8733
|
head(60, 40, 18),
|
|
8681
8734
|
/* @__PURE__ */ jsx69("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" })
|
|
@@ -8699,7 +8752,7 @@ function StatStack({ value, label }) {
|
|
|
8699
8752
|
}
|
|
8700
8753
|
|
|
8701
8754
|
// src/components/GameTile.tsx
|
|
8702
|
-
import { Fragment as
|
|
8755
|
+
import { Fragment as Fragment16, jsx as jsx71, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
8703
8756
|
function tileStatus(game, ui) {
|
|
8704
8757
|
switch (game.status) {
|
|
8705
8758
|
case "locked":
|
|
@@ -8723,7 +8776,7 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
8723
8776
|
const status = tileStatus(game, ui);
|
|
8724
8777
|
const disabled = DISABLED.has(game.status);
|
|
8725
8778
|
const title = gameTitle(game, ui.games.titles);
|
|
8726
|
-
const body = variant === "hero" ? /* @__PURE__ */ jsxs64(
|
|
8779
|
+
const body = variant === "hero" ? /* @__PURE__ */ jsxs64(Fragment16, { children: [
|
|
8727
8780
|
/* @__PURE__ */ jsxs64("span", { className: "ss-g-hero-text", children: [
|
|
8728
8781
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-hero-eyebrow", children: ui.games.dailyChallenge }),
|
|
8729
8782
|
status.tone === "new" && /* @__PURE__ */ jsx71(Chip, { variant: "badge", children: ui.games.newToday }),
|
|
@@ -8735,7 +8788,7 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
8735
8788
|
] })
|
|
8736
8789
|
] }),
|
|
8737
8790
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-hero-art", children: /* @__PURE__ */ jsx71(GameTileArt, { gameId: game.gameId }) })
|
|
8738
|
-
] }) : variant === "wide" ? /* @__PURE__ */ jsxs64(
|
|
8791
|
+
] }) : variant === "wide" ? /* @__PURE__ */ jsxs64(Fragment16, { children: [
|
|
8739
8792
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-wide-art", children: /* @__PURE__ */ jsx71(GameTileArt, { gameId: game.gameId }) }),
|
|
8740
8793
|
/* @__PURE__ */ jsxs64("span", { className: "ss-g-wide-text", children: [
|
|
8741
8794
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-tile-title", children: title }),
|
|
@@ -8743,7 +8796,7 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
8743
8796
|
status.tone === "new" && /* @__PURE__ */ jsx71(Chip, { variant: "badge", children: ui.games.newToday })
|
|
8744
8797
|
] }),
|
|
8745
8798
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-wide-chev", children: /* @__PURE__ */ jsx71(IconChevronLeft, { size: 18 }) })
|
|
8746
|
-
] }) : /* @__PURE__ */ jsxs64(
|
|
8799
|
+
] }) : /* @__PURE__ */ jsxs64(Fragment16, { children: [
|
|
8747
8800
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-tile-art", children: /* @__PURE__ */ jsx71(GameTileArt, { gameId: game.gameId }) }),
|
|
8748
8801
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-tile-title", children: title }),
|
|
8749
8802
|
/* @__PURE__ */ jsx71("span", { className: "ss-g-tile-status", "data-tone": status.tone, children: status.text })
|
|
@@ -8754,7 +8807,7 @@ function GameTile({ game, onOpen, ui, variant = "tile" }) {
|
|
|
8754
8807
|
}
|
|
8755
8808
|
|
|
8756
8809
|
// src/components/GamesHub.tsx
|
|
8757
|
-
import { Fragment as
|
|
8810
|
+
import { Fragment as Fragment17, jsx as jsx72, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
8758
8811
|
var PLAYABLE = /* @__PURE__ */ new Set(["available", "in_progress"]);
|
|
8759
8812
|
var DONE = /* @__PURE__ */ new Set(["played", "graded"]);
|
|
8760
8813
|
function pickHeroGame(games) {
|
|
@@ -8785,7 +8838,7 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
|
|
|
8785
8838
|
/* @__PURE__ */ jsxs65("div", { className: "ss-g-stat", children: [
|
|
8786
8839
|
/* @__PURE__ */ jsx72("span", { className: "ss-g-stat-l", children: ui.games.statStreak }),
|
|
8787
8840
|
/* @__PURE__ */ jsxs65("span", { className: "ss-g-stat-v", "data-testid": "stat-streak", children: [
|
|
8788
|
-
myWeeklyRow ? /* @__PURE__ */ jsxs65(
|
|
8841
|
+
myWeeklyRow ? /* @__PURE__ */ jsxs65(Fragment17, { children: [
|
|
8789
8842
|
/* @__PURE__ */ jsx72(IconFlame, {}),
|
|
8790
8843
|
myWeeklyRow.currentStreak
|
|
8791
8844
|
] }) : dash,
|
|
@@ -9175,11 +9228,11 @@ function SegmentProgress({ segments, ariaLabel, leftLabel, rightLabel, right })
|
|
|
9175
9228
|
}
|
|
9176
9229
|
|
|
9177
9230
|
// src/components/games/ui/AnswerTray.tsx
|
|
9178
|
-
import { Fragment as
|
|
9231
|
+
import { Fragment as Fragment18, jsx as jsx76, jsxs as jsxs68 } from "react/jsx-runtime";
|
|
9179
9232
|
function AnswerTray({ id, label, placeholder, optionsLabel, options, query, onQuery, onPick, disabled, minQuery = 0 }) {
|
|
9180
9233
|
const needle = query.trim().toLowerCase();
|
|
9181
9234
|
const shown = needle.length < minQuery ? [] : needle ? options.filter((o) => o.name.toLowerCase().includes(needle)) : options;
|
|
9182
|
-
return /* @__PURE__ */ jsxs68(
|
|
9235
|
+
return /* @__PURE__ */ jsxs68(Fragment18, { children: [
|
|
9183
9236
|
/* @__PURE__ */ jsx76(
|
|
9184
9237
|
SearchField,
|
|
9185
9238
|
{
|
|
@@ -9271,7 +9324,7 @@ function PointsLadderRow({ ladder, guessesUsed, ui }) {
|
|
|
9271
9324
|
}
|
|
9272
9325
|
|
|
9273
9326
|
// src/components/games/MysteryTigerGame.tsx
|
|
9274
|
-
import { Fragment as
|
|
9327
|
+
import { Fragment as Fragment19, jsx as jsx82, jsxs as jsxs72 } from "react/jsx-runtime";
|
|
9275
9328
|
function parseClientState(json) {
|
|
9276
9329
|
if (!json) return null;
|
|
9277
9330
|
try {
|
|
@@ -9419,7 +9472,7 @@ function MysteryTigerGame({
|
|
|
9419
9472
|
}
|
|
9420
9473
|
),
|
|
9421
9474
|
!config && /* @__PURE__ */ jsx82("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
9422
|
-
config && /* @__PURE__ */ jsxs72(
|
|
9475
|
+
config && /* @__PURE__ */ jsxs72(Fragment19, { children: [
|
|
9423
9476
|
/* @__PURE__ */ jsxs72("div", { className: "ss-g-body", children: [
|
|
9424
9477
|
!isOver && /* @__PURE__ */ jsx82(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed, ui }),
|
|
9425
9478
|
/* @__PURE__ */ jsxs72("div", { className: `ss-g-mt-card${isOver ? " ss-g-mt-card--reveal" : ""}`, children: [
|
|
@@ -9519,7 +9572,7 @@ function MysteryTigerGame({
|
|
|
9519
9572
|
}
|
|
9520
9573
|
|
|
9521
9574
|
// src/components/games/HigherOrLowerGame.tsx
|
|
9522
|
-
import { Fragment as
|
|
9575
|
+
import { Fragment as Fragment20, jsx as jsx83, jsxs as jsxs73 } from "react/jsx-runtime";
|
|
9523
9576
|
var POINTS_PER_CORRECT = 10;
|
|
9524
9577
|
function parseClientState2(json) {
|
|
9525
9578
|
if (!json) return null;
|
|
@@ -9579,7 +9632,7 @@ function HigherOrLowerGame({
|
|
|
9579
9632
|
}
|
|
9580
9633
|
),
|
|
9581
9634
|
!config && /* @__PURE__ */ jsx83("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
9582
|
-
config && /* @__PURE__ */ jsxs73(
|
|
9635
|
+
config && /* @__PURE__ */ jsxs73(Fragment20, { children: [
|
|
9583
9636
|
/* @__PURE__ */ jsxs73("div", { className: "ss-g-body", children: [
|
|
9584
9637
|
/* @__PURE__ */ jsxs73("div", { className: "ss-g-hl-prompt", "data-testid": "hol-prompt", children: [
|
|
9585
9638
|
/* @__PURE__ */ jsx83("span", { className: "ss-g-hl-prompt-q", children: t.whoHadMore }),
|
|
@@ -9649,7 +9702,7 @@ function CrestShield({ src, name, size = 28 }) {
|
|
|
9649
9702
|
}
|
|
9650
9703
|
|
|
9651
9704
|
// src/components/games/CareerPathGame.tsx
|
|
9652
|
-
import { Fragment as
|
|
9705
|
+
import { Fragment as Fragment21, jsx as jsx85, jsxs as jsxs74 } from "react/jsx-runtime";
|
|
9653
9706
|
function parseClientState3(json) {
|
|
9654
9707
|
if (!json) return null;
|
|
9655
9708
|
try {
|
|
@@ -9729,7 +9782,7 @@ function CareerPathGame({
|
|
|
9729
9782
|
/* @__PURE__ */ jsx85("span", { className: "ss-g-cp-club", children: spell.clubName }),
|
|
9730
9783
|
/* @__PURE__ */ jsxs74("span", { className: "ss-g-cp-sub", children: [
|
|
9731
9784
|
/* @__PURE__ */ jsx85("span", { className: "ss-g-cp-years", children: years }),
|
|
9732
|
-
spell.isLoan && /* @__PURE__ */ jsxs74(
|
|
9785
|
+
spell.isLoan && /* @__PURE__ */ jsxs74(Fragment21, { children: [
|
|
9733
9786
|
years ? " \xB7 " : "",
|
|
9734
9787
|
/* @__PURE__ */ jsx85("span", { className: "ss-g-cp-loan", children: s.loan })
|
|
9735
9788
|
] })
|
|
@@ -9789,7 +9842,7 @@ function OptionList({ label, options, onPick }) {
|
|
|
9789
9842
|
}
|
|
9790
9843
|
|
|
9791
9844
|
// src/components/games/BeatTheGridGame.tsx
|
|
9792
|
-
import { Fragment as
|
|
9845
|
+
import { Fragment as Fragment22, jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
|
|
9793
9846
|
function criterionIconKind(label, key) {
|
|
9794
9847
|
const l = (key ?? label).toLowerCase();
|
|
9795
9848
|
if (l.includes("app")) return "calendar";
|
|
@@ -9832,7 +9885,7 @@ function HeaderVisual({ label, textKey: iKey, meta }) {
|
|
|
9832
9885
|
case "country":
|
|
9833
9886
|
return /* @__PURE__ */ jsx87("span", { className: "ss-g-btg-hdr-flag", "aria-hidden": "true", children: nationalityFlag(meta.country ?? label) });
|
|
9834
9887
|
case "position":
|
|
9835
|
-
return /* @__PURE__ */ jsx87(
|
|
9888
|
+
return /* @__PURE__ */ jsx87(Fragment22, {});
|
|
9836
9889
|
default:
|
|
9837
9890
|
return /* @__PURE__ */ jsx87(CriterionIcon, { kind: criterionIconKind(label, iKey) });
|
|
9838
9891
|
}
|
|
@@ -9895,7 +9948,7 @@ function SearchSheet({
|
|
|
9895
9948
|
}
|
|
9896
9949
|
)
|
|
9897
9950
|
] }),
|
|
9898
|
-
playerPool.length === 0 ? /* @__PURE__ */ jsx87("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs75(
|
|
9951
|
+
playerPool.length === 0 ? /* @__PURE__ */ jsx87("div", { className: "ss-g-btg-sheet-empty", children: s.emptyPool }) : /* @__PURE__ */ jsxs75(Fragment22, { children: [
|
|
9899
9952
|
/* @__PURE__ */ jsx87(
|
|
9900
9953
|
SearchField,
|
|
9901
9954
|
{
|
|
@@ -9914,7 +9967,7 @@ function SearchSheet({
|
|
|
9914
9967
|
label: s.searchLabel(rowLabel, colLabel),
|
|
9915
9968
|
options: filtered.map((p) => ({
|
|
9916
9969
|
key: p.id,
|
|
9917
|
-
content: /* @__PURE__ */ jsxs75(
|
|
9970
|
+
content: /* @__PURE__ */ jsxs75(Fragment22, { children: [
|
|
9918
9971
|
/* @__PURE__ */ jsx87(PlayerAvatar, { name: p.name, imagePath: p.imagePath, className: "ss-g-opt-av" }),
|
|
9919
9972
|
/* @__PURE__ */ jsx87("span", { className: "ss-g-btg-result-name", children: p.name }),
|
|
9920
9973
|
/* @__PURE__ */ jsx87("span", { className: "ss-g-btg-result-plus", "aria-hidden": "true", children: /* @__PURE__ */ jsx87(IconPlus, { size: 18 }) })
|
|
@@ -10004,10 +10057,10 @@ function BeatTheGridGame({
|
|
|
10004
10057
|
rows.map((rowLabel, rowIdx) => {
|
|
10005
10058
|
const rowMeta = config.rowsMeta?.[rowIdx];
|
|
10006
10059
|
const abbr = rowAbbrev(rowLabel, s.rowAbbrev, config.rowsI18n?.[rowIdx]?.key);
|
|
10007
|
-
const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs75(
|
|
10060
|
+
const rowHeaderContent = rowMeta ? /* @__PURE__ */ jsxs75(Fragment22, { children: [
|
|
10008
10061
|
/* @__PURE__ */ jsx87(HeaderVisual, { label: rowLabel, textKey: config.rowsI18n?.[rowIdx]?.key, meta: rowMeta }),
|
|
10009
10062
|
/* @__PURE__ */ jsx87("span", { children: rowLabel })
|
|
10010
|
-
] }) : abbr === rowLabel ? /* @__PURE__ */ jsx87("span", { children: rowLabel }) : /* @__PURE__ */ jsxs75(
|
|
10063
|
+
] }) : abbr === rowLabel ? /* @__PURE__ */ jsx87("span", { children: rowLabel }) : /* @__PURE__ */ jsxs75(Fragment22, { children: [
|
|
10011
10064
|
/* @__PURE__ */ jsx87("span", { "aria-hidden": "true", children: abbr }),
|
|
10012
10065
|
/* @__PURE__ */ jsx87("span", { className: "ss-g-sr", children: rowLabel })
|
|
10013
10066
|
] });
|
|
@@ -10028,7 +10081,7 @@ function BeatTheGridGame({
|
|
|
10028
10081
|
className: "ss-g-btg-cell",
|
|
10029
10082
|
disabled: isLocked2 || submitting,
|
|
10030
10083
|
onClick: () => handleCellClick(rowIdx, colIdx),
|
|
10031
|
-
children: filled ? /* @__PURE__ */ jsxs75(
|
|
10084
|
+
children: filled ? /* @__PURE__ */ jsxs75(Fragment22, { children: [
|
|
10032
10085
|
/* @__PURE__ */ jsx87(
|
|
10033
10086
|
"span",
|
|
10034
10087
|
{
|
|
@@ -10095,16 +10148,16 @@ function BeatTheGridGame({
|
|
|
10095
10148
|
import { useState as useState45, useId as useId6 } from "react";
|
|
10096
10149
|
|
|
10097
10150
|
// src/components/games/ui/PitchSvg.tsx
|
|
10098
|
-
import { Fragment as
|
|
10151
|
+
import { Fragment as Fragment23, jsx as jsx88, jsxs as jsxs76 } from "react/jsx-runtime";
|
|
10099
10152
|
function PitchSvg({ variant }) {
|
|
10100
10153
|
return /* @__PURE__ */ jsxs76("svg", { className: "ss-g-pitch-svg", viewBox: variant === "full" ? "0 0 100 150" : "0 0 100 100", preserveAspectRatio: "none", "aria-hidden": "true", children: [
|
|
10101
10154
|
/* @__PURE__ */ jsx88("rect", { x: "4", y: "4", width: "92", height: variant === "full" ? 142 : 92, fill: "none" }),
|
|
10102
|
-
variant === "full" ? /* @__PURE__ */ jsxs76(
|
|
10155
|
+
variant === "full" ? /* @__PURE__ */ jsxs76(Fragment23, { children: [
|
|
10103
10156
|
/* @__PURE__ */ jsx88("line", { x1: "4", y1: "75", x2: "96", y2: "75" }),
|
|
10104
10157
|
/* @__PURE__ */ jsx88("circle", { cx: "50", cy: "75", r: "12", fill: "none" }),
|
|
10105
10158
|
/* @__PURE__ */ jsx88("rect", { x: "26", y: "4", width: "48", height: "20", fill: "none" }),
|
|
10106
10159
|
/* @__PURE__ */ jsx88("rect", { x: "26", y: "126", width: "48", height: "20", fill: "none" })
|
|
10107
|
-
] }) : /* @__PURE__ */ jsxs76(
|
|
10160
|
+
] }) : /* @__PURE__ */ jsxs76(Fragment23, { children: [
|
|
10108
10161
|
/* @__PURE__ */ jsx88("path", { d: "M38 4a12 12 0 0 0 24 0", fill: "none" }),
|
|
10109
10162
|
/* @__PURE__ */ jsx88("rect", { x: "26", y: "76", width: "48", height: "20", fill: "none" })
|
|
10110
10163
|
] })
|
|
@@ -10162,7 +10215,7 @@ function positionsBySlot(formation, rowsAttackFirst) {
|
|
|
10162
10215
|
}
|
|
10163
10216
|
|
|
10164
10217
|
// src/components/games/GuessTheXiGame.tsx
|
|
10165
|
-
import { Fragment as
|
|
10218
|
+
import { Fragment as Fragment24, jsx as jsx89, jsxs as jsxs77 } from "react/jsx-runtime";
|
|
10166
10219
|
var MAX_GUESSES2 = 3;
|
|
10167
10220
|
function parseClientState5(json) {
|
|
10168
10221
|
if (!json) return null;
|
|
@@ -10224,7 +10277,7 @@ function GuessTheXiGame({
|
|
|
10224
10277
|
}
|
|
10225
10278
|
),
|
|
10226
10279
|
!config && /* @__PURE__ */ jsx89("div", { className: "ss-g-body ss-g-loading", children: ui.games.loading }),
|
|
10227
|
-
config && /* @__PURE__ */ jsxs77(
|
|
10280
|
+
config && /* @__PURE__ */ jsxs77(Fragment24, { children: [
|
|
10228
10281
|
/* @__PURE__ */ jsxs77("div", { className: "ss-g-body", children: [
|
|
10229
10282
|
!isOver && /* @__PURE__ */ jsx89(PointsLadderRow, { ladder: config.pointsLadder, guessesUsed: clientState?.guessHistory.length ?? 0, ui }),
|
|
10230
10283
|
rows.length > 0 && /* @__PURE__ */ jsxs77("div", { className: "ss-g-gxi-pitch", role: "group", "aria-label": t.pitchLabel, children: [
|
|
@@ -10273,7 +10326,7 @@ function GuessTheXiGame({
|
|
|
10273
10326
|
] }, g.teamId);
|
|
10274
10327
|
})
|
|
10275
10328
|
] }),
|
|
10276
|
-
isOver && /* @__PURE__ */ jsxs77(
|
|
10329
|
+
isOver && /* @__PURE__ */ jsxs77(Fragment24, { children: [
|
|
10277
10330
|
/* @__PURE__ */ jsx89(
|
|
10278
10331
|
ResultCard,
|
|
10279
10332
|
{
|
|
@@ -10299,7 +10352,7 @@ function GuessTheXiGame({
|
|
|
10299
10352
|
label: t.optionsLabel,
|
|
10300
10353
|
options: filtered.map((tm) => ({
|
|
10301
10354
|
key: tm.teamId,
|
|
10302
|
-
content: /* @__PURE__ */ jsxs77(
|
|
10355
|
+
content: /* @__PURE__ */ jsxs77(Fragment24, { children: [
|
|
10303
10356
|
/* @__PURE__ */ jsx89(CrestShield, { src: tm.crestUrl, name: tm.teamName, size: 28 }),
|
|
10304
10357
|
/* @__PURE__ */ jsx89("span", { children: tm.teamName })
|
|
10305
10358
|
] })
|
|
@@ -10325,7 +10378,7 @@ function GuessTheXiGame({
|
|
|
10325
10378
|
|
|
10326
10379
|
// src/components/games/DailyQuizGame.tsx
|
|
10327
10380
|
import { useState as useState46 } from "react";
|
|
10328
|
-
import { Fragment as
|
|
10381
|
+
import { Fragment as Fragment25, jsx as jsx90, jsxs as jsxs78 } from "react/jsx-runtime";
|
|
10329
10382
|
function parseClientState6(json) {
|
|
10330
10383
|
if (!json) return null;
|
|
10331
10384
|
try {
|
|
@@ -10444,7 +10497,7 @@ function DailyQuizGame({
|
|
|
10444
10497
|
return /* @__PURE__ */ jsxs78("div", { className: "ss-g-screen", "data-game": "daily-quiz", "data-testid": "game-screen-daily-quiz", children: [
|
|
10445
10498
|
/* @__PURE__ */ jsx90(GameHeader, { title, eyebrow: s.questionOf(page + 1, total), onBack, backLabel: ui.back }),
|
|
10446
10499
|
/* @__PURE__ */ jsx90(SegmentProgress, { segments, ariaLabel: s.progressAria(page + 1, total) }),
|
|
10447
|
-
/* @__PURE__ */ jsx90("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs78(
|
|
10500
|
+
/* @__PURE__ */ jsx90("div", { className: "ss-g-body", children: current && /* @__PURE__ */ jsxs78(Fragment25, { children: [
|
|
10448
10501
|
/* @__PURE__ */ jsx90("h3", { className: "ss-g-dq-stem", children: current.stem }),
|
|
10449
10502
|
/* @__PURE__ */ jsx90("div", { className: "ss-g-dq-opts", children: current.options.map((opt, optIdx) => {
|
|
10450
10503
|
const selected = optIdx === selectedIdx;
|
|
@@ -10745,7 +10798,7 @@ function MatchdayPredictorGame({
|
|
|
10745
10798
|
|
|
10746
10799
|
// src/components/games/StartingXiGame.tsx
|
|
10747
10800
|
import { useId as useId8, useState as useState48 } from "react";
|
|
10748
|
-
import { Fragment as
|
|
10801
|
+
import { Fragment as Fragment26, jsx as jsx92, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
10749
10802
|
var POINTS_PER_STARTER = 8;
|
|
10750
10803
|
var XI_SIZE = 11;
|
|
10751
10804
|
var DEFAULT_FORMATION = "4-3-3";
|
|
@@ -10894,11 +10947,11 @@ function StartingXiGame({
|
|
|
10894
10947
|
})
|
|
10895
10948
|
] }),
|
|
10896
10949
|
/* @__PURE__ */ jsxs80("div", { className: "ss-g-xi-picker", children: [
|
|
10897
|
-
/* @__PURE__ */ jsx92("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs80(
|
|
10950
|
+
/* @__PURE__ */ jsx92("div", { className: "ss-g-xi-picker-head", children: activeSlot ? /* @__PURE__ */ jsxs80(Fragment26, { children: [
|
|
10898
10951
|
/* @__PURE__ */ jsx92(Chip, { variant: "badge", children: activeSlot.label }),
|
|
10899
10952
|
/* @__PURE__ */ jsx92("strong", { children: t.pickFor(activeSlot.label) })
|
|
10900
10953
|
] }) : /* @__PURE__ */ jsx92("strong", { children: t.allPicked }) }),
|
|
10901
|
-
activeSlot && /* @__PURE__ */ jsxs80(
|
|
10954
|
+
activeSlot && /* @__PURE__ */ jsxs80(Fragment26, { children: [
|
|
10902
10955
|
/* @__PURE__ */ jsx92(
|
|
10903
10956
|
SearchField,
|
|
10904
10957
|
{
|
|
@@ -11396,7 +11449,7 @@ function LeaderboardEmpty({
|
|
|
11396
11449
|
}
|
|
11397
11450
|
|
|
11398
11451
|
// src/components/Leaderboard.tsx
|
|
11399
|
-
import { Fragment as
|
|
11452
|
+
import { Fragment as Fragment27, jsx as jsx98, jsxs as jsxs85 } from "react/jsx-runtime";
|
|
11400
11453
|
function Leaderboard({
|
|
11401
11454
|
data,
|
|
11402
11455
|
ui,
|
|
@@ -11438,7 +11491,7 @@ function Leaderboard({
|
|
|
11438
11491
|
onPlay,
|
|
11439
11492
|
ui
|
|
11440
11493
|
}
|
|
11441
|
-
) : /* @__PURE__ */ jsxs85(
|
|
11494
|
+
) : /* @__PURE__ */ jsxs85(Fragment27, { children: [
|
|
11442
11495
|
/* @__PURE__ */ jsx98("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx98(
|
|
11443
11496
|
LeaderboardWeeklyRow,
|
|
11444
11497
|
{
|
|
@@ -11762,7 +11815,7 @@ function SquadStats({ stats, loading, ui, onSelectPlayer }) {
|
|
|
11762
11815
|
}
|
|
11763
11816
|
|
|
11764
11817
|
// src/components/Squad.tsx
|
|
11765
|
-
import { Fragment as
|
|
11818
|
+
import { Fragment as Fragment28, jsx as jsx104, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
11766
11819
|
function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, seasonName = null, competitionName = null, matchesPlayed = null, onSelectPlayer }) {
|
|
11767
11820
|
const eyebrow = view === "stats" ? statsEyebrow(ui, seasonName, competitionName, matchesPlayed) : null;
|
|
11768
11821
|
const toggle = /* @__PURE__ */ jsxs90("div", { className: "ss-w-sq-bar", children: [
|
|
@@ -11782,20 +11835,20 @@ function Squad({ squad, loading, ui, view, onToggleView, stats, statsLoading, se
|
|
|
11782
11835
|
)) })
|
|
11783
11836
|
] });
|
|
11784
11837
|
if (view === "stats") {
|
|
11785
|
-
return /* @__PURE__ */ jsxs90(
|
|
11838
|
+
return /* @__PURE__ */ jsxs90(Fragment28, { children: [
|
|
11786
11839
|
toggle,
|
|
11787
11840
|
/* @__PURE__ */ jsx104(SquadStats, { stats, loading: statsLoading, ui, onSelectPlayer })
|
|
11788
11841
|
] });
|
|
11789
11842
|
}
|
|
11790
|
-
if (squad === null && loading) return /* @__PURE__ */ jsxs90(
|
|
11843
|
+
if (squad === null && loading) return /* @__PURE__ */ jsxs90(Fragment28, { children: [
|
|
11791
11844
|
toggle,
|
|
11792
11845
|
/* @__PURE__ */ jsx104("div", { className: "ss-w-mon-list" })
|
|
11793
11846
|
] });
|
|
11794
|
-
if (squad === null || squad.length === 0) return /* @__PURE__ */ jsxs90(
|
|
11847
|
+
if (squad === null || squad.length === 0) return /* @__PURE__ */ jsxs90(Fragment28, { children: [
|
|
11795
11848
|
toggle,
|
|
11796
11849
|
/* @__PURE__ */ jsx104("div", { className: "ss-w-mon-empty", children: ui.clubSquadEmpty })
|
|
11797
11850
|
] });
|
|
11798
|
-
return /* @__PURE__ */ jsxs90(
|
|
11851
|
+
return /* @__PURE__ */ jsxs90(Fragment28, { children: [
|
|
11799
11852
|
toggle,
|
|
11800
11853
|
/* @__PURE__ */ jsx104("div", { className: "ss-w-mon-list", children: groupByPosition(squad).map((group, gi) => /* @__PURE__ */ jsxs90("div", { children: [
|
|
11801
11854
|
group.positionName && /* @__PURE__ */ jsx104("div", { className: "ss-w-club-eyebrow", children: positionLabel(ui, group.positionName) }),
|
|
@@ -11925,7 +11978,7 @@ function PerformanceBars({ performance, competitionName, strings }) {
|
|
|
11925
11978
|
}
|
|
11926
11979
|
|
|
11927
11980
|
// src/components/PlayerDetail.tsx
|
|
11928
|
-
import { Fragment as
|
|
11981
|
+
import { Fragment as Fragment29, jsx as jsx108, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
11929
11982
|
var DASH = "\u2014";
|
|
11930
11983
|
function ageFrom(dobMs) {
|
|
11931
11984
|
if (dobMs === null) return DASH;
|
|
@@ -12005,10 +12058,10 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
|
|
|
12005
12058
|
ui.clubPlayerBack
|
|
12006
12059
|
] });
|
|
12007
12060
|
if (detail === null) {
|
|
12008
|
-
return loading ? /* @__PURE__ */ jsxs92(
|
|
12061
|
+
return loading ? /* @__PURE__ */ jsxs92(Fragment29, { children: [
|
|
12009
12062
|
/* @__PURE__ */ jsx108("div", { className: "ss-w-pd-bar", children: back }),
|
|
12010
12063
|
/* @__PURE__ */ jsx108("div", { className: "ss-w-mon-list" })
|
|
12011
|
-
] }) : /* @__PURE__ */ jsxs92(
|
|
12064
|
+
] }) : /* @__PURE__ */ jsxs92(Fragment29, { children: [
|
|
12012
12065
|
/* @__PURE__ */ jsx108("div", { className: "ss-w-pd-bar", children: back }),
|
|
12013
12066
|
/* @__PURE__ */ jsx108("div", { className: "ss-w-mon-empty", children: ui.clubPlayerDetailEmpty })
|
|
12014
12067
|
] });
|
|
@@ -12023,7 +12076,7 @@ function PlayerDetail({ detail, loading, ui, seasonName, onClose }) {
|
|
|
12023
12076
|
const next = detail.nextFixture ?? null;
|
|
12024
12077
|
const availability = detail.availability ?? null;
|
|
12025
12078
|
const log = detail.matchLog ?? [];
|
|
12026
|
-
return /* @__PURE__ */ jsxs92(
|
|
12079
|
+
return /* @__PURE__ */ jsxs92(Fragment29, { children: [
|
|
12027
12080
|
/* @__PURE__ */ jsx108("div", { className: "ss-w-pd-bar", children: back }),
|
|
12028
12081
|
/* @__PURE__ */ jsxs92("div", { className: "ss-w-mon-list ss-w-pd-list", children: [
|
|
12029
12082
|
/* @__PURE__ */ jsxs92("div", { className: "ss-w-pd-card ss-w-pd-profile", children: [
|
|
@@ -12101,8 +12154,8 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
|
|
|
12101
12154
|
}
|
|
12102
12155
|
|
|
12103
12156
|
// src/components/PresetTools.tsx
|
|
12104
|
-
import { Fragment as
|
|
12105
|
-
import { Fragment as
|
|
12157
|
+
import { Fragment as Fragment30, useEffect as useEffect33, useId as useId11, useRef as useRef29, useState as useState55 } from "react";
|
|
12158
|
+
import { Fragment as Fragment31, jsx as jsx110, jsxs as jsxs94 } from "react/jsx-runtime";
|
|
12106
12159
|
var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
12107
12160
|
function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
12108
12161
|
const dialogRef = useRef29(null);
|
|
@@ -12152,7 +12205,7 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
|
|
|
12152
12205
|
function fillTemplate(template, slots) {
|
|
12153
12206
|
return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
|
|
12154
12207
|
const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
|
|
12155
|
-
return /* @__PURE__ */ jsx110(
|
|
12208
|
+
return /* @__PURE__ */ jsx110(Fragment30, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
|
|
12156
12209
|
});
|
|
12157
12210
|
}
|
|
12158
12211
|
function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
|
|
@@ -12193,7 +12246,7 @@ function PickList({ picks, formatKickoff }) {
|
|
|
12193
12246
|
] }, p.matchOddsId)) });
|
|
12194
12247
|
}
|
|
12195
12248
|
function ComboPreview({ cell: cell2, formatKickoff }) {
|
|
12196
|
-
return /* @__PURE__ */ jsxs94(
|
|
12249
|
+
return /* @__PURE__ */ jsxs94(Fragment31, { children: [
|
|
12197
12250
|
/* @__PURE__ */ jsx110(PickList, { picks: cell2.combo.legs, formatKickoff }),
|
|
12198
12251
|
/* @__PURE__ */ jsx110("div", { className: "ss-w-tool-math", children: cell2.combo.multiplication })
|
|
12199
12252
|
] });
|
|
@@ -12491,7 +12544,7 @@ function markToolSeen() {
|
|
|
12491
12544
|
}
|
|
12492
12545
|
|
|
12493
12546
|
// src/components/ChatPanel.tsx
|
|
12494
|
-
import { Fragment as
|
|
12547
|
+
import { Fragment as Fragment32, jsx as jsx111, jsxs as jsxs95 } from "react/jsx-runtime";
|
|
12495
12548
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
12496
12549
|
function useIsModal() {
|
|
12497
12550
|
const [modal, setModal] = useState57(false);
|
|
@@ -12670,7 +12723,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
12670
12723
|
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx111(OddsPanel, { monitor, ui, slip }),
|
|
12671
12724
|
monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */ jsx111(Fixtures, { fixtures: clubFixturesResult?.fixtures ?? [], loading: clubFixturesResult?.loading ?? false, ui }),
|
|
12672
12725
|
monitor && monitor.activeTab === "standings" && /* @__PURE__ */ jsx111(Standings, { standings: clubStandingsResult?.data ?? null, loading: clubStandingsResult?.loading ?? false, ui }),
|
|
12673
|
-
monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsxs95(
|
|
12726
|
+
monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsxs95(Fragment32, { children: [
|
|
12674
12727
|
/* @__PURE__ */ jsx111(
|
|
12675
12728
|
"div",
|
|
12676
12729
|
{
|
|
@@ -12712,7 +12765,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
|
|
|
12712
12765
|
}
|
|
12713
12766
|
}
|
|
12714
12767
|
),
|
|
12715
|
-
(!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs95(
|
|
12768
|
+
(!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs95(Fragment32, { children: [
|
|
12716
12769
|
/* @__PURE__ */ jsx111("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
|
|
12717
12770
|
paused ? null : /* @__PURE__ */ jsx111(
|
|
12718
12771
|
ChatInput,
|
|
@@ -13475,7 +13528,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13475
13528
|
}
|
|
13476
13529
|
|
|
13477
13530
|
/* greeting dashboard */
|
|
13478
|
-
.ss-w-dash { display: flex; flex-direction: column; gap: 12px; padding: 4px 0; }
|
|
13531
|
+
.ss-w-dash { display: flex; flex-direction: column; gap: 12px; padding: 4px 0; container-type: inline-size; }
|
|
13479
13532
|
.ss-w-dash-head { display: flex; flex-direction: column; }
|
|
13480
13533
|
.ss-w-dash-title { font-size: 18px; font-weight: 700; line-height: 1.25; color: var(--ss-w-ink); }
|
|
13481
13534
|
.ss-w-dash-subtitle { font-size: 13px; color: var(--ss-w-faint); margin-top: 4px; }
|
|
@@ -13496,8 +13549,8 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13496
13549
|
.ss-w-dash-tile-icon { flex: none; display: grid; place-items: center; width: 28px; height: 28px; font-size: 22px; }
|
|
13497
13550
|
.ss-w-dash-emoji { line-height: 1; }
|
|
13498
13551
|
.ss-w-dash-tile-body { min-width: 0; display: flex; flex-direction: column; gap: 2px; flex: 1; }
|
|
13499
|
-
.ss-w-dash-tile-title { min-width: 0; font-weight: 600; font-size: 14px; overflow-wrap:
|
|
13500
|
-
.ss-w-dash-tile-subtitle { min-width: 0; font-size: 11.5px; color: var(--ss-w-faint); overflow-wrap:
|
|
13552
|
+
.ss-w-dash-tile-title { min-width: 0; font-weight: 600; font-size: 14px; overflow-wrap: break-word; hyphens: manual; }
|
|
13553
|
+
.ss-w-dash-tile-subtitle { min-width: 0; font-size: 11.5px; color: var(--ss-w-faint); overflow-wrap: break-word; hyphens: manual; }
|
|
13501
13554
|
.ss-w-dash-tile-chevron { flex: none; margin-left: auto; width: 14px; height: 14px; color: var(--ss-w-faint); }
|
|
13502
13555
|
|
|
13503
13556
|
/* Badge + crests share their own row, below the title -- NOT the icon/chevron row. A
|
|
@@ -13519,6 +13572,18 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13519
13572
|
families (.ss-w-binsight, .ss-w-mocard, .ss-w-omcard) so a market tile reads as
|
|
13520
13573
|
part of that visual language rather than a plain unstyled button. */
|
|
13521
13574
|
.ss-w-dash--market .ss-w-dash-tile { border-left: 3px solid var(--ss-w-accent); }
|
|
13575
|
+
/* Market's two columns need the text column to fit a word: a half tile spends ~91px on border, padding,
|
|
13576
|
+
icon and chevron, and a Turkish word such as "kar\u015F\u0131la\u015Fma" is ~80px at 14px bold. Measured against the
|
|
13577
|
+
dashboard's own width (a container query, not the viewport, since the panel is min(460px, 100vw - 40px)
|
|
13578
|
+
and a host can embed it narrower still). Below 306px the half tiles are a single full-width column;
|
|
13579
|
+
up to 349px the decorative chevron is dropped, as Discovery already does, to give the words ~24px back.
|
|
13580
|
+
Words never break inside a tile (overflow-wrap: break-word), so the column count is what protects them. */
|
|
13581
|
+
@container (max-width: 305px) {
|
|
13582
|
+
.ss-w-dash--market .ss-w-dash-grid { grid-template-columns: minmax(0, 1fr); }
|
|
13583
|
+
}
|
|
13584
|
+
@container (min-width: 306px) and (max-width: 349px) {
|
|
13585
|
+
.ss-w-dash--market .ss-w-dash-tile--half .ss-w-dash-tile-chevron { display: none; }
|
|
13586
|
+
}
|
|
13522
13587
|
|
|
13523
13588
|
/* Goal: one column of compact cards, 60px tall with the badge as a price column on the right.
|
|
13524
13589
|
The value ink is accent mixed toward ink (as on the hero price): plain light accent on the
|
|
@@ -13539,7 +13604,8 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13539
13604
|
/* Discovery: tinted bento cards. Stacked (icon over text) so a two- or three-word title gets
|
|
13540
13605
|
the tile's full width instead of the ~100px left of a horizontal icon+chevron -- that narrow
|
|
13541
13606
|
column was wrapping "Most interesting angles" onto three lines. The chevron is dropped (the
|
|
13542
|
-
whole card is the tap target)
|
|
13607
|
+
whole card is the tap target). The badge + crest row wraps (the base .ss-w-dash-tile-meta rule): an
|
|
13608
|
+
"8 matches" pill plus three crests is wider than a half tile at a 320px viewport. */
|
|
13543
13609
|
.ss-w-dash--discovery .ss-w-dash-tile { flex-direction: column; align-items: stretch; gap: 8px; }
|
|
13544
13610
|
.ss-w-dash--discovery .ss-w-dash-tile-icon { align-self: flex-start; width: 32px; height: 32px; font-size: 26px; }
|
|
13545
13611
|
.ss-w-dash--discovery .ss-w-dash-tile-chevron { display: none; }
|
|
@@ -13547,7 +13613,6 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13547
13613
|
(horizontal, centre-aligned) rather than stacking like the narrow half tiles. */
|
|
13548
13614
|
.ss-w-dash--discovery .ss-w-dash-tile--full { flex-direction: row; align-items: center; }
|
|
13549
13615
|
.ss-w-dash--discovery .ss-w-dash-tile--full .ss-w-dash-tile-icon { align-self: center; }
|
|
13550
|
-
.ss-w-dash--discovery .ss-w-dash-tile-meta { flex-wrap: nowrap; }
|
|
13551
13616
|
.ss-w-dash--discovery .ss-w-dash-tile-crest { width: 22px; height: 22px; }
|
|
13552
13617
|
/* Tints mix a hue into the live panel rather than hardcoding a light pastel, so a dark
|
|
13553
13618
|
operator surface (e.g. --ss-w-panel set from a navy \`surface\` brand color) yields a
|
|
@@ -13600,8 +13665,8 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13600
13665
|
background: color-mix(in srgb, var(--ss-w-accent) 14%, var(--ss-w-panel));
|
|
13601
13666
|
}
|
|
13602
13667
|
.ss-w-dash-hero-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
|
|
13603
|
-
.ss-w-dash-hero-title { font-size: 15.5px; font-weight: 700; line-height: 1.25; color: var(--ss-w-ink); overflow-wrap:
|
|
13604
|
-
.ss-w-dash-hero-subtitle { font-size: 12px; color: var(--ss-w-faint); overflow-wrap:
|
|
13668
|
+
.ss-w-dash-hero-title { font-size: 15.5px; font-weight: 700; line-height: 1.25; color: var(--ss-w-ink); overflow-wrap: break-word; hyphens: manual; }
|
|
13669
|
+
.ss-w-dash-hero-subtitle { font-size: 12px; color: var(--ss-w-faint); overflow-wrap: break-word; hyphens: manual; }
|
|
13605
13670
|
.ss-w-dash-hero-price {
|
|
13606
13671
|
flex: none; margin-left: auto;
|
|
13607
13672
|
font-family: ui-monospace, monospace; font-variant-numeric: tabular-nums; font-size: 15px; font-weight: 750; line-height: 1;
|
|
@@ -13610,6 +13675,34 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
13610
13675
|
border: 1px solid color-mix(in srgb, var(--ss-w-accent) 30%, var(--ss-w-panel));
|
|
13611
13676
|
}
|
|
13612
13677
|
|
|
13678
|
+
/* Page-grounded additions (u591). Both only exist when the server sends \`meta\` / \`imageCodes\`, so an
|
|
13679
|
+
older payload never reaches these rules. */
|
|
13680
|
+
/* Hero meta ("Tip-off 02:30 \xB7 in 6 h", "Ba\u015Flama 02:30 \xB7 40 dk sonra"): takes the price's seat in the top
|
|
13681
|
+
row. It is the one flexible item there -- the badge and chevron keep their width -- and it wraps
|
|
13682
|
+
rather than truncates: at the narrowest panel the Turkish line (27 characters) has ~120px beside
|
|
13683
|
+
the badge, and the minutes-to-tip are the part a cut-off "40..." would lose. The component keeps
|
|
13684
|
+
each short " \xB7 "-separated part whole, so a wrap falls at the dot instead of inside "40 dk sonra". */
|
|
13685
|
+
.ss-w-dash__keep { white-space: nowrap; }
|
|
13686
|
+
.ss-w-dash__meta {
|
|
13687
|
+
flex: 1 1 auto; min-width: 0; text-align: right; overflow-wrap: break-word; hyphens: manual;
|
|
13688
|
+
font-size: 11.5px; font-weight: 600; line-height: 1.2; font-variant-numeric: tabular-nums;
|
|
13689
|
+
color: var(--ss-w-faint);
|
|
13690
|
+
}
|
|
13691
|
+
/* Text marks stand in for crests until the server has images: 22px circle / 7.5px in a tile, 40px /
|
|
13692
|
+
12px in the hero (u592 D23). Ring and tint follow the crests they replace; unlike crests they do not
|
|
13693
|
+
overlap, because the letters are the content and an overlap would clip the first one. */
|
|
13694
|
+
.ss-w-dash__mark {
|
|
13695
|
+
flex: none; display: grid; place-items: center; box-sizing: border-box;
|
|
13696
|
+
width: 22px; height: 22px; border-radius: 50%; overflow: hidden;
|
|
13697
|
+
font-size: 7.5px; font-weight: 700; line-height: 1; letter-spacing: .02em; white-space: nowrap;
|
|
13698
|
+
color: var(--ss-w-ink);
|
|
13699
|
+
background-color: color-mix(in srgb, var(--ss-w-ink) 6%, var(--ss-w-panel));
|
|
13700
|
+
box-shadow: 0 0 0 2px var(--ss-w-panel), 0 0 0 3px color-mix(in srgb, var(--ss-w-ink) 10%, var(--ss-w-panel));
|
|
13701
|
+
}
|
|
13702
|
+
.ss-w-dash__mark + .ss-w-dash__mark { margin-left: 3px; }
|
|
13703
|
+
.ss-w-dash-hero-visual .ss-w-dash__mark { width: 40px; height: 40px; font-size: 12px; }
|
|
13704
|
+
.ss-w-dash-hero-visual .ss-w-dash__mark + .ss-w-dash__mark { margin-left: 6px; }
|
|
13705
|
+
|
|
13613
13706
|
/* club fan pre-match dashboard */
|
|
13614
13707
|
.ss-w-fandash { display: flex; flex-direction: column; gap: 10px; padding: 4px 0; }
|
|
13615
13708
|
.ss-w-fandash-greeting { font-size: 14px; font-weight: 600; line-height: 1.3; color: var(--ss-w-ink); }
|
|
@@ -14881,7 +14974,7 @@ function StatsWidget(props) {
|
|
|
14881
14974
|
introDoneRef.current = true;
|
|
14882
14975
|
}, []);
|
|
14883
14976
|
const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
|
|
14884
|
-
const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
|
|
14977
|
+
const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey, cfg?.page);
|
|
14885
14978
|
const [hasToday, setHasToday] = useState58(false);
|
|
14886
14979
|
const liveCardWatches = useMemo7(() => {
|
|
14887
14980
|
const seen = /* @__PURE__ */ new Set();
|