@sensiblestats/widget-react 0.14.0 → 0.15.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 { useEffect as useEffect5, useMemo as useMemo2, useRef as useRef3 } from "react";
2
+ import { useEffect as useEffect6, useMemo as useMemo2, useRef as useRef3 } from "react";
3
3
  import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
4
4
 
5
5
  // src/i18n.ts
@@ -42,6 +42,12 @@ var STRINGS = {
42
42
  const drift = direction ? `, ${direction}` : "";
43
43
  return `Price movement over the last ${span}: opened at ${opening}, currently ${current}${drift}.`;
44
44
  },
45
+ clubMatchPreviewHeading: "Match preview",
46
+ clubTeamDnaHeading: "How they play",
47
+ clubFormHeading: "Recent form",
48
+ clubCountdownLabel: "Countdown to kick-off",
49
+ clubKickoff: (ms) => new Intl.DateTimeFormat("en-GB", { weekday: "short", day: "numeric", month: "short", hour: "2-digit", minute: "2-digit" }).format(new Date(ms)),
50
+ clubKickoffAria: (ms) => `Kick-off ${new Intl.DateTimeFormat("en-GB", { weekday: "long", day: "numeric", month: "long", hour: "2-digit", minute: "2-digit" }).format(new Date(ms))}`,
45
51
  inSlip: "In slip",
46
52
  slipAdded: (n) => n === void 0 ? "Added to slip" : `Added to slip (${n} selection${n === 1 ? "" : "s"})`,
47
53
  slipDuplicate: "Already in your slip",
@@ -89,6 +95,12 @@ var STRINGS = {
89
95
  const drift = direction ? `, ${direction}` : "";
90
96
  return `Son ${span} i\xE7indeki oran hareketi: ${opening} ile a\xE7\u0131ld\u0131, \u015Fu anda ${current}${drift}.`;
91
97
  },
98
+ clubMatchPreviewHeading: "Ma\xE7 \xF6nizlemesi",
99
+ clubTeamDnaHeading: "Nas\u0131l oynuyorlar",
100
+ clubFormHeading: "Son form",
101
+ clubCountdownLabel: "Ba\u015Flama vuru\u015Funa kalan",
102
+ clubKickoff: (ms) => new Intl.DateTimeFormat("tr-TR", { weekday: "short", day: "numeric", month: "short", hour: "2-digit", minute: "2-digit" }).format(new Date(ms)),
103
+ clubKickoffAria: (ms) => `Ba\u015Flama vuru\u015Fu ${new Intl.DateTimeFormat("tr-TR", { weekday: "long", day: "numeric", month: "long", hour: "2-digit", minute: "2-digit" }).format(new Date(ms))}`,
92
104
  inSlip: "Kuponda",
93
105
  slipAdded: (n) => n === void 0 ? "Kupona eklendi" : `Kupona eklendi (${n} se\xE7im)`,
94
106
  slipDuplicate: "Bu se\xE7im kuponunuzda zaten var",
@@ -148,6 +160,12 @@ function normalizeUi(cfg) {
148
160
  excludedSuspended: strings.excludedSuspended,
149
161
  chartTimeLabel: strings.chartTimeLabel,
150
162
  chartAria: strings.chartAria,
163
+ clubMatchPreviewHeading: strings.clubMatchPreviewHeading,
164
+ clubTeamDnaHeading: strings.clubTeamDnaHeading,
165
+ clubFormHeading: strings.clubFormHeading,
166
+ clubCountdownLabel: strings.clubCountdownLabel,
167
+ clubKickoff: strings.clubKickoff,
168
+ clubKickoffAria: strings.clubKickoffAria,
151
169
  addToSlip: strings.addToSlip,
152
170
  inSlip: strings.inSlip,
153
171
  slipAdded: strings.slipAdded,
@@ -494,7 +512,8 @@ function applyEvent(state, event) {
494
512
  messages: mapActive(state, (t) => ({
495
513
  ...t,
496
514
  done: true,
497
- greetingDashboard: event.data.dashboard ?? void 0
515
+ greetingDashboard: event.data.dashboard ?? void 0,
516
+ clubDashboard: event.data.clubDashboard ?? void 0
498
517
  }))
499
518
  };
500
519
  }
@@ -608,7 +627,7 @@ function useChatStream(conversation, starterTexts, greetingMessage) {
608
627
  var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
609
628
 
610
629
  // src/components/Icons.tsx
611
- import { jsx, jsxs } from "react/jsx-runtime";
630
+ import { jsx } from "react/jsx-runtime";
612
631
  function SsMark({ className }) {
613
632
  return /* @__PURE__ */ jsx("img", { className, src: SS_LOGO_DATA_URI, alt: "", "aria-hidden": "true" });
614
633
  }
@@ -618,116 +637,55 @@ function SendIcon() {
618
637
  function CloseIcon() {
619
638
  return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "none", d: "M18 6L6 18M6 6l12 12", stroke: "currentColor", strokeWidth: "2" }) });
620
639
  }
621
- function FootballIcon() {
622
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
623
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "9", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
624
- /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M12 7l3.5 2.5-1.3 4.1H9.8L8.5 9.5z" })
625
- ] });
626
- }
627
- function GoalNetIcon() {
628
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
629
- /* @__PURE__ */ jsx("rect", { x: "3", y: "5", width: "18", height: "12", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
630
- /* @__PURE__ */ jsx("path", { fill: "none", stroke: "currentColor", strokeWidth: "1", d: "M3 9h18M3 13h18M8 5v12M16 5v12" })
631
- ] });
632
- }
633
- function BttsIcon() {
634
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
635
- /* @__PURE__ */ jsx("circle", { cx: "8", cy: "12", r: "4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
636
- /* @__PURE__ */ jsx("circle", { cx: "16", cy: "12", r: "4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6" })
637
- ] });
638
- }
639
- function CardIcon() {
640
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("rect", { x: "6", y: "3", width: "12", height: "18", rx: "1.5", fill: "currentColor" }) });
641
- }
642
- function CornerFlagIcon() {
643
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
644
- /* @__PURE__ */ jsx("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.6", d: "M6 21V4" }),
645
- /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M6 4l11 3.5L6 11z" })
646
- ] });
647
- }
648
- function PlayerIcon() {
649
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
650
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "7", r: "3.2", fill: "currentColor" }),
651
- /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M5 20c0-4 3-6.5 7-6.5s7 2.5 7 6.5z" })
652
- ] });
653
- }
654
- function TargetIcon() {
655
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
656
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "8.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
657
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6" }),
658
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "1.4", fill: "currentColor" })
659
- ] });
660
- }
661
- function TrophyIcon() {
662
- return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: [
663
- /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M7 3h10v4a5 5 0 0 1-5 5 5 5 0 0 1-5-5zM9 15h6v3H9zM7 19h10v2H7z" }),
664
- /* @__PURE__ */ jsx("path", { fill: "none", stroke: "currentColor", strokeWidth: "1.4", d: "M7 5H4v2a3 3 0 0 0 3 3M17 5h3v2a3 3 0 0 1-3 3" })
665
- ] });
666
- }
667
- function ChartLineIcon() {
668
- 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: "1.8", strokeLinecap: "round", strokeLinejoin: "round", d: "M4 17l5-6 4 3 7-9" }) });
669
- }
670
- function ChartBarIcon() {
671
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M5 12h3v8H5zM10.5 7h3v13h-3zM16 15h3v5h-3z" }) });
672
- }
673
- function ChatIcon() {
674
- 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: "1.6", d: "M4 5h16v11H9l-4 4z" }) });
675
- }
676
- function FireIcon() {
677
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M12 2c1 3-2 4-2 7a3 3 0 0 0 6 0c1 1 2 2.5 2 4.5A6 6 0 0 1 6 14c0-4 3-5 3-9 1 1 1.5 2 1.5 3C11.5 6 11 4 12 2z" }) });
678
- }
679
- function SparkleIcon() {
680
- return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", width: "1em", height: "1em", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M12 2l1.6 6.4L20 10l-6.4 1.6L12 18l-1.6-6.4L4 10l6.4-1.6z" }) });
681
- }
682
640
  function ChevronIcon() {
683
641
  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" }) });
684
642
  }
685
- var DASHBOARD_ICONS = {
686
- football: FootballIcon,
687
- "goal-net": GoalNetIcon,
688
- btts: BttsIcon,
689
- card: CardIcon,
690
- "corner-flag": CornerFlagIcon,
691
- player: PlayerIcon,
692
- target: TargetIcon,
693
- trophy: TrophyIcon,
694
- "chart-line": ChartLineIcon,
695
- "chart-bar": ChartBarIcon,
696
- chat: ChatIcon,
697
- fire: FireIcon,
698
- sparkle: SparkleIcon
643
+ var DASHBOARD_EMOJI = {
644
+ football: "\u26BD",
645
+ "goal-net": "\u{1F945}",
646
+ btts: "\u{1F91D}",
647
+ card: "\u{1F7E8}",
648
+ "corner-flag": "\u{1F6A9}",
649
+ player: "\u{1F464}",
650
+ target: "\u{1F3AF}",
651
+ trophy: "\u{1F3C6}",
652
+ "chart-line": "\u{1F4C8}",
653
+ "chart-bar": "\u{1F4CA}",
654
+ chat: "\u{1F4AC}",
655
+ fire: "\u{1F525}",
656
+ sparkle: "\u2728"
699
657
  };
700
658
  function DashboardIcon({ name }) {
701
- const Glyph = DASHBOARD_ICONS[name] ?? TargetIcon;
702
- return /* @__PURE__ */ jsx(Glyph, {});
659
+ const glyph = Object.prototype.hasOwnProperty.call(DASHBOARD_EMOJI, name) ? DASHBOARD_EMOJI[name] : DASHBOARD_EMOJI.target;
660
+ return /* @__PURE__ */ jsx("span", { className: "ss-w-dash-emoji", "aria-hidden": "true", children: glyph });
703
661
  }
704
662
 
705
663
  // src/components/GreetingBubble.tsx
706
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
664
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
707
665
  function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss" }) {
708
- return /* @__PURE__ */ jsxs2("div", { className: "ss-w-greeting", role: "note", children: [
666
+ return /* @__PURE__ */ jsxs("div", { className: "ss-w-greeting", role: "note", children: [
709
667
  /* @__PURE__ */ jsx2("button", { type: "button", className: "ss-w-greeting-body", onClick: onOpen, children: text }),
710
668
  onDismiss ? /* @__PURE__ */ jsx2("button", { type: "button", className: "ss-w-greeting-x", "aria-label": dismissLabel, onClick: onDismiss, children: "\xD7" }) : null
711
669
  ] });
712
670
  }
713
671
 
714
672
  // src/components/ChatFab.tsx
715
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
673
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
716
674
  function ChatFab({ label, greeting, popupText, onOpen, onDismissPopup, dismissLabel = "Dismiss" }) {
717
675
  const bubble = popupText ?? greeting;
718
- return /* @__PURE__ */ jsxs3("div", { className: "ss-w-fab-wrap", children: [
676
+ return /* @__PURE__ */ jsxs2("div", { className: "ss-w-fab-wrap", children: [
719
677
  bubble ? /* @__PURE__ */ jsx3(GreetingBubble, { text: bubble, onOpen, onDismiss: popupText ? onDismissPopup : void 0, dismissLabel }) : null,
720
678
  /* @__PURE__ */ jsx3("button", { type: "button", className: "ss-w-fab", "aria-label": label, onClick: onOpen, children: /* @__PURE__ */ jsx3(SsMark, { className: "ss-w-fab-mark" }) })
721
679
  ] });
722
680
  }
723
681
 
724
682
  // src/components/ChatPanel.tsx
725
- import { useEffect as useEffect4, useState as useState6 } from "react";
683
+ import { useEffect as useEffect5, useState as useState8 } from "react";
726
684
 
727
685
  // src/components/ChatHeader.tsx
728
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
686
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
729
687
  function ChatHeader({ onClose, closeLabel = "Close chat" }) {
730
- return /* @__PURE__ */ jsxs4("header", { className: "ss-w-header", children: [
688
+ return /* @__PURE__ */ jsxs3("header", { className: "ss-w-header", children: [
731
689
  /* @__PURE__ */ jsx4(SsMark, { className: "ss-w-header-mark" }),
732
690
  /* @__PURE__ */ jsx4("span", { className: "ss-w-header-title", children: "SensibleStats" }),
733
691
  /* @__PURE__ */ jsx4("button", { type: "button", className: "ss-w-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx4(CloseIcon, {}) })
@@ -735,7 +693,7 @@ function ChatHeader({ onClose, closeLabel = "Close chat" }) {
735
693
  }
736
694
 
737
695
  // src/components/MessageList.tsx
738
- import { useEffect as useEffect3, useRef as useRef2 } from "react";
696
+ import { useEffect as useEffect4, useRef as useRef2 } from "react";
739
697
 
740
698
  // src/components/Markdown.tsx
741
699
  import ReactMarkdown from "react-markdown";
@@ -754,7 +712,7 @@ function Markdown({ text }) {
754
712
 
755
713
  // src/components/EntityCardList.tsx
756
714
  import { useState } from "react";
757
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
715
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
758
716
  var MAX_VISIBLE = 3;
759
717
  var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
760
718
  function initials(name) {
@@ -768,7 +726,7 @@ function Crest({ image }) {
768
726
  }
769
727
  function FormBar({ w, d, l }) {
770
728
  if (w + d + l === 0) return null;
771
- return /* @__PURE__ */ jsxs5("span", { className: "ss-w-form", "aria-hidden": "true", children: [
729
+ return /* @__PURE__ */ jsxs4("span", { className: "ss-w-form", "aria-hidden": "true", children: [
772
730
  w > 0 ? /* @__PURE__ */ jsx6("span", { className: "ss-w-form-w", style: { flexGrow: w } }) : null,
773
731
  d > 0 ? /* @__PURE__ */ jsx6("span", { className: "ss-w-form-d", style: { flexGrow: d } }) : null,
774
732
  l > 0 ? /* @__PURE__ */ jsx6("span", { className: "ss-w-form-l", style: { flexGrow: l } }) : null
@@ -777,7 +735,7 @@ function FormBar({ w, d, l }) {
777
735
  function StatRows({ stats }) {
778
736
  return /* @__PURE__ */ jsx6("div", { className: "ss-w-ecard-stats", children: stats.map((s) => {
779
737
  const m = RECORD_RE.exec(s.value);
780
- return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-row", children: [
738
+ return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-row", children: [
781
739
  /* @__PURE__ */ jsx6("span", { className: "ss-w-ecard-rlabel", children: s.label }),
782
740
  m ? /* @__PURE__ */ jsx6(FormBar, { w: Number(m[1]), d: Number(m[2]), l: Number(m[3]) }) : /* @__PURE__ */ jsx6("span", {}),
783
741
  /* @__PURE__ */ jsx6("span", { className: "ss-w-ecard-rval", children: s.value })
@@ -790,9 +748,9 @@ function CardBody({ c }) {
790
748
  const season = c.season ? /* @__PURE__ */ jsx6("span", { className: "ss-w-ecard-season", children: shortSeason(c.season) }) : null;
791
749
  if (c.scopes.length === 1) {
792
750
  const only = c.scopes[0];
793
- return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-body", children: [
794
- /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-tabs ss-w-ecard-tabs-static", children: [
795
- /* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-lead", title: only.label, children: [
751
+ return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-body", children: [
752
+ /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-tabs ss-w-ecard-tabs-static", children: [
753
+ /* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-lead", title: only.label, children: [
796
754
  only.image ? /* @__PURE__ */ jsx6(Crest, { image: only.image }) : null,
797
755
  /* @__PURE__ */ jsx6("span", { className: "ss-w-ecard-lead-txt", children: only.label })
798
756
  ] }),
@@ -802,8 +760,8 @@ function CardBody({ c }) {
802
760
  ] });
803
761
  }
804
762
  const current = c.scopes[active] ?? c.scopes[0];
805
- return /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-body", children: [
806
- /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-tabs", role: "tablist", children: [
763
+ return /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-body", children: [
764
+ /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-tabs", role: "tablist", children: [
807
765
  c.scopes.map((s, i) => /* @__PURE__ */ jsx6(
808
766
  "button",
809
767
  {
@@ -825,8 +783,8 @@ function CardBody({ c }) {
825
783
  }
826
784
  function EntityCardItem({ c }) {
827
785
  const hasBody = c.scopes.length > 0;
828
- return /* @__PURE__ */ jsxs5("div", { className: hasBody ? "ss-w-ecard" : "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: [
829
- /* @__PURE__ */ jsxs5("div", { className: "ss-w-ecard-id", children: [
786
+ return /* @__PURE__ */ jsxs4("div", { className: hasBody ? "ss-w-ecard" : "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: [
787
+ /* @__PURE__ */ jsxs4("div", { className: "ss-w-ecard-id", children: [
830
788
  /* @__PURE__ */ jsx6(
831
789
  "span",
832
790
  {
@@ -835,7 +793,7 @@ function EntityCardItem({ c }) {
835
793
  children: c.image ? "" : initials(c.name)
836
794
  }
837
795
  ),
838
- /* @__PURE__ */ jsxs5("span", { className: "ss-w-ecard-idtext", children: [
796
+ /* @__PURE__ */ jsxs4("span", { className: "ss-w-ecard-idtext", children: [
839
797
  /* @__PURE__ */ jsx6("span", { className: "ss-w-nm", children: c.name }),
840
798
  c.sub ? /* @__PURE__ */ jsx6("span", { className: "ss-w-sub", children: c.sub }) : null
841
799
  ] })
@@ -848,7 +806,7 @@ function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMore
848
806
  if (cards.length === 0) return null;
849
807
  const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
850
808
  const overflow = cards.length - MAX_VISIBLE;
851
- return /* @__PURE__ */ jsxs5("div", { className: "ss-w-cards", children: [
809
+ return /* @__PURE__ */ jsxs4("div", { className: "ss-w-cards", children: [
852
810
  visible.map((c) => /* @__PURE__ */ jsx6(EntityCardItem, { c }, c.id)),
853
811
  overflow > 0 ? /* @__PURE__ */ jsx6("button", { type: "button", className: "ss-w-cards-more", disabled, onClick: () => setExpanded((v) => !v), children: expanded ? showLessLabel : showMoreLabel(overflow) }) : null
854
812
  ] });
@@ -904,7 +862,7 @@ function Toast({ toast, onDismiss }) {
904
862
  }
905
863
 
906
864
  // src/components/AddToSlipButton.tsx
907
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
865
+ import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
908
866
  function withTimeout(value) {
909
867
  return Promise.race([
910
868
  value,
@@ -938,7 +896,7 @@ function SlipButton({ selection, shownOdds, marketName, slip, ui }) {
938
896
  setPending(false);
939
897
  }
940
898
  };
941
- return /* @__PURE__ */ jsxs6("div", { className: "ss-w-slip", children: [
899
+ return /* @__PURE__ */ jsxs5("div", { className: "ss-w-slip", children: [
942
900
  /* @__PURE__ */ jsx8(
943
901
  "button",
944
902
  {
@@ -958,7 +916,7 @@ function AddToSlipButton({ it, slip, ui }) {
958
916
  }
959
917
 
960
918
  // src/components/OddsMovementBadge.tsx
961
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
919
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
962
920
  function OddsMovementBadge({
963
921
  previous,
964
922
  current,
@@ -971,7 +929,7 @@ function OddsMovementBadge({
971
929
  return (
972
930
  // Strikethrough is invisible to screen readers, so the whole was/now/direction sentence rides
973
931
  // on one aria-label and the visual glyphs are hidden from the accessibility tree.
974
- /* @__PURE__ */ jsxs7("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
932
+ /* @__PURE__ */ jsxs6("span", { className: "ss-w-move", role: "img", "aria-label": label, children: [
975
933
  /* @__PURE__ */ jsx9("span", { className: "ss-w-move-prev", "aria-hidden": "true", children: previous }),
976
934
  /* @__PURE__ */ jsx9("span", { className: "ss-w-move-arrow", "aria-hidden": "true", children: direction === "shortened" ? "\u25BC" : "\u25B2" })
977
935
  ] })
@@ -979,9 +937,9 @@ function OddsMovementBadge({
979
937
  }
980
938
 
981
939
  // src/components/BettingInsightList.tsx
982
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
940
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
983
941
  function StatRows2({ stats }) {
984
- return /* @__PURE__ */ jsx10("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-row", children: [
942
+ return /* @__PURE__ */ jsx10("div", { className: "ss-w-bi-rows", children: stats.map((s) => /* @__PURE__ */ jsxs7("div", { className: "ss-w-bi-row", children: [
985
943
  /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-row-lbl", children: s.label }),
986
944
  /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-row-num", children: s.value })
987
945
  ] }, `${s.label}:${s.value}`)) });
@@ -989,7 +947,7 @@ function StatRows2({ stats }) {
989
947
  function ScopedStats({ scopes }) {
990
948
  const [active, setActive] = useState3(0);
991
949
  const current = scopes[active] ?? scopes[0] ?? { key: "", label: "", stats: [] };
992
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-scoped", children: [
950
+ return /* @__PURE__ */ jsxs7("div", { className: "ss-w-bi-scoped", children: [
993
951
  /* @__PURE__ */ jsx10("div", { className: "ss-w-bi-scopes", role: "group", children: scopes.map((s, i) => /* @__PURE__ */ jsx10("button", { type: "button", className: "ss-w-bi-chip", "aria-pressed": i === active, onClick: () => setActive(i), children: s.label }, s.key)) }),
994
952
  /* @__PURE__ */ jsx10(StatRows2, { stats: current.stats }, current.key)
995
953
  ] });
@@ -999,8 +957,8 @@ function StatsDisclosure({ it, ui }) {
999
957
  const hasScopes = !!it.scopes && it.scopes.length >= 2;
1000
958
  const hasStats = hasScopes || it.stats.length > 0;
1001
959
  if (!hasStats) return null;
1002
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-stats", children: [
1003
- /* @__PURE__ */ jsxs8(
960
+ return /* @__PURE__ */ jsxs7("div", { className: "ss-w-bi-stats", children: [
961
+ /* @__PURE__ */ jsxs7(
1004
962
  "button",
1005
963
  {
1006
964
  type: "button",
@@ -1018,22 +976,22 @@ function StatsDisclosure({ it, ui }) {
1018
976
  }
1019
977
  function InsightCard({ it, ui, slip }) {
1020
978
  const live = it.isLive || it.phase === "live";
1021
- return /* @__PURE__ */ jsxs8("div", { className: "ss-w-binsight", children: [
1022
- live ? /* @__PURE__ */ jsx10("div", { className: "ss-w-bi-status", children: /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-live", children: [
979
+ return /* @__PURE__ */ jsxs7("div", { className: "ss-w-binsight", children: [
980
+ live ? /* @__PURE__ */ jsx10("div", { className: "ss-w-bi-status", children: /* @__PURE__ */ jsxs7("span", { className: "ss-w-bi-live", children: [
1023
981
  /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-live-dot", "aria-hidden": "true" }),
1024
982
  ui?.liveLabel ?? "Live"
1025
983
  ] }) }) : null,
1026
- /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-head", children: [
1027
- /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-mkt", children: [
984
+ /* @__PURE__ */ jsxs7("div", { className: "ss-w-bi-head", children: [
985
+ /* @__PURE__ */ jsxs7("span", { className: "ss-w-bi-mkt", children: [
1028
986
  /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-market", children: it.market }),
1029
987
  it.selection ? /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-sel", children: it.selection }) : null,
1030
- it.fixture || it.competition ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-match", children: [
988
+ it.fixture || it.competition ? /* @__PURE__ */ jsxs7("span", { className: "ss-w-bi-match", children: [
1031
989
  it.fixture ? /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-fixture", children: it.fixture }) : null,
1032
990
  it.competition ? /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-comp", children: it.competition }) : null
1033
991
  ] }) : null
1034
992
  ] }),
1035
- /* @__PURE__ */ jsxs8("div", { className: "ss-w-bi-action", children: [
1036
- it.odds ? /* @__PURE__ */ jsxs8("span", { className: "ss-w-bi-odds", children: [
993
+ /* @__PURE__ */ jsxs7("div", { className: "ss-w-bi-action", children: [
994
+ it.odds ? /* @__PURE__ */ jsxs7("span", { className: "ss-w-bi-odds", children: [
1037
995
  /* @__PURE__ */ jsx10("span", { className: "ss-w-bi-odds-cap", children: ui?.oddsLabel ?? "Odds" }),
1038
996
  /* @__PURE__ */ jsx10("b", { children: it.odds }),
1039
997
  /* @__PURE__ */ jsx10(OddsMovementBadge, { previous: it.previousOdds, current: it.odds, direction: it.movementDirection, ui }),
@@ -1054,10 +1012,10 @@ function BettingInsightList({ insights, ui, slip }) {
1054
1012
 
1055
1013
  // src/components/MarketOddsCardList.tsx
1056
1014
  import { useState as useState4 } from "react";
1057
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
1015
+ import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1058
1016
  function OddsRow({ vm, row, ui, slip }) {
1059
1017
  const selection = vm.addToSlipEnabled ? marketOddsRowToSlipSelection(vm, row, slip.conversationId) : null;
1060
- return /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-row", children: [
1018
+ return /* @__PURE__ */ jsxs8("div", { className: "ss-w-mo-row", children: [
1061
1019
  /* @__PURE__ */ jsx11("span", { className: "ss-w-mo-sel", children: row.selection }),
1062
1020
  /* @__PURE__ */ jsx11(OddsMovementBadge, { previous: row.previousOdds, current: row.odds, direction: row.movementDirection, ui }),
1063
1021
  /* @__PURE__ */ jsx11("span", { className: "ss-w-mo-price", children: row.odds }),
@@ -1066,20 +1024,20 @@ function OddsRow({ vm, row, ui, slip }) {
1066
1024
  }
1067
1025
  function MarketOddsCard({ vm, ui, slip }) {
1068
1026
  const [open, setOpen] = useState4(false);
1069
- return /* @__PURE__ */ jsxs9("div", { className: "ss-w-mocard", children: [
1070
- /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-head", children: [
1027
+ return /* @__PURE__ */ jsxs8("div", { className: "ss-w-mocard", children: [
1028
+ /* @__PURE__ */ jsxs8("div", { className: "ss-w-mo-head", children: [
1071
1029
  /* @__PURE__ */ jsx11("span", { className: "ss-w-mo-market", children: vm.market }),
1072
1030
  /* @__PURE__ */ jsx11("span", { className: "ss-w-mo-tag", children: ui?.marketPrices ?? "Market prices" })
1073
1031
  ] }),
1074
- vm.fixture || vm.competition ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-fixture", children: [
1032
+ vm.fixture || vm.competition ? /* @__PURE__ */ jsxs8("div", { className: "ss-w-mo-fixture", children: [
1075
1033
  vm.fixture ? /* @__PURE__ */ jsx11("span", { children: vm.fixture }) : null,
1076
1034
  vm.competition ? /* @__PURE__ */ jsx11("span", { className: "ss-w-mo-comp", children: vm.competition }) : null
1077
1035
  ] }) : null,
1078
- /* @__PURE__ */ jsxs9("div", { className: "ss-w-mo-rows", children: [
1036
+ /* @__PURE__ */ jsxs8("div", { className: "ss-w-mo-rows", children: [
1079
1037
  vm.mainRows.map((row) => /* @__PURE__ */ jsx11(OddsRow, { vm, row, ui, slip }, row.key)),
1080
1038
  open ? vm.moreRows.map((row) => /* @__PURE__ */ jsx11(OddsRow, { vm, row, ui, slip }, row.key)) : null
1081
1039
  ] }),
1082
- vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs9("button", { type: "button", className: "ss-w-bi-toggle", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
1040
+ vm.moreRows.length > 0 ? /* @__PURE__ */ jsxs8("button", { type: "button", className: "ss-w-bi-toggle", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [
1083
1041
  /* @__PURE__ */ jsx11("span", { children: open ? ui?.hideLines ?? "Hide lines" : `${ui?.moreLines ?? "More lines"} (${vm.moreRows.length})` }),
1084
1042
  /* @__PURE__ */ jsx11("span", { className: `ss-w-bi-chev${open ? " ss-w-bi-chev-up" : ""}`, "aria-hidden": "true" })
1085
1043
  ] }) : null,
@@ -1093,7 +1051,7 @@ function MarketOddsCardList({ cards, ui, slip }) {
1093
1051
  }
1094
1052
 
1095
1053
  // src/components/OddsMovementCard.tsx
1096
- import { Fragment, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
1054
+ import { Fragment, jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1097
1055
  function directionWord(vm, ui) {
1098
1056
  if (vm.direction === "shortened") return ui?.oddsShortened ?? "shortened";
1099
1057
  if (vm.direction === "drifted") return ui?.oddsDrifted ?? "drifted";
@@ -1103,18 +1061,18 @@ function OddsMovementCard({ vm, ui }) {
1103
1061
  const word = directionWord(vm, ui);
1104
1062
  const drift = word ? `, ${word}` : "";
1105
1063
  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}.`;
1106
- return /* @__PURE__ */ jsxs10("div", { className: "ss-w-omcard", children: [
1107
- /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-head", children: [
1064
+ return /* @__PURE__ */ jsxs9("div", { className: "ss-w-omcard", children: [
1065
+ /* @__PURE__ */ jsxs9("div", { className: "ss-w-om-head", children: [
1108
1066
  /* @__PURE__ */ jsx12("span", { className: "ss-w-om-market", children: vm.market }),
1109
1067
  /* @__PURE__ */ jsx12("span", { className: "ss-w-om-tag", children: ui?.priceMovement ?? "Price movement" })
1110
1068
  ] }),
1111
- vm.fixture ? /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-fixture", children: [
1069
+ vm.fixture ? /* @__PURE__ */ jsxs9("div", { className: "ss-w-om-fixture", children: [
1112
1070
  /* @__PURE__ */ jsx12("span", { children: vm.fixture }),
1113
1071
  vm.competition ? /* @__PURE__ */ jsx12("span", { className: "ss-w-om-comp", children: vm.competition }) : null
1114
1072
  ] }) : null,
1115
1073
  /* @__PURE__ */ jsx12("div", { className: "ss-w-om-sel", children: vm.selection }),
1116
1074
  /* @__PURE__ */ jsx12(OddsMovementBadge, { previous: vm.opening, current: vm.current, direction: vm.direction, ui }),
1117
- vm.geometry === null ? /* @__PURE__ */ jsx12("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(
1075
+ vm.geometry === null ? /* @__PURE__ */ jsx12("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__ */ jsxs9(
1118
1076
  "svg",
1119
1077
  {
1120
1078
  className: "ss-w-om-chart",
@@ -1123,26 +1081,26 @@ function OddsMovementCard({ vm, ui }) {
1123
1081
  role: "img",
1124
1082
  "aria-label": aria,
1125
1083
  children: [
1126
- vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs10("g", { children: [
1084
+ vm.geometry.gridlines.map((g) => /* @__PURE__ */ jsxs9("g", { children: [
1127
1085
  /* @__PURE__ */ jsx12("line", { className: "ss-w-om-grid", x1: 40, y1: g.y, x2: CHART_VIEW_W - 8, y2: g.y }),
1128
1086
  /* @__PURE__ */ jsx12("text", { className: "ss-w-om-ylab", x: 34, y: g.y + 3, textAnchor: "end", children: g.price.toFixed(2) })
1129
1087
  ] }, g.price)),
1130
1088
  /* @__PURE__ */ jsx12("path", { className: "ss-w-om-line", d: vm.geometry.path, fill: "none" }),
1131
1089
  vm.geometry.markers.map((m, i) => /* @__PURE__ */ jsx12("circle", { className: "ss-w-om-dot", cx: m.x, cy: m.y, r: 2.5 }, i)),
1132
- ui?.chartTimeLabel ? /* @__PURE__ */ jsxs10(Fragment, { children: [
1090
+ ui?.chartTimeLabel ? /* @__PURE__ */ jsxs9(Fragment, { children: [
1133
1091
  /* @__PURE__ */ jsx12("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, textAnchor: "start", children: ui.chartTimeLabel(vm.geometry.startMs) }),
1134
1092
  /* @__PURE__ */ jsx12("text", { className: "ss-w-om-xlab", x: CHART_VIEW_W - 8, y: CHART_VIEW_H - 8, textAnchor: "end", children: ui.chartTimeLabel(vm.geometry.endMs) })
1135
1093
  ] }) : /* @__PURE__ */ jsx12("text", { className: "ss-w-om-xlab", x: 40, y: CHART_VIEW_H - 8, children: ui?.movementWindow ? ui.movementWindow(vm.windowHours) : `Last ${vm.windowHours}h` })
1136
1094
  ]
1137
1095
  }
1138
1096
  ),
1139
- /* @__PURE__ */ jsxs10("div", { className: "ss-w-om-foot", children: [
1140
- /* @__PURE__ */ jsxs10("span", { children: [
1097
+ /* @__PURE__ */ jsxs9("div", { className: "ss-w-om-foot", children: [
1098
+ /* @__PURE__ */ jsxs9("span", { children: [
1141
1099
  ui?.openingLabel ?? "Opening",
1142
1100
  " ",
1143
1101
  /* @__PURE__ */ jsx12("b", { children: vm.opening })
1144
1102
  ] }),
1145
- /* @__PURE__ */ jsxs10("span", { children: [
1103
+ /* @__PURE__ */ jsxs9("span", { children: [
1146
1104
  ui?.currentLabel ?? "Current",
1147
1105
  " ",
1148
1106
  /* @__PURE__ */ jsx12("b", { children: vm.current })
@@ -1160,12 +1118,12 @@ function OddsMovementCardList({ cards, ui }) {
1160
1118
  }
1161
1119
 
1162
1120
  // src/components/ActionButtons.tsx
1163
- import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
1121
+ import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1164
1122
  function ActionButtons({ actions, loading, disabled, onAct }) {
1165
1123
  if (actions.length === 0 && !loading) return null;
1166
- return /* @__PURE__ */ jsxs11("div", { className: "ss-w-actions", children: [
1124
+ return /* @__PURE__ */ jsxs10("div", { className: "ss-w-actions", children: [
1167
1125
  actions.map((a, i) => /* @__PURE__ */ jsx13("button", { type: "button", className: "ss-w-abtn", disabled, onClick: () => onAct(a), children: a.label }, `${a.label}-${i}`)),
1168
- actions.length === 0 && loading ? /* @__PURE__ */ jsxs11(Fragment2, { children: [
1126
+ actions.length === 0 && loading ? /* @__PURE__ */ jsxs10(Fragment2, { children: [
1169
1127
  /* @__PURE__ */ jsx13("span", { className: "ss-w-abtn-shimmer" }),
1170
1128
  /* @__PURE__ */ jsx13("span", { className: "ss-w-abtn-shimmer" })
1171
1129
  ] }) : null
@@ -1173,22 +1131,22 @@ function ActionButtons({ actions, loading, disabled, onAct }) {
1173
1131
  }
1174
1132
 
1175
1133
  // src/components/dashboard/DashboardTile.tsx
1176
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
1134
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1177
1135
  var MAX_CRESTS = 3;
1178
1136
  function DashboardTile({ tile, onTap }) {
1179
1137
  const spanClass = tile.span === "full" ? "ss-w-dash-tile--full" : "ss-w-dash-tile--half";
1180
1138
  const crests = (tile.imageUrls ?? []).slice(0, MAX_CRESTS);
1181
1139
  const hasMeta = Boolean(tile.badgeText) || crests.length > 0;
1182
- return /* @__PURE__ */ jsxs12("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
1140
+ return /* @__PURE__ */ jsxs11("button", { type: "button", className: `ss-w-dash-tile ${spanClass}`, onClick: onTap, children: [
1183
1141
  /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-icon", children: /* @__PURE__ */ jsx14(DashboardIcon, { name: tile.icon }) }),
1184
- /* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-body", children: [
1142
+ /* @__PURE__ */ jsxs11("span", { className: "ss-w-dash-tile-body", children: [
1185
1143
  /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-title", children: tile.title }),
1186
1144
  tile.subtitle ? /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-subtitle", children: tile.subtitle }) : null,
1187
1145
  hasMeta ? (
1188
1146
  // Badge + crests sit on their own row, below the title, instead of sharing the
1189
1147
  // icon/chevron row -- at the half-span tile's ~180px width a nowrap badge alone
1190
1148
  // (~70px) left the title column at ~22px and forced character-by-character wrapping.
1191
- /* @__PURE__ */ jsxs12("span", { className: "ss-w-dash-tile-meta", children: [
1149
+ /* @__PURE__ */ jsxs11("span", { className: "ss-w-dash-tile-meta", children: [
1192
1150
  tile.badgeText ? /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-badge", children: tile.badgeText }) : null,
1193
1151
  crests.length > 0 ? /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-crests", children: crests.map((url, i) => /* @__PURE__ */ jsx14("span", { className: "ss-w-dash-tile-crest", style: { backgroundImage: `url(${url})` }, "aria-hidden": "true" }, `${url}-${i}`)) }) : null
1194
1152
  ] })
@@ -1199,7 +1157,7 @@ function DashboardTile({ tile, onTap }) {
1199
1157
  }
1200
1158
 
1201
1159
  // src/components/dashboard/GreetingDashboard.tsx
1202
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
1160
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1203
1161
  var LAYOUT_CLASSES = {
1204
1162
  market: "ss-w-dash--market",
1205
1163
  goal: "ss-w-dash--goal",
@@ -1209,8 +1167,8 @@ function layoutClass(layout) {
1209
1167
  return Object.prototype.hasOwnProperty.call(LAYOUT_CLASSES, layout) ? LAYOUT_CLASSES[layout] : LAYOUT_CLASSES.goal;
1210
1168
  }
1211
1169
  function GreetingDashboard({ dashboard, onTap }) {
1212
- return /* @__PURE__ */ jsxs13("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
1213
- /* @__PURE__ */ jsxs13("div", { className: "ss-w-dash-head", children: [
1170
+ return /* @__PURE__ */ jsxs12("div", { className: `ss-w-dash ${layoutClass(dashboard.layout)}`, children: [
1171
+ /* @__PURE__ */ jsxs12("div", { className: "ss-w-dash-head", children: [
1214
1172
  /* @__PURE__ */ jsx15("span", { className: "ss-w-dash-title", children: dashboard.title }),
1215
1173
  dashboard.subtitle ? /* @__PURE__ */ jsx15("span", { className: "ss-w-dash-subtitle", children: dashboard.subtitle }) : null
1216
1174
  ] }),
@@ -1219,28 +1177,184 @@ function GreetingDashboard({ dashboard, onTap }) {
1219
1177
  ] });
1220
1178
  }
1221
1179
 
1180
+ // src/components/club-dashboard/GreetingHeaderBlock.tsx
1181
+ import { jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1182
+ function GreetingHeaderBlock({ block }) {
1183
+ return /* @__PURE__ */ jsxs13("div", { className: "ss-w-cdash-greeting", children: [
1184
+ /* @__PURE__ */ jsx16("div", { className: "ss-w-cdash-greeting-title", children: block.title }),
1185
+ /* @__PURE__ */ jsx16("div", { className: "ss-w-cdash-greeting-subtitle", children: block.subtitle })
1186
+ ] });
1187
+ }
1188
+
1189
+ // src/components/club-dashboard/FixtureHeroBlock.tsx
1190
+ import { useState as useState5 } from "react";
1191
+ import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1192
+ function initials2(name) {
1193
+ return name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0].toUpperCase()).join("");
1194
+ }
1195
+ function Crest2({ url, name }) {
1196
+ const [broken, setBroken] = useState5(false);
1197
+ if (!url || broken) {
1198
+ return /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-crest ss-w-cdash-crest--fallback", "aria-hidden": "true", children: initials2(name) });
1199
+ }
1200
+ return /* @__PURE__ */ jsx17("img", { className: "ss-w-cdash-crest", src: url, alt: "", "aria-hidden": "true", onError: () => setBroken(true) });
1201
+ }
1202
+ function FixtureHeroBlock({
1203
+ block,
1204
+ ui,
1205
+ onAction
1206
+ }) {
1207
+ return /* @__PURE__ */ jsxs14("div", { className: "ss-w-cdash-fixture", children: [
1208
+ /* @__PURE__ */ jsxs14("div", { className: "ss-w-cdash-tie", children: [
1209
+ /* @__PURE__ */ jsx17(Crest2, { url: block.homeCrestUrl, name: block.homeName }),
1210
+ /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-team", children: block.homeName }),
1211
+ /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-vs", children: "v" }),
1212
+ /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-team", children: block.awayName }),
1213
+ /* @__PURE__ */ jsx17(Crest2, { url: block.awayCrestUrl, name: block.awayName })
1214
+ ] }),
1215
+ /* @__PURE__ */ jsxs14("div", { className: "ss-w-cdash-fixture-meta", children: [
1216
+ /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-kickoff", children: ui.clubKickoff(block.kickoffUnix * 1e3) }),
1217
+ block.venue ? /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-venue", children: block.venue }) : null,
1218
+ block.competition ? /* @__PURE__ */ jsx17("span", { className: "ss-w-cdash-comp", children: block.competition }) : null
1219
+ ] }),
1220
+ /* @__PURE__ */ jsx17("button", { type: "button", className: "ss-w-cdash-cta", onClick: () => onAction(block.ctaActionValue, block.ctaLabel), children: block.ctaLabel })
1221
+ ] });
1222
+ }
1223
+
1224
+ // src/components/club-dashboard/FormGuideBlock.tsx
1225
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1226
+ function FormGuideBlock({ block }) {
1227
+ if (block.rows.length === 0) return null;
1228
+ return /* @__PURE__ */ jsx18("div", { className: "ss-w-cdash-form", children: block.rows.map((row) => /* @__PURE__ */ jsxs15("div", { className: "ss-w-cdash-form-row", children: [
1229
+ /* @__PURE__ */ jsxs15("span", { className: "ss-w-cdash-form-name", children: [
1230
+ row.name,
1231
+ row.position != null ? ` #${row.position}` : ""
1232
+ ] }),
1233
+ /* @__PURE__ */ jsx18("span", { className: "ss-w-cdash-form-pills", children: row.last5.map((r, i) => /* @__PURE__ */ jsx18("span", { className: `ss-w-cdash-pill ss-w-cdash-pill--${r.toLowerCase()}`, children: r }, i)) })
1234
+ ] }, row.name)) });
1235
+ }
1236
+
1237
+ // src/components/club-dashboard/MatchPreviewBlock.tsx
1238
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1239
+ function MatchPreviewBlock({
1240
+ block,
1241
+ ui,
1242
+ onAction
1243
+ }) {
1244
+ if (block.lines.length === 0) return null;
1245
+ const heading = ui.clubMatchPreviewHeading;
1246
+ return /* @__PURE__ */ jsxs16("button", { type: "button", className: "ss-w-cdash-lines", onClick: () => onAction(block.actionValue, heading), children: [
1247
+ /* @__PURE__ */ jsx19("span", { className: "ss-w-cdash-lines-heading", children: heading }),
1248
+ block.lines.map((line, i) => /* @__PURE__ */ jsx19("p", { children: line }, i))
1249
+ ] });
1250
+ }
1251
+
1252
+ // src/components/club-dashboard/TeamDnaBlock.tsx
1253
+ import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1254
+ function TeamDnaBlock({
1255
+ block,
1256
+ ui,
1257
+ onAction
1258
+ }) {
1259
+ if (block.lines.length === 0) return null;
1260
+ const heading = ui.clubTeamDnaHeading;
1261
+ return /* @__PURE__ */ jsxs17("button", { type: "button", className: "ss-w-cdash-lines", onClick: () => onAction(block.actionValue, heading), children: [
1262
+ /* @__PURE__ */ jsx20("span", { className: "ss-w-cdash-lines-heading", children: heading }),
1263
+ block.lines.map((line, i) => /* @__PURE__ */ jsx20("p", { children: line }, i))
1264
+ ] });
1265
+ }
1266
+
1267
+ // src/components/club-dashboard/CountdownBlock.tsx
1268
+ import { useEffect as useEffect3, useState as useState6 } from "react";
1269
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
1270
+ var DAY_MS = 24 * 3600 * 1e3;
1271
+ function pad2(n) {
1272
+ return String(n).padStart(2, "0");
1273
+ }
1274
+ function splitRemaining(remainingMs) {
1275
+ const totalSeconds = Math.max(0, Math.floor(remainingMs / 1e3));
1276
+ const h = Math.floor(totalSeconds / 3600);
1277
+ const m = Math.floor(totalSeconds % 3600 / 60);
1278
+ const s = totalSeconds % 60;
1279
+ return { h: pad2(h), m: pad2(m), s: pad2(s) };
1280
+ }
1281
+ function CountdownBlock({ block, ui }) {
1282
+ const [remainingMs, setRemainingMs] = useState6(() => block.kickoffUnix * 1e3 - Date.now());
1283
+ useEffect3(() => {
1284
+ setRemainingMs(block.kickoffUnix * 1e3 - Date.now());
1285
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
1286
+ const id = setInterval(() => {
1287
+ setRemainingMs(block.kickoffUnix * 1e3 - Date.now());
1288
+ }, 1e3);
1289
+ return () => clearInterval(id);
1290
+ }, [block.kickoffUnix]);
1291
+ if (remainingMs <= 0) return null;
1292
+ if (remainingMs > DAY_MS) return null;
1293
+ const { h, m, s } = splitRemaining(remainingMs);
1294
+ return /* @__PURE__ */ jsxs18("div", { className: "ss-w-cdash-cd", "aria-label": ui.clubKickoffAria(block.kickoffUnix * 1e3), children: [
1295
+ /* @__PURE__ */ jsxs18("div", { className: "ss-w-cdash-cd-clock", "aria-hidden": "true", children: [
1296
+ /* @__PURE__ */ jsx21("span", { className: "ss-w-cdash-cd-h", children: h }),
1297
+ "h",
1298
+ " ",
1299
+ /* @__PURE__ */ jsx21("span", { className: "ss-w-cdash-cd-m", children: m }),
1300
+ "m",
1301
+ " ",
1302
+ /* @__PURE__ */ jsx21("span", { className: "ss-w-cdash-cd-s", children: s }),
1303
+ "s"
1304
+ ] }),
1305
+ /* @__PURE__ */ jsx21("div", { className: "ss-w-cdash-cd-label", children: ui.clubCountdownLabel })
1306
+ ] });
1307
+ }
1308
+
1309
+ // src/components/club-dashboard/ClubDashboard.tsx
1310
+ import { jsx as jsx22 } from "react/jsx-runtime";
1311
+ var CLUB_BLOCK_REGISTRY = {
1312
+ greetingHeader: ({ block }) => block.type === "greetingHeader" ? /* @__PURE__ */ jsx22(GreetingHeaderBlock, { block }) : null,
1313
+ fixtureHero: ({ block, ui, onAction }) => block.type === "fixtureHero" ? /* @__PURE__ */ jsx22(FixtureHeroBlock, { block, ui, onAction }) : null,
1314
+ formGuide: ({ block, ui }) => block.type === "formGuide" ? /* @__PURE__ */ jsx22(FormGuideBlock, { block, ui }) : null,
1315
+ matchPreview: ({ block, ui, onAction }) => block.type === "matchPreview" ? /* @__PURE__ */ jsx22(MatchPreviewBlock, { block, ui, onAction }) : null,
1316
+ teamDna: ({ block, ui, onAction }) => block.type === "teamDna" ? /* @__PURE__ */ jsx22(TeamDnaBlock, { block, ui, onAction }) : null,
1317
+ countdown: ({ block, ui }) => block.type === "countdown" ? /* @__PURE__ */ jsx22(CountdownBlock, { block, ui }) : null
1318
+ };
1319
+ function ClubDashboard({
1320
+ dashboard,
1321
+ ui,
1322
+ onAction
1323
+ }) {
1324
+ if (!dashboard.blocks.length) return null;
1325
+ return /* @__PURE__ */ jsx22("div", { className: "ss-w-cdash", children: dashboard.blocks.map((block, i) => {
1326
+ const Comp = Object.prototype.hasOwnProperty.call(CLUB_BLOCK_REGISTRY, block.type) ? CLUB_BLOCK_REGISTRY[block.type] : void 0;
1327
+ if (!Comp) {
1328
+ console.warn(`[club-dashboard] no renderer for block type "${block.type}"`);
1329
+ return null;
1330
+ }
1331
+ return /* @__PURE__ */ jsx22("div", { className: "ss-w-cdash-block", children: /* @__PURE__ */ jsx22(Comp, { block, ui, onAction }) }, i);
1332
+ }) });
1333
+ }
1334
+
1222
1335
  // src/components/ChatMessage.tsx
1223
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1224
- function ChatMessage({ message, disabled, onAct, onTap, ui, slip }) {
1336
+ import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
1337
+ function ChatMessage({ message, disabled, onAct, onTap, onClubAction, ui, slip }) {
1225
1338
  if (message.role === "user") {
1226
- return /* @__PURE__ */ jsx16("div", { className: "ss-w-msg ss-w-user", children: /* @__PURE__ */ jsx16("div", { className: "ss-w-bubble", children: message.text }) });
1339
+ return /* @__PURE__ */ jsx23("div", { className: "ss-w-msg ss-w-user", children: /* @__PURE__ */ jsx23("div", { className: "ss-w-bubble", children: message.text }) });
1227
1340
  }
1228
- return /* @__PURE__ */ jsxs14("div", { className: "ss-w-msg ss-w-bot", children: [
1229
- message.text ? /* @__PURE__ */ jsx16(Markdown, { text: message.text }) : null,
1230
- message.greetingDashboard ? /* @__PURE__ */ jsx16(GreetingDashboard, { dashboard: message.greetingDashboard, onTap }) : null,
1231
- /* @__PURE__ */ jsx16(EntityCardList, { cards: message.cards, disabled, showLessLabel: ui?.showLess, showMoreLabel: ui?.showMore }),
1232
- /* @__PURE__ */ jsx16(BettingInsightList, { insights: message.insights, ui, slip }),
1233
- /* @__PURE__ */ jsx16(MarketOddsCardList, { cards: message.marketOdds, ui, slip }),
1234
- /* @__PURE__ */ jsx16(OddsMovementCardList, { cards: message.oddsMovement, ui }),
1235
- /* @__PURE__ */ jsx16(ActionButtons, { actions: message.actions, loading: false, disabled, onAct })
1341
+ return /* @__PURE__ */ jsxs19("div", { className: "ss-w-msg ss-w-bot", children: [
1342
+ message.text && !message.greetingDashboard && !message.clubDashboard ? /* @__PURE__ */ jsx23(Markdown, { text: message.text }) : null,
1343
+ message.greetingDashboard ? /* @__PURE__ */ jsx23(GreetingDashboard, { dashboard: message.greetingDashboard, onTap }) : null,
1344
+ message.clubDashboard && ui ? /* @__PURE__ */ jsx23(ClubDashboard, { dashboard: message.clubDashboard, ui, onAction: onClubAction }) : null,
1345
+ /* @__PURE__ */ jsx23(EntityCardList, { cards: message.cards, disabled, showLessLabel: ui?.showLess, showMoreLabel: ui?.showMore }),
1346
+ /* @__PURE__ */ jsx23(BettingInsightList, { insights: message.insights, ui, slip }),
1347
+ /* @__PURE__ */ jsx23(MarketOddsCardList, { cards: message.marketOdds, ui, slip }),
1348
+ /* @__PURE__ */ jsx23(OddsMovementCardList, { cards: message.oddsMovement, ui }),
1349
+ /* @__PURE__ */ jsx23(ActionButtons, { actions: message.actions, loading: false, disabled, onAct })
1236
1350
  ] });
1237
1351
  }
1238
1352
 
1239
1353
  // src/components/IntentChips.tsx
1240
- import { jsx as jsx17 } from "react/jsx-runtime";
1354
+ import { jsx as jsx24 } from "react/jsx-runtime";
1241
1355
  function IntentChips({ chips, onPick }) {
1242
1356
  if (chips.length === 0) return null;
1243
- return /* @__PURE__ */ jsx17("div", { className: "ss-w-chips", children: chips.map((c, i) => /* @__PURE__ */ jsx17("button", { type: "button", className: "ss-w-chip", onClick: () => onPick(c.text), children: c.text }, `${c.text}-${i}`)) });
1357
+ return /* @__PURE__ */ jsx24("div", { className: "ss-w-chips", children: chips.map((c, i) => /* @__PURE__ */ jsx24("button", { type: "button", className: "ss-w-chip", onClick: () => onPick(c.text), children: c.text }, `${c.text}-${i}`)) });
1244
1358
  }
1245
1359
 
1246
1360
  // src/scroll.ts
@@ -1250,18 +1364,18 @@ function isPinnedToBottom(el, threshold = PIN_THRESHOLD) {
1250
1364
  }
1251
1365
 
1252
1366
  // src/components/MessageList.tsx
1253
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1367
+ import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
1254
1368
  function MessageList({ controller, ui, slip, onDashboardTap }) {
1255
1369
  const { state, send } = controller;
1256
1370
  const listRef = useRef2(null);
1257
1371
  const endRef = useRef2(null);
1258
1372
  const pinnedRef = useRef2(true);
1259
- useEffect3(() => {
1373
+ useEffect4(() => {
1260
1374
  if (pinnedRef.current) endRef.current?.scrollIntoView({ block: "end" });
1261
1375
  }, [state.messages, state.status]);
1262
1376
  const hasUserMessage = state.messages.some((m) => m.role === "user");
1263
1377
  const hasDashboard = state.messages.some((m) => m.role === "assistant" && m.greetingDashboard);
1264
- return /* @__PURE__ */ jsxs15(
1378
+ return /* @__PURE__ */ jsxs20(
1265
1379
  "div",
1266
1380
  {
1267
1381
  className: "ss-w-list",
@@ -1271,7 +1385,7 @@ function MessageList({ controller, ui, slip, onDashboardTap }) {
1271
1385
  if (listRef.current) pinnedRef.current = isPinnedToBottom(listRef.current);
1272
1386
  },
1273
1387
  children: [
1274
- state.messages.map((m) => /* @__PURE__ */ jsx18(
1388
+ state.messages.map((m) => /* @__PURE__ */ jsx25(
1275
1389
  ChatMessage,
1276
1390
  {
1277
1391
  message: m,
@@ -1281,30 +1395,31 @@ function MessageList({ controller, ui, slip, onDashboardTap }) {
1281
1395
  send(tile.actionValue, { displayText: tile.title });
1282
1396
  if (m.role === "assistant" && m.greetingDashboard) onDashboardTap?.(tile, index, m.greetingDashboard.layout);
1283
1397
  },
1398
+ onClubAction: (actionValue, displayText) => send(actionValue, { displayText }),
1284
1399
  ui,
1285
1400
  slip
1286
1401
  },
1287
1402
  m.id
1288
1403
  )),
1289
- state.isStreaming && state.actionsLoading ? /* @__PURE__ */ jsx18(ActionButtons, { actions: [], loading: true, onAct: () => {
1404
+ state.isStreaming && state.actionsLoading ? /* @__PURE__ */ jsx25(ActionButtons, { actions: [], loading: true, onAct: () => {
1290
1405
  } }) : null,
1291
- state.status ? /* @__PURE__ */ jsx18("div", { className: "ss-w-status", children: state.status }) : null,
1292
- state.error ? /* @__PURE__ */ jsxs15("div", { className: "ss-w-error", role: "alert", children: [
1293
- /* @__PURE__ */ jsx18("span", { children: "message" in state.error ? state.error.message : ui.somethingWentWrong }),
1294
- /* @__PURE__ */ jsx18("button", { type: "button", className: "ss-w-retry", onClick: () => controller.retry(), children: ui.retry })
1406
+ state.status ? /* @__PURE__ */ jsx25("div", { className: "ss-w-status", children: state.status }) : null,
1407
+ state.error ? /* @__PURE__ */ jsxs20("div", { className: "ss-w-error", role: "alert", children: [
1408
+ /* @__PURE__ */ jsx25("span", { children: "message" in state.error ? state.error.message : ui.somethingWentWrong }),
1409
+ /* @__PURE__ */ jsx25("button", { type: "button", className: "ss-w-retry", onClick: () => controller.retry(), children: ui.retry })
1295
1410
  ] }) : null,
1296
- !hasUserMessage && !hasDashboard ? /* @__PURE__ */ jsx18(IntentChips, { chips: state.starters, onPick: (t) => send(t) }) : null,
1297
- /* @__PURE__ */ jsx18("div", { ref: endRef })
1411
+ !hasUserMessage && !hasDashboard ? /* @__PURE__ */ jsx25(IntentChips, { chips: state.starters, onPick: (t) => send(t) }) : null,
1412
+ /* @__PURE__ */ jsx25("div", { ref: endRef })
1298
1413
  ]
1299
1414
  }
1300
1415
  );
1301
1416
  }
1302
1417
 
1303
1418
  // src/components/ChatInput.tsx
1304
- import { useState as useState5 } from "react";
1305
- import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1419
+ import { useState as useState7 } from "react";
1420
+ import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
1306
1421
  function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message" }) {
1307
- const [value, setValue] = useState5("");
1422
+ const [value, setValue] = useState7("");
1308
1423
  const submit = () => {
1309
1424
  const t = value.trim();
1310
1425
  if (!t) return;
@@ -1317,18 +1432,18 @@ function ChatInput({ placeholder, streaming, onSend, onStop, stopLabel = "Stop r
1317
1432
  submit();
1318
1433
  }
1319
1434
  };
1320
- return /* @__PURE__ */ jsxs16("div", { className: "ss-w-input", children: [
1321
- /* @__PURE__ */ jsx19("textarea", { className: "ss-w-textarea", rows: 1, placeholder, value, disabled: streaming, onChange: (e) => setValue(e.target.value), onKeyDown }),
1322
- streaming ? /* @__PURE__ */ jsx19("button", { type: "button", className: "ss-w-send ss-w-stop", "aria-label": stopLabel, onClick: onStop, children: /* @__PURE__ */ jsx19("span", { className: "ss-w-stop-glyph" }) }) : /* @__PURE__ */ jsx19("button", { type: "button", className: "ss-w-send", "aria-label": sendLabel, onClick: submit, children: /* @__PURE__ */ jsx19(SendIcon, {}) })
1435
+ return /* @__PURE__ */ jsxs21("div", { className: "ss-w-input", children: [
1436
+ /* @__PURE__ */ jsx26("textarea", { className: "ss-w-textarea", rows: 1, placeholder, value, disabled: streaming, onChange: (e) => setValue(e.target.value), onKeyDown }),
1437
+ streaming ? /* @__PURE__ */ jsx26("button", { type: "button", className: "ss-w-send ss-w-stop", "aria-label": stopLabel, onClick: onStop, children: /* @__PURE__ */ jsx26("span", { className: "ss-w-stop-glyph" }) }) : /* @__PURE__ */ jsx26("button", { type: "button", className: "ss-w-send", "aria-label": sendLabel, onClick: submit, children: /* @__PURE__ */ jsx26(SendIcon, {}) })
1323
1438
  ] });
1324
1439
  }
1325
1440
 
1326
1441
  // src/components/ChatPanel.tsx
1327
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
1442
+ import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
1328
1443
  var FULLSCREEN_QUERY = "(max-width: 639px)";
1329
1444
  function useIsModal() {
1330
- const [modal, setModal] = useState6(false);
1331
- useEffect4(() => {
1445
+ const [modal, setModal] = useState8(false);
1446
+ useEffect5(() => {
1332
1447
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
1333
1448
  const mql = window.matchMedia(FULLSCREEN_QUERY);
1334
1449
  const sync = () => setModal(mql.matches);
@@ -1341,17 +1456,17 @@ function useIsModal() {
1341
1456
  function ChatPanel({ controller, ui, slip, onDashboardTap }) {
1342
1457
  const { state, close, stop, send } = controller;
1343
1458
  const isModal = useIsModal();
1344
- useEffect4(() => {
1459
+ useEffect5(() => {
1345
1460
  const onKey = (e) => {
1346
1461
  if (e.key === "Escape") close();
1347
1462
  };
1348
1463
  window.addEventListener("keydown", onKey);
1349
1464
  return () => window.removeEventListener("keydown", onKey);
1350
1465
  }, [close]);
1351
- return /* @__PURE__ */ jsxs17("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
1352
- /* @__PURE__ */ jsx20(ChatHeader, { onClose: close, closeLabel: ui.closeChat }),
1353
- /* @__PURE__ */ jsx20(MessageList, { controller, ui, slip, onDashboardTap }),
1354
- /* @__PURE__ */ jsx20(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: (t) => send(t), onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
1466
+ return /* @__PURE__ */ jsxs22("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
1467
+ /* @__PURE__ */ jsx27(ChatHeader, { onClose: close, closeLabel: ui.closeChat }),
1468
+ /* @__PURE__ */ jsx27(MessageList, { controller, ui, slip, onDashboardTap }),
1469
+ /* @__PURE__ */ jsx27(ChatInput, { placeholder: ui.placeholder, streaming: state.isStreaming, onSend: (t) => send(t), onStop: stop, stopLabel: ui.stopResponse, sendLabel: ui.sendMessage })
1355
1470
  ] });
1356
1471
  }
1357
1472
 
@@ -1628,7 +1743,8 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
1628
1743
  min-width: 0; /* the panel is min(400px, 100vw - 40px): without this,
1629
1744
  a long Turkish title blows the column out */
1630
1745
  }
1631
- .ss-w-dash-tile-icon { flex: none; display: grid; place-items: center; width: 20px; height: 20px; color: var(--ss-w-accent); font-size: 18px; }
1746
+ .ss-w-dash-tile-icon { flex: none; display: grid; place-items: center; width: 28px; height: 28px; font-size: 22px; }
1747
+ .ss-w-dash-emoji { line-height: 1; }
1632
1748
  .ss-w-dash-tile-body { min-width: 0; display: flex; flex-direction: column; gap: 2px; flex: 1; }
1633
1749
  .ss-w-dash-tile-title { min-width: 0; font-weight: 600; font-size: 14px; overflow-wrap: anywhere; }
1634
1750
  .ss-w-dash-tile-subtitle { min-width: 0; font-size: 11.5px; color: var(--ss-w-faint); overflow-wrap: anywhere; }
@@ -1658,15 +1774,63 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
1658
1774
  .ss-w-dash--goal .ss-w-dash-grid { grid-template-columns: 1fr; }
1659
1775
  .ss-w-dash--goal .ss-w-dash-tile { border-radius: 999px; padding: 10px 14px; }
1660
1776
 
1661
- /* Discovery: tinted bento cards. */
1777
+ /* Discovery: tinted bento cards. Stacked (icon over text) so a two- or three-word title gets
1778
+ the tile's full width instead of the ~100px left of a horizontal icon+chevron -- that narrow
1779
+ column was wrapping "Most interesting angles" onto three lines. The chevron is dropped (the
1780
+ whole card is the tap target) and the badge + crest row is forced onto one line. */
1781
+ .ss-w-dash--discovery .ss-w-dash-tile { flex-direction: column; align-items: stretch; gap: 8px; }
1782
+ .ss-w-dash--discovery .ss-w-dash-tile-icon { align-self: flex-start; width: 32px; height: 32px; font-size: 26px; }
1783
+ .ss-w-dash--discovery .ss-w-dash-tile-chevron { display: none; }
1784
+ /* The full-span trends tile has the whole panel width, so its icon and title sit on one row
1785
+ (horizontal, centre-aligned) rather than stacking like the narrow half tiles. */
1786
+ .ss-w-dash--discovery .ss-w-dash-tile--full { flex-direction: row; align-items: center; }
1787
+ .ss-w-dash--discovery .ss-w-dash-tile--full .ss-w-dash-tile-icon { align-self: center; }
1788
+ .ss-w-dash--discovery .ss-w-dash-tile-meta { flex-wrap: nowrap; }
1789
+ .ss-w-dash--discovery .ss-w-dash-tile-crest { width: 22px; height: 22px; }
1662
1790
  .ss-w-dash--discovery .ss-w-dash-tile:nth-child(1) { background: #eef8f1; }
1663
1791
  .ss-w-dash--discovery .ss-w-dash-tile:nth-child(2) { background: #eef3fb; }
1664
1792
  .ss-w-dash--discovery .ss-w-dash-tile:nth-child(3) { background: #fdf6ec; }
1665
1793
  .ss-w-dash--discovery .ss-w-dash-tile:nth-child(4) { background: #f5eefb; }
1794
+
1795
+ /* club match-day dashboard */
1796
+ .ss-w-cdash { display: flex; flex-direction: column; gap: 10px; padding: 4px 0; }
1797
+ .ss-w-cdash-block { display: flex; flex-direction: column; }
1798
+
1799
+ .ss-w-cdash-greeting { display: flex; flex-direction: column; gap: 2px; }
1800
+ .ss-w-cdash-greeting-title { font-weight: 700; font-size: 14px; color: var(--ss-w-ink); }
1801
+ .ss-w-cdash-greeting-subtitle { font-size: 11.5px; color: var(--ss-w-faint); }
1802
+
1803
+ .ss-w-cdash-fixture { display: flex; flex-direction: column; align-items: center; gap: 8px; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-radius: 12px; padding: 12px; text-align: center; }
1804
+ .ss-w-cdash-tie { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; }
1805
+ .ss-w-cdash-team { font-weight: 650; font-size: 13px; color: var(--ss-w-ink); min-width: 0; overflow-wrap: anywhere; }
1806
+ .ss-w-cdash-vs { font-size: 11px; color: var(--ss-w-faint); font-weight: 600; }
1807
+ .ss-w-cdash-crest { flex: none; width: 28px; height: 28px; border-radius: 50%; object-fit: cover; background: var(--ss-w-bubble); }
1808
+ .ss-w-cdash-crest--fallback { display: grid; place-items: center; font-size: 10.5px; font-weight: 700; color: var(--ss-w-accent); background: color-mix(in srgb, var(--ss-w-accent) 16%, var(--ss-w-panel)); }
1809
+ .ss-w-cdash-fixture-meta { display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap; font-size: 11px; color: var(--ss-w-faint); }
1810
+ .ss-w-cdash-kickoff { font-weight: 700; color: var(--ss-w-ink); }
1811
+ .ss-w-cdash-cta { font: inherit; font-weight: 700; font-size: 12px; color: var(--ss-w-cta-ink); background: var(--ss-w-cta); border: none; border-radius: 999px; padding: 8px 18px; cursor: pointer; }
1812
+
1813
+ .ss-w-cdash-form { display: flex; flex-direction: column; gap: 6px; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-radius: 12px; padding: 10px 12px; }
1814
+ .ss-w-cdash-form-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
1815
+ .ss-w-cdash-form-name { font-size: 12px; font-weight: 600; color: var(--ss-w-ink); min-width: 0; overflow-wrap: anywhere; }
1816
+ .ss-w-cdash-form-pills { flex: none; display: flex; align-items: center; gap: 3px; }
1817
+ .ss-w-cdash-pill { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; font-size: 9.5px; font-weight: 700; color: #fff; }
1818
+ .ss-w-cdash-pill--w { background: color-mix(in srgb, var(--ss-w-pos) 88%, black); }
1819
+ .ss-w-cdash-pill--d { background: var(--ss-w-faint); }
1820
+ .ss-w-cdash-pill--l { background: color-mix(in srgb, var(--ss-w-neg) 88%, black); }
1821
+
1822
+ .ss-w-cdash-lines { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; width: 100%; text-align: left; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-left: 3px solid var(--ss-w-accent); border-radius: 12px; padding: 10px 12px; font: inherit; cursor: pointer; }
1823
+ .ss-w-cdash-lines-heading { font-size: 12px; font-weight: 700; color: var(--ss-w-accent); }
1824
+ .ss-w-cdash-lines p { font-size: 12px; line-height: 1.4; color: var(--ss-w-ink); }
1825
+
1826
+ .ss-w-cdash-cd { display: flex; flex-direction: column; align-items: center; gap: 4px; background: var(--ss-w-panel); border: 1px solid var(--ss-w-line); border-radius: 12px; padding: 10px 12px; text-align: center; }
1827
+ .ss-w-cdash-cd-clock { display: flex; align-items: baseline; justify-content: center; gap: 2px; font-variant-numeric: tabular-nums; font-family: ui-monospace, "SFMono-Regular", Menlo, monospace; font-weight: 700; font-size: 18px; color: var(--ss-w-ink); }
1828
+ .ss-w-cdash-cd-h, .ss-w-cdash-cd-m, .ss-w-cdash-cd-s { color: var(--ss-w-accent); }
1829
+ .ss-w-cdash-cd-label { font-size: 11px; font-weight: 600; color: var(--ss-w-faint); }
1666
1830
  `;
1667
1831
 
1668
1832
  // src/StatsWidget.tsx
1669
- import { jsx as jsx21 } from "react/jsx-runtime";
1833
+ import { jsx as jsx28 } from "react/jsx-runtime";
1670
1834
  function buildClient(props) {
1671
1835
  try {
1672
1836
  if ("client" in props && props.client) {
@@ -1712,14 +1876,14 @@ function StatsWidget(props) {
1712
1876
  () => built ? createDashboardTapSignal((input) => built.conversation.sendSignal(input)) : void 0,
1713
1877
  [built]
1714
1878
  );
1715
- useEffect5(() => {
1879
+ useEffect6(() => {
1716
1880
  if (!built || !ui.injectStyles) return;
1717
1881
  const node = rootRef.current?.getRootNode();
1718
1882
  if (node) injectStyles(node);
1719
1883
  }, [built, ui.injectStyles]);
1720
1884
  if (!built) return null;
1721
1885
  const attrs = themeAttrs(ui);
1722
- return /* @__PURE__ */ jsx21("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ jsx21(ChatPanel, { controller, ui, slip, onDashboardTap }) : /* @__PURE__ */ jsx21(
1886
+ return /* @__PURE__ */ jsx28("div", { ref: rootRef, className: "ss-w-root", "data-ss-w-theme": attrs["data-ss-w-theme"], "data-ss-w-pos": attrs["data-ss-w-pos"], style: attrs.style, children: controller.state.isOpen ? /* @__PURE__ */ jsx28(ChatPanel, { controller, ui, slip, onDashboardTap }) : /* @__PURE__ */ jsx28(
1723
1887
  ChatFab,
1724
1888
  {
1725
1889
  label: ui.launcherLabel,