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