@sensiblestats/widget-react 0.38.0 → 0.39.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 +6 -0
- package/dist/index.cjs +149 -65
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +365 -281
- package/dist/index.js.map +1 -1
- package/dist/styles.css +6 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/StatsWidget.tsx
|
|
2
|
-
import { useCallback as useCallback5, useEffect as
|
|
2
|
+
import { useCallback as useCallback5, useEffect as useEffect11, useMemo as useMemo2, useRef as useRef8 } from "react";
|
|
3
3
|
import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
|
|
4
4
|
|
|
5
5
|
// src/kickoff.ts
|
|
@@ -21,6 +21,7 @@ var STRINGS = {
|
|
|
21
21
|
placeholder: "Ask about a team, player or match\u2026",
|
|
22
22
|
closeChat: "Close chat",
|
|
23
23
|
newConversation: "New conversation",
|
|
24
|
+
moreOptions: "More options",
|
|
24
25
|
chatDialogLabel: "SensibleStats chat",
|
|
25
26
|
stopResponse: "Stop response",
|
|
26
27
|
sendMessage: "Send message",
|
|
@@ -94,6 +95,7 @@ var STRINGS = {
|
|
|
94
95
|
placeholder: "Bir tak\u0131m, oyuncu veya ma\xE7 hakk\u0131nda sor\u2026",
|
|
95
96
|
closeChat: "Sohbeti kapat",
|
|
96
97
|
newConversation: "Yeni sohbet",
|
|
98
|
+
moreOptions: "Di\u011Fer se\xE7enekler",
|
|
97
99
|
chatDialogLabel: "SensibleStats sohbet",
|
|
98
100
|
stopResponse: "Yan\u0131t\u0131 durdur",
|
|
99
101
|
sendMessage: "Mesaj g\xF6nder",
|
|
@@ -190,6 +192,7 @@ function normalizeUi(cfg) {
|
|
|
190
192
|
injectStyles: cfg.injectStyles ?? true,
|
|
191
193
|
closeChat: strings.closeChat,
|
|
192
194
|
newConversation: strings.newConversation,
|
|
195
|
+
moreOptions: strings.moreOptions,
|
|
193
196
|
chatDialogLabel: strings.chatDialogLabel,
|
|
194
197
|
stopResponse: strings.stopResponse,
|
|
195
198
|
sendMessage: strings.sendMessage,
|
|
@@ -1378,7 +1381,7 @@ import { useState as useState2 } from "react";
|
|
|
1378
1381
|
var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
|
|
1379
1382
|
|
|
1380
1383
|
// src/components/Icons.tsx
|
|
1381
|
-
import { jsx } from "react/jsx-runtime";
|
|
1384
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
1382
1385
|
function SsMark({ className }) {
|
|
1383
1386
|
return /* @__PURE__ */ jsx("img", { className, src: SS_LOGO_DATA_URI, alt: "", "aria-hidden": "true" });
|
|
1384
1387
|
}
|
|
@@ -1394,6 +1397,13 @@ function ChevronIcon() {
|
|
|
1394
1397
|
function NewChatIcon() {
|
|
1395
1398
|
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "none", d: "M12 5v14M5 12h14", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) });
|
|
1396
1399
|
}
|
|
1400
|
+
function KebabIcon() {
|
|
1401
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsxs("g", { fill: "currentColor", children: [
|
|
1402
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "5", r: "1.6" }),
|
|
1403
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1.6" }),
|
|
1404
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "19", r: "1.6" })
|
|
1405
|
+
] }) });
|
|
1406
|
+
}
|
|
1397
1407
|
var DASHBOARD_EMOJI = {
|
|
1398
1408
|
football: "\u26BD",
|
|
1399
1409
|
"goal-net": "\u{1F945}",
|
|
@@ -1423,11 +1433,11 @@ function BrandMark({ logoUrl, className }) {
|
|
|
1423
1433
|
}
|
|
1424
1434
|
|
|
1425
1435
|
// src/components/GreetingBubble.tsx
|
|
1426
|
-
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
1436
|
+
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1427
1437
|
function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
|
|
1428
|
-
return /* @__PURE__ */
|
|
1429
|
-
/* @__PURE__ */
|
|
1430
|
-
/* @__PURE__ */
|
|
1438
|
+
return /* @__PURE__ */ jsxs2("div", { className: "ss-w-greeting", role: "note", children: [
|
|
1439
|
+
/* @__PURE__ */ jsxs2("button", { type: "button", className: "ss-w-greeting-body", onClick: onOpen, children: [
|
|
1440
|
+
/* @__PURE__ */ jsxs2("span", { className: "ss-w-greeting-dots", "aria-hidden": "true", children: [
|
|
1431
1441
|
/* @__PURE__ */ jsx3("i", {}),
|
|
1432
1442
|
/* @__PURE__ */ jsx3("i", {}),
|
|
1433
1443
|
/* @__PURE__ */ jsx3("i", {})
|
|
@@ -1439,7 +1449,7 @@ function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
|
|
|
1439
1449
|
}
|
|
1440
1450
|
|
|
1441
1451
|
// src/components/ChatFab.tsx
|
|
1442
|
-
import { jsx as jsx4, jsxs as
|
|
1452
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
1443
1453
|
function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup, dismissLabel = "Dismiss", introAllowed = false, onIntroStart }) {
|
|
1444
1454
|
const bubble = popupText ?? greeting;
|
|
1445
1455
|
const [intro, setIntro] = useState3(false);
|
|
@@ -1451,28 +1461,96 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
|
|
|
1451
1461
|
onIntroStart?.();
|
|
1452
1462
|
}
|
|
1453
1463
|
}, [bubble, onIntroStart]);
|
|
1454
|
-
return /* @__PURE__ */
|
|
1464
|
+
return /* @__PURE__ */ jsxs3("div", { className: intro ? "ss-w-fab-wrap ss-w-intro" : "ss-w-fab-wrap", children: [
|
|
1455
1465
|
bubble ? /* @__PURE__ */ jsx4(GreetingBubble, { text: bubble, onOpen, onDismiss: popupText ? onDismissPopup : void 0, dismissLabel }) : null,
|
|
1456
1466
|
/* @__PURE__ */ jsx4("button", { type: "button", className: "ss-w-fab", "aria-label": label, onClick: onOpen, children: /* @__PURE__ */ jsx4(BrandMark, { logoUrl, className: "ss-w-fab-mark" }) })
|
|
1457
1467
|
] });
|
|
1458
1468
|
}
|
|
1459
1469
|
|
|
1460
1470
|
// src/components/ChatPanel.tsx
|
|
1461
|
-
import { useEffect as
|
|
1471
|
+
import { useEffect as useEffect10, useState as useState18 } from "react";
|
|
1462
1472
|
|
|
1463
1473
|
// src/components/ChatHeader.tsx
|
|
1464
|
-
import {
|
|
1465
|
-
|
|
1466
|
-
|
|
1474
|
+
import { useEffect as useEffect5, useRef as useRef5, useState as useState4 } from "react";
|
|
1475
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1476
|
+
function ChatHeader({
|
|
1477
|
+
onClose,
|
|
1478
|
+
closeLabel = "Close chat",
|
|
1479
|
+
logoUrl,
|
|
1480
|
+
headerTitle,
|
|
1481
|
+
onNewConversation,
|
|
1482
|
+
canReset,
|
|
1483
|
+
newConversationLabel = "New conversation",
|
|
1484
|
+
moreOptionsLabel = "More options"
|
|
1485
|
+
}) {
|
|
1486
|
+
const [menuOpen, setMenuOpen] = useState4(false);
|
|
1487
|
+
const wrapRef = useRef5(null);
|
|
1488
|
+
const kebabRef = useRef5(null);
|
|
1489
|
+
const firstItemRef = useRef5(null);
|
|
1490
|
+
const hasMenu = !!(canReset && onNewConversation);
|
|
1491
|
+
useEffect5(() => {
|
|
1492
|
+
if (menuOpen) firstItemRef.current?.focus();
|
|
1493
|
+
}, [menuOpen]);
|
|
1494
|
+
useEffect5(() => {
|
|
1495
|
+
if (!menuOpen) return;
|
|
1496
|
+
const onPointer = (e) => {
|
|
1497
|
+
if (!wrapRef.current?.contains(e.target)) setMenuOpen(false);
|
|
1498
|
+
};
|
|
1499
|
+
const onKey = (e) => {
|
|
1500
|
+
if (e.key === "Escape") {
|
|
1501
|
+
setMenuOpen(false);
|
|
1502
|
+
kebabRef.current?.focus();
|
|
1503
|
+
}
|
|
1504
|
+
};
|
|
1505
|
+
document.addEventListener("mousedown", onPointer);
|
|
1506
|
+
document.addEventListener("keydown", onKey);
|
|
1507
|
+
return () => {
|
|
1508
|
+
document.removeEventListener("mousedown", onPointer);
|
|
1509
|
+
document.removeEventListener("keydown", onKey);
|
|
1510
|
+
};
|
|
1511
|
+
}, [menuOpen]);
|
|
1512
|
+
const runNewConversation = () => {
|
|
1513
|
+
setMenuOpen(false);
|
|
1514
|
+
onNewConversation?.();
|
|
1515
|
+
};
|
|
1516
|
+
return /* @__PURE__ */ jsxs4("header", { className: "ss-w-header", children: [
|
|
1467
1517
|
/* @__PURE__ */ jsx5(BrandMark, { logoUrl, className: "ss-w-header-mark" }),
|
|
1468
1518
|
/* @__PURE__ */ jsx5("span", { className: "ss-w-header-title", children: headerTitle ?? "SensibleStats" }),
|
|
1469
|
-
|
|
1519
|
+
hasMenu ? /* @__PURE__ */ jsxs4("div", { className: "ss-w-menu-wrap", ref: wrapRef, children: [
|
|
1520
|
+
/* @__PURE__ */ jsx5(
|
|
1521
|
+
"button",
|
|
1522
|
+
{
|
|
1523
|
+
type: "button",
|
|
1524
|
+
className: "ss-w-kebab",
|
|
1525
|
+
ref: kebabRef,
|
|
1526
|
+
"aria-haspopup": "menu",
|
|
1527
|
+
"aria-expanded": menuOpen,
|
|
1528
|
+
"aria-label": moreOptionsLabel,
|
|
1529
|
+
onClick: () => setMenuOpen((open) => !open),
|
|
1530
|
+
children: /* @__PURE__ */ jsx5(KebabIcon, {})
|
|
1531
|
+
}
|
|
1532
|
+
),
|
|
1533
|
+
menuOpen ? /* @__PURE__ */ jsx5("div", { className: "ss-w-menu", role: "menu", "aria-label": moreOptionsLabel, children: /* @__PURE__ */ jsxs4(
|
|
1534
|
+
"button",
|
|
1535
|
+
{
|
|
1536
|
+
type: "button",
|
|
1537
|
+
className: "ss-w-menu-item",
|
|
1538
|
+
role: "menuitem",
|
|
1539
|
+
ref: firstItemRef,
|
|
1540
|
+
onClick: runNewConversation,
|
|
1541
|
+
children: [
|
|
1542
|
+
/* @__PURE__ */ jsx5(NewChatIcon, {}),
|
|
1543
|
+
/* @__PURE__ */ jsx5("span", { children: newConversationLabel })
|
|
1544
|
+
]
|
|
1545
|
+
}
|
|
1546
|
+
) }) : null
|
|
1547
|
+
] }) : null,
|
|
1470
1548
|
/* @__PURE__ */ jsx5("button", { type: "button", className: "ss-w-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, {}) })
|
|
1471
1549
|
] });
|
|
1472
1550
|
}
|
|
1473
1551
|
|
|
1474
1552
|
// src/components/MessageList.tsx
|
|
1475
|
-
import { useEffect as
|
|
1553
|
+
import { useEffect as useEffect9, useRef as useRef7 } from "react";
|
|
1476
1554
|
|
|
1477
1555
|
// src/components/Markdown.tsx
|
|
1478
1556
|
import ReactMarkdown from "react-markdown";
|
|
@@ -1490,8 +1568,8 @@ function Markdown({ text }) {
|
|
|
1490
1568
|
}
|
|
1491
1569
|
|
|
1492
1570
|
// src/components/EntityCardList.tsx
|
|
1493
|
-
import { useState as
|
|
1494
|
-
import { jsx as jsx7, jsxs as
|
|
1571
|
+
import { useState as useState5 } from "react";
|
|
1572
|
+
import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
1495
1573
|
var MAX_VISIBLE = 3;
|
|
1496
1574
|
var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
|
|
1497
1575
|
function initials(name) {
|
|
@@ -1512,7 +1590,7 @@ function Crest({ image, label }) {
|
|
|
1512
1590
|
}
|
|
1513
1591
|
function FormBar({ w, d, l }) {
|
|
1514
1592
|
if (w + d + l === 0) return null;
|
|
1515
|
-
return /* @__PURE__ */
|
|
1593
|
+
return /* @__PURE__ */ jsxs5("span", { className: "ss-w-form", "aria-hidden": "true", children: [
|
|
1516
1594
|
w > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-w", style: { flexGrow: w } }) : null,
|
|
1517
1595
|
d > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-d", style: { flexGrow: d } }) : null,
|
|
1518
1596
|
l > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-l", style: { flexGrow: l } }) : null
|
|
@@ -1521,12 +1599,12 @@ function FormBar({ w, d, l }) {
|
|
|
1521
1599
|
function StatCellView({ s }) {
|
|
1522
1600
|
const m = RECORD_RE.exec(s.value);
|
|
1523
1601
|
if (m) {
|
|
1524
|
-
return /* @__PURE__ */
|
|
1602
|
+
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-cell", children: [
|
|
1525
1603
|
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-cval", children: /* @__PURE__ */ jsx7(FormBar, { w: Number(m[1]), d: Number(m[2]), l: Number(m[3]) }) }),
|
|
1526
1604
|
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.value })
|
|
1527
1605
|
] });
|
|
1528
1606
|
}
|
|
1529
|
-
return /* @__PURE__ */
|
|
1607
|
+
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-cell", children: [
|
|
1530
1608
|
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-cval", children: s.value }),
|
|
1531
1609
|
/* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.label })
|
|
1532
1610
|
] });
|
|
@@ -1538,7 +1616,7 @@ function StatStrip({ stats }) {
|
|
|
1538
1616
|
}
|
|
1539
1617
|
function CardHeader({ c, showScopeCrest }) {
|
|
1540
1618
|
const onlyScope = c.scopes.length === 1 ? c.scopes[0] : null;
|
|
1541
|
-
return /* @__PURE__ */
|
|
1619
|
+
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-hd", children: [
|
|
1542
1620
|
/* @__PURE__ */ jsx7(
|
|
1543
1621
|
"span",
|
|
1544
1622
|
{
|
|
@@ -1547,11 +1625,11 @@ function CardHeader({ c, showScopeCrest }) {
|
|
|
1547
1625
|
children: c.image ? "" : initials(c.name)
|
|
1548
1626
|
}
|
|
1549
1627
|
),
|
|
1550
|
-
/* @__PURE__ */
|
|
1628
|
+
/* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-idtext", children: [
|
|
1551
1629
|
/* @__PURE__ */ jsx7("span", { className: "ss-w-nm", children: c.name }),
|
|
1552
1630
|
c.sub ? /* @__PURE__ */ jsx7("span", { className: "ss-w-sub", children: c.sub }) : null
|
|
1553
1631
|
] }),
|
|
1554
|
-
/* @__PURE__ */
|
|
1632
|
+
/* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-meta", children: [
|
|
1555
1633
|
showScopeCrest && onlyScope?.image ? /* @__PURE__ */ jsx7(Crest, { image: onlyScope.image, label: onlyScope.label }) : null,
|
|
1556
1634
|
c.season ? /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-season", children: shortSeason(c.season) }) : null
|
|
1557
1635
|
] })
|
|
@@ -1574,43 +1652,43 @@ function ScopeTabs({ scopes, active, onSelect }) {
|
|
|
1574
1652
|
)) });
|
|
1575
1653
|
}
|
|
1576
1654
|
function EntityCardItem({ c }) {
|
|
1577
|
-
const [active, setActive] =
|
|
1655
|
+
const [active, setActive] = useState5(0);
|
|
1578
1656
|
const hasBody = c.scopes.length > 0;
|
|
1579
1657
|
if (!hasBody) {
|
|
1580
1658
|
return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: /* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: false }) });
|
|
1581
1659
|
}
|
|
1582
1660
|
const multi = c.scopes.length > 1;
|
|
1583
1661
|
const scope = c.scopes[multi ? c.scopes[active] ? active : 0 : 0];
|
|
1584
|
-
return /* @__PURE__ */
|
|
1662
|
+
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard", "data-kind": c.kind, children: [
|
|
1585
1663
|
/* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: !multi }),
|
|
1586
1664
|
multi ? /* @__PURE__ */ jsx7(ScopeTabs, { scopes: c.scopes, active, onSelect: setActive }) : null,
|
|
1587
1665
|
/* @__PURE__ */ jsx7(StatStrip, { stats: scope.stats })
|
|
1588
1666
|
] });
|
|
1589
1667
|
}
|
|
1590
1668
|
function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMoreLabel = (n) => `Show ${n} more` }) {
|
|
1591
|
-
const [expanded, setExpanded] =
|
|
1669
|
+
const [expanded, setExpanded] = useState5(false);
|
|
1592
1670
|
if (cards.length === 0) return null;
|
|
1593
1671
|
const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
|
|
1594
1672
|
const overflow = cards.length - MAX_VISIBLE;
|
|
1595
|
-
return /* @__PURE__ */
|
|
1673
|
+
return /* @__PURE__ */ jsxs5("div", { className: "ss-w-cards", children: [
|
|
1596
1674
|
visible.map((c) => /* @__PURE__ */ jsx7(EntityCardItem, { c }, c.id)),
|
|
1597
1675
|
overflow > 0 ? /* @__PURE__ */ jsx7("button", { type: "button", className: "ss-w-cards-more", disabled, onClick: () => setExpanded((v) => !v), children: expanded ? showLessLabel : showMoreLabel(overflow) }) : null
|
|
1598
1676
|
] });
|
|
1599
1677
|
}
|
|
1600
1678
|
|
|
1601
1679
|
// src/components/BettingInsightList.tsx
|
|
1602
|
-
import { useState as
|
|
1680
|
+
import { useState as useState9 } from "react";
|
|
1603
1681
|
|
|
1604
1682
|
// src/components/AddToSlipButton.tsx
|
|
1605
|
-
import { useCallback as useCallback3, useState as
|
|
1683
|
+
import { useCallback as useCallback3, useState as useState6 } from "react";
|
|
1606
1684
|
import { isAddToSlipResult } from "@sensiblestats/widget-sdk";
|
|
1607
1685
|
|
|
1608
1686
|
// src/components/Toast.tsx
|
|
1609
|
-
import { useEffect as
|
|
1687
|
+
import { useEffect as useEffect6 } from "react";
|
|
1610
1688
|
import { jsx as jsx8 } from "react/jsx-runtime";
|
|
1611
1689
|
var DISMISS_MS = 4e3;
|
|
1612
1690
|
function Toast({ toast, onDismiss }) {
|
|
1613
|
-
|
|
1691
|
+
useEffect6(() => {
|
|
1614
1692
|
if (!toast) return;
|
|
1615
1693
|
const timer = setTimeout(onDismiss, DISMISS_MS);
|
|
1616
1694
|
return () => clearTimeout(timer);
|
|
@@ -1620,7 +1698,7 @@ function Toast({ toast, onDismiss }) {
|
|
|
1620
1698
|
}
|
|
1621
1699
|
|
|
1622
1700
|
// src/components/AddToSlipButton.tsx
|
|
1623
|
-
import { jsx as jsx9, jsxs as
|
|
1701
|
+
import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1624
1702
|
function withTimeout(value) {
|
|
1625
1703
|
return Promise.race([
|
|
1626
1704
|
value,
|
|
@@ -1628,9 +1706,9 @@ function withTimeout(value) {
|
|
|
1628
1706
|
]);
|
|
1629
1707
|
}
|
|
1630
1708
|
function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
|
|
1631
|
-
const [pending, setPending] =
|
|
1632
|
-
const [settled, setSettled] =
|
|
1633
|
-
const [toast, setToast] =
|
|
1709
|
+
const [pending, setPending] = useState6(false);
|
|
1710
|
+
const [settled, setSettled] = useState6(false);
|
|
1711
|
+
const [toast, setToast] = useState6(null);
|
|
1634
1712
|
const dismiss = useCallback3(() => setToast(null), []);
|
|
1635
1713
|
const handler = slip.onAddToSlip;
|
|
1636
1714
|
if (!ui || !handler || !selection) return null;
|
|
@@ -1654,7 +1732,7 @@ function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
|
|
|
1654
1732
|
setPending(false);
|
|
1655
1733
|
}
|
|
1656
1734
|
};
|
|
1657
|
-
return /* @__PURE__ */
|
|
1735
|
+
return /* @__PURE__ */ jsxs6("div", { className: "ss-w-slip", children: [
|
|
1658
1736
|
/* @__PURE__ */ jsx9(
|
|
1659
1737
|
"button",
|
|
1660
1738
|
{
|
|
@@ -1674,7 +1752,7 @@ function AddToSlipButton({ it, slip, ui }) {
|
|
|
1674
1752
|
}
|
|
1675
1753
|
|
|
1676
1754
|
// src/components/OddsMovementBadge.tsx
|
|
1677
|
-
import { jsx as jsx10, jsxs as
|
|
1755
|
+
import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
1678
1756
|
function OddsMovementBadge({
|
|
1679
1757
|
previous,
|
|
1680
1758
|
current,
|
|
@@ -1687,7 +1765,7 @@ function OddsMovementBadge({
|
|
|
1687
1765
|
return (
|
|
1688
1766
|
// Strikethrough is invisible to screen readers, so the whole was/now/direction sentence rides
|
|
1689
1767
|
// on one aria-label and the visual glyphs are hidden from the accessibility tree.
|
|
1690
|
-
/* @__PURE__ */
|
|
1768
|
+
/* @__PURE__ */ jsxs7("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
|
|
1691
1769
|
/* @__PURE__ */ jsx10("span", { className: "ss-w-move-prev", "aria-hidden": "true", children: previous }),
|
|
1692
1770
|
/* @__PURE__ */ jsx10("span", { className: "ss-w-move-arrow", "aria-hidden": "true", children: direction === "shortened" ? "\u25BC" : "\u25B2" })
|
|
1693
1771
|
] })
|
|
@@ -1695,14 +1773,14 @@ function OddsMovementBadge({
|
|
|
1695
1773
|
}
|
|
1696
1774
|
|
|
1697
1775
|
// src/components/Crest.tsx
|
|
1698
|
-
import { useState as
|
|
1776
|
+
import { useState as useState7 } from "react";
|
|
1699
1777
|
import { jsx as jsx11 } from "react/jsx-runtime";
|
|
1700
1778
|
function initials2(name) {
|
|
1701
1779
|
return (name ?? "").trim().slice(0, 1).toUpperCase() || "?";
|
|
1702
1780
|
}
|
|
1703
1781
|
function Crest2({ url, name, kind }) {
|
|
1704
1782
|
const cls = kind === "comp" ? "ss-w-bi-comp-logo" : "ss-w-bi-crest";
|
|
1705
|
-
const [failed, setFailed] =
|
|
1783
|
+
const [failed, setFailed] = useState7(false);
|
|
1706
1784
|
if (url && !failed) {
|
|
1707
1785
|
return /* @__PURE__ */ jsx11("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
1708
1786
|
}
|
|
@@ -1710,15 +1788,15 @@ function Crest2({ url, name, kind }) {
|
|
|
1710
1788
|
}
|
|
1711
1789
|
|
|
1712
1790
|
// src/components/PinToggle.tsx
|
|
1713
|
-
import { useCallback as useCallback4, useState as
|
|
1714
|
-
import { jsx as jsx12, jsxs as
|
|
1791
|
+
import { useCallback as useCallback4, useState as useState8 } from "react";
|
|
1792
|
+
import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
1715
1793
|
var PIN_GLYPHS = {
|
|
1716
1794
|
pin: { viewBox: "0 0 24 24", strokeWidth: 1.4, transform: "scale(1.5)", 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" },
|
|
1717
1795
|
star: { viewBox: "0 0 24 24", strokeWidth: 2, d: "M12 2.5l2.9 5.9 6.5.95-4.7 4.58 1.1 6.47L12 17.35 6.1 20.4l1.1-6.47L2.5 9.35l6.5-.95z" },
|
|
1718
1796
|
bookmark: { viewBox: "0 0 24 24", strokeWidth: 2, d: "M7 3h10a1.5 1.5 0 0 1 1.5 1.5V21l-6.5-3.6L5.5 21V4.5A1.5 1.5 0 0 1 7 3z" }
|
|
1719
1797
|
};
|
|
1720
1798
|
function PinToggle({ pin, monitor, ui }) {
|
|
1721
|
-
const [toast, setToast] =
|
|
1799
|
+
const [toast, setToast] = useState8(null);
|
|
1722
1800
|
const dismiss = useCallback4(() => setToast(null), []);
|
|
1723
1801
|
if (!monitor || !monitor.enabled) return null;
|
|
1724
1802
|
const key = pinKey(pin);
|
|
@@ -1733,7 +1811,7 @@ function PinToggle({ pin, monitor, ui }) {
|
|
|
1733
1811
|
}
|
|
1734
1812
|
};
|
|
1735
1813
|
const glyph = PIN_GLYPHS[ui.pinIcon];
|
|
1736
|
-
return /* @__PURE__ */
|
|
1814
|
+
return /* @__PURE__ */ jsxs8("div", { className: "ss-w-pin-wrap", children: [
|
|
1737
1815
|
/* @__PURE__ */ jsx12(
|
|
1738
1816
|
"button",
|
|
1739
1817
|
{
|
|
@@ -1763,17 +1841,17 @@ function PinToggle({ pin, monitor, ui }) {
|
|
|
1763
1841
|
}
|
|
1764
1842
|
|
|
1765
1843
|
// src/components/BettingInsightList.tsx
|
|
1766
|
-
import { Fragment, jsx as jsx13, jsxs as
|
|
1844
|
+
import { Fragment, jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
1767
1845
|
function StatRows({ stats }) {
|
|
1768
|
-
return /* @__PURE__ */ jsx13("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */
|
|
1846
|
+
return /* @__PURE__ */ jsx13("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-row", children: [
|
|
1769
1847
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-lbl", children: s.label }),
|
|
1770
1848
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-num", children: s.value })
|
|
1771
1849
|
] }, `${s.label}:${s.value}`)) });
|
|
1772
1850
|
}
|
|
1773
1851
|
function ScopedStats({ scopes }) {
|
|
1774
|
-
const [active, setActive] =
|
|
1852
|
+
const [active, setActive] = useState9(0);
|
|
1775
1853
|
const current = scopes[active] ?? scopes[0] ?? { key: "", label: "", stats: [] };
|
|
1776
|
-
return /* @__PURE__ */
|
|
1854
|
+
return /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-scoped", children: [
|
|
1777
1855
|
/* @__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)) }),
|
|
1778
1856
|
/* @__PURE__ */ jsx13(StatRows, { stats: current.stats }, current.key)
|
|
1779
1857
|
] });
|
|
@@ -1782,15 +1860,15 @@ function hasStatsContent(it) {
|
|
|
1782
1860
|
return !!it.scopes && it.scopes.length >= 2 || it.stats.length > 0;
|
|
1783
1861
|
}
|
|
1784
1862
|
function ReasonStrip({ it, ui }) {
|
|
1785
|
-
const [open, setOpen] =
|
|
1863
|
+
const [open, setOpen] = useState9(false);
|
|
1786
1864
|
const hasScopes = !!it.scopes && it.scopes.length >= 2;
|
|
1787
1865
|
const hasStats = hasStatsContent(it);
|
|
1788
1866
|
const hasText = !!it.text;
|
|
1789
1867
|
if (!hasText && !hasStats) return null;
|
|
1790
1868
|
const expandable = hasStats || (it.text?.length ?? 0) > 90;
|
|
1791
|
-
return /* @__PURE__ */
|
|
1869
|
+
return /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-reason", children: [
|
|
1792
1870
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-chart", "aria-hidden": "true" }),
|
|
1793
|
-
/* @__PURE__ */
|
|
1871
|
+
/* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-reason-body", children: [
|
|
1794
1872
|
hasText ? /* @__PURE__ */ jsx13("p", { className: `ss-w-bi-text${open ? "" : " ss-w-bi-text-clamp"}`, children: it.text }) : null,
|
|
1795
1873
|
open && hasStats ? hasScopes ? /* @__PURE__ */ jsx13(ScopedStats, { scopes: it.scopes }) : /* @__PURE__ */ jsx13(StatRows, { stats: it.stats }) : null
|
|
1796
1874
|
] }),
|
|
@@ -1809,7 +1887,7 @@ function ReasonStrip({ it, ui }) {
|
|
|
1809
1887
|
}
|
|
1810
1888
|
function CardFixture({ it }) {
|
|
1811
1889
|
if (it.homeTeamName && it.awayTeamName) {
|
|
1812
|
-
return /* @__PURE__ */
|
|
1890
|
+
return /* @__PURE__ */ jsxs9(Fragment, { children: [
|
|
1813
1891
|
/* @__PURE__ */ jsx13(Crest2, { kind: "team", url: it.homeCrest, name: it.homeTeamName }),
|
|
1814
1892
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-team", children: it.homeTeamName }),
|
|
1815
1893
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
|
|
@@ -1819,7 +1897,7 @@ function CardFixture({ it }) {
|
|
|
1819
1897
|
}
|
|
1820
1898
|
if (it.fixture) return /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-fixture-txt", children: it.fixture });
|
|
1821
1899
|
if (it.competition) {
|
|
1822
|
-
return /* @__PURE__ */
|
|
1900
|
+
return /* @__PURE__ */ jsxs9(Fragment, { children: [
|
|
1823
1901
|
/* @__PURE__ */ jsx13(Crest2, { kind: "comp", url: it.competitionCrest, name: it.competition }),
|
|
1824
1902
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-comp", children: it.competition })
|
|
1825
1903
|
] });
|
|
@@ -1834,16 +1912,16 @@ function InsightCard({ it, ui, slip, monitor }) {
|
|
|
1834
1912
|
const compInMeta = leftIsFixture && !!it.competition;
|
|
1835
1913
|
const showPin = !!monitor && it.pinEnabled;
|
|
1836
1914
|
const showHeader = leftIsFixture || !!it.competition || live || !!kickoff || showPin;
|
|
1837
|
-
return /* @__PURE__ */
|
|
1838
|
-
showHeader ? /* @__PURE__ */
|
|
1915
|
+
return /* @__PURE__ */ jsxs9("div", { className: "ss-w-binsight", children: [
|
|
1916
|
+
showHeader ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-header", children: [
|
|
1839
1917
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-header-left", children: /* @__PURE__ */ jsx13(CardFixture, { it }) }),
|
|
1840
|
-
/* @__PURE__ */
|
|
1841
|
-
live ? /* @__PURE__ */
|
|
1918
|
+
/* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-header-right", children: [
|
|
1919
|
+
live ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-live", children: [
|
|
1842
1920
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
|
|
1843
1921
|
ui?.liveLabel ?? "Live"
|
|
1844
1922
|
] }) : null,
|
|
1845
1923
|
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,
|
|
1846
|
-
kickoff ? /* @__PURE__ */
|
|
1924
|
+
kickoff ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-kick", children: [
|
|
1847
1925
|
kickoff.dayLabel,
|
|
1848
1926
|
" ",
|
|
1849
1927
|
kickoff.time
|
|
@@ -1851,15 +1929,15 @@ function InsightCard({ it, ui, slip, monitor }) {
|
|
|
1851
1929
|
showPin && ui ? /* @__PURE__ */ jsx13(PinToggle, { ui, monitor, pin: { kind: "match", matchId: it.matchId } }) : null
|
|
1852
1930
|
] })
|
|
1853
1931
|
] }) : null,
|
|
1854
|
-
/* @__PURE__ */
|
|
1855
|
-
/* @__PURE__ */
|
|
1932
|
+
/* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-action-row", children: [
|
|
1933
|
+
/* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-pick", children: [
|
|
1856
1934
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-market", children: it.market }),
|
|
1857
|
-
it.selection ? /* @__PURE__ */
|
|
1935
|
+
it.selection ? /* @__PURE__ */ jsxs9(Fragment, { children: [
|
|
1858
1936
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-pick-dot", "aria-hidden": "true", children: "\xB7" }),
|
|
1859
1937
|
/* @__PURE__ */ jsx13("span", { className: "ss-w-bi-sel", children: it.selection })
|
|
1860
1938
|
] }) : null
|
|
1861
1939
|
] }),
|
|
1862
|
-
it.odds ? /* @__PURE__ */
|
|
1940
|
+
it.odds ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-odds", children: [
|
|
1863
1941
|
/* @__PURE__ */ jsx13("b", { children: it.odds }),
|
|
1864
1942
|
/* @__PURE__ */ jsx13(OddsMovementBadge, { previous: it.previousOdds, current: it.odds, direction: it.movementDirection, ui }),
|
|
1865
1943
|
it.bookmaker ? /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-book", children: it.bookmaker }) : null
|
|
@@ -1892,16 +1970,16 @@ function BettingInsightList({ insights, ui, slip, monitor }) {
|
|
|
1892
1970
|
}
|
|
1893
1971
|
|
|
1894
1972
|
// src/components/MarketOddsCardList.tsx
|
|
1895
|
-
import { useState as
|
|
1896
|
-
import { Fragment as Fragment2, jsx as jsx14, jsxs as
|
|
1973
|
+
import { useState as useState10 } from "react";
|
|
1974
|
+
import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
1897
1975
|
function OddsRow({ vm, row, ui, slip, inSlipIds }) {
|
|
1898
1976
|
const selection = vm.addToSlipEnabled ? marketOddsRowToSlipSelection(vm, row, slip.conversationId) : null;
|
|
1899
1977
|
const inSlip = !!inSlipIds && row.matchOddsId != null && !!inSlipIds[row.matchOddsId];
|
|
1900
|
-
return /* @__PURE__ */
|
|
1978
|
+
return /* @__PURE__ */ jsxs10("div", { className: "ss-w-mo-row", children: [
|
|
1901
1979
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-mo-sel", children: row.selection }),
|
|
1902
1980
|
/* @__PURE__ */ jsx14(OddsMovementBadge, { previous: row.previousOdds, current: row.odds, direction: row.movementDirection, ui }),
|
|
1903
1981
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-mo-price", children: row.odds }),
|
|
1904
|
-
inSlip && ui ? /* @__PURE__ */
|
|
1982
|
+
inSlip && ui ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-mon-inslip", children: [
|
|
1905
1983
|
"\u2713 ",
|
|
1906
1984
|
ui.inSlipLabel
|
|
1907
1985
|
] }) : null,
|
|
@@ -1909,24 +1987,24 @@ function OddsRow({ vm, row, ui, slip, inSlipIds }) {
|
|
|
1909
1987
|
] });
|
|
1910
1988
|
}
|
|
1911
1989
|
function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }) {
|
|
1912
|
-
const [open, setOpen] =
|
|
1990
|
+
const [open, setOpen] = useState10(false);
|
|
1913
1991
|
const kickoff = vm.kickoffUtc && ui?.bettingKickoff ? ui.bettingKickoff(vm.kickoffUtc) : void 0;
|
|
1914
1992
|
const hasNamedTeams = !!vm.homeTeamName && !!vm.awayTeamName;
|
|
1915
1993
|
const showPin = !!monitor && vm.pinEnabled;
|
|
1916
1994
|
const showHeader = !!vm.competition || vm.isLive || !!kickoff || showPin;
|
|
1917
|
-
return /* @__PURE__ */
|
|
1918
|
-
!hideHeader && /* @__PURE__ */
|
|
1919
|
-
showHeader ? /* @__PURE__ */
|
|
1920
|
-
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-header-left", children: vm.competition ? /* @__PURE__ */
|
|
1995
|
+
return /* @__PURE__ */ jsxs10("div", { className: hideHeader ? "ss-w-mocard ss-w-mocard--bare" : "ss-w-mocard", children: [
|
|
1996
|
+
!hideHeader && /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
1997
|
+
showHeader ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-bi-header", children: [
|
|
1998
|
+
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-header-left", children: vm.competition ? /* @__PURE__ */ jsxs10(Fragment2, { children: [
|
|
1921
1999
|
/* @__PURE__ */ jsx14(Crest2, { kind: "comp", url: vm.competitionCrest, name: vm.competition }),
|
|
1922
2000
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-comp", children: vm.competition })
|
|
1923
2001
|
] }) : null }),
|
|
1924
|
-
/* @__PURE__ */
|
|
1925
|
-
vm.isLive ? /* @__PURE__ */
|
|
2002
|
+
/* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-header-right", children: [
|
|
2003
|
+
vm.isLive ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-live", children: [
|
|
1926
2004
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
|
|
1927
2005
|
ui?.liveLabel ?? "Live"
|
|
1928
2006
|
] }) : null,
|
|
1929
|
-
kickoff ? /* @__PURE__ */
|
|
2007
|
+
kickoff ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-kick", children: [
|
|
1930
2008
|
kickoff.dayLabel,
|
|
1931
2009
|
" ",
|
|
1932
2010
|
kickoff.time
|
|
@@ -1941,8 +2019,8 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
|
|
|
1941
2019
|
) : null
|
|
1942
2020
|
] })
|
|
1943
2021
|
] }) : null,
|
|
1944
|
-
hasNamedTeams || vm.fixture || vm.market ? /* @__PURE__ */
|
|
1945
|
-
hasNamedTeams ? /* @__PURE__ */
|
|
2022
|
+
hasNamedTeams || vm.fixture || vm.market ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-mo-sub", children: [
|
|
2023
|
+
hasNamedTeams ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-bi-fixture", children: [
|
|
1946
2024
|
/* @__PURE__ */ jsx14(Crest2, { kind: "team", url: vm.homeCrest, name: vm.homeTeamName }),
|
|
1947
2025
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-team", children: vm.homeTeamName }),
|
|
1948
2026
|
/* @__PURE__ */ jsx14("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
|
|
@@ -1952,11 +2030,11 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
|
|
|
1952
2030
|
vm.market ? /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-market", children: vm.market }) : null
|
|
1953
2031
|
] }) : null
|
|
1954
2032
|
] }),
|
|
1955
|
-
/* @__PURE__ */
|
|
2033
|
+
/* @__PURE__ */ jsxs10("div", { className: "ss-w-mo-rows", children: [
|
|
1956
2034
|
vm.mainRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)),
|
|
1957
2035
|
open ? vm.moreRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)) : null
|
|
1958
2036
|
] }),
|
|
1959
|
-
vm.moreRows.length > 0 ? /* @__PURE__ */
|
|
2037
|
+
vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs10("button", { type: "button", className: "ss-w-mo-more", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
|
|
1960
2038
|
/* @__PURE__ */ jsx14("span", { children: open ? ui?.hideLines ?? "Hide lines" : `${ui?.moreLines ?? "More lines"} (${vm.moreRows.length})` }),
|
|
1961
2039
|
/* @__PURE__ */ jsx14("span", { className: `ss-w-mo-more-chev${open ? " ss-w-mo-more-chev-up" : ""}`, "aria-hidden": "true" })
|
|
1962
2040
|
] }) : null,
|
|
@@ -1970,7 +2048,7 @@ function MarketOddsCardList({ cards, ui, slip, monitor, inSlipIds, hideHeader, p
|
|
|
1970
2048
|
}
|
|
1971
2049
|
|
|
1972
2050
|
// src/components/OddsMovementCard.tsx
|
|
1973
|
-
import { Fragment as Fragment3, jsx as jsx15, jsxs as
|
|
2051
|
+
import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
1974
2052
|
function directionWord(vm, ui) {
|
|
1975
2053
|
if (vm.direction === "shortened") return ui?.oddsShortened ?? "shortened";
|
|
1976
2054
|
if (vm.direction === "drifted") return ui?.oddsDrifted ?? "drifted";
|
|
@@ -1981,8 +2059,8 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
1981
2059
|
const drift = word ? `, ${word}` : "";
|
|
1982
2060
|
const aria = ui?.chartAria ? ui.chartAria(vm.opening, vm.current, word, vm.windowHours) : `Price movement over the last ${vm.windowHours} hours: opened at ${vm.opening}, currently ${vm.current}${drift}.`;
|
|
1983
2061
|
const showPin = !!monitor && vm.pinEnabled;
|
|
1984
|
-
return /* @__PURE__ */
|
|
1985
|
-
/* @__PURE__ */
|
|
2062
|
+
return /* @__PURE__ */ jsxs11("div", { className: "ss-w-omcard", children: [
|
|
2063
|
+
/* @__PURE__ */ jsxs11("div", { className: "ss-w-om-head", children: [
|
|
1986
2064
|
/* @__PURE__ */ jsx15("span", { className: "ss-w-om-market", children: vm.market }),
|
|
1987
2065
|
/* @__PURE__ */ jsx15("span", { className: "ss-w-om-tag", children: ui?.priceMovement ?? "Price movement" }),
|
|
1988
2066
|
showPin && ui ? /* @__PURE__ */ jsx15(
|
|
@@ -2002,13 +2080,13 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
2002
2080
|
}
|
|
2003
2081
|
) : null
|
|
2004
2082
|
] }),
|
|
2005
|
-
vm.fixture ? /* @__PURE__ */
|
|
2083
|
+
vm.fixture ? /* @__PURE__ */ jsxs11("div", { className: "ss-w-om-fixture", children: [
|
|
2006
2084
|
/* @__PURE__ */ jsx15("span", { children: vm.fixture }),
|
|
2007
2085
|
vm.competition ? /* @__PURE__ */ jsx15("span", { className: "ss-w-om-comp", children: vm.competition }) : null
|
|
2008
2086
|
] }) : null,
|
|
2009
2087
|
/* @__PURE__ */ jsx15("div", { className: "ss-w-om-sel", children: vm.selection }),
|
|
2010
2088
|
/* @__PURE__ */ jsx15(OddsMovementBadge, { previous: vm.opening, current: vm.current, direction: vm.direction, ui }),
|
|
2011
|
-
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__ */
|
|
2089
|
+
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__ */ jsxs11(
|
|
2012
2090
|
"svg",
|
|
2013
2091
|
{
|
|
2014
2092
|
className: "ss-w-om-chart",
|
|
@@ -2017,26 +2095,26 @@ function OddsMovementCard({ vm, ui, monitor }) {
|
|
|
2017
2095
|
role: "img",
|
|
2018
2096
|
"aria-label": aria,
|
|
2019
2097
|
children: [
|
|
2020
|
-
vm.geometry.gridlines.map((g) => /* @__PURE__ */
|
|
2098
|
+
vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs11("g", { children: [
|
|
2021
2099
|
/* @__PURE__ */ jsx15("line", { className: "ss-w-om-grid", x1: 40, y1: g.y, x2: CHART_VIEW_W - 8, y2: g.y }),
|
|
2022
2100
|
/* @__PURE__ */ jsx15("text", { className: "ss-w-om-ylab", x: 34, y: g.y + 3, textAnchor: "end", children: g.price.toFixed(2) })
|
|
2023
2101
|
] }, g.price)),
|
|
2024
2102
|
/* @__PURE__ */ jsx15("path", { className: "ss-w-om-line", d: vm.geometry.path, fill: "none" }),
|
|
2025
2103
|
vm.geometry.markers.map((m, i) => /* @__PURE__ */ jsx15("circle", { className: "ss-w-om-dot", cx: m.x, cy: m.y, r: 2.5 }, i)),
|
|
2026
|
-
ui?.chartTimeLabel ? /* @__PURE__ */
|
|
2104
|
+
ui?.chartTimeLabel ? /* @__PURE__ */ jsxs11(Fragment3, { children: [
|
|
2027
2105
|
/* @__PURE__ */ jsx15("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, textAnchor: "start", children: ui.chartTimeLabel(vm.geometry.startMs) }),
|
|
2028
2106
|
/* @__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) })
|
|
2029
2107
|
] }) : /* @__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` })
|
|
2030
2108
|
]
|
|
2031
2109
|
}
|
|
2032
2110
|
),
|
|
2033
|
-
/* @__PURE__ */
|
|
2034
|
-
/* @__PURE__ */
|
|
2111
|
+
/* @__PURE__ */ jsxs11("div", { className: "ss-w-om-foot", children: [
|
|
2112
|
+
/* @__PURE__ */ jsxs11("span", { children: [
|
|
2035
2113
|
ui?.openingLabel ?? "Opening",
|
|
2036
2114
|
" ",
|
|
2037
2115
|
/* @__PURE__ */ jsx15("b", { children: vm.opening })
|
|
2038
2116
|
] }),
|
|
2039
|
-
/* @__PURE__ */
|
|
2117
|
+
/* @__PURE__ */ jsxs11("span", { children: [
|
|
2040
2118
|
ui?.currentLabel ?? "Current",
|
|
2041
2119
|
" ",
|
|
2042
2120
|
/* @__PURE__ */ jsx15("b", { children: vm.current })
|
|
@@ -2054,12 +2132,12 @@ function OddsMovementCardList({ cards, ui, monitor }) {
|
|
|
2054
2132
|
}
|
|
2055
2133
|
|
|
2056
2134
|
// src/components/ActionButtons.tsx
|
|
2057
|
-
import { Fragment as Fragment4, jsx as jsx16, jsxs as
|
|
2135
|
+
import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
2058
2136
|
function ActionButtons({ actions, loading, disabled, onAct }) {
|
|
2059
2137
|
if (actions.length === 0 && !loading) return null;
|
|
2060
|
-
return /* @__PURE__ */
|
|
2138
|
+
return /* @__PURE__ */ jsxs12("div", { className: "ss-w-actions", children: [
|
|
2061
2139
|
actions.map((a, i) => /* @__PURE__ */ jsx16("button", { type: "button", className: "ss-w-abtn", disabled, onClick: () => onAct(a), children: a.label }, `${a.label}-${i}`)),
|
|
2062
|
-
actions.length === 0 && loading ? /* @__PURE__ */
|
|
2140
|
+
actions.length === 0 && loading ? /* @__PURE__ */ jsxs12(Fragment4, { children: [
|
|
2063
2141
|
/* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" }),
|
|
2064
2142
|
/* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" })
|
|
2065
2143
|
] }) : null
|
|
@@ -2067,22 +2145,22 @@ function ActionButtons({ actions, loading, disabled, onAct }) {
|
|
|
2067
2145
|
}
|
|
2068
2146
|
|
|
2069
2147
|
// src/components/dashboard/DashboardTile.tsx
|
|
2070
|
-
import { jsx as jsx17, jsxs as
|
|
2148
|
+
import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2071
2149
|
var MAX_CRESTS = 3;
|
|
2072
2150
|
function DashboardTile({ tile, onTap }) {
|
|
2073
2151
|
const spanClass = tile.span === "full" ? "ss-w-dash-tile--full" : "ss-w-dash-tile--half";
|
|
2074
2152
|
const crests = (tile.imageUrls ?? []).slice(0, MAX_CRESTS);
|
|
2075
2153
|
const hasMeta = Boolean(tile.badgeText) || crests.length > 0;
|
|
2076
|
-
return /* @__PURE__ */
|
|
2154
|
+
return /* @__PURE__ */ jsxs13("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
|
|
2077
2155
|
/* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-icon", children: /* @__PURE__ */ jsx17(DashboardIcon, { name: tile.icon }) }),
|
|
2078
|
-
/* @__PURE__ */
|
|
2156
|
+
/* @__PURE__ */ jsxs13("span", { className: "ss-w-dash-tile-body", children: [
|
|
2079
2157
|
/* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-title", children: tile.title }),
|
|
2080
2158
|
tile.subtitle ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle }) : null,
|
|
2081
2159
|
hasMeta ? (
|
|
2082
2160
|
// Badge + crests sit on their own row, below the title, instead of sharing the
|
|
2083
2161
|
// icon/chevron row -- at the half-span tile's ~180px width a nowrap badge alone
|
|
2084
2162
|
// (~70px) left the title column at ~22px and forced character-by-character wrapping.
|
|
2085
|
-
/* @__PURE__ */
|
|
2163
|
+
/* @__PURE__ */ jsxs13("span", { className: "ss-w-dash-tile-meta", children: [
|
|
2086
2164
|
tile.badgeText ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-badge", children: tile.badgeText }) : null,
|
|
2087
2165
|
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
|
|
2088
2166
|
] })
|
|
@@ -2093,7 +2171,7 @@ function DashboardTile({ tile, onTap }) {
|
|
|
2093
2171
|
}
|
|
2094
2172
|
|
|
2095
2173
|
// src/components/dashboard/GreetingDashboard.tsx
|
|
2096
|
-
import { jsx as jsx18, jsxs as
|
|
2174
|
+
import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2097
2175
|
var LAYOUT_CLASSES = {
|
|
2098
2176
|
market: "ss-w-dash--market",
|
|
2099
2177
|
goal: "ss-w-dash--goal",
|
|
@@ -2103,8 +2181,8 @@ function layoutClass(layout) {
|
|
|
2103
2181
|
return Object.prototype.hasOwnProperty.call(LAYOUT_CLASSES, layout) ? LAYOUT_CLASSES[layout] : LAYOUT_CLASSES.goal;
|
|
2104
2182
|
}
|
|
2105
2183
|
function GreetingDashboard({ dashboard, onTap }) {
|
|
2106
|
-
return /* @__PURE__ */
|
|
2107
|
-
/* @__PURE__ */
|
|
2184
|
+
return /* @__PURE__ */ jsxs14("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
|
|
2185
|
+
/* @__PURE__ */ jsxs14("div", { className: "ss-w-dash-head", children: [
|
|
2108
2186
|
/* @__PURE__ */ jsx18("span", { className: "ss-w-dash-title", children: dashboard.title }),
|
|
2109
2187
|
dashboard.subtitle ? /* @__PURE__ */ jsx18("span", { className: "ss-w-dash-subtitle", children: dashboard.subtitle }) : null
|
|
2110
2188
|
] }),
|
|
@@ -2114,7 +2192,7 @@ function GreetingDashboard({ dashboard, onTap }) {
|
|
|
2114
2192
|
}
|
|
2115
2193
|
|
|
2116
2194
|
// src/components/dashboard/FixtureCard.tsx
|
|
2117
|
-
import { Fragment as Fragment5, jsx as jsx19, jsxs as
|
|
2195
|
+
import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2118
2196
|
function teamFormResultClass(result) {
|
|
2119
2197
|
if (result === "W") return "ss-w-fandash-teamform-cell--win";
|
|
2120
2198
|
if (result === "L") return "ss-w-fandash-teamform-cell--loss";
|
|
@@ -2124,7 +2202,7 @@ function TeamFormCell({ m, subjectCrestUrl, subjectName }) {
|
|
|
2124
2202
|
const subjectCrest = /* @__PURE__ */ jsx19(Crest2, { url: subjectCrestUrl ?? void 0, name: subjectName, kind: "team" });
|
|
2125
2203
|
const opponentCrest = /* @__PURE__ */ jsx19(Crest2, { url: m.opponentCrestUrl ?? void 0, kind: "team" });
|
|
2126
2204
|
const score = m.teamIsHome ? `${m.teamScore} - ${m.oppScore}` : `${m.oppScore} - ${m.teamScore}`;
|
|
2127
|
-
return /* @__PURE__ */
|
|
2205
|
+
return /* @__PURE__ */ jsxs15("div", { className: `ss-w-fandash-teamform-cell ${teamFormResultClass(m.result)}`, children: [
|
|
2128
2206
|
m.teamIsHome ? subjectCrest : opponentCrest,
|
|
2129
2207
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-score", children: score }),
|
|
2130
2208
|
m.teamIsHome ? opponentCrest : subjectCrest
|
|
@@ -2140,59 +2218,59 @@ function teamFormRows(data) {
|
|
|
2140
2218
|
function FixtureCard({ card }) {
|
|
2141
2219
|
const { data } = card;
|
|
2142
2220
|
const h2h = data.h2H;
|
|
2143
|
-
return /* @__PURE__ */
|
|
2144
|
-
/* @__PURE__ */
|
|
2145
|
-
/* @__PURE__ */
|
|
2221
|
+
return /* @__PURE__ */ jsxs15(Fragment5, { children: [
|
|
2222
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-card ss-w-fandash-fixture", children: [
|
|
2223
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-eyebrow", children: [
|
|
2146
2224
|
card.title,
|
|
2147
2225
|
" \xB7 ",
|
|
2148
2226
|
data.competition
|
|
2149
2227
|
] }),
|
|
2150
|
-
/* @__PURE__ */
|
|
2151
|
-
/* @__PURE__ */
|
|
2228
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-fixture-teams", children: [
|
|
2229
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-team", children: [
|
|
2152
2230
|
/* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
|
|
2153
2231
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.homeName })
|
|
2154
2232
|
] }),
|
|
2155
2233
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-vs", children: "v" }),
|
|
2156
|
-
/* @__PURE__ */
|
|
2234
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-team ss-w-fandash-fixture-team--away", children: [
|
|
2157
2235
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.awayName }),
|
|
2158
2236
|
/* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" })
|
|
2159
2237
|
] })
|
|
2160
2238
|
] }),
|
|
2161
|
-
/* @__PURE__ */
|
|
2239
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-fixture-meta", children: [
|
|
2162
2240
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-kickoff", children: data.kickoffLabel }),
|
|
2163
|
-
data.venue ? /* @__PURE__ */
|
|
2241
|
+
data.venue ? /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-venue", children: [
|
|
2164
2242
|
" \xB7 ",
|
|
2165
2243
|
data.venue
|
|
2166
2244
|
] }) : null
|
|
2167
2245
|
] })
|
|
2168
2246
|
] }),
|
|
2169
|
-
/* @__PURE__ */
|
|
2247
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-card ss-w-fandash-lastfive", children: [
|
|
2170
2248
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: data.formLabel }),
|
|
2171
|
-
/* @__PURE__ */
|
|
2172
|
-
/* @__PURE__ */
|
|
2249
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-teamform-head", children: [
|
|
2250
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-teamform-head-team", children: [
|
|
2173
2251
|
/* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
|
|
2174
2252
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.homeName })
|
|
2175
2253
|
] }),
|
|
2176
|
-
/* @__PURE__ */
|
|
2254
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-teamform-head-team", children: [
|
|
2177
2255
|
/* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" }),
|
|
2178
2256
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.awayName })
|
|
2179
2257
|
] })
|
|
2180
2258
|
] }),
|
|
2181
2259
|
/* @__PURE__ */ jsx19("div", { className: "ss-w-fandash-teamform-rows", children: teamFormRows(data) })
|
|
2182
2260
|
] }),
|
|
2183
|
-
h2h || data.fact ? /* @__PURE__ */
|
|
2184
|
-
h2h ? /* @__PURE__ */
|
|
2261
|
+
h2h || data.fact ? /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-card ss-w-fandash-h2h", children: [
|
|
2262
|
+
h2h ? /* @__PURE__ */ jsxs15(Fragment5, { children: [
|
|
2185
2263
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: h2h.label }),
|
|
2186
|
-
/* @__PURE__ */
|
|
2187
|
-
/* @__PURE__ */
|
|
2264
|
+
/* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-split", children: [
|
|
2265
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
|
|
2188
2266
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.wins }),
|
|
2189
2267
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.homeWinsLabel })
|
|
2190
2268
|
] }),
|
|
2191
|
-
/* @__PURE__ */
|
|
2269
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
|
|
2192
2270
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.draws }),
|
|
2193
2271
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.drawsLabel })
|
|
2194
2272
|
] }),
|
|
2195
|
-
/* @__PURE__ */
|
|
2273
|
+
/* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
|
|
2196
2274
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.losses }),
|
|
2197
2275
|
/* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.awayWinsLabel })
|
|
2198
2276
|
] })
|
|
@@ -2204,8 +2282,8 @@ function FixtureCard({ card }) {
|
|
|
2204
2282
|
}
|
|
2205
2283
|
|
|
2206
2284
|
// src/components/dashboard/CountdownCard.tsx
|
|
2207
|
-
import { Fragment as Fragment6, useEffect as
|
|
2208
|
-
import { jsx as jsx20, jsxs as
|
|
2285
|
+
import { Fragment as Fragment6, useEffect as useEffect7, useState as useState11 } from "react";
|
|
2286
|
+
import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
2209
2287
|
var DAY_MS = 864e5;
|
|
2210
2288
|
function remainingSegments(kickoffUnix, nowMs, withSeconds) {
|
|
2211
2289
|
const totalSeconds = Math.floor((kickoffUnix * 1e3 - nowMs) / 1e3);
|
|
@@ -2223,22 +2301,22 @@ function remainingSegments(kickoffUnix, nowMs, withSeconds) {
|
|
|
2223
2301
|
function CountdownCard({ card }) {
|
|
2224
2302
|
const { data } = card;
|
|
2225
2303
|
const unitLabel = { d: data.daysUnit, h: data.hoursUnit, m: data.minutesUnit, s: data.secondsUnit };
|
|
2226
|
-
const [nowMs, setNowMs] =
|
|
2227
|
-
const [reduced] =
|
|
2304
|
+
const [nowMs, setNowMs] = useState11(() => Date.now());
|
|
2305
|
+
const [reduced] = useState11(
|
|
2228
2306
|
() => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
|
|
2229
2307
|
);
|
|
2230
2308
|
const withinDay = data.kickoffUnix * 1e3 - nowMs < DAY_MS;
|
|
2231
|
-
|
|
2309
|
+
useEffect7(() => {
|
|
2232
2310
|
if (reduced) return;
|
|
2233
2311
|
const id = window.setInterval(() => setNowMs(Date.now()), withinDay ? 1e3 : 6e4);
|
|
2234
2312
|
return () => window.clearInterval(id);
|
|
2235
2313
|
}, [reduced, withinDay]);
|
|
2236
2314
|
const segments = remainingSegments(data.kickoffUnix, nowMs, withinDay && !reduced);
|
|
2237
|
-
return /* @__PURE__ */ jsx20("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */
|
|
2315
|
+
return /* @__PURE__ */ jsx20("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-countdown-top", children: [
|
|
2238
2316
|
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-eyebrow", children: card.title ?? "Kick-off in" }),
|
|
2239
|
-
segments ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */
|
|
2317
|
+
segments ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs16(Fragment6, { children: [
|
|
2240
2318
|
i > 0 ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-colon", children: ":" }) : null,
|
|
2241
|
-
/* @__PURE__ */
|
|
2319
|
+
/* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-countdown-seg", children: [
|
|
2242
2320
|
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-value", children: s.value }),
|
|
2243
2321
|
/* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-unit", children: unitLabel[s.unit] })
|
|
2244
2322
|
] })
|
|
@@ -2247,11 +2325,11 @@ function CountdownCard({ card }) {
|
|
|
2247
2325
|
}
|
|
2248
2326
|
|
|
2249
2327
|
// src/components/dashboard/InjuriesCard.tsx
|
|
2250
|
-
import { useState as
|
|
2251
|
-
import { jsx as jsx21, jsxs as
|
|
2328
|
+
import { useState as useState12 } from "react";
|
|
2329
|
+
import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
2252
2330
|
var SHOWN = 3;
|
|
2253
2331
|
function ColHead({ name, crestUrl }) {
|
|
2254
|
-
return /* @__PURE__ */
|
|
2332
|
+
return /* @__PURE__ */ jsxs17("span", { className: "ss-w-fandash-injuries-col-head", children: [
|
|
2255
2333
|
/* @__PURE__ */ jsx21(Crest2, { url: crestUrl ?? void 0, name, kind: "team" }),
|
|
2256
2334
|
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-col-head-name", children: name })
|
|
2257
2335
|
] });
|
|
@@ -2259,9 +2337,9 @@ function ColHead({ name, crestUrl }) {
|
|
|
2259
2337
|
function InjuryList({ rows, emptyLabel, limit }) {
|
|
2260
2338
|
if (rows.length === 0) return /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-empty", children: emptyLabel });
|
|
2261
2339
|
const shown = limit === void 0 ? rows : rows.slice(0, limit);
|
|
2262
|
-
return /* @__PURE__ */ jsx21("ul", { className: "ss-w-fandash-injury-list", children: shown.map((r, i) => /* @__PURE__ */
|
|
2340
|
+
return /* @__PURE__ */ jsx21("ul", { className: "ss-w-fandash-injury-list", children: shown.map((r, i) => /* @__PURE__ */ jsxs17("li", { className: "ss-w-fandash-injury-row", children: [
|
|
2263
2341
|
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-name", children: r.playerName }),
|
|
2264
|
-
/* @__PURE__ */
|
|
2342
|
+
/* @__PURE__ */ jsxs17("span", { className: "ss-w-fandash-injury-meta", children: [
|
|
2265
2343
|
/* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-status", children: r.status }),
|
|
2266
2344
|
r.injuryType ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-type", children: r.injuryType }) : null,
|
|
2267
2345
|
r.expectedReturnLabel ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-return", children: r.expectedReturnLabel }) : null
|
|
@@ -2270,20 +2348,20 @@ function InjuryList({ rows, emptyLabel, limit }) {
|
|
|
2270
2348
|
}
|
|
2271
2349
|
function InjuriesCard({ card, ui }) {
|
|
2272
2350
|
const { data } = card;
|
|
2273
|
-
const [expanded, setExpanded] =
|
|
2351
|
+
const [expanded, setExpanded] = useState12(false);
|
|
2274
2352
|
const hidden = Math.max(0, data.ours.length - SHOWN) + Math.max(0, data.theirs.length - SHOWN);
|
|
2275
2353
|
const limit = expanded ? void 0 : SHOWN;
|
|
2276
2354
|
const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
|
|
2277
2355
|
const showLess = ui?.showLess ?? "Show less";
|
|
2278
|
-
return /* @__PURE__ */
|
|
2356
|
+
return /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-card ss-w-fandash-injuries", children: [
|
|
2279
2357
|
card.title ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2280
|
-
/* @__PURE__ */
|
|
2281
|
-
/* @__PURE__ */
|
|
2358
|
+
/* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-cols", children: [
|
|
2359
|
+
/* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-col", children: [
|
|
2282
2360
|
/* @__PURE__ */ jsx21(ColHead, { name: data.oursName, crestUrl: data.oursCrestUrl }),
|
|
2283
2361
|
/* @__PURE__ */ jsx21(InjuryList, { rows: data.ours, emptyLabel: data.emptyLabel, limit })
|
|
2284
2362
|
] }),
|
|
2285
2363
|
/* @__PURE__ */ jsx21("div", { className: "ss-w-fandash-injuries-divider" }),
|
|
2286
|
-
/* @__PURE__ */
|
|
2364
|
+
/* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-col", children: [
|
|
2287
2365
|
/* @__PURE__ */ jsx21(ColHead, { name: data.theirsName, crestUrl: data.theirsCrestUrl }),
|
|
2288
2366
|
/* @__PURE__ */ jsx21(InjuryList, { rows: data.theirs, emptyLabel: data.emptyLabel, limit })
|
|
2289
2367
|
] })
|
|
@@ -2302,29 +2380,29 @@ function InjuriesCard({ card, ui }) {
|
|
|
2302
2380
|
}
|
|
2303
2381
|
|
|
2304
2382
|
// src/components/dashboard/ReasonToBetCard.tsx
|
|
2305
|
-
import { jsx as jsx22, jsxs as
|
|
2383
|
+
import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
2306
2384
|
function ReasonToBetCard({ card }) {
|
|
2307
|
-
return /* @__PURE__ */
|
|
2385
|
+
return /* @__PURE__ */ jsxs18("div", { className: "ss-w-fandash-card ss-w-fandash-reasons", children: [
|
|
2308
2386
|
card.title ? /* @__PURE__ */ jsx22("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2309
2387
|
/* @__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}`)) })
|
|
2310
2388
|
] });
|
|
2311
2389
|
}
|
|
2312
2390
|
|
|
2313
2391
|
// src/components/dashboard/WhereToWatchCard.tsx
|
|
2314
|
-
import { jsx as jsx23, jsxs as
|
|
2392
|
+
import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
2315
2393
|
function WhereToWatchCard({ card }) {
|
|
2316
|
-
return /* @__PURE__ */
|
|
2394
|
+
return /* @__PURE__ */ jsxs19("div", { className: "ss-w-fandash-card ss-w-fandash-watch", children: [
|
|
2317
2395
|
card.title ? /* @__PURE__ */ jsx23("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2318
2396
|
/* @__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}`)) })
|
|
2319
2397
|
] });
|
|
2320
2398
|
}
|
|
2321
2399
|
|
|
2322
2400
|
// src/components/dashboard/CongestedWeekCard.tsx
|
|
2323
|
-
import { jsx as jsx24, jsxs as
|
|
2401
|
+
import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
2324
2402
|
function CongestedWeekCard({ card, onTap }) {
|
|
2325
|
-
return /* @__PURE__ */
|
|
2403
|
+
return /* @__PURE__ */ jsxs20("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-congested", onClick: () => onTap(card), children: [
|
|
2326
2404
|
card.title ? /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2327
|
-
/* @__PURE__ */ jsx24("div", { className: "ss-w-fandash-congested-grid", children: card.data.entries.map((entry, i) => /* @__PURE__ */
|
|
2405
|
+
/* @__PURE__ */ jsx24("div", { className: "ss-w-fandash-congested-grid", children: card.data.entries.map((entry, i) => /* @__PURE__ */ jsxs20("span", { className: "ss-w-fandash-congested-cell", children: [
|
|
2328
2406
|
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-day", children: entry.dayLabel }),
|
|
2329
2407
|
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-opponent", children: entry.opponent }),
|
|
2330
2408
|
/* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-comp", children: entry.competition }),
|
|
@@ -2335,10 +2413,10 @@ function CongestedWeekCard({ card, onTap }) {
|
|
|
2335
2413
|
}
|
|
2336
2414
|
|
|
2337
2415
|
// src/components/dashboard/TransfersCard.tsx
|
|
2338
|
-
import { jsx as jsx25, jsxs as
|
|
2416
|
+
import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
2339
2417
|
function TransferList({ rows }) {
|
|
2340
2418
|
if (rows.length === 0) return /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-empty", children: "None" });
|
|
2341
|
-
return /* @__PURE__ */ jsx25("ul", { className: "ss-w-fandash-transfer-list", children: rows.map((r, i) => /* @__PURE__ */
|
|
2419
|
+
return /* @__PURE__ */ jsx25("ul", { className: "ss-w-fandash-transfer-list", children: rows.map((r, i) => /* @__PURE__ */ jsxs21("li", { className: "ss-w-fandash-transfer-row", children: [
|
|
2342
2420
|
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-name", children: r.playerName }),
|
|
2343
2421
|
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-club", children: r.otherClub }),
|
|
2344
2422
|
r.type ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-type", children: r.type }) : null
|
|
@@ -2346,14 +2424,14 @@ function TransferList({ rows }) {
|
|
|
2346
2424
|
}
|
|
2347
2425
|
function TransfersCard({ card }) {
|
|
2348
2426
|
const { data } = card;
|
|
2349
|
-
return /* @__PURE__ */
|
|
2427
|
+
return /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-transfers", children: [
|
|
2350
2428
|
card.title ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2351
|
-
/* @__PURE__ */
|
|
2352
|
-
/* @__PURE__ */
|
|
2429
|
+
/* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-cols", children: [
|
|
2430
|
+
/* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-col", children: [
|
|
2353
2431
|
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "In" }),
|
|
2354
2432
|
/* @__PURE__ */ jsx25(TransferList, { rows: data.in })
|
|
2355
2433
|
] }),
|
|
2356
|
-
/* @__PURE__ */
|
|
2434
|
+
/* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-col", children: [
|
|
2357
2435
|
/* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "Out" }),
|
|
2358
2436
|
/* @__PURE__ */ jsx25(TransferList, { rows: data.out })
|
|
2359
2437
|
] })
|
|
@@ -2362,11 +2440,11 @@ function TransfersCard({ card }) {
|
|
|
2362
2440
|
}
|
|
2363
2441
|
|
|
2364
2442
|
// src/components/dashboard/LinksCard.tsx
|
|
2365
|
-
import { jsx as jsx26, jsxs as
|
|
2443
|
+
import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
2366
2444
|
function LinksCard({ card }) {
|
|
2367
|
-
return /* @__PURE__ */
|
|
2445
|
+
return /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-card ss-w-fandash-links", children: [
|
|
2368
2446
|
card.title ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2369
|
-
/* @__PURE__ */ jsx26("div", { className: "ss-w-fandash-link-grid", children: card.data.links.map((link, i) => /* @__PURE__ */
|
|
2447
|
+
/* @__PURE__ */ jsx26("div", { className: "ss-w-fandash-link-grid", children: card.data.links.map((link, i) => /* @__PURE__ */ jsxs22("a", { className: "ss-w-fandash-link-tile", href: link.url, target: "_blank", rel: "noopener noreferrer", children: [
|
|
2370
2448
|
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-label", children: link.label }),
|
|
2371
2449
|
/* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-chevron", children: /* @__PURE__ */ jsx26(ChevronIcon, {}) })
|
|
2372
2450
|
] }, `${link.url}-${i}`)) })
|
|
@@ -2374,8 +2452,8 @@ function LinksCard({ card }) {
|
|
|
2374
2452
|
}
|
|
2375
2453
|
|
|
2376
2454
|
// src/components/dashboard/PostMatchResultCard.tsx
|
|
2377
|
-
import { useState as
|
|
2378
|
-
import { jsx as jsx27, jsxs as
|
|
2455
|
+
import { useState as useState13 } from "react";
|
|
2456
|
+
import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2379
2457
|
function initials3(name) {
|
|
2380
2458
|
return name.trim().slice(0, 3).toUpperCase();
|
|
2381
2459
|
}
|
|
@@ -2384,7 +2462,7 @@ function PostMatchCrest({
|
|
|
2384
2462
|
name,
|
|
2385
2463
|
side
|
|
2386
2464
|
}) {
|
|
2387
|
-
const [failed, setFailed] =
|
|
2465
|
+
const [failed, setFailed] = useState13(false);
|
|
2388
2466
|
const cls = `ss-w-fandash-postmatch-crest ss-w-fandash-postmatch-crest--${side}`;
|
|
2389
2467
|
if (url && !failed) {
|
|
2390
2468
|
return /* @__PURE__ */ jsx27("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
@@ -2395,17 +2473,17 @@ function PostMatchResultCard({ card }) {
|
|
|
2395
2473
|
const { data } = card;
|
|
2396
2474
|
const homeWon = data.homeScore >= data.awayScore;
|
|
2397
2475
|
const awayWon = data.awayScore >= data.homeScore;
|
|
2398
|
-
return /* @__PURE__ */
|
|
2399
|
-
/* @__PURE__ */
|
|
2476
|
+
return /* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-result", children: [
|
|
2477
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-top", children: [
|
|
2400
2478
|
card.title ? /* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-pill", children: card.title }) : null,
|
|
2401
2479
|
/* @__PURE__ */ jsx27("span", { className: `ss-w-fandash-postmatch-tag ss-w-fandash-postmatch-tag--${data.outcome}`, children: data.resultLabel })
|
|
2402
2480
|
] }),
|
|
2403
|
-
/* @__PURE__ */
|
|
2404
|
-
/* @__PURE__ */
|
|
2481
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-main", children: [
|
|
2482
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--home", children: [
|
|
2405
2483
|
/* @__PURE__ */ jsx27(PostMatchCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
|
|
2406
2484
|
/* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.homeName })
|
|
2407
2485
|
] }),
|
|
2408
|
-
/* @__PURE__ */
|
|
2486
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-score-main", children: [
|
|
2409
2487
|
/* @__PURE__ */ jsx27(
|
|
2410
2488
|
"span",
|
|
2411
2489
|
{
|
|
@@ -2422,12 +2500,12 @@ function PostMatchResultCard({ card }) {
|
|
|
2422
2500
|
}
|
|
2423
2501
|
)
|
|
2424
2502
|
] }),
|
|
2425
|
-
/* @__PURE__ */
|
|
2503
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--away", children: [
|
|
2426
2504
|
/* @__PURE__ */ jsx27(PostMatchCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
|
|
2427
2505
|
/* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.awayName })
|
|
2428
2506
|
] })
|
|
2429
2507
|
] }),
|
|
2430
|
-
/* @__PURE__ */
|
|
2508
|
+
/* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-meta", children: [
|
|
2431
2509
|
data.kickoffLabel,
|
|
2432
2510
|
data.competition ? ` \xB7 ${data.competition}` : ""
|
|
2433
2511
|
] })
|
|
@@ -2435,11 +2513,11 @@ function PostMatchResultCard({ card }) {
|
|
|
2435
2513
|
}
|
|
2436
2514
|
|
|
2437
2515
|
// src/components/dashboard/PostMatchGoalsCard.tsx
|
|
2438
|
-
import { jsx as jsx28, jsxs as
|
|
2516
|
+
import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2439
2517
|
function PostMatchGoalsCard({ card, onTap }) {
|
|
2440
|
-
return /* @__PURE__ */
|
|
2518
|
+
return /* @__PURE__ */ jsxs24("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-goals", onClick: () => onTap(card), children: [
|
|
2441
2519
|
card.title ? /* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2442
|
-
/* @__PURE__ */ jsx28("ul", { className: "ss-w-fandash-postmatch-goal-list", children: card.data.goals.map((g, i) => /* @__PURE__ */
|
|
2520
|
+
/* @__PURE__ */ jsx28("ul", { className: "ss-w-fandash-postmatch-goal-list", children: card.data.goals.map((g, i) => /* @__PURE__ */ jsxs24("li", { className: g.scoredByClub ? "ss-w-fandash-postmatch-goal ss-w-fandash-postmatch-goal--club" : "ss-w-fandash-postmatch-goal", children: [
|
|
2443
2521
|
/* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-postmatch-goal-ball" }),
|
|
2444
2522
|
/* @__PURE__ */ jsx28("span", { children: g.text })
|
|
2445
2523
|
] }, `${g.text}-${i}`)) }),
|
|
@@ -2448,7 +2526,7 @@ function PostMatchGoalsCard({ card, onTap }) {
|
|
|
2448
2526
|
}
|
|
2449
2527
|
|
|
2450
2528
|
// src/components/dashboard/PostMatchStatsCard.tsx
|
|
2451
|
-
import { jsx as jsx29, jsxs as
|
|
2529
|
+
import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2452
2530
|
function splitWidths(homeNum, awayNum) {
|
|
2453
2531
|
const total = homeNum + awayNum;
|
|
2454
2532
|
if (total <= 0) return { home: "50%", away: "50%" };
|
|
@@ -2457,7 +2535,7 @@ function splitWidths(homeNum, awayNum) {
|
|
|
2457
2535
|
}
|
|
2458
2536
|
function PostMatchStatsCard({ card, onTap }) {
|
|
2459
2537
|
const { data } = card;
|
|
2460
|
-
return /* @__PURE__ */
|
|
2538
|
+
return /* @__PURE__ */ jsxs25("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-stats", onClick: () => onTap(card), children: [
|
|
2461
2539
|
card.title ? /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2462
2540
|
/* @__PURE__ */ jsx29("div", { className: "ss-w-fandash-postmatch-stat-rows", children: data.rows.map((r, i) => {
|
|
2463
2541
|
const leftValue = data.clubIsHome ? r.clubValue : r.oppValue;
|
|
@@ -2465,24 +2543,24 @@ function PostMatchStatsCard({ card, onTap }) {
|
|
|
2465
2543
|
const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
|
|
2466
2544
|
const awayNum = data.clubIsHome ? r.oppNum : r.clubNum;
|
|
2467
2545
|
const { home, away } = splitWidths(homeNum, awayNum);
|
|
2468
|
-
return /* @__PURE__ */
|
|
2469
|
-
/* @__PURE__ */
|
|
2546
|
+
return /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat", children: [
|
|
2547
|
+
/* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat-row", children: [
|
|
2470
2548
|
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--home", children: leftValue }),
|
|
2471
2549
|
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-label", children: r.label }),
|
|
2472
2550
|
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--away", children: rightValue })
|
|
2473
2551
|
] }),
|
|
2474
|
-
/* @__PURE__ */
|
|
2552
|
+
/* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat-bar", children: [
|
|
2475
2553
|
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-home", style: { width: home } }),
|
|
2476
2554
|
/* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-away", style: { width: away } })
|
|
2477
2555
|
] })
|
|
2478
2556
|
] }, `${r.label}-${i}`);
|
|
2479
2557
|
}) }),
|
|
2480
|
-
data.rows.length > 0 ? /* @__PURE__ */
|
|
2481
|
-
/* @__PURE__ */
|
|
2558
|
+
data.rows.length > 0 ? /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-legend", children: [
|
|
2559
|
+
/* @__PURE__ */ jsxs25("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
|
|
2482
2560
|
/* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--home" }),
|
|
2483
2561
|
data.homeName
|
|
2484
2562
|
] }),
|
|
2485
|
-
/* @__PURE__ */
|
|
2563
|
+
/* @__PURE__ */ jsxs25("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
|
|
2486
2564
|
/* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--away" }),
|
|
2487
2565
|
data.awayName
|
|
2488
2566
|
] })
|
|
@@ -2492,7 +2570,7 @@ function PostMatchStatsCard({ card, onTap }) {
|
|
|
2492
2570
|
}
|
|
2493
2571
|
|
|
2494
2572
|
// src/components/dashboard/PostMatchTopPerformerCard.tsx
|
|
2495
|
-
import { jsx as jsx30, jsxs as
|
|
2573
|
+
import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2496
2574
|
function initials4(playerName) {
|
|
2497
2575
|
const words = playerName.trim().split(/\s+/).filter(Boolean);
|
|
2498
2576
|
if (words.length === 0) return "?";
|
|
@@ -2502,9 +2580,9 @@ function initials4(playerName) {
|
|
|
2502
2580
|
}
|
|
2503
2581
|
function PostMatchTopPerformerCard({ card, onTap }) {
|
|
2504
2582
|
const { data } = card;
|
|
2505
|
-
return /* @__PURE__ */
|
|
2583
|
+
return /* @__PURE__ */ jsxs26("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-performer", onClick: () => onTap(card), children: [
|
|
2506
2584
|
card.title ? /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2507
|
-
/* @__PURE__ */
|
|
2585
|
+
/* @__PURE__ */ jsxs26("div", { className: "ss-w-fandash-postmatch-perf-row", children: [
|
|
2508
2586
|
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-avatar", "aria-hidden": "true", children: initials4(data.playerName) }),
|
|
2509
2587
|
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-name", children: data.playerName }),
|
|
2510
2588
|
/* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-rating", children: data.ratingLabel })
|
|
@@ -2514,22 +2592,22 @@ function PostMatchTopPerformerCard({ card, onTap }) {
|
|
|
2514
2592
|
}
|
|
2515
2593
|
|
|
2516
2594
|
// src/components/dashboard/PostMatchNextCard.tsx
|
|
2517
|
-
import { jsx as jsx31, jsxs as
|
|
2595
|
+
import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2518
2596
|
function PostMatchNextCard({ card }) {
|
|
2519
2597
|
const { data } = card;
|
|
2520
|
-
return /* @__PURE__ */
|
|
2598
|
+
return /* @__PURE__ */ jsxs27("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-next", children: [
|
|
2521
2599
|
card.title ? /* @__PURE__ */ jsx31("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2522
2600
|
/* @__PURE__ */ jsx31("div", { className: "ss-w-fandash-postmatch-next-row", children: /* @__PURE__ */ jsx31("span", { className: "ss-w-fandash-postmatch-next-when", children: data.whenLabel }) })
|
|
2523
2601
|
] });
|
|
2524
2602
|
}
|
|
2525
2603
|
|
|
2526
2604
|
// src/components/dashboard/RestingNextCard.tsx
|
|
2527
|
-
import { jsx as jsx32, jsxs as
|
|
2605
|
+
import { jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2528
2606
|
function RestingNextCard({ card, onTap }) {
|
|
2529
2607
|
const { data } = card;
|
|
2530
|
-
return /* @__PURE__ */
|
|
2608
|
+
return /* @__PURE__ */ jsxs28("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-next", onClick: () => onTap(card), children: [
|
|
2531
2609
|
card.title ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2532
|
-
/* @__PURE__ */
|
|
2610
|
+
/* @__PURE__ */ jsxs28("div", { className: "ss-w-fandash-resting-next-row", children: [
|
|
2533
2611
|
/* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-when", children: data.whenLabel }),
|
|
2534
2612
|
data.competition ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-competition", children: data.competition }) : null
|
|
2535
2613
|
] }),
|
|
@@ -2538,12 +2616,12 @@ function RestingNextCard({ card, onTap }) {
|
|
|
2538
2616
|
}
|
|
2539
2617
|
|
|
2540
2618
|
// src/components/dashboard/RestingStandingsCard.tsx
|
|
2541
|
-
import { jsx as jsx33, jsxs as
|
|
2619
|
+
import { jsx as jsx33, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2542
2620
|
function RestingStandingsCard({ card, onTap }) {
|
|
2543
2621
|
const { data } = card;
|
|
2544
|
-
return /* @__PURE__ */
|
|
2622
|
+
return /* @__PURE__ */ jsxs29("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-standings", onClick: () => onTap(card), children: [
|
|
2545
2623
|
card.title ? /* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2546
|
-
/* @__PURE__ */
|
|
2624
|
+
/* @__PURE__ */ jsxs29("div", { className: "ss-w-fandash-resting-standings-row", children: [
|
|
2547
2625
|
/* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-position", children: data.positionLabel }),
|
|
2548
2626
|
/* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-record", children: data.recordLabel })
|
|
2549
2627
|
] }),
|
|
@@ -2552,12 +2630,12 @@ function RestingStandingsCard({ card, onTap }) {
|
|
|
2552
2630
|
}
|
|
2553
2631
|
|
|
2554
2632
|
// src/components/dashboard/RestingSeasonCard.tsx
|
|
2555
|
-
import { jsx as jsx34, jsxs as
|
|
2633
|
+
import { jsx as jsx34, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2556
2634
|
function RestingSeasonCard({ card, onTap }) {
|
|
2557
2635
|
const { data } = card;
|
|
2558
|
-
return /* @__PURE__ */
|
|
2636
|
+
return /* @__PURE__ */ jsxs30("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-season", onClick: () => onTap(card), children: [
|
|
2559
2637
|
card.title ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2560
|
-
/* @__PURE__ */
|
|
2638
|
+
/* @__PURE__ */ jsxs30("div", { className: "ss-w-fandash-resting-season-rows", children: [
|
|
2561
2639
|
data.scorerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.scorerLabel }) : null,
|
|
2562
2640
|
data.playerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.playerLabel }) : null,
|
|
2563
2641
|
/* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.tallyLabel })
|
|
@@ -2567,7 +2645,7 @@ function RestingSeasonCard({ card, onTap }) {
|
|
|
2567
2645
|
}
|
|
2568
2646
|
|
|
2569
2647
|
// src/components/dashboard/RestingFormCard.tsx
|
|
2570
|
-
import { jsx as jsx35, jsxs as
|
|
2648
|
+
import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
2571
2649
|
function resultClass(result) {
|
|
2572
2650
|
const upper = result.toUpperCase();
|
|
2573
2651
|
if (upper === "W") return "ss-w-fandash-form-pill--win";
|
|
@@ -2576,17 +2654,17 @@ function resultClass(result) {
|
|
|
2576
2654
|
}
|
|
2577
2655
|
function RestingFormCard({ card }) {
|
|
2578
2656
|
const { data } = card;
|
|
2579
|
-
return /* @__PURE__ */
|
|
2657
|
+
return /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-card ss-w-fandash-resting-form", children: [
|
|
2580
2658
|
card.title ? /* @__PURE__ */ jsx35("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2581
2659
|
/* @__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}`)) })
|
|
2582
2660
|
] });
|
|
2583
2661
|
}
|
|
2584
2662
|
|
|
2585
2663
|
// src/components/dashboard/LiveScoreCard.tsx
|
|
2586
|
-
import { useRef as
|
|
2664
|
+
import { useRef as useRef6, useState as useState15 } from "react";
|
|
2587
2665
|
|
|
2588
2666
|
// src/useLiveClock.ts
|
|
2589
|
-
import { useEffect as
|
|
2667
|
+
import { useEffect as useEffect8, useState as useState14 } from "react";
|
|
2590
2668
|
var TICK_MS = 6e4;
|
|
2591
2669
|
var MAX_LIVE_TICK_MINUTES = 15;
|
|
2592
2670
|
function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
|
|
@@ -2595,10 +2673,10 @@ function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
|
|
|
2595
2673
|
return minute + Math.min(Math.max(0, elapsedMinutes), MAX_LIVE_TICK_MINUTES);
|
|
2596
2674
|
}
|
|
2597
2675
|
function useLiveClock(minute, clockRunning, receivedAtMs) {
|
|
2598
|
-
const [displayMinute, setDisplayMinute] =
|
|
2676
|
+
const [displayMinute, setDisplayMinute] = useState14(
|
|
2599
2677
|
() => computeDisplayMinute(minute, clockRunning, receivedAtMs)
|
|
2600
2678
|
);
|
|
2601
|
-
|
|
2679
|
+
useEffect8(() => {
|
|
2602
2680
|
setDisplayMinute(computeDisplayMinute(minute, clockRunning, receivedAtMs));
|
|
2603
2681
|
if (!clockRunning) return;
|
|
2604
2682
|
const id = window.setInterval(() => {
|
|
@@ -2610,12 +2688,12 @@ function useLiveClock(minute, clockRunning, receivedAtMs) {
|
|
|
2610
2688
|
}
|
|
2611
2689
|
|
|
2612
2690
|
// src/components/dashboard/LiveScoreCard.tsx
|
|
2613
|
-
import { jsx as jsx36, jsxs as
|
|
2691
|
+
import { jsx as jsx36, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
2614
2692
|
function initials5(name) {
|
|
2615
2693
|
return name.trim().slice(0, 3).toUpperCase();
|
|
2616
2694
|
}
|
|
2617
2695
|
function LiveCrest({ url, name, side }) {
|
|
2618
|
-
const [failed, setFailed] =
|
|
2696
|
+
const [failed, setFailed] = useState15(false);
|
|
2619
2697
|
const cls = `ss-w-fandash-live-crest ss-w-fandash-live-crest--${side}`;
|
|
2620
2698
|
if (url && !failed) {
|
|
2621
2699
|
return /* @__PURE__ */ jsx36("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
|
|
@@ -2634,39 +2712,39 @@ function LiveScoreCard({
|
|
|
2634
2712
|
}) {
|
|
2635
2713
|
const { data } = card;
|
|
2636
2714
|
const seedKey = `${data.minute}:${data.homeScore}:${data.awayScore}`;
|
|
2637
|
-
const seedRef =
|
|
2715
|
+
const seedRef = useRef6(null);
|
|
2638
2716
|
if (!seedRef.current || seedRef.current.key !== seedKey) {
|
|
2639
2717
|
seedRef.current = { key: seedKey, receivedAtMs: Date.now() };
|
|
2640
2718
|
}
|
|
2641
2719
|
const displayMinute = useLiveClock(data.minute, data.clockRunning, seedRef.current.receivedAtMs);
|
|
2642
2720
|
const minuteSuffix = data.minuteLabel.replace(/^\d+/, "");
|
|
2643
2721
|
const scorers = scorersLine(goalEvents);
|
|
2644
|
-
return /* @__PURE__ */
|
|
2722
|
+
return /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-card ss-w-fandash-live-score", children: [
|
|
2645
2723
|
card.title ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2646
|
-
/* @__PURE__ */
|
|
2647
|
-
/* @__PURE__ */
|
|
2724
|
+
/* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-top", children: [
|
|
2725
|
+
/* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-pill", children: [
|
|
2648
2726
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
2649
2727
|
data.statusLabel
|
|
2650
2728
|
] }),
|
|
2651
2729
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-minute", children: `${displayMinute}${minuteSuffix}` }),
|
|
2652
2730
|
data.competition ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-competition", children: data.competition }) : null
|
|
2653
2731
|
] }),
|
|
2654
|
-
/* @__PURE__ */
|
|
2655
|
-
/* @__PURE__ */
|
|
2732
|
+
/* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-main", children: [
|
|
2733
|
+
/* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--home", children: [
|
|
2656
2734
|
/* @__PURE__ */ jsx36(LiveCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
|
|
2657
2735
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.homeName })
|
|
2658
2736
|
] }),
|
|
2659
|
-
/* @__PURE__ */
|
|
2737
|
+
/* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-score-main", children: [
|
|
2660
2738
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.homeScore }),
|
|
2661
2739
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-sep", children: "\u2013" }),
|
|
2662
2740
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.awayScore })
|
|
2663
2741
|
] }),
|
|
2664
|
-
/* @__PURE__ */
|
|
2742
|
+
/* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--away", children: [
|
|
2665
2743
|
/* @__PURE__ */ jsx36(LiveCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
|
|
2666
2744
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.awayName })
|
|
2667
2745
|
] })
|
|
2668
2746
|
] }),
|
|
2669
|
-
scorers ? /* @__PURE__ */
|
|
2747
|
+
scorers ? /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-scorers", children: [
|
|
2670
2748
|
/* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-scorers-icon", "aria-hidden": "true", children: "\u26BD" }),
|
|
2671
2749
|
scorers
|
|
2672
2750
|
] }) : null
|
|
@@ -2674,8 +2752,8 @@ function LiveScoreCard({
|
|
|
2674
2752
|
}
|
|
2675
2753
|
|
|
2676
2754
|
// src/components/dashboard/LiveTimelineCard.tsx
|
|
2677
|
-
import { useState as
|
|
2678
|
-
import { jsx as jsx37, jsxs as
|
|
2755
|
+
import { useState as useState16 } from "react";
|
|
2756
|
+
import { jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
2679
2757
|
var SHOWN2 = 3;
|
|
2680
2758
|
function EventIcon({ type }) {
|
|
2681
2759
|
if (type === "goal") {
|
|
@@ -2691,9 +2769,9 @@ function EventIcon({ type }) {
|
|
|
2691
2769
|
}
|
|
2692
2770
|
function EventLabel({ e }) {
|
|
2693
2771
|
if (e.type === "sub") {
|
|
2694
|
-
return /* @__PURE__ */
|
|
2772
|
+
return /* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-who", children: [
|
|
2695
2773
|
e.player ?? e.text,
|
|
2696
|
-
e.playerOff ? /* @__PURE__ */
|
|
2774
|
+
e.playerOff ? /* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-off", children: [
|
|
2697
2775
|
" for ",
|
|
2698
2776
|
e.playerOff
|
|
2699
2777
|
] }) : null
|
|
@@ -2707,8 +2785,8 @@ function EventRow({ e }) {
|
|
|
2707
2785
|
e.side === "home" ? "ss-w-fandash-live-tl-ev--home" : "ss-w-fandash-live-tl-ev--away",
|
|
2708
2786
|
e.type === "goal" ? "ss-w-fandash-live-tl-ev--goal" : ""
|
|
2709
2787
|
].filter(Boolean).join(" ");
|
|
2710
|
-
return /* @__PURE__ */
|
|
2711
|
-
/* @__PURE__ */
|
|
2788
|
+
return /* @__PURE__ */ jsxs33("div", { className: cls, children: [
|
|
2789
|
+
/* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-txt", children: [
|
|
2712
2790
|
/* @__PURE__ */ jsx37(EventLabel, { e }),
|
|
2713
2791
|
/* @__PURE__ */ jsx37(EventIcon, { type: e.type })
|
|
2714
2792
|
] }),
|
|
@@ -2716,7 +2794,7 @@ function EventRow({ e }) {
|
|
|
2716
2794
|
] });
|
|
2717
2795
|
}
|
|
2718
2796
|
function LiveTimelineCard({ card, ui }) {
|
|
2719
|
-
const [expanded, setExpanded] =
|
|
2797
|
+
const [expanded, setExpanded] = useState16(false);
|
|
2720
2798
|
const events = card.data.events;
|
|
2721
2799
|
if (!events || events.length === 0) return null;
|
|
2722
2800
|
const sorted = [...events].sort((a, b) => b.minute - a.minute);
|
|
@@ -2724,7 +2802,7 @@ function LiveTimelineCard({ card, ui }) {
|
|
|
2724
2802
|
const shown = expanded ? sorted : sorted.slice(0, SHOWN2);
|
|
2725
2803
|
const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
|
|
2726
2804
|
const showLess = ui?.showLess ?? "Show less";
|
|
2727
|
-
return /* @__PURE__ */
|
|
2805
|
+
return /* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-card ss-w-fandash-live-timeline", children: [
|
|
2728
2806
|
card.title ? /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2729
2807
|
/* @__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}`)) }),
|
|
2730
2808
|
rest > 0 ? /* @__PURE__ */ jsx37(
|
|
@@ -2742,7 +2820,7 @@ function LiveTimelineCard({ card, ui }) {
|
|
|
2742
2820
|
|
|
2743
2821
|
// src/components/dashboard/MomentumWave.tsx
|
|
2744
2822
|
import { useId } from "react";
|
|
2745
|
-
import { jsx as jsx38, jsxs as
|
|
2823
|
+
import { jsx as jsx38, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
2746
2824
|
var WIDTH = 270;
|
|
2747
2825
|
var HEIGHT = 56;
|
|
2748
2826
|
var BASELINE = HEIGHT / 2;
|
|
@@ -2770,10 +2848,10 @@ function MomentumWave({
|
|
|
2770
2848
|
const bottomClipId = `${clipId}-bottom`;
|
|
2771
2849
|
const topClass = clubIsHome ? "ss-w-fandash-live-mom-home" : "ss-w-fandash-live-mom-away";
|
|
2772
2850
|
const bottomClass = clubIsHome ? "ss-w-fandash-live-mom-away" : "ss-w-fandash-live-mom-home";
|
|
2773
|
-
return /* @__PURE__ */
|
|
2851
|
+
return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-mom", children: [
|
|
2774
2852
|
caption ? /* @__PURE__ */ jsx38("span", { className: "ss-w-fandash-live-mom-caption", children: caption }) : null,
|
|
2775
|
-
/* @__PURE__ */
|
|
2776
|
-
/* @__PURE__ */
|
|
2853
|
+
/* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-mom-plot", children: [
|
|
2854
|
+
/* @__PURE__ */ jsxs34(
|
|
2777
2855
|
"svg",
|
|
2778
2856
|
{
|
|
2779
2857
|
className: "ss-w-fandash-live-mom-svg",
|
|
@@ -2782,7 +2860,7 @@ function MomentumWave({
|
|
|
2782
2860
|
role: "img",
|
|
2783
2861
|
"aria-label": caption ?? "Momentum",
|
|
2784
2862
|
children: [
|
|
2785
|
-
/* @__PURE__ */
|
|
2863
|
+
/* @__PURE__ */ jsxs34("defs", { children: [
|
|
2786
2864
|
/* @__PURE__ */ jsx38("clipPath", { id: topClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: 0, width: WIDTH, height: BASELINE }) }),
|
|
2787
2865
|
/* @__PURE__ */ jsx38("clipPath", { id: bottomClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: BASELINE, width: WIDTH, height: HEIGHT - BASELINE }) })
|
|
2788
2866
|
] }),
|
|
@@ -2806,7 +2884,7 @@ function MomentumWave({
|
|
|
2806
2884
|
}
|
|
2807
2885
|
|
|
2808
2886
|
// src/components/dashboard/LiveStatsCard.tsx
|
|
2809
|
-
import { jsx as jsx39, jsxs as
|
|
2887
|
+
import { jsx as jsx39, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
2810
2888
|
function splitWidths2(homeNum, awayNum) {
|
|
2811
2889
|
const total = homeNum + awayNum;
|
|
2812
2890
|
if (total <= 0) return { home: "50%", away: "50%" };
|
|
@@ -2815,7 +2893,7 @@ function splitWidths2(homeNum, awayNum) {
|
|
|
2815
2893
|
}
|
|
2816
2894
|
function LiveStatsCard({ card }) {
|
|
2817
2895
|
const { data } = card;
|
|
2818
|
-
return /* @__PURE__ */
|
|
2896
|
+
return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-card ss-w-fandash-live-stats", children: [
|
|
2819
2897
|
card.title ? /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
|
|
2820
2898
|
/* @__PURE__ */ jsx39("div", { className: "ss-w-fandash-live-stat-rows", children: data.rows.map((r, i) => {
|
|
2821
2899
|
const homeValue = data.clubIsHome ? r.clubValue : r.oppValue;
|
|
@@ -2823,25 +2901,25 @@ function LiveStatsCard({ card }) {
|
|
|
2823
2901
|
const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
|
|
2824
2902
|
const awayNum = data.clubIsHome ? r.oppNum : r.clubNum;
|
|
2825
2903
|
const { home, away } = splitWidths2(homeNum, awayNum);
|
|
2826
|
-
return /* @__PURE__ */
|
|
2827
|
-
/* @__PURE__ */
|
|
2904
|
+
return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-stat", children: [
|
|
2905
|
+
/* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-stat-row", children: [
|
|
2828
2906
|
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--home", children: homeValue }),
|
|
2829
2907
|
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-label", children: r.label }),
|
|
2830
2908
|
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--away", children: awayValue })
|
|
2831
2909
|
] }),
|
|
2832
|
-
/* @__PURE__ */
|
|
2910
|
+
/* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-bar", children: [
|
|
2833
2911
|
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-home", style: { width: home } }),
|
|
2834
2912
|
/* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-away", style: { width: away } })
|
|
2835
2913
|
] })
|
|
2836
2914
|
] }, `${r.label}-${i}`);
|
|
2837
2915
|
}) }),
|
|
2838
2916
|
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,
|
|
2839
|
-
data.rows.length > 0 ? /* @__PURE__ */
|
|
2840
|
-
/* @__PURE__ */
|
|
2917
|
+
data.rows.length > 0 ? /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-legend", children: [
|
|
2918
|
+
/* @__PURE__ */ jsxs35("span", { className: "ss-w-fandash-live-legend-item", children: [
|
|
2841
2919
|
/* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--home" }),
|
|
2842
2920
|
data.homeName
|
|
2843
2921
|
] }),
|
|
2844
|
-
/* @__PURE__ */
|
|
2922
|
+
/* @__PURE__ */ jsxs35("span", { className: "ss-w-fandash-live-legend-item", children: [
|
|
2845
2923
|
/* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--away" }),
|
|
2846
2924
|
data.awayName
|
|
2847
2925
|
] })
|
|
@@ -2850,7 +2928,7 @@ function LiveStatsCard({ card }) {
|
|
|
2850
2928
|
}
|
|
2851
2929
|
|
|
2852
2930
|
// src/components/dashboard/ClubFanDashboard.tsx
|
|
2853
|
-
import { jsx as jsx40, jsxs as
|
|
2931
|
+
import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
2854
2932
|
function ClubFanDashboard({ dashboard, onTap, ui }) {
|
|
2855
2933
|
const orderedCards = [
|
|
2856
2934
|
...dashboard.cards.filter((c) => c.cardType === "countdown"),
|
|
@@ -2860,7 +2938,7 @@ function ClubFanDashboard({ dashboard, onTap, ui }) {
|
|
|
2860
2938
|
(c) => c.cardType === "liveTimeline"
|
|
2861
2939
|
);
|
|
2862
2940
|
const goalEvents = timelineCard?.data.events.filter((e) => e.type === "goal");
|
|
2863
|
-
return /* @__PURE__ */
|
|
2941
|
+
return /* @__PURE__ */ jsxs36("div", { className: "ss-w-fandash", children: [
|
|
2864
2942
|
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,
|
|
2865
2943
|
/* @__PURE__ */ jsx40("div", { className: "ss-w-fandash-cards", children: orderedCards.map((card, i) => /* @__PURE__ */ jsx40(FanDashboardCard, { card, onTap, ui, goalEvents }, `${card.cardType}-${i}`)) })
|
|
2866
2944
|
] });
|
|
@@ -2913,7 +2991,7 @@ function FanDashboardCard({ card, onTap, ui, goalEvents }) {
|
|
|
2913
2991
|
}
|
|
2914
2992
|
|
|
2915
2993
|
// src/components/ChatMessage.tsx
|
|
2916
|
-
import { jsx as jsx41, jsxs as
|
|
2994
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
2917
2995
|
function ChatMessage({ message, disabled, onAct, onTap, ui, slip, monitor }) {
|
|
2918
2996
|
if (message.role === "user") {
|
|
2919
2997
|
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 }) });
|
|
@@ -2921,7 +2999,7 @@ function ChatMessage({ message, disabled, onAct, onTap, ui, slip, monitor }) {
|
|
|
2921
2999
|
const onFanDashboardTap = (card) => {
|
|
2922
3000
|
onAct({ message: card.actionLabel, actionRef: card.actionRef, label: card.actionLabel || card.title || "" });
|
|
2923
3001
|
};
|
|
2924
|
-
return /* @__PURE__ */
|
|
3002
|
+
return /* @__PURE__ */ jsxs37("div", { className: "ss-w-msg ss-w-bot", "data-msg-id": message.id, children: [
|
|
2925
3003
|
message.text && !message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(Markdown, { text: message.text }) : null,
|
|
2926
3004
|
message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(GreetingDashboard, { dashboard: message.greetingDashboard, onTap }) : null,
|
|
2927
3005
|
message.clubFanDashboard ? /* @__PURE__ */ jsx41(ClubFanDashboard, { dashboard: message.clubFanDashboard, onTap: onFanDashboardTap, ui }) : null,
|
|
@@ -2947,7 +3025,7 @@ function isPinnedToBottom(el, threshold = PIN_THRESHOLD) {
|
|
|
2947
3025
|
}
|
|
2948
3026
|
|
|
2949
3027
|
// src/components/MessageList.tsx
|
|
2950
|
-
import { jsx as jsx43, jsxs as
|
|
3028
|
+
import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
2951
3029
|
function turnAnchor(messages) {
|
|
2952
3030
|
const last = messages[messages.length - 1];
|
|
2953
3031
|
if (!last || last.role !== "assistant") return null;
|
|
@@ -2956,11 +3034,11 @@ function turnAnchor(messages) {
|
|
|
2956
3034
|
}
|
|
2957
3035
|
function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
2958
3036
|
const { state, send } = controller;
|
|
2959
|
-
const listRef =
|
|
2960
|
-
const endRef =
|
|
2961
|
-
const pinnedRef =
|
|
2962
|
-
const anchoredTurnRef =
|
|
2963
|
-
|
|
3037
|
+
const listRef = useRef7(null);
|
|
3038
|
+
const endRef = useRef7(null);
|
|
3039
|
+
const pinnedRef = useRef7(true);
|
|
3040
|
+
const anchoredTurnRef = useRef7(null);
|
|
3041
|
+
useEffect9(() => {
|
|
2964
3042
|
const anchor = turnAnchor(state.messages);
|
|
2965
3043
|
const list = listRef.current;
|
|
2966
3044
|
if (anchor && anchor.turnId !== anchoredTurnRef.current) {
|
|
@@ -2975,7 +3053,7 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
2975
3053
|
}, [state.messages, state.status, state.isStreaming]);
|
|
2976
3054
|
const hasUserMessage = state.messages.some((m) => m.role === "user");
|
|
2977
3055
|
const hasDashboard = state.messages.some((m) => m.role === "assistant" && (m.greetingDashboard || m.clubFanDashboard));
|
|
2978
|
-
return /* @__PURE__ */
|
|
3056
|
+
return /* @__PURE__ */ jsxs38(
|
|
2979
3057
|
"div",
|
|
2980
3058
|
{
|
|
2981
3059
|
className: "ss-w-list",
|
|
@@ -3004,7 +3082,7 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3004
3082
|
state.isStreaming && state.actionsLoading ? /* @__PURE__ */ jsx43(ActionButtons, { actions: [], loading: true, onAct: () => {
|
|
3005
3083
|
} }) : null,
|
|
3006
3084
|
state.status ? /* @__PURE__ */ jsx43("div", { className: "ss-w-status", children: state.status }) : null,
|
|
3007
|
-
state.error ? /* @__PURE__ */
|
|
3085
|
+
state.error ? /* @__PURE__ */ jsxs38("div", { className: "ss-w-error", role: "alert", children: [
|
|
3008
3086
|
/* @__PURE__ */ jsx43("span", { children: "message" in state.error ? state.error.message : ui.somethingWentWrong }),
|
|
3009
3087
|
/* @__PURE__ */ jsx43("button", { type: "button", className: "ss-w-retry", onClick: () => controller.retry(), children: ui.retry })
|
|
3010
3088
|
] }) : null,
|
|
@@ -3016,10 +3094,10 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3016
3094
|
}
|
|
3017
3095
|
|
|
3018
3096
|
// src/components/ChatInput.tsx
|
|
3019
|
-
import { useState as
|
|
3020
|
-
import { jsx as jsx44, jsxs as
|
|
3097
|
+
import { useState as useState17 } from "react";
|
|
3098
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
3021
3099
|
function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message" }) {
|
|
3022
|
-
const [value, setValue] =
|
|
3100
|
+
const [value, setValue] = useState17("");
|
|
3023
3101
|
const submit = () => {
|
|
3024
3102
|
const t = value.trim();
|
|
3025
3103
|
if (!t) return;
|
|
@@ -3032,14 +3110,14 @@ function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop r
|
|
|
3032
3110
|
submit();
|
|
3033
3111
|
}
|
|
3034
3112
|
};
|
|
3035
|
-
return /* @__PURE__ */
|
|
3113
|
+
return /* @__PURE__ */ jsxs39("div", { className: "ss-w-input", children: [
|
|
3036
3114
|
/* @__PURE__ */ jsx44("textarea", { className: "ss-w-textarea", rows: 1, placeholder, value, disabled: streaming, onChange: (e) => setValue(e.target.value), onKeyDown }),
|
|
3037
3115
|
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, {}) })
|
|
3038
3116
|
] });
|
|
3039
3117
|
}
|
|
3040
3118
|
|
|
3041
3119
|
// src/components/TabBar.tsx
|
|
3042
|
-
import { jsx as jsx45, jsxs as
|
|
3120
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
3043
3121
|
var TABS = [
|
|
3044
3122
|
{ tab: "chat", labelKey: "tabChat" },
|
|
3045
3123
|
{ tab: "matches", labelKey: "tabMatches" },
|
|
@@ -3056,7 +3134,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
|
|
|
3056
3134
|
return /* @__PURE__ */ jsx45("div", { className: "ss-w-tabs", role: "tablist", children: TABS.map(({ tab, labelKey }) => {
|
|
3057
3135
|
const active = monitor.activeTab === tab;
|
|
3058
3136
|
const count = counts[tab];
|
|
3059
|
-
return /* @__PURE__ */
|
|
3137
|
+
return /* @__PURE__ */ jsxs40(
|
|
3060
3138
|
"button",
|
|
3061
3139
|
{
|
|
3062
3140
|
type: "button",
|
|
@@ -3077,7 +3155,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
|
|
|
3077
3155
|
}
|
|
3078
3156
|
|
|
3079
3157
|
// src/components/MarketAccordion.tsx
|
|
3080
|
-
import { jsx as jsx46, jsxs as
|
|
3158
|
+
import { jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
3081
3159
|
function MarketAccordion({ match, monitor, ui, slip }) {
|
|
3082
3160
|
const markets = match.availableMarkets ?? [];
|
|
3083
3161
|
if (markets.length === 0) return null;
|
|
@@ -3086,9 +3164,9 @@ function MarketAccordion({ match, monitor, ui, slip }) {
|
|
|
3086
3164
|
const isOpen = open === m.marketDeveloperName;
|
|
3087
3165
|
const key = `${match.matchId}:${m.marketDeveloperName}`;
|
|
3088
3166
|
const entry = monitor.marketOdds[key];
|
|
3089
|
-
return /* @__PURE__ */
|
|
3090
|
-
/* @__PURE__ */
|
|
3091
|
-
/* @__PURE__ */
|
|
3167
|
+
return /* @__PURE__ */ jsxs41("div", { className: isOpen ? "ss-w-acc-row ss-w-acc-row-open" : "ss-w-acc-row", children: [
|
|
3168
|
+
/* @__PURE__ */ jsxs41("div", { className: "ss-w-acc-head", children: [
|
|
3169
|
+
/* @__PURE__ */ jsxs41(
|
|
3092
3170
|
"button",
|
|
3093
3171
|
{
|
|
3094
3172
|
type: "button",
|
|
@@ -3112,7 +3190,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
|
|
|
3112
3190
|
}
|
|
3113
3191
|
)
|
|
3114
3192
|
] }),
|
|
3115
|
-
isOpen && /* @__PURE__ */
|
|
3193
|
+
isOpen && /* @__PURE__ */ jsxs41("div", { className: "ss-w-acc-panel", children: [
|
|
3116
3194
|
entry?.error && /* @__PURE__ */ jsx46(
|
|
3117
3195
|
"div",
|
|
3118
3196
|
{
|
|
@@ -3121,7 +3199,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
|
|
|
3121
3199
|
children: ui.accordionRetry
|
|
3122
3200
|
}
|
|
3123
3201
|
),
|
|
3124
|
-
entry?.block?.insight?.text && /* @__PURE__ */
|
|
3202
|
+
entry?.block?.insight?.text && /* @__PURE__ */ jsxs41("div", { className: "ss-w-acc-insight", children: [
|
|
3125
3203
|
/* @__PURE__ */ jsx46("span", { className: "ss-w-acc-badge", children: ui.accordionValueLabel }),
|
|
3126
3204
|
" ",
|
|
3127
3205
|
entry.block.insight.text
|
|
@@ -3143,7 +3221,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
|
|
|
3143
3221
|
}
|
|
3144
3222
|
|
|
3145
3223
|
// src/components/MonitorMatchCard.tsx
|
|
3146
|
-
import { jsx as jsx47, jsxs as
|
|
3224
|
+
import { jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
3147
3225
|
function chipSelection(row, matchId, conversationId) {
|
|
3148
3226
|
const chip = row.market;
|
|
3149
3227
|
if (!chip || !chip.addToSlipEnabled || typeof chip.matchOddsId !== "number" || typeof chip.price !== "number") return null;
|
|
@@ -3166,14 +3244,14 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
3166
3244
|
const otherRows = match.statRows.filter((row) => !isPromoted(row, promotedPins));
|
|
3167
3245
|
const orderedRows = [...promotedRows, ...otherRows];
|
|
3168
3246
|
const kickoff = match.phase === "preMatch" && match.kickoffUtc ? ui.bettingKickoff(match.kickoffUtc) : void 0;
|
|
3169
|
-
return /* @__PURE__ */
|
|
3170
|
-
/* @__PURE__ */
|
|
3171
|
-
live && /* @__PURE__ */
|
|
3247
|
+
return /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon", children: [
|
|
3248
|
+
/* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-top", children: [
|
|
3249
|
+
live && /* @__PURE__ */ jsxs42("span", { className: "ss-w-fandash-live-pill", children: [
|
|
3172
3250
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
|
|
3173
3251
|
ui.liveLabel
|
|
3174
3252
|
] }),
|
|
3175
3253
|
match.phase === "fullTime" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
|
|
3176
|
-
kickoff && /* @__PURE__ */
|
|
3254
|
+
kickoff && /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-pill", children: [
|
|
3177
3255
|
kickoff.dayLabel,
|
|
3178
3256
|
" \xB7 ",
|
|
3179
3257
|
kickoff.time
|
|
@@ -3182,17 +3260,17 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
3182
3260
|
match.competitionName && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-comp", children: match.competitionName }),
|
|
3183
3261
|
/* @__PURE__ */ jsx47(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
|
|
3184
3262
|
] }),
|
|
3185
|
-
/* @__PURE__ */
|
|
3186
|
-
/* @__PURE__ */
|
|
3263
|
+
/* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-main", children: [
|
|
3264
|
+
/* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-side", children: [
|
|
3187
3265
|
/* @__PURE__ */ jsx47(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
|
|
3188
3266
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: match.homeTeamName })
|
|
3189
3267
|
] }),
|
|
3190
|
-
match.phase === "preMatch" ? /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */
|
|
3268
|
+
match.phase === "preMatch" ? /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-score", children: [
|
|
3191
3269
|
match.homeScore,
|
|
3192
3270
|
/* @__PURE__ */ jsx47("i", { children: "\u2013" }),
|
|
3193
3271
|
match.awayScore
|
|
3194
3272
|
] }),
|
|
3195
|
-
/* @__PURE__ */
|
|
3273
|
+
/* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
|
|
3196
3274
|
/* @__PURE__ */ jsx47(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
|
|
3197
3275
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: match.awayTeamName })
|
|
3198
3276
|
] })
|
|
@@ -3204,23 +3282,23 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
3204
3282
|
const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
|
|
3205
3283
|
const promoted = isPromoted(row, promotedPins);
|
|
3206
3284
|
const selection = chipSelection(row, match.matchId, slip.conversationId);
|
|
3207
|
-
return /* @__PURE__ */
|
|
3208
|
-
/* @__PURE__ */
|
|
3285
|
+
return /* @__PURE__ */ jsxs42("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
|
|
3286
|
+
/* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-stat-row", children: [
|
|
3209
3287
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
|
|
3210
3288
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-l", children: row.label }),
|
|
3211
3289
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
|
|
3212
3290
|
] }),
|
|
3213
|
-
/* @__PURE__ */
|
|
3291
|
+
/* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-bar", children: [
|
|
3214
3292
|
/* @__PURE__ */ jsx47("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
|
|
3215
3293
|
/* @__PURE__ */ jsx47("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
|
|
3216
3294
|
] }),
|
|
3217
|
-
row.market && /* @__PURE__ */
|
|
3218
|
-
/* @__PURE__ */
|
|
3295
|
+
row.market && /* @__PURE__ */ jsxs42("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
|
|
3296
|
+
/* @__PURE__ */ jsxs42("span", { children: [
|
|
3219
3297
|
row.market.marketLabel,
|
|
3220
3298
|
" \xB7 ",
|
|
3221
3299
|
row.market.selectionLabel
|
|
3222
3300
|
] }),
|
|
3223
|
-
/* @__PURE__ */
|
|
3301
|
+
/* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-stat-mkt-right", children: [
|
|
3224
3302
|
row.market.isSuspended ? /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-susp", children: ui.suspendedLabel }) : typeof row.market.price === "number" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-price", children: row.market.price.toFixed(2) }),
|
|
3225
3303
|
/* @__PURE__ */ jsx47(
|
|
3226
3304
|
SlipButton,
|
|
@@ -3237,8 +3315,8 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
3237
3315
|
] }, row.label);
|
|
3238
3316
|
}) }),
|
|
3239
3317
|
match.status === "stale" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
|
|
3240
|
-
match.momentum.length > 0 && /* @__PURE__ */
|
|
3241
|
-
/* @__PURE__ */
|
|
3318
|
+
match.momentum.length > 0 && /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-mom", children: [
|
|
3319
|
+
/* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-stat-row", children: [
|
|
3242
3320
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: typeof match.momentumHomePct === "number" ? `${match.momentumHomePct}%` : "" }),
|
|
3243
3321
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
|
|
3244
3322
|
/* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: typeof match.momentumHomePct === "number" ? `${100 - match.momentumHomePct}%` : "" })
|
|
@@ -3250,13 +3328,13 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
|
|
|
3250
3328
|
}
|
|
3251
3329
|
|
|
3252
3330
|
// src/components/MonitorTabs.tsx
|
|
3253
|
-
import { jsx as jsx48, jsxs as
|
|
3331
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
3254
3332
|
function OddsLiveStrip({ m, ui }) {
|
|
3255
3333
|
const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
|
|
3256
3334
|
const stale = m.status === "stale";
|
|
3257
3335
|
if (!showScore && !m.minuteLabel && !(m.isSuspended && !m.isSettled) && !m.isSettled && !stale) return null;
|
|
3258
|
-
return /* @__PURE__ */
|
|
3259
|
-
showScore && /* @__PURE__ */
|
|
3336
|
+
return /* @__PURE__ */ jsxs43("div", { className: "ss-w-mk-live", children: [
|
|
3337
|
+
showScore && /* @__PURE__ */ jsxs43("b", { className: "ss-w-mk-live-score", children: [
|
|
3260
3338
|
m.homeTeamName,
|
|
3261
3339
|
" ",
|
|
3262
3340
|
m.homeScore,
|
|
@@ -3274,7 +3352,7 @@ function OddsLiveStrip({ m, ui }) {
|
|
|
3274
3352
|
function MatchesPanel({ monitor, ui, slip }) {
|
|
3275
3353
|
const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
|
|
3276
3354
|
if (matches.length === 0) return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
|
|
3277
|
-
return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */
|
|
3355
|
+
return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs43("div", { className: "ss-w-mon-item", children: [
|
|
3278
3356
|
/* @__PURE__ */ jsx48(
|
|
3279
3357
|
MonitorMatchCard,
|
|
3280
3358
|
{
|
|
@@ -3303,7 +3381,7 @@ function OddsPanel({ monitor, ui, slip }) {
|
|
|
3303
3381
|
if (markets.length === 0) return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
|
|
3304
3382
|
return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: markets.map((m) => {
|
|
3305
3383
|
const pin = monitor.pins.find((p) => p.key === m.key);
|
|
3306
|
-
return /* @__PURE__ */
|
|
3384
|
+
return /* @__PURE__ */ jsxs43("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
|
|
3307
3385
|
/* @__PURE__ */ jsx48(OddsLiveStrip, { m, ui }),
|
|
3308
3386
|
m.card && /* @__PURE__ */ jsx48(
|
|
3309
3387
|
MarketOddsCardList,
|
|
@@ -3323,11 +3401,11 @@ function OddsPanel({ monitor, ui, slip }) {
|
|
|
3323
3401
|
}
|
|
3324
3402
|
|
|
3325
3403
|
// src/components/ChatPanel.tsx
|
|
3326
|
-
import { jsx as jsx49, jsxs as
|
|
3404
|
+
import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
3327
3405
|
var FULLSCREEN_QUERY = "(max-width: 639px)";
|
|
3328
3406
|
function useIsModal() {
|
|
3329
|
-
const [modal, setModal] =
|
|
3330
|
-
|
|
3407
|
+
const [modal, setModal] = useState18(false);
|
|
3408
|
+
useEffect10(() => {
|
|
3331
3409
|
if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
|
|
3332
3410
|
const mql = window.matchMedia(FULLSCREEN_QUERY);
|
|
3333
3411
|
const sync = () => setModal(mql.matches);
|
|
@@ -3340,7 +3418,7 @@ function useIsModal() {
|
|
|
3340
3418
|
function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
3341
3419
|
const { state, close, stop, send, reset } = controller;
|
|
3342
3420
|
const isModal = useIsModal();
|
|
3343
|
-
|
|
3421
|
+
useEffect10(() => {
|
|
3344
3422
|
const onKey = (e) => {
|
|
3345
3423
|
if (e.key === "Escape") close();
|
|
3346
3424
|
};
|
|
@@ -3351,10 +3429,10 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3351
3429
|
monitor?.setActiveTab("chat");
|
|
3352
3430
|
send(text);
|
|
3353
3431
|
};
|
|
3354
|
-
|
|
3432
|
+
useEffect10(() => {
|
|
3355
3433
|
if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
|
|
3356
3434
|
}, [monitor, state.isStreaming, state.messages.length]);
|
|
3357
|
-
return /* @__PURE__ */
|
|
3435
|
+
return /* @__PURE__ */ jsxs44("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
|
|
3358
3436
|
/* @__PURE__ */ jsx49(
|
|
3359
3437
|
ChatHeader,
|
|
3360
3438
|
{
|
|
@@ -3364,7 +3442,8 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
|
|
|
3364
3442
|
headerTitle: ui.headerTitle,
|
|
3365
3443
|
onNewConversation: reset,
|
|
3366
3444
|
canReset: state.messages.length > 0,
|
|
3367
|
-
newConversationLabel: ui.newConversation
|
|
3445
|
+
newConversationLabel: ui.newConversation,
|
|
3446
|
+
moreOptionsLabel: ui.moreOptions
|
|
3368
3447
|
}
|
|
3369
3448
|
),
|
|
3370
3449
|
monitor && /* @__PURE__ */ jsx49(
|
|
@@ -3482,8 +3561,13 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
|
|
|
3482
3561
|
.ss-w-header { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--ss-w-line); }
|
|
3483
3562
|
.ss-w-header-mark { width: 18px; height: 18px; display: block; object-fit: contain; }
|
|
3484
3563
|
.ss-w-header-title { font-weight: 660; flex: 1; }
|
|
3485
|
-
.ss-w-newconv { background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
|
|
3486
3564
|
.ss-w-close { background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
|
|
3565
|
+
.ss-w-menu-wrap { position: relative; display: grid; place-items: center; }
|
|
3566
|
+
.ss-w-kebab { background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
|
|
3567
|
+
.ss-w-menu { position: absolute; top: calc(100% + 6px); right: 0; z-index: 5; min-width: 184px; padding: 6px; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-radius: 12px; box-shadow: 0 8px 24px rgba(0,0,0,.18); }
|
|
3568
|
+
.ss-w-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; background: none; border: none; border-radius: 8px; color: var(--ss-w-ink); font: inherit; font-size: 13px; text-align: left; cursor: pointer; }
|
|
3569
|
+
.ss-w-menu-item:hover, .ss-w-menu-item:focus-visible { background: var(--ss-w-bubble); }
|
|
3570
|
+
.ss-w-menu-item svg { color: var(--ss-w-faint); font-size: 15px; flex: none; }
|
|
3487
3571
|
|
|
3488
3572
|
/* messages */
|
|
3489
3573
|
/* .ss-w-mon-list (Matches/Odds tab scrollers) shares .ss-w-list's box/scroll rules by design --
|
|
@@ -4225,8 +4309,8 @@ function StatsWidget(props) {
|
|
|
4225
4309
|
const cfg = props.config;
|
|
4226
4310
|
const built = useMemo2(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
|
|
4227
4311
|
const ui = useMemo2(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
|
|
4228
|
-
const rootRef =
|
|
4229
|
-
const introDoneRef =
|
|
4312
|
+
const rootRef = useRef8(null);
|
|
4313
|
+
const introDoneRef = useRef8(false);
|
|
4230
4314
|
const markIntroDone = useCallback5(() => {
|
|
4231
4315
|
introDoneRef.current = true;
|
|
4232
4316
|
}, []);
|
|
@@ -4265,7 +4349,7 @@ function StatsWidget(props) {
|
|
|
4265
4349
|
() => built ? createDashboardTapSignal((input) => built.conversation.sendSignal(input)) : void 0,
|
|
4266
4350
|
[built]
|
|
4267
4351
|
);
|
|
4268
|
-
|
|
4352
|
+
useEffect11(() => {
|
|
4269
4353
|
if (!built || !ui.injectStyles) return;
|
|
4270
4354
|
const node = rootRef.current?.getRootNode();
|
|
4271
4355
|
if (node) injectStyles(node);
|