@sensiblestats/widget-react 0.37.3 → 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/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/StatsWidget.tsx
2
- import { useCallback as useCallback5, useEffect as useEffect10, useMemo as useMemo2, useRef as useRef7 } from "react";
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
@@ -20,6 +20,8 @@ var STRINGS = {
20
20
  launcherLabel: "Chat with SensibleStats",
21
21
  placeholder: "Ask about a team, player or match\u2026",
22
22
  closeChat: "Close chat",
23
+ newConversation: "New conversation",
24
+ moreOptions: "More options",
23
25
  chatDialogLabel: "SensibleStats chat",
24
26
  stopResponse: "Stop response",
25
27
  sendMessage: "Send message",
@@ -92,6 +94,8 @@ var STRINGS = {
92
94
  launcherLabel: "SensibleStats ile sohbet et",
93
95
  placeholder: "Bir tak\u0131m, oyuncu veya ma\xE7 hakk\u0131nda sor\u2026",
94
96
  closeChat: "Sohbeti kapat",
97
+ newConversation: "Yeni sohbet",
98
+ moreOptions: "Di\u011Fer se\xE7enekler",
95
99
  chatDialogLabel: "SensibleStats sohbet",
96
100
  stopResponse: "Yan\u0131t\u0131 durdur",
97
101
  sendMessage: "Mesaj g\xF6nder",
@@ -187,6 +191,8 @@ function normalizeUi(cfg) {
187
191
  starters: cfg.starters ?? [],
188
192
  injectStyles: cfg.injectStyles ?? true,
189
193
  closeChat: strings.closeChat,
194
+ newConversation: strings.newConversation,
195
+ moreOptions: strings.moreOptions,
190
196
  chatDialogLabel: strings.chatDialogLabel,
191
197
  stopResponse: strings.stopResponse,
192
198
  sendMessage: strings.sendMessage,
@@ -605,7 +611,7 @@ function marketOddsRowToSlipSelection(vm, row, conversationId) {
605
611
  // src/reducer.ts
606
612
  var POPUP_MAX = 160;
607
613
  function initialState(starters) {
608
- return { isOpen: false, messages: [], isStreaming: false, status: null, actionsLoading: false, starters, error: null, lastUserInput: null, lastDisplayText: null, popupText: null, conversationId: null };
614
+ return { isOpen: false, messages: [], isStreaming: false, status: null, actionsLoading: false, starters, configuredStarters: starters, error: null, lastUserInput: null, lastDisplayText: null, popupText: null, conversationId: null };
609
615
  }
610
616
  function activeTurn(state) {
611
617
  const last = state.messages[state.messages.length - 1];
@@ -685,6 +691,19 @@ function reducer(state, action) {
685
691
  }
686
692
  case "DISMISS_POPUP":
687
693
  return { ...state, popupText: null };
694
+ case "RESET":
695
+ return { ...initialState(state.configuredStarters), isOpen: state.isOpen };
696
+ case "RESTORE":
697
+ return {
698
+ ...state,
699
+ messages: action.messages,
700
+ conversationId: action.conversationId,
701
+ isStreaming: false,
702
+ status: null,
703
+ actionsLoading: false,
704
+ starters: action.messages.length ? [] : state.configuredStarters,
705
+ error: null
706
+ };
688
707
  case "EVENT":
689
708
  return applyEvent(state, action.event);
690
709
  case "STREAM_ERROR":
@@ -804,17 +823,82 @@ function useLiveDashboardPoll({ messages, dispatch, getLiveDashboard }) {
804
823
  }, [anchorKey, messages, forceUpdate]);
805
824
  }
806
825
 
826
+ // src/conversationStore.ts
827
+ var TTL_MS = 36e5;
828
+ var MAX_MESSAGES = 30;
829
+ function readConversation(storageKey, now) {
830
+ let raw;
831
+ try {
832
+ raw = window.localStorage.getItem(storageKey);
833
+ } catch {
834
+ return null;
835
+ }
836
+ if (!raw) return null;
837
+ let parsed;
838
+ try {
839
+ parsed = JSON.parse(raw);
840
+ } catch {
841
+ return "corrupt";
842
+ }
843
+ if (parsed?.v !== 1 || !Array.isArray(parsed.messages) || typeof parsed.updatedAt !== "number") return "corrupt";
844
+ if (now - parsed.updatedAt > TTL_MS) return "expired";
845
+ return { conversationId: parsed.conversationId ?? null, messages: parsed.messages };
846
+ }
847
+ function writeConversation(storageKey, conversationId, messages, now) {
848
+ let capped = messages.slice(-MAX_MESSAGES);
849
+ for (let attempt = 0; attempt < 2; attempt++) {
850
+ try {
851
+ window.localStorage.setItem(storageKey, JSON.stringify({ v: 1, updatedAt: now, conversationId, messages: capped }));
852
+ return;
853
+ } catch {
854
+ if (capped.length <= 1) return;
855
+ capped = capped.slice(Math.ceil(capped.length / 2));
856
+ }
857
+ }
858
+ }
859
+ function clearConversation(storageKey) {
860
+ try {
861
+ window.localStorage.removeItem(storageKey);
862
+ } catch {
863
+ }
864
+ }
865
+
807
866
  // src/useChatStream.ts
867
+ function hasAnswerContent(t) {
868
+ return !!t.text || t.cards.length > 0 || t.insights.length > 0 || t.marketOdds.length > 0 || t.oddsMovement.length > 0 || !!t.greetingDashboard || !!t.clubFanDashboard;
869
+ }
808
870
  var STREAM_FALLBACK_TIMEOUT_MS = 3e4;
809
- function useChatStream(conversation, starterTexts, greetingMessage) {
810
- const seed = useMemo(() => initialState(starterTexts.map(chipFromText)), []);
811
- const [state, dispatch] = useReducer2(reducer, seed);
812
- const idRef = useRef2(0);
871
+ function seedIdCounter(messages) {
872
+ let max = -1;
873
+ for (const m of messages) {
874
+ const n = Number(m.id.slice(1));
875
+ if (m.id[0] === "m" && Number.isFinite(n) && n > max) max = n;
876
+ }
877
+ return max + 1;
878
+ }
879
+ function useChatStream(conversation, starterTexts, greetingMessage, storageKey) {
880
+ const boot = useMemo(() => {
881
+ const payload = storageKey ? readConversation(storageKey, Date.now()) : null;
882
+ const restored = payload != null && payload !== "expired" && payload !== "corrupt";
883
+ const base = initialState(starterTexts.map(chipFromText));
884
+ if (restored) {
885
+ return { state: { ...base, messages: payload.messages, conversationId: payload.conversationId, starters: [] }, restored: true, stale: false };
886
+ }
887
+ return { state: base, restored: false, stale: payload === "expired" || payload === "corrupt" };
888
+ }, []);
889
+ const [state, dispatch] = useReducer2(reducer, boot.state);
890
+ const idRef = useRef2(seedIdCounter(boot.state.messages));
813
891
  const handleRef = useRef2(null);
814
892
  const fallbackTimerRef = useRef2(null);
815
893
  const stateRef = useRef2(state);
816
894
  stateRef.current = state;
817
- const greetedRef = useRef2(false);
895
+ const greetedRef = useRef2(boot.restored);
896
+ const hydratedRef = useRef2(false);
897
+ const restoreSeededRef = useRef2(false);
898
+ if (!restoreSeededRef.current) {
899
+ restoreSeededRef.current = true;
900
+ if (boot.restored && boot.state.conversationId) conversation.conversationId = boot.state.conversationId;
901
+ }
818
902
  const nextId = () => `m${idRef.current++}`;
819
903
  const clearFallbackTimer = useCallback(() => {
820
904
  if (fallbackTimerRef.current != null) {
@@ -870,10 +954,9 @@ function useChatStream(conversation, starterTexts, greetingMessage) {
870
954
  const last = stateRef.current.lastUserInput;
871
955
  if (last) run(last, stateRef.current.lastDisplayText ?? void 0);
872
956
  }, [run]);
873
- useEffect2(() => {
957
+ const fireGreeting = useCallback(() => {
874
958
  const message = greetingMessage?.trim();
875
- if (!message || greetedRef.current) return;
876
- greetedRef.current = true;
959
+ if (!message) return;
877
960
  try {
878
961
  handleRef.current?.cancel();
879
962
  clearFallbackTimer();
@@ -886,6 +969,55 @@ function useChatStream(conversation, starterTexts, greetingMessage) {
886
969
  dispatch({ kind: "STOP" });
887
970
  }
888
971
  }, [greetingMessage, conversation, consume, clearFallbackTimer, armFallbackTimer]);
972
+ useEffect2(() => {
973
+ if (greetedRef.current) return;
974
+ greetedRef.current = true;
975
+ fireGreeting();
976
+ }, [fireGreeting]);
977
+ useEffect2(() => {
978
+ if (boot.stale && storageKey) clearConversation(storageKey);
979
+ }, []);
980
+ useEffect2(() => {
981
+ if (!storageKey || state.isStreaming) return;
982
+ if (hydratedRef.current) {
983
+ hydratedRef.current = false;
984
+ return;
985
+ }
986
+ const msgs = state.messages;
987
+ const persistable = msgs.filter((m, i) => {
988
+ if (m.role === "user") {
989
+ const next = msgs[i + 1];
990
+ return !!next && next.role === "assistant" && next.done && !next.isGreeting && hasAnswerContent(next);
991
+ }
992
+ return m.done && !m.isGreeting && hasAnswerContent(m);
993
+ });
994
+ if (persistable.length === 0) return;
995
+ writeConversation(storageKey, state.conversationId, persistable, Date.now());
996
+ }, [storageKey, state.isStreaming, state.messages, state.conversationId]);
997
+ useEffect2(() => {
998
+ if (!storageKey) return;
999
+ const onStorage = (e) => {
1000
+ if (e.key !== storageKey || e.storageArea !== window.localStorage) return;
1001
+ if (stateRef.current.isStreaming) return;
1002
+ if (e.newValue == null) {
1003
+ idRef.current = 0;
1004
+ conversation.conversationId = void 0;
1005
+ hydratedRef.current = true;
1006
+ dispatch({ kind: "RESET" });
1007
+ greetedRef.current = true;
1008
+ fireGreeting();
1009
+ return;
1010
+ }
1011
+ const parsed = readConversation(storageKey, Date.now());
1012
+ if (!parsed || parsed === "expired" || parsed === "corrupt") return;
1013
+ idRef.current = seedIdCounter(parsed.messages);
1014
+ conversation.conversationId = parsed.conversationId ?? void 0;
1015
+ hydratedRef.current = true;
1016
+ dispatch({ kind: "RESTORE", messages: parsed.messages, conversationId: parsed.conversationId });
1017
+ };
1018
+ window.addEventListener("storage", onStorage);
1019
+ return () => window.removeEventListener("storage", onStorage);
1020
+ }, [storageKey, conversation, fireGreeting]);
889
1021
  const open = useCallback(() => dispatch({ kind: "OPEN" }), []);
890
1022
  const close = useCallback(() => {
891
1023
  handleRef.current?.cancel();
@@ -904,9 +1036,20 @@ function useChatStream(conversation, starterTexts, greetingMessage) {
904
1036
  else open();
905
1037
  }, [close, open]);
906
1038
  const dismissPopup = useCallback(() => dispatch({ kind: "DISMISS_POPUP" }), []);
1039
+ const reset = useCallback(() => {
1040
+ handleRef.current?.cancel();
1041
+ handleRef.current = null;
1042
+ clearFallbackTimer();
1043
+ if (storageKey) clearConversation(storageKey);
1044
+ idRef.current = 0;
1045
+ conversation.conversationId = void 0;
1046
+ dispatch({ kind: "RESET" });
1047
+ greetedRef.current = true;
1048
+ fireGreeting();
1049
+ }, [storageKey, conversation, clearFallbackTimer, fireGreeting]);
907
1050
  const getLiveDashboard = useCallback(() => conversation.getLiveDashboard(), [conversation]);
908
1051
  useLiveDashboardPoll({ messages: state.messages, dispatch, getLiveDashboard });
909
- return { state, open, close, stop, toggle, send, retry, dismissPopup };
1052
+ return { state, open, close, stop, toggle, send, retry, dismissPopup, reset };
910
1053
  }
911
1054
 
912
1055
  // src/useLiveMonitor.ts
@@ -1238,7 +1381,7 @@ import { useState as useState2 } from "react";
1238
1381
  var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
1239
1382
 
1240
1383
  // src/components/Icons.tsx
1241
- import { jsx } from "react/jsx-runtime";
1384
+ import { jsx, jsxs } from "react/jsx-runtime";
1242
1385
  function SsMark({ className }) {
1243
1386
  return /* @__PURE__ */ jsx("img", { className, src: SS_LOGO_DATA_URI, alt: "", "aria-hidden": "true" });
1244
1387
  }
@@ -1251,6 +1394,16 @@ function CloseIcon() {
1251
1394
  function ChevronIcon() {
1252
1395
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", d: "M9 5l7 7-7 7" }) });
1253
1396
  }
1397
+ function NewChatIcon() {
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" }) });
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
+ }
1254
1407
  var DASHBOARD_EMOJI = {
1255
1408
  football: "\u26BD",
1256
1409
  "goal-net": "\u{1F945}",
@@ -1280,11 +1433,11 @@ function BrandMark({ logoUrl, className }) {
1280
1433
  }
1281
1434
 
1282
1435
  // src/components/GreetingBubble.tsx
1283
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
1436
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
1284
1437
  function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
1285
- return /* @__PURE__ */ jsxs("div", { className: "ss-w-greeting", role: "note", children: [
1286
- /* @__PURE__ */ jsxs("button", { type: "button", className: "ss-w-greeting-body", onClick: onOpen, children: [
1287
- /* @__PURE__ */ jsxs("span", { className: "ss-w-greeting-dots", "aria-hidden": "true", children: [
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: [
1288
1441
  /* @__PURE__ */ jsx3("i", {}),
1289
1442
  /* @__PURE__ */ jsx3("i", {}),
1290
1443
  /* @__PURE__ */ jsx3("i", {})
@@ -1296,7 +1449,7 @@ function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
1296
1449
  }
1297
1450
 
1298
1451
  // src/components/ChatFab.tsx
1299
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
1452
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
1300
1453
  function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup, dismissLabel = "Dismiss", introAllowed = false, onIntroStart }) {
1301
1454
  const bubble = popupText ?? greeting;
1302
1455
  const [intro, setIntro] = useState3(false);
@@ -1308,27 +1461,96 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
1308
1461
  onIntroStart?.();
1309
1462
  }
1310
1463
  }, [bubble, onIntroStart]);
1311
- return /* @__PURE__ */ jsxs2("div", { className: intro ? "ss-w-fab-wrap ss-w-intro" : "ss-w-fab-wrap", children: [
1464
+ return /* @__PURE__ */ jsxs3("div", { className: intro ? "ss-w-fab-wrap ss-w-intro" : "ss-w-fab-wrap", children: [
1312
1465
  bubble ? /* @__PURE__ */ jsx4(GreetingBubble, { text: bubble, onOpen, onDismiss: popupText ? onDismissPopup : void 0, dismissLabel }) : null,
1313
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" }) })
1314
1467
  ] });
1315
1468
  }
1316
1469
 
1317
1470
  // src/components/ChatPanel.tsx
1318
- import { useEffect as useEffect9, useState as useState17 } from "react";
1471
+ import { useEffect as useEffect10, useState as useState18 } from "react";
1319
1472
 
1320
1473
  // src/components/ChatHeader.tsx
1321
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
1322
- function ChatHeader({ onClose, closeLabel = "Close chat", logoUrl, headerTitle }) {
1323
- return /* @__PURE__ */ jsxs3("header", { className: "ss-w-header", children: [
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: [
1324
1517
  /* @__PURE__ */ jsx5(BrandMark, { logoUrl, className: "ss-w-header-mark" }),
1325
1518
  /* @__PURE__ */ jsx5("span", { className: "ss-w-header-title", children: headerTitle ?? "SensibleStats" }),
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,
1326
1548
  /* @__PURE__ */ jsx5("button", { type: "button", className: "ss-w-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, {}) })
1327
1549
  ] });
1328
1550
  }
1329
1551
 
1330
1552
  // src/components/MessageList.tsx
1331
- import { useEffect as useEffect8, useRef as useRef6 } from "react";
1553
+ import { useEffect as useEffect9, useRef as useRef7 } from "react";
1332
1554
 
1333
1555
  // src/components/Markdown.tsx
1334
1556
  import ReactMarkdown from "react-markdown";
@@ -1346,8 +1568,8 @@ function Markdown({ text }) {
1346
1568
  }
1347
1569
 
1348
1570
  // src/components/EntityCardList.tsx
1349
- import { useState as useState4 } from "react";
1350
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
1571
+ import { useState as useState5 } from "react";
1572
+ import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
1351
1573
  var MAX_VISIBLE = 3;
1352
1574
  var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
1353
1575
  function initials(name) {
@@ -1368,7 +1590,7 @@ function Crest({ image, label }) {
1368
1590
  }
1369
1591
  function FormBar({ w, d, l }) {
1370
1592
  if (w + d + l === 0) return null;
1371
- return /* @__PURE__ */ jsxs4("span", { className: "ss-w-form", "aria-hidden": "true", children: [
1593
+ return /* @__PURE__ */ jsxs5("span", { className: "ss-w-form", "aria-hidden": "true", children: [
1372
1594
  w > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-w", style: { flexGrow: w } }) : null,
1373
1595
  d > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-d", style: { flexGrow: d } }) : null,
1374
1596
  l > 0 ? /* @__PURE__ */ jsx7("span", { className: "ss-w-form-l", style: { flexGrow: l } }) : null
@@ -1377,12 +1599,12 @@ function FormBar({ w, d, l }) {
1377
1599
  function StatCellView({ s }) {
1378
1600
  const m = RECORD_RE.exec(s.value);
1379
1601
  if (m) {
1380
- return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-cell", children: [
1602
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-cell", children: [
1381
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]) }) }),
1382
1604
  /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.value })
1383
1605
  ] });
1384
1606
  }
1385
- return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-cell", children: [
1607
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-cell", children: [
1386
1608
  /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-cval", children: s.value }),
1387
1609
  /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-clabel", children: s.label })
1388
1610
  ] });
@@ -1394,7 +1616,7 @@ function StatStrip({ stats }) {
1394
1616
  }
1395
1617
  function CardHeader({ c, showScopeCrest }) {
1396
1618
  const onlyScope = c.scopes.length === 1 ? c.scopes[0] : null;
1397
- return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-hd", children: [
1619
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-hd", children: [
1398
1620
  /* @__PURE__ */ jsx7(
1399
1621
  "span",
1400
1622
  {
@@ -1403,11 +1625,11 @@ function CardHeader({ c, showScopeCrest }) {
1403
1625
  children: c.image ? "" : initials(c.name)
1404
1626
  }
1405
1627
  ),
1406
- /* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-idtext", children: [
1628
+ /* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-idtext", children: [
1407
1629
  /* @__PURE__ */ jsx7("span", { className: "ss-w-nm", children: c.name }),
1408
1630
  c.sub ? /* @__PURE__ */ jsx7("span", { className: "ss-w-sub", children: c.sub }) : null
1409
1631
  ] }),
1410
- /* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-meta", children: [
1632
+ /* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-meta", children: [
1411
1633
  showScopeCrest && onlyScope?.image ? /* @__PURE__ */ jsx7(Crest, { image: onlyScope.image, label: onlyScope.label }) : null,
1412
1634
  c.season ? /* @__PURE__ */ jsx7("span", { className: "ss-w-ecard-season", children: shortSeason(c.season) }) : null
1413
1635
  ] })
@@ -1430,43 +1652,43 @@ function ScopeTabs({ scopes, active, onSelect }) {
1430
1652
  )) });
1431
1653
  }
1432
1654
  function EntityCardItem({ c }) {
1433
- const [active, setActive] = useState4(0);
1655
+ const [active, setActive] = useState5(0);
1434
1656
  const hasBody = c.scopes.length > 0;
1435
1657
  if (!hasBody) {
1436
1658
  return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: /* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: false }) });
1437
1659
  }
1438
1660
  const multi = c.scopes.length > 1;
1439
1661
  const scope = c.scopes[multi ? c.scopes[active] ? active : 0 : 0];
1440
- return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard", "data-kind": c.kind, children: [
1662
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard", "data-kind": c.kind, children: [
1441
1663
  /* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: !multi }),
1442
1664
  multi ? /* @__PURE__ */ jsx7(ScopeTabs, { scopes: c.scopes, active, onSelect: setActive }) : null,
1443
1665
  /* @__PURE__ */ jsx7(StatStrip, { stats: scope.stats })
1444
1666
  ] });
1445
1667
  }
1446
1668
  function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMoreLabel = (n) => `Show ${n} more` }) {
1447
- const [expanded, setExpanded] = useState4(false);
1669
+ const [expanded, setExpanded] = useState5(false);
1448
1670
  if (cards.length === 0) return null;
1449
1671
  const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
1450
1672
  const overflow = cards.length - MAX_VISIBLE;
1451
- return /* @__PURE__ */ jsxs4("div", { className: "ss-w-cards", children: [
1673
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-cards", children: [
1452
1674
  visible.map((c) => /* @__PURE__ */ jsx7(EntityCardItem, { c }, c.id)),
1453
1675
  overflow > 0 ? /* @__PURE__ */ jsx7("button", { type: "button", className: "ss-w-cards-more", disabled, onClick: () => setExpanded((v) => !v), children: expanded ? showLessLabel : showMoreLabel(overflow) }) : null
1454
1676
  ] });
1455
1677
  }
1456
1678
 
1457
1679
  // src/components/BettingInsightList.tsx
1458
- import { useState as useState8 } from "react";
1680
+ import { useState as useState9 } from "react";
1459
1681
 
1460
1682
  // src/components/AddToSlipButton.tsx
1461
- import { useCallback as useCallback3, useState as useState5 } from "react";
1683
+ import { useCallback as useCallback3, useState as useState6 } from "react";
1462
1684
  import { isAddToSlipResult } from "@sensiblestats/widget-sdk";
1463
1685
 
1464
1686
  // src/components/Toast.tsx
1465
- import { useEffect as useEffect5 } from "react";
1687
+ import { useEffect as useEffect6 } from "react";
1466
1688
  import { jsx as jsx8 } from "react/jsx-runtime";
1467
1689
  var DISMISS_MS = 4e3;
1468
1690
  function Toast({ toast, onDismiss }) {
1469
- useEffect5(() => {
1691
+ useEffect6(() => {
1470
1692
  if (!toast) return;
1471
1693
  const timer = setTimeout(onDismiss, DISMISS_MS);
1472
1694
  return () => clearTimeout(timer);
@@ -1476,7 +1698,7 @@ function Toast({ toast, onDismiss }) {
1476
1698
  }
1477
1699
 
1478
1700
  // src/components/AddToSlipButton.tsx
1479
- import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
1701
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
1480
1702
  function withTimeout(value) {
1481
1703
  return Promise.race([
1482
1704
  value,
@@ -1484,9 +1706,9 @@ function withTimeout(value) {
1484
1706
  ]);
1485
1707
  }
1486
1708
  function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
1487
- const [pending, setPending] = useState5(false);
1488
- const [settled, setSettled] = useState5(false);
1489
- const [toast, setToast] = useState5(null);
1709
+ const [pending, setPending] = useState6(false);
1710
+ const [settled, setSettled] = useState6(false);
1711
+ const [toast, setToast] = useState6(null);
1490
1712
  const dismiss = useCallback3(() => setToast(null), []);
1491
1713
  const handler = slip.onAddToSlip;
1492
1714
  if (!ui || !handler || !selection) return null;
@@ -1510,7 +1732,7 @@ function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
1510
1732
  setPending(false);
1511
1733
  }
1512
1734
  };
1513
- return /* @__PURE__ */ jsxs5("div", { className: "ss-w-slip", children: [
1735
+ return /* @__PURE__ */ jsxs6("div", { className: "ss-w-slip", children: [
1514
1736
  /* @__PURE__ */ jsx9(
1515
1737
  "button",
1516
1738
  {
@@ -1530,7 +1752,7 @@ function AddToSlipButton({ it, slip, ui }) {
1530
1752
  }
1531
1753
 
1532
1754
  // src/components/OddsMovementBadge.tsx
1533
- import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
1755
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
1534
1756
  function OddsMovementBadge({
1535
1757
  previous,
1536
1758
  current,
@@ -1543,7 +1765,7 @@ function OddsMovementBadge({
1543
1765
  return (
1544
1766
  // Strikethrough is invisible to screen readers, so the whole was/now/direction sentence rides
1545
1767
  // on one aria-label and the visual glyphs are hidden from the accessibility tree.
1546
- /* @__PURE__ */ jsxs6("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
1768
+ /* @__PURE__ */ jsxs7("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
1547
1769
  /* @__PURE__ */ jsx10("span", { className: "ss-w-move-prev", "aria-hidden": "true", children: previous }),
1548
1770
  /* @__PURE__ */ jsx10("span", { className: "ss-w-move-arrow", "aria-hidden": "true", children: direction === "shortened" ? "\u25BC" : "\u25B2" })
1549
1771
  ] })
@@ -1551,14 +1773,14 @@ function OddsMovementBadge({
1551
1773
  }
1552
1774
 
1553
1775
  // src/components/Crest.tsx
1554
- import { useState as useState6 } from "react";
1776
+ import { useState as useState7 } from "react";
1555
1777
  import { jsx as jsx11 } from "react/jsx-runtime";
1556
1778
  function initials2(name) {
1557
1779
  return (name ?? "").trim().slice(0, 1).toUpperCase() || "?";
1558
1780
  }
1559
1781
  function Crest2({ url, name, kind }) {
1560
1782
  const cls = kind === "comp" ? "ss-w-bi-comp-logo" : "ss-w-bi-crest";
1561
- const [failed, setFailed] = useState6(false);
1783
+ const [failed, setFailed] = useState7(false);
1562
1784
  if (url && !failed) {
1563
1785
  return /* @__PURE__ */ jsx11("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
1564
1786
  }
@@ -1566,15 +1788,15 @@ function Crest2({ url, name, kind }) {
1566
1788
  }
1567
1789
 
1568
1790
  // src/components/PinToggle.tsx
1569
- import { useCallback as useCallback4, useState as useState7 } from "react";
1570
- import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
1791
+ import { useCallback as useCallback4, useState as useState8 } from "react";
1792
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
1571
1793
  var PIN_GLYPHS = {
1572
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" },
1573
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" },
1574
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" }
1575
1797
  };
1576
1798
  function PinToggle({ pin, monitor, ui }) {
1577
- const [toast, setToast] = useState7(null);
1799
+ const [toast, setToast] = useState8(null);
1578
1800
  const dismiss = useCallback4(() => setToast(null), []);
1579
1801
  if (!monitor || !monitor.enabled) return null;
1580
1802
  const key = pinKey(pin);
@@ -1589,7 +1811,7 @@ function PinToggle({ pin, monitor, ui }) {
1589
1811
  }
1590
1812
  };
1591
1813
  const glyph = PIN_GLYPHS[ui.pinIcon];
1592
- return /* @__PURE__ */ jsxs7("div", { className: "ss-w-pin-wrap", children: [
1814
+ return /* @__PURE__ */ jsxs8("div", { className: "ss-w-pin-wrap", children: [
1593
1815
  /* @__PURE__ */ jsx12(
1594
1816
  "button",
1595
1817
  {
@@ -1619,17 +1841,17 @@ function PinToggle({ pin, monitor, ui }) {
1619
1841
  }
1620
1842
 
1621
1843
  // src/components/BettingInsightList.tsx
1622
- import { Fragment, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
1844
+ import { Fragment, jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
1623
1845
  function StatRows({ stats }) {
1624
- return /* @__PURE__ */ jsx13("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-row", children: [
1846
+ return /* @__PURE__ */ jsx13("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-row", children: [
1625
1847
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-lbl", children: s.label }),
1626
1848
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-row-num", children: s.value })
1627
1849
  ] }, `${s.label}:${s.value}`)) });
1628
1850
  }
1629
1851
  function ScopedStats({ scopes }) {
1630
- const [active, setActive] = useState8(0);
1852
+ const [active, setActive] = useState9(0);
1631
1853
  const current = scopes[active] ?? scopes[0] ?? { key: "", label: "", stats: [] };
1632
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-scoped", children: [
1854
+ return /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-scoped", children: [
1633
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)) }),
1634
1856
  /* @__PURE__ */ jsx13(StatRows, { stats: current.stats }, current.key)
1635
1857
  ] });
@@ -1638,15 +1860,15 @@ function hasStatsContent(it) {
1638
1860
  return !!it.scopes && it.scopes.length >= 2 || it.stats.length > 0;
1639
1861
  }
1640
1862
  function ReasonStrip({ it, ui }) {
1641
- const [open, setOpen] = useState8(false);
1863
+ const [open, setOpen] = useState9(false);
1642
1864
  const hasScopes = !!it.scopes && it.scopes.length >= 2;
1643
1865
  const hasStats = hasStatsContent(it);
1644
1866
  const hasText = !!it.text;
1645
1867
  if (!hasText && !hasStats) return null;
1646
1868
  const expandable = hasStats || (it.text?.length ?? 0) > 90;
1647
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-reason", children: [
1869
+ return /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-reason", children: [
1648
1870
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-chart", "aria-hidden": "true" }),
1649
- /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-reason-body", children: [
1871
+ /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-reason-body", children: [
1650
1872
  hasText ? /* @__PURE__ */ jsx13("p", { className: `ss-w-bi-text${open ? "" : " ss-w-bi-text-clamp"}`, children: it.text }) : null,
1651
1873
  open && hasStats ? hasScopes ? /* @__PURE__ */ jsx13(ScopedStats, { scopes: it.scopes }) : /* @__PURE__ */ jsx13(StatRows, { stats: it.stats }) : null
1652
1874
  ] }),
@@ -1665,7 +1887,7 @@ function ReasonStrip({ it, ui }) {
1665
1887
  }
1666
1888
  function CardFixture({ it }) {
1667
1889
  if (it.homeTeamName && it.awayTeamName) {
1668
- return /* @__PURE__ */ jsxs8(Fragment, { children: [
1890
+ return /* @__PURE__ */ jsxs9(Fragment, { children: [
1669
1891
  /* @__PURE__ */ jsx13(Crest2, { kind: "team", url: it.homeCrest, name: it.homeTeamName }),
1670
1892
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-team", children: it.homeTeamName }),
1671
1893
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
@@ -1675,7 +1897,7 @@ function CardFixture({ it }) {
1675
1897
  }
1676
1898
  if (it.fixture) return /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-fixture-txt", children: it.fixture });
1677
1899
  if (it.competition) {
1678
- return /* @__PURE__ */ jsxs8(Fragment, { children: [
1900
+ return /* @__PURE__ */ jsxs9(Fragment, { children: [
1679
1901
  /* @__PURE__ */ jsx13(Crest2, { kind: "comp", url: it.competitionCrest, name: it.competition }),
1680
1902
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-comp", children: it.competition })
1681
1903
  ] });
@@ -1690,16 +1912,16 @@ function InsightCard({ it, ui, slip, monitor }) {
1690
1912
  const compInMeta = leftIsFixture && !!it.competition;
1691
1913
  const showPin = !!monitor && it.pinEnabled;
1692
1914
  const showHeader = leftIsFixture || !!it.competition || live || !!kickoff || showPin;
1693
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-binsight", children: [
1694
- showHeader ? /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-header", children: [
1915
+ return /* @__PURE__ */ jsxs9("div", { className: "ss-w-binsight", children: [
1916
+ showHeader ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-header", children: [
1695
1917
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-header-left", children: /* @__PURE__ */ jsx13(CardFixture, { it }) }),
1696
- /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-header-right", children: [
1697
- live ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-live", children: [
1918
+ /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-header-right", children: [
1919
+ live ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-live", children: [
1698
1920
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
1699
1921
  ui?.liveLabel ?? "Live"
1700
1922
  ] }) : null,
1701
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,
1702
- kickoff ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-kick", children: [
1924
+ kickoff ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-kick", children: [
1703
1925
  kickoff.dayLabel,
1704
1926
  " ",
1705
1927
  kickoff.time
@@ -1707,15 +1929,15 @@ function InsightCard({ it, ui, slip, monitor }) {
1707
1929
  showPin && ui ? /* @__PURE__ */ jsx13(PinToggle, { ui, monitor, pin: { kind: "match", matchId: it.matchId } }) : null
1708
1930
  ] })
1709
1931
  ] }) : null,
1710
- /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-action-row", children: [
1711
- /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-pick", children: [
1932
+ /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-action-row", children: [
1933
+ /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-pick", children: [
1712
1934
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-market", children: it.market }),
1713
- it.selection ? /* @__PURE__ */ jsxs8(Fragment, { children: [
1935
+ it.selection ? /* @__PURE__ */ jsxs9(Fragment, { children: [
1714
1936
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-pick-dot", "aria-hidden": "true", children: "\xB7" }),
1715
1937
  /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-sel", children: it.selection })
1716
1938
  ] }) : null
1717
1939
  ] }),
1718
- it.odds ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-odds", children: [
1940
+ it.odds ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-odds", children: [
1719
1941
  /* @__PURE__ */ jsx13("b", { children: it.odds }),
1720
1942
  /* @__PURE__ */ jsx13(OddsMovementBadge, { previous: it.previousOdds, current: it.odds, direction: it.movementDirection, ui }),
1721
1943
  it.bookmaker ? /* @__PURE__ */ jsx13("span", { className: "ss-w-bi-book", children: it.bookmaker }) : null
@@ -1748,16 +1970,16 @@ function BettingInsightList({ insights, ui, slip, monitor }) {
1748
1970
  }
1749
1971
 
1750
1972
  // src/components/MarketOddsCardList.tsx
1751
- import { useState as useState9 } from "react";
1752
- import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
1973
+ import { useState as useState10 } from "react";
1974
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
1753
1975
  function OddsRow({ vm, row, ui, slip, inSlipIds }) {
1754
1976
  const selection = vm.addToSlipEnabled ? marketOddsRowToSlipSelection(vm, row, slip.conversationId) : null;
1755
1977
  const inSlip = !!inSlipIds && row.matchOddsId != null && !!inSlipIds[row.matchOddsId];
1756
- return /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-row", children: [
1978
+ return /* @__PURE__ */ jsxs10("div", { className: "ss-w-mo-row", children: [
1757
1979
  /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-sel", children: row.selection }),
1758
1980
  /* @__PURE__ */ jsx14(OddsMovementBadge, { previous: row.previousOdds, current: row.odds, direction: row.movementDirection, ui }),
1759
1981
  /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-price", children: row.odds }),
1760
- inSlip && ui ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-mon-inslip", children: [
1982
+ inSlip && ui ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-mon-inslip", children: [
1761
1983
  "\u2713 ",
1762
1984
  ui.inSlipLabel
1763
1985
  ] }) : null,
@@ -1765,24 +1987,24 @@ function OddsRow({ vm, row, ui, slip, inSlipIds }) {
1765
1987
  ] });
1766
1988
  }
1767
1989
  function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }) {
1768
- const [open, setOpen] = useState9(false);
1990
+ const [open, setOpen] = useState10(false);
1769
1991
  const kickoff = vm.kickoffUtc && ui?.bettingKickoff ? ui.bettingKickoff(vm.kickoffUtc) : void 0;
1770
1992
  const hasNamedTeams = !!vm.homeTeamName && !!vm.awayTeamName;
1771
1993
  const showPin = !!monitor && vm.pinEnabled;
1772
1994
  const showHeader = !!vm.competition || vm.isLive || !!kickoff || showPin;
1773
- return /* @__PURE__ */ jsxs9("div", { className: hideHeader ? "ss-w-mocard ss-w-mocard--bare" : "ss-w-mocard", children: [
1774
- !hideHeader && /* @__PURE__ */ jsxs9(Fragment2, { children: [
1775
- showHeader ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-header", children: [
1776
- /* @__PURE__ */ jsx14("span", { className: "ss-w-bi-header-left", children: vm.competition ? /* @__PURE__ */ jsxs9(Fragment2, { children: [
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: [
1777
1999
  /* @__PURE__ */ jsx14(Crest2, { kind: "comp", url: vm.competitionCrest, name: vm.competition }),
1778
2000
  /* @__PURE__ */ jsx14("span", { className: "ss-w-bi-comp", children: vm.competition })
1779
2001
  ] }) : null }),
1780
- /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-header-right", children: [
1781
- vm.isLive ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-live", children: [
2002
+ /* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-header-right", children: [
2003
+ vm.isLive ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-live", children: [
1782
2004
  /* @__PURE__ */ jsx14("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
1783
2005
  ui?.liveLabel ?? "Live"
1784
2006
  ] }) : null,
1785
- kickoff ? /* @__PURE__ */ jsxs9("span", { className: "ss-w-bi-kick", children: [
2007
+ kickoff ? /* @__PURE__ */ jsxs10("span", { className: "ss-w-bi-kick", children: [
1786
2008
  kickoff.dayLabel,
1787
2009
  " ",
1788
2010
  kickoff.time
@@ -1797,8 +2019,8 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
1797
2019
  ) : null
1798
2020
  ] })
1799
2021
  ] }) : null,
1800
- hasNamedTeams || vm.fixture || vm.market ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-sub", children: [
1801
- hasNamedTeams ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-bi-fixture", children: [
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: [
1802
2024
  /* @__PURE__ */ jsx14(Crest2, { kind: "team", url: vm.homeCrest, name: vm.homeTeamName }),
1803
2025
  /* @__PURE__ */ jsx14("span", { className: "ss-w-bi-team", children: vm.homeTeamName }),
1804
2026
  /* @__PURE__ */ jsx14("span", { className: "ss-w-bi-vs", "aria-hidden": "true", children: "vs" }),
@@ -1808,11 +2030,11 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
1808
2030
  vm.market ? /* @__PURE__ */ jsx14("span", { className: "ss-w-mo-market", children: vm.market }) : null
1809
2031
  ] }) : null
1810
2032
  ] }),
1811
- /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-rows", children: [
2033
+ /* @__PURE__ */ jsxs10("div", { className: "ss-w-mo-rows", children: [
1812
2034
  vm.mainRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)),
1813
2035
  open ? vm.moreRows.map((row) => /* @__PURE__ */ jsx14(OddsRow, { vm, row, ui, slip, inSlipIds }, row.key)) : null
1814
2036
  ] }),
1815
- vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs9("button", { type: "button", className: "ss-w-mo-more", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
2037
+ vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs10("button", { type: "button", className: "ss-w-mo-more", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
1816
2038
  /* @__PURE__ */ jsx14("span", { children: open ? ui?.hideLines ?? "Hide lines" : `${ui?.moreLines ?? "More lines"} (${vm.moreRows.length})` }),
1817
2039
  /* @__PURE__ */ jsx14("span", { className: `ss-w-mo-more-chev${open ? " ss-w-mo-more-chev-up" : ""}`, "aria-hidden": "true" })
1818
2040
  ] }) : null,
@@ -1826,7 +2048,7 @@ function MarketOddsCardList({ cards, ui, slip, monitor, inSlipIds, hideHeader, p
1826
2048
  }
1827
2049
 
1828
2050
  // src/components/OddsMovementCard.tsx
1829
- import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
2051
+ import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
1830
2052
  function directionWord(vm, ui) {
1831
2053
  if (vm.direction === "shortened") return ui?.oddsShortened ?? "shortened";
1832
2054
  if (vm.direction === "drifted") return ui?.oddsDrifted ?? "drifted";
@@ -1837,8 +2059,8 @@ function OddsMovementCard({ vm, ui, monitor }) {
1837
2059
  const drift = word ? `, ${word}` : "";
1838
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}.`;
1839
2061
  const showPin = !!monitor && vm.pinEnabled;
1840
- return /* @__PURE__ */ jsxs10("div", { className: "ss-w-omcard", children: [
1841
- /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-head", children: [
2062
+ return /* @__PURE__ */ jsxs11("div", { className: "ss-w-omcard", children: [
2063
+ /* @__PURE__ */ jsxs11("div", { className: "ss-w-om-head", children: [
1842
2064
  /* @__PURE__ */ jsx15("span", { className: "ss-w-om-market", children: vm.market }),
1843
2065
  /* @__PURE__ */ jsx15("span", { className: "ss-w-om-tag", children: ui?.priceMovement ?? "Price movement" }),
1844
2066
  showPin && ui ? /* @__PURE__ */ jsx15(
@@ -1858,13 +2080,13 @@ function OddsMovementCard({ vm, ui, monitor }) {
1858
2080
  }
1859
2081
  ) : null
1860
2082
  ] }),
1861
- vm.fixture ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-fixture", children: [
2083
+ vm.fixture ? /* @__PURE__ */ jsxs11("div", { className: "ss-w-om-fixture", children: [
1862
2084
  /* @__PURE__ */ jsx15("span", { children: vm.fixture }),
1863
2085
  vm.competition ? /* @__PURE__ */ jsx15("span", { className: "ss-w-om-comp", children: vm.competition }) : null
1864
2086
  ] }) : null,
1865
2087
  /* @__PURE__ */ jsx15("div", { className: "ss-w-om-sel", children: vm.selection }),
1866
2088
  /* @__PURE__ */ jsx15(OddsMovementBadge, { previous: vm.opening, current: vm.current, direction: vm.direction, ui }),
1867
- vm.geometry === null ? /* @__PURE__ */ jsx15("div", { className: "ss-w-om-empty", children: vm.observationCount === 1 ? ui?.singlePricePoint ?? "Only one price recorded so far for this selection." : ui?.notEnoughHistory ?? "No price history recorded yet for this selection." }) : /* @__PURE__ */ jsxs10(
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(
1868
2090
  "svg",
1869
2091
  {
1870
2092
  className: "ss-w-om-chart",
@@ -1873,26 +2095,26 @@ function OddsMovementCard({ vm, ui, monitor }) {
1873
2095
  role: "img",
1874
2096
  "aria-label": aria,
1875
2097
  children: [
1876
- vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs10("g", { children: [
2098
+ vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs11("g", { children: [
1877
2099
  /* @__PURE__ */ jsx15("line", { className: "ss-w-om-grid", x1: 40, y1: g.y, x2: CHART_VIEW_W - 8, y2: g.y }),
1878
2100
  /* @__PURE__ */ jsx15("text", { className: "ss-w-om-ylab", x: 34, y: g.y + 3, textAnchor: "end", children: g.price.toFixed(2) })
1879
2101
  ] }, g.price)),
1880
2102
  /* @__PURE__ */ jsx15("path", { className: "ss-w-om-line", d: vm.geometry.path, fill: "none" }),
1881
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)),
1882
- ui?.chartTimeLabel ? /* @__PURE__ */ jsxs10(Fragment3, { children: [
2104
+ ui?.chartTimeLabel ? /* @__PURE__ */ jsxs11(Fragment3, { children: [
1883
2105
  /* @__PURE__ */ jsx15("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, textAnchor: "start", children: ui.chartTimeLabel(vm.geometry.startMs) }),
1884
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) })
1885
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` })
1886
2108
  ]
1887
2109
  }
1888
2110
  ),
1889
- /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-foot", children: [
1890
- /* @__PURE__ */ jsxs10("span", { children: [
2111
+ /* @__PURE__ */ jsxs11("div", { className: "ss-w-om-foot", children: [
2112
+ /* @__PURE__ */ jsxs11("span", { children: [
1891
2113
  ui?.openingLabel ?? "Opening",
1892
2114
  " ",
1893
2115
  /* @__PURE__ */ jsx15("b", { children: vm.opening })
1894
2116
  ] }),
1895
- /* @__PURE__ */ jsxs10("span", { children: [
2117
+ /* @__PURE__ */ jsxs11("span", { children: [
1896
2118
  ui?.currentLabel ?? "Current",
1897
2119
  " ",
1898
2120
  /* @__PURE__ */ jsx15("b", { children: vm.current })
@@ -1910,12 +2132,12 @@ function OddsMovementCardList({ cards, ui, monitor }) {
1910
2132
  }
1911
2133
 
1912
2134
  // src/components/ActionButtons.tsx
1913
- import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
2135
+ import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
1914
2136
  function ActionButtons({ actions, loading, disabled, onAct }) {
1915
2137
  if (actions.length === 0 && !loading) return null;
1916
- return /* @__PURE__ */ jsxs11("div", { className: "ss-w-actions", children: [
2138
+ return /* @__PURE__ */ jsxs12("div", { className: "ss-w-actions", children: [
1917
2139
  actions.map((a, i) => /* @__PURE__ */ jsx16("button", { type: "button", className: "ss-w-abtn", disabled, onClick: () => onAct(a), children: a.label }, `${a.label}-${i}`)),
1918
- actions.length === 0 && loading ? /* @__PURE__ */ jsxs11(Fragment4, { children: [
2140
+ actions.length === 0 && loading ? /* @__PURE__ */ jsxs12(Fragment4, { children: [
1919
2141
  /* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" }),
1920
2142
  /* @__PURE__ */ jsx16("span", { className: "ss-w-abtn-shimmer" })
1921
2143
  ] }) : null
@@ -1923,22 +2145,22 @@ function ActionButtons({ actions, loading, disabled, onAct }) {
1923
2145
  }
1924
2146
 
1925
2147
  // src/components/dashboard/DashboardTile.tsx
1926
- import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
2148
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
1927
2149
  var MAX_CRESTS = 3;
1928
2150
  function DashboardTile({ tile, onTap }) {
1929
2151
  const spanClass = tile.span === "full" ? "ss-w-dash-tile--full" : "ss-w-dash-tile--half";
1930
2152
  const crests = (tile.imageUrls ?? []).slice(0, MAX_CRESTS);
1931
2153
  const hasMeta = Boolean(tile.badgeText) || crests.length > 0;
1932
- return /* @__PURE__ */ jsxs12("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
2154
+ return /* @__PURE__ */ jsxs13("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
1933
2155
  /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-icon", children: /* @__PURE__ */ jsx17(DashboardIcon, { name: tile.icon }) }),
1934
- /* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-body", children: [
2156
+ /* @__PURE__ */ jsxs13("span", { className: "ss-w-dash-tile-body", children: [
1935
2157
  /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-title", children: tile.title }),
1936
2158
  tile.subtitle ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle }) : null,
1937
2159
  hasMeta ? (
1938
2160
  // Badge + crests sit on their own row, below the title, instead of sharing the
1939
2161
  // icon/chevron row -- at the half-span tile's ~180px width a nowrap badge alone
1940
2162
  // (~70px) left the title column at ~22px and forced character-by-character wrapping.
1941
- /* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-meta", children: [
2163
+ /* @__PURE__ */ jsxs13("span", { className: "ss-w-dash-tile-meta", children: [
1942
2164
  tile.badgeText ? /* @__PURE__ */ jsx17("span", { className: "ss-w-dash-tile-badge", children: tile.badgeText }) : null,
1943
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
1944
2166
  ] })
@@ -1949,7 +2171,7 @@ function DashboardTile({ tile, onTap }) {
1949
2171
  }
1950
2172
 
1951
2173
  // src/components/dashboard/GreetingDashboard.tsx
1952
- import { jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
2174
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
1953
2175
  var LAYOUT_CLASSES = {
1954
2176
  market: "ss-w-dash--market",
1955
2177
  goal: "ss-w-dash--goal",
@@ -1959,8 +2181,8 @@ function layoutClass(layout) {
1959
2181
  return Object.prototype.hasOwnProperty.call(LAYOUT_CLASSES, layout) ? LAYOUT_CLASSES[layout] : LAYOUT_CLASSES.goal;
1960
2182
  }
1961
2183
  function GreetingDashboard({ dashboard, onTap }) {
1962
- return /* @__PURE__ */ jsxs13("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
1963
- /* @__PURE__ */ jsxs13("div", { className: "ss-w-dash-head", children: [
2184
+ return /* @__PURE__ */ jsxs14("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
2185
+ /* @__PURE__ */ jsxs14("div", { className: "ss-w-dash-head", children: [
1964
2186
  /* @__PURE__ */ jsx18("span", { className: "ss-w-dash-title", children: dashboard.title }),
1965
2187
  dashboard.subtitle ? /* @__PURE__ */ jsx18("span", { className: "ss-w-dash-subtitle", children: dashboard.subtitle }) : null
1966
2188
  ] }),
@@ -1970,7 +2192,7 @@ function GreetingDashboard({ dashboard, onTap }) {
1970
2192
  }
1971
2193
 
1972
2194
  // src/components/dashboard/FixtureCard.tsx
1973
- import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
2195
+ import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
1974
2196
  function teamFormResultClass(result) {
1975
2197
  if (result === "W") return "ss-w-fandash-teamform-cell--win";
1976
2198
  if (result === "L") return "ss-w-fandash-teamform-cell--loss";
@@ -1980,7 +2202,7 @@ function TeamFormCell({ m, subjectCrestUrl, subjectName }) {
1980
2202
  const subjectCrest = /* @__PURE__ */ jsx19(Crest2, { url: subjectCrestUrl ?? void 0, name: subjectName, kind: "team" });
1981
2203
  const opponentCrest = /* @__PURE__ */ jsx19(Crest2, { url: m.opponentCrestUrl ?? void 0, kind: "team" });
1982
2204
  const score = m.teamIsHome ? `${m.teamScore} - ${m.oppScore}` : `${m.oppScore} - ${m.teamScore}`;
1983
- return /* @__PURE__ */ jsxs14("div", { className: `ss-w-fandash-teamform-cell ${teamFormResultClass(m.result)}`, children: [
2205
+ return /* @__PURE__ */ jsxs15("div", { className: `ss-w-fandash-teamform-cell ${teamFormResultClass(m.result)}`, children: [
1984
2206
  m.teamIsHome ? subjectCrest : opponentCrest,
1985
2207
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-score", children: score }),
1986
2208
  m.teamIsHome ? opponentCrest : subjectCrest
@@ -1996,59 +2218,59 @@ function teamFormRows(data) {
1996
2218
  function FixtureCard({ card }) {
1997
2219
  const { data } = card;
1998
2220
  const h2h = data.h2H;
1999
- return /* @__PURE__ */ jsxs14(Fragment5, { children: [
2000
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-card ss-w-fandash-fixture", children: [
2001
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-eyebrow", children: [
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: [
2002
2224
  card.title,
2003
2225
  " \xB7 ",
2004
2226
  data.competition
2005
2227
  ] }),
2006
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-fixture-teams", children: [
2007
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-team", children: [
2228
+ /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-fixture-teams", children: [
2229
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-team", children: [
2008
2230
  /* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
2009
2231
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.homeName })
2010
2232
  ] }),
2011
2233
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-vs", children: "v" }),
2012
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-team ss-w-fandash-fixture-team--away", children: [
2234
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-team ss-w-fandash-fixture-team--away", children: [
2013
2235
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-name", children: data.awayName }),
2014
2236
  /* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" })
2015
2237
  ] })
2016
2238
  ] }),
2017
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-fixture-meta", children: [
2239
+ /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-fixture-meta", children: [
2018
2240
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-fixture-kickoff", children: data.kickoffLabel }),
2019
- data.venue ? /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-fixture-venue", children: [
2241
+ data.venue ? /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-fixture-venue", children: [
2020
2242
  " \xB7 ",
2021
2243
  data.venue
2022
2244
  ] }) : null
2023
2245
  ] })
2024
2246
  ] }),
2025
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-card ss-w-fandash-lastfive", children: [
2247
+ /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-card ss-w-fandash-lastfive", children: [
2026
2248
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: data.formLabel }),
2027
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-teamform-head", children: [
2028
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-teamform-head-team", children: [
2249
+ /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-teamform-head", children: [
2250
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-teamform-head-team", children: [
2029
2251
  /* @__PURE__ */ jsx19(Crest2, { url: data.homeCrestUrl ?? void 0, name: data.homeName, kind: "team" }),
2030
2252
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.homeName })
2031
2253
  ] }),
2032
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-teamform-head-team", children: [
2254
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-teamform-head-team", children: [
2033
2255
  /* @__PURE__ */ jsx19(Crest2, { url: data.awayCrestUrl ?? void 0, name: data.awayName, kind: "team" }),
2034
2256
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-teamform-head-name", children: data.awayName })
2035
2257
  ] })
2036
2258
  ] }),
2037
2259
  /* @__PURE__ */ jsx19("div", { className: "ss-w-fandash-teamform-rows", children: teamFormRows(data) })
2038
2260
  ] }),
2039
- h2h || data.fact ? /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-card ss-w-fandash-h2h", children: [
2040
- h2h ? /* @__PURE__ */ jsxs14(Fragment5, { children: [
2261
+ h2h || data.fact ? /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-card ss-w-fandash-h2h", children: [
2262
+ h2h ? /* @__PURE__ */ jsxs15(Fragment5, { children: [
2041
2263
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-eyebrow", children: h2h.label }),
2042
- /* @__PURE__ */ jsxs14("div", { className: "ss-w-fandash-split", children: [
2043
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
2264
+ /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-split", children: [
2265
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
2044
2266
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.wins }),
2045
2267
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.homeWinsLabel })
2046
2268
  ] }),
2047
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
2269
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
2048
2270
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.draws }),
2049
2271
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.drawsLabel })
2050
2272
  ] }),
2051
- /* @__PURE__ */ jsxs14("span", { className: "ss-w-fandash-split-cell", children: [
2273
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-split-cell", children: [
2052
2274
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-value", children: h2h.losses }),
2053
2275
  /* @__PURE__ */ jsx19("span", { className: "ss-w-fandash-split-label", children: h2h.awayWinsLabel })
2054
2276
  ] })
@@ -2060,8 +2282,8 @@ function FixtureCard({ card }) {
2060
2282
  }
2061
2283
 
2062
2284
  // src/components/dashboard/CountdownCard.tsx
2063
- import { Fragment as Fragment6, useEffect as useEffect6, useState as useState10 } from "react";
2064
- import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
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";
2065
2287
  var DAY_MS = 864e5;
2066
2288
  function remainingSegments(kickoffUnix, nowMs, withSeconds) {
2067
2289
  const totalSeconds = Math.floor((kickoffUnix * 1e3 - nowMs) / 1e3);
@@ -2079,22 +2301,22 @@ function remainingSegments(kickoffUnix, nowMs, withSeconds) {
2079
2301
  function CountdownCard({ card }) {
2080
2302
  const { data } = card;
2081
2303
  const unitLabel = { d: data.daysUnit, h: data.hoursUnit, m: data.minutesUnit, s: data.secondsUnit };
2082
- const [nowMs, setNowMs] = useState10(() => Date.now());
2083
- const [reduced] = useState10(
2304
+ const [nowMs, setNowMs] = useState11(() => Date.now());
2305
+ const [reduced] = useState11(
2084
2306
  () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
2085
2307
  );
2086
2308
  const withinDay = data.kickoffUnix * 1e3 - nowMs < DAY_MS;
2087
- useEffect6(() => {
2309
+ useEffect7(() => {
2088
2310
  if (reduced) return;
2089
2311
  const id = window.setInterval(() => setNowMs(Date.now()), withinDay ? 1e3 : 6e4);
2090
2312
  return () => window.clearInterval(id);
2091
2313
  }, [reduced, withinDay]);
2092
2314
  const segments = remainingSegments(data.kickoffUnix, nowMs, withinDay && !reduced);
2093
- return /* @__PURE__ */ jsx20("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */ jsxs15("div", { className: "ss-w-fandash-countdown-top", children: [
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: [
2094
2316
  /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-eyebrow", children: card.title ?? "Kick-off in" }),
2095
- segments ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs15(Fragment6, { children: [
2317
+ segments ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ jsxs16(Fragment6, { children: [
2096
2318
  i > 0 ? /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-colon", children: ":" }) : null,
2097
- /* @__PURE__ */ jsxs15("span", { className: "ss-w-fandash-countdown-seg", children: [
2319
+ /* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-countdown-seg", children: [
2098
2320
  /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-value", children: s.value }),
2099
2321
  /* @__PURE__ */ jsx20("span", { className: "ss-w-fandash-countdown-unit", children: unitLabel[s.unit] })
2100
2322
  ] })
@@ -2103,11 +2325,11 @@ function CountdownCard({ card }) {
2103
2325
  }
2104
2326
 
2105
2327
  // src/components/dashboard/InjuriesCard.tsx
2106
- import { useState as useState11 } from "react";
2107
- import { jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
2328
+ import { useState as useState12 } from "react";
2329
+ import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
2108
2330
  var SHOWN = 3;
2109
2331
  function ColHead({ name, crestUrl }) {
2110
- return /* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-injuries-col-head", children: [
2332
+ return /* @__PURE__ */ jsxs17("span", { className: "ss-w-fandash-injuries-col-head", children: [
2111
2333
  /* @__PURE__ */ jsx21(Crest2, { url: crestUrl ?? void 0, name, kind: "team" }),
2112
2334
  /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-col-head-name", children: name })
2113
2335
  ] });
@@ -2115,9 +2337,9 @@ function ColHead({ name, crestUrl }) {
2115
2337
  function InjuryList({ rows, emptyLabel, limit }) {
2116
2338
  if (rows.length === 0) return /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injuries-empty", children: emptyLabel });
2117
2339
  const shown = limit === void 0 ? rows : rows.slice(0, limit);
2118
- return /* @__PURE__ */ jsx21("ul", { className: "ss-w-fandash-injury-list", children: shown.map((r, i) => /* @__PURE__ */ jsxs16("li", { className: "ss-w-fandash-injury-row", children: [
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: [
2119
2341
  /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-name", children: r.playerName }),
2120
- /* @__PURE__ */ jsxs16("span", { className: "ss-w-fandash-injury-meta", children: [
2342
+ /* @__PURE__ */ jsxs17("span", { className: "ss-w-fandash-injury-meta", children: [
2121
2343
  /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-status", children: r.status }),
2122
2344
  r.injuryType ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-type", children: r.injuryType }) : null,
2123
2345
  r.expectedReturnLabel ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-injury-return", children: r.expectedReturnLabel }) : null
@@ -2126,20 +2348,20 @@ function InjuryList({ rows, emptyLabel, limit }) {
2126
2348
  }
2127
2349
  function InjuriesCard({ card, ui }) {
2128
2350
  const { data } = card;
2129
- const [expanded, setExpanded] = useState11(false);
2351
+ const [expanded, setExpanded] = useState12(false);
2130
2352
  const hidden = Math.max(0, data.ours.length - SHOWN) + Math.max(0, data.theirs.length - SHOWN);
2131
2353
  const limit = expanded ? void 0 : SHOWN;
2132
2354
  const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
2133
2355
  const showLess = ui?.showLess ?? "Show less";
2134
- return /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-card ss-w-fandash-injuries", children: [
2356
+ return /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-card ss-w-fandash-injuries", children: [
2135
2357
  card.title ? /* @__PURE__ */ jsx21("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2136
- /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-cols", children: [
2137
- /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-col", children: [
2358
+ /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-cols", children: [
2359
+ /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-col", children: [
2138
2360
  /* @__PURE__ */ jsx21(ColHead, { name: data.oursName, crestUrl: data.oursCrestUrl }),
2139
2361
  /* @__PURE__ */ jsx21(InjuryList, { rows: data.ours, emptyLabel: data.emptyLabel, limit })
2140
2362
  ] }),
2141
2363
  /* @__PURE__ */ jsx21("div", { className: "ss-w-fandash-injuries-divider" }),
2142
- /* @__PURE__ */ jsxs16("div", { className: "ss-w-fandash-injuries-col", children: [
2364
+ /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-injuries-col", children: [
2143
2365
  /* @__PURE__ */ jsx21(ColHead, { name: data.theirsName, crestUrl: data.theirsCrestUrl }),
2144
2366
  /* @__PURE__ */ jsx21(InjuryList, { rows: data.theirs, emptyLabel: data.emptyLabel, limit })
2145
2367
  ] })
@@ -2158,29 +2380,29 @@ function InjuriesCard({ card, ui }) {
2158
2380
  }
2159
2381
 
2160
2382
  // src/components/dashboard/ReasonToBetCard.tsx
2161
- import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
2383
+ import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
2162
2384
  function ReasonToBetCard({ card }) {
2163
- return /* @__PURE__ */ jsxs17("div", { className: "ss-w-fandash-card ss-w-fandash-reasons", children: [
2385
+ return /* @__PURE__ */ jsxs18("div", { className: "ss-w-fandash-card ss-w-fandash-reasons", children: [
2164
2386
  card.title ? /* @__PURE__ */ jsx22("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2165
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}`)) })
2166
2388
  ] });
2167
2389
  }
2168
2390
 
2169
2391
  // src/components/dashboard/WhereToWatchCard.tsx
2170
- import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
2392
+ import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
2171
2393
  function WhereToWatchCard({ card }) {
2172
- return /* @__PURE__ */ jsxs18("div", { className: "ss-w-fandash-card ss-w-fandash-watch", children: [
2394
+ return /* @__PURE__ */ jsxs19("div", { className: "ss-w-fandash-card ss-w-fandash-watch", children: [
2173
2395
  card.title ? /* @__PURE__ */ jsx23("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2174
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}`)) })
2175
2397
  ] });
2176
2398
  }
2177
2399
 
2178
2400
  // src/components/dashboard/CongestedWeekCard.tsx
2179
- import { jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
2401
+ import { jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
2180
2402
  function CongestedWeekCard({ card, onTap }) {
2181
- return /* @__PURE__ */ jsxs19("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-congested", onClick: () => onTap(card), children: [
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: [
2182
2404
  card.title ? /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2183
- /* @__PURE__ */ jsx24("div", { className: "ss-w-fandash-congested-grid", children: card.data.entries.map((entry, i) => /* @__PURE__ */ jsxs19("span", { className: "ss-w-fandash-congested-cell", children: [
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: [
2184
2406
  /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-day", children: entry.dayLabel }),
2185
2407
  /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-opponent", children: entry.opponent }),
2186
2408
  /* @__PURE__ */ jsx24("span", { className: "ss-w-fandash-congested-comp", children: entry.competition }),
@@ -2191,10 +2413,10 @@ function CongestedWeekCard({ card, onTap }) {
2191
2413
  }
2192
2414
 
2193
2415
  // src/components/dashboard/TransfersCard.tsx
2194
- import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
2416
+ import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
2195
2417
  function TransferList({ rows }) {
2196
2418
  if (rows.length === 0) return /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-empty", children: "None" });
2197
- return /* @__PURE__ */ jsx25("ul", { className: "ss-w-fandash-transfer-list", children: rows.map((r, i) => /* @__PURE__ */ jsxs20("li", { className: "ss-w-fandash-transfer-row", children: [
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: [
2198
2420
  /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-name", children: r.playerName }),
2199
2421
  /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-club", children: r.otherClub }),
2200
2422
  r.type ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfer-type", children: r.type }) : null
@@ -2202,14 +2424,14 @@ function TransferList({ rows }) {
2202
2424
  }
2203
2425
  function TransfersCard({ card }) {
2204
2426
  const { data } = card;
2205
- return /* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-card ss-w-fandash-transfers", children: [
2427
+ return /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-transfers", children: [
2206
2428
  card.title ? /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2207
- /* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-cols", children: [
2208
- /* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-col", children: [
2429
+ /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-cols", children: [
2430
+ /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-col", children: [
2209
2431
  /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "In" }),
2210
2432
  /* @__PURE__ */ jsx25(TransferList, { rows: data.in })
2211
2433
  ] }),
2212
- /* @__PURE__ */ jsxs20("div", { className: "ss-w-fandash-transfers-col", children: [
2434
+ /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-transfers-col", children: [
2213
2435
  /* @__PURE__ */ jsx25("span", { className: "ss-w-fandash-transfers-col-head", children: "Out" }),
2214
2436
  /* @__PURE__ */ jsx25(TransferList, { rows: data.out })
2215
2437
  ] })
@@ -2218,11 +2440,11 @@ function TransfersCard({ card }) {
2218
2440
  }
2219
2441
 
2220
2442
  // src/components/dashboard/LinksCard.tsx
2221
- import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
2443
+ import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
2222
2444
  function LinksCard({ card }) {
2223
- return /* @__PURE__ */ jsxs21("div", { className: "ss-w-fandash-card ss-w-fandash-links", children: [
2445
+ return /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-card ss-w-fandash-links", children: [
2224
2446
  card.title ? /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2225
- /* @__PURE__ */ jsx26("div", { className: "ss-w-fandash-link-grid", children: card.data.links.map((link, i) => /* @__PURE__ */ jsxs21("a", { className: "ss-w-fandash-link-tile", href: link.url, target: "_blank", rel: "noopener noreferrer", children: [
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: [
2226
2448
  /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-label", children: link.label }),
2227
2449
  /* @__PURE__ */ jsx26("span", { className: "ss-w-fandash-link-chevron", children: /* @__PURE__ */ jsx26(ChevronIcon, {}) })
2228
2450
  ] }, `${link.url}-${i}`)) })
@@ -2230,8 +2452,8 @@ function LinksCard({ card }) {
2230
2452
  }
2231
2453
 
2232
2454
  // src/components/dashboard/PostMatchResultCard.tsx
2233
- import { useState as useState12 } from "react";
2234
- import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
2455
+ import { useState as useState13 } from "react";
2456
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
2235
2457
  function initials3(name) {
2236
2458
  return name.trim().slice(0, 3).toUpperCase();
2237
2459
  }
@@ -2240,7 +2462,7 @@ function PostMatchCrest({
2240
2462
  name,
2241
2463
  side
2242
2464
  }) {
2243
- const [failed, setFailed] = useState12(false);
2465
+ const [failed, setFailed] = useState13(false);
2244
2466
  const cls = `ss-w-fandash-postmatch-crest ss-w-fandash-postmatch-crest--${side}`;
2245
2467
  if (url && !failed) {
2246
2468
  return /* @__PURE__ */ jsx27("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -2251,17 +2473,17 @@ function PostMatchResultCard({ card }) {
2251
2473
  const { data } = card;
2252
2474
  const homeWon = data.homeScore >= data.awayScore;
2253
2475
  const awayWon = data.awayScore >= data.homeScore;
2254
- return /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-result", children: [
2255
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-top", children: [
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: [
2256
2478
  card.title ? /* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-pill", children: card.title }) : null,
2257
2479
  /* @__PURE__ */ jsx27("span", { className: `ss-w-fandash-postmatch-tag ss-w-fandash-postmatch-tag--${data.outcome}`, children: data.resultLabel })
2258
2480
  ] }),
2259
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-main", children: [
2260
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--home", children: [
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: [
2261
2483
  /* @__PURE__ */ jsx27(PostMatchCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
2262
2484
  /* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.homeName })
2263
2485
  ] }),
2264
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-score-main", children: [
2486
+ /* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-score-main", children: [
2265
2487
  /* @__PURE__ */ jsx27(
2266
2488
  "span",
2267
2489
  {
@@ -2278,12 +2500,12 @@ function PostMatchResultCard({ card }) {
2278
2500
  }
2279
2501
  )
2280
2502
  ] }),
2281
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--away", children: [
2503
+ /* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-side ss-w-fandash-postmatch-side--away", children: [
2282
2504
  /* @__PURE__ */ jsx27(PostMatchCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
2283
2505
  /* @__PURE__ */ jsx27("span", { className: "ss-w-fandash-postmatch-team-name", children: data.awayName })
2284
2506
  ] })
2285
2507
  ] }),
2286
- /* @__PURE__ */ jsxs22("div", { className: "ss-w-fandash-postmatch-meta", children: [
2508
+ /* @__PURE__ */ jsxs23("div", { className: "ss-w-fandash-postmatch-meta", children: [
2287
2509
  data.kickoffLabel,
2288
2510
  data.competition ? ` \xB7 ${data.competition}` : ""
2289
2511
  ] })
@@ -2291,11 +2513,11 @@ function PostMatchResultCard({ card }) {
2291
2513
  }
2292
2514
 
2293
2515
  // src/components/dashboard/PostMatchGoalsCard.tsx
2294
- import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
2516
+ import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
2295
2517
  function PostMatchGoalsCard({ card, onTap }) {
2296
- return /* @__PURE__ */ jsxs23("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-goals", onClick: () => onTap(card), children: [
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: [
2297
2519
  card.title ? /* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2298
- /* @__PURE__ */ jsx28("ul", { className: "ss-w-fandash-postmatch-goal-list", children: card.data.goals.map((g, i) => /* @__PURE__ */ jsxs23("li", { className: g.scoredByClub ? "ss-w-fandash-postmatch-goal ss-w-fandash-postmatch-goal--club" : "ss-w-fandash-postmatch-goal", children: [
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: [
2299
2521
  /* @__PURE__ */ jsx28("span", { className: "ss-w-fandash-postmatch-goal-ball" }),
2300
2522
  /* @__PURE__ */ jsx28("span", { children: g.text })
2301
2523
  ] }, `${g.text}-${i}`)) }),
@@ -2304,7 +2526,7 @@ function PostMatchGoalsCard({ card, onTap }) {
2304
2526
  }
2305
2527
 
2306
2528
  // src/components/dashboard/PostMatchStatsCard.tsx
2307
- import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
2529
+ import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
2308
2530
  function splitWidths(homeNum, awayNum) {
2309
2531
  const total = homeNum + awayNum;
2310
2532
  if (total <= 0) return { home: "50%", away: "50%" };
@@ -2313,7 +2535,7 @@ function splitWidths(homeNum, awayNum) {
2313
2535
  }
2314
2536
  function PostMatchStatsCard({ card, onTap }) {
2315
2537
  const { data } = card;
2316
- return /* @__PURE__ */ jsxs24("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-stats", onClick: () => onTap(card), children: [
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: [
2317
2539
  card.title ? /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2318
2540
  /* @__PURE__ */ jsx29("div", { className: "ss-w-fandash-postmatch-stat-rows", children: data.rows.map((r, i) => {
2319
2541
  const leftValue = data.clubIsHome ? r.clubValue : r.oppValue;
@@ -2321,24 +2543,24 @@ function PostMatchStatsCard({ card, onTap }) {
2321
2543
  const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
2322
2544
  const awayNum = data.clubIsHome ? r.oppNum : r.clubNum;
2323
2545
  const { home, away } = splitWidths(homeNum, awayNum);
2324
- return /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat", children: [
2325
- /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat-row", children: [
2546
+ return /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat", children: [
2547
+ /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat-row", children: [
2326
2548
  /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--home", children: leftValue }),
2327
2549
  /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-label", children: r.label }),
2328
2550
  /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-value ss-w-fandash-postmatch-stat-value--away", children: rightValue })
2329
2551
  ] }),
2330
- /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-stat-bar", children: [
2552
+ /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-stat-bar", children: [
2331
2553
  /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-home", style: { width: home } }),
2332
2554
  /* @__PURE__ */ jsx29("span", { className: "ss-w-fandash-postmatch-stat-bar-away", style: { width: away } })
2333
2555
  ] })
2334
2556
  ] }, `${r.label}-${i}`);
2335
2557
  }) }),
2336
- data.rows.length > 0 ? /* @__PURE__ */ jsxs24("div", { className: "ss-w-fandash-postmatch-legend", children: [
2337
- /* @__PURE__ */ jsxs24("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
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: [
2338
2560
  /* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--home" }),
2339
2561
  data.homeName
2340
2562
  ] }),
2341
- /* @__PURE__ */ jsxs24("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
2563
+ /* @__PURE__ */ jsxs25("span", { className: "ss-w-fandash-postmatch-legend-item", children: [
2342
2564
  /* @__PURE__ */ jsx29("i", { className: "ss-w-fandash-postmatch-legend-swatch ss-w-fandash-postmatch-legend-swatch--away" }),
2343
2565
  data.awayName
2344
2566
  ] })
@@ -2348,7 +2570,7 @@ function PostMatchStatsCard({ card, onTap }) {
2348
2570
  }
2349
2571
 
2350
2572
  // src/components/dashboard/PostMatchTopPerformerCard.tsx
2351
- import { jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
2573
+ import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
2352
2574
  function initials4(playerName) {
2353
2575
  const words = playerName.trim().split(/\s+/).filter(Boolean);
2354
2576
  if (words.length === 0) return "?";
@@ -2358,9 +2580,9 @@ function initials4(playerName) {
2358
2580
  }
2359
2581
  function PostMatchTopPerformerCard({ card, onTap }) {
2360
2582
  const { data } = card;
2361
- return /* @__PURE__ */ jsxs25("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-postmatch-performer", onClick: () => onTap(card), children: [
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: [
2362
2584
  card.title ? /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2363
- /* @__PURE__ */ jsxs25("div", { className: "ss-w-fandash-postmatch-perf-row", children: [
2585
+ /* @__PURE__ */ jsxs26("div", { className: "ss-w-fandash-postmatch-perf-row", children: [
2364
2586
  /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-avatar", "aria-hidden": "true", children: initials4(data.playerName) }),
2365
2587
  /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-name", children: data.playerName }),
2366
2588
  /* @__PURE__ */ jsx30("span", { className: "ss-w-fandash-postmatch-perf-rating", children: data.ratingLabel })
@@ -2370,22 +2592,22 @@ function PostMatchTopPerformerCard({ card, onTap }) {
2370
2592
  }
2371
2593
 
2372
2594
  // src/components/dashboard/PostMatchNextCard.tsx
2373
- import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
2595
+ import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
2374
2596
  function PostMatchNextCard({ card }) {
2375
2597
  const { data } = card;
2376
- return /* @__PURE__ */ jsxs26("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-next", children: [
2598
+ return /* @__PURE__ */ jsxs27("div", { className: "ss-w-fandash-card ss-w-fandash-postmatch-next", children: [
2377
2599
  card.title ? /* @__PURE__ */ jsx31("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2378
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 }) })
2379
2601
  ] });
2380
2602
  }
2381
2603
 
2382
2604
  // src/components/dashboard/RestingNextCard.tsx
2383
- import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
2605
+ import { jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
2384
2606
  function RestingNextCard({ card, onTap }) {
2385
2607
  const { data } = card;
2386
- return /* @__PURE__ */ jsxs27("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-next", onClick: () => onTap(card), children: [
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: [
2387
2609
  card.title ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2388
- /* @__PURE__ */ jsxs27("div", { className: "ss-w-fandash-resting-next-row", children: [
2610
+ /* @__PURE__ */ jsxs28("div", { className: "ss-w-fandash-resting-next-row", children: [
2389
2611
  /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-when", children: data.whenLabel }),
2390
2612
  data.competition ? /* @__PURE__ */ jsx32("span", { className: "ss-w-fandash-resting-next-competition", children: data.competition }) : null
2391
2613
  ] }),
@@ -2394,12 +2616,12 @@ function RestingNextCard({ card, onTap }) {
2394
2616
  }
2395
2617
 
2396
2618
  // src/components/dashboard/RestingStandingsCard.tsx
2397
- import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
2619
+ import { jsx as jsx33, jsxs as jsxs29 } from "react/jsx-runtime";
2398
2620
  function RestingStandingsCard({ card, onTap }) {
2399
2621
  const { data } = card;
2400
- return /* @__PURE__ */ jsxs28("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-standings", onClick: () => onTap(card), children: [
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: [
2401
2623
  card.title ? /* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2402
- /* @__PURE__ */ jsxs28("div", { className: "ss-w-fandash-resting-standings-row", children: [
2624
+ /* @__PURE__ */ jsxs29("div", { className: "ss-w-fandash-resting-standings-row", children: [
2403
2625
  /* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-position", children: data.positionLabel }),
2404
2626
  /* @__PURE__ */ jsx33("span", { className: "ss-w-fandash-resting-standings-record", children: data.recordLabel })
2405
2627
  ] }),
@@ -2408,12 +2630,12 @@ function RestingStandingsCard({ card, onTap }) {
2408
2630
  }
2409
2631
 
2410
2632
  // src/components/dashboard/RestingSeasonCard.tsx
2411
- import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
2633
+ import { jsx as jsx34, jsxs as jsxs30 } from "react/jsx-runtime";
2412
2634
  function RestingSeasonCard({ card, onTap }) {
2413
2635
  const { data } = card;
2414
- return /* @__PURE__ */ jsxs29("button", { type: "button", className: "ss-w-fandash-card ss-w-fandash-card--tap ss-w-fandash-resting-season", onClick: () => onTap(card), children: [
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: [
2415
2637
  card.title ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2416
- /* @__PURE__ */ jsxs29("div", { className: "ss-w-fandash-resting-season-rows", children: [
2638
+ /* @__PURE__ */ jsxs30("div", { className: "ss-w-fandash-resting-season-rows", children: [
2417
2639
  data.scorerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.scorerLabel }) : null,
2418
2640
  data.playerLabel ? /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.playerLabel }) : null,
2419
2641
  /* @__PURE__ */ jsx34("span", { className: "ss-w-fandash-resting-season-row", children: data.tallyLabel })
@@ -2423,7 +2645,7 @@ function RestingSeasonCard({ card, onTap }) {
2423
2645
  }
2424
2646
 
2425
2647
  // src/components/dashboard/RestingFormCard.tsx
2426
- import { jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
2648
+ import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
2427
2649
  function resultClass(result) {
2428
2650
  const upper = result.toUpperCase();
2429
2651
  if (upper === "W") return "ss-w-fandash-form-pill--win";
@@ -2432,17 +2654,17 @@ function resultClass(result) {
2432
2654
  }
2433
2655
  function RestingFormCard({ card }) {
2434
2656
  const { data } = card;
2435
- return /* @__PURE__ */ jsxs30("div", { className: "ss-w-fandash-card ss-w-fandash-resting-form", children: [
2657
+ return /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-card ss-w-fandash-resting-form", children: [
2436
2658
  card.title ? /* @__PURE__ */ jsx35("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2437
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}`)) })
2438
2660
  ] });
2439
2661
  }
2440
2662
 
2441
2663
  // src/components/dashboard/LiveScoreCard.tsx
2442
- import { useRef as useRef5, useState as useState14 } from "react";
2664
+ import { useRef as useRef6, useState as useState15 } from "react";
2443
2665
 
2444
2666
  // src/useLiveClock.ts
2445
- import { useEffect as useEffect7, useState as useState13 } from "react";
2667
+ import { useEffect as useEffect8, useState as useState14 } from "react";
2446
2668
  var TICK_MS = 6e4;
2447
2669
  var MAX_LIVE_TICK_MINUTES = 15;
2448
2670
  function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
@@ -2451,10 +2673,10 @@ function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
2451
2673
  return minute + Math.min(Math.max(0, elapsedMinutes), MAX_LIVE_TICK_MINUTES);
2452
2674
  }
2453
2675
  function useLiveClock(minute, clockRunning, receivedAtMs) {
2454
- const [displayMinute, setDisplayMinute] = useState13(
2676
+ const [displayMinute, setDisplayMinute] = useState14(
2455
2677
  () => computeDisplayMinute(minute, clockRunning, receivedAtMs)
2456
2678
  );
2457
- useEffect7(() => {
2679
+ useEffect8(() => {
2458
2680
  setDisplayMinute(computeDisplayMinute(minute, clockRunning, receivedAtMs));
2459
2681
  if (!clockRunning) return;
2460
2682
  const id = window.setInterval(() => {
@@ -2466,12 +2688,12 @@ function useLiveClock(minute, clockRunning, receivedAtMs) {
2466
2688
  }
2467
2689
 
2468
2690
  // src/components/dashboard/LiveScoreCard.tsx
2469
- import { jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
2691
+ import { jsx as jsx36, jsxs as jsxs32 } from "react/jsx-runtime";
2470
2692
  function initials5(name) {
2471
2693
  return name.trim().slice(0, 3).toUpperCase();
2472
2694
  }
2473
2695
  function LiveCrest({ url, name, side }) {
2474
- const [failed, setFailed] = useState14(false);
2696
+ const [failed, setFailed] = useState15(false);
2475
2697
  const cls = `ss-w-fandash-live-crest ss-w-fandash-live-crest--${side}`;
2476
2698
  if (url && !failed) {
2477
2699
  return /* @__PURE__ */ jsx36("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -2490,39 +2712,39 @@ function LiveScoreCard({
2490
2712
  }) {
2491
2713
  const { data } = card;
2492
2714
  const seedKey = `${data.minute}:${data.homeScore}:${data.awayScore}`;
2493
- const seedRef = useRef5(null);
2715
+ const seedRef = useRef6(null);
2494
2716
  if (!seedRef.current || seedRef.current.key !== seedKey) {
2495
2717
  seedRef.current = { key: seedKey, receivedAtMs: Date.now() };
2496
2718
  }
2497
2719
  const displayMinute = useLiveClock(data.minute, data.clockRunning, seedRef.current.receivedAtMs);
2498
2720
  const minuteSuffix = data.minuteLabel.replace(/^\d+/, "");
2499
2721
  const scorers = scorersLine(goalEvents);
2500
- return /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-card ss-w-fandash-live-score", children: [
2722
+ return /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-card ss-w-fandash-live-score", children: [
2501
2723
  card.title ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2502
- /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-top", children: [
2503
- /* @__PURE__ */ jsxs31("span", { className: "ss-w-fandash-live-pill", children: [
2724
+ /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-top", children: [
2725
+ /* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-pill", children: [
2504
2726
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
2505
2727
  data.statusLabel
2506
2728
  ] }),
2507
2729
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-minute", children: `${displayMinute}${minuteSuffix}` }),
2508
2730
  data.competition ? /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-competition", children: data.competition }) : null
2509
2731
  ] }),
2510
- /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-main", children: [
2511
- /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--home", children: [
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: [
2512
2734
  /* @__PURE__ */ jsx36(LiveCrest, { url: data.homeCrestUrl, name: data.homeName, side: "home" }),
2513
2735
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.homeName })
2514
2736
  ] }),
2515
- /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-score-main", children: [
2737
+ /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-score-main", children: [
2516
2738
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.homeScore }),
2517
2739
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-sep", children: "\u2013" }),
2518
2740
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-score-value", children: data.awayScore })
2519
2741
  ] }),
2520
- /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--away", children: [
2742
+ /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-side ss-w-fandash-live-side--away", children: [
2521
2743
  /* @__PURE__ */ jsx36(LiveCrest, { url: data.awayCrestUrl, name: data.awayName, side: "away" }),
2522
2744
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-team-name", children: data.awayName })
2523
2745
  ] })
2524
2746
  ] }),
2525
- scorers ? /* @__PURE__ */ jsxs31("div", { className: "ss-w-fandash-live-scorers", children: [
2747
+ scorers ? /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-live-scorers", children: [
2526
2748
  /* @__PURE__ */ jsx36("span", { className: "ss-w-fandash-live-scorers-icon", "aria-hidden": "true", children: "\u26BD" }),
2527
2749
  scorers
2528
2750
  ] }) : null
@@ -2530,8 +2752,8 @@ function LiveScoreCard({
2530
2752
  }
2531
2753
 
2532
2754
  // src/components/dashboard/LiveTimelineCard.tsx
2533
- import { useState as useState15 } from "react";
2534
- import { jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
2755
+ import { useState as useState16 } from "react";
2756
+ import { jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
2535
2757
  var SHOWN2 = 3;
2536
2758
  function EventIcon({ type }) {
2537
2759
  if (type === "goal") {
@@ -2547,9 +2769,9 @@ function EventIcon({ type }) {
2547
2769
  }
2548
2770
  function EventLabel({ e }) {
2549
2771
  if (e.type === "sub") {
2550
- return /* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-tl-who", children: [
2772
+ return /* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-who", children: [
2551
2773
  e.player ?? e.text,
2552
- e.playerOff ? /* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-tl-off", children: [
2774
+ e.playerOff ? /* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-off", children: [
2553
2775
  " for ",
2554
2776
  e.playerOff
2555
2777
  ] }) : null
@@ -2563,8 +2785,8 @@ function EventRow({ e }) {
2563
2785
  e.side === "home" ? "ss-w-fandash-live-tl-ev--home" : "ss-w-fandash-live-tl-ev--away",
2564
2786
  e.type === "goal" ? "ss-w-fandash-live-tl-ev--goal" : ""
2565
2787
  ].filter(Boolean).join(" ");
2566
- return /* @__PURE__ */ jsxs32("div", { className: cls, children: [
2567
- /* @__PURE__ */ jsxs32("span", { className: "ss-w-fandash-live-tl-txt", children: [
2788
+ return /* @__PURE__ */ jsxs33("div", { className: cls, children: [
2789
+ /* @__PURE__ */ jsxs33("span", { className: "ss-w-fandash-live-tl-txt", children: [
2568
2790
  /* @__PURE__ */ jsx37(EventLabel, { e }),
2569
2791
  /* @__PURE__ */ jsx37(EventIcon, { type: e.type })
2570
2792
  ] }),
@@ -2572,7 +2794,7 @@ function EventRow({ e }) {
2572
2794
  ] });
2573
2795
  }
2574
2796
  function LiveTimelineCard({ card, ui }) {
2575
- const [expanded, setExpanded] = useState15(false);
2797
+ const [expanded, setExpanded] = useState16(false);
2576
2798
  const events = card.data.events;
2577
2799
  if (!events || events.length === 0) return null;
2578
2800
  const sorted = [...events].sort((a, b) => b.minute - a.minute);
@@ -2580,7 +2802,7 @@ function LiveTimelineCard({ card, ui }) {
2580
2802
  const shown = expanded ? sorted : sorted.slice(0, SHOWN2);
2581
2803
  const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
2582
2804
  const showLess = ui?.showLess ?? "Show less";
2583
- return /* @__PURE__ */ jsxs32("div", { className: "ss-w-fandash-card ss-w-fandash-live-timeline", children: [
2805
+ return /* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-card ss-w-fandash-live-timeline", children: [
2584
2806
  card.title ? /* @__PURE__ */ jsx37("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2585
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}`)) }),
2586
2808
  rest > 0 ? /* @__PURE__ */ jsx37(
@@ -2598,7 +2820,7 @@ function LiveTimelineCard({ card, ui }) {
2598
2820
 
2599
2821
  // src/components/dashboard/MomentumWave.tsx
2600
2822
  import { useId } from "react";
2601
- import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
2823
+ import { jsx as jsx38, jsxs as jsxs34 } from "react/jsx-runtime";
2602
2824
  var WIDTH = 270;
2603
2825
  var HEIGHT = 56;
2604
2826
  var BASELINE = HEIGHT / 2;
@@ -2626,10 +2848,10 @@ function MomentumWave({
2626
2848
  const bottomClipId = `${clipId}-bottom`;
2627
2849
  const topClass = clubIsHome ? "ss-w-fandash-live-mom-home" : "ss-w-fandash-live-mom-away";
2628
2850
  const bottomClass = clubIsHome ? "ss-w-fandash-live-mom-away" : "ss-w-fandash-live-mom-home";
2629
- return /* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-live-mom", children: [
2851
+ return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-mom", children: [
2630
2852
  caption ? /* @__PURE__ */ jsx38("span", { className: "ss-w-fandash-live-mom-caption", children: caption }) : null,
2631
- /* @__PURE__ */ jsxs33("div", { className: "ss-w-fandash-live-mom-plot", children: [
2632
- /* @__PURE__ */ jsxs33(
2853
+ /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-mom-plot", children: [
2854
+ /* @__PURE__ */ jsxs34(
2633
2855
  "svg",
2634
2856
  {
2635
2857
  className: "ss-w-fandash-live-mom-svg",
@@ -2638,7 +2860,7 @@ function MomentumWave({
2638
2860
  role: "img",
2639
2861
  "aria-label": caption ?? "Momentum",
2640
2862
  children: [
2641
- /* @__PURE__ */ jsxs33("defs", { children: [
2863
+ /* @__PURE__ */ jsxs34("defs", { children: [
2642
2864
  /* @__PURE__ */ jsx38("clipPath", { id: topClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: 0, width: WIDTH, height: BASELINE }) }),
2643
2865
  /* @__PURE__ */ jsx38("clipPath", { id: bottomClipId, children: /* @__PURE__ */ jsx38("rect", { x: 0, y: BASELINE, width: WIDTH, height: HEIGHT - BASELINE }) })
2644
2866
  ] }),
@@ -2662,7 +2884,7 @@ function MomentumWave({
2662
2884
  }
2663
2885
 
2664
2886
  // src/components/dashboard/LiveStatsCard.tsx
2665
- import { jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
2887
+ import { jsx as jsx39, jsxs as jsxs35 } from "react/jsx-runtime";
2666
2888
  function splitWidths2(homeNum, awayNum) {
2667
2889
  const total = homeNum + awayNum;
2668
2890
  if (total <= 0) return { home: "50%", away: "50%" };
@@ -2671,7 +2893,7 @@ function splitWidths2(homeNum, awayNum) {
2671
2893
  }
2672
2894
  function LiveStatsCard({ card }) {
2673
2895
  const { data } = card;
2674
- return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-card ss-w-fandash-live-stats", children: [
2896
+ return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-card ss-w-fandash-live-stats", children: [
2675
2897
  card.title ? /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-eyebrow", children: card.title }) : null,
2676
2898
  /* @__PURE__ */ jsx39("div", { className: "ss-w-fandash-live-stat-rows", children: data.rows.map((r, i) => {
2677
2899
  const homeValue = data.clubIsHome ? r.clubValue : r.oppValue;
@@ -2679,25 +2901,25 @@ function LiveStatsCard({ card }) {
2679
2901
  const homeNum = data.clubIsHome ? r.clubNum : r.oppNum;
2680
2902
  const awayNum = data.clubIsHome ? r.oppNum : r.clubNum;
2681
2903
  const { home, away } = splitWidths2(homeNum, awayNum);
2682
- return /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-stat", children: [
2683
- /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-stat-row", children: [
2904
+ return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-stat", children: [
2905
+ /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-stat-row", children: [
2684
2906
  /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--home", children: homeValue }),
2685
2907
  /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-label", children: r.label }),
2686
2908
  /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-stat-value ss-w-fandash-live-stat-value--away", children: awayValue })
2687
2909
  ] }),
2688
- /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-bar", children: [
2910
+ /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash-live-bar", children: [
2689
2911
  /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-home", style: { width: home } }),
2690
2912
  /* @__PURE__ */ jsx39("span", { className: "ss-w-fandash-live-bar-away", style: { width: away } })
2691
2913
  ] })
2692
2914
  ] }, `${r.label}-${i}`);
2693
2915
  }) }),
2694
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,
2695
- data.rows.length > 0 ? /* @__PURE__ */ jsxs34("div", { className: "ss-w-fandash-live-legend", children: [
2696
- /* @__PURE__ */ jsxs34("span", { className: "ss-w-fandash-live-legend-item", children: [
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: [
2697
2919
  /* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--home" }),
2698
2920
  data.homeName
2699
2921
  ] }),
2700
- /* @__PURE__ */ jsxs34("span", { className: "ss-w-fandash-live-legend-item", children: [
2922
+ /* @__PURE__ */ jsxs35("span", { className: "ss-w-fandash-live-legend-item", children: [
2701
2923
  /* @__PURE__ */ jsx39("i", { className: "ss-w-fandash-live-legend-swatch ss-w-fandash-live-legend-swatch--away" }),
2702
2924
  data.awayName
2703
2925
  ] })
@@ -2706,7 +2928,7 @@ function LiveStatsCard({ card }) {
2706
2928
  }
2707
2929
 
2708
2930
  // src/components/dashboard/ClubFanDashboard.tsx
2709
- import { jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
2931
+ import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
2710
2932
  function ClubFanDashboard({ dashboard, onTap, ui }) {
2711
2933
  const orderedCards = [
2712
2934
  ...dashboard.cards.filter((c) => c.cardType === "countdown"),
@@ -2716,7 +2938,7 @@ function ClubFanDashboard({ dashboard, onTap, ui }) {
2716
2938
  (c) => c.cardType === "liveTimeline"
2717
2939
  );
2718
2940
  const goalEvents = timelineCard?.data.events.filter((e) => e.type === "goal");
2719
- return /* @__PURE__ */ jsxs35("div", { className: "ss-w-fandash", children: [
2941
+ return /* @__PURE__ */ jsxs36("div", { className: "ss-w-fandash", children: [
2720
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,
2721
2943
  /* @__PURE__ */ jsx40("div", { className: "ss-w-fandash-cards", children: orderedCards.map((card, i) => /* @__PURE__ */ jsx40(FanDashboardCard, { card, onTap, ui, goalEvents }, `${card.cardType}-${i}`)) })
2722
2944
  ] });
@@ -2769,7 +2991,7 @@ function FanDashboardCard({ card, onTap, ui, goalEvents }) {
2769
2991
  }
2770
2992
 
2771
2993
  // src/components/ChatMessage.tsx
2772
- import { jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
2994
+ import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
2773
2995
  function ChatMessage({ message, disabled, onAct, onTap, ui, slip, monitor }) {
2774
2996
  if (message.role === "user") {
2775
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 }) });
@@ -2777,7 +2999,7 @@ function ChatMessage({ message, disabled, onAct, onTap, ui, slip, monitor }) {
2777
2999
  const onFanDashboardTap = (card) => {
2778
3000
  onAct({ message: card.actionLabel, actionRef: card.actionRef, label: card.actionLabel || card.title || "" });
2779
3001
  };
2780
- return /* @__PURE__ */ jsxs36("div", { className: "ss-w-msg ss-w-bot", "data-msg-id": message.id, children: [
3002
+ return /* @__PURE__ */ jsxs37("div", { className: "ss-w-msg ss-w-bot", "data-msg-id": message.id, children: [
2781
3003
  message.text && !message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(Markdown, { text: message.text }) : null,
2782
3004
  message.greetingDashboard && !message.clubFanDashboard ? /* @__PURE__ */ jsx41(GreetingDashboard, { dashboard: message.greetingDashboard, onTap }) : null,
2783
3005
  message.clubFanDashboard ? /* @__PURE__ */ jsx41(ClubFanDashboard, { dashboard: message.clubFanDashboard, onTap: onFanDashboardTap, ui }) : null,
@@ -2803,7 +3025,7 @@ function isPinnedToBottom(el, threshold = PIN_THRESHOLD) {
2803
3025
  }
2804
3026
 
2805
3027
  // src/components/MessageList.tsx
2806
- import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
3028
+ import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
2807
3029
  function turnAnchor(messages) {
2808
3030
  const last = messages[messages.length - 1];
2809
3031
  if (!last || last.role !== "assistant") return null;
@@ -2812,11 +3034,11 @@ function turnAnchor(messages) {
2812
3034
  }
2813
3035
  function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
2814
3036
  const { state, send } = controller;
2815
- const listRef = useRef6(null);
2816
- const endRef = useRef6(null);
2817
- const pinnedRef = useRef6(true);
2818
- const anchoredTurnRef = useRef6(null);
2819
- useEffect8(() => {
3037
+ const listRef = useRef7(null);
3038
+ const endRef = useRef7(null);
3039
+ const pinnedRef = useRef7(true);
3040
+ const anchoredTurnRef = useRef7(null);
3041
+ useEffect9(() => {
2820
3042
  const anchor = turnAnchor(state.messages);
2821
3043
  const list = listRef.current;
2822
3044
  if (anchor && anchor.turnId !== anchoredTurnRef.current) {
@@ -2831,7 +3053,7 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
2831
3053
  }, [state.messages, state.status, state.isStreaming]);
2832
3054
  const hasUserMessage = state.messages.some((m) => m.role === "user");
2833
3055
  const hasDashboard = state.messages.some((m) => m.role === "assistant" && (m.greetingDashboard || m.clubFanDashboard));
2834
- return /* @__PURE__ */ jsxs37(
3056
+ return /* @__PURE__ */ jsxs38(
2835
3057
  "div",
2836
3058
  {
2837
3059
  className: "ss-w-list",
@@ -2860,7 +3082,7 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
2860
3082
  state.isStreaming && state.actionsLoading ? /* @__PURE__ */ jsx43(ActionButtons, { actions: [], loading: true, onAct: () => {
2861
3083
  } }) : null,
2862
3084
  state.status ? /* @__PURE__ */ jsx43("div", { className: "ss-w-status", children: state.status }) : null,
2863
- state.error ? /* @__PURE__ */ jsxs37("div", { className: "ss-w-error", role: "alert", children: [
3085
+ state.error ? /* @__PURE__ */ jsxs38("div", { className: "ss-w-error", role: "alert", children: [
2864
3086
  /* @__PURE__ */ jsx43("span", { children: "message" in state.error ? state.error.message : ui.somethingWentWrong }),
2865
3087
  /* @__PURE__ */ jsx43("button", { type: "button", className: "ss-w-retry", onClick: () => controller.retry(), children: ui.retry })
2866
3088
  ] }) : null,
@@ -2872,10 +3094,10 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
2872
3094
  }
2873
3095
 
2874
3096
  // src/components/ChatInput.tsx
2875
- import { useState as useState16 } from "react";
2876
- import { jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
3097
+ import { useState as useState17 } from "react";
3098
+ import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
2877
3099
  function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message" }) {
2878
- const [value, setValue] = useState16("");
3100
+ const [value, setValue] = useState17("");
2879
3101
  const submit = () => {
2880
3102
  const t = value.trim();
2881
3103
  if (!t) return;
@@ -2888,14 +3110,14 @@ function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop r
2888
3110
  submit();
2889
3111
  }
2890
3112
  };
2891
- return /* @__PURE__ */ jsxs38("div", { className: "ss-w-input", children: [
3113
+ return /* @__PURE__ */ jsxs39("div", { className: "ss-w-input", children: [
2892
3114
  /* @__PURE__ */ jsx44("textarea", { className: "ss-w-textarea", rows: 1, placeholder, value, disabled: streaming, onChange: (e) => setValue(e.target.value), onKeyDown }),
2893
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, {}) })
2894
3116
  ] });
2895
3117
  }
2896
3118
 
2897
3119
  // src/components/TabBar.tsx
2898
- import { jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
3120
+ import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
2899
3121
  var TABS = [
2900
3122
  { tab: "chat", labelKey: "tabChat" },
2901
3123
  { tab: "matches", labelKey: "tabMatches" },
@@ -2912,7 +3134,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
2912
3134
  return /* @__PURE__ */ jsx45("div", { className: "ss-w-tabs", role: "tablist", children: TABS.map(({ tab, labelKey }) => {
2913
3135
  const active = monitor.activeTab === tab;
2914
3136
  const count = counts[tab];
2915
- return /* @__PURE__ */ jsxs39(
3137
+ return /* @__PURE__ */ jsxs40(
2916
3138
  "button",
2917
3139
  {
2918
3140
  type: "button",
@@ -2933,7 +3155,7 @@ function TabBar({ monitor, ui, matchCount, oddsCount }) {
2933
3155
  }
2934
3156
 
2935
3157
  // src/components/MarketAccordion.tsx
2936
- import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
3158
+ import { jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
2937
3159
  function MarketAccordion({ match, monitor, ui, slip }) {
2938
3160
  const markets = match.availableMarkets ?? [];
2939
3161
  if (markets.length === 0) return null;
@@ -2942,9 +3164,9 @@ function MarketAccordion({ match, monitor, ui, slip }) {
2942
3164
  const isOpen = open === m.marketDeveloperName;
2943
3165
  const key = `${match.matchId}:${m.marketDeveloperName}`;
2944
3166
  const entry = monitor.marketOdds[key];
2945
- return /* @__PURE__ */ jsxs40("div", { className: isOpen ? "ss-w-acc-row ss-w-acc-row-open" : "ss-w-acc-row", children: [
2946
- /* @__PURE__ */ jsxs40("div", { className: "ss-w-acc-head", children: [
2947
- /* @__PURE__ */ jsxs40(
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(
2948
3170
  "button",
2949
3171
  {
2950
3172
  type: "button",
@@ -2968,7 +3190,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
2968
3190
  }
2969
3191
  )
2970
3192
  ] }),
2971
- isOpen && /* @__PURE__ */ jsxs40("div", { className: "ss-w-acc-panel", children: [
3193
+ isOpen && /* @__PURE__ */ jsxs41("div", { className: "ss-w-acc-panel", children: [
2972
3194
  entry?.error && /* @__PURE__ */ jsx46(
2973
3195
  "div",
2974
3196
  {
@@ -2977,7 +3199,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
2977
3199
  children: ui.accordionRetry
2978
3200
  }
2979
3201
  ),
2980
- entry?.block?.insight?.text && /* @__PURE__ */ jsxs40("div", { className: "ss-w-acc-insight", children: [
3202
+ entry?.block?.insight?.text && /* @__PURE__ */ jsxs41("div", { className: "ss-w-acc-insight", children: [
2981
3203
  /* @__PURE__ */ jsx46("span", { className: "ss-w-acc-badge", children: ui.accordionValueLabel }),
2982
3204
  " ",
2983
3205
  entry.block.insight.text
@@ -2999,7 +3221,7 @@ function MarketAccordion({ match, monitor, ui, slip }) {
2999
3221
  }
3000
3222
 
3001
3223
  // src/components/MonitorMatchCard.tsx
3002
- import { jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
3224
+ import { jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
3003
3225
  function chipSelection(row, matchId, conversationId) {
3004
3226
  const chip = row.market;
3005
3227
  if (!chip || !chip.addToSlipEnabled || typeof chip.matchOddsId !== "number" || typeof chip.price !== "number") return null;
@@ -3022,14 +3244,14 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
3022
3244
  const otherRows = match.statRows.filter((row) => !isPromoted(row, promotedPins));
3023
3245
  const orderedRows = [...promotedRows, ...otherRows];
3024
3246
  const kickoff = match.phase === "preMatch" && match.kickoffUtc ? ui.bettingKickoff(match.kickoffUtc) : void 0;
3025
- return /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon", children: [
3026
- /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-top", children: [
3027
- live && /* @__PURE__ */ jsxs41("span", { className: "ss-w-fandash-live-pill", children: [
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: [
3028
3250
  /* @__PURE__ */ jsx47("span", { className: "ss-w-fandash-live-dot", "aria-hidden": "true" }),
3029
3251
  ui.liveLabel
3030
3252
  ] }),
3031
3253
  match.phase === "fullTime" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-pill", children: ui.fullTimeLabel }),
3032
- kickoff && /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-pill", children: [
3254
+ kickoff && /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-pill", children: [
3033
3255
  kickoff.dayLabel,
3034
3256
  " \xB7 ",
3035
3257
  kickoff.time
@@ -3038,17 +3260,17 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
3038
3260
  match.competitionName && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-comp", children: match.competitionName }),
3039
3261
  /* @__PURE__ */ jsx47(PinToggle, { ui, monitor, pin: { kind: "match", matchId: match.matchId } })
3040
3262
  ] }),
3041
- /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-main", children: [
3042
- /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-side", children: [
3263
+ /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-main", children: [
3264
+ /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-side", children: [
3043
3265
  /* @__PURE__ */ jsx47(Crest2, { kind: "team", url: match.homeCrestUrl ?? void 0, name: match.homeTeamName ?? void 0 }),
3044
3266
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: match.homeTeamName })
3045
3267
  ] }),
3046
- match.phase === "preMatch" ? /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-score", children: [
3268
+ match.phase === "preMatch" ? /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-vs", children: "vs" }) : /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-score", children: [
3047
3269
  match.homeScore,
3048
3270
  /* @__PURE__ */ jsx47("i", { children: "\u2013" }),
3049
3271
  match.awayScore
3050
3272
  ] }),
3051
- /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
3273
+ /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: [
3052
3274
  /* @__PURE__ */ jsx47(Crest2, { kind: "team", url: match.awayCrestUrl ?? void 0, name: match.awayTeamName ?? void 0 }),
3053
3275
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-name", children: match.awayTeamName })
3054
3276
  ] })
@@ -3060,23 +3282,23 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
3060
3282
  const awayPct = total > 0 ? row.awayNum / total * 75 : 0;
3061
3283
  const promoted = isPromoted(row, promotedPins);
3062
3284
  const selection = chipSelection(row, match.matchId, slip.conversationId);
3063
- return /* @__PURE__ */ jsxs41("div", { className: promoted ? "ss-w-mon-stat ss-w-mon-pstrip" : "ss-w-mon-stat", children: [
3064
- /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-stat-row", children: [
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: [
3065
3287
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: row.homeValue }),
3066
3288
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-l", children: row.label }),
3067
3289
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: row.awayValue })
3068
3290
  ] }),
3069
- /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-bar", children: [
3291
+ /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-bar", children: [
3070
3292
  /* @__PURE__ */ jsx47("b", { className: "ss-w-mon-bar-home", style: { width: `${homePct}%` } }),
3071
3293
  /* @__PURE__ */ jsx47("i", { className: "ss-w-mon-bar-away", style: { width: `${awayPct}%` } })
3072
3294
  ] }),
3073
- row.market && /* @__PURE__ */ jsxs41("div", { className: promoted ? "ss-w-mon-stat-mkt ss-w-mon-mkt" : "ss-w-mon-stat-mkt", children: [
3074
- /* @__PURE__ */ jsxs41("span", { children: [
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: [
3075
3297
  row.market.marketLabel,
3076
3298
  " \xB7 ",
3077
3299
  row.market.selectionLabel
3078
3300
  ] }),
3079
- /* @__PURE__ */ jsxs41("span", { className: "ss-w-mon-stat-mkt-right", children: [
3301
+ /* @__PURE__ */ jsxs42("span", { className: "ss-w-mon-stat-mkt-right", children: [
3080
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) }),
3081
3303
  /* @__PURE__ */ jsx47(
3082
3304
  SlipButton,
@@ -3093,8 +3315,8 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
3093
3315
  ] }, row.label);
3094
3316
  }) }),
3095
3317
  match.status === "stale" && /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-asof", children: ui.asOf(formatTime(match.asOfUtc)) }),
3096
- match.momentum.length > 0 && /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-mom", children: [
3097
- /* @__PURE__ */ jsxs41("div", { className: "ss-w-mon-stat-row", children: [
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: [
3098
3320
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--home", children: typeof match.momentumHomePct === "number" ? `${match.momentumHomePct}%` : "" }),
3099
3321
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-l", children: ui.momentumLabel }),
3100
3322
  /* @__PURE__ */ jsx47("span", { className: "ss-w-mon-stat-v ss-w-mon-stat-v--away", children: typeof match.momentumHomePct === "number" ? `${100 - match.momentumHomePct}%` : "" })
@@ -3106,13 +3328,13 @@ function MonitorMatchCard({ match, promotedPins, monitor, ui, slip }) {
3106
3328
  }
3107
3329
 
3108
3330
  // src/components/MonitorTabs.tsx
3109
- import { jsx as jsx48, jsxs as jsxs42 } from "react/jsx-runtime";
3331
+ import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
3110
3332
  function OddsLiveStrip({ m, ui }) {
3111
3333
  const showScore = m.phase !== "preMatch" && typeof m.homeScore === "number";
3112
3334
  const stale = m.status === "stale";
3113
3335
  if (!showScore && !m.minuteLabel && !(m.isSuspended && !m.isSettled) && !m.isSettled && !stale) return null;
3114
- return /* @__PURE__ */ jsxs42("div", { className: "ss-w-mk-live", children: [
3115
- showScore && /* @__PURE__ */ jsxs42("b", { className: "ss-w-mk-live-score", children: [
3336
+ return /* @__PURE__ */ jsxs43("div", { className: "ss-w-mk-live", children: [
3337
+ showScore && /* @__PURE__ */ jsxs43("b", { className: "ss-w-mk-live-score", children: [
3116
3338
  m.homeTeamName,
3117
3339
  " ",
3118
3340
  m.homeScore,
@@ -3130,7 +3352,7 @@ function OddsLiveStrip({ m, ui }) {
3130
3352
  function MatchesPanel({ monitor, ui, slip }) {
3131
3353
  const matches = (monitor.snapshot?.matches ?? []).filter((m) => monitor.pins.some((p) => p.kind === "match" && p.matchId === m.matchId));
3132
3354
  if (matches.length === 0) return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-empty", children: ui.emptyMatchesTab });
3133
- return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-item", children: [
3355
+ return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: matches.map((m) => /* @__PURE__ */ jsxs43("div", { className: "ss-w-mon-item", children: [
3134
3356
  /* @__PURE__ */ jsx48(
3135
3357
  MonitorMatchCard,
3136
3358
  {
@@ -3159,7 +3381,7 @@ function OddsPanel({ monitor, ui, slip }) {
3159
3381
  if (markets.length === 0) return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-empty", children: ui.emptyOddsTab });
3160
3382
  return /* @__PURE__ */ jsx48("div", { className: "ss-w-mon-list", children: markets.map((m) => {
3161
3383
  const pin = monitor.pins.find((p) => p.key === m.key);
3162
- return /* @__PURE__ */ jsxs42("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
3384
+ return /* @__PURE__ */ jsxs43("div", { className: "ss-w-mon-oddspin", "data-settled": m.isSettled || void 0, children: [
3163
3385
  /* @__PURE__ */ jsx48(OddsLiveStrip, { m, ui }),
3164
3386
  m.card && /* @__PURE__ */ jsx48(
3165
3387
  MarketOddsCardList,
@@ -3179,11 +3401,11 @@ function OddsPanel({ monitor, ui, slip }) {
3179
3401
  }
3180
3402
 
3181
3403
  // src/components/ChatPanel.tsx
3182
- import { jsx as jsx49, jsxs as jsxs43 } from "react/jsx-runtime";
3404
+ import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
3183
3405
  var FULLSCREEN_QUERY = "(max-width: 639px)";
3184
3406
  function useIsModal() {
3185
- const [modal, setModal] = useState17(false);
3186
- useEffect9(() => {
3407
+ const [modal, setModal] = useState18(false);
3408
+ useEffect10(() => {
3187
3409
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
3188
3410
  const mql = window.matchMedia(FULLSCREEN_QUERY);
3189
3411
  const sync = () => setModal(mql.matches);
@@ -3194,9 +3416,9 @@ function useIsModal() {
3194
3416
  return modal;
3195
3417
  }
3196
3418
  function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
3197
- const { state, close, stop, send } = controller;
3419
+ const { state, close, stop, send, reset } = controller;
3198
3420
  const isModal = useIsModal();
3199
- useEffect9(() => {
3421
+ useEffect10(() => {
3200
3422
  const onKey = (e) => {
3201
3423
  if (e.key === "Escape") close();
3202
3424
  };
@@ -3207,11 +3429,23 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor }) {
3207
3429
  monitor?.setActiveTab("chat");
3208
3430
  send(text);
3209
3431
  };
3210
- useEffect9(() => {
3432
+ useEffect10(() => {
3211
3433
  if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
3212
3434
  }, [monitor, state.isStreaming, state.messages.length]);
3213
- return /* @__PURE__ */ jsxs43("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
3214
- /* @__PURE__ */ jsx49(ChatHeader, { onClose: close, closeLabel: ui.closeChat, logoUrl: ui.logoUrl, headerTitle: ui.headerTitle }),
3435
+ return /* @__PURE__ */ jsxs44("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
3436
+ /* @__PURE__ */ jsx49(
3437
+ ChatHeader,
3438
+ {
3439
+ onClose: close,
3440
+ closeLabel: ui.closeChat,
3441
+ logoUrl: ui.logoUrl,
3442
+ headerTitle: ui.headerTitle,
3443
+ onNewConversation: reset,
3444
+ canReset: state.messages.length > 0,
3445
+ newConversationLabel: ui.newConversation,
3446
+ moreOptionsLabel: ui.moreOptions
3447
+ }
3448
+ ),
3215
3449
  monitor && /* @__PURE__ */ jsx49(
3216
3450
  TabBar,
3217
3451
  {
@@ -3326,8 +3560,14 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
3326
3560
  }
3327
3561
  .ss-w-header { display: flex; align-items: center; gap: 8px; padding: 12px 14px; border-bottom: 1px solid var(--ss-w-line); }
3328
3562
  .ss-w-header-mark { width: 18px; height: 18px; display: block; object-fit: contain; }
3329
- .ss-w-header-title { font-weight: 660; }
3330
- .ss-w-close { margin-left: auto; background: none; border: none; color: var(--ss-w-faint); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
3563
+ .ss-w-header-title { font-weight: 660; flex: 1; }
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; }
3331
3571
 
3332
3572
  /* messages */
3333
3573
  /* .ss-w-mon-list (Matches/Odds tab scrollers) shares .ss-w-list's box/scroll rules by design --
@@ -4069,12 +4309,13 @@ function StatsWidget(props) {
4069
4309
  const cfg = props.config;
4070
4310
  const built = useMemo2(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
4071
4311
  const ui = useMemo2(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
4072
- const rootRef = useRef7(null);
4073
- const introDoneRef = useRef7(false);
4312
+ const rootRef = useRef8(null);
4313
+ const introDoneRef = useRef8(false);
4074
4314
  const markIntroDone = useCallback5(() => {
4075
4315
  introDoneRef.current = true;
4076
4316
  }, []);
4077
- const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0);
4317
+ const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
4318
+ const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
4078
4319
  const monitor = useLiveMonitor({
4079
4320
  getLiveMonitor: (pins) => built ? built.conversation.getLiveMonitor(pins) : Promise.resolve(null),
4080
4321
  getMarketOdds: (matchId, dev) => built ? built.conversation.getMarketOdds(matchId, dev) : Promise.resolve(null),
@@ -4108,7 +4349,7 @@ function StatsWidget(props) {
4108
4349
  () => built ? createDashboardTapSignal((input) => built.conversation.sendSignal(input)) : void 0,
4109
4350
  [built]
4110
4351
  );
4111
- useEffect10(() => {
4352
+ useEffect11(() => {
4112
4353
  if (!built || !ui.injectStyles) return;
4113
4354
  const node = rootRef.current?.getRootNode();
4114
4355
  if (node) injectStyles(node);