@sensiblestats/widget-react 0.33.3 → 0.35.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 +18 -0
- package/dist/index.cjs +695 -670
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +505 -480
- package/dist/index.js.map +1 -1
- package/dist/styles.css +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -165,6 +165,11 @@ function normalizeUi(cfg) {
|
|
|
165
165
|
return {
|
|
166
166
|
theme: cfg.theme ?? "auto",
|
|
167
167
|
accent: cfg.accent,
|
|
168
|
+
logoUrl: cfg.logoUrl,
|
|
169
|
+
headerTitle: cfg.headerTitle,
|
|
170
|
+
cta: cfg.cta,
|
|
171
|
+
surface: cfg.surface,
|
|
172
|
+
ink: cfg.ink,
|
|
168
173
|
position: cfg.position ?? "right",
|
|
169
174
|
offset: { x: cfg.offset?.x ?? 20, y: cfg.offset?.y ?? 20 },
|
|
170
175
|
radius: cfg.radius ?? 16,
|
|
@@ -303,6 +308,14 @@ function themeAttrs(ui) {
|
|
|
303
308
|
"--ss-w-radius": `${ui.radius}px`
|
|
304
309
|
};
|
|
305
310
|
if (ui.accent) style["--ss-w-accent"] = ui.accent;
|
|
311
|
+
if (ui.cta) style["--ss-w-cta"] = ui.cta;
|
|
312
|
+
if (ui.surface) style["--ss-w-panel"] = ui.surface;
|
|
313
|
+
if (ui.ink) style["--ss-w-ink"] = ui.ink;
|
|
314
|
+
if (ui.surface && ui.ink) {
|
|
315
|
+
style["--ss-w-bubble"] = "color-mix(in srgb, var(--ss-w-ink) 5%, var(--ss-w-panel))";
|
|
316
|
+
style["--ss-w-line"] = "color-mix(in srgb, var(--ss-w-ink) 12%, var(--ss-w-panel))";
|
|
317
|
+
style["--ss-w-faint"] = "color-mix(in srgb, var(--ss-w-ink) 55%, var(--ss-w-panel))";
|
|
318
|
+
}
|
|
306
319
|
return { "data-ss-w-theme": ui.theme, "data-ss-w-pos": ui.position, style };
|
|
307
320
|
}
|
|
308
321
|
|
|
@@ -1144,6 +1157,9 @@ function useLiveMonitor(opts) {
|
|
|
1144
1157
|
};
|
|
1145
1158
|
}
|
|
1146
1159
|
|
|
1160
|
+
// src/components/BrandMark.tsx
|
|
1161
|
+
import { useState as useState2 } from "react";
|
|
1162
|
+
|
|
1147
1163
|
// src/assets/logo.ts
|
|
1148
1164
|
var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
|
|
1149
1165
|
|
|
@@ -1181,35 +1197,43 @@ function DashboardIcon({ name }) {
|
|
|
1181
1197
|
return /* @__PURE__ */ jsx("span", { className: "ss-w-dash-emoji", "aria-hidden": "true", children: glyph });
|
|
1182
1198
|
}
|
|
1183
1199
|
|
|
1200
|
+
// src/components/BrandMark.tsx
|
|
1201
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
1202
|
+
function BrandMark({ logoUrl, className }) {
|
|
1203
|
+
const [failed, setFailed] = useState2(false);
|
|
1204
|
+
if (!logoUrl || failed) return /* @__PURE__ */ jsx2(SsMark, { className });
|
|
1205
|
+
return /* @__PURE__ */ jsx2("img", { className, src: logoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1184
1208
|
// src/components/GreetingBubble.tsx
|
|
1185
|
-
import { jsx as
|
|
1209
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
1186
1210
|
function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
|
|
1187
1211
|
return /* @__PURE__ */ jsxs("div", { className: "ss-w-greeting", role: "note", children: [
|
|
1188
|
-
/* @__PURE__ */
|
|
1189
|
-
onDismiss ? /* @__PURE__ */
|
|
1212
|
+
/* @__PURE__ */ jsx3("button", { type: "button", className: "ss-w-greeting-body", onClick: onOpen, children: text }),
|
|
1213
|
+
onDismiss ? /* @__PURE__ */ jsx3("button", { type: "button", className: "ss-w-greeting-x", "aria-label": dismissLabel, onClick: onDismiss, children: "\xD7" }) : null
|
|
1190
1214
|
] });
|
|
1191
1215
|
}
|
|
1192
1216
|
|
|
1193
1217
|
// src/components/ChatFab.tsx
|
|
1194
|
-
import { jsx as
|
|
1195
|
-
function ChatFab({ label, greeting, popupText, onOpen, onDismissPopup, dismissLabel = "Dismiss" }) {
|
|
1218
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1219
|
+
function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup, dismissLabel = "Dismiss" }) {
|
|
1196
1220
|
const bubble = popupText ?? greeting;
|
|
1197
1221
|
return /* @__PURE__ */ jsxs2("div", { className: "ss-w-fab-wrap", children: [
|
|
1198
|
-
bubble ? /* @__PURE__ */
|
|
1199
|
-
/* @__PURE__ */
|
|
1222
|
+
bubble ? /* @__PURE__ */ jsx4(GreetingBubble, { text: bubble, onOpen, onDismiss: popupText ? onDismissPopup : void 0, dismissLabel }) : null,
|
|
1223
|
+
/* @__PURE__ */ jsx4("button", { type: "button", className: "ss-w-fab", "aria-label": label, onClick: onOpen, children: /* @__PURE__ */ jsx4(BrandMark, { logoUrl, className: "ss-w-fab-mark" }) })
|
|
1200
1224
|
] });
|
|
1201
1225
|
}
|
|
1202
1226
|
|
|
1203
1227
|
// src/components/ChatPanel.tsx
|
|
1204
|
-
import { useEffect as useEffect8, useState as
|
|
1228
|
+
import { useEffect as useEffect8, useState as useState16 } from "react";
|
|
1205
1229
|
|
|
1206
1230
|
// src/components/ChatHeader.tsx
|
|
1207
|
-
import { jsx as
|
|
1208
|
-
function ChatHeader({ onClose, closeLabel = "Close chat" }) {
|
|
1231
|
+
import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1232
|
+
function ChatHeader({ onClose, closeLabel = "Close chat", logoUrl, headerTitle }) {
|
|
1209
1233
|
return /* @__PURE__ */ jsxs3("header", { className: "ss-w-header", children: [
|
|
1210
|
-
/* @__PURE__ */
|
|
1211
|
-
/* @__PURE__ */
|
|
1212
|
-
/* @__PURE__ */
|
|
1234
|
+
/* @__PURE__ */ jsx5(BrandMark, { logoUrl, className: "ss-w-header-mark" }),
|
|
1235
|
+
/* @__PURE__ */ jsx5("span", { className: "ss-w-header-title", children: headerTitle ?? "SensibleStats" }),
|
|
1236
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "ss-w-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, {}) })
|
|
1213
1237
|
] });
|
|
1214
1238
|
}
|
|
1215
1239
|
|
|
@@ -1219,21 +1243,21 @@ import { useEffect as useEffect7, useRef as useRef5 } from "react";
|
|
|
1219
1243
|
// src/components/Markdown.tsx
|
|
1220
1244
|
import ReactMarkdown from "react-markdown";
|
|
1221
1245
|
import remarkGfm from "remark-gfm";
|
|
1222
|
-
import { jsx as
|
|
1246
|
+
import { jsx as jsx6 } from "react/jsx-runtime";
|
|
1223
1247
|
var components = {
|
|
1224
|
-
a: ({ children, href }) => /* @__PURE__ */
|
|
1225
|
-
table: ({ children }) => /* @__PURE__ */
|
|
1226
|
-
ul: ({ children }) => /* @__PURE__ */
|
|
1227
|
-
ol: ({ children }) => /* @__PURE__ */
|
|
1228
|
-
code: ({ children }) => /* @__PURE__ */
|
|
1248
|
+
a: ({ children, href }) => /* @__PURE__ */ jsx6("a", { href, target: "_blank", rel: "noopener noreferrer", className: "ss-w-md-link", children }),
|
|
1249
|
+
table: ({ children }) => /* @__PURE__ */ jsx6("div", { className: "ss-w-table-wrap", children: /* @__PURE__ */ jsx6("table", { className: "ss-w-md-table", children }) }),
|
|
1250
|
+
ul: ({ children }) => /* @__PURE__ */ jsx6("ul", { className: "ss-w-md-ul", children }),
|
|
1251
|
+
ol: ({ children }) => /* @__PURE__ */ jsx6("ol", { className: "ss-w-md-ol", children }),
|
|
1252
|
+
code: ({ children }) => /* @__PURE__ */ jsx6("code", { className: "ss-w-md-code", children })
|
|
1229
1253
|
};
|
|
1230
1254
|
function Markdown({ text }) {
|
|
1231
|
-
return /* @__PURE__ */
|
|
1255
|
+
return /* @__PURE__ */ jsx6("div", { className: "ss-w-md", children: /* @__PURE__ */ jsx6(ReactMarkdown, { remarkPlugins: [remarkGfm], components, children: text }) });
|
|
1232
1256
|
}
|
|
1233
1257
|
|
|
1234
1258
|
// src/components/EntityCardList.tsx
|
|
1235
|
-
import { useState as
|
|
1236
|
-
import { jsx as
|
|
1259
|
+
import { useState as useState3 } from "react";
|
|
1260
|
+
import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1237
1261
|
var MAX_VISIBLE = 3;
|
|
1238
1262
|
var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
|
|
1239
1263
|
function initials(name) {
|
|
@@ -1243,7 +1267,7 @@ function shortSeason(season) {
|
|
|
1243
1267
|
return season.replace(/\d{4}/g, (year) => year.slice(2));
|
|
1244
1268
|
}
|
|
1245
1269
|
function Crest({ image, label }) {
|
|
1246
|
-
return /* @__PURE__ */
|
|
1270
|
+
return /* @__PURE__ */ jsx7(
|
|
1247
1271
|
"span",
|
|
1248
1272
|
{
|
|
1249
1273
|
className: "ss-w-ecard-crest",
|
|
@@ -1255,33 +1279,33 @@ function Crest({ image, label }) {
|
|
|
1255
1279
|
function FormBar({ w, d, l }) {
|
|
1256
1280
|
if (w + d + l === 0) return null;
|
|
1257
1281
|
return /* @__PURE__ */ jsxs4("span", { className: "ss-w-form", "aria-hidden": "true", children: [
|
|
1258
|
-
w > 0 ? /* @__PURE__ */
|
|
1259
|
-
d > 0 ? /* @__PURE__ */
|
|
1260
|
-
l > 0 ? /* @__PURE__ */
|
|
1282
|
+
w > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-w", style: { flexGrow: w } }) : null,
|
|
1283
|
+
d > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-d", style: { flexGrow: d } }) : null,
|
|
1284
|
+
l > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-l", style: { flexGrow: l } }) : null
|
|
1261
1285
|
] });
|
|
1262
1286
|
}
|
|
1263
1287
|
function StatCellView({ s }) {
|
|
1264
1288
|
const m = RECORD_RE.exec(s.value);
|
|
1265
1289
|
if (m) {
|
|
1266
1290
|
return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-cell", children: [
|
|
1267
|
-
/* @__PURE__ */
|
|
1268
|
-
/* @__PURE__ */
|
|
1291
|
+
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-cval", children: /* @__PURE__ */ jsx7(FormBar, { w: Number(m[1]), d: Number(m[2]), l: Number(m[3]) }) }),
|
|
1292
|
+
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.value })
|
|
1269
1293
|
] });
|
|
1270
1294
|
}
|
|
1271
1295
|
return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-cell", children: [
|
|
1272
|
-
/* @__PURE__ */
|
|
1273
|
-
/* @__PURE__ */
|
|
1296
|
+
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-cval", children: s.value }),
|
|
1297
|
+
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.label })
|
|
1274
1298
|
] });
|
|
1275
1299
|
}
|
|
1276
1300
|
function StatStrip({ stats }) {
|
|
1277
1301
|
if (stats.length === 0) return null;
|
|
1278
1302
|
const cols = Math.min(stats.length, 4);
|
|
1279
|
-
return /* @__PURE__ */
|
|
1303
|
+
return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard-strip", style: { gridTemplateColumns: `repeat(${cols}, 1fr)` }, children: stats.map((s) => /* @__PURE__ */ jsx7(StatCellView, { s }, s.label + s.value)) });
|
|
1280
1304
|
}
|
|
1281
1305
|
function CardHeader({ c, showScopeCrest }) {
|
|
1282
1306
|
const onlyScope = c.scopes.length === 1 ? c.scopes[0] : null;
|
|
1283
1307
|
return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-hd", children: [
|
|
1284
|
-
/* @__PURE__ */
|
|
1308
|
+
/* @__PURE__ */ jsx7(
|
|
1285
1309
|
"span",
|
|
1286
1310
|
{
|
|
1287
1311
|
className: c.kind === "team" ? "ss-w-thumb ss-w-team" : "ss-w-thumb",
|
|
@@ -1290,17 +1314,17 @@ function CardHeader({ c, showScopeCrest }) {
|
|
|
1290
1314
|
}
|
|
1291
1315
|
),
|
|
1292
1316
|
/* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-idtext", children: [
|
|
1293
|
-
/* @__PURE__ */
|
|
1294
|
-
c.sub ? /* @__PURE__ */
|
|
1317
|
+
/* @__PURE__ */ jsx7("span", { className: "ss-w-nm", children: c.name }),
|
|
1318
|
+
c.sub ? /* @__PURE__ */ jsx7("span", { className: "ss-w-sub", children: c.sub }) : null
|
|
1295
1319
|
] }),
|
|
1296
1320
|
/* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-meta", children: [
|
|
1297
|
-
showScopeCrest && onlyScope?.image ? /* @__PURE__ */
|
|
1298
|
-
c.season ? /* @__PURE__ */
|
|
1321
|
+
showScopeCrest && onlyScope?.image ? /* @__PURE__ */ jsx7(Crest, { image: onlyScope.image, label: onlyScope.label }) : null,
|
|
1322
|
+
c.season ? /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-season", children: shortSeason(c.season) }) : null
|
|
1299
1323
|
] })
|
|
1300
1324
|
] });
|
|
1301
1325
|
}
|
|
1302
1326
|
function ScopeTabs({ scopes, active, onSelect }) {
|
|
1303
|
-
return /* @__PURE__ */
|
|
1327
|
+
return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard-scopes", role: "tablist", children: scopes.map((s, i) => /* @__PURE__ */ jsx7(
|
|
1304
1328
|
"button",
|
|
1305
1329
|
{
|
|
1306
1330
|
type: "button",
|
|
@@ -1310,46 +1334,46 @@ function ScopeTabs({ scopes, active, onSelect }) {
|
|
|
1310
1334
|
"aria-label": s.label,
|
|
1311
1335
|
title: s.label,
|
|
1312
1336
|
onClick: () => onSelect(i),
|
|
1313
|
-
children: s.image ? /* @__PURE__ */
|
|
1337
|
+
children: s.image ? /* @__PURE__ */ jsx7(Crest, { image: s.image }) : s.label
|
|
1314
1338
|
},
|
|
1315
1339
|
String(s.competitionId ?? "all")
|
|
1316
1340
|
)) });
|
|
1317
1341
|
}
|
|
1318
1342
|
function EntityCardItem({ c }) {
|
|
1319
|
-
const [active, setActive] =
|
|
1343
|
+
const [active, setActive] = useState3(0);
|
|
1320
1344
|
const hasBody = c.scopes.length > 0;
|
|
1321
1345
|
if (!hasBody) {
|
|
1322
|
-
return /* @__PURE__ */
|
|
1346
|
+
return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: /* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: false }) });
|
|
1323
1347
|
}
|
|
1324
1348
|
const multi = c.scopes.length > 1;
|
|
1325
1349
|
const scope = c.scopes[multi ? c.scopes[active] ? active : 0 : 0];
|
|
1326
1350
|
return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard", "data-kind": c.kind, children: [
|
|
1327
|
-
/* @__PURE__ */
|
|
1328
|
-
multi ? /* @__PURE__ */
|
|
1329
|
-
/* @__PURE__ */
|
|
1351
|
+
/* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: !multi }),
|
|
1352
|
+
multi ? /* @__PURE__ */ jsx7(ScopeTabs, { scopes: c.scopes, active, onSelect: setActive }) : null,
|
|
1353
|
+
/* @__PURE__ */ jsx7(StatStrip, { stats: scope.stats })
|
|
1330
1354
|
] });
|
|
1331
1355
|
}
|
|
1332
1356
|
function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMoreLabel = (n) => `Show ${n} more` }) {
|
|
1333
|
-
const [expanded, setExpanded] =
|
|
1357
|
+
const [expanded, setExpanded] = useState3(false);
|
|
1334
1358
|
if (cards.length === 0) return null;
|
|
1335
1359
|
const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
|
|
1336
1360
|
const overflow = cards.length - MAX_VISIBLE;
|
|
1337
1361
|
return /* @__PURE__ */ jsxs4("div", { className: "ss-w-cards", children: [
|
|
1338
|
-
visible.map((c) => /* @__PURE__ */
|
|
1339
|
-
overflow > 0 ? /* @__PURE__ */
|
|
1362
|
+
visible.map((c) => /* @__PURE__ */ jsx7(EntityCardItem, { c }, c.id)),
|
|
1363
|
+
overflow > 0 ? /* @__PURE__ */ jsx7("button", { type: "button", className: "ss-w-cards-more", disabled, onClick: () => setExpanded((v) => !v), children: expanded ? showLessLabel : showMoreLabel(overflow) }) : null
|
|
1340
1364
|
] });
|
|
1341
1365
|
}
|
|
1342
1366
|
|
|
1343
1367
|
// src/components/BettingInsightList.tsx
|
|
1344
|
-
import { useState as
|
|
1368
|
+
import { useState as useState7 } from "react";
|
|
1345
1369
|
|
|
1346
1370
|
// src/components/AddToSlipButton.tsx
|
|
1347
|
-
import { useCallback as useCallback3, useState as
|
|
1371
|
+
import { useCallback as useCallback3, useState as useState4 } from "react";
|
|
1348
1372
|
import { isAddToSlipResult } from "@sensiblestats/widget-sdk";
|
|
1349
1373
|
|
|
1350
1374
|
// src/components/Toast.tsx
|
|
1351
1375
|
import { useEffect as useEffect4 } from "react";
|
|
1352
|
-
import { jsx as
|
|
1376
|
+
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
1353
1377
|
var DISMISS_MS = 4e3;
|
|
1354
1378
|
function Toast({ toast, onDismiss }) {
|
|
1355
1379
|
useEffect4(() => {
|
|
@@ -1358,11 +1382,11 @@ function Toast({ toast, onDismiss }) {
|
|
|
1358
1382
|
return () => clearTimeout(timer);
|
|
1359
1383
|
}, [toast, onDismiss]);
|
|
1360
1384
|
if (!toast) return null;
|
|
1361
|
-
return /* @__PURE__ */
|
|
1385
|
+
return /* @__PURE__ */ jsx8("div", { className: `ss-w-toast ss-w-toast-${toast.kind}`, role: "status", "aria-live": "polite", children: toast.text });
|
|
1362
1386
|
}
|
|
1363
1387
|
|
|
1364
1388
|
// src/components/AddToSlipButton.tsx
|
|
1365
|
-
import { jsx as
|
|
1389
|
+
import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1366
1390
|
function withTimeout(value) {
|
|
1367
1391
|
return Promise.race([
|
|
1368
1392
|
value,
|
|
@@ -1370,9 +1394,9 @@ function withTimeout(value) {
|
|
|
1370
1394
|
]);
|
|
1371
1395
|
}
|
|
1372
1396
|
function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
|
|
1373
|
-
const [pending, setPending] =
|
|
1374
|
-
const [settled, setSettled] =
|
|
1375
|
-
const [toast, setToast] =
|
|
1397
|
+
const [pending, setPending] = useState4(false);
|
|
1398
|
+
const [settled, setSettled] = useState4(false);
|
|
1399
|
+
const [toast, setToast] = useState4(null);
|
|
1376
1400
|
const dismiss = useCallback3(() => setToast(null), []);
|
|
1377
1401
|
const handler = slip.onAddToSlip;
|
|
1378
1402
|
if (!ui || !handler || !selection) return null;
|
|
@@ -1397,7 +1421,7 @@ function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
|
|
|
1397
1421
|
}
|
|
1398
1422
|
};
|
|
1399
1423
|
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-slip", children: [
|
|
1400
|
-
/* @__PURE__ */
|
|
1424
|
+
/* @__PURE__ */ jsx9(
|
|
1401
1425
|
"button",
|
|
1402
1426
|
{
|
|
1403
1427
|
type: "button",
|
|
@@ -1407,16 +1431,16 @@ function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
|
|
|
1407
1431
|
children: settled ? ui.inSlip : ui.addToSlip
|
|
1408
1432
|
}
|
|
1409
1433
|
),
|
|
1410
|
-
/* @__PURE__ */
|
|
1434
|
+
/* @__PURE__ */ jsx9(Toast, { toast, onDismiss: dismiss })
|
|
1411
1435
|
] });
|
|
1412
1436
|
}
|
|
1413
1437
|
function AddToSlipButton({ it, slip, ui }) {
|
|
1414
1438
|
const selection = it.addToSlipEnabled ? toSlipSelection(it, slip.conversationId) : null;
|
|
1415
|
-
return /* @__PURE__ */
|
|
1439
|
+
return /* @__PURE__ */ jsx9(SlipButton, { selection, shownOdds: it.odds ?? "", marketName: it.market, slip, ui });
|
|
1416
1440
|
}
|
|
1417
1441
|
|
|
1418
1442
|
// src/components/OddsMovementBadge.tsx
|
|
1419
|
-
import { jsx as
|
|
1443
|
+
import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1420
1444
|
function OddsMovementBadge({
|
|
1421
1445
|
previous,
|
|
1422
1446
|
current,
|
|
@@ -1430,32 +1454,32 @@ function OddsMovementBadge({
|
|
|
1430
1454
|
// Strikethrough is invisible to screen readers, so the whole was/now/direction sentence rides
|
|
1431
1455
|
// on one aria-label and the visual glyphs are hidden from the accessibility tree.
|
|
1432
1456
|
/* @__PURE__ */ jsxs6("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
|
|
1433
|
-
/* @__PURE__ */
|
|
1434
|
-
/* @__PURE__ */
|
|
1457
|
+
/* @__PURE__ */ jsx10("span", { className: "ss-w-move-prev", "aria-hidden": "true", children: previous }),
|
|
1458
|
+
/* @__PURE__ */ jsx10("span", { className: "ss-w-move-arrow", "aria-hidden": "true", children: direction === "shortened" ? "\u25BC" : "\u25B2" })
|
|
1435
1459
|
] })
|
|
1436
1460
|
);
|
|
1437
1461
|
}
|
|
1438
1462
|
|
|
1439
1463
|
// src/components/Crest.tsx
|
|
1440
|
-
import { useState as
|
|
1441
|
-
import { jsx as
|
|
1464
|
+
import { useState as useState5 } from "react";
|
|
1465
|
+
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1442
1466
|
function initials2(name) {
|
|
1443
1467
|
return (name ?? "").trim().slice(0, 1).toUpperCase() || "?";
|
|
1444
1468
|
}
|
|
1445
1469
|
function Crest2({ url, name, kind }) {
|
|
1446
1470
|
const cls = kind === "comp" ? "ss-w-bi-comp-logo" : "ss-w-bi-crest";
|
|
1447
|
-
const [failed, setFailed] =
|
|
1471
|
+
const [failed, setFailed] = useState5(false);
|
|
1448
1472
|
if (url && !failed) {
|
|
1449
|
-
return /* @__PURE__ */
|
|
1473
|
+
return /* @__PURE__ */ jsx11("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
1450
1474
|
}
|
|
1451
|
-
return /* @__PURE__ */
|
|
1475
|
+
return /* @__PURE__ */ jsx11("span", { className: `${cls} ss-w-bi-crest-mono`, "aria-hidden": "true", children: initials2(name) });
|
|
1452
1476
|
}
|
|
1453
1477
|
|
|
1454
1478
|
// src/components/PinToggle.tsx
|
|
1455
|
-
import { useCallback as useCallback4, useState as
|
|
1456
|
-
import { jsx as
|
|
1479
|
+
import { useCallback as useCallback4, useState as useState6 } from "react";
|
|
1480
|
+
import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1457
1481
|
function PinToggle({ pin, monitor, ui }) {
|
|
1458
|
-
const [toast, setToast] =
|
|
1482
|
+
const [toast, setToast] = useState6(null);
|
|
1459
1483
|
const dismiss = useCallback4(() => setToast(null), []);
|
|
1460
1484
|
if (!monitor || !monitor.enabled) return null;
|
|
1461
1485
|
const key = pinKey(pin);
|
|
@@ -1470,7 +1494,7 @@ function PinToggle({ pin, monitor, ui }) {
|
|
|
1470
1494
|
}
|
|
1471
1495
|
};
|
|
1472
1496
|
return /* @__PURE__ */ jsxs7("div", { className: "ss-w-pin-wrap", children: [
|
|
1473
|
-
/* @__PURE__ */
|
|
1497
|
+
/* @__PURE__ */ jsx12(
|
|
1474
1498
|
"button",
|
|
1475
1499
|
{
|
|
1476
1500
|
type: "button",
|
|
@@ -1479,46 +1503,46 @@ function PinToggle({ pin, monitor, ui }) {
|
|
|
1479
1503
|
"aria-pressed": pinned,
|
|
1480
1504
|
"aria-label": pinned ? labels.unpin : labels.pin,
|
|
1481
1505
|
onClick,
|
|
1482
|
-
children: /* @__PURE__ */
|
|
1506
|
+
children: /* @__PURE__ */ jsx12("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: /* @__PURE__ */ jsx12("path", { fill: "currentColor", d: "M9.5 1.5 14.5 6.5 13 8l-.5-.5-3 3 .3 2.2-1.4 1.4L5.6 11.3l-3.3 3.3-1-1 3.3-3.3L1.9 7.5l1.4-1.4 2.2.3 3-3L8 2.9z" }) })
|
|
1483
1507
|
}
|
|
1484
1508
|
),
|
|
1485
|
-
/* @__PURE__ */
|
|
1509
|
+
/* @__PURE__ */ jsx12(Toast, { toast, onDismiss: dismiss })
|
|
1486
1510
|
] });
|
|
1487
1511
|
}
|
|
1488
1512
|
|
|
1489
1513
|
// src/components/BettingInsightList.tsx
|
|
1490
|
-
import { Fragment, jsx as
|
|
1514
|
+
import { Fragment, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1491
1515
|
function StatRows({ stats }) {
|
|
1492
|
-
return /* @__PURE__ */
|
|
1493
|
-
/* @__PURE__ */
|
|
1494
|
-
/* @__PURE__ */
|
|
1516
|
+
return /* @__PURE__ */ jsx13("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-row", children: [
|
|
1517
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-lbl", children: s.label }),
|
|
1518
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-num", children: s.value })
|
|
1495
1519
|
] }, `${s.label}:${s.value}`)) });
|
|
1496
1520
|
}
|
|
1497
1521
|
function ScopedStats({ scopes }) {
|
|
1498
|
-
const [active, setActive] =
|
|
1522
|
+
const [active, setActive] = useState7(0);
|
|
1499
1523
|
const current = scopes[active] ?? scopes[0] ?? { key: "", label: "", stats: [] };
|
|
1500
1524
|
return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-scoped", children: [
|
|
1501
|
-
/* @__PURE__ */
|
|
1502
|
-
/* @__PURE__ */
|
|
1525
|
+
/* @__PURE__ */ jsx13("div", { className: "ss-w-bi-scopes", role: "group", children: scopes.map((s, i) => /* @__PURE__ */ jsx13("button", { type: "button", className: "ss-w-bi-chip", "aria-pressed": i === active, onClick: () => setActive(i), children: s.label }, s.key)) }),
|
|
1526
|
+
/* @__PURE__ */ jsx13(StatRows, { stats: current.stats }, current.key)
|
|
1503
1527
|
] });
|
|
1504
1528
|
}
|
|
1505
1529
|
function hasStatsContent(it) {
|
|
1506
1530
|
return !!it.scopes && it.scopes.length >= 2 || it.stats.length > 0;
|
|
1507
1531
|
}
|
|
1508
1532
|
function ReasonStrip({ it, ui }) {
|
|
1509
|
-
const [open, setOpen] =
|
|
1533
|
+
const [open, setOpen] = useState7(false);
|
|
1510
1534
|
const hasScopes = !!it.scopes && it.scopes.length >= 2;
|
|
1511
1535
|
const hasStats = hasStatsContent(it);
|
|
1512
1536
|
const hasText = !!it.text;
|
|
1513
1537
|
if (!hasText && !hasStats) return null;
|
|
1514
1538
|
const expandable = hasStats || (it.text?.length ?? 0) > 90;
|
|
1515
1539
|
return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-reason", children: [
|
|
1516
|
-
/* @__PURE__ */
|
|
1540
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-chart", "aria-hidden": "true" }),
|
|
1517
1541
|
/* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-reason-body", children: [
|
|
1518
|
-
hasText ? /* @__PURE__ */
|
|
1519
|
-
open && hasStats ? hasScopes ? /* @__PURE__ */
|
|
1542
|
+
hasText ? /* @__PURE__ */ jsx13("p", { className: `ss-w-bi-text${open ? "" : " ss-w-bi-text-clamp"}`, children: it.text }) : null,
|
|
1543
|
+
open && hasStats ? hasScopes ? /* @__PURE__ */ jsx13(ScopedStats, { scopes: it.scopes }) : /* @__PURE__ */ jsx13(StatRows, { stats: it.stats }) : null
|
|
1520
1544
|
] }),
|
|
1521
|
-
expandable ? /* @__PURE__ */
|
|
1545
|
+
expandable ? /* @__PURE__ */ jsx13(
|
|
1522
1546
|
"button",
|
|
1523
1547
|
{
|
|
1524
1548
|
type: "button",
|
|
@@ -1526,7 +1550,7 @@ function ReasonStrip({ it, ui }) {
|
|
|
1526
1550
|
"aria-expanded": open,
|
|
1527
1551
|
"aria-label": open ? ui?.hideStats ?? "Hide stats" : ui?.showStats ?? "Show stats",
|
|
1528
1552
|
onClick: () => setOpen((v) => !v),
|
|
1529
|
-
children: /* @__PURE__ */
|
|
1553
|
+
children: /* @__PURE__ */ jsx13("span", { className: `ss-w-bi-arrow${open ? " ss-w-bi-arrow-open" : ""}`, "aria-hidden": "true" })
|
|
1530
1554
|
}
|
|
1531
1555
|
) : null
|
|
1532
1556
|
] });
|
|
@@ -1534,18 +1558,18 @@ function ReasonStrip({ it, ui }) {
|
|
|
1534
1558
|
function CardFixture({ it }) {
|
|
1535
1559
|
if (it.homeTeamName && it.awayTeamName) {
|
|
1536
1560
|
return /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
1537
|
-
/* @__PURE__ */
|
|
1538
|
-
/* @__PURE__ */
|
|
1539
|
-
/* @__PURE__ */
|
|
1540
|
-
/* @__PURE__ */
|
|
1541
|
-
/* @__PURE__ */
|
|
1561
|
+
/* @__PURE__ */ jsx13(Crest2, { kind: "team", url: it.homeCrest, name: it.homeTeamName }),
|
|
1562
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-team", children: it.homeTeamName }),
|
|
1563
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
|
|
1564
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-team", children: it.awayTeamName }),
|
|
1565
|
+
/* @__PURE__ */ jsx13(Crest2, { kind: "team", url: it.awayCrest, name: it.awayTeamName })
|
|
1542
1566
|
] });
|
|
1543
1567
|
}
|
|
1544
|
-
if (it.fixture) return /* @__PURE__ */
|
|
1568
|
+
if (it.fixture) return /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-fixture-txt", children: it.fixture });
|
|
1545
1569
|
if (it.competition) {
|
|
1546
1570
|
return /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
1547
|
-
/* @__PURE__ */
|
|
1548
|
-
/* @__PURE__ */
|
|
1571
|
+
/* @__PURE__ */ jsx13(Crest2, { kind: "comp", url: it.competitionCrest, name: it.competition }),
|
|
1572
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-comp", children: it.competition })
|
|
1549
1573
|
] });
|
|
1550
1574
|
}
|
|
1551
1575
|
return null;
|
|
@@ -1560,36 +1584,36 @@ function InsightCard({ it, ui, slip, monitor }) {
|
|
|
1560
1584
|
const showHeader = leftIsFixture || !!it.competition || live || !!kickoff || showPin;
|
|
1561
1585
|
return /* @__PURE__ */ jsxs8("div", { className: "ss-w-binsight", children: [
|
|
1562
1586
|
showHeader ? /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-header", children: [
|
|
1563
|
-
/* @__PURE__ */
|
|
1587
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-header-left", children: /* @__PURE__ */ jsx13(CardFixture, { it }) }),
|
|
1564
1588
|
/* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-header-right", children: [
|
|
1565
1589
|
live ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-live", children: [
|
|
1566
|
-
/* @__PURE__ */
|
|
1590
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
|
|
1567
1591
|
ui?.liveLabel ?? "Live"
|
|
1568
1592
|
] }) : null,
|
|
1569
|
-
compInMeta ? /* @__PURE__ */
|
|
1593
|
+
compInMeta ? /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-comp-meta", title: it.competition, children: /* @__PURE__ */ jsx13(Crest2, { kind: "comp", url: it.competitionCrest, name: it.competition }) }) : null,
|
|
1570
1594
|
kickoff ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-kick", children: [
|
|
1571
1595
|
kickoff.dayLabel,
|
|
1572
1596
|
" ",
|
|
1573
1597
|
kickoff.time
|
|
1574
1598
|
] }) : null,
|
|
1575
|
-
showPin && ui ? /* @__PURE__ */
|
|
1599
|
+
showPin && ui ? /* @__PURE__ */ jsx13(PinToggle, { ui, monitor, pin: { kind: "match", matchId: it.matchId } }) : null
|
|
1576
1600
|
] })
|
|
1577
1601
|
] }) : null,
|
|
1578
1602
|
/* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-action-row", children: [
|
|
1579
1603
|
/* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-pick", children: [
|
|
1580
|
-
/* @__PURE__ */
|
|
1604
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-market", children: it.market }),
|
|
1581
1605
|
it.selection ? /* @__PURE__ */ jsxs8(Fragment, { children: [
|
|
1582
|
-
/* @__PURE__ */
|
|
1583
|
-
/* @__PURE__ */
|
|
1606
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-pick-dot", "aria-hidden": "true", children: "\xB7" }),
|
|
1607
|
+
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-sel", children: it.selection })
|
|
1584
1608
|
] }) : null
|
|
1585
1609
|
] }),
|
|
1586
1610
|
it.odds ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-odds", children: [
|
|
1587
|
-
/* @__PURE__ */
|
|
1588
|
-
/* @__PURE__ */
|
|
1589
|
-
it.bookmaker ? /* @__PURE__ */
|
|
1611
|
+
/* @__PURE__ */ jsx13("b", { children: it.odds }),
|
|
1612
|
+
/* @__PURE__ */ jsx13(OddsMovementBadge, { previous: it.previousOdds, current: it.odds, direction: it.movementDirection, ui }),
|
|
1613
|
+
it.bookmaker ? /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-book", children: it.bookmaker }) : null
|
|
1590
1614
|
] }) : null,
|
|
1591
|
-
/* @__PURE__ */
|
|
1592
|
-
showPin && ui ? /* @__PURE__ */
|
|
1615
|
+
/* @__PURE__ */ jsx13(AddToSlipButton, { it, slip, ui }),
|
|
1616
|
+
showPin && ui ? /* @__PURE__ */ jsx13(
|
|
1593
1617
|
PinToggle,
|
|
1594
1618
|
{
|
|
1595
1619
|
ui,
|
|
@@ -1605,48 +1629,48 @@ function InsightCard({ it, ui, slip, monitor }) {
|
|
|
1605
1629
|
}
|
|
1606
1630
|
) : null
|
|
1607
1631
|
] }),
|
|
1608
|
-
it.isMarketFloor ? /* @__PURE__ */
|
|
1609
|
-
/* @__PURE__ */
|
|
1610
|
-
it.disclaimer ? /* @__PURE__ */
|
|
1632
|
+
it.isMarketFloor ? /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-floor", children: ui?.marketFloorLabel ?? "Market price \xB7 not a value pick" }) : null,
|
|
1633
|
+
/* @__PURE__ */ jsx13(ReasonStrip, { it, ui }),
|
|
1634
|
+
it.disclaimer ? /* @__PURE__ */ jsx13("p", { className: "ss-w-bi-disc", children: it.disclaimer }) : null
|
|
1611
1635
|
] });
|
|
1612
1636
|
}
|
|
1613
1637
|
function BettingInsightList({ insights, ui, slip, monitor }) {
|
|
1614
1638
|
if (!insights || insights.length === 0) return null;
|
|
1615
|
-
return /* @__PURE__ */
|
|
1639
|
+
return /* @__PURE__ */ jsx13("div", { className: "ss-w-binsights", children: insights.map((it) => /* @__PURE__ */ jsx13(InsightCard, { it, ui, slip, monitor }, it.id)) });
|
|
1616
1640
|
}
|
|
1617
1641
|
|
|
1618
1642
|
// src/components/MarketOddsCardList.tsx
|
|
1619
|
-
import { useState as
|
|
1620
|
-
import { Fragment as Fragment2, jsx as
|
|
1643
|
+
import { useState as useState8 } from "react";
|
|
1644
|
+
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1621
1645
|
function OddsRow({ vm, row, ui, slip, inSlipIds }) {
|
|
1622
1646
|
const selection = vm.addToSlipEnabled ? marketOddsRowToSlipSelection(vm, row, slip.conversationId) : null;
|
|
1623
1647
|
const inSlip = !!inSlipIds && row.matchOddsId != null && !!inSlipIds[row.matchOddsId];
|
|
1624
1648
|
return /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-row", children: [
|
|
1625
|
-
/* @__PURE__ */
|
|
1626
|
-
/* @__PURE__ */
|
|
1627
|
-
/* @__PURE__ */
|
|
1649
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-mo-sel", children: row.selection }),
|
|
1650
|
+
/* @__PURE__ */ jsx14(OddsMovementBadge, { previous: row.previousOdds, current: row.odds, direction: row.movementDirection, ui }),
|
|
1651
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-mo-price", children: row.odds }),
|
|
1628
1652
|
inSlip && ui ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-mon-inslip", children: [
|
|
1629
1653
|
"\u2713 ",
|
|
1630
1654
|
ui.inSlipLabel
|
|
1631
1655
|
] }) : null,
|
|
1632
|
-
/* @__PURE__ */
|
|
1656
|
+
/* @__PURE__ */ jsx14(SlipButton, { selection, shownOdds: row.odds, marketName: vm.market, slip, ui })
|
|
1633
1657
|
] });
|
|
1634
1658
|
}
|
|
1635
1659
|
function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds }) {
|
|
1636
|
-
const [open, setOpen] =
|
|
1660
|
+
const [open, setOpen] = useState8(false);
|
|
1637
1661
|
const kickoff = vm.kickoffUtc && ui?.bettingKickoff ? ui.bettingKickoff(vm.kickoffUtc) : void 0;
|
|
1638
1662
|
const hasNamedTeams = !!vm.homeTeamName && !!vm.awayTeamName;
|
|
1639
1663
|
const showPin = !!monitor && vm.pinEnabled;
|
|
1640
1664
|
const showHeader = !!vm.competition || vm.isLive || !!kickoff || showPin;
|
|
1641
1665
|
return /* @__PURE__ */ jsxs9("div", { className: "ss-w-mocard", children: [
|
|
1642
1666
|
showHeader ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-header", children: [
|
|
1643
|
-
/* @__PURE__ */
|
|
1644
|
-
/* @__PURE__ */
|
|
1645
|
-
/* @__PURE__ */
|
|
1667
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-header-left", children: vm.competition ? /* @__PURE__ */ jsxs9(Fragment2, { children: [
|
|
1668
|
+
/* @__PURE__ */ jsx14(Crest2, { kind: "comp", url: vm.competitionCrest, name: vm.competition }),
|
|
1669
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-comp", children: vm.competition })
|
|
1646
1670
|
] }) : null }),
|
|
1647
1671
|
/* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-header-right", children: [
|
|
1648
1672
|
vm.isLive ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-live", children: [
|
|
1649
|
-
/* @__PURE__ */
|
|
1673
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
|
|
1650
1674
|
ui?.liveLabel ?? "Live"
|
|
1651
1675
|
] }) : null,
|
|
1652
1676
|
kickoff ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-kick", children: [
|
|
@@ -1654,7 +1678,7 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds }) {
|
|
|
1654
1678
|
" ",
|
|
1655
1679
|
kickoff.time
|
|
1656
1680
|
] }) : null,
|
|
1657
|
-
showPin && ui ? /* @__PURE__ */
|
|
1681
|
+
showPin && ui ? /* @__PURE__ */ jsx14(
|
|
1658
1682
|
PinToggle,
|
|
1659
1683
|
{
|
|
1660
1684
|
ui,
|
|
@@ -1666,33 +1690,33 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds }) {
|
|
|
1666
1690
|
] }) : null,
|
|
1667
1691
|
hasNamedTeams || vm.fixture || vm.market ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-sub", children: [
|
|
1668
1692
|
hasNamedTeams ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-fixture", children: [
|
|
1669
|
-
/* @__PURE__ */
|
|
1670
|
-
/* @__PURE__ */
|
|
1671
|
-
/* @__PURE__ */
|
|
1672
|
-
/* @__PURE__ */
|
|
1673
|
-
/* @__PURE__ */
|
|
1674
|
-
] }) : vm.fixture ? /* @__PURE__ */
|
|
1675
|
-
vm.market ? /* @__PURE__ */
|
|
1693
|
+
/* @__PURE__ */ jsx14(Crest2, { kind: "team", url: vm.homeCrest, name: vm.homeTeamName }),
|
|
1694
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-team", children: vm.homeTeamName }),
|
|
1695
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
|
|
1696
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-team", children: vm.awayTeamName }),
|
|
1697
|
+
/* @__PURE__ */ jsx14(Crest2, { kind: "team", url: vm.awayCrest, name: vm.awayTeamName })
|
|
1698
|
+
] }) : vm.fixture ? /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-teams", children: vm.fixture }) : null,
|
|
1699
|
+
vm.market ? /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-market", children: vm.market }) : null
|
|
1676
1700
|
] }) : null,
|
|
1677
1701
|
/* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-rows", children: [
|
|
1678
|
-
vm.mainRows.map((row) => /* @__PURE__ */
|
|
1679
|
-
open ? vm.moreRows.map((row) => /* @__PURE__ */
|
|
1702
|
+
vm.mainRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)),
|
|
1703
|
+
open ? vm.moreRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)) : null
|
|
1680
1704
|
] }),
|
|
1681
1705
|
vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs9("button", { type: "button", className: "ss-w-mo-more", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
|
|
1682
|
-
/* @__PURE__ */
|
|
1683
|
-
/* @__PURE__ */
|
|
1706
|
+
/* @__PURE__ */ jsx14("span", { children: open ? ui?.hideLines ?? "Hide lines" : `${ui?.moreLines ?? "More lines"} (${vm.moreRows.length})` }),
|
|
1707
|
+
/* @__PURE__ */ jsx14("span", { className: `ss-w-mo-more-chev${open ? " ss-w-mo-more-chev-up" : ""}`, "aria-hidden": "true" })
|
|
1684
1708
|
] }) : null,
|
|
1685
|
-
vm.bookmaker ? /* @__PURE__ */
|
|
1686
|
-
vm.disclaimer ? /* @__PURE__ */
|
|
1709
|
+
vm.bookmaker ? /* @__PURE__ */ jsx14("div", { className: "ss-w-mo-foot", children: /* @__PURE__ */ jsx14("span", { children: vm.bookmaker }) }) : null,
|
|
1710
|
+
vm.disclaimer ? /* @__PURE__ */ jsx14("p", { className: "ss-w-bi-disc", children: vm.disclaimer }) : null
|
|
1687
1711
|
] });
|
|
1688
1712
|
}
|
|
1689
1713
|
function MarketOddsCardList({ cards, ui, slip, monitor, inSlipIds }) {
|
|
1690
1714
|
if (!cards || cards.length === 0) return null;
|
|
1691
|
-
return /* @__PURE__ */
|
|
1715
|
+
return /* @__PURE__ */ jsx14("div", { className: "ss-w-mocards", children: cards.map((vm) => /* @__PURE__ */ jsx14(MarketOddsCard, { vm, ui, slip, monitor, inSlipIds }, vm.id)) });
|
|
1692
1716
|
}
|
|
1693
1717
|
|
|
1694
1718
|
// src/components/OddsMovementCard.tsx
|
|
1695
|
-
import { Fragment as Fragment3, jsx as
|
|
1719
|
+
import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1696
1720
|
function directionWord(vm, ui) {
|
|
1697
1721
|
if (vm.direction === "shortened") return ui?.oddsShortened ?? "shortened";
|
|
1698
1722
|
if (vm.direction === "drifted") return ui?.oddsDrifted ?? "drifted";
|
|
@@ -1705,9 +1729,9 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
1705
1729
|
const showPin = !!monitor && vm.pinEnabled;
|
|
1706
1730
|
return /* @__PURE__ */ jsxs10("div", { className: "ss-w-omcard", children: [
|
|
1707
1731
|
/* @__PURE__ */ jsxs10("div", { className: "ss-w-om-head", children: [
|
|
1708
|
-
/* @__PURE__ */
|
|
1709
|
-
/* @__PURE__ */
|
|
1710
|
-
showPin && ui ? /* @__PURE__ */
|
|
1732
|
+
/* @__PURE__ */ jsx15("span", { className: "ss-w-om-market", children: vm.market }),
|
|
1733
|
+
/* @__PURE__ */ jsx15("span", { className: "ss-w-om-tag", children: ui?.priceMovement ?? "Price movement" }),
|
|
1734
|
+
showPin && ui ? /* @__PURE__ */ jsx15(
|
|
1711
1735
|
PinToggle,
|
|
1712
1736
|
{
|
|
1713
1737
|
ui,
|
|
@@ -1725,12 +1749,12 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
1725
1749
|
) : null
|
|
1726
1750
|
] }),
|
|
1727
1751
|
vm.fixture ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-fixture", children: [
|
|
1728
|
-
/* @__PURE__ */
|
|
1729
|
-
vm.competition ? /* @__PURE__ */
|
|
1752
|
+
/* @__PURE__ */ jsx15("span", { children: vm.fixture }),
|
|
1753
|
+
vm.competition ? /* @__PURE__ */ jsx15("span", { className: "ss-w-om-comp", children: vm.competition }) : null
|
|
1730
1754
|
] }) : null,
|
|
1731
|
-
/* @__PURE__ */
|
|
1732
|
-
/* @__PURE__ */
|
|
1733
|
-
vm.geometry === null ? /* @__PURE__ */
|
|
1755
|
+
/* @__PURE__ */ jsx15("div", { className: "ss-w-om-sel", children: vm.selection }),
|
|
1756
|
+
/* @__PURE__ */ jsx15(OddsMovementBadge, { previous: vm.opening, current: vm.current, direction: vm.direction, ui }),
|
|
1757
|
+
vm.geometry === null ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-empty", children: vm.observationCount === 1 ? ui?.singlePricePoint ?? "Only one price recorded so far for this selection." : ui?.notEnoughHistory ?? "No price history recorded yet for this selection." }) : /* @__PURE__ */ jsxs10(
|
|
1734
1758
|
"svg",
|
|
1735
1759
|
{
|
|
1736
1760
|
className: "ss-w-om-chart",
|
|
@@ -1740,15 +1764,15 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
1740
1764
|
"aria-label": aria,
|
|
1741
1765
|
children: [
|
|
1742
1766
|
vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs10("g", { children: [
|
|
1743
|
-
/* @__PURE__ */
|
|
1744
|
-
/* @__PURE__ */
|
|
1767
|
+
/* @__PURE__ */ jsx15("line", { className: "ss-w-om-grid", x1: 40, y1: g.y, x2: CHART_VIEW_W - 8, y2: g.y }),
|
|
1768
|
+
/* @__PURE__ */ jsx15("text", { className: "ss-w-om-ylab", x: 34, y: g.y + 3, textAnchor: "end", children: g.price.toFixed(2) })
|
|
1745
1769
|
] }, g.price)),
|
|
1746
|
-
/* @__PURE__ */
|
|
1747
|
-
vm.geometry.markers.map((m, i) => /* @__PURE__ */
|
|
1770
|
+
/* @__PURE__ */ jsx15("path", { className: "ss-w-om-line", d: vm.geometry.path, fill: "none" }),
|
|
1771
|
+
vm.geometry.markers.map((m, i) => /* @__PURE__ */ jsx15("circle", { className: "ss-w-om-dot", cx: m.x, cy: m.y, r: 2.5 }, i)),
|
|
1748
1772
|
ui?.chartTimeLabel ? /* @__PURE__ */ jsxs10(Fragment3, { children: [
|
|
1749
|
-
/* @__PURE__ */
|
|
1750
|
-
/* @__PURE__ */
|
|
1751
|
-
] }) : /* @__PURE__ */
|
|
1773
|
+
/* @__PURE__ */ jsx15("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, textAnchor: "start", children: ui.chartTimeLabel(vm.geometry.startMs) }),
|
|
1774
|
+
/* @__PURE__ */ jsx15("text", { className: "ss-w-om-xlab", x: CHART_VIEW_W - 8, y: CHART_VIEW_H - 8, textAnchor: "end", children: ui.chartTimeLabel(vm.geometry.endMs) })
|
|
1775
|
+
] }) : /* @__PURE__ */ jsx15("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, children: ui?.movementWindow ? ui.movementWindow(vm.windowHours) : `Last ${vm.windowHours}h` })
|
|
1752
1776
|
]
|
|
1753
1777
|
}
|
|
1754
1778
|
),
|
|
@@ -1756,66 +1780,66 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
1756
1780
|
/* @__PURE__ */ jsxs10("span", { children: [
|
|
1757
1781
|
ui?.openingLabel ?? "Opening",
|
|
1758
1782
|
" ",
|
|
1759
|
-
/* @__PURE__ */
|
|
1783
|
+
/* @__PURE__ */ jsx15("b", { children: vm.opening })
|
|
1760
1784
|
] }),
|
|
1761
1785
|
/* @__PURE__ */ jsxs10("span", { children: [
|
|
1762
1786
|
ui?.currentLabel ?? "Current",
|
|
1763
1787
|
" ",
|
|
1764
|
-
/* @__PURE__ */
|
|
1788
|
+
/* @__PURE__ */ jsx15("b", { children: vm.current })
|
|
1765
1789
|
] })
|
|
1766
1790
|
] }),
|
|
1767
|
-
vm.bookmaker ? /* @__PURE__ */
|
|
1768
|
-
vm.excludedCount > 0 ? /* @__PURE__ */
|
|
1769
|
-
vm.isSuspended ? /* @__PURE__ */
|
|
1770
|
-
vm.disclaimer ? /* @__PURE__ */
|
|
1791
|
+
vm.bookmaker ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-foot", children: /* @__PURE__ */ jsx15("span", { children: vm.bookmaker }) }) : null,
|
|
1792
|
+
vm.excludedCount > 0 ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-excl", children: ui?.excludedSuspended ? ui.excludedSuspended(vm.excludedCount) : `${vm.excludedCount} suspended price(s) excluded from this chart.` }) : null,
|
|
1793
|
+
vm.isSuspended ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-susp", children: ui?.selectionSuspended ?? "This selection is not currently available to bet." }) : null,
|
|
1794
|
+
vm.disclaimer ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-disc", children: vm.disclaimer }) : null
|
|
1771
1795
|
] });
|
|
1772
1796
|
}
|
|
1773
1797
|
function OddsMovementCardList({ cards, ui, monitor }) {
|
|
1774
1798
|
if (!cards || cards.length === 0) return null;
|
|
1775
|
-
return /* @__PURE__ */
|
|
1799
|
+
return /* @__PURE__ */ jsx15("div", { className: "ss-w-omcards", children: cards.map((vm) => /* @__PURE__ */ jsx15(OddsMovementCard, { vm, ui, monitor }, vm.id)) });
|
|
1776
1800
|
}
|
|
1777
1801
|
|
|
1778
1802
|
// src/components/ActionButtons.tsx
|
|
1779
|
-
import { Fragment as Fragment4, jsx as
|
|
1803
|
+
import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1780
1804
|
function ActionButtons({ actions, loading, disabled, onAct }) {
|
|
1781
1805
|
if (actions.length === 0 && !loading) return null;
|
|
1782
1806
|
return /* @__PURE__ */ jsxs11("div", { className: "ss-w-actions", children: [
|
|
1783
|
-
actions.map((a, i) => /* @__PURE__ */
|
|
1807
|
+
actions.map((a, i) => /* @__PURE__ */ jsx16("button", { type: "button", className: "ss-w-abtn", disabled, onClick: () => onAct(a), children: a.label }, `${a.label}-${i}`)),
|
|
1784
1808
|
actions.length === 0 && loading ? /* @__PURE__ */ jsxs11(Fragment4, { children: [
|
|
1785
|
-
/* @__PURE__ */
|
|
1786
|
-
/* @__PURE__ */
|
|
1809
|
+
/* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" }),
|
|
1810
|
+
/* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" })
|
|
1787
1811
|
] }) : null
|
|
1788
1812
|
] });
|
|
1789
1813
|
}
|
|
1790
1814
|
|
|
1791
1815
|
// src/components/dashboard/DashboardTile.tsx
|
|
1792
|
-
import { jsx as
|
|
1816
|
+
import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
1793
1817
|
var MAX_CRESTS = 3;
|
|
1794
1818
|
function DashboardTile({ tile, onTap }) {
|
|
1795
1819
|
const spanClass = tile.span === "full" ? "ss-w-dash-tile--full" : "ss-w-dash-tile--half";
|
|
1796
1820
|
const crests = (tile.imageUrls ?? []).slice(0, MAX_CRESTS);
|
|
1797
1821
|
const hasMeta = Boolean(tile.badgeText) || crests.length > 0;
|
|
1798
1822
|
return /* @__PURE__ */ jsxs12("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
|
|
1799
|
-
/* @__PURE__ */
|
|
1823
|
+
/* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-icon", children: /* @__PURE__ */ jsx17(DashboardIcon, { name: tile.icon }) }),
|
|
1800
1824
|
/* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-body", children: [
|
|
1801
|
-
/* @__PURE__ */
|
|
1802
|
-
tile.subtitle ? /* @__PURE__ */
|
|
1825
|
+
/* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-title", children: tile.title }),
|
|
1826
|
+
tile.subtitle ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle }) : null,
|
|
1803
1827
|
hasMeta ? (
|
|
1804
1828
|
// Badge + crests sit on their own row, below the title, instead of sharing the
|
|
1805
1829
|
// icon/chevron row -- at the half-span tile's ~180px width a nowrap badge alone
|
|
1806
1830
|
// (~70px) left the title column at ~22px and forced character-by-character wrapping.
|
|
1807
1831
|
/* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-meta", children: [
|
|
1808
|
-
tile.badgeText ? /* @__PURE__ */
|
|
1809
|
-
crests.length > 0 ? /* @__PURE__ */
|
|
1832
|
+
tile.badgeText ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-badge", children: tile.badgeText }) : null,
|
|
1833
|
+
crests.length > 0 ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-crests", children: crests.map((url, i) => /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-crest", style: { backgroundImage: `url(${url})` }, "aria-hidden": "true" }, `${url}-${i}`)) }) : null
|
|
1810
1834
|
] })
|
|
1811
1835
|
) : null
|
|
1812
1836
|
] }),
|
|
1813
|
-
/* @__PURE__ */
|
|
1837
|
+
/* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-chevron", children: /* @__PURE__ */ jsx17(ChevronIcon, {}) })
|
|
1814
1838
|
] });
|
|
1815
1839
|
}
|
|
1816
1840
|
|
|
1817
1841
|
// src/components/dashboard/GreetingDashboard.tsx
|
|
1818
|
-
import { jsx as
|
|
1842
|
+
import { jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1819
1843
|
var LAYOUT_CLASSES = {
|
|
1820
1844
|
market: "ss-w-dash--market",
|
|
1821
1845
|
goal: "ss-w-dash--goal",
|
|
@@ -1827,36 +1851,36 @@ function layoutClass(layout) {
|
|
|
1827
1851
|
function GreetingDashboard({ dashboard, onTap }) {
|
|
1828
1852
|
return /* @__PURE__ */ jsxs13("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
|
|
1829
1853
|
/* @__PURE__ */ jsxs13("div", { className: "ss-w-dash-head", children: [
|
|
1830
|
-
/* @__PURE__ */
|
|
1831
|
-
dashboard.subtitle ? /* @__PURE__ */
|
|
1854
|
+
/* @__PURE__ */ jsx18("span", { className: "ss-w-dash-title", children: dashboard.title }),
|
|
1855
|
+
dashboard.subtitle ? /* @__PURE__ */ jsx18("span", { className: "ss-w-dash-subtitle", children: dashboard.subtitle }) : null
|
|
1832
1856
|
] }),
|
|
1833
|
-
/* @__PURE__ */
|
|
1834
|
-
dashboard.footerTip ? /* @__PURE__ */
|
|
1857
|
+
/* @__PURE__ */ jsx18("div", { className: "ss-w-dash-grid", children: dashboard.tiles.map((t, i) => /* @__PURE__ */ jsx18(DashboardTile, { tile: t, onTap: () => onTap(t, i) }, `${t.title}-${i}`)) }),
|
|
1858
|
+
dashboard.footerTip ? /* @__PURE__ */ jsx18("span", { className: "ss-w-dash-foot", children: dashboard.footerTip }) : null
|
|
1835
1859
|
] });
|
|
1836
1860
|
}
|
|
1837
1861
|
|
|
1838
1862
|
// src/components/dashboard/FixtureCard.tsx
|
|
1839
|
-
import { Fragment as Fragment5, jsx as
|
|
1863
|
+
import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1840
1864
|
function teamFormResultClass(result) {
|
|
1841
1865
|
if (result === "W") return "ss-w-fandash-teamform-cell--win";
|
|
1842
1866
|
if (result === "L") return "ss-w-fandash-teamform-cell--loss";
|
|
1843
1867
|
return "ss-w-fandash-teamform-cell--draw";
|
|
1844
1868
|
}
|
|
1845
1869
|
function TeamFormCell({ m, subjectCrestUrl, subjectName }) {
|
|
1846
|
-
const subjectCrest = /* @__PURE__ */
|
|
1847
|
-
const opponentCrest = /* @__PURE__ */
|
|
1870
|
+
const subjectCrest = /* @__PURE__ */ jsx19(Crest2, { url: subjectCrestUrl ?? void 0, name: subjectName, kind: "team" });
|
|
1871
|
+
const opponentCrest = /* @__PURE__ */ jsx19(Crest2, { url: m.opponentCrestUrl ?? void 0, kind: "team" });
|
|
1848
1872
|
const score = m.teamIsHome ? `${m.teamScore} - ${m.oppScore}` : `${m.oppScore} - ${m.teamScore}`;
|
|
1849
1873
|
return /* @__PURE__ */ jsxs14("div", { className: `ss-w-fandash-teamform-cell ${teamFormResultClass(m.result)}`, children: [
|
|
1850
1874
|
m.teamIsHome ? subjectCrest : opponentCrest,
|
|
1851
|
-
/* @__PURE__ */
|
|
1875
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-score", children: score }),
|
|
1852
1876
|
m.teamIsHome ? opponentCrest : subjectCrest
|
|
1853
1877
|
] });
|
|
1854
1878
|
}
|
|
1855
1879
|
var TEAM_FORM_ROWS = 5;
|
|
1856
1880
|
function teamFormRows(data) {
|
|
1857
1881
|
return Array.from({ length: TEAM_FORM_ROWS }, (_, i) => i).flatMap((i) => [
|
|
1858
|
-
/* @__PURE__ */
|
|
1859
|
-
/* @__PURE__ */
|
|
1882
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-slot", children: data.homeForm[i] ? /* @__PURE__ */ jsx19(TeamFormCell, { m: data.homeForm[i], subjectCrestUrl: data.homeCrestUrl, subjectName: data.homeName }) : null }, `h-${i}`),
|
|
1883
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-slot", children: data.awayForm[i] ? /* @__PURE__ */ jsx19(TeamFormCell, { m: data.awayForm[i], subjectCrestUrl: data.awayCrestUrl, subjectName: data.awayName }) : null }, `a-${i}`)
|
|
1860
1884
|
]);
|
|
1861
1885
|
}
|
|
1862
1886
|
function FixtureCard({ card }) {
|
|
@@ -1871,17 +1895,17 @@ function FixtureCard({ card }) {
|
|
|
1871
1895
|
] }),
|
|
1872
1896
|
/* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-fixture-teams", children: [
|
|
1873
1897
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-team", children: [
|
|
1874
|
-
/* @__PURE__ */
|
|
1875
|
-
/* @__PURE__ */
|
|
1898
|
+
/* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
|
|
1899
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.homeName })
|
|
1876
1900
|
] }),
|
|
1877
|
-
/* @__PURE__ */
|
|
1901
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-vs", children: "v" }),
|
|
1878
1902
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-team ss-w-fandash-fixture-team--away", children: [
|
|
1879
|
-
/* @__PURE__ */
|
|
1880
|
-
/* @__PURE__ */
|
|
1903
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.awayName }),
|
|
1904
|
+
/* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" })
|
|
1881
1905
|
] })
|
|
1882
1906
|
] }),
|
|
1883
1907
|
/* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-fixture-meta", children: [
|
|
1884
|
-
/* @__PURE__ */
|
|
1908
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-kickoff", children: data.kickoffLabel }),
|
|
1885
1909
|
data.venue ? /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-venue", children: [
|
|
1886
1910
|
" \xB7 ",
|
|
1887
1911
|
data.venue
|
|
@@ -1889,45 +1913,45 @@ function FixtureCard({ card }) {
|
|
|
1889
1913
|
] })
|
|
1890
1914
|
] }),
|
|
1891
1915
|
/* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-card ss-w-fandash-lastfive", children: [
|
|
1892
|
-
/* @__PURE__ */
|
|
1916
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: data.formLabel }),
|
|
1893
1917
|
/* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-teamform-head", children: [
|
|
1894
1918
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-teamform-head-team", children: [
|
|
1895
|
-
/* @__PURE__ */
|
|
1896
|
-
/* @__PURE__ */
|
|
1919
|
+
/* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
|
|
1920
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.homeName })
|
|
1897
1921
|
] }),
|
|
1898
1922
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-teamform-head-team", children: [
|
|
1899
|
-
/* @__PURE__ */
|
|
1900
|
-
/* @__PURE__ */
|
|
1923
|
+
/* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" }),
|
|
1924
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.awayName })
|
|
1901
1925
|
] })
|
|
1902
1926
|
] }),
|
|
1903
|
-
/* @__PURE__ */
|
|
1927
|
+
/* @__PURE__ */ jsx19("div", { className: "ss-w-fandash-teamform-rows", children: teamFormRows(data) })
|
|
1904
1928
|
] }),
|
|
1905
1929
|
h2h || data.fact ? /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-card ss-w-fandash-h2h", children: [
|
|
1906
1930
|
h2h ? /* @__PURE__ */ jsxs14(Fragment5, { children: [
|
|
1907
|
-
/* @__PURE__ */
|
|
1931
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: h2h.label }),
|
|
1908
1932
|
/* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-split", children: [
|
|
1909
1933
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
|
|
1910
|
-
/* @__PURE__ */
|
|
1911
|
-
/* @__PURE__ */
|
|
1934
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.wins }),
|
|
1935
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.homeWinsLabel })
|
|
1912
1936
|
] }),
|
|
1913
1937
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
|
|
1914
|
-
/* @__PURE__ */
|
|
1915
|
-
/* @__PURE__ */
|
|
1938
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.draws }),
|
|
1939
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.drawsLabel })
|
|
1916
1940
|
] }),
|
|
1917
1941
|
/* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
|
|
1918
|
-
/* @__PURE__ */
|
|
1919
|
-
/* @__PURE__ */
|
|
1942
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.losses }),
|
|
1943
|
+
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.awayWinsLabel })
|
|
1920
1944
|
] })
|
|
1921
1945
|
] })
|
|
1922
1946
|
] }) : null,
|
|
1923
|
-
data.fact ? /* @__PURE__ */
|
|
1947
|
+
data.fact ? /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fact", children: data.fact }) : null
|
|
1924
1948
|
] }) : null
|
|
1925
1949
|
] });
|
|
1926
1950
|
}
|
|
1927
1951
|
|
|
1928
1952
|
// src/components/dashboard/CountdownCard.tsx
|
|
1929
|
-
import { Fragment as Fragment6, useEffect as useEffect5, useState as
|
|
1930
|
-
import { jsx as
|
|
1953
|
+
import { Fragment as Fragment6, useEffect as useEffect5, useState as useState9 } from "react";
|
|
1954
|
+
import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1931
1955
|
var DAY_MS = 864e5;
|
|
1932
1956
|
function remainingSegments(kickoffUnix, nowMs, withSeconds) {
|
|
1933
1957
|
const totalSeconds = Math.floor((kickoffUnix * 1e3 - nowMs) / 1e3);
|
|
@@ -1945,8 +1969,8 @@ function remainingSegments(kickoffUnix, nowMs, withSeconds) {
|
|
|
1945
1969
|
function CountdownCard({ card }) {
|
|
1946
1970
|
const { data } = card;
|
|
1947
1971
|
const unitLabel = { d: data.daysUnit, h: data.hoursUnit, m: data.minutesUnit, s: data.secondsUnit };
|
|
1948
|
-
const [nowMs, setNowMs] =
|
|
1949
|
-
const [reduced] =
|
|
1972
|
+
const [nowMs, setNowMs] = useState9(() => Date.now());
|
|
1973
|
+
const [reduced] = useState9(
|
|
1950
1974
|
() => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
|
1951
1975
|
);
|
|
1952
1976
|
const withinDay = data.kickoffUnix * 1e3 - nowMs < DAY_MS;
|
|
@@ -1956,61 +1980,61 @@ function CountdownCard({ card }) {
|
|
|
1956
1980
|
return () => window.clearInterval(id);
|
|
1957
1981
|
}, [reduced, withinDay]);
|
|
1958
1982
|
const segments = remainingSegments(data.kickoffUnix, nowMs, withinDay && !reduced);
|
|
1959
|
-
return /* @__PURE__ */
|
|
1960
|
-
/* @__PURE__ */
|
|
1961
|
-
segments ? /* @__PURE__ */
|
|
1962
|
-
i > 0 ? /* @__PURE__ */
|
|
1983
|
+
return /* @__PURE__ */ jsx20("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-countdown-top", children: [
|
|
1984
|
+
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-eyebrow", children: card.title ?? "Kick-off in" }),
|
|
1985
|
+
segments ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs15(Fragment6, { children: [
|
|
1986
|
+
i > 0 ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-colon", children: ":" }) : null,
|
|
1963
1987
|
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-countdown-seg", children: [
|
|
1964
|
-
/* @__PURE__ */
|
|
1965
|
-
/* @__PURE__ */
|
|
1988
|
+
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-value", children: s.value }),
|
|
1989
|
+
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-unit", children: unitLabel[s.unit] })
|
|
1966
1990
|
] })
|
|
1967
1991
|
] }, s.unit)) }) : null
|
|
1968
1992
|
] }) });
|
|
1969
1993
|
}
|
|
1970
1994
|
|
|
1971
1995
|
// src/components/dashboard/InjuriesCard.tsx
|
|
1972
|
-
import { useState as
|
|
1973
|
-
import { jsx as
|
|
1996
|
+
import { useState as useState10 } from "react";
|
|
1997
|
+
import { jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1974
1998
|
var SHOWN = 3;
|
|
1975
1999
|
function ColHead({ name, crestUrl }) {
|
|
1976
2000
|
return /* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-injuries-col-head", children: [
|
|
1977
|
-
/* @__PURE__ */
|
|
1978
|
-
/* @__PURE__ */
|
|
2001
|
+
/* @__PURE__ */ jsx21(Crest2, { url: crestUrl ?? void 0, name, kind: "team" }),
|
|
2002
|
+
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-col-head-name", children: name })
|
|
1979
2003
|
] });
|
|
1980
2004
|
}
|
|
1981
2005
|
function InjuryList({ rows, emptyLabel, limit }) {
|
|
1982
|
-
if (rows.length === 0) return /* @__PURE__ */
|
|
2006
|
+
if (rows.length === 0) return /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-empty", children: emptyLabel });
|
|
1983
2007
|
const shown = limit === void 0 ? rows : rows.slice(0, limit);
|
|
1984
|
-
return /* @__PURE__ */
|
|
1985
|
-
/* @__PURE__ */
|
|
2008
|
+
return /* @__PURE__ */ jsx21("ul", { className: "ss-w-fandash-injury-list", children: shown.map((r, i) => /* @__PURE__ */ jsxs16("li", { className: "ss-w-fandash-injury-row", children: [
|
|
2009
|
+
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-name", children: r.playerName }),
|
|
1986
2010
|
/* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-injury-meta", children: [
|
|
1987
|
-
/* @__PURE__ */
|
|
1988
|
-
r.injuryType ? /* @__PURE__ */
|
|
1989
|
-
r.expectedReturnLabel ? /* @__PURE__ */
|
|
2011
|
+
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-status", children: r.status }),
|
|
2012
|
+
r.injuryType ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-type", children: r.injuryType }) : null,
|
|
2013
|
+
r.expectedReturnLabel ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-return", children: r.expectedReturnLabel }) : null
|
|
1990
2014
|
] })
|
|
1991
2015
|
] }, `${r.playerName}-${i}`)) });
|
|
1992
2016
|
}
|
|
1993
2017
|
function InjuriesCard({ card, ui }) {
|
|
1994
2018
|
const { data } = card;
|
|
1995
|
-
const [expanded, setExpanded] =
|
|
2019
|
+
const [expanded, setExpanded] = useState10(false);
|
|
1996
2020
|
const hidden = Math.max(0, data.ours.length - SHOWN) + Math.max(0, data.theirs.length - SHOWN);
|
|
1997
2021
|
const limit = expanded ? void 0 : SHOWN;
|
|
1998
2022
|
const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
|
|
1999
2023
|
const showLess = ui?.showLess ?? "Show less";
|
|
2000
2024
|
return /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-card ss-w-fandash-injuries", children: [
|
|
2001
|
-
card.title ? /* @__PURE__ */
|
|
2025
|
+
card.title ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2002
2026
|
/* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-cols", children: [
|
|
2003
2027
|
/* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-col", children: [
|
|
2004
|
-
/* @__PURE__ */
|
|
2005
|
-
/* @__PURE__ */
|
|
2028
|
+
/* @__PURE__ */ jsx21(ColHead, { name: data.oursName, crestUrl: data.oursCrestUrl }),
|
|
2029
|
+
/* @__PURE__ */ jsx21(InjuryList, { rows: data.ours, emptyLabel: data.emptyLabel, limit })
|
|
2006
2030
|
] }),
|
|
2007
|
-
/* @__PURE__ */
|
|
2031
|
+
/* @__PURE__ */ jsx21("div", { className: "ss-w-fandash-injuries-divider" }),
|
|
2008
2032
|
/* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-col", children: [
|
|
2009
|
-
/* @__PURE__ */
|
|
2010
|
-
/* @__PURE__ */
|
|
2033
|
+
/* @__PURE__ */ jsx21(ColHead, { name: data.theirsName, crestUrl: data.theirsCrestUrl }),
|
|
2034
|
+
/* @__PURE__ */ jsx21(InjuryList, { rows: data.theirs, emptyLabel: data.emptyLabel, limit })
|
|
2011
2035
|
] })
|
|
2012
2036
|
] }),
|
|
2013
|
-
hidden > 0 ? /* @__PURE__ */
|
|
2037
|
+
hidden > 0 ? /* @__PURE__ */ jsx21(
|
|
2014
2038
|
"button",
|
|
2015
2039
|
{
|
|
2016
2040
|
type: "button",
|
|
@@ -2024,80 +2048,80 @@ function InjuriesCard({ card, ui }) {
|
|
|
2024
2048
|
}
|
|
2025
2049
|
|
|
2026
2050
|
// src/components/dashboard/ReasonToBetCard.tsx
|
|
2027
|
-
import { jsx as
|
|
2051
|
+
import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2028
2052
|
function ReasonToBetCard({ card }) {
|
|
2029
2053
|
return /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-card ss-w-fandash-reasons", children: [
|
|
2030
|
-
card.title ? /* @__PURE__ */
|
|
2031
|
-
/* @__PURE__ */
|
|
2054
|
+
card.title ? /* @__PURE__ */ jsx22("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2055
|
+
/* @__PURE__ */ jsx22("ul", { className: "ss-w-fandash-reason-list", children: card.data.angles.map((angle, i) => /* @__PURE__ */ jsx22("li", { className: "ss-w-fandash-reason-item", children: angle }, `${angle}-${i}`)) })
|
|
2032
2056
|
] });
|
|
2033
2057
|
}
|
|
2034
2058
|
|
|
2035
2059
|
// src/components/dashboard/WhereToWatchCard.tsx
|
|
2036
|
-
import { jsx as
|
|
2060
|
+
import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2037
2061
|
function WhereToWatchCard({ card }) {
|
|
2038
2062
|
return /* @__PURE__ */ jsxs18("div", { className: "ss-w-fandash-card ss-w-fandash-watch", children: [
|
|
2039
|
-
card.title ? /* @__PURE__ */
|
|
2040
|
-
/* @__PURE__ */
|
|
2063
|
+
card.title ? /* @__PURE__ */ jsx23("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2064
|
+
/* @__PURE__ */ jsx23("span", { className: "ss-w-fandash-stations", children: card.data.stations.map((station, i) => /* @__PURE__ */ jsx23("span", { className: "ss-w-fandash-station-chip", children: station }, `${station}-${i}`)) })
|
|
2041
2065
|
] });
|
|
2042
2066
|
}
|
|
2043
2067
|
|
|
2044
2068
|
// src/components/dashboard/CongestedWeekCard.tsx
|
|
2045
|
-
import { jsx as
|
|
2069
|
+
import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2046
2070
|
function CongestedWeekCard({ card, onTap }) {
|
|
2047
2071
|
return /* @__PURE__ */ jsxs19("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-congested", onClick: () => onTap(card), children: [
|
|
2048
|
-
card.title ? /* @__PURE__ */
|
|
2049
|
-
/* @__PURE__ */
|
|
2050
|
-
/* @__PURE__ */
|
|
2051
|
-
/* @__PURE__ */
|
|
2052
|
-
/* @__PURE__ */
|
|
2053
|
-
/* @__PURE__ */
|
|
2072
|
+
card.title ? /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2073
|
+
/* @__PURE__ */ jsx24("div", { className: "ss-w-fandash-congested-grid", children: card.data.entries.map((entry, i) => /* @__PURE__ */ jsxs19("span", { className: "ss-w-fandash-congested-cell", children: [
|
|
2074
|
+
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-day", children: entry.dayLabel }),
|
|
2075
|
+
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-opponent", children: entry.opponent }),
|
|
2076
|
+
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-comp", children: entry.competition }),
|
|
2077
|
+
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-time", children: entry.timeLabel })
|
|
2054
2078
|
] }, `${entry.opponent}-${i}`)) }),
|
|
2055
|
-
/* @__PURE__ */
|
|
2079
|
+
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2056
2080
|
] });
|
|
2057
2081
|
}
|
|
2058
2082
|
|
|
2059
2083
|
// src/components/dashboard/TransfersCard.tsx
|
|
2060
|
-
import { jsx as
|
|
2084
|
+
import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2061
2085
|
function TransferList({ rows }) {
|
|
2062
|
-
if (rows.length === 0) return /* @__PURE__ */
|
|
2063
|
-
return /* @__PURE__ */
|
|
2064
|
-
/* @__PURE__ */
|
|
2065
|
-
/* @__PURE__ */
|
|
2066
|
-
r.type ? /* @__PURE__ */
|
|
2086
|
+
if (rows.length === 0) return /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-empty", children: "None" });
|
|
2087
|
+
return /* @__PURE__ */ jsx25("ul", { className: "ss-w-fandash-transfer-list", children: rows.map((r, i) => /* @__PURE__ */ jsxs20("li", { className: "ss-w-fandash-transfer-row", children: [
|
|
2088
|
+
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-name", children: r.playerName }),
|
|
2089
|
+
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-club", children: r.otherClub }),
|
|
2090
|
+
r.type ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-type", children: r.type }) : null
|
|
2067
2091
|
] }, `${r.playerName}-${i}`)) });
|
|
2068
2092
|
}
|
|
2069
2093
|
function TransfersCard({ card }) {
|
|
2070
2094
|
const { data } = card;
|
|
2071
2095
|
return /* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-card ss-w-fandash-transfers", children: [
|
|
2072
|
-
card.title ? /* @__PURE__ */
|
|
2096
|
+
card.title ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2073
2097
|
/* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-cols", children: [
|
|
2074
2098
|
/* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-col", children: [
|
|
2075
|
-
/* @__PURE__ */
|
|
2076
|
-
/* @__PURE__ */
|
|
2099
|
+
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "In" }),
|
|
2100
|
+
/* @__PURE__ */ jsx25(TransferList, { rows: data.in })
|
|
2077
2101
|
] }),
|
|
2078
2102
|
/* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-col", children: [
|
|
2079
|
-
/* @__PURE__ */
|
|
2080
|
-
/* @__PURE__ */
|
|
2103
|
+
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "Out" }),
|
|
2104
|
+
/* @__PURE__ */ jsx25(TransferList, { rows: data.out })
|
|
2081
2105
|
] })
|
|
2082
2106
|
] })
|
|
2083
2107
|
] });
|
|
2084
2108
|
}
|
|
2085
2109
|
|
|
2086
2110
|
// src/components/dashboard/LinksCard.tsx
|
|
2087
|
-
import { jsx as
|
|
2111
|
+
import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2088
2112
|
function LinksCard({ card }) {
|
|
2089
2113
|
return /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-links", children: [
|
|
2090
|
-
card.title ? /* @__PURE__ */
|
|
2091
|
-
/* @__PURE__ */
|
|
2092
|
-
/* @__PURE__ */
|
|
2093
|
-
/* @__PURE__ */
|
|
2114
|
+
card.title ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2115
|
+
/* @__PURE__ */ jsx26("div", { className: "ss-w-fandash-link-grid", children: card.data.links.map((link, i) => /* @__PURE__ */ jsxs21("a", { className: "ss-w-fandash-link-tile", href: link.url, target: "_blank", rel: "noopener noreferrer", children: [
|
|
2116
|
+
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-label", children: link.label }),
|
|
2117
|
+
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-chevron", children: /* @__PURE__ */ jsx26(ChevronIcon, {}) })
|
|
2094
2118
|
] }, `${link.url}-${i}`)) })
|
|
2095
2119
|
] });
|
|
2096
2120
|
}
|
|
2097
2121
|
|
|
2098
2122
|
// src/components/dashboard/PostMatchResultCard.tsx
|
|
2099
|
-
import { useState as
|
|
2100
|
-
import { jsx as
|
|
2123
|
+
import { useState as useState11 } from "react";
|
|
2124
|
+
import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2101
2125
|
function initials3(name) {
|
|
2102
2126
|
return name.trim().slice(0, 3).toUpperCase();
|
|
2103
2127
|
}
|
|
@@ -2106,12 +2130,12 @@ function PostMatchCrest({
|
|
|
2106
2130
|
name,
|
|
2107
2131
|
side
|
|
2108
2132
|
}) {
|
|
2109
|
-
const [failed, setFailed] =
|
|
2133
|
+
const [failed, setFailed] = useState11(false);
|
|
2110
2134
|
const cls = `ss-w-fandash-postmatch-crest ss-w-fandash-postmatch-crest--${side}`;
|
|
2111
2135
|
if (url && !failed) {
|
|
2112
|
-
return /* @__PURE__ */
|
|
2136
|
+
return /* @__PURE__ */ jsx27("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
2113
2137
|
}
|
|
2114
|
-
return /* @__PURE__ */
|
|
2138
|
+
return /* @__PURE__ */ jsx27("span", { className: `${cls} ss-w-fandash-postmatch-crest--fallback`, "aria-hidden": "true", children: initials3(name) });
|
|
2115
2139
|
}
|
|
2116
2140
|
function PostMatchResultCard({ card }) {
|
|
2117
2141
|
const { data } = card;
|
|
@@ -2119,24 +2143,24 @@ function PostMatchResultCard({ card }) {
|
|
|
2119
2143
|
const awayWon = data.awayScore >= data.homeScore;
|
|
2120
2144
|
return /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-result", children: [
|
|
2121
2145
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-top", children: [
|
|
2122
|
-
card.title ? /* @__PURE__ */
|
|
2123
|
-
/* @__PURE__ */
|
|
2146
|
+
card.title ? /* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-pill", children: card.title }) : null,
|
|
2147
|
+
/* @__PURE__ */ jsx27("span", { className: `ss-w-fandash-postmatch-tag ss-w-fandash-postmatch-tag--${data.outcome}`, children: data.resultLabel })
|
|
2124
2148
|
] }),
|
|
2125
2149
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-main", children: [
|
|
2126
2150
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--home", children: [
|
|
2127
|
-
/* @__PURE__ */
|
|
2128
|
-
/* @__PURE__ */
|
|
2151
|
+
/* @__PURE__ */ jsx27(PostMatchCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
|
|
2152
|
+
/* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.homeName })
|
|
2129
2153
|
] }),
|
|
2130
2154
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-score-main", children: [
|
|
2131
|
-
/* @__PURE__ */
|
|
2155
|
+
/* @__PURE__ */ jsx27(
|
|
2132
2156
|
"span",
|
|
2133
2157
|
{
|
|
2134
2158
|
className: `ss-w-fandash-postmatch-score-value ss-w-fandash-postmatch-score-value--${homeWon ? "win" : "lose"}`,
|
|
2135
2159
|
children: data.homeScore
|
|
2136
2160
|
}
|
|
2137
2161
|
),
|
|
2138
|
-
/* @__PURE__ */
|
|
2139
|
-
/* @__PURE__ */
|
|
2162
|
+
/* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-score-sep", children: "\u2013" }),
|
|
2163
|
+
/* @__PURE__ */ jsx27(
|
|
2140
2164
|
"span",
|
|
2141
2165
|
{
|
|
2142
2166
|
className: `ss-w-fandash-postmatch-score-value ss-w-fandash-postmatch-score-value--${awayWon ? "win" : "lose"}`,
|
|
@@ -2145,8 +2169,8 @@ function PostMatchResultCard({ card }) {
|
|
|
2145
2169
|
)
|
|
2146
2170
|
] }),
|
|
2147
2171
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--away", children: [
|
|
2148
|
-
/* @__PURE__ */
|
|
2149
|
-
/* @__PURE__ */
|
|
2172
|
+
/* @__PURE__ */ jsx27(PostMatchCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
|
|
2173
|
+
/* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.awayName })
|
|
2150
2174
|
] })
|
|
2151
2175
|
] }),
|
|
2152
2176
|
/* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-meta", children: [
|
|
@@ -2157,20 +2181,20 @@ function PostMatchResultCard({ card }) {
|
|
|
2157
2181
|
}
|
|
2158
2182
|
|
|
2159
2183
|
// src/components/dashboard/PostMatchGoalsCard.tsx
|
|
2160
|
-
import { jsx as
|
|
2184
|
+
import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2161
2185
|
function PostMatchGoalsCard({ card, onTap }) {
|
|
2162
2186
|
return /* @__PURE__ */ jsxs23("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-goals", onClick: () => onTap(card), children: [
|
|
2163
|
-
card.title ? /* @__PURE__ */
|
|
2164
|
-
/* @__PURE__ */
|
|
2165
|
-
/* @__PURE__ */
|
|
2166
|
-
/* @__PURE__ */
|
|
2187
|
+
card.title ? /* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2188
|
+
/* @__PURE__ */ jsx28("ul", { className: "ss-w-fandash-postmatch-goal-list", children: card.data.goals.map((g, i) => /* @__PURE__ */ jsxs23("li", { className: g.scoredByClub ? "ss-w-fandash-postmatch-goal ss-w-fandash-postmatch-goal--club" : "ss-w-fandash-postmatch-goal", children: [
|
|
2189
|
+
/* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-postmatch-goal-ball" }),
|
|
2190
|
+
/* @__PURE__ */ jsx28("span", { children: g.text })
|
|
2167
2191
|
] }, `${g.text}-${i}`)) }),
|
|
2168
|
-
/* @__PURE__ */
|
|
2192
|
+
/* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2169
2193
|
] });
|
|
2170
2194
|
}
|
|
2171
2195
|
|
|
2172
2196
|
// src/components/dashboard/PostMatchStatsCard.tsx
|
|
2173
|
-
import { jsx as
|
|
2197
|
+
import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2174
2198
|
function splitWidths(homeNum, awayNum) {
|
|
2175
2199
|
const total = homeNum + awayNum;
|
|
2176
2200
|
if (total <= 0) return { home: "50%", away: "50%" };
|
|
@@ -2180,8 +2204,8 @@ function splitWidths(homeNum, awayNum) {
|
|
|
2180
2204
|
function PostMatchStatsCard({ card, onTap }) {
|
|
2181
2205
|
const { data } = card;
|
|
2182
2206
|
return /* @__PURE__ */ jsxs24("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-stats", onClick: () => onTap(card), children: [
|
|
2183
|
-
card.title ? /* @__PURE__ */
|
|
2184
|
-
/* @__PURE__ */
|
|
2207
|
+
card.title ? /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2208
|
+
/* @__PURE__ */ jsx29("div", { className: "ss-w-fandash-postmatch-stat-rows", children: data.rows.map((r, i) => {
|
|
2185
2209
|
const leftValue = data.clubIsHome ? r.clubValue : r.oppValue;
|
|
2186
2210
|
const rightValue = data.clubIsHome ? r.oppValue : r.clubValue;
|
|
2187
2211
|
const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
|
|
@@ -2189,32 +2213,32 @@ function PostMatchStatsCard({ card, onTap }) {
|
|
|
2189
2213
|
const { home, away } = splitWidths(homeNum, awayNum);
|
|
2190
2214
|
return /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat", children: [
|
|
2191
2215
|
/* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat-row", children: [
|
|
2192
|
-
/* @__PURE__ */
|
|
2193
|
-
/* @__PURE__ */
|
|
2194
|
-
/* @__PURE__ */
|
|
2216
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--home", children: leftValue }),
|
|
2217
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-label", children: r.label }),
|
|
2218
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--away", children: rightValue })
|
|
2195
2219
|
] }),
|
|
2196
2220
|
/* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat-bar", children: [
|
|
2197
|
-
/* @__PURE__ */
|
|
2198
|
-
/* @__PURE__ */
|
|
2221
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-home", style: { width: home } }),
|
|
2222
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-away", style: { width: away } })
|
|
2199
2223
|
] })
|
|
2200
2224
|
] }, `${r.label}-${i}`);
|
|
2201
2225
|
}) }),
|
|
2202
2226
|
data.rows.length > 0 ? /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-legend", children: [
|
|
2203
2227
|
/* @__PURE__ */ jsxs24("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
|
|
2204
|
-
/* @__PURE__ */
|
|
2228
|
+
/* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--home" }),
|
|
2205
2229
|
data.homeName
|
|
2206
2230
|
] }),
|
|
2207
2231
|
/* @__PURE__ */ jsxs24("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
|
|
2208
|
-
/* @__PURE__ */
|
|
2232
|
+
/* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--away" }),
|
|
2209
2233
|
data.awayName
|
|
2210
2234
|
] })
|
|
2211
2235
|
] }) : null,
|
|
2212
|
-
/* @__PURE__ */
|
|
2236
|
+
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2213
2237
|
] });
|
|
2214
2238
|
}
|
|
2215
2239
|
|
|
2216
2240
|
// src/components/dashboard/PostMatchTopPerformerCard.tsx
|
|
2217
|
-
import { jsx as
|
|
2241
|
+
import { jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2218
2242
|
function initials4(playerName) {
|
|
2219
2243
|
const words = playerName.trim().split(/\s+/).filter(Boolean);
|
|
2220
2244
|
if (words.length === 0) return "?";
|
|
@@ -2225,71 +2249,71 @@ function initials4(playerName) {
|
|
|
2225
2249
|
function PostMatchTopPerformerCard({ card, onTap }) {
|
|
2226
2250
|
const { data } = card;
|
|
2227
2251
|
return /* @__PURE__ */ jsxs25("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-performer", onClick: () => onTap(card), children: [
|
|
2228
|
-
card.title ? /* @__PURE__ */
|
|
2252
|
+
card.title ? /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2229
2253
|
/* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-perf-row", children: [
|
|
2230
|
-
/* @__PURE__ */
|
|
2231
|
-
/* @__PURE__ */
|
|
2232
|
-
/* @__PURE__ */
|
|
2254
|
+
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-avatar", "aria-hidden": "true", children: initials4(data.playerName) }),
|
|
2255
|
+
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-name", children: data.playerName }),
|
|
2256
|
+
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-rating", children: data.ratingLabel })
|
|
2233
2257
|
] }),
|
|
2234
|
-
/* @__PURE__ */
|
|
2258
|
+
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2235
2259
|
] });
|
|
2236
2260
|
}
|
|
2237
2261
|
|
|
2238
2262
|
// src/components/dashboard/PostMatchNextCard.tsx
|
|
2239
|
-
import { jsx as
|
|
2263
|
+
import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2240
2264
|
function PostMatchNextCard({ card }) {
|
|
2241
2265
|
const { data } = card;
|
|
2242
2266
|
return /* @__PURE__ */ jsxs26("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-next", children: [
|
|
2243
|
-
card.title ? /* @__PURE__ */
|
|
2244
|
-
/* @__PURE__ */
|
|
2267
|
+
card.title ? /* @__PURE__ */ jsx31("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2268
|
+
/* @__PURE__ */ jsx31("div", { className: "ss-w-fandash-postmatch-next-row", children: /* @__PURE__ */ jsx31("span", { className: "ss-w-fandash-postmatch-next-when", children: data.whenLabel }) })
|
|
2245
2269
|
] });
|
|
2246
2270
|
}
|
|
2247
2271
|
|
|
2248
2272
|
// src/components/dashboard/RestingNextCard.tsx
|
|
2249
|
-
import { jsx as
|
|
2273
|
+
import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2250
2274
|
function RestingNextCard({ card, onTap }) {
|
|
2251
2275
|
const { data } = card;
|
|
2252
2276
|
return /* @__PURE__ */ jsxs27("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-next", onClick: () => onTap(card), children: [
|
|
2253
|
-
card.title ? /* @__PURE__ */
|
|
2277
|
+
card.title ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2254
2278
|
/* @__PURE__ */ jsxs27("div", { className: "ss-w-fandash-resting-next-row", children: [
|
|
2255
|
-
/* @__PURE__ */
|
|
2256
|
-
data.competition ? /* @__PURE__ */
|
|
2279
|
+
/* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-when", children: data.whenLabel }),
|
|
2280
|
+
data.competition ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-competition", children: data.competition }) : null
|
|
2257
2281
|
] }),
|
|
2258
|
-
/* @__PURE__ */
|
|
2282
|
+
/* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2259
2283
|
] });
|
|
2260
2284
|
}
|
|
2261
2285
|
|
|
2262
2286
|
// src/components/dashboard/RestingStandingsCard.tsx
|
|
2263
|
-
import { jsx as
|
|
2287
|
+
import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2264
2288
|
function RestingStandingsCard({ card, onTap }) {
|
|
2265
2289
|
const { data } = card;
|
|
2266
2290
|
return /* @__PURE__ */ jsxs28("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-standings", onClick: () => onTap(card), children: [
|
|
2267
|
-
card.title ? /* @__PURE__ */
|
|
2291
|
+
card.title ? /* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2268
2292
|
/* @__PURE__ */ jsxs28("div", { className: "ss-w-fandash-resting-standings-row", children: [
|
|
2269
|
-
/* @__PURE__ */
|
|
2270
|
-
/* @__PURE__ */
|
|
2293
|
+
/* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-position", children: data.positionLabel }),
|
|
2294
|
+
/* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-record", children: data.recordLabel })
|
|
2271
2295
|
] }),
|
|
2272
|
-
/* @__PURE__ */
|
|
2296
|
+
/* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2273
2297
|
] });
|
|
2274
2298
|
}
|
|
2275
2299
|
|
|
2276
2300
|
// src/components/dashboard/RestingSeasonCard.tsx
|
|
2277
|
-
import { jsx as
|
|
2301
|
+
import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2278
2302
|
function RestingSeasonCard({ card, onTap }) {
|
|
2279
2303
|
const { data } = card;
|
|
2280
2304
|
return /* @__PURE__ */ jsxs29("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-season", onClick: () => onTap(card), children: [
|
|
2281
|
-
card.title ? /* @__PURE__ */
|
|
2305
|
+
card.title ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2282
2306
|
/* @__PURE__ */ jsxs29("div", { className: "ss-w-fandash-resting-season-rows", children: [
|
|
2283
|
-
data.scorerLabel ? /* @__PURE__ */
|
|
2284
|
-
data.playerLabel ? /* @__PURE__ */
|
|
2285
|
-
/* @__PURE__ */
|
|
2307
|
+
data.scorerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.scorerLabel }) : null,
|
|
2308
|
+
data.playerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.playerLabel }) : null,
|
|
2309
|
+
/* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.tallyLabel })
|
|
2286
2310
|
] }),
|
|
2287
|
-
/* @__PURE__ */
|
|
2311
|
+
/* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-card-cta", children: card.actionLabel })
|
|
2288
2312
|
] });
|
|
2289
2313
|
}
|
|
2290
2314
|
|
|
2291
2315
|
// src/components/dashboard/RestingFormCard.tsx
|
|
2292
|
-
import { jsx as
|
|
2316
|
+
import { jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2293
2317
|
function resultClass(result) {
|
|
2294
2318
|
const upper = result.toUpperCase();
|
|
2295
2319
|
if (upper === "W") return "ss-w-fandash-form-pill--win";
|
|
@@ -2299,16 +2323,16 @@ function resultClass(result) {
|
|
|
2299
2323
|
function RestingFormCard({ card }) {
|
|
2300
2324
|
const { data } = card;
|
|
2301
2325
|
return /* @__PURE__ */ jsxs30("div", { className: "ss-w-fandash-card ss-w-fandash-resting-form", children: [
|
|
2302
|
-
card.title ? /* @__PURE__ */
|
|
2303
|
-
/* @__PURE__ */
|
|
2326
|
+
card.title ? /* @__PURE__ */ jsx35("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2327
|
+
/* @__PURE__ */ jsx35("span", { className: "ss-w-fandash-form", children: data.letters.map((r, i) => /* @__PURE__ */ jsx35("span", { className: `ss-w-fandash-form-pill ${resultClass(r)}`, children: r }, `${r}-${i}`)) })
|
|
2304
2328
|
] });
|
|
2305
2329
|
}
|
|
2306
2330
|
|
|
2307
2331
|
// src/components/dashboard/LiveScoreCard.tsx
|
|
2308
|
-
import { useRef as useRef4, useState as
|
|
2332
|
+
import { useRef as useRef4, useState as useState13 } from "react";
|
|
2309
2333
|
|
|
2310
2334
|
// src/useLiveClock.ts
|
|
2311
|
-
import { useEffect as useEffect6, useState as
|
|
2335
|
+
import { useEffect as useEffect6, useState as useState12 } from "react";
|
|
2312
2336
|
var TICK_MS = 6e4;
|
|
2313
2337
|
var MAX_LIVE_TICK_MINUTES = 15;
|
|
2314
2338
|
function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
|
|
@@ -2317,7 +2341,7 @@ function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
|
|
|
2317
2341
|
return minute + Math.min(Math.max(0, elapsedMinutes), MAX_LIVE_TICK_MINUTES);
|
|
2318
2342
|
}
|
|
2319
2343
|
function useLiveClock(minute, clockRunning, receivedAtMs) {
|
|
2320
|
-
const [displayMinute, setDisplayMinute] =
|
|
2344
|
+
const [displayMinute, setDisplayMinute] = useState12(
|
|
2321
2345
|
() => computeDisplayMinute(minute, clockRunning, receivedAtMs)
|
|
2322
2346
|
);
|
|
2323
2347
|
useEffect6(() => {
|
|
@@ -2332,17 +2356,17 @@ function useLiveClock(minute, clockRunning, receivedAtMs) {
|
|
|
2332
2356
|
}
|
|
2333
2357
|
|
|
2334
2358
|
// src/components/dashboard/LiveScoreCard.tsx
|
|
2335
|
-
import { jsx as
|
|
2359
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
2336
2360
|
function initials5(name) {
|
|
2337
2361
|
return name.trim().slice(0, 3).toUpperCase();
|
|
2338
2362
|
}
|
|
2339
2363
|
function LiveCrest({ url, name, side }) {
|
|
2340
|
-
const [failed, setFailed] =
|
|
2364
|
+
const [failed, setFailed] = useState13(false);
|
|
2341
2365
|
const cls = `ss-w-fandash-live-crest ss-w-fandash-live-crest--${side}`;
|
|
2342
2366
|
if (url && !failed) {
|
|
2343
|
-
return /* @__PURE__ */
|
|
2367
|
+
return /* @__PURE__ */ jsx36("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
2344
2368
|
}
|
|
2345
|
-
return /* @__PURE__ */
|
|
2369
|
+
return /* @__PURE__ */ jsx36("span", { className: `${cls} ss-w-fandash-live-crest--fallback`, "aria-hidden": "true", children: initials5(name) });
|
|
2346
2370
|
}
|
|
2347
2371
|
function scorersLine(goalEvents) {
|
|
2348
2372
|
if (!goalEvents || goalEvents.length === 0) return null;
|
|
@@ -2364,52 +2388,52 @@ function LiveScoreCard({
|
|
|
2364
2388
|
const minuteSuffix = data.minuteLabel.replace(/^\d+/, "");
|
|
2365
2389
|
const scorers = scorersLine(goalEvents);
|
|
2366
2390
|
return /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-card ss-w-fandash-live-score", children: [
|
|
2367
|
-
card.title ? /* @__PURE__ */
|
|
2391
|
+
card.title ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2368
2392
|
/* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-top", children: [
|
|
2369
2393
|
/* @__PURE__ */ jsxs31("span", { className: "ss-w-fandash-live-pill", children: [
|
|
2370
|
-
/* @__PURE__ */
|
|
2394
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
2371
2395
|
data.statusLabel
|
|
2372
2396
|
] }),
|
|
2373
|
-
/* @__PURE__ */
|
|
2374
|
-
data.competition ? /* @__PURE__ */
|
|
2397
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-minute", children: `${displayMinute}${minuteSuffix}` }),
|
|
2398
|
+
data.competition ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-competition", children: data.competition }) : null
|
|
2375
2399
|
] }),
|
|
2376
2400
|
/* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-main", children: [
|
|
2377
2401
|
/* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--home", children: [
|
|
2378
|
-
/* @__PURE__ */
|
|
2379
|
-
/* @__PURE__ */
|
|
2402
|
+
/* @__PURE__ */ jsx36(LiveCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
|
|
2403
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.homeName })
|
|
2380
2404
|
] }),
|
|
2381
2405
|
/* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-score-main", children: [
|
|
2382
|
-
/* @__PURE__ */
|
|
2383
|
-
/* @__PURE__ */
|
|
2384
|
-
/* @__PURE__ */
|
|
2406
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.homeScore }),
|
|
2407
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-sep", children: "\u2013" }),
|
|
2408
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.awayScore })
|
|
2385
2409
|
] }),
|
|
2386
2410
|
/* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--away", children: [
|
|
2387
|
-
/* @__PURE__ */
|
|
2388
|
-
/* @__PURE__ */
|
|
2411
|
+
/* @__PURE__ */ jsx36(LiveCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
|
|
2412
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.awayName })
|
|
2389
2413
|
] })
|
|
2390
2414
|
] }),
|
|
2391
2415
|
scorers ? /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-scorers", children: [
|
|
2392
|
-
/* @__PURE__ */
|
|
2416
|
+
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-scorers-icon", "aria-hidden": "true", children: "\u26BD" }),
|
|
2393
2417
|
scorers
|
|
2394
2418
|
] }) : null
|
|
2395
2419
|
] });
|
|
2396
2420
|
}
|
|
2397
2421
|
|
|
2398
2422
|
// src/components/dashboard/LiveTimelineCard.tsx
|
|
2399
|
-
import { useState as
|
|
2400
|
-
import { jsx as
|
|
2423
|
+
import { useState as useState14 } from "react";
|
|
2424
|
+
import { jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
2401
2425
|
var SHOWN2 = 3;
|
|
2402
2426
|
function EventIcon({ type }) {
|
|
2403
2427
|
if (type === "goal") {
|
|
2404
|
-
return /* @__PURE__ */
|
|
2428
|
+
return /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-ico ss-w-fandash-live-tl-ico--goal", "aria-hidden": "true", children: /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-ball" }) });
|
|
2405
2429
|
}
|
|
2406
2430
|
if (type === "yellow" || type === "red") {
|
|
2407
|
-
return /* @__PURE__ */
|
|
2431
|
+
return /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-ico", "aria-hidden": "true", children: /* @__PURE__ */ jsx37("span", { className: `ss-w-fandash-live-tl-card ss-w-fandash-live-tl-card--${type}` }) });
|
|
2408
2432
|
}
|
|
2409
2433
|
if (type === "sub") {
|
|
2410
|
-
return /* @__PURE__ */
|
|
2434
|
+
return /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-ico", "aria-hidden": "true", children: /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-subarrows", children: "\u21C5" }) });
|
|
2411
2435
|
}
|
|
2412
|
-
return /* @__PURE__ */
|
|
2436
|
+
return /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-ico", "aria-hidden": "true", children: /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-dot" }) });
|
|
2413
2437
|
}
|
|
2414
2438
|
function EventLabel({ e }) {
|
|
2415
2439
|
if (e.type === "sub") {
|
|
@@ -2421,7 +2445,7 @@ function EventLabel({ e }) {
|
|
|
2421
2445
|
] }) : null
|
|
2422
2446
|
] });
|
|
2423
2447
|
}
|
|
2424
|
-
return /* @__PURE__ */
|
|
2448
|
+
return /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-who", children: e.player ?? e.text });
|
|
2425
2449
|
}
|
|
2426
2450
|
function EventRow({ e }) {
|
|
2427
2451
|
const cls = [
|
|
@@ -2431,14 +2455,14 @@ function EventRow({ e }) {
|
|
|
2431
2455
|
].filter(Boolean).join(" ");
|
|
2432
2456
|
return /* @__PURE__ */ jsxs32("div", { className: cls, children: [
|
|
2433
2457
|
/* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-tl-txt", children: [
|
|
2434
|
-
/* @__PURE__ */
|
|
2435
|
-
/* @__PURE__ */
|
|
2458
|
+
/* @__PURE__ */ jsx37(EventLabel, { e }),
|
|
2459
|
+
/* @__PURE__ */ jsx37(EventIcon, { type: e.type })
|
|
2436
2460
|
] }),
|
|
2437
|
-
/* @__PURE__ */
|
|
2461
|
+
/* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-live-tl-badge", children: e.minuteLabel })
|
|
2438
2462
|
] });
|
|
2439
2463
|
}
|
|
2440
2464
|
function LiveTimelineCard({ card, ui }) {
|
|
2441
|
-
const [expanded, setExpanded] =
|
|
2465
|
+
const [expanded, setExpanded] = useState14(false);
|
|
2442
2466
|
const events = card.data.events;
|
|
2443
2467
|
if (!events || events.length === 0) return null;
|
|
2444
2468
|
const sorted = [...events].sort((a, b) => b.minute - a.minute);
|
|
@@ -2447,9 +2471,9 @@ function LiveTimelineCard({ card, ui }) {
|
|
|
2447
2471
|
const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
|
|
2448
2472
|
const showLess = ui?.showLess ?? "Show less";
|
|
2449
2473
|
return /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-card ss-w-fandash-live-timeline", children: [
|
|
2450
|
-
card.title ? /* @__PURE__ */
|
|
2451
|
-
/* @__PURE__ */
|
|
2452
|
-
rest > 0 ? /* @__PURE__ */
|
|
2474
|
+
card.title ? /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2475
|
+
/* @__PURE__ */ jsx37("div", { className: "ss-w-fandash-live-tl", children: shown.map((e, i) => /* @__PURE__ */ jsx37(EventRow, { e }, `${e.minute}-${e.side}-${e.type}-${i}`)) }),
|
|
2476
|
+
rest > 0 ? /* @__PURE__ */ jsx37(
|
|
2453
2477
|
"button",
|
|
2454
2478
|
{
|
|
2455
2479
|
type: "button",
|
|
@@ -2464,7 +2488,7 @@ function LiveTimelineCard({ card, ui }) {
|
|
|
2464
2488
|
|
|
2465
2489
|
// src/components/dashboard/MomentumWave.tsx
|
|
2466
2490
|
import { useId } from "react";
|
|
2467
|
-
import { jsx as
|
|
2491
|
+
import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
2468
2492
|
var WIDTH = 270;
|
|
2469
2493
|
var HEIGHT = 56;
|
|
2470
2494
|
var BASELINE = HEIGHT / 2;
|
|
@@ -2493,7 +2517,7 @@ function MomentumWave({
|
|
|
2493
2517
|
const topClass = clubIsHome ? "ss-w-fandash-live-mom-home" : "ss-w-fandash-live-mom-away";
|
|
2494
2518
|
const bottomClass = clubIsHome ? "ss-w-fandash-live-mom-away" : "ss-w-fandash-live-mom-home";
|
|
2495
2519
|
return /* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-live-mom", children: [
|
|
2496
|
-
caption ? /* @__PURE__ */
|
|
2520
|
+
caption ? /* @__PURE__ */ jsx38("span", { className: "ss-w-fandash-live-mom-caption", children: caption }) : null,
|
|
2497
2521
|
/* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-live-mom-plot", children: [
|
|
2498
2522
|
/* @__PURE__ */ jsxs33(
|
|
2499
2523
|
"svg",
|
|
@@ -2505,17 +2529,17 @@ function MomentumWave({
|
|
|
2505
2529
|
"aria-label": caption ?? "Momentum",
|
|
2506
2530
|
children: [
|
|
2507
2531
|
/* @__PURE__ */ jsxs33("defs", { children: [
|
|
2508
|
-
/* @__PURE__ */
|
|
2509
|
-
/* @__PURE__ */
|
|
2532
|
+
/* @__PURE__ */ jsx38("clipPath", { id: topClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: 0, width: WIDTH, height: BASELINE }) }),
|
|
2533
|
+
/* @__PURE__ */ jsx38("clipPath", { id: bottomClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: BASELINE, width: WIDTH, height: HEIGHT - BASELINE }) })
|
|
2510
2534
|
] }),
|
|
2511
|
-
/* @__PURE__ */
|
|
2512
|
-
/* @__PURE__ */
|
|
2513
|
-
/* @__PURE__ */
|
|
2514
|
-
/* @__PURE__ */
|
|
2535
|
+
/* @__PURE__ */ jsx38("path", { d: area, className: topClass, clipPath: `url(#${topClipId})` }),
|
|
2536
|
+
/* @__PURE__ */ jsx38("path", { d: area, className: bottomClass, clipPath: `url(#${bottomClipId})` }),
|
|
2537
|
+
/* @__PURE__ */ jsx38("line", { x1: 0, y1: BASELINE, x2: WIDTH, y2: BASELINE, className: "ss-w-fandash-live-mom-base" }),
|
|
2538
|
+
/* @__PURE__ */ jsx38("path", { d: line, className: "ss-w-fandash-live-mom-line", vectorEffect: "non-scaling-stroke" })
|
|
2515
2539
|
]
|
|
2516
2540
|
}
|
|
2517
2541
|
),
|
|
2518
|
-
/* @__PURE__ */
|
|
2542
|
+
/* @__PURE__ */ jsx38(
|
|
2519
2543
|
"span",
|
|
2520
2544
|
{
|
|
2521
2545
|
className: "ss-w-fandash-live-mom-now",
|
|
@@ -2528,7 +2552,7 @@ function MomentumWave({
|
|
|
2528
2552
|
}
|
|
2529
2553
|
|
|
2530
2554
|
// src/components/dashboard/LiveStatsCard.tsx
|
|
2531
|
-
import { jsx as
|
|
2555
|
+
import { jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
2532
2556
|
function splitWidths2(homeNum, awayNum) {
|
|
2533
2557
|
const total = homeNum + awayNum;
|
|
2534
2558
|
if (total <= 0) return { home: "50%", away: "50%" };
|
|
@@ -2538,8 +2562,8 @@ function splitWidths2(homeNum, awayNum) {
|
|
|
2538
2562
|
function LiveStatsCard({ card }) {
|
|
2539
2563
|
const { data } = card;
|
|
2540
2564
|
return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-card ss-w-fandash-live-stats", children: [
|
|
2541
|
-
card.title ? /* @__PURE__ */
|
|
2542
|
-
/* @__PURE__ */
|
|
2565
|
+
card.title ? /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2566
|
+
/* @__PURE__ */ jsx39("div", { className: "ss-w-fandash-live-stat-rows", children: data.rows.map((r, i) => {
|
|
2543
2567
|
const homeValue = data.clubIsHome ? r.clubValue : r.oppValue;
|
|
2544
2568
|
const awayValue = data.clubIsHome ? r.oppValue : r.clubValue;
|
|
2545
2569
|
const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
|
|
@@ -2547,24 +2571,24 @@ function LiveStatsCard({ card }) {
|
|
|
2547
2571
|
const { home, away } = splitWidths2(homeNum, awayNum);
|
|
2548
2572
|
return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-stat", children: [
|
|
2549
2573
|
/* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-stat-row", children: [
|
|
2550
|
-
/* @__PURE__ */
|
|
2551
|
-
/* @__PURE__ */
|
|
2552
|
-
/* @__PURE__ */
|
|
2574
|
+
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--home", children: homeValue }),
|
|
2575
|
+
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-label", children: r.label }),
|
|
2576
|
+
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--away", children: awayValue })
|
|
2553
2577
|
] }),
|
|
2554
2578
|
/* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-bar", children: [
|
|
2555
|
-
/* @__PURE__ */
|
|
2556
|
-
/* @__PURE__ */
|
|
2579
|
+
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-home", style: { width: home } }),
|
|
2580
|
+
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-away", style: { width: away } })
|
|
2557
2581
|
] })
|
|
2558
2582
|
] }, `${r.label}-${i}`);
|
|
2559
2583
|
}) }),
|
|
2560
|
-
data.momentum.length > 0 ? /* @__PURE__ */
|
|
2584
|
+
data.momentum.length > 0 ? /* @__PURE__ */ jsx39(MomentumWave, { points: data.momentum, caption: data.momentumLabel, clubIsHome: data.clubIsHome }) : data.momentumLabel ? /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-momentum", children: data.momentumLabel }) : null,
|
|
2561
2585
|
data.rows.length > 0 ? /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-legend", children: [
|
|
2562
2586
|
/* @__PURE__ */ jsxs34("span", { className: "ss-w-fandash-live-legend-item", children: [
|
|
2563
|
-
/* @__PURE__ */
|
|
2587
|
+
/* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--home" }),
|
|
2564
2588
|
data.homeName
|
|
2565
2589
|
] }),
|
|
2566
2590
|
/* @__PURE__ */ jsxs34("span", { className: "ss-w-fandash-live-legend-item", children: [
|
|
2567
|
-
/* @__PURE__ */
|
|
2591
|
+
/* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--away" }),
|
|
2568
2592
|
data.awayName
|
|
2569
2593
|
] })
|
|
2570
2594
|
] }) : null
|
|
@@ -2572,7 +2596,7 @@ function LiveStatsCard({ card }) {
|
|
|
2572
2596
|
}
|
|
2573
2597
|
|
|
2574
2598
|
// src/components/dashboard/ClubFanDashboard.tsx
|
|
2575
|
-
import { jsx as
|
|
2599
|
+
import { jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
2576
2600
|
function ClubFanDashboard({ dashboard, onTap, ui }) {
|
|
2577
2601
|
const orderedCards = [
|
|
2578
2602
|
...dashboard.cards.filter((c) => c.cardType === "countdown"),
|
|
@@ -2583,83 +2607,83 @@ function ClubFanDashboard({ dashboard, onTap, ui }) {
|
|
|
2583
2607
|
);
|
|
2584
2608
|
const goalEvents = timelineCard?.data.events.filter((e) => e.type === "goal");
|
|
2585
2609
|
return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash", children: [
|
|
2586
|
-
dashboard.greeting ? /* @__PURE__ */
|
|
2587
|
-
/* @__PURE__ */
|
|
2610
|
+
dashboard.greeting ? /* @__PURE__ */ jsx40("span", { className: dashboard.greetingIsLead ? "ss-w-fandash-greeting ss-w-fandash-greeting--lead" : "ss-w-fandash-greeting", children: dashboard.greeting }) : null,
|
|
2611
|
+
/* @__PURE__ */ jsx40("div", { className: "ss-w-fandash-cards", children: orderedCards.map((card, i) => /* @__PURE__ */ jsx40(FanDashboardCard, { card, onTap, ui, goalEvents }, `${card.cardType}-${i}`)) })
|
|
2588
2612
|
] });
|
|
2589
2613
|
}
|
|
2590
2614
|
function FanDashboardCard({ card, onTap, ui, goalEvents }) {
|
|
2591
2615
|
switch (card.cardType) {
|
|
2592
2616
|
case "fixture":
|
|
2593
|
-
return /* @__PURE__ */
|
|
2617
|
+
return /* @__PURE__ */ jsx40(FixtureCard, { card });
|
|
2594
2618
|
case "countdown":
|
|
2595
|
-
return /* @__PURE__ */
|
|
2619
|
+
return /* @__PURE__ */ jsx40(CountdownCard, { card });
|
|
2596
2620
|
case "injuries":
|
|
2597
|
-
return /* @__PURE__ */
|
|
2621
|
+
return /* @__PURE__ */ jsx40(InjuriesCard, { card, ui });
|
|
2598
2622
|
case "reasonToBet":
|
|
2599
|
-
return /* @__PURE__ */
|
|
2623
|
+
return /* @__PURE__ */ jsx40(ReasonToBetCard, { card });
|
|
2600
2624
|
case "whereToWatch":
|
|
2601
|
-
return /* @__PURE__ */
|
|
2625
|
+
return /* @__PURE__ */ jsx40(WhereToWatchCard, { card });
|
|
2602
2626
|
case "congestedWeek":
|
|
2603
|
-
return /* @__PURE__ */
|
|
2627
|
+
return /* @__PURE__ */ jsx40(CongestedWeekCard, { card, onTap });
|
|
2604
2628
|
case "transfers":
|
|
2605
|
-
return /* @__PURE__ */
|
|
2629
|
+
return /* @__PURE__ */ jsx40(TransfersCard, { card });
|
|
2606
2630
|
case "links":
|
|
2607
|
-
return /* @__PURE__ */
|
|
2631
|
+
return /* @__PURE__ */ jsx40(LinksCard, { card });
|
|
2608
2632
|
case "postMatchResult":
|
|
2609
|
-
return /* @__PURE__ */
|
|
2633
|
+
return /* @__PURE__ */ jsx40(PostMatchResultCard, { card });
|
|
2610
2634
|
case "postMatchGoals":
|
|
2611
|
-
return /* @__PURE__ */
|
|
2635
|
+
return /* @__PURE__ */ jsx40(PostMatchGoalsCard, { card, onTap });
|
|
2612
2636
|
case "postMatchStats":
|
|
2613
|
-
return /* @__PURE__ */
|
|
2637
|
+
return /* @__PURE__ */ jsx40(PostMatchStatsCard, { card, onTap });
|
|
2614
2638
|
case "postMatchTopPerformer":
|
|
2615
|
-
return /* @__PURE__ */
|
|
2639
|
+
return /* @__PURE__ */ jsx40(PostMatchTopPerformerCard, { card, onTap });
|
|
2616
2640
|
case "postMatchNext":
|
|
2617
|
-
return /* @__PURE__ */
|
|
2641
|
+
return /* @__PURE__ */ jsx40(PostMatchNextCard, { card });
|
|
2618
2642
|
case "restingNext":
|
|
2619
|
-
return /* @__PURE__ */
|
|
2643
|
+
return /* @__PURE__ */ jsx40(RestingNextCard, { card, onTap });
|
|
2620
2644
|
case "restingStandings":
|
|
2621
|
-
return /* @__PURE__ */
|
|
2645
|
+
return /* @__PURE__ */ jsx40(RestingStandingsCard, { card, onTap });
|
|
2622
2646
|
case "restingSeason":
|
|
2623
|
-
return /* @__PURE__ */
|
|
2647
|
+
return /* @__PURE__ */ jsx40(RestingSeasonCard, { card, onTap });
|
|
2624
2648
|
case "restingForm":
|
|
2625
|
-
return /* @__PURE__ */
|
|
2649
|
+
return /* @__PURE__ */ jsx40(RestingFormCard, { card });
|
|
2626
2650
|
case "liveScore":
|
|
2627
|
-
return /* @__PURE__ */
|
|
2651
|
+
return /* @__PURE__ */ jsx40(LiveScoreCard, { card, goalEvents });
|
|
2628
2652
|
case "liveTimeline":
|
|
2629
|
-
return /* @__PURE__ */
|
|
2653
|
+
return /* @__PURE__ */ jsx40(LiveTimelineCard, { card, ui });
|
|
2630
2654
|
case "liveStats":
|
|
2631
|
-
return /* @__PURE__ */
|
|
2655
|
+
return /* @__PURE__ */ jsx40(LiveStatsCard, { card });
|
|
2632
2656
|
default:
|
|
2633
2657
|
return null;
|
|
2634
2658
|
}
|
|
2635
2659
|
}
|
|
2636
2660
|
|
|
2637
2661
|
// src/components/ChatMessage.tsx
|
|
2638
|
-
import { jsx as
|
|
2662
|
+
import { jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
2639
2663
|
function ChatMessage({ message, disabled, onAct, onTap, ui, slip, monitor }) {
|
|
2640
2664
|
if (message.role === "user") {
|
|
2641
|
-
return /* @__PURE__ */
|
|
2665
|
+
return /* @__PURE__ */ jsx41("div", { className: "ss-w-msg ss-w-user", "data-msg-id": message.id, children: /* @__PURE__ */ jsx41("div", { className: "ss-w-bubble", children: message.text }) });
|
|
2642
2666
|
}
|
|
2643
2667
|
const onFanDashboardTap = (card) => {
|
|
2644
2668
|
onAct({ message: card.actionLabel, actionRef: card.actionRef, label: card.actionLabel || card.title || "" });
|
|
2645
2669
|
};
|
|
2646
2670
|
return /* @__PURE__ */ jsxs36("div", { className: "ss-w-msg ss-w-bot", "data-msg-id": message.id, children: [
|
|
2647
|
-
message.text && !message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */
|
|
2648
|
-
message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */
|
|
2649
|
-
message.clubFanDashboard ? /* @__PURE__ */
|
|
2650
|
-
/* @__PURE__ */
|
|
2651
|
-
/* @__PURE__ */
|
|
2652
|
-
/* @__PURE__ */
|
|
2653
|
-
/* @__PURE__ */
|
|
2654
|
-
/* @__PURE__ */
|
|
2671
|
+
message.text && !message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(Markdown, { text: message.text }) : null,
|
|
2672
|
+
message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(GreetingDashboard, { dashboard: message.greetingDashboard, onTap }) : null,
|
|
2673
|
+
message.clubFanDashboard ? /* @__PURE__ */ jsx41(ClubFanDashboard, { dashboard: message.clubFanDashboard, onTap: onFanDashboardTap, ui }) : null,
|
|
2674
|
+
/* @__PURE__ */ jsx41(EntityCardList, { cards: message.cards, disabled, showLessLabel: ui?.showLess, showMoreLabel: ui?.showMore }),
|
|
2675
|
+
/* @__PURE__ */ jsx41(BettingInsightList, { insights: message.insights, ui, slip, monitor }),
|
|
2676
|
+
/* @__PURE__ */ jsx41(MarketOddsCardList, { cards: message.marketOdds, ui, slip, monitor }),
|
|
2677
|
+
/* @__PURE__ */ jsx41(OddsMovementCardList, { cards: message.oddsMovement, ui, monitor }),
|
|
2678
|
+
/* @__PURE__ */ jsx41(ActionButtons, { actions: message.actions, loading: false, disabled, onAct })
|
|
2655
2679
|
] });
|
|
2656
2680
|
}
|
|
2657
2681
|
|
|
2658
2682
|
// src/components/IntentChips.tsx
|
|
2659
|
-
import { jsx as
|
|
2683
|
+
import { jsx as jsx42 } from "react/jsx-runtime";
|
|
2660
2684
|
function IntentChips({ chips, onPick }) {
|
|
2661
2685
|
if (chips.length === 0) return null;
|
|
2662
|
-
return /* @__PURE__ */
|
|
2686
|
+
return /* @__PURE__ */ jsx42("div", { className: "ss-w-chips", children: chips.map((c, i) => /* @__PURE__ */ jsx42("button", { type: "button", className: "ss-w-chip", onClick: () => onPick(c.text), children: c.text }, `${c.text}-${i}`)) });
|
|
2663
2687
|
}
|
|
2664
2688
|
|
|
2665
2689
|
// src/scroll.ts
|
|
@@ -2669,7 +2693,7 @@ function isPinnedToBottom(el, threshold = PIN_THRESHOLD) {
|
|
|
2669
2693
|
}
|
|
2670
2694
|
|
|
2671
2695
|
// src/components/MessageList.tsx
|
|
2672
|
-
import { jsx as
|
|
2696
|
+
import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
2673
2697
|
function turnAnchor(messages) {
|
|
2674
2698
|
const last = messages[messages.length - 1];
|
|
2675
2699
|
if (!last || last.role !== "assistant") return null;
|
|
@@ -2707,7 +2731,7 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
2707
2731
|
if (listRef.current) pinnedRef.current = isPinnedToBottom(listRef.current);
|
|
2708
2732
|
},
|
|
2709
2733
|
children: [
|
|
2710
|
-
state.messages.map((m) => /* @__PURE__ */
|
|
2734
|
+
state.messages.map((m) => /* @__PURE__ */ jsx43(
|
|
2711
2735
|
ChatMessage,
|
|
2712
2736
|
{
|
|
2713
2737
|
message: m,
|
|
@@ -2723,25 +2747,25 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
2723
2747
|
},
|
|
2724
2748
|
m.id
|
|
2725
2749
|
)),
|
|
2726
|
-
state.isStreaming && state.actionsLoading ? /* @__PURE__ */
|
|
2750
|
+
state.isStreaming && state.actionsLoading ? /* @__PURE__ */ jsx43(ActionButtons, { actions: [], loading: true, onAct: () => {
|
|
2727
2751
|
} }) : null,
|
|
2728
|
-
state.status ? /* @__PURE__ */
|
|
2752
|
+
state.status ? /* @__PURE__ */ jsx43("div", { className: "ss-w-status", children: state.status }) : null,
|
|
2729
2753
|
state.error ? /* @__PURE__ */ jsxs37("div", { className: "ss-w-error", role: "alert", children: [
|
|
2730
|
-
/* @__PURE__ */
|
|
2731
|
-
/* @__PURE__ */
|
|
2754
|
+
/* @__PURE__ */ jsx43("span", { children: "message" in state.error ? state.error.message : ui.somethingWentWrong }),
|
|
2755
|
+
/* @__PURE__ */ jsx43("button", { type: "button", className: "ss-w-retry", onClick: () => controller.retry(), children: ui.retry })
|
|
2732
2756
|
] }) : null,
|
|
2733
|
-
!hasUserMessage && !hasDashboard ? /* @__PURE__ */
|
|
2734
|
-
/* @__PURE__ */
|
|
2757
|
+
!hasUserMessage && !hasDashboard ? /* @__PURE__ */ jsx43(IntentChips, { chips: state.starters, onPick: (t) => send(t) }) : null,
|
|
2758
|
+
/* @__PURE__ */ jsx43("div", { ref: endRef, className: "ss-w-turn-spacer", "aria-hidden": "true" })
|
|
2735
2759
|
]
|
|
2736
2760
|
}
|
|
2737
2761
|
);
|
|
2738
2762
|
}
|
|
2739
2763
|
|
|
2740
2764
|
// src/components/ChatInput.tsx
|
|
2741
|
-
import { useState as
|
|
2742
|
-
import { jsx as
|
|
2765
|
+
import { useState as useState15 } from "react";
|
|
2766
|
+
import { jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
2743
2767
|
function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message" }) {
|
|
2744
|
-
const [value, setValue] =
|
|
2768
|
+
const [value, setValue] = useState15("");
|
|
2745
2769
|
const submit = () => {
|
|
2746
2770
|
const t = value.trim();
|
|
2747
2771
|
if (!t) return;
|
|
@@ -2755,13 +2779,13 @@ function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop r
|
|
|
2755
2779
|
}
|
|
2756
2780
|
};
|
|
2757
2781
|
return /* @__PURE__ */ jsxs38("div", { className: "ss-w-input", children: [
|
|
2758
|
-
/* @__PURE__ */
|
|
2759
|
-
streaming ? /* @__PURE__ */
|
|
2782
|
+
/* @__PURE__ */ jsx44("textarea", { className: "ss-w-textarea", rows: 1, placeholder, value, disabled: streaming, onChange: (e) => setValue(e.target.value), onKeyDown }),
|
|
2783
|
+
streaming ? /* @__PURE__ */ jsx44("button", { type: "button", className: "ss-w-send ss-w-stop", "aria-label": stopLabel, onClick: onStop, children: /* @__PURE__ */ jsx44("span", { className: "ss-w-stop-glyph" }) }) : /* @__PURE__ */ jsx44("button", { type: "button", className: "ss-w-send", "aria-label": sendLabel, onClick: submit, children: /* @__PURE__ */ jsx44(SendIcon, {}) })
|
|
2760
2784
|
] });
|
|
2761
2785
|
}
|
|
2762
2786
|
|
|
2763
2787
|
// src/components/TabBar.tsx
|
|
2764
|
-
import { jsx as
|
|
2788
|
+
import { jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
2765
2789
|
var TABS = [
|
|
2766
2790
|
{ tab: "chat", labelKey: "tabChat" },
|
|
2767
2791
|
{ tab: "matches", labelKey: "tabMatches" },
|
|
@@ -2775,7 +2799,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
|
|
|
2775
2799
|
matches: monitor.matchesDot && monitor.activeTab !== "matches",
|
|
2776
2800
|
odds: monitor.oddsDot && monitor.activeTab !== "odds"
|
|
2777
2801
|
};
|
|
2778
|
-
return /* @__PURE__ */
|
|
2802
|
+
return /* @__PURE__ */ jsx45("div", { className: "ss-w-tabs", role: "tablist", children: TABS.map(({ tab, labelKey }) => {
|
|
2779
2803
|
const active = monitor.activeTab === tab;
|
|
2780
2804
|
const count = counts[tab];
|
|
2781
2805
|
return /* @__PURE__ */ jsxs39(
|
|
@@ -2789,8 +2813,8 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
|
|
|
2789
2813
|
onClick: () => monitor.setActiveTab(tab),
|
|
2790
2814
|
children: [
|
|
2791
2815
|
ui[labelKey],
|
|
2792
|
-
count > 0 && /* @__PURE__ */
|
|
2793
|
-
dots[tab] && /* @__PURE__ */
|
|
2816
|
+
count > 0 && /* @__PURE__ */ jsx45("span", { className: "ss-w-tab-count", children: count }),
|
|
2817
|
+
dots[tab] && /* @__PURE__ */ jsx45("span", { className: "ss-w-tab-dot", "aria-hidden": "true" })
|
|
2794
2818
|
]
|
|
2795
2819
|
},
|
|
2796
2820
|
tab
|
|
@@ -2799,7 +2823,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
|
|
|
2799
2823
|
}
|
|
2800
2824
|
|
|
2801
2825
|
// src/components/MonitorMatchCard.tsx
|
|
2802
|
-
import { jsx as
|
|
2826
|
+
import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
2803
2827
|
function chipSelection(row, matchId, conversationId) {
|
|
2804
2828
|
const chip = row.market;
|
|
2805
2829
|
if (!chip || !chip.addToSlipEnabled || typeof chip.matchOddsId !== "number" || typeof chip.price !== "number") return null;
|
|
@@ -2825,36 +2849,36 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
2825
2849
|
return /* @__PURE__ */ jsxs40("div", { className: "ss-w-mon", children: [
|
|
2826
2850
|
/* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-top", children: [
|
|
2827
2851
|
live && /* @__PURE__ */ jsxs40("span", { className: "ss-w-fandash-live-pill", children: [
|
|
2828
|
-
/* @__PURE__ */
|
|
2852
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
2829
2853
|
ui.liveLabel
|
|
2830
2854
|
] }),
|
|
2831
|
-
match.phase === "fullTime" && /* @__PURE__ */
|
|
2855
|
+
match.phase === "fullTime" && /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
|
|
2832
2856
|
kickoff && /* @__PURE__ */ jsxs40("span", { className: "ss-w-mon-pill", children: [
|
|
2833
2857
|
kickoff.dayLabel,
|
|
2834
2858
|
" \xB7 ",
|
|
2835
2859
|
kickoff.time
|
|
2836
2860
|
] }),
|
|
2837
|
-
live && match.minuteLabel && /* @__PURE__ */
|
|
2838
|
-
match.competitionName && /* @__PURE__ */
|
|
2839
|
-
/* @__PURE__ */
|
|
2861
|
+
live && match.minuteLabel && /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-min", children: match.minuteLabel }),
|
|
2862
|
+
match.competitionName && /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-comp", children: match.competitionName }),
|
|
2863
|
+
/* @__PURE__ */ jsx46(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
|
|
2840
2864
|
] }),
|
|
2841
2865
|
/* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-main", children: [
|
|
2842
2866
|
/* @__PURE__ */ jsxs40("span", { className: "ss-w-mon-side", children: [
|
|
2843
|
-
/* @__PURE__ */
|
|
2844
|
-
/* @__PURE__ */
|
|
2867
|
+
/* @__PURE__ */ jsx46(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
|
|
2868
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-name", children: match.homeTeamName })
|
|
2845
2869
|
] }),
|
|
2846
|
-
match.phase === "preMatch" ? /* @__PURE__ */
|
|
2870
|
+
match.phase === "preMatch" ? /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs40("span", { className: "ss-w-mon-score", children: [
|
|
2847
2871
|
match.homeScore,
|
|
2848
|
-
/* @__PURE__ */
|
|
2872
|
+
/* @__PURE__ */ jsx46("i", { children: "\u2013" }),
|
|
2849
2873
|
match.awayScore
|
|
2850
2874
|
] }),
|
|
2851
2875
|
/* @__PURE__ */ jsxs40("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
|
|
2852
|
-
/* @__PURE__ */
|
|
2853
|
-
/* @__PURE__ */
|
|
2876
|
+
/* @__PURE__ */ jsx46(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
|
|
2877
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-name", children: match.awayTeamName })
|
|
2854
2878
|
] })
|
|
2855
2879
|
] }),
|
|
2856
|
-
scorers.length > 0 && /* @__PURE__ */
|
|
2857
|
-
/* @__PURE__ */
|
|
2880
|
+
scorers.length > 0 && /* @__PURE__ */ jsx46("div", { className: "ss-w-mon-scorers", children: scorers.map((e) => `${e.player ?? ""} ${e.minuteLabel}`).join(", ") }),
|
|
2881
|
+
/* @__PURE__ */ jsx46("div", { className: "ss-w-mon-stats", children: orderedRows.map((row) => {
|
|
2858
2882
|
const total = row.homeNum + row.awayNum;
|
|
2859
2883
|
const homePct = total > 0 ? row.homeNum / total * 75 : 0;
|
|
2860
2884
|
const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
|
|
@@ -2862,13 +2886,13 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
2862
2886
|
const selection = chipSelection(row, match.matchId, slip.conversationId);
|
|
2863
2887
|
return /* @__PURE__ */ jsxs40("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
|
|
2864
2888
|
/* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-stat-row", children: [
|
|
2865
|
-
/* @__PURE__ */
|
|
2866
|
-
/* @__PURE__ */
|
|
2867
|
-
/* @__PURE__ */
|
|
2889
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
|
|
2890
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-l", children: row.label }),
|
|
2891
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
|
|
2868
2892
|
] }),
|
|
2869
2893
|
/* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-bar", children: [
|
|
2870
|
-
/* @__PURE__ */
|
|
2871
|
-
/* @__PURE__ */
|
|
2894
|
+
/* @__PURE__ */ jsx46("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
|
|
2895
|
+
/* @__PURE__ */ jsx46("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
|
|
2872
2896
|
] }),
|
|
2873
2897
|
row.market && /* @__PURE__ */ jsxs40("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
|
|
2874
2898
|
/* @__PURE__ */ jsxs40("span", { children: [
|
|
@@ -2877,8 +2901,8 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
2877
2901
|
row.market.selectionLabel
|
|
2878
2902
|
] }),
|
|
2879
2903
|
/* @__PURE__ */ jsxs40("span", { className: "ss-w-mon-stat-mkt-right", children: [
|
|
2880
|
-
row.market.isSuspended ? /* @__PURE__ */
|
|
2881
|
-
/* @__PURE__ */
|
|
2904
|
+
row.market.isSuspended ? /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }) : typeof row.market.price === "number" && /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
|
|
2905
|
+
/* @__PURE__ */ jsx46(
|
|
2882
2906
|
SlipButton,
|
|
2883
2907
|
{
|
|
2884
2908
|
selection,
|
|
@@ -2892,28 +2916,28 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
2892
2916
|
] })
|
|
2893
2917
|
] }, row.label);
|
|
2894
2918
|
}) }),
|
|
2895
|
-
match.status === "stale" && /* @__PURE__ */
|
|
2919
|
+
match.status === "stale" && /* @__PURE__ */ jsx46("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
|
|
2896
2920
|
match.momentum.length > 0 && /* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-mom", children: [
|
|
2897
2921
|
/* @__PURE__ */ jsxs40("div", { className: "ss-w-mon-stat-row", children: [
|
|
2898
|
-
/* @__PURE__ */
|
|
2899
|
-
/* @__PURE__ */
|
|
2900
|
-
/* @__PURE__ */
|
|
2922
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: typeof match.momentumHomePct === "number" ? `${match.momentumHomePct}%` : "" }),
|
|
2923
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
|
|
2924
|
+
/* @__PURE__ */ jsx46("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: typeof match.momentumHomePct === "number" ? `${100 - match.momentumHomePct}%` : "" })
|
|
2901
2925
|
] }),
|
|
2902
|
-
/* @__PURE__ */
|
|
2926
|
+
/* @__PURE__ */ jsx46(MomentumWave, { points: match.momentum, clubIsHome: true })
|
|
2903
2927
|
] }),
|
|
2904
|
-
match.mainMarket && match.phase !== "fullTime" && /* @__PURE__ */
|
|
2905
|
-
match.phase === "fullTime" && /* @__PURE__ */
|
|
2928
|
+
match.mainMarket && match.phase !== "fullTime" && /* @__PURE__ */ jsx46(MarketOddsCardList, { cards: [toMarketOddsVM(match.mainMarket)], ui, slip }),
|
|
2929
|
+
match.phase === "fullTime" && /* @__PURE__ */ jsx46("div", { className: "ss-w-mon-grace", children: ui.graceNote })
|
|
2906
2930
|
] });
|
|
2907
2931
|
}
|
|
2908
2932
|
|
|
2909
2933
|
// src/components/MonitorTabs.tsx
|
|
2910
|
-
import { jsx as
|
|
2934
|
+
import { jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
2911
2935
|
function ContextLine({ m, monitor, ui }) {
|
|
2912
2936
|
const kick = m.kickoffUtc ? ui.bettingKickoff(m.kickoffUtc) : void 0;
|
|
2913
2937
|
return /* @__PURE__ */ jsxs41("div", { className: "ss-w-mk-ctx", children: [
|
|
2914
2938
|
/* @__PURE__ */ jsxs41("span", { className: "ss-w-mk-ctx-side", children: [
|
|
2915
|
-
/* @__PURE__ */
|
|
2916
|
-
/* @__PURE__ */
|
|
2939
|
+
/* @__PURE__ */ jsx47(Crest2, { kind: "team", url: m.homeCrestUrl ?? void 0, name: m.homeTeamName ?? void 0 }),
|
|
2940
|
+
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: m.homeTeamName })
|
|
2917
2941
|
] }),
|
|
2918
2942
|
m.phase === "preMatch" ? kick && /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-pill", children: [
|
|
2919
2943
|
kick.dayLabel,
|
|
@@ -2925,25 +2949,25 @@ function ContextLine({ m, monitor, ui }) {
|
|
|
2925
2949
|
m.awayScore
|
|
2926
2950
|
] }),
|
|
2927
2951
|
/* @__PURE__ */ jsxs41("span", { className: "ss-w-mk-ctx-side", children: [
|
|
2928
|
-
/* @__PURE__ */
|
|
2929
|
-
/* @__PURE__ */
|
|
2952
|
+
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: m.awayTeamName }),
|
|
2953
|
+
/* @__PURE__ */ jsx47(Crest2, { kind: "team", url: m.awayCrestUrl ?? void 0, name: m.awayTeamName ?? void 0 })
|
|
2930
2954
|
] }),
|
|
2931
|
-
m.minuteLabel && /* @__PURE__ */
|
|
2955
|
+
m.minuteLabel && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-min", children: m.minuteLabel }),
|
|
2932
2956
|
/* @__PURE__ */ jsxs41("span", { className: "ss-w-mk-ctx-right", children: [
|
|
2933
|
-
m.isSuspended && !m.isSettled && /* @__PURE__ */
|
|
2934
|
-
m.isSettled && /* @__PURE__ */
|
|
2935
|
-
m.status === "stale" && /* @__PURE__ */
|
|
2957
|
+
m.isSuspended && !m.isSettled && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }),
|
|
2958
|
+
m.isSettled && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
|
|
2959
|
+
m.status === "stale" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-asof", children: ui.asOf(new Date(m.asOfUtc).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" })) }),
|
|
2936
2960
|
(() => {
|
|
2937
2961
|
const pin = monitor.pins.find((p) => p.key === m.key);
|
|
2938
|
-
return pin ? /* @__PURE__ */
|
|
2962
|
+
return pin ? /* @__PURE__ */ jsx47(PinToggle, { ui, monitor, pin }) : null;
|
|
2939
2963
|
})()
|
|
2940
2964
|
] })
|
|
2941
2965
|
] });
|
|
2942
2966
|
}
|
|
2943
2967
|
function MatchesPanel({ monitor, ui, slip }) {
|
|
2944
2968
|
const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
|
|
2945
|
-
if (matches.length === 0) return /* @__PURE__ */
|
|
2946
|
-
return /* @__PURE__ */
|
|
2969
|
+
if (matches.length === 0) return /* @__PURE__ */ jsx47("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
|
|
2970
|
+
return /* @__PURE__ */ jsx47("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsx47(
|
|
2947
2971
|
MonitorMatchCard,
|
|
2948
2972
|
{
|
|
2949
2973
|
match: m,
|
|
@@ -2967,10 +2991,10 @@ function withSinceViewMovement(vm, prev) {
|
|
|
2967
2991
|
}
|
|
2968
2992
|
function OddsPanel({ monitor, ui, slip }) {
|
|
2969
2993
|
const markets = (monitor.snapshot?.markets ?? []).filter((m) => monitor.pins.some((p) => p.key === m.key));
|
|
2970
|
-
if (markets.length === 0) return /* @__PURE__ */
|
|
2971
|
-
return /* @__PURE__ */
|
|
2972
|
-
/* @__PURE__ */
|
|
2973
|
-
m.card && /* @__PURE__ */
|
|
2994
|
+
if (markets.length === 0) return /* @__PURE__ */ jsx47("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
|
|
2995
|
+
return /* @__PURE__ */ jsx47("div", { className: "ss-w-mon-list", children: markets.map((m) => /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
|
|
2996
|
+
/* @__PURE__ */ jsx47(ContextLine, { m, monitor, ui }),
|
|
2997
|
+
m.card && /* @__PURE__ */ jsx47(
|
|
2974
2998
|
MarketOddsCardList,
|
|
2975
2999
|
{
|
|
2976
3000
|
cards: [withSinceViewMovement(toMarketOddsVM(m.card), monitor.lastViewedPrices[m.key])],
|
|
@@ -2979,16 +3003,16 @@ function OddsPanel({ monitor, ui, slip }) {
|
|
|
2979
3003
|
inSlipIds: monitor.inSlip
|
|
2980
3004
|
}
|
|
2981
3005
|
),
|
|
2982
|
-
m.history && /* @__PURE__ */
|
|
2983
|
-
!m.card && !m.history && /* @__PURE__ */
|
|
3006
|
+
m.history && /* @__PURE__ */ jsx47(OddsMovementCardList, { cards: [toOddsMovementVM(m.history)], ui }),
|
|
3007
|
+
!m.card && !m.history && /* @__PURE__ */ jsx47("div", { className: "ss-w-mon-empty-card", children: ui.oddsUnavailable })
|
|
2984
3008
|
] }, m.key)) });
|
|
2985
3009
|
}
|
|
2986
3010
|
|
|
2987
3011
|
// src/components/ChatPanel.tsx
|
|
2988
|
-
import { jsx as
|
|
3012
|
+
import { jsx as jsx48, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
2989
3013
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
2990
3014
|
function useIsModal() {
|
|
2991
|
-
const [modal, setModal] =
|
|
3015
|
+
const [modal, setModal] = useState16(false);
|
|
2992
3016
|
useEffect8(() => {
|
|
2993
3017
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
2994
3018
|
const mql = window.matchMedia(FULLSCREEN_QUERY);
|
|
@@ -3017,8 +3041,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3017
3041
|
if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
|
|
3018
3042
|
}, [monitor, state.isStreaming, state.messages.length]);
|
|
3019
3043
|
return /* @__PURE__ */ jsxs42("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
3020
|
-
/* @__PURE__ */
|
|
3021
|
-
monitor && /* @__PURE__ */
|
|
3044
|
+
/* @__PURE__ */ jsx48(ChatHeader, { onClose: close, closeLabel: ui.closeChat, logoUrl: ui.logoUrl, headerTitle: ui.headerTitle }),
|
|
3045
|
+
monitor && /* @__PURE__ */ jsx48(
|
|
3022
3046
|
TabBar,
|
|
3023
3047
|
{
|
|
3024
3048
|
monitor,
|
|
@@ -3027,16 +3051,16 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3027
3051
|
oddsCount: monitor.pins.filter((p) => p.kind !== "match").length
|
|
3028
3052
|
}
|
|
3029
3053
|
),
|
|
3030
|
-
/* @__PURE__ */
|
|
3054
|
+
/* @__PURE__ */ jsx48(
|
|
3031
3055
|
"div",
|
|
3032
3056
|
{
|
|
3033
3057
|
style: !monitor || monitor.activeTab === "chat" ? { display: "contents" } : { position: "absolute", inset: 0, visibility: "hidden", display: "flex", flexDirection: "column" },
|
|
3034
|
-
children: /* @__PURE__ */
|
|
3058
|
+
children: /* @__PURE__ */ jsx48(MessageList, { controller, ui, slip, onDashboardTap, monitor })
|
|
3035
3059
|
}
|
|
3036
3060
|
),
|
|
3037
|
-
monitor && monitor.activeTab === "matches" && /* @__PURE__ */
|
|
3038
|
-
monitor && monitor.activeTab === "odds" && /* @__PURE__ */
|
|
3039
|
-
/* @__PURE__ */
|
|
3061
|
+
monitor && monitor.activeTab === "matches" && /* @__PURE__ */ jsx48(MatchesPanel, { monitor, ui, slip }),
|
|
3062
|
+
monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx48(OddsPanel, { monitor, ui, slip }),
|
|
3063
|
+
/* @__PURE__ */ jsx48(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: handleSend, onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
|
|
3040
3064
|
] });
|
|
3041
3065
|
}
|
|
3042
3066
|
|
|
@@ -3082,7 +3106,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
3082
3106
|
.ss-w-root[data-ss-w-pos="right"] .ss-w-fab-wrap { right: var(--ss-w-offset-x); }
|
|
3083
3107
|
.ss-w-root[data-ss-w-pos="left"] .ss-w-fab-wrap { left: var(--ss-w-offset-x); align-items: flex-start; }
|
|
3084
3108
|
.ss-w-fab { width: 56px; height: 56px; border: none; border-radius: 50%; background: var(--ss-w-nav); color: #fff; cursor: pointer; display: grid; place-items: center; box-shadow: 0 6px 20px rgba(0,0,0,.28); }
|
|
3085
|
-
.ss-w-fab-mark { width: 30px; height: 30px; display: block; }
|
|
3109
|
+
.ss-w-fab-mark { width: 30px; height: 30px; display: block; object-fit: contain; }
|
|
3086
3110
|
.ss-w-greeting { max-width: 240px; display: flex; align-items: flex-start; background: var(--ss-w-panel); color: var(--ss-w-ink); border: 1px solid var(--ss-w-line); border-radius: 12px; box-shadow: 0 4px 14px rgba(0,0,0,.14); }
|
|
3087
3111
|
.ss-w-greeting-body { flex: 1; min-width: 0; text-align: left; background: none; border: none; color: inherit; font: inherit; cursor: pointer; padding: 9px 4px 9px 12px; }
|
|
3088
3112
|
.ss-w-greeting-x { flex: none; background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 17px; line-height: 1; padding: 7px 9px 0 2px; }
|
|
@@ -3099,7 +3123,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
3099
3123
|
.ss-w-root[data-ss-w-pos="left"] .ss-w-panel { inset: 0; width: auto; height: auto; border: none; border-radius: 0; }
|
|
3100
3124
|
}
|
|
3101
3125
|
.ss-w-header { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--ss-w-line); }
|
|
3102
|
-
.ss-w-header-mark { width: 18px; height: 18px; display: block; }
|
|
3126
|
+
.ss-w-header-mark { width: 18px; height: 18px; display: block; object-fit: contain; }
|
|
3103
3127
|
.ss-w-header-title { font-weight: 660; }
|
|
3104
3128
|
.ss-w-close { margin-left: auto; background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
|
|
3105
3129
|
|
|
@@ -3792,7 +3816,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
3792
3816
|
`;
|
|
3793
3817
|
|
|
3794
3818
|
// src/StatsWidget.tsx
|
|
3795
|
-
import { jsx as
|
|
3819
|
+
import { jsx as jsx49 } from "react/jsx-runtime";
|
|
3796
3820
|
function buildClient(props) {
|
|
3797
3821
|
try {
|
|
3798
3822
|
if ("client" in props && props.client) {
|
|
@@ -3860,12 +3884,13 @@ function StatsWidget(props) {
|
|
|
3860
3884
|
}, [built, ui.injectStyles]);
|
|
3861
3885
|
if (!built) return null;
|
|
3862
3886
|
const attrs = themeAttrs(ui);
|
|
3863
|
-
return /* @__PURE__ */
|
|
3887
|
+
return /* @__PURE__ */ jsx49("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__ */ jsx49(ChatPanel, { controller, ui, slip, onDashboardTap, monitor: monitor.enabled ? monitor : void 0 }) : /* @__PURE__ */ jsx49(
|
|
3864
3888
|
ChatFab,
|
|
3865
3889
|
{
|
|
3866
3890
|
label: ui.launcherLabel,
|
|
3867
3891
|
greeting: ui.greeting,
|
|
3868
3892
|
popupText: controller.state.popupText,
|
|
3893
|
+
logoUrl: ui.logoUrl,
|
|
3869
3894
|
onOpen: controller.open,
|
|
3870
3895
|
onDismissPopup: controller.dismissPopup,
|
|
3871
3896
|
dismissLabel: ui.dismissGreeting
|