@sensiblestats/widget-react 0.82.0 → 0.84.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 useCallback18, useEffect as useEffect29, useMemo as useMemo6, useRef as useRef25, useState as useState48 } from "react";
2
+ import { useCallback as useCallback21, useEffect as useEffect32, useMemo as useMemo6, useRef as useRef28, useState as useState51 } from "react";
3
3
  import { StatsWidgetClient } from "@sensiblestats/widget-sdk";
4
4
 
5
5
  // src/kickoff.ts
@@ -113,6 +113,20 @@ var STRINGS = {
113
113
  accordionRetry: "Couldn't load odds \u2014 tap to retry",
114
114
  accordionSuspended: "Suspended",
115
115
  tabToday: "Today",
116
+ tabFixtures: "Fixtures",
117
+ tabStandings: "Standings",
118
+ tabSquad: "Squad",
119
+ clubFixturesEmpty: "No fixtures yet.",
120
+ clubStandingsEmpty: "Standings are not available yet.",
121
+ clubSquadEmpty: "Squad is not available yet.",
122
+ standingsColClub: "Club",
123
+ standingsColPlayed: "P",
124
+ standingsColWon: "W",
125
+ standingsColDrawn: "D",
126
+ standingsColLost: "L",
127
+ standingsColGoalDiff: "GD",
128
+ standingsColPoints: "Pts",
129
+ gamesPlaySegment: "Play",
116
130
  sectionLive: "Live",
117
131
  yourLeagues: "Your leagues",
118
132
  topLeagues: "Top leagues",
@@ -480,6 +494,20 @@ var STRINGS = {
480
494
  accordionRetry: "Oranlar y\xFCklenemedi \u2014 yeniden dene",
481
495
  accordionSuspended: "Ask\u0131da",
482
496
  tabToday: "Bug\xFCn",
497
+ tabFixtures: "Fikst\xFCr",
498
+ tabStandings: "Puan Durumu",
499
+ tabSquad: "Kadro",
500
+ clubFixturesEmpty: "Hen\xFCz fikst\xFCr yok.",
501
+ clubStandingsEmpty: "Puan durumu hen\xFCz mevcut de\u011Fil.",
502
+ clubSquadEmpty: "Kadro hen\xFCz mevcut de\u011Fil.",
503
+ standingsColClub: "Tak\u0131m",
504
+ standingsColPlayed: "O",
505
+ standingsColWon: "G",
506
+ standingsColDrawn: "B",
507
+ standingsColLost: "M",
508
+ standingsColGoalDiff: "AV",
509
+ standingsColPoints: "P",
510
+ gamesPlaySegment: "Oyna",
483
511
  sectionLive: "Canl\u0131",
484
512
  yourLeagues: "Liglerin",
485
513
  topLeagues: "\xD6ne \xE7\u0131kan ligler",
@@ -844,6 +872,20 @@ function normalizeUi(cfg) {
844
872
  tabFollowing: strings.tabFollowing,
845
873
  tabOdds: strings.tabOdds,
846
874
  tabToday: strings.tabToday,
875
+ tabFixtures: strings.tabFixtures,
876
+ tabStandings: strings.tabStandings,
877
+ tabSquad: strings.tabSquad,
878
+ clubFixturesEmpty: strings.clubFixturesEmpty,
879
+ clubStandingsEmpty: strings.clubStandingsEmpty,
880
+ clubSquadEmpty: strings.clubSquadEmpty,
881
+ standingsColClub: strings.standingsColClub,
882
+ standingsColPlayed: strings.standingsColPlayed,
883
+ standingsColWon: strings.standingsColWon,
884
+ standingsColDrawn: strings.standingsColDrawn,
885
+ standingsColLost: strings.standingsColLost,
886
+ standingsColGoalDiff: strings.standingsColGoalDiff,
887
+ standingsColPoints: strings.standingsColPoints,
888
+ gamesPlaySegment: strings.gamesPlaySegment,
847
889
  sectionLive: strings.sectionLive,
848
890
  yourLeagues: strings.yourLeagues,
849
891
  topLeagues: strings.topLeagues,
@@ -1135,6 +1177,7 @@ function toMarketOddsVM(card) {
1135
1177
  mainLine: str(card.mainLine),
1136
1178
  pinEnabled: card.pinEnabled === true,
1137
1179
  statText: card.insight && typeof card.insight === "object" ? str(card.insight.text) : void 0,
1180
+ statTexts: Array.isArray(card.insights) ? card.insights.map((i) => str(i?.text)).filter((t) => !!t) : void 0,
1138
1181
  tag: card.tag === "your_market" ? "your_market" : void 0,
1139
1182
  live: card.live ?? null,
1140
1183
  marketCount: typeof card.marketCount === "number" && Number.isFinite(card.marketCount) ? card.marketCount : void 0
@@ -2478,6 +2521,7 @@ function useLiveMonitor(opts) {
2478
2521
  const marketOddsRef = useRef4(marketOdds);
2479
2522
  marketOddsRef.current = marketOdds;
2480
2523
  const hasToday = opts.hasToday ?? false;
2524
+ const clubEnabled = opts.clubEnabled ?? false;
2481
2525
  const marketKey = (matchId, dev) => `${matchId}:${dev}`;
2482
2526
  const getMarketOddsRef = useRef4(opts.getMarketOdds);
2483
2527
  getMarketOddsRef.current = opts.getMarketOdds;
@@ -2654,12 +2698,16 @@ function useLiveMonitor(opts) {
2654
2698
  if (wasEmpty && watchesLength > 0) void tick();
2655
2699
  }, [watchesLength, tick]);
2656
2700
  useEffect4(() => {
2701
+ if (clubEnabled && (activeTab === "today" || activeTab === "following" || activeTab === "odds")) {
2702
+ setActiveTabState("chat");
2703
+ return;
2704
+ }
2657
2705
  const matchPins = pins.filter((p) => p.kind === "match").length;
2658
2706
  const marketPins = pins.length - matchPins;
2659
2707
  if (activeTab === "following" && matchPins === 0) setActiveTabState(hasToday ? "today" : "chat");
2660
2708
  if (activeTab === "odds" && marketPins === 0) setActiveTabState(hasToday ? "today" : "chat");
2661
2709
  if (activeTab === "today" && !hasToday) setActiveTabState("chat");
2662
- }, [pins, activeTab, hasToday]);
2710
+ }, [pins, activeTab, hasToday, clubEnabled]);
2663
2711
  const prevIsOpenRef = useRef4(false);
2664
2712
  useEffect4(() => {
2665
2713
  const wasClosed = !prevIsOpenRef.current;
@@ -3024,7 +3072,7 @@ function useLeaderboard(conversation, { activeTab }) {
3024
3072
  const conversationRef = useRef7(conversation);
3025
3073
  conversationRef.current = conversation;
3026
3074
  useEffect7(() => {
3027
- if (activeTab !== "leaderboard" && activeTab !== "games") return;
3075
+ if (activeTab !== "games") return;
3028
3076
  let active = true;
3029
3077
  const doFetch = async () => {
3030
3078
  const conv = conversationRef.current;
@@ -3052,8 +3100,151 @@ function useLeaderboard(conversation, { activeTab }) {
3052
3100
  return { data, loading, refresh };
3053
3101
  }
3054
3102
 
3103
+ // src/useClubFixtures.ts
3104
+ import { useCallback as useCallback7, useEffect as useEffect8, useRef as useRef8, useState as useState7 } from "react";
3105
+ var CLUB_PROBE_RETRY_MS = 15e3;
3106
+ var CLUB_PROBE_MAX_ATTEMPTS = 3;
3107
+ function useClubFixtures(conversation) {
3108
+ const [enabled, setEnabled] = useState7(false);
3109
+ const [settled, setSettled] = useState7(false);
3110
+ const [fixtures, setFixtures] = useState7([]);
3111
+ const [loading, setLoading] = useState7(false);
3112
+ const [refreshCount, setRefreshCount] = useState7(0);
3113
+ const inFlightRef = useRef8(false);
3114
+ const hardOffRef = useRef8(false);
3115
+ const conversationRef = useRef8(conversation);
3116
+ conversationRef.current = conversation;
3117
+ const ready = conversation != null;
3118
+ useEffect8(() => {
3119
+ if (hardOffRef.current) return;
3120
+ let active = true;
3121
+ let retryTimeoutId;
3122
+ let attempts = 0;
3123
+ const doFetch = async () => {
3124
+ const conv = conversationRef.current;
3125
+ if (!conv || inFlightRef.current || !active) return;
3126
+ inFlightRef.current = true;
3127
+ setLoading(true);
3128
+ try {
3129
+ attempts += 1;
3130
+ const result = await conv.getClubFixtures();
3131
+ if (!active) return;
3132
+ if (result === null) {
3133
+ hardOffRef.current = true;
3134
+ setEnabled(false);
3135
+ setFixtures([]);
3136
+ } else {
3137
+ setFixtures(result.fixtures);
3138
+ setEnabled(true);
3139
+ }
3140
+ setSettled(true);
3141
+ } catch {
3142
+ if (!active) return;
3143
+ if (attempts < CLUB_PROBE_MAX_ATTEMPTS) {
3144
+ retryTimeoutId = window.setTimeout(() => {
3145
+ if (!hardOffRef.current) void doFetch();
3146
+ }, CLUB_PROBE_RETRY_MS);
3147
+ } else {
3148
+ setEnabled(false);
3149
+ setFixtures([]);
3150
+ setSettled(true);
3151
+ }
3152
+ } finally {
3153
+ inFlightRef.current = false;
3154
+ if (active) setLoading(false);
3155
+ }
3156
+ };
3157
+ void doFetch();
3158
+ return () => {
3159
+ active = false;
3160
+ inFlightRef.current = false;
3161
+ if (retryTimeoutId !== void 0) window.clearTimeout(retryTimeoutId);
3162
+ };
3163
+ }, [refreshCount, ready]);
3164
+ const refresh = useCallback7(() => setRefreshCount((c) => c + 1), []);
3165
+ return { enabled, settled, fixtures, loading, refresh };
3166
+ }
3167
+
3168
+ // src/useClubStandings.ts
3169
+ import { useCallback as useCallback8, useEffect as useEffect9, useRef as useRef9, useState as useState8 } from "react";
3170
+ function useClubStandings(conversation, { activeTab, enabled }) {
3171
+ const [data, setData] = useState8(null);
3172
+ const [loading, setLoading] = useState8(false);
3173
+ const [refreshCount, setRefreshCount] = useState8(0);
3174
+ const inFlightRef = useRef9(false);
3175
+ const conversationRef = useRef9(conversation);
3176
+ conversationRef.current = conversation;
3177
+ useEffect9(() => {
3178
+ if (activeTab !== "standings" || !enabled) return;
3179
+ let active = true;
3180
+ const doFetch = async () => {
3181
+ const conv = conversationRef.current;
3182
+ if (!conv || inFlightRef.current) return;
3183
+ inFlightRef.current = true;
3184
+ setLoading(true);
3185
+ try {
3186
+ const result = await conv.getClubStandings();
3187
+ if (active) setData(result?.rows ?? null);
3188
+ } catch {
3189
+ } finally {
3190
+ inFlightRef.current = false;
3191
+ if (active) setLoading(false);
3192
+ }
3193
+ };
3194
+ void doFetch();
3195
+ return () => {
3196
+ active = false;
3197
+ inFlightRef.current = false;
3198
+ };
3199
+ }, [activeTab, enabled, refreshCount]);
3200
+ const refresh = useCallback8(() => {
3201
+ setRefreshCount((c) => c + 1);
3202
+ }, []);
3203
+ const effectiveLoading = loading || activeTab === "standings" && enabled && data === null;
3204
+ return { data, loading: effectiveLoading, refresh };
3205
+ }
3206
+
3207
+ // src/useClubSquad.ts
3208
+ import { useCallback as useCallback9, useEffect as useEffect10, useRef as useRef10, useState as useState9 } from "react";
3209
+ function useClubSquad(conversation, { activeTab, enabled }) {
3210
+ const [data, setData] = useState9(null);
3211
+ const [loading, setLoading] = useState9(false);
3212
+ const [refreshCount, setRefreshCount] = useState9(0);
3213
+ const inFlightRef = useRef10(false);
3214
+ const conversationRef = useRef10(conversation);
3215
+ conversationRef.current = conversation;
3216
+ useEffect10(() => {
3217
+ if (activeTab !== "squad" || !enabled) return;
3218
+ let active = true;
3219
+ const doFetch = async () => {
3220
+ const conv = conversationRef.current;
3221
+ if (!conv || inFlightRef.current) return;
3222
+ inFlightRef.current = true;
3223
+ setLoading(true);
3224
+ try {
3225
+ const result = await conv.getClubSquad();
3226
+ if (active) setData(result?.players ?? null);
3227
+ } catch {
3228
+ } finally {
3229
+ inFlightRef.current = false;
3230
+ if (active) setLoading(false);
3231
+ }
3232
+ };
3233
+ void doFetch();
3234
+ return () => {
3235
+ active = false;
3236
+ inFlightRef.current = false;
3237
+ };
3238
+ }, [activeTab, enabled, refreshCount]);
3239
+ const refresh = useCallback9(() => {
3240
+ setRefreshCount((c) => c + 1);
3241
+ }, []);
3242
+ const effectiveLoading = loading || activeTab === "squad" && enabled && data === null;
3243
+ return { data, loading: effectiveLoading, refresh };
3244
+ }
3245
+
3055
3246
  // src/usePresetGrid.ts
3056
- import { useEffect as useEffect8, useRef as useRef8, useState as useState7 } from "react";
3247
+ import { useEffect as useEffect11, useRef as useRef11, useState as useState10 } from "react";
3057
3248
 
3058
3249
  // src/presetGrid.ts
3059
3250
  var DEFAULT_SINGLES_LIMITS = [1.3, 1.5, 1.7, 2];
@@ -3196,22 +3387,22 @@ function marketDisplay(cell, s) {
3196
3387
  // src/usePresetGrid.ts
3197
3388
  var GRID_MAX_AGE_MS = 6e5;
3198
3389
  function usePresetGrid({ getPricePresets, isOpen, locale, now = Date.now }) {
3199
- const [grid, setGrid] = useState7(null);
3200
- const keptRef = useRef8(null);
3201
- const localeRef = useRef8(locale);
3202
- const inFlightRef = useRef8(false);
3203
- const mountedRef = useRef8(true);
3204
- const getRef = useRef8(getPricePresets);
3390
+ const [grid, setGrid] = useState10(null);
3391
+ const keptRef = useRef11(null);
3392
+ const localeRef = useRef11(locale);
3393
+ const inFlightRef = useRef11(false);
3394
+ const mountedRef = useRef11(true);
3395
+ const getRef = useRef11(getPricePresets);
3205
3396
  getRef.current = getPricePresets;
3206
- const nowRef = useRef8(now);
3397
+ const nowRef = useRef11(now);
3207
3398
  nowRef.current = now;
3208
- useEffect8(() => {
3399
+ useEffect11(() => {
3209
3400
  mountedRef.current = true;
3210
3401
  return () => {
3211
3402
  mountedRef.current = false;
3212
3403
  };
3213
3404
  }, []);
3214
- useEffect8(() => {
3405
+ useEffect11(() => {
3215
3406
  if (localeRef.current !== locale) {
3216
3407
  localeRef.current = locale;
3217
3408
  keptRef.current = null;
@@ -3261,11 +3452,11 @@ function useEventLog() {
3261
3452
  }
3262
3453
 
3263
3454
  // src/popupTelemetry.ts
3264
- import { useCallback as useCallback7, useEffect as useEffect9, useRef as useRef9 } from "react";
3455
+ import { useCallback as useCallback10, useEffect as useEffect12, useRef as useRef12 } from "react";
3265
3456
  function usePopupTelemetry(log, isOpen, popupText, dismissPopup) {
3266
- const shownRef = useRef9(/* @__PURE__ */ new Set());
3267
- const closedTextRef = useRef9(null);
3268
- useEffect9(() => {
3457
+ const shownRef = useRef12(/* @__PURE__ */ new Set());
3458
+ const closedTextRef = useRef12(null);
3459
+ useEffect12(() => {
3269
3460
  if (isOpen) {
3270
3461
  if (closedTextRef.current) log?.log({ name: "popup_opened" });
3271
3462
  closedTextRef.current = null;
@@ -3277,17 +3468,17 @@ function usePopupTelemetry(log, isOpen, popupText, dismissPopup) {
3277
3468
  log?.log({ name: "popup_shown" });
3278
3469
  }
3279
3470
  }, [log, isOpen, popupText]);
3280
- return useCallback7(() => {
3471
+ return useCallback10(() => {
3281
3472
  log?.log({ name: "popup_dismissed" });
3282
3473
  dismissPopup();
3283
3474
  }, [log, dismissPopup]);
3284
3475
  }
3285
3476
 
3286
3477
  // src/openTelemetry.ts
3287
- import { useEffect as useEffect10, useRef as useRef10 } from "react";
3478
+ import { useEffect as useEffect13, useRef as useRef13 } from "react";
3288
3479
  function useOpenTelemetry(log, isOpen) {
3289
- const openLoggedRef = useRef10(false);
3290
- useEffect10(() => {
3480
+ const openLoggedRef = useRef13(false);
3481
+ useEffect13(() => {
3291
3482
  if (!isOpen) {
3292
3483
  openLoggedRef.current = false;
3293
3484
  return;
@@ -3299,10 +3490,10 @@ function useOpenTelemetry(log, isOpen) {
3299
3490
  }
3300
3491
 
3301
3492
  // src/components/ChatFab.tsx
3302
- import { useEffect as useEffect11, useRef as useRef11, useState as useState9 } from "react";
3493
+ import { useEffect as useEffect14, useRef as useRef14, useState as useState12 } from "react";
3303
3494
 
3304
3495
  // src/components/BrandMark.tsx
3305
- import { useState as useState8 } from "react";
3496
+ import { useState as useState11 } from "react";
3306
3497
 
3307
3498
  // src/assets/logo.ts
3308
3499
  var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
@@ -3365,7 +3556,7 @@ function DashboardIcon({ name }) {
3365
3556
  // src/components/BrandMark.tsx
3366
3557
  import { jsx as jsx2 } from "react/jsx-runtime";
3367
3558
  function BrandMark({ logoUrl, className }) {
3368
- const [failed, setFailed] = useState8(false);
3559
+ const [failed, setFailed] = useState11(false);
3369
3560
  if (!logoUrl || failed) return /* @__PURE__ */ jsx2(SsMark, { className });
3370
3561
  return /* @__PURE__ */ jsx2("img", { className, src: logoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
3371
3562
  }
@@ -3401,9 +3592,9 @@ function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss", ask
3401
3592
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
3402
3593
  function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup, dismissLabel = "Dismiss", introAllowed = false, onIntroStart, asks }) {
3403
3594
  const bubble = popupText ?? greeting;
3404
- const [intro, setIntro] = useState9(false);
3405
- const armedRef = useRef11(introAllowed);
3406
- useEffect11(() => {
3595
+ const [intro, setIntro] = useState12(false);
3596
+ const armedRef = useRef14(introAllowed);
3597
+ useEffect14(() => {
3407
3598
  if (armedRef.current && bubble) {
3408
3599
  armedRef.current = false;
3409
3600
  setIntro(true);
@@ -3417,10 +3608,10 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
3417
3608
  }
3418
3609
 
3419
3610
  // src/components/ChatPanel.tsx
3420
- import { useCallback as useCallback17, useEffect as useEffect28, useMemo as useMemo5, useRef as useRef24, useState as useState47 } from "react";
3611
+ import { useCallback as useCallback20, useEffect as useEffect31, useMemo as useMemo5, useRef as useRef27, useState as useState50 } from "react";
3421
3612
 
3422
3613
  // src/components/ChatHeader.tsx
3423
- import { useEffect as useEffect12, useRef as useRef12, useState as useState10 } from "react";
3614
+ import { useEffect as useEffect15, useRef as useRef15, useState as useState13 } from "react";
3424
3615
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
3425
3616
  function ChatHeader({
3426
3617
  onClose,
@@ -3432,15 +3623,15 @@ function ChatHeader({
3432
3623
  newConversationLabel = "New conversation",
3433
3624
  moreOptionsLabel = "More options"
3434
3625
  }) {
3435
- const [menuOpen, setMenuOpen] = useState10(false);
3436
- const wrapRef = useRef12(null);
3437
- const kebabRef = useRef12(null);
3438
- const firstItemRef = useRef12(null);
3626
+ const [menuOpen, setMenuOpen] = useState13(false);
3627
+ const wrapRef = useRef15(null);
3628
+ const kebabRef = useRef15(null);
3629
+ const firstItemRef = useRef15(null);
3439
3630
  const hasMenu = !!(canReset && onNewConversation);
3440
- useEffect12(() => {
3631
+ useEffect15(() => {
3441
3632
  if (menuOpen) firstItemRef.current?.focus();
3442
3633
  }, [menuOpen]);
3443
- useEffect12(() => {
3634
+ useEffect15(() => {
3444
3635
  if (!menuOpen) return;
3445
3636
  const onPointer = (e) => {
3446
3637
  if (!wrapRef.current?.contains(e.target)) setMenuOpen(false);
@@ -3496,7 +3687,7 @@ function ChatHeader({
3496
3687
  }
3497
3688
 
3498
3689
  // src/components/MessageList.tsx
3499
- import { useEffect as useEffect18, useRef as useRef15 } from "react";
3690
+ import { useEffect as useEffect21, useRef as useRef18 } from "react";
3500
3691
 
3501
3692
  // src/components/Markdown.tsx
3502
3693
  import ReactMarkdown from "react-markdown";
@@ -3514,7 +3705,7 @@ function Markdown({ text }) {
3514
3705
  }
3515
3706
 
3516
3707
  // src/components/EntityCardList.tsx
3517
- import { useState as useState11 } from "react";
3708
+ import { useState as useState14 } from "react";
3518
3709
  import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
3519
3710
  var MAX_VISIBLE = 3;
3520
3711
  var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
@@ -3598,7 +3789,7 @@ function ScopeTabs({ scopes, active, onSelect }) {
3598
3789
  )) });
3599
3790
  }
3600
3791
  function EntityCardItem({ c }) {
3601
- const [active, setActive] = useState11(0);
3792
+ const [active, setActive] = useState14(0);
3602
3793
  const hasBody = c.scopes.length > 0;
3603
3794
  if (!hasBody) {
3604
3795
  return /* @__PURE__ */ jsx7("div", { className: "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: /* @__PURE__ */ jsx7(CardHeader, { c, showScopeCrest: false }) });
@@ -3612,7 +3803,7 @@ function EntityCardItem({ c }) {
3612
3803
  ] });
3613
3804
  }
3614
3805
  function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMoreLabel = (n) => `Show ${n} more` }) {
3615
- const [expanded, setExpanded] = useState11(false);
3806
+ const [expanded, setExpanded] = useState14(false);
3616
3807
  if (cards.length === 0) return null;
3617
3808
  const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
3618
3809
  const overflow = cards.length - MAX_VISIBLE;
@@ -3623,10 +3814,10 @@ function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMore
3623
3814
  }
3624
3815
 
3625
3816
  // src/components/AddToSlipButton.tsx
3626
- import { useCallback as useCallback9, useState as useState12 } from "react";
3817
+ import { useCallback as useCallback12, useState as useState15 } from "react";
3627
3818
 
3628
3819
  // src/slipAdd.ts
3629
- import { useCallback as useCallback8 } from "react";
3820
+ import { useCallback as useCallback11 } from "react";
3630
3821
  import { isAddToSlipResult } from "@sensiblestats/widget-sdk";
3631
3822
 
3632
3823
  // src/slipStateContext.ts
@@ -3648,7 +3839,7 @@ function useSlipAdd(slip, ui) {
3648
3839
  const slipState = useSlipState();
3649
3840
  const handler = slip.onAddToSlip;
3650
3841
  const rawLabels = !!ui?.rawBettingLabels;
3651
- return useCallback8(async (selection, { marketDeveloperName, selectionLabel, line }) => {
3842
+ return useCallback11(async (selection, { marketDeveloperName, selectionLabel, line }) => {
3652
3843
  if (!handler) return { kind: "failed" };
3653
3844
  const pick = slipPickFields(selection, rawLabels ? selectionLabel : void 0, line);
3654
3845
  if (marketDeveloperName !== void 0) {
@@ -3685,11 +3876,11 @@ function useSlipAdd(slip, ui) {
3685
3876
  }
3686
3877
 
3687
3878
  // src/components/Toast.tsx
3688
- import { useEffect as useEffect13 } from "react";
3879
+ import { useEffect as useEffect16 } from "react";
3689
3880
  import { jsx as jsx8 } from "react/jsx-runtime";
3690
3881
  var DISMISS_MS = 4e3;
3691
3882
  function Toast({ toast, onDismiss }) {
3692
- useEffect13(() => {
3883
+ useEffect16(() => {
3693
3884
  if (!toast) return;
3694
3885
  const timer = setTimeout(onDismiss, DISMISS_MS);
3695
3886
  return () => clearTimeout(timer);
@@ -3701,10 +3892,10 @@ function Toast({ toast, onDismiss }) {
3701
3892
  // src/components/AddToSlipButton.tsx
3702
3893
  import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
3703
3894
  function SlipButton({ selection, shownOdds, marketDeveloperName, selectionLabel, line, slip, ui, price, ariaLabel }) {
3704
- const [pending, setPending] = useState12(false);
3705
- const [settledLocal, setSettledLocal] = useState12(false);
3706
- const [toast, setToast] = useState12(null);
3707
- const dismiss = useCallback9(() => setToast(null), []);
3895
+ const [pending, setPending] = useState15(false);
3896
+ const [settledLocal, setSettledLocal] = useState15(false);
3897
+ const [toast, setToast] = useState15(null);
3898
+ const dismiss = useCallback12(() => setToast(null), []);
3708
3899
  const add = useSlipAdd(slip, ui);
3709
3900
  const slipState = useSlipState();
3710
3901
  const handler = slip.onAddToSlip;
@@ -3792,14 +3983,14 @@ function OddsMovementBadge({
3792
3983
  }
3793
3984
 
3794
3985
  // src/components/Crest.tsx
3795
- import { useState as useState13 } from "react";
3986
+ import { useState as useState16 } from "react";
3796
3987
  import { jsx as jsx11 } from "react/jsx-runtime";
3797
3988
  function initials2(name) {
3798
3989
  return (name ?? "").trim().slice(0, 1).toUpperCase() || "?";
3799
3990
  }
3800
3991
  function Crest2({ url, name, kind }) {
3801
3992
  const cls = kind === "comp" ? "ss-w-bi-comp-logo" : "ss-w-bi-crest";
3802
- const [failed, setFailed] = useState13(false);
3993
+ const [failed, setFailed] = useState16(false);
3803
3994
  if (url && !failed) {
3804
3995
  return /* @__PURE__ */ jsx11("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
3805
3996
  }
@@ -3807,7 +3998,7 @@ function Crest2({ url, name, kind }) {
3807
3998
  }
3808
3999
 
3809
4000
  // src/components/PinToggle.tsx
3810
- import { useCallback as useCallback10, useState as useState14 } from "react";
4001
+ import { useCallback as useCallback13, useState as useState17 } from "react";
3811
4002
  import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
3812
4003
  var PIN_GLYPHS = {
3813
4004
  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" },
@@ -3815,8 +4006,8 @@ var PIN_GLYPHS = {
3815
4006
  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" }
3816
4007
  };
3817
4008
  function PinToggle({ pin, monitor, ui, market }) {
3818
- const [toast, setToast] = useState14(null);
3819
- const dismiss = useCallback10(() => setToast(null), []);
4009
+ const [toast, setToast] = useState17(null);
4010
+ const dismiss = useCallback13(() => setToast(null), []);
3820
4011
  const log = useEventLog();
3821
4012
  if (!monitor || !monitor.enabled) return null;
3822
4013
  const key = pinKey(pin);
@@ -3873,11 +4064,11 @@ function PinToggle({ pin, monitor, ui, market }) {
3873
4064
  }
3874
4065
 
3875
4066
  // src/components/PriceHistoryButton.tsx
3876
- import { useCallback as useCallback11, useState as useState15 } from "react";
4067
+ import { useCallback as useCallback14, useState as useState18 } from "react";
3877
4068
  import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
3878
4069
  function PriceHistoryButton({ selection, monitor, ui }) {
3879
- const [toast, setToast] = useState15(null);
3880
- const dismiss = useCallback11(() => setToast(null), []);
4070
+ const [toast, setToast] = useState18(null);
4071
+ const dismiss = useCallback14(() => setToast(null), []);
3881
4072
  const log = useEventLog();
3882
4073
  if (!monitor || !monitor.enabled) return null;
3883
4074
  const name = joinSelection(selection.selectionLabel ?? void 0, selection.line ?? void 0);
@@ -3992,15 +4183,15 @@ function BettingInsightList({ insights, ui, slip, monitor }) {
3992
4183
  }
3993
4184
 
3994
4185
  // src/components/AddAllToSlipButton.tsx
3995
- import { useCallback as useCallback12, useState as useState16 } from "react";
4186
+ import { useCallback as useCallback15, useState as useState19 } from "react";
3996
4187
  import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
3997
4188
  function AddAllToSlipButton({ legs, slip, ui }) {
3998
4189
  const add = useSlipAdd(slip, ui);
3999
4190
  const slipState = useSlipState();
4000
- const [pending, setPending] = useState16(false);
4001
- const [settledLocal, setSettledLocal] = useState16({});
4002
- const [toast, setToast] = useState16(null);
4003
- const dismiss = useCallback12(() => setToast(null), []);
4191
+ const [pending, setPending] = useState19(false);
4192
+ const [settledLocal, setSettledLocal] = useState19({});
4193
+ const [toast, setToast] = useState19(null);
4194
+ const dismiss = useCallback15(() => setToast(null), []);
4004
4195
  if (!ui || !slip.onAddToSlip || legs.length < 2) return null;
4005
4196
  const settled = slipState ? slipState.settled : settledLocal;
4006
4197
  const open = legs.filter((leg) => !settled[leg.matchOddsId]);
@@ -4110,7 +4301,7 @@ function ComboCardList({ cards, ui, slip, monitor }) {
4110
4301
  }
4111
4302
 
4112
4303
  // src/components/MarketOddsCardList.tsx
4113
- import { useEffect as useEffect14, useState as useState17 } from "react";
4304
+ import { useEffect as useEffect17, useState as useState20 } from "react";
4114
4305
 
4115
4306
  // src/components/AllMarketsButton.tsx
4116
4307
  import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
@@ -4173,7 +4364,7 @@ function fmtHhMm(iso, locale) {
4173
4364
  return new Date(iso).toLocaleTimeString(locale, { hour: "2-digit", minute: "2-digit", hour12: false });
4174
4365
  }
4175
4366
  function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }) {
4176
- const [open, setOpen] = useState17(false);
4367
+ const [open, setOpen] = useState20(false);
4177
4368
  const kickoffFallback = vm.kickoffUtc && ui?.bettingKickoff ? ui.bettingKickoff(vm.kickoffUtc) : void 0;
4178
4369
  const kickoff = vm.kickoffLabel ?? (kickoffFallback ? `${kickoffFallback.dayLabel} ${kickoffFallback.time}` : void 0);
4179
4370
  const hasNamedTeams = !!vm.homeTeamName && !!vm.awayTeamName;
@@ -4183,9 +4374,9 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
4183
4374
  const asOfMs = live ? new Date(live.asOfUtc).getTime() : NaN;
4184
4375
  const isStale = live != null && !isClosed && (vm.awaitingLiveUpdate === true || Date.now() - asOfMs > STALE_AFTER_MS);
4185
4376
  const staleTime = isStale && live ? fmtHhMm(live.asOfUtc, ui?.locale ?? "en") : null;
4186
- const [, setStaleTick] = useState17(0);
4377
+ const [, setStaleTick] = useState20(0);
4187
4378
  const watchStale = live != null && !isClosed && !isStale;
4188
- useEffect14(() => {
4379
+ useEffect17(() => {
4189
4380
  if (!watchStale) return;
4190
4381
  const id = window.setTimeout(() => setStaleTick((n) => n + 1), Math.max(0, asOfMs + STALE_AFTER_MS - Date.now()) + 1);
4191
4382
  return () => window.clearTimeout(id);
@@ -4239,7 +4430,7 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
4239
4430
  ] }) : null
4240
4431
  ] }) : null
4241
4432
  ] }),
4242
- vm.statText && !hideHeader && !pinRef ? /* @__PURE__ */ jsx18("div", { className: "ss-w-mo-stat", children: vm.statText }) : null,
4433
+ !hideHeader && !pinRef ? (vm.statTexts && vm.statTexts.length > 0 ? vm.statTexts : vm.statText ? [vm.statText] : []).map((text, i) => /* @__PURE__ */ jsx18("div", { className: "ss-w-mo-stat", children: text }, i)) : null,
4243
4434
  isClosed ? /* @__PURE__ */ jsx18("div", { className: "ss-w-mo-closed", children: closedReason === "suspended" ? /* @__PURE__ */ jsx18("span", { children: ui?.liveCard.suspended ?? "Market suspended" }) : closedReason === "no_live_price" ? /* @__PURE__ */ jsx18("span", { children: ui?.liveCard.noPrice ?? "No live price available" }) : closedReason === "full_time" ? /* @__PURE__ */ jsx18("span", { children: ui?.liveCard.fullTime ?? "Full time" }) : null }) : /* @__PURE__ */ jsxs14(Fragment2, { children: [
4244
4435
  /* @__PURE__ */ jsxs14("div", { className: "ss-w-mo-rows", children: [
4245
4436
  vm.mainRows.map((row) => /* @__PURE__ */ jsx18(OddsRow, { vm, row, ui, slip, inSlipIds, history, suppressSlip: isStale }, row.key)),
@@ -4264,7 +4455,7 @@ function MarketOddsCardList({ cards, ui, slip, monitor, inSlipIds, hideHeader, p
4264
4455
  }
4265
4456
 
4266
4457
  // src/components/CompactOddsList.tsx
4267
- import { useEffect as useEffect15, useRef as useRef13, useState as useState18 } from "react";
4458
+ import { useEffect as useEffect18, useRef as useRef16, useState as useState21 } from "react";
4268
4459
 
4269
4460
  // src/compactList.ts
4270
4461
  var COMPACT_MIN_CARDS = 3;
@@ -4378,11 +4569,11 @@ function Row({ row, columns, ui, slip, monitor, rowRef }) {
4378
4569
  ] });
4379
4570
  }
4380
4571
  function CompactOddsList({ list, ui, slip, monitor }) {
4381
- const [shown, setShown] = useState18(COMPACT_PAGE);
4572
+ const [shown, setShown] = useState21(COMPACT_PAGE);
4382
4573
  const hidden = list.rowCount - shown;
4383
- const [focusIndex, setFocusIndex] = useState18(null);
4384
- const focusRef = useRef13(null);
4385
- useEffect15(() => {
4574
+ const [focusIndex, setFocusIndex] = useState21(null);
4575
+ const focusRef = useRef16(null);
4576
+ useEffect18(() => {
4386
4577
  if (focusIndex !== null) focusRef.current?.focus();
4387
4578
  }, [focusIndex]);
4388
4579
  let left = shown;
@@ -4687,7 +4878,7 @@ function FixtureCard({ card }) {
4687
4878
  }
4688
4879
 
4689
4880
  // src/components/dashboard/CountdownCard.tsx
4690
- import { Fragment as Fragment6, useEffect as useEffect16, useState as useState19 } from "react";
4881
+ import { Fragment as Fragment6, useEffect as useEffect19, useState as useState22 } from "react";
4691
4882
  import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
4692
4883
  var DAY_MS = 864e5;
4693
4884
  function remainingSegments(kickoffUnix, nowMs, withSeconds) {
@@ -4706,12 +4897,12 @@ function remainingSegments(kickoffUnix, nowMs, withSeconds) {
4706
4897
  function CountdownCard({ card }) {
4707
4898
  const { data } = card;
4708
4899
  const unitLabel = { d: data.daysUnit, h: data.hoursUnit, m: data.minutesUnit, s: data.secondsUnit };
4709
- const [nowMs, setNowMs] = useState19(() => Date.now());
4710
- const [reduced] = useState19(
4900
+ const [nowMs, setNowMs] = useState22(() => Date.now());
4901
+ const [reduced] = useState22(
4711
4902
  () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
4712
4903
  );
4713
4904
  const withinDay = data.kickoffUnix * 1e3 - nowMs < DAY_MS;
4714
- useEffect16(() => {
4905
+ useEffect19(() => {
4715
4906
  if (reduced) return;
4716
4907
  const id = window.setInterval(() => setNowMs(Date.now()), withinDay ? 1e3 : 6e4);
4717
4908
  return () => window.clearInterval(id);
@@ -4730,7 +4921,7 @@ function CountdownCard({ card }) {
4730
4921
  }
4731
4922
 
4732
4923
  // src/components/dashboard/InjuriesCard.tsx
4733
- import { useState as useState20 } from "react";
4924
+ import { useState as useState23 } from "react";
4734
4925
  import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
4735
4926
  var SHOWN = 3;
4736
4927
  function ColHead({ name, crestUrl }) {
@@ -4753,7 +4944,7 @@ function InjuryList({ rows, emptyLabel, limit }) {
4753
4944
  }
4754
4945
  function InjuriesCard({ card, ui }) {
4755
4946
  const { data } = card;
4756
- const [expanded, setExpanded] = useState20(false);
4947
+ const [expanded, setExpanded] = useState23(false);
4757
4948
  const hidden = Math.max(0, data.ours.length - SHOWN) + Math.max(0, data.theirs.length - SHOWN);
4758
4949
  const limit = expanded ? void 0 : SHOWN;
4759
4950
  const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
@@ -4859,7 +5050,7 @@ function LinksCard({ card }) {
4859
5050
  }
4860
5051
 
4861
5052
  // src/components/dashboard/PostMatchResultCard.tsx
4862
- import { useState as useState21 } from "react";
5053
+ import { useState as useState24 } from "react";
4863
5054
  import { jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
4864
5055
  function initials3(name) {
4865
5056
  return name.trim().slice(0, 3).toUpperCase();
@@ -4869,7 +5060,7 @@ function PostMatchCrest({
4869
5060
  name,
4870
5061
  side
4871
5062
  }) {
4872
- const [failed, setFailed] = useState21(false);
5063
+ const [failed, setFailed] = useState24(false);
4873
5064
  const cls = `ss-w-fandash-postmatch-crest ss-w-fandash-postmatch-crest--${side}`;
4874
5065
  if (url && !failed) {
4875
5066
  return /* @__PURE__ */ jsx32("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -5068,10 +5259,10 @@ function RestingFormCard({ card }) {
5068
5259
  }
5069
5260
 
5070
5261
  // src/components/dashboard/LiveScoreCard.tsx
5071
- import { useRef as useRef14, useState as useState23 } from "react";
5262
+ import { useRef as useRef17, useState as useState26 } from "react";
5072
5263
 
5073
5264
  // src/useLiveClock.ts
5074
- import { useEffect as useEffect17, useState as useState22 } from "react";
5265
+ import { useEffect as useEffect20, useState as useState25 } from "react";
5075
5266
  var TICK_MS = 6e4;
5076
5267
  var MAX_LIVE_TICK_MINUTES = 15;
5077
5268
  function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
@@ -5080,10 +5271,10 @@ function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
5080
5271
  return minute + Math.min(Math.max(0, elapsedMinutes), MAX_LIVE_TICK_MINUTES);
5081
5272
  }
5082
5273
  function useLiveClock(minute, clockRunning, receivedAtMs) {
5083
- const [displayMinute, setDisplayMinute] = useState22(
5274
+ const [displayMinute, setDisplayMinute] = useState25(
5084
5275
  () => computeDisplayMinute(minute, clockRunning, receivedAtMs)
5085
5276
  );
5086
- useEffect17(() => {
5277
+ useEffect20(() => {
5087
5278
  setDisplayMinute(computeDisplayMinute(minute, clockRunning, receivedAtMs));
5088
5279
  if (!clockRunning) return;
5089
5280
  const id = window.setInterval(() => {
@@ -5100,7 +5291,7 @@ function initials5(name) {
5100
5291
  return name.trim().slice(0, 3).toUpperCase();
5101
5292
  }
5102
5293
  function LiveCrest({ url, name, side }) {
5103
- const [failed, setFailed] = useState23(false);
5294
+ const [failed, setFailed] = useState26(false);
5104
5295
  const cls = `ss-w-fandash-live-crest ss-w-fandash-live-crest--${side}`;
5105
5296
  if (url && !failed) {
5106
5297
  return /* @__PURE__ */ jsx41("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -5119,7 +5310,7 @@ function LiveScoreCard({
5119
5310
  }) {
5120
5311
  const { data } = card;
5121
5312
  const seedKey = `${data.minute}:${data.homeScore}:${data.awayScore}`;
5122
- const seedRef = useRef14(null);
5313
+ const seedRef = useRef17(null);
5123
5314
  if (!seedRef.current || seedRef.current.key !== seedKey) {
5124
5315
  seedRef.current = { key: seedKey, receivedAtMs: Date.now() };
5125
5316
  }
@@ -5159,7 +5350,7 @@ function LiveScoreCard({
5159
5350
  }
5160
5351
 
5161
5352
  // src/components/dashboard/LiveTimelineCard.tsx
5162
- import { useState as useState24 } from "react";
5353
+ import { useState as useState27 } from "react";
5163
5354
  import { jsx as jsx42, jsxs as jsxs38 } from "react/jsx-runtime";
5164
5355
  var SHOWN2 = 3;
5165
5356
  function EventIcon({ type }) {
@@ -5201,7 +5392,7 @@ function EventRow({ e }) {
5201
5392
  ] });
5202
5393
  }
5203
5394
  function LiveTimelineCard({ card, ui }) {
5204
- const [expanded, setExpanded] = useState24(false);
5395
+ const [expanded, setExpanded] = useState27(false);
5205
5396
  const events = card.data.events;
5206
5397
  if (!events || events.length === 0) return null;
5207
5398
  const sorted = [...events].sort((a, b) => b.minute - a.minute);
@@ -5443,11 +5634,11 @@ function turnAnchor(messages) {
5443
5634
  }
5444
5635
  function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
5445
5636
  const { state, send } = controller;
5446
- const listRef = useRef15(null);
5447
- const endRef = useRef15(null);
5448
- const pinnedRef = useRef15(true);
5449
- const anchoredTurnRef = useRef15(null);
5450
- useEffect18(() => {
5637
+ const listRef = useRef18(null);
5638
+ const endRef = useRef18(null);
5639
+ const pinnedRef = useRef18(true);
5640
+ const anchoredTurnRef = useRef18(null);
5641
+ useEffect21(() => {
5451
5642
  const anchor = turnAnchor(state.messages);
5452
5643
  const list = listRef.current;
5453
5644
  if (anchor && anchor.turnId !== anchoredTurnRef.current) {
@@ -5504,13 +5695,13 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
5504
5695
  }
5505
5696
 
5506
5697
  // src/components/ChatInput.tsx
5507
- import { forwardRef, useEffect as useEffect19, useImperativeHandle, useRef as useRef16, useState as useState25 } from "react";
5698
+ import { forwardRef, useEffect as useEffect22, useImperativeHandle, useRef as useRef19, useState as useState28 } from "react";
5508
5699
  import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
5509
5700
  var ChatInput = forwardRef(function ChatInput2({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message", disabled = false, onType }, ref) {
5510
- const [value, setValue] = useState25("");
5511
- const textareaRef = useRef16(null);
5512
- const stopRef = useRef16(null);
5513
- const textBoxWantsFocusRef = useRef16(false);
5701
+ const [value, setValue] = useState28("");
5702
+ const textareaRef = useRef19(null);
5703
+ const stopRef = useRef19(null);
5704
+ const textBoxWantsFocusRef = useRef19(false);
5514
5705
  const submit = () => {
5515
5706
  if (disabled) return;
5516
5707
  const t = value.trim();
@@ -5536,7 +5727,7 @@ var ChatInput = forwardRef(function ChatInput2({ placeholder, streaming, onSend,
5536
5727
  stopRef.current?.focus();
5537
5728
  }
5538
5729
  }), []);
5539
- useEffect19(() => {
5730
+ useEffect22(() => {
5540
5731
  if (streaming || disabled || !textBoxWantsFocusRef.current) return;
5541
5732
  textBoxWantsFocusRef.current = false;
5542
5733
  const box = textareaRef.current;
@@ -5569,16 +5760,19 @@ var ChatInput = forwardRef(function ChatInput2({ placeholder, streaming, onSend,
5569
5760
 
5570
5761
  // src/components/TabBar.tsx
5571
5762
  import { jsx as jsx50, jsxs as jsxs45 } from "react/jsx-runtime";
5572
- function TabBar({ monitor, ui, matchCount, oddsCount, todayCount, hasToday, gamesEnabled }) {
5763
+ function TabBar({ monitor, ui, matchCount, oddsCount, todayCount, hasToday, gamesEnabled, clubEnabled }) {
5573
5764
  const tabs = [
5574
5765
  { tab: "chat", label: ui.tabChat, count: 0, dot: monitor.chatDot },
5575
- ...hasToday ? [{ tab: "today", label: ui.tabToday, count: todayCount, dot: monitor.todayDot }] : [],
5576
- ...matchCount > 0 ? [{ tab: "following", label: ui.tabFollowing, count: matchCount, dot: monitor.matchesDot }] : [],
5577
- ...oddsCount > 0 ? [{ tab: "odds", label: ui.tabOdds, count: oddsCount, dot: monitor.oddsDot }] : [],
5578
- ...gamesEnabled ? [
5579
- { tab: "games", label: ui.tabGames, count: 0, dot: false },
5580
- { tab: "leaderboard", label: ui.tabLeaderboard, count: 0, dot: false }
5581
- ] : []
5766
+ ...clubEnabled ? [
5767
+ { tab: "fixtures", label: ui.tabFixtures, count: 0, dot: false },
5768
+ { tab: "standings", label: ui.tabStandings, count: 0, dot: false },
5769
+ { tab: "squad", label: ui.tabSquad, count: 0, dot: false }
5770
+ ] : [
5771
+ ...hasToday ? [{ tab: "today", label: ui.tabToday, count: todayCount, dot: monitor.todayDot }] : [],
5772
+ ...matchCount > 0 ? [{ tab: "following", label: ui.tabFollowing, count: matchCount, dot: monitor.matchesDot }] : [],
5773
+ ...oddsCount > 0 ? [{ tab: "odds", label: ui.tabOdds, count: oddsCount, dot: monitor.oddsDot }] : []
5774
+ ],
5775
+ ...gamesEnabled ? [{ tab: "games", label: ui.tabGames, count: 0, dot: false }] : []
5582
5776
  ];
5583
5777
  if (tabs.length < 2) return null;
5584
5778
  return /* @__PURE__ */ jsx50("div", { className: "ss-w-tabs", role: "tablist", children: tabs.map(({ tab, label, count, dot }) => {
@@ -5658,10 +5852,10 @@ function MarketAccordion({ match, monitor, ui, slip }) {
5658
5852
  }
5659
5853
 
5660
5854
  // src/components/LiveFactBlock.tsx
5661
- import { useState as useState26 } from "react";
5855
+ import { useState as useState29 } from "react";
5662
5856
  import { jsx as jsx52, jsxs as jsxs47 } from "react/jsx-runtime";
5663
5857
  function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
5664
- const [expanded, setExpanded] = useState26(false);
5858
+ const [expanded, setExpanded] = useState29(false);
5665
5859
  const [current, ...earlier] = facts;
5666
5860
  if (!current) return null;
5667
5861
  const m = current.market;
@@ -5927,7 +6121,7 @@ function OddsPanel({ monitor, ui, slip }) {
5927
6121
  }
5928
6122
 
5929
6123
  // src/components/TodayPanel.tsx
5930
- import { useEffect as useEffect21, useId as useId2, useMemo as useMemo4, useState as useState29 } from "react";
6124
+ import { useEffect as useEffect24, useId as useId2, useMemo as useMemo4, useState as useState32 } from "react";
5931
6125
 
5932
6126
  // src/placement.ts
5933
6127
  function placeLeagues(visible, pinnedMatchIds) {
@@ -5990,11 +6184,11 @@ function matchingFixtures(group, query) {
5990
6184
  }
5991
6185
 
5992
6186
  // src/useStarTap.ts
5993
- import { useCallback as useCallback13, useRef as useRef17, useState as useState27 } from "react";
6187
+ import { useCallback as useCallback16, useRef as useRef20, useState as useState30 } from "react";
5994
6188
  function useStarTap(starLeague) {
5995
- const [pendingId, setPendingId] = useState27(null);
5996
- const pendingRef = useRef17(null);
5997
- const tap = useCallback13(async (competitionId, next) => {
6189
+ const [pendingId, setPendingId] = useState30(null);
6190
+ const pendingRef = useRef20(null);
6191
+ const tap = useCallback16(async (competitionId, next) => {
5998
6192
  if (pendingRef.current !== null) return false;
5999
6193
  pendingRef.current = competitionId;
6000
6194
  setPendingId(competitionId);
@@ -6053,7 +6247,7 @@ function LeagueTile({ group, starClickable: starClickable2, disambiguate, onOpen
6053
6247
  }
6054
6248
 
6055
6249
  // src/components/LeagueDetail.tsx
6056
- import { useEffect as useEffect20, useState as useState28 } from "react";
6250
+ import { useEffect as useEffect23, useState as useState31 } from "react";
6057
6251
 
6058
6252
  // src/components/FixtureRow.tsx
6059
6253
  import { jsx as jsx56, jsxs as jsxs51 } from "react/jsx-runtime";
@@ -6088,11 +6282,11 @@ function FixtureRow({ match, state, stale, ui, monitor }) {
6088
6282
  import { jsx as jsx57, jsxs as jsxs52 } from "react/jsx-runtime";
6089
6283
  var STAR_PATH2 = "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";
6090
6284
  function LeagueDetail({ group, position, states, stale, ui, monitor, starTap, onBack, onPrev, onNext }) {
6091
- const [toast, setToast] = useState28(null);
6092
- useEffect20(() => {
6285
+ const [toast, setToast] = useState31(null);
6286
+ useEffect23(() => {
6093
6287
  setToast(null);
6094
6288
  }, [group.competitionId]);
6095
- useEffect20(() => {
6289
+ useEffect23(() => {
6096
6290
  if (toast === null) return;
6097
6291
  const id = setTimeout(() => setToast(null), 4e3);
6098
6292
  return () => clearTimeout(id);
@@ -6224,7 +6418,7 @@ function LeagueRowGroup({ group, states, stale, cap, starClickable: starClickabl
6224
6418
  }
6225
6419
 
6226
6420
  // src/components/games/ui/SearchField.tsx
6227
- import { useCallback as useCallback14, useRef as useRef18 } from "react";
6421
+ import { useCallback as useCallback17, useRef as useRef21 } from "react";
6228
6422
 
6229
6423
  // src/components/games/ui/icons.tsx
6230
6424
  import { jsx as jsx59 } from "react/jsx-runtime";
@@ -6263,8 +6457,8 @@ var IconFlame = ({ size = 16 }) => svg(size, /* @__PURE__ */ jsx59("path", { d:
6263
6457
  // src/components/games/ui/SearchField.tsx
6264
6458
  import { jsx as jsx60, jsxs as jsxs54 } from "react/jsx-runtime";
6265
6459
  function SearchField({ id, label, labelHidden = false, placeholder, value, onChange, disabled, inputRef, onKeyDown, clearLabel }) {
6266
- const localRef = useRef18(null);
6267
- const setInputRef = useCallback14((node) => {
6460
+ const localRef = useRef21(null);
6461
+ const setInputRef = useCallback17((node) => {
6268
6462
  localRef.current = node;
6269
6463
  if (typeof inputRef === "function") inputRef(node);
6270
6464
  else if (inputRef) inputRef.current = node;
@@ -6309,10 +6503,10 @@ import { Fragment as Fragment7, jsx as jsx61, jsxs as jsxs55 } from "react/jsx-r
6309
6503
  function TodayPanel({ discovery, ui, monitor }) {
6310
6504
  const { groups, states, stale, starLeague } = discovery;
6311
6505
  const searchId = useId2();
6312
- const [query, setQuery] = useState29("");
6313
- const [selectedCompetitionId, setSelectedCompetitionId] = useState29(null);
6314
- const [toast, setToast] = useState29(null);
6315
- useEffect21(() => {
6506
+ const [query, setQuery] = useState32("");
6507
+ const [selectedCompetitionId, setSelectedCompetitionId] = useState32(null);
6508
+ const [toast, setToast] = useState32(null);
6509
+ useEffect24(() => {
6316
6510
  if (toast === null) return;
6317
6511
  const id = setTimeout(() => setToast(null), 4e3);
6318
6512
  return () => clearTimeout(id);
@@ -6358,7 +6552,7 @@ function TodayPanel({ discovery, ui, monitor }) {
6358
6552
  }
6359
6553
  const openIndex = selectedCompetitionId === null ? -1 : placement.order.findIndex((g) => g.competitionId === selectedCompetitionId);
6360
6554
  const openGroup = openIndex === -1 ? void 0 : placement.order[openIndex];
6361
- useEffect21(() => {
6555
+ useEffect24(() => {
6362
6556
  if (selectedCompetitionId !== null && openGroup === void 0) setSelectedCompetitionId(null);
6363
6557
  }, [selectedCompetitionId, openGroup]);
6364
6558
  const liveRows = stale ? [] : visibleGroups.flatMap((group) => group.matches.filter((m) => isTreatedLive(states[m.matchId], stale)).map((match) => ({ match, rank: group.rank }))).sort((a, b) => a.rank - b.rank);
@@ -6505,7 +6699,7 @@ function TodayPanel({ discovery, ui, monitor }) {
6505
6699
  }
6506
6700
 
6507
6701
  // src/components/GamesPanel.tsx
6508
- import { useEffect as useEffect25, useState as useState43 } from "react";
6702
+ import { useEffect as useEffect28, useState as useState47 } from "react";
6509
6703
 
6510
6704
  // src/components/GamesLoginWall.tsx
6511
6705
  import { jsx as jsx62 } from "react/jsx-runtime";
@@ -6514,7 +6708,7 @@ function GamesLoginWall({ ui }) {
6514
6708
  }
6515
6709
 
6516
6710
  // src/components/GamesHub.tsx
6517
- import { useEffect as useEffect22, useState as useState30 } from "react";
6711
+ import { useEffect as useEffect25, useState as useState33 } from "react";
6518
6712
 
6519
6713
  // src/components/games/ui/gameMeta.ts
6520
6714
  function prettifyGameId(gameId) {
@@ -6665,8 +6859,8 @@ function pickHeroGame(games) {
6665
6859
  }
6666
6860
  var tileKey = (g) => `${g.gameId}-${g.gameDay}-${g.fixtureId}`;
6667
6861
  function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
6668
- const [, setTick] = useState30(0);
6669
- useEffect22(() => {
6862
+ const [, setTick] = useState33(0);
6863
+ useEffect25(() => {
6670
6864
  const id = setInterval(() => setTick((t) => t + 1), 6e4);
6671
6865
  return () => clearInterval(id);
6672
6866
  }, []);
@@ -6726,10 +6920,10 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
6726
6920
  }
6727
6921
 
6728
6922
  // src/components/GameScreenHost.tsx
6729
- import { useEffect as useEffect24, useRef as useRef21, useState as useState42 } from "react";
6923
+ import { useEffect as useEffect27, useRef as useRef24, useState as useState45 } from "react";
6730
6924
 
6731
6925
  // src/useGamePlay.ts
6732
- import { useCallback as useCallback15, useRef as useRef19, useState as useState31 } from "react";
6926
+ import { useCallback as useCallback18, useRef as useRef22, useState as useState34 } from "react";
6733
6927
  function toSubmitResult(payload) {
6734
6928
  return {
6735
6929
  // 'pending' means the play is recorded but awaiting resolution (fixture games)
@@ -6741,17 +6935,17 @@ function toSubmitResult(payload) {
6741
6935
  };
6742
6936
  }
6743
6937
  function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh }) {
6744
- const [result, setResult] = useState31(null);
6745
- const [submitting, setSubmitting] = useState31(false);
6746
- const [rawStatus, setRawStatus] = useState31(null);
6747
- const inFlightRef = useRef19(false);
6748
- const convRef = useRef19(conversation);
6938
+ const [result, setResult] = useState34(null);
6939
+ const [submitting, setSubmitting] = useState34(false);
6940
+ const [rawStatus, setRawStatus] = useState34(null);
6941
+ const inFlightRef = useRef22(false);
6942
+ const convRef = useRef22(conversation);
6749
6943
  convRef.current = conversation;
6750
- const optsRef = useRef19({ gameId, gameDay, fixtureId, locale, refresh });
6944
+ const optsRef = useRef22({ gameId, gameDay, fixtureId, locale, refresh });
6751
6945
  optsRef.current = { gameId, gameDay, fixtureId, locale, refresh };
6752
- const resultRef = useRef19(null);
6946
+ const resultRef = useRef22(null);
6753
6947
  resultRef.current = result;
6754
- const refetch = useCallback15(async () => {
6948
+ const refetch = useCallback18(async () => {
6755
6949
  const conv = convRef.current;
6756
6950
  if (!conv) return;
6757
6951
  const opts = optsRef.current;
@@ -6767,7 +6961,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
6767
6961
  } catch {
6768
6962
  }
6769
6963
  }, []);
6770
- const submit = useCallback15(async (answerJson) => {
6964
+ const submit = useCallback18(async (answerJson) => {
6771
6965
  const conv = convRef.current;
6772
6966
  if (!conv || inFlightRef.current) return;
6773
6967
  inFlightRef.current = true;
@@ -6794,14 +6988,14 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
6794
6988
  setSubmitting(false);
6795
6989
  }
6796
6990
  }, [refetch]);
6797
- const hydrate = useCallback15(() => {
6991
+ const hydrate = useCallback18(() => {
6798
6992
  void refetch();
6799
6993
  }, [refetch]);
6800
6994
  return { result, submitting, submit, hydrate, rawStatus };
6801
6995
  }
6802
6996
 
6803
6997
  // src/components/games/MysteryTigerGame.tsx
6804
- import { useState as useState33, useId as useId3 } from "react";
6998
+ import { useState as useState36, useId as useId3 } from "react";
6805
6999
 
6806
7000
  // src/components/games/nationFlags.ts
6807
7001
  var FLAGS = {
@@ -7012,7 +7206,7 @@ function isNationCode(flag) {
7012
7206
  }
7013
7207
 
7014
7208
  // src/components/games/PlayerAvatar.tsx
7015
- import { useState as useState32 } from "react";
7209
+ import { useState as useState35 } from "react";
7016
7210
  import { jsx as jsx67 } from "react/jsx-runtime";
7017
7211
  function initialsOf(name) {
7018
7212
  const parts = name.trim().split(/\s+/).filter(Boolean);
@@ -7030,7 +7224,7 @@ function PlayerAvatar({
7030
7224
  imagePath,
7031
7225
  className
7032
7226
  }) {
7033
- const [failed, setFailed] = useState32(false);
7227
+ const [failed, setFailed] = useState35(false);
7034
7228
  const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
7035
7229
  return /* @__PURE__ */ jsx67("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ jsx67("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ jsx67("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
7036
7230
  }
@@ -7271,7 +7465,7 @@ function MysteryTigerGame({
7271
7465
  onBack
7272
7466
  }) {
7273
7467
  const t = ui.games.mysteryTiger;
7274
- const [query, setQuery] = useState33("");
7468
+ const [query, setQuery] = useState36("");
7275
7469
  const inputId = useId3();
7276
7470
  const clientState = parseClientState(result?.clientStateJson);
7277
7471
  const guessResults = clientState?.guessResults ?? [];
@@ -7533,13 +7727,13 @@ function HigherOrLowerGame({
7533
7727
  }
7534
7728
 
7535
7729
  // src/components/games/CareerPathGame.tsx
7536
- import { useState as useState35, useId as useId4 } from "react";
7730
+ import { useState as useState38, useId as useId4 } from "react";
7537
7731
 
7538
7732
  // src/components/games/ui/CrestShield.tsx
7539
- import { useState as useState34 } from "react";
7733
+ import { useState as useState37 } from "react";
7540
7734
  import { jsx as jsx78 } from "react/jsx-runtime";
7541
7735
  function CrestShield({ src, name, size = 28 }) {
7542
- const [failed, setFailed] = useState34(false);
7736
+ const [failed, setFailed] = useState37(false);
7543
7737
  if (src && !isPlaceholderImage(src) && !failed) {
7544
7738
  return /* @__PURE__ */ jsx78("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
7545
7739
  }
@@ -7571,7 +7765,7 @@ function CareerPathGame({
7571
7765
  }) {
7572
7766
  const s = ui.games.careerPath;
7573
7767
  const title = gameTitle({ gameId: "career-path" }, ui.games.titles);
7574
- const [query, setQuery] = useState35("");
7768
+ const [query, setQuery] = useState38("");
7575
7769
  const inputId = useId4();
7576
7770
  const clientState = parseClientState3(result?.clientStateJson);
7577
7771
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
@@ -7678,7 +7872,7 @@ function CareerPathGame({
7678
7872
  }
7679
7873
 
7680
7874
  // src/components/games/BeatTheGridGame.tsx
7681
- import React, { useEffect as useEffect23, useId as useId5, useRef as useRef20, useState as useState36 } from "react";
7875
+ import React, { useEffect as useEffect26, useId as useId5, useRef as useRef23, useState as useState39 } from "react";
7682
7876
 
7683
7877
  // src/components/games/ui/OptionList.tsx
7684
7878
  import { jsx as jsx80 } from "react/jsx-runtime";
@@ -7767,10 +7961,10 @@ function SearchSheet({
7767
7961
  ui
7768
7962
  }) {
7769
7963
  const s = ui.games.beatTheGrid;
7770
- const [query, setQuery] = useState36("");
7964
+ const [query, setQuery] = useState39("");
7771
7965
  const inputId = useId5();
7772
- const inputRef = useRef20(null);
7773
- useEffect23(() => {
7966
+ const inputRef = useRef23(null);
7967
+ useEffect26(() => {
7774
7968
  inputRef.current?.focus();
7775
7969
  }, [row, col]);
7776
7970
  const filtered = playerPool.filter(
@@ -7835,7 +8029,7 @@ function BeatTheGridGame({
7835
8029
  }) {
7836
8030
  const s = ui.games.beatTheGrid;
7837
8031
  const title = gameTitle({ gameId: "beat-the-grid" }, ui.games.titles);
7838
- const [activeCell, setActiveCell] = useState36(null);
8032
+ const [activeCell, setActiveCell] = useState39(null);
7839
8033
  const clientState = parseClientState4(result?.clientStateJson);
7840
8034
  const filledCells = clientState?.cells ?? [];
7841
8035
  const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
@@ -7990,7 +8184,7 @@ function BeatTheGridGame({
7990
8184
  }
7991
8185
 
7992
8186
  // src/components/games/GuessTheXiGame.tsx
7993
- import { useState as useState37, useId as useId6 } from "react";
8187
+ import { useState as useState40, useId as useId6 } from "react";
7994
8188
 
7995
8189
  // src/components/games/ui/PitchSvg.tsx
7996
8190
  import { Fragment as Fragment16, jsx as jsx82, jsxs as jsxs70 } from "react/jsx-runtime";
@@ -8079,7 +8273,7 @@ function GuessTheXiGame({
8079
8273
  onBack
8080
8274
  }) {
8081
8275
  const t = ui.games.guessTheXi;
8082
- const [query, setQuery] = useState37("");
8276
+ const [query, setQuery] = useState40("");
8083
8277
  const inputId = useId6();
8084
8278
  const clientState = parseClientState5(result?.clientStateJson);
8085
8279
  const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
@@ -8222,7 +8416,7 @@ function GuessTheXiGame({
8222
8416
  }
8223
8417
 
8224
8418
  // src/components/games/DailyQuizGame.tsx
8225
- import { useState as useState38 } from "react";
8419
+ import { useState as useState41 } from "react";
8226
8420
  import { Fragment as Fragment18, jsx as jsx84, jsxs as jsxs72 } from "react/jsx-runtime";
8227
8421
  function parseClientState6(json) {
8228
8422
  if (!json) return null;
@@ -8263,8 +8457,8 @@ function DailyQuizGame({
8263
8457
  }) {
8264
8458
  const s = ui.games.dailyQuiz;
8265
8459
  const title = gameTitle({ gameId: "daily-quiz" }, ui.games.titles);
8266
- const [selections, setSelections] = useState38(/* @__PURE__ */ new Map());
8267
- const [page, setPage] = useState38(0);
8460
+ const [selections, setSelections] = useState41(/* @__PURE__ */ new Map());
8461
+ const [page, setPage] = useState41(0);
8268
8462
  const clientState = parseClientState6(result?.clientStateJson);
8269
8463
  const results = clientState?.results ?? [];
8270
8464
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
@@ -8374,7 +8568,7 @@ function DailyQuizGame({
8374
8568
  }
8375
8569
 
8376
8570
  // src/components/games/MatchdayPredictorGame.tsx
8377
- import { useId as useId7, useState as useState39 } from "react";
8571
+ import { useId as useId7, useState as useState42 } from "react";
8378
8572
  import { jsx as jsx85, jsxs as jsxs73 } from "react/jsx-runtime";
8379
8573
  var SCORER_SEARCH_THRESHOLD = 9;
8380
8574
  function parseClientState7(json) {
@@ -8470,11 +8664,11 @@ function MatchdayPredictorGame({
8470
8664
  onBack
8471
8665
  }) {
8472
8666
  const t = ui.games.predictor;
8473
- const [homeScore, setHomeScore] = useState39(0);
8474
- const [awayScore, setAwayScore] = useState39(0);
8475
- const [firstScorerPlayerId, setFirstScorerPlayerId] = useState39(null);
8476
- const [lastEdited, setLastEdited] = useState39("home");
8477
- const [query, setQuery] = useState39("");
8667
+ const [homeScore, setHomeScore] = useState42(0);
8668
+ const [awayScore, setAwayScore] = useState42(0);
8669
+ const [firstScorerPlayerId, setFirstScorerPlayerId] = useState42(null);
8670
+ const [lastEdited, setLastEdited] = useState42("home");
8671
+ const [query, setQuery] = useState42("");
8478
8672
  const searchId = useId7();
8479
8673
  const clientState = parseClientState7(result?.clientStateJson);
8480
8674
  const alreadyPlayed = result?.alreadyPlayed === true;
@@ -8642,7 +8836,7 @@ function MatchdayPredictorGame({
8642
8836
  }
8643
8837
 
8644
8838
  // src/components/games/StartingXiGame.tsx
8645
- import { useId as useId8, useState as useState40 } from "react";
8839
+ import { useId as useId8, useState as useState43 } from "react";
8646
8840
  import { Fragment as Fragment19, jsx as jsx86, jsxs as jsxs74 } from "react/jsx-runtime";
8647
8841
  var POINTS_PER_STARTER = 8;
8648
8842
  var XI_SIZE = 11;
@@ -8686,9 +8880,9 @@ function StartingXiGame({
8686
8880
  lockAtUtc
8687
8881
  }) {
8688
8882
  const t = ui.games.startingXi;
8689
- const [slotPlayers, setSlotPlayers] = useState40(() => Array(XI_SIZE).fill(null));
8690
- const [active, setActive] = useState40(0);
8691
- const [query, setQuery] = useState40("");
8883
+ const [slotPlayers, setSlotPlayers] = useState43(() => Array(XI_SIZE).fill(null));
8884
+ const [active, setActive] = useState43(0);
8885
+ const [query, setQuery] = useState43("");
8692
8886
  const searchId = useId8();
8693
8887
  const clientState = parseClientState8(result?.clientStateJson);
8694
8888
  const alreadyPlayed = result?.alreadyPlayed === true;
@@ -8828,7 +9022,7 @@ function StartingXiGame({
8828
9022
  }
8829
9023
 
8830
9024
  // src/components/games/StatLadderGame.tsx
8831
- import { useId as useId9, useState as useState41 } from "react";
9025
+ import { useId as useId9, useState as useState44 } from "react";
8832
9026
  import { jsx as jsx87, jsxs as jsxs75 } from "react/jsx-runtime";
8833
9027
  function ladderClue(ladder) {
8834
9028
  const mystery = ladder.find((r) => r.rank === 2);
@@ -8865,8 +9059,8 @@ function StatLadderGame({
8865
9059
  onBack
8866
9060
  }) {
8867
9061
  const t = ui.games.statLadder;
8868
- const [query, setQuery] = useState41("");
8869
- const [selectedId, setSelectedId] = useState41(null);
9062
+ const [query, setQuery] = useState44("");
9063
+ const [selectedId, setSelectedId] = useState44(null);
8870
9064
  const searchId = useId9();
8871
9065
  const clientState = parseClientState9(result?.clientStateJson);
8872
9066
  const revealed = clientState != null;
@@ -9073,8 +9267,8 @@ function GameScreenHost({
9073
9267
  ui
9074
9268
  }) {
9075
9269
  const { gameId, fixtureId, gameDay = "", lockAtUtc = null } = selected;
9076
- const [configJson, setConfigJson] = useState42(null);
9077
- useEffect24(() => {
9270
+ const [configJson, setConfigJson] = useState45(null);
9271
+ useEffect27(() => {
9078
9272
  setConfigJson(null);
9079
9273
  if (!conversation) return;
9080
9274
  let cancelled = false;
@@ -9097,12 +9291,12 @@ function GameScreenHost({
9097
9291
  fixtureId: fixtureId || void 0,
9098
9292
  locale: ui.games.lang
9099
9293
  });
9100
- useEffect24(() => {
9294
+ useEffect27(() => {
9101
9295
  if (conversation) hydrate();
9102
9296
  }, [conversation, gameId]);
9103
- const hydrateRef = useRef21(hydrate);
9297
+ const hydrateRef = useRef24(hydrate);
9104
9298
  hydrateRef.current = hydrate;
9105
- useEffect24(() => {
9299
+ useEffect27(() => {
9106
9300
  if (!FIXTURE_GAME_IDS.has(gameId)) return;
9107
9301
  if (rawStatus !== "pending") return;
9108
9302
  const timerId = setInterval(() => {
@@ -9214,65 +9408,11 @@ function GameScreenHost({
9214
9408
  return /* @__PURE__ */ jsx89("div", { className: "ss-w-gscreen", "data-testid": "gscreen", "data-lock-at": lockAtUtc ?? void 0, children: renderScreen() });
9215
9409
  }
9216
9410
 
9217
- // src/components/games/ui/fonts.ts
9218
- var FONTS_LINK_ID = "ss-w-games-fonts";
9219
- var FONTS_HREF = "https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800&family=Barlow:wght@400;500;600;700&display=swap";
9220
- function ensureGamesFonts(doc = document) {
9221
- if (!doc.head) return;
9222
- if (doc.getElementById(FONTS_LINK_ID)) return;
9223
- const link = doc.createElement("link");
9224
- link.id = FONTS_LINK_ID;
9225
- link.rel = "stylesheet";
9226
- link.href = FONTS_HREF;
9227
- doc.head.appendChild(link);
9228
- }
9229
-
9230
- // src/components/GamesPanel.tsx
9231
- import { jsx as jsx90 } from "react/jsx-runtime";
9232
- function GamesPanel({
9233
- loggedIn,
9234
- games,
9235
- ui,
9236
- conversation,
9237
- leaderboard,
9238
- refreshHub
9239
- }) {
9240
- const [selected, setSelected] = useState43(null);
9241
- useEffect25(() => {
9242
- ensureGamesFonts();
9243
- }, []);
9244
- if (!loggedIn) return /* @__PURE__ */ jsx90(GamesLoginWall, { ui });
9245
- if (selected !== null) {
9246
- return /* @__PURE__ */ jsx90("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx90(
9247
- GameScreenHost,
9248
- {
9249
- selected,
9250
- onBack: () => {
9251
- setSelected(null);
9252
- refreshHub?.();
9253
- },
9254
- onPlayed: refreshHub,
9255
- conversation: conversation ?? null,
9256
- ui
9257
- }
9258
- ) });
9259
- }
9260
- return /* @__PURE__ */ jsx90("div", { className: "ss-g-hub-wrap", "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx90(
9261
- GamesHub,
9262
- {
9263
- games,
9264
- onOpen: (g) => setSelected({ gameId: g.gameId, fixtureId: g.fixtureId, gameDay: g.gameDay, lockAtUtc: g.lockAtUtc ?? null }),
9265
- myWeeklyRow: leaderboard?.myWeeklyRow ?? null,
9266
- ui
9267
- }
9268
- ) });
9269
- }
9270
-
9271
9411
  // src/components/Leaderboard.tsx
9272
- import { useState as useState44 } from "react";
9412
+ import { useState as useState46 } from "react";
9273
9413
 
9274
9414
  // src/components/LeaderboardRow.tsx
9275
- import { jsx as jsx91, jsxs as jsxs77 } from "react/jsx-runtime";
9415
+ import { jsx as jsx90, jsxs as jsxs77 } from "react/jsx-runtime";
9276
9416
  function formatPoints(n) {
9277
9417
  return n.toLocaleString("en");
9278
9418
  }
@@ -9286,8 +9426,8 @@ function LeaderboardWeeklyRow({
9286
9426
  "#",
9287
9427
  row.rank
9288
9428
  ] }),
9289
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
9290
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9429
+ /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: row.handle }),
9430
+ /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-points", children: formatPoints(row.points) }),
9291
9431
  row.currentStreak > 0 && /* @__PURE__ */ jsxs77("span", { className: "ss-w-lb2-streak", children: [
9292
9432
  "\u{1F525} ",
9293
9433
  row.currentStreak
@@ -9304,13 +9444,13 @@ function LeaderboardAllTimeRow({
9304
9444
  "#",
9305
9445
  row.rank
9306
9446
  ] }),
9307
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-handle", children: row.handle }),
9308
- /* @__PURE__ */ jsx91("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9447
+ /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-handle", children: row.handle }),
9448
+ /* @__PURE__ */ jsx90("span", { className: "ss-w-lb2-points", children: formatPoints(row.allTimePoints) })
9309
9449
  ] });
9310
9450
  }
9311
9451
 
9312
9452
  // src/components/LeaderboardEmpty.tsx
9313
- import { jsx as jsx92, jsxs as jsxs78 } from "react/jsx-runtime";
9453
+ import { jsx as jsx91, jsxs as jsxs78 } from "react/jsx-runtime";
9314
9454
  function LeaderboardEmpty({
9315
9455
  segment,
9316
9456
  lastWeek,
@@ -9320,8 +9460,8 @@ function LeaderboardEmpty({
9320
9460
  }) {
9321
9461
  if (segment === "alltime") {
9322
9462
  return /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty ss-w-lb-empty--alltime", children: [
9323
- /* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9324
- /* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9463
+ /* @__PURE__ */ jsx91("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: "\u{1F4CA}" }),
9464
+ /* @__PURE__ */ jsx91("p", { className: "ss-w-lb-empty-body", children: ui.leaderboardAllTimeEmpty })
9325
9465
  ] });
9326
9466
  }
9327
9467
  const fresh = lastWeek != null;
@@ -9329,38 +9469,38 @@ function LeaderboardEmpty({
9329
9469
  const body = fresh ? ui.leaderboardEmptyFreshBody : ui.leaderboardEmptyColdBody;
9330
9470
  return /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty", children: [
9331
9471
  weeklyPrize && /* @__PURE__ */ jsxs78("div", { className: "ss-w-prize", children: [
9332
- /* @__PURE__ */ jsx92("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9333
- /* @__PURE__ */ jsx92("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx92("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9472
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-prize-icon", "aria-hidden": "true", children: "\u{1F3C6}" }),
9473
+ /* @__PURE__ */ jsx91("div", { className: "ss-w-prize-body", children: /* @__PURE__ */ jsx91("span", { className: "ss-w-prize-text", children: weeklyPrize }) })
9334
9474
  ] }),
9335
9475
  /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-empty-hero", children: [
9336
- /* @__PURE__ */ jsx92("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9337
- /* @__PURE__ */ jsx92("h4", { className: "ss-w-lb-empty-title", children: title }),
9338
- /* @__PURE__ */ jsx92("p", { className: "ss-w-lb-empty-body", children: body }),
9339
- onPlay && /* @__PURE__ */ jsx92("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9476
+ /* @__PURE__ */ jsx91("div", { className: "ss-w-lb-empty-icon", "aria-hidden": "true", children: fresh ? "\u{1F3C6}" : "\u{1F3AE}" }),
9477
+ /* @__PURE__ */ jsx91("h4", { className: "ss-w-lb-empty-title", children: title }),
9478
+ /* @__PURE__ */ jsx91("p", { className: "ss-w-lb-empty-body", children: body }),
9479
+ onPlay && /* @__PURE__ */ jsx91("button", { type: "button", className: "ss-w-lb-empty-cta", onClick: onPlay, children: ui.leaderboardEmptyCta })
9340
9480
  ] }),
9341
9481
  fresh && lastWeek && /* @__PURE__ */ jsxs78("div", { className: "ss-w-lb-last", children: [
9342
- /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9343
- /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9344
- /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9345
- /* @__PURE__ */ jsx92("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9482
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-label", children: ui.leaderboardLastWeekLabel }),
9483
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-champ", "aria-hidden": "true", children: "\u{1F947}" }),
9484
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-handle", children: lastWeek.handle }),
9485
+ /* @__PURE__ */ jsx91("span", { className: "ss-w-lb-last-points", children: formatPoints(lastWeek.points) })
9346
9486
  ] })
9347
9487
  ] });
9348
9488
  }
9349
9489
 
9350
9490
  // src/components/Leaderboard.tsx
9351
- import { Fragment as Fragment20, jsx as jsx93, jsxs as jsxs79 } from "react/jsx-runtime";
9491
+ import { Fragment as Fragment20, jsx as jsx92, jsxs as jsxs79 } from "react/jsx-runtime";
9352
9492
  function Leaderboard({
9353
9493
  data,
9354
9494
  ui,
9355
9495
  onPlay
9356
9496
  }) {
9357
- const [segment, setSegment] = useState44("weekly");
9497
+ const [segment, setSegment] = useState46("weekly");
9358
9498
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
9359
9499
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
9360
9500
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
9361
9501
  return /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb2", children: [
9362
9502
  /* @__PURE__ */ jsxs79("div", { className: "ss-w-seg", children: [
9363
- /* @__PURE__ */ jsx93(
9503
+ /* @__PURE__ */ jsx92(
9364
9504
  "button",
9365
9505
  {
9366
9506
  type: "button",
@@ -9370,7 +9510,7 @@ function Leaderboard({
9370
9510
  children: ui.leaderboardThisWeek
9371
9511
  }
9372
9512
  ),
9373
- /* @__PURE__ */ jsx93(
9513
+ /* @__PURE__ */ jsx92(
9374
9514
  "button",
9375
9515
  {
9376
9516
  type: "button",
@@ -9381,7 +9521,7 @@ function Leaderboard({
9381
9521
  }
9382
9522
  )
9383
9523
  ] }),
9384
- isEmpty ? /* @__PURE__ */ jsx93(
9524
+ isEmpty ? /* @__PURE__ */ jsx92(
9385
9525
  LeaderboardEmpty,
9386
9526
  {
9387
9527
  segment,
@@ -9391,14 +9531,14 @@ function Leaderboard({
9391
9531
  ui
9392
9532
  }
9393
9533
  ) : /* @__PURE__ */ jsxs79(Fragment20, { children: [
9394
- /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx93(
9534
+ /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-rows", children: segment === "weekly" ? data.weeklyTop.map((row) => /* @__PURE__ */ jsx92(
9395
9535
  LeaderboardWeeklyRow,
9396
9536
  {
9397
9537
  row,
9398
9538
  isMe: row.operatorUserId === data.myWeeklyRow?.operatorUserId
9399
9539
  },
9400
9540
  row.operatorUserId
9401
- )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx93(
9541
+ )) : data.allTimeTop.map((row) => /* @__PURE__ */ jsx92(
9402
9542
  LeaderboardAllTimeRow,
9403
9543
  {
9404
9544
  row,
@@ -9406,18 +9546,18 @@ function Leaderboard({
9406
9546
  },
9407
9547
  row.operatorUserId
9408
9548
  )) }),
9409
- /* @__PURE__ */ jsx93("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9410
- myRow != null && (offBoard ? /* @__PURE__ */ jsx93("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb2-rows", children: [
9411
- segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx93(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
9412
- segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx93(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9549
+ /* @__PURE__ */ jsx92("div", { className: "ss-w-kitline", children: "\u{1F3BD}" }),
9550
+ myRow != null && (offBoard ? /* @__PURE__ */ jsx92("div", { className: "ss-w-lbgap", children: ui.leaderboardOffBoard }) : /* @__PURE__ */ jsxs79("div", { className: "ss-w-lb2-rows", children: [
9551
+ segment === "weekly" && data.myWeeklyRow && /* @__PURE__ */ jsx92(LeaderboardWeeklyRow, { row: data.myWeeklyRow, isMe: true }),
9552
+ segment === "alltime" && data.myAllTimeRow && /* @__PURE__ */ jsx92(LeaderboardAllTimeRow, { row: data.myAllTimeRow, isMe: true })
9413
9553
  ] })),
9414
- segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx93("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx93("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
9554
+ segment === "alltime" && data.myAllTimeRow && !offBoard && /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-rows", children: /* @__PURE__ */ jsx92("div", { className: "ss-w-lb2-row", children: /* @__PURE__ */ jsx92("span", { className: "ss-w-lb2-handle", children: formatPoints(data.allTimeTop.reduce((s, r) => s + r.allTimePoints, 0)) }) }) })
9415
9555
  ] })
9416
9556
  ] });
9417
9557
  }
9418
9558
 
9419
9559
  // src/components/LeaderboardPanel.tsx
9420
- import { jsx as jsx94 } from "react/jsx-runtime";
9560
+ import { jsx as jsx93 } from "react/jsx-runtime";
9421
9561
  var EMPTY_PAYLOAD = {
9422
9562
  week: "",
9423
9563
  weeklyTop: [],
@@ -9428,19 +9568,216 @@ var EMPTY_PAYLOAD = {
9428
9568
  lastWeek: null
9429
9569
  };
9430
9570
  function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
9571
+ if (!loggedIn) return /* @__PURE__ */ jsx93(GamesLoginWall, { ui });
9572
+ if (data === null && loading) return /* @__PURE__ */ jsx93("div", { className: "ss-w-mon-list" });
9573
+ return /* @__PURE__ */ jsx93("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx93(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
9574
+ }
9575
+
9576
+ // src/components/games/ui/fonts.ts
9577
+ var FONTS_LINK_ID = "ss-w-games-fonts";
9578
+ var FONTS_HREF = "https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@600;700;800&family=Barlow:wght@400;500;600;700&display=swap";
9579
+ function ensureGamesFonts(doc = document) {
9580
+ if (!doc.head) return;
9581
+ if (doc.getElementById(FONTS_LINK_ID)) return;
9582
+ const link = doc.createElement("link");
9583
+ link.id = FONTS_LINK_ID;
9584
+ link.rel = "stylesheet";
9585
+ link.href = FONTS_HREF;
9586
+ doc.head.appendChild(link);
9587
+ }
9588
+
9589
+ // src/components/GamesPanel.tsx
9590
+ import { jsx as jsx94, jsxs as jsxs80 } from "react/jsx-runtime";
9591
+ function GamesPanel({
9592
+ loggedIn,
9593
+ games,
9594
+ ui,
9595
+ conversation,
9596
+ leaderboard,
9597
+ leaderboardLoading,
9598
+ refreshHub
9599
+ }) {
9600
+ const [selected, setSelected] = useState47(null);
9601
+ const [segment, setSegment] = useState47("play");
9602
+ useEffect28(() => {
9603
+ ensureGamesFonts();
9604
+ }, []);
9431
9605
  if (!loggedIn) return /* @__PURE__ */ jsx94(GamesLoginWall, { ui });
9432
- if (data === null && loading) return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list" });
9433
- return /* @__PURE__ */ jsx94("div", { className: "ss-w-mon-list", children: /* @__PURE__ */ jsx94(Leaderboard, { data: data ?? EMPTY_PAYLOAD, ui, onPlay }) });
9606
+ if (selected !== null) {
9607
+ return /* @__PURE__ */ jsx94("div", { className: "ss-w-gscreen-wrap", lang: ui.games.lang, children: /* @__PURE__ */ jsx94(
9608
+ GameScreenHost,
9609
+ {
9610
+ selected,
9611
+ onBack: () => {
9612
+ setSelected(null);
9613
+ refreshHub?.();
9614
+ },
9615
+ onPlayed: refreshHub,
9616
+ conversation: conversation ?? null,
9617
+ ui
9618
+ }
9619
+ ) });
9620
+ }
9621
+ return /* @__PURE__ */ jsxs80("div", { className: "ss-g-hub-wrap", lang: ui.games.lang, children: [
9622
+ /* @__PURE__ */ jsxs80("div", { className: "ss-w-seg", children: [
9623
+ /* @__PURE__ */ jsx94(
9624
+ "button",
9625
+ {
9626
+ type: "button",
9627
+ className: "ss-w-seg-btn",
9628
+ ...segment === "play" ? { "data-on": "" } : {},
9629
+ onClick: () => setSegment("play"),
9630
+ children: ui.gamesPlaySegment
9631
+ }
9632
+ ),
9633
+ /* @__PURE__ */ jsx94(
9634
+ "button",
9635
+ {
9636
+ type: "button",
9637
+ className: "ss-w-seg-btn",
9638
+ ...segment === "leaderboard" ? { "data-on": "" } : {},
9639
+ onClick: () => setSegment("leaderboard"),
9640
+ children: ui.tabLeaderboard
9641
+ }
9642
+ )
9643
+ ] }),
9644
+ segment === "play" ? /* @__PURE__ */ jsx94("div", { "data-testid": "games-hub", lang: ui.games.lang, children: /* @__PURE__ */ jsx94(
9645
+ GamesHub,
9646
+ {
9647
+ games,
9648
+ onOpen: (g) => setSelected({ gameId: g.gameId, fixtureId: g.fixtureId, gameDay: g.gameDay, lockAtUtc: g.lockAtUtc ?? null }),
9649
+ myWeeklyRow: leaderboard?.myWeeklyRow ?? null,
9650
+ ui
9651
+ }
9652
+ ) }) : /* @__PURE__ */ jsx94(
9653
+ LeaderboardPanel,
9654
+ {
9655
+ loggedIn,
9656
+ data: leaderboard ?? null,
9657
+ loading: leaderboardLoading ?? false,
9658
+ onPlay: () => setSegment("play"),
9659
+ ui
9660
+ }
9661
+ )
9662
+ ] });
9663
+ }
9664
+
9665
+ // src/components/Fixtures.tsx
9666
+ import { jsx as jsx95, jsxs as jsxs81 } from "react/jsx-runtime";
9667
+ function groupByRound(fixtures) {
9668
+ const groups = [];
9669
+ for (const fx of fixtures) {
9670
+ const last = groups[groups.length - 1];
9671
+ if (last && last.round === fx.round) last.items.push(fx);
9672
+ else groups.push({ round: fx.round, items: [fx] });
9673
+ }
9674
+ return groups;
9675
+ }
9676
+ function Fixtures({ fixtures, loading, ui }) {
9677
+ if (fixtures.length === 0) {
9678
+ if (loading) return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-list" });
9679
+ return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-empty", children: ui.clubFixturesEmpty });
9680
+ }
9681
+ return /* @__PURE__ */ jsx95("div", { className: "ss-w-mon-list", children: groupByRound(fixtures).map((group, gi) => /* @__PURE__ */ jsxs81("div", { children: [
9682
+ group.round && /* @__PURE__ */ jsx95("div", { className: "ss-w-club-eyebrow", children: group.round }),
9683
+ group.items.map((fx) => {
9684
+ const played = fx.homeScore !== null && fx.awayScore !== null;
9685
+ const kickoff = fx.matchDateTime ? ui.bettingKickoff(fx.matchDateTime) : null;
9686
+ return /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon", children: [
9687
+ /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon-top", children: [
9688
+ fx.competitionName && /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-comp", children: fx.competitionName }),
9689
+ !played && kickoff && /* @__PURE__ */ jsxs81("span", { className: "ss-w-mon-pill", children: [
9690
+ kickoff.dayLabel,
9691
+ " \xB7 ",
9692
+ kickoff.time
9693
+ ] })
9694
+ ] }),
9695
+ /* @__PURE__ */ jsxs81("div", { className: "ss-w-mon-main", children: [
9696
+ /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-side", children: /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-name", children: fx.homeTeamName }) }),
9697
+ played ? /* @__PURE__ */ jsxs81("span", { className: "ss-w-mon-score", children: [
9698
+ fx.homeScore,
9699
+ /* @__PURE__ */ jsx95("i", { children: "-" }),
9700
+ fx.awayScore
9701
+ ] }) : /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-vs", children: "vs" }),
9702
+ /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-side ss-w-mon-side--away", children: /* @__PURE__ */ jsx95("span", { className: "ss-w-mon-name", children: fx.awayTeamName }) })
9703
+ ] })
9704
+ ] }, fx.id);
9705
+ })
9706
+ ] }, `${gi}-${group.round ?? "none"}`)) });
9707
+ }
9708
+
9709
+ // src/components/Standings.tsx
9710
+ import { jsx as jsx96, jsxs as jsxs82 } from "react/jsx-runtime";
9711
+ function groupByTable(rows) {
9712
+ const groups = [];
9713
+ for (const row of rows) {
9714
+ const last = groups[groups.length - 1];
9715
+ if (last && last.table === row.table) last.items.push(row);
9716
+ else groups.push({ table: row.table, items: [row] });
9717
+ }
9718
+ return groups;
9719
+ }
9720
+ function Standings({ standings, loading, ui }) {
9721
+ if (standings === null && loading) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list" });
9722
+ if (standings === null || standings.length === 0) return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-empty", children: ui.clubStandingsEmpty });
9723
+ return /* @__PURE__ */ jsx96("div", { className: "ss-w-mon-list", children: groupByTable(standings).map((group, gi) => /* @__PURE__ */ jsxs82("div", { className: "ss-w-table-wrap", children: [
9724
+ group.table && /* @__PURE__ */ jsx96("div", { className: "ss-w-club-eyebrow", children: group.table }),
9725
+ /* @__PURE__ */ jsxs82("table", { className: "ss-w-md-table", children: [
9726
+ /* @__PURE__ */ jsx96("thead", { children: /* @__PURE__ */ jsxs82("tr", { children: [
9727
+ /* @__PURE__ */ jsx96("th", { children: "#" }),
9728
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColClub }),
9729
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColPlayed }),
9730
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColWon }),
9731
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColDrawn }),
9732
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColLost }),
9733
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColGoalDiff }),
9734
+ /* @__PURE__ */ jsx96("th", { children: ui.standingsColPoints })
9735
+ ] }) }),
9736
+ /* @__PURE__ */ jsx96("tbody", { children: group.items.map((row) => /* @__PURE__ */ jsxs82("tr", { children: [
9737
+ /* @__PURE__ */ jsx96("td", { children: row.position }),
9738
+ /* @__PURE__ */ jsx96("td", { children: row.teamName }),
9739
+ /* @__PURE__ */ jsx96("td", { children: row.playedGames }),
9740
+ /* @__PURE__ */ jsx96("td", { children: row.wins }),
9741
+ /* @__PURE__ */ jsx96("td", { children: row.draws }),
9742
+ /* @__PURE__ */ jsx96("td", { children: row.losses }),
9743
+ /* @__PURE__ */ jsx96("td", { children: row.goalDifference }),
9744
+ /* @__PURE__ */ jsx96("td", { children: row.points })
9745
+ ] }, row.teamId)) })
9746
+ ] })
9747
+ ] }, `${gi}-${group.table ?? "none"}`)) });
9748
+ }
9749
+
9750
+ // src/components/Squad.tsx
9751
+ import { jsx as jsx97, jsxs as jsxs83 } from "react/jsx-runtime";
9752
+ function groupByPosition(players) {
9753
+ const groups = [];
9754
+ for (const p of players) {
9755
+ const last = groups[groups.length - 1];
9756
+ if (last && last.positionName === p.positionName) last.items.push(p);
9757
+ else groups.push({ positionName: p.positionName, items: [p] });
9758
+ }
9759
+ return groups;
9760
+ }
9761
+ function Squad({ squad, loading, ui }) {
9762
+ if (squad === null && loading) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list" });
9763
+ if (squad === null || squad.length === 0) return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-empty", children: ui.clubSquadEmpty });
9764
+ return /* @__PURE__ */ jsx97("div", { className: "ss-w-mon-list", children: groupByPosition(squad).map((group, gi) => /* @__PURE__ */ jsxs83("div", { children: [
9765
+ group.positionName && /* @__PURE__ */ jsx97("div", { className: "ss-w-club-eyebrow", children: group.positionName }),
9766
+ group.items.map((p) => /* @__PURE__ */ jsxs83("div", { className: "ss-w-sq-row", children: [
9767
+ /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-num", children: p.jerseyNumber ?? "" }),
9768
+ /* @__PURE__ */ jsx97("span", { className: "ss-w-sq-name", children: p.playerName })
9769
+ ] }, p.playerId))
9770
+ ] }, `${gi}-${group.positionName ?? "none"}`)) });
9434
9771
  }
9435
9772
 
9436
9773
  // src/components/PresetSpeedDial.tsx
9437
9774
  import { useId as useId10 } from "react";
9438
- import { jsx as jsx95, jsxs as jsxs80 } from "react/jsx-runtime";
9775
+ import { jsx as jsx98, jsxs as jsxs84 } from "react/jsx-runtime";
9439
9776
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
9440
9777
  const pillsId = useId10();
9441
9778
  const tabIndex = expanded ? 0 : -1;
9442
- return /* @__PURE__ */ jsxs80("div", { ref: rootRef, className: "ss-w-dial", children: [
9443
- /* @__PURE__ */ jsxs80(
9779
+ return /* @__PURE__ */ jsxs84("div", { ref: rootRef, className: "ss-w-dial", children: [
9780
+ /* @__PURE__ */ jsxs84(
9444
9781
  "button",
9445
9782
  {
9446
9783
  ref: buttonRef,
@@ -9451,36 +9788,36 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
9451
9788
  "aria-label": strings.dialName,
9452
9789
  onClick: onToggle,
9453
9790
  children: [
9454
- /* @__PURE__ */ jsx95("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx95(SlidersIcon, {}) }),
9455
- /* @__PURE__ */ jsx95("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx95(CloseIcon, {}) }),
9456
- showDot && !expanded ? /* @__PURE__ */ jsx95("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
9791
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-dial-icon ss-w-dial-icon--open", children: /* @__PURE__ */ jsx98(SlidersIcon, {}) }),
9792
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-dial-icon ss-w-dial-icon--close", children: /* @__PURE__ */ jsx98(CloseIcon, {}) }),
9793
+ showDot && !expanded ? /* @__PURE__ */ jsx98("span", { className: "ss-w-dial-dot", "aria-hidden": "true" }) : null
9457
9794
  ]
9458
9795
  }
9459
9796
  ),
9460
- /* @__PURE__ */ jsxs80("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
9461
- /* @__PURE__ */ jsxs80("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
9462
- /* @__PURE__ */ jsx95(SlidersIcon, {}),
9463
- /* @__PURE__ */ jsx95("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
9797
+ /* @__PURE__ */ jsxs84("div", { id: pillsId, className: "ss-w-dial-pills", "data-open": expanded ? "" : void 0, children: [
9798
+ /* @__PURE__ */ jsxs84("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("numbers"), children: [
9799
+ /* @__PURE__ */ jsx98(SlidersIcon, {}),
9800
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-dial-pill-label", children: strings.setNumbers })
9464
9801
  ] }),
9465
- /* @__PURE__ */ jsxs80("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
9466
- /* @__PURE__ */ jsx95(ComboIcon, {}),
9467
- /* @__PURE__ */ jsx95("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
9802
+ /* @__PURE__ */ jsxs84("button", { type: "button", className: "ss-w-dial-pill", tabIndex, onClick: () => onOpen("combo"), children: [
9803
+ /* @__PURE__ */ jsx98(ComboIcon, {}),
9804
+ /* @__PURE__ */ jsx98("span", { className: "ss-w-dial-pill-label", children: strings.buildCombo })
9468
9805
  ] })
9469
9806
  ] })
9470
9807
  ] });
9471
9808
  }
9472
9809
 
9473
9810
  // src/components/PresetTools.tsx
9474
- import { Fragment as Fragment21, useEffect as useEffect26, useId as useId11, useRef as useRef22, useState as useState45 } from "react";
9475
- import { Fragment as Fragment22, jsx as jsx96, jsxs as jsxs81 } from "react/jsx-runtime";
9811
+ import { Fragment as Fragment21, useEffect as useEffect29, useId as useId11, useRef as useRef25, useState as useState48 } from "react";
9812
+ import { Fragment as Fragment22, jsx as jsx99, jsxs as jsxs85 } from "react/jsx-runtime";
9476
9813
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
9477
9814
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
9478
- const dialogRef = useRef22(null);
9815
+ const dialogRef = useRef25(null);
9479
9816
  const titleId = useId11();
9480
- useEffect26(() => {
9817
+ useEffect29(() => {
9481
9818
  dialogRef.current?.focus();
9482
9819
  }, []);
9483
- useEffect26(() => {
9820
+ useEffect29(() => {
9484
9821
  const onKey = (e) => {
9485
9822
  if (e.key !== "Escape") return;
9486
9823
  e.stopPropagation();
@@ -9510,79 +9847,79 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
9510
9847
  first.focus();
9511
9848
  }
9512
9849
  };
9513
- return /* @__PURE__ */ jsx96("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs81("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
9514
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-tool-head", children: [
9515
- /* @__PURE__ */ jsx96("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
9516
- /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx96(CloseIcon, {}) })
9850
+ return /* @__PURE__ */ jsx99("div", { className: "ss-w-tool-backdrop", children: /* @__PURE__ */ jsxs85("div", { ref: dialogRef, className: "ss-w-tool", role: "dialog", "aria-modal": "true", "aria-labelledby": titleId, tabIndex: -1, onKeyDown: trapTab, children: [
9851
+ /* @__PURE__ */ jsxs85("div", { className: "ss-w-tool-head", children: [
9852
+ /* @__PURE__ */ jsx99("h2", { id: titleId, className: "ss-w-tool-title", children: title }),
9853
+ /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-close", "aria-label": closeLabel, onClick: onClose, children: /* @__PURE__ */ jsx99(CloseIcon, {}) })
9517
9854
  ] }),
9518
- /* @__PURE__ */ jsx96("div", { className: "ss-w-tool-body", children }),
9519
- footer ? /* @__PURE__ */ jsx96("div", { className: "ss-w-tool-foot", children: footer }) : null
9855
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-tool-body", children }),
9856
+ footer ? /* @__PURE__ */ jsx99("div", { className: "ss-w-tool-foot", children: footer }) : null
9520
9857
  ] }) });
9521
9858
  }
9522
9859
  function fillTemplate(template, slots) {
9523
9860
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
9524
9861
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
9525
- return /* @__PURE__ */ jsx96(Fragment21, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
9862
+ return /* @__PURE__ */ jsx99(Fragment21, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
9526
9863
  });
9527
9864
  }
9528
9865
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
9529
9866
  const selected = Math.max(0, choices2.findIndex((c) => c.text === current));
9530
- return /* @__PURE__ */ jsxs81("span", { className: "ss-w-tool-num", children: [
9531
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
9532
- /* @__PURE__ */ jsx96("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
9867
+ return /* @__PURE__ */ jsxs85("span", { className: "ss-w-tool-num", children: [
9868
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: current }),
9869
+ /* @__PURE__ */ jsx99("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(selected), onChange: (e) => {
9533
9870
  const c = choices2[Number(e.target.value)];
9534
9871
  if (c) onChoose(c.value);
9535
- }, children: choices2.map((c, i) => /* @__PURE__ */ jsx96("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
9872
+ }, children: choices2.map((c, i) => /* @__PURE__ */ jsx99("option", { value: String(i), disabled: lockEmpty && !c.available && i !== selected, children: c.available ? c.text : `${c.text}${notToday}` }, i)) })
9536
9873
  ] });
9537
9874
  }
9538
9875
  function ChoiceSelect({ currentIdx, sizeLabels, optionLabels, label, onChoose }) {
9539
9876
  const sizeText = sizeLabels[currentIdx] ?? "";
9540
- return /* @__PURE__ */ jsxs81("span", { className: "ss-w-tool-num", children: [
9541
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
9542
- /* @__PURE__ */ jsx96("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ jsx96("option", { value: String(i), children: opt }, i)) })
9877
+ return /* @__PURE__ */ jsxs85("span", { className: "ss-w-tool-num", children: [
9878
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-num-size", "aria-hidden": "true", children: sizeText }),
9879
+ /* @__PURE__ */ jsx99("select", { className: "ss-w-tool-num-select", "aria-label": label, value: String(currentIdx), onChange: (e) => onChoose(Number(e.target.value)), children: optionLabels.map((opt, i) => /* @__PURE__ */ jsx99("option", { value: String(i), children: opt }, i)) })
9543
9880
  ] });
9544
9881
  }
9545
9882
  function SendButton({ label, display, disabled, onClick }) {
9546
- return /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
9883
+ return /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-send", "aria-label": `${label}: ${display}`, disabled, onClick, children: label });
9547
9884
  }
9548
9885
  function PickList({ picks, formatKickoff }) {
9549
- return /* @__PURE__ */ jsx96("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs81("li", { className: "ss-w-tool-pick", children: [
9550
- /* @__PURE__ */ jsxs81("span", { className: "ss-w-tool-pick-match", children: [
9886
+ return /* @__PURE__ */ jsx99("ul", { className: "ss-w-tool-picks", role: "list", children: picks.map((p) => /* @__PURE__ */ jsxs85("li", { className: "ss-w-tool-pick", children: [
9887
+ /* @__PURE__ */ jsxs85("span", { className: "ss-w-tool-pick-match", children: [
9551
9888
  p.homeTeamName,
9552
9889
  " \u2013 ",
9553
9890
  p.awayTeamName
9554
9891
  ] }),
9555
- /* @__PURE__ */ jsxs81("span", { className: "ss-w-tool-pick-sel", children: [
9892
+ /* @__PURE__ */ jsxs85("span", { className: "ss-w-tool-pick-sel", children: [
9556
9893
  p.marketLabel,
9557
9894
  ": ",
9558
9895
  p.selectionLabel,
9559
9896
  p.line ? ` ${p.line}` : ""
9560
9897
  ] }),
9561
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
9562
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
9898
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-pick-kick", children: formatKickoff(p.kickoffUtc) }),
9899
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-pick-price", children: p.price.toFixed(2) })
9563
9900
  ] }, p.matchOddsId)) });
9564
9901
  }
9565
9902
  function ComboPreview({ cell, formatKickoff }) {
9566
- return /* @__PURE__ */ jsxs81(Fragment22, { children: [
9567
- /* @__PURE__ */ jsx96(PickList, { picks: cell.combo.legs, formatKickoff }),
9568
- /* @__PURE__ */ jsx96("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
9903
+ return /* @__PURE__ */ jsxs85(Fragment22, { children: [
9904
+ /* @__PURE__ */ jsx99(PickList, { picks: cell.combo.legs, formatKickoff }),
9905
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-tool-math", children: cell.combo.multiplication })
9569
9906
  ] });
9570
9907
  }
9571
9908
  function Unavailable({ text }) {
9572
- return /* @__PURE__ */ jsx96("p", { className: "ss-w-tool-unavailable", children: text });
9909
+ return /* @__PURE__ */ jsx99("p", { className: "ss-w-tool-unavailable", children: text });
9573
9910
  }
9574
9911
  function AskRow({ icon, ask, ready, send }) {
9575
- return /* @__PURE__ */ jsxs81("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
9576
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
9577
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-tool-main", children: [
9578
- /* @__PURE__ */ jsx96("p", { className: "ss-w-tool-ask", children: ask }),
9579
- ready ? /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-ready", children: ready }) : null
9912
+ return /* @__PURE__ */ jsxs85("section", { className: "ss-w-tool-row ss-w-tool-row--ask", children: [
9913
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-icon", "aria-hidden": "true", children: icon }),
9914
+ /* @__PURE__ */ jsxs85("div", { className: "ss-w-tool-main", children: [
9915
+ /* @__PURE__ */ jsx99("p", { className: "ss-w-tool-ask", children: ask }),
9916
+ ready ? /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-ready", children: ready }) : null
9580
9917
  ] }),
9581
9918
  send
9582
9919
  ] });
9583
9920
  }
9584
9921
  function RoundSend({ label, display, disabled, onClick }) {
9585
- return /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx96(SendIcon, {}) });
9922
+ return /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-go", "aria-label": `${label}: ${display}`, disabled, onClick, children: /* @__PURE__ */ jsx99(SendIcon, {}) });
9586
9923
  }
9587
9924
  var BIG_COMBO = { total: 50, legs: 6 };
9588
9925
  function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
@@ -9591,15 +9928,15 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
9591
9928
  const totals = comboTotals(grid);
9592
9929
  const legChoices = comboLegChoices(grid);
9593
9930
  const count = FIXED_SINGLES_COUNT;
9594
- const [maxPrice, setMaxPrice] = useState45(() => startSingles(grid.singles, limits, START.maxPrice, count));
9595
- const [minPrice, setMinPrice] = useState45(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
9596
- const [start] = useState45(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
9597
- const [total, setTotal] = useState45(start.total);
9598
- const [legs, setLegs] = useState45(start.legs);
9599
- const [bigStart] = useState45(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
9600
- const [bigTotal, setBigTotal] = useState45(bigStart.total);
9601
- const [bigLegs, setBigLegs] = useState45(bigStart.legs);
9602
- const [announcement, setAnnouncement] = useState45("");
9931
+ const [maxPrice, setMaxPrice] = useState48(() => startSingles(grid.singles, limits, START.maxPrice, count));
9932
+ const [minPrice, setMinPrice] = useState48(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
9933
+ const [start] = useState48(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
9934
+ const [total, setTotal] = useState48(start.total);
9935
+ const [legs, setLegs] = useState48(start.legs);
9936
+ const [bigStart] = useState48(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
9937
+ const [bigTotal, setBigTotal] = useState48(bigStart.total);
9938
+ const [bigLegs, setBigLegs] = useState48(bigStart.legs);
9939
+ const [announcement, setAnnouncement] = useState48("");
9603
9940
  const maxCell = findSingles(grid.singles, maxPrice, count);
9604
9941
  const minCell = findSingles(grid.singlesFrom, minPrice, count);
9605
9942
  const comboCell = findCombo(grid, total, legs);
@@ -9643,95 +9980,95 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
9643
9980
  const totalChoices = totals.map((v) => ({ value: v, text: v.toFixed(1), available: legChoices.some((n) => !!findCombo(grid, v, n)) }));
9644
9981
  const legChoicesFor = (t) => legChoices.map((n) => ({ value: n, text: String(n), available: !!findCombo(grid, t, n) }));
9645
9982
  const markets = grid.markets ?? [];
9646
- const [marketIdx, setMarketIdx] = useState45(0);
9983
+ const [marketIdx, setMarketIdx] = useState48(0);
9647
9984
  const marketCell = markets[marketIdx] ?? null;
9648
9985
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
9649
9986
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
9650
9987
  const comboReady = (cell) => cell ? strings.readyAt(cell.combo.total) : strings.unavailable;
9651
- return /* @__PURE__ */ jsxs81(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
9652
- /* @__PURE__ */ jsx96(
9988
+ return /* @__PURE__ */ jsxs85(PresetToolModal, { title: strings.setNumbers, closeLabel: strings.close, onClose, children: [
9989
+ /* @__PURE__ */ jsx99(
9653
9990
  AskRow,
9654
9991
  {
9655
9992
  icon: "\u{1F3AF}",
9656
9993
  ask: fillTemplate(strings.maxPriceRow, {
9657
9994
  count: String(count),
9658
- price: /* @__PURE__ */ jsx96(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
9995
+ price: /* @__PURE__ */ jsx99(NumberSelect, { current: maxPrice.toFixed(2), choices: maxChoices, label: strings.maxPriceName, notToday: strings.notToday, onChoose: chooseMax })
9659
9996
  }),
9660
9997
  ready: singlesReady(maxCell),
9661
- send: /* @__PURE__ */ jsx96(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
9998
+ send: /* @__PURE__ */ jsx99(RoundSend, { label: strings.send, display: strings.maxPriceDisplay(count, maxPrice), disabled: !maxCell || streaming, onClick: () => {
9662
9999
  if (maxCell) onSend(maxPriceAsk(maxCell, strings));
9663
10000
  } })
9664
10001
  }
9665
10002
  ),
9666
- /* @__PURE__ */ jsx96(
10003
+ /* @__PURE__ */ jsx99(
9667
10004
  AskRow,
9668
10005
  {
9669
10006
  icon: "\u{1F4C8}",
9670
10007
  ask: fillTemplate(strings.minPriceRow, {
9671
10008
  count: String(count),
9672
- price: /* @__PURE__ */ jsx96(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
10009
+ price: /* @__PURE__ */ jsx99(NumberSelect, { current: minPrice.toFixed(2), choices: minChoices, label: strings.minPriceName, notToday: strings.notToday, onChoose: chooseMin })
9673
10010
  }),
9674
10011
  ready: singlesReady(minCell),
9675
- send: /* @__PURE__ */ jsx96(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
10012
+ send: /* @__PURE__ */ jsx99(RoundSend, { label: strings.send, display: strings.minPriceDisplay(count, minPrice), disabled: !minCell || streaming, onClick: () => {
9676
10013
  if (minCell) onSend(minPriceAsk(minCell, strings));
9677
10014
  } })
9678
10015
  }
9679
10016
  ),
9680
- /* @__PURE__ */ jsx96(
10017
+ /* @__PURE__ */ jsx99(
9681
10018
  AskRow,
9682
10019
  {
9683
10020
  icon: "\u2728",
9684
10021
  ask: fillTemplate(strings.comboRow, {
9685
- legs: /* @__PURE__ */ jsx96(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
9686
- total: /* @__PURE__ */ jsx96(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
10022
+ legs: /* @__PURE__ */ jsx99(NumberSelect, { current: String(legs), choices: legChoicesFor(total), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseLegs }),
10023
+ total: /* @__PURE__ */ jsx99(NumberSelect, { current: total.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseTotal })
9687
10024
  }),
9688
10025
  ready: comboReady(comboCell),
9689
- send: /* @__PURE__ */ jsx96(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
10026
+ send: /* @__PURE__ */ jsx99(RoundSend, { label: strings.send, display: strings.comboDisplay(legs, total), disabled: !comboCell || streaming, onClick: () => {
9690
10027
  if (comboCell) onSend(comboAsk(comboCell, strings));
9691
10028
  } })
9692
10029
  }
9693
10030
  ),
9694
- /* @__PURE__ */ jsx96(
10031
+ /* @__PURE__ */ jsx99(
9695
10032
  AskRow,
9696
10033
  {
9697
10034
  icon: "\u{1F3C6}",
9698
10035
  ask: fillTemplate(strings.bigComboRow, {
9699
- legs: /* @__PURE__ */ jsx96(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
9700
- total: /* @__PURE__ */ jsx96(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
10036
+ legs: /* @__PURE__ */ jsx99(NumberSelect, { current: String(bigLegs), choices: legChoicesFor(bigTotal), label: strings.matchesLabel, notToday: strings.notToday, lockEmpty: false, onChoose: chooseBigLegs }),
10037
+ total: /* @__PURE__ */ jsx99(NumberSelect, { current: bigTotal.toFixed(1), choices: totalChoices, label: strings.totalLabel, notToday: strings.notToday, onChoose: chooseBigTotal })
9701
10038
  }),
9702
10039
  ready: comboReady(bigCell),
9703
- send: /* @__PURE__ */ jsx96(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
10040
+ send: /* @__PURE__ */ jsx99(RoundSend, { label: strings.send, display: strings.comboDisplay(bigLegs, bigTotal), disabled: !bigCell || streaming, onClick: () => {
9704
10041
  if (bigCell) onSend(comboAsk(bigCell, strings));
9705
10042
  } })
9706
10043
  }
9707
10044
  ),
9708
- markets.length > 0 && /* @__PURE__ */ jsx96(
10045
+ markets.length > 0 && /* @__PURE__ */ jsx99(
9709
10046
  AskRow,
9710
10047
  {
9711
10048
  icon: "\u26BD",
9712
10049
  ask: fillTemplate(strings.marketRow, {
9713
- market: /* @__PURE__ */ jsx96(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
10050
+ market: /* @__PURE__ */ jsx99(ChoiceSelect, { currentIdx: marketIdx, sizeLabels: marketLabels, optionLabels: marketLabels, label: strings.marketName, onChoose: chooseMarket })
9714
10051
  }),
9715
10052
  ready: marketCell ? strings.readyCount(marketCell.count) : null,
9716
- send: /* @__PURE__ */ jsx96(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
10053
+ send: /* @__PURE__ */ jsx99(RoundSend, { label: strings.send, display: marketCell ? marketDisplay(marketCell, strings) : "", disabled: !marketCell || streaming, onClick: () => {
9717
10054
  if (marketCell) onSend(marketAsk(marketCell, strings));
9718
10055
  } })
9719
10056
  }
9720
10057
  ),
9721
- /* @__PURE__ */ jsx96("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10058
+ /* @__PURE__ */ jsx99("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9722
10059
  ] });
9723
10060
  }
9724
10061
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
9725
10062
  const totals = comboTotals(grid);
9726
10063
  const legChoices = comboLegChoices(grid);
9727
- const [start] = useState45(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
9728
- const [total, setTotal] = useState45(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
9729
- const [legs, setLegs] = useState45(() => {
10064
+ const [start] = useState48(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
10065
+ const [total, setTotal] = useState48(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
10066
+ const [legs, setLegs] = useState48(() => {
9730
10067
  if (initialTotal === void 0) return initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : start.legs;
9731
10068
  const from = initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : startValue(legChoices, START.comboLegs);
9732
10069
  return legsForTotal(grid, nearest(totals, initialTotal), from);
9733
10070
  });
9734
- const [announcement, setAnnouncement] = useState45("");
10071
+ const [announcement, setAnnouncement] = useState48("");
9735
10072
  const cell = findCombo(grid, total, legs);
9736
10073
  const minLegs = legChoices[0] ?? legs;
9737
10074
  const maxLegs = legChoices[legChoices.length - 1] ?? legs;
@@ -9742,29 +10079,29 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
9742
10079
  const d = strings.comboDisplay(nextLegs, nextTotal);
9743
10080
  setAnnouncement(findCombo(grid, nextTotal, nextLegs) ? d : `${d}. ${strings.unavailable}`);
9744
10081
  };
9745
- const footer = /* @__PURE__ */ jsx96(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
10082
+ const footer = /* @__PURE__ */ jsx99(SendButton, { label: strings.send, display, disabled: !cell || streaming, onClick: () => {
9746
10083
  if (cell) onSend(comboAsk(cell, strings));
9747
10084
  } });
9748
- return /* @__PURE__ */ jsxs81(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
9749
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
9750
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
9751
- /* @__PURE__ */ jsx96("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
10085
+ return /* @__PURE__ */ jsxs85(PresetToolModal, { title: strings.buildCombo, closeLabel: strings.close, onClose, footer, children: [
10086
+ /* @__PURE__ */ jsxs85("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.totalLabel, children: [
10087
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.totalLabel }),
10088
+ /* @__PURE__ */ jsx99("div", { className: "ss-w-tool-chips", children: totals.map((t) => /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-chip", "aria-pressed": samePrice(t, total), onClick: () => choose(t, samePrice(t, total) ? legs : legsForTotal(grid, t, legs)), children: t.toFixed(1) }, t)) })
9752
10089
  ] }),
9753
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
9754
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
9755
- /* @__PURE__ */ jsxs81("div", { className: "ss-w-tool-stepper", children: [
9756
- /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
9757
- /* @__PURE__ */ jsx96("span", { className: "ss-w-tool-count", children: legs }),
9758
- /* @__PURE__ */ jsx96("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
10090
+ /* @__PURE__ */ jsxs85("div", { className: "ss-w-tool-section", role: "group", "aria-label": strings.matchesLabel, children: [
10091
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-label", "aria-hidden": "true", children: strings.matchesLabel }),
10092
+ /* @__PURE__ */ jsxs85("div", { className: "ss-w-tool-stepper", children: [
10093
+ /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.fewerMatches, disabled: legs <= minLegs, onClick: () => choose(total, legs - 1), children: "\u2212" }),
10094
+ /* @__PURE__ */ jsx99("span", { className: "ss-w-tool-count", children: legs }),
10095
+ /* @__PURE__ */ jsx99("button", { type: "button", className: "ss-w-tool-step", "aria-label": strings.moreMatches, disabled: legs >= maxLegs, onClick: () => choose(total, legs + 1), children: "+" })
9759
10096
  ] })
9760
10097
  ] }),
9761
- cell ? /* @__PURE__ */ jsx96(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx96(Unavailable, { text: strings.unavailable }),
9762
- /* @__PURE__ */ jsx96("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
10098
+ cell ? /* @__PURE__ */ jsx99(ComboPreview, { cell, formatKickoff }) : /* @__PURE__ */ jsx99(Unavailable, { text: strings.unavailable }),
10099
+ /* @__PURE__ */ jsx99("p", { className: "ss-w-vh", "aria-live": "polite", children: announcement })
9763
10100
  ] });
9764
10101
  }
9765
10102
 
9766
10103
  // src/usePresetDial.ts
9767
- import { useCallback as useCallback16, useEffect as useEffect27, useRef as useRef23, useState as useState46 } from "react";
10104
+ import { useCallback as useCallback19, useEffect as useEffect30, useRef as useRef26, useState as useState49 } from "react";
9768
10105
  function sendInFlight(messages, isStreaming) {
9769
10106
  const last = messages[messages.length - 1];
9770
10107
  return isStreaming && !!last && last.role === "assistant" && !last.done && !last.isGreeting;
@@ -9778,25 +10115,25 @@ function lastUserId(messages) {
9778
10115
  }
9779
10116
  var SCROLL_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " "]);
9780
10117
  function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming, activeTab }) {
9781
- const [expanded, setExpanded] = useState46(() => !sendInFlight(messages, isStreaming));
9782
- const fold = useCallback16(() => setExpanded(false), []);
9783
- const toggle = useCallback16(() => setExpanded((e) => !e), []);
10118
+ const [expanded, setExpanded] = useState49(() => !sendInFlight(messages, isStreaming));
10119
+ const fold = useCallback19(() => setExpanded(false), []);
10120
+ const toggle = useCallback19(() => setExpanded((e) => !e), []);
9784
10121
  const currentUserId = lastUserId(messages);
9785
- const userIdRef = useRef23(currentUserId);
9786
- useEffect27(() => {
10122
+ const userIdRef = useRef26(currentUserId);
10123
+ useEffect30(() => {
9787
10124
  if (currentUserId === userIdRef.current) return;
9788
10125
  userIdRef.current = currentUserId;
9789
10126
  setExpanded(false);
9790
10127
  }, [currentUserId]);
9791
- const tabRef = useRef23(activeTab);
9792
- useEffect27(() => {
10128
+ const tabRef = useRef26(activeTab);
10129
+ useEffect30(() => {
9793
10130
  if (activeTab === tabRef.current) return;
9794
10131
  tabRef.current = activeTab;
9795
10132
  setExpanded(false);
9796
10133
  }, [activeTab]);
9797
- const expandedRef = useRef23(expanded);
10134
+ const expandedRef = useRef26(expanded);
9798
10135
  expandedRef.current = expanded;
9799
- useEffect27(() => {
10136
+ useEffect30(() => {
9800
10137
  const onEscape = (e) => {
9801
10138
  const dial = dialRef.current;
9802
10139
  if (e.key !== "Escape" || !dial || !e.composedPath().includes(dial)) return;
@@ -9809,7 +10146,7 @@ function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming
9809
10146
  window.addEventListener("keydown", onEscape, true);
9810
10147
  return () => window.removeEventListener("keydown", onEscape, true);
9811
10148
  }, [dialRef, dialButtonRef]);
9812
- useEffect27(() => {
10149
+ useEffect30(() => {
9813
10150
  if (!expanded) return;
9814
10151
  const layer = layerRef.current;
9815
10152
  const inDial = (e) => {
@@ -9861,11 +10198,11 @@ function markToolSeen() {
9861
10198
  }
9862
10199
 
9863
10200
  // src/components/ChatPanel.tsx
9864
- import { Fragment as Fragment23, jsx as jsx97, jsxs as jsxs82 } from "react/jsx-runtime";
10201
+ import { Fragment as Fragment23, jsx as jsx100, jsxs as jsxs86 } from "react/jsx-runtime";
9865
10202
  var FULLSCREEN_QUERY = "(max-width: 639px)";
9866
10203
  function useIsModal() {
9867
- const [modal, setModal] = useState47(false);
9868
- useEffect28(() => {
10204
+ const [modal, setModal] = useState50(false);
10205
+ useEffect31(() => {
9869
10206
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
9870
10207
  const mql = window.matchMedia(FULLSCREEN_QUERY);
9871
10208
  const sync = () => setModal(mql.matches);
@@ -9876,10 +10213,10 @@ function useIsModal() {
9876
10213
  return modal;
9877
10214
  }
9878
10215
  var HIDDEN_LAYER_STYLE = { position: "absolute", inset: 0, visibility: "hidden", display: "flex", flexDirection: "column" };
9879
- function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, loggedIn, conversation, presetGrid }) {
10216
+ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, clubFixturesResult, clubStandingsResult, clubSquadResult, loggedIn, conversation, presetGrid }) {
9880
10217
  const { state, close, stop, send, reset } = controller;
9881
10218
  const isModal = useIsModal();
9882
- useEffect28(() => {
10219
+ useEffect31(() => {
9883
10220
  const onKey = (e) => {
9884
10221
  if (e.key === "Escape") close();
9885
10222
  };
@@ -9895,19 +10232,19 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9895
10232
  monitor?.setActiveTab("chat");
9896
10233
  send(text, { grounding });
9897
10234
  };
9898
- useEffect28(() => {
10235
+ useEffect31(() => {
9899
10236
  if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
9900
10237
  }, [monitor, state.isStreaming, state.messages.length]);
9901
10238
  const onChatTab = !monitor || monitor.activeTab === "chat";
9902
- const layerRef = useRef24(null);
9903
- const dialRef = useRef24(null);
9904
- const dialButtonRef = useRef24(null);
9905
- const inputRef = useRef24(null);
9906
- const limitRef = useRef24(null);
9907
- const typedSendRef = useRef24(false);
9908
- const focusAfterCloseRef = useRef24(null);
9909
- const [tool, setTool] = useState47(null);
9910
- const [toolSeen, setToolSeen] = useState47(readToolSeen);
10239
+ const layerRef = useRef27(null);
10240
+ const dialRef = useRef27(null);
10241
+ const dialButtonRef = useRef27(null);
10242
+ const inputRef = useRef27(null);
10243
+ const limitRef = useRef27(null);
10244
+ const typedSendRef = useRef27(false);
10245
+ const focusAfterCloseRef = useRef27(null);
10246
+ const [tool, setTool] = useState50(null);
10247
+ const [toolSeen, setToolSeen] = useState50(readToolSeen);
9911
10248
  const dial = usePresetDial({
9912
10249
  layerRef,
9913
10250
  dialRef,
@@ -9919,53 +10256,53 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9919
10256
  const { fold } = dial;
9920
10257
  const paused = isPaused(state.limit);
9921
10258
  const showDial = !!presetGrid && onChatTab && !tool && !paused;
9922
- useEffect28(() => {
10259
+ useEffect31(() => {
9923
10260
  if (paused) setTool(null);
9924
10261
  }, [paused]);
9925
- useEffect28(() => {
10262
+ useEffect31(() => {
9926
10263
  if (!paused) return;
9927
10264
  if (typedSendRef.current) limitRef.current?.focus();
9928
10265
  typedSendRef.current = false;
9929
10266
  }, [paused]);
9930
- const openTool = useCallback17((next) => {
10267
+ const openTool = useCallback20((next) => {
9931
10268
  fold();
9932
10269
  markToolSeen();
9933
10270
  setToolSeen(true);
9934
10271
  setTool(next);
9935
10272
  }, [fold]);
9936
- const onPill = useCallback17((kind) => openTool(kind === "numbers" ? { kind: "numbers" } : { kind: "combo" }), [openTool]);
10273
+ const onPill = useCallback20((kind) => openTool(kind === "numbers" ? { kind: "numbers" } : { kind: "combo" }), [openTool]);
9937
10274
  const toolsValue = useMemo5(
9938
10275
  () => presetGrid && !paused ? { openBuilder: (total, legs) => openTool({ kind: "combo", total, legs }), changeLabel: ui.presets.changeCombo } : null,
9939
10276
  [presetGrid, paused, openTool, ui.presets.changeCombo]
9940
10277
  );
9941
- const closeTool = useCallback17(() => {
10278
+ const closeTool = useCallback20(() => {
9942
10279
  focusAfterCloseRef.current = "dial";
9943
10280
  setTool(null);
9944
10281
  }, []);
9945
- const sendAsk = useCallback17((ask) => {
10282
+ const sendAsk = useCallback20((ask) => {
9946
10283
  focusAfterCloseRef.current = "composer";
9947
10284
  setTool(null);
9948
10285
  monitor?.setActiveTab("chat");
9949
10286
  send(ask.message, { displayText: ask.displayText, preset: ask.preset });
9950
10287
  }, [monitor, send]);
9951
- const formatKickoff = useCallback17((kickoffUtc) => {
10288
+ const formatKickoff = useCallback20((kickoffUtc) => {
9952
10289
  const k = ui.bettingKickoff(kickoffUtc);
9953
10290
  return `${k.dayLabel} ${k.time}`;
9954
10291
  }, [ui]);
9955
- useEffect28(() => {
10292
+ useEffect31(() => {
9956
10293
  if (tool) return;
9957
10294
  const target = focusAfterCloseRef.current;
9958
10295
  focusAfterCloseRef.current = null;
9959
10296
  if (target === "dial") dialButtonRef.current?.focus();
9960
10297
  else if (target === "composer") inputRef.current?.focus();
9961
10298
  }, [tool]);
9962
- useEffect28(() => {
10299
+ useEffect31(() => {
9963
10300
  if (!tool || onChatTab && presetGrid) return;
9964
10301
  focusAfterCloseRef.current = "composer";
9965
10302
  setTool(null);
9966
10303
  }, [tool, onChatTab, presetGrid]);
9967
- return /* @__PURE__ */ jsxs82("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
9968
- /* @__PURE__ */ jsx97(
10304
+ return /* @__PURE__ */ jsxs86("div", { className: "ss-w-panel", role: "dialog", "aria-modal": isModal, "aria-label": ui.chatDialogLabel, children: [
10305
+ /* @__PURE__ */ jsx100(
9969
10306
  ChatHeader,
9970
10307
  {
9971
10308
  onClose: close,
@@ -9978,7 +10315,7 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9978
10315
  moreOptionsLabel: ui.moreOptions
9979
10316
  }
9980
10317
  ),
9981
- monitor && /* @__PURE__ */ jsx97(
10318
+ monitor && /* @__PURE__ */ jsx100(
9982
10319
  TabBar,
9983
10320
  {
9984
10321
  monitor,
@@ -9987,12 +10324,13 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9987
10324
  oddsCount: monitor.pins.filter((p) => p.kind !== "match").length,
9988
10325
  todayCount: discovery?.liveCount ?? 0,
9989
10326
  hasToday: discovery ? visibleGroupsOf(discovery.groups, discovery.states).length > 0 : false,
9990
- gamesEnabled: gamesResult?.enabled ?? false
10327
+ gamesEnabled: gamesResult?.enabled ?? false,
10328
+ clubEnabled: clubFixturesResult?.enabled ?? false
9991
10329
  }
9992
10330
  ),
9993
- /* @__PURE__ */ jsxs82("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
9994
- /* @__PURE__ */ jsx97(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx97(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
9995
- showDial ? /* @__PURE__ */ jsx97(
10331
+ /* @__PURE__ */ jsxs86("div", { ref: layerRef, className: "ss-w-chat-layer", "data-dial": presetGrid ? "" : void 0, style: onChatTab ? void 0 : HIDDEN_LAYER_STYLE, children: [
10332
+ /* @__PURE__ */ jsx100(PresetToolsContext.Provider, { value: toolsValue, children: /* @__PURE__ */ jsx100(MessageList, { controller, ui, slip, onDashboardTap, monitor }) }),
10333
+ showDial ? /* @__PURE__ */ jsx100(
9996
10334
  PresetSpeedDial,
9997
10335
  {
9998
10336
  expanded: dial.expanded,
@@ -10004,12 +10342,15 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
10004
10342
  buttonRef: dialButtonRef
10005
10343
  }
10006
10344
  ) : null,
10007
- tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ jsx97(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx97(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
10345
+ tool && presetGrid && onChatTab && !paused ? tool.kind === "numbers" ? /* @__PURE__ */ jsx100(SetNumbersTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, onSend: sendAsk, onClose: closeTool }) : /* @__PURE__ */ jsx100(BuildComboTool, { grid: presetGrid, strings: ui.presets, streaming: state.isStreaming, formatKickoff, initialTotal: tool.total, initialLegs: tool.legs, onSend: sendAsk, onClose: closeTool }) : null
10008
10346
  ] }),
10009
- monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx97(TodayPanel, { discovery, ui, monitor }),
10010
- monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx97(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
10011
- monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx97(OddsPanel, { monitor, ui, slip }),
10012
- monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx97(
10347
+ monitor && discovery && monitor.activeTab === "today" && /* @__PURE__ */ jsx100(TodayPanel, { discovery, ui, monitor }),
10348
+ monitor && monitor.activeTab === "following" && /* @__PURE__ */ jsx100(MatchesPanel, { monitor, ui, slip, onAsk: paused ? void 0 : handleAsk }),
10349
+ monitor && monitor.activeTab === "odds" && /* @__PURE__ */ jsx100(OddsPanel, { monitor, ui, slip }),
10350
+ monitor && monitor.activeTab === "fixtures" && /* @__PURE__ */ jsx100(Fixtures, { fixtures: clubFixturesResult?.fixtures ?? [], loading: clubFixturesResult?.loading ?? false, ui }),
10351
+ monitor && monitor.activeTab === "standings" && /* @__PURE__ */ jsx100(Standings, { standings: clubStandingsResult?.data ?? null, loading: clubStandingsResult?.loading ?? false, ui }),
10352
+ monitor && monitor.activeTab === "squad" && /* @__PURE__ */ jsx100(Squad, { squad: clubSquadResult?.data ?? null, loading: clubSquadResult?.loading ?? false, ui }),
10353
+ monitor && monitor.activeTab === "games" && gamesResult && /* @__PURE__ */ jsx100(
10013
10354
  GamesPanel,
10014
10355
  {
10015
10356
  loggedIn: !!loggedIn,
@@ -10017,25 +10358,16 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
10017
10358
  ui,
10018
10359
  conversation,
10019
10360
  leaderboard: leaderboardResult?.data ?? null,
10361
+ leaderboardLoading: leaderboardResult?.loading ?? false,
10020
10362
  refreshHub: () => {
10021
10363
  gamesResult.refresh();
10022
10364
  leaderboardResult?.refresh();
10023
10365
  }
10024
10366
  }
10025
10367
  ),
10026
- monitor && monitor.activeTab === "leaderboard" && leaderboardResult && /* @__PURE__ */ jsx97(
10027
- LeaderboardPanel,
10028
- {
10029
- loggedIn: !!loggedIn,
10030
- data: leaderboardResult.data,
10031
- loading: leaderboardResult.loading,
10032
- onPlay: () => monitor.setActiveTab("games"),
10033
- ui
10034
- }
10035
- ),
10036
- (!monitor || monitor.activeTab !== "games" && monitor.activeTab !== "leaderboard") && /* @__PURE__ */ jsxs82(Fragment23, { children: [
10037
- /* @__PURE__ */ jsx97("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
10038
- paused ? null : /* @__PURE__ */ jsx97(
10368
+ (!monitor || monitor.activeTab !== "games") && /* @__PURE__ */ jsxs86(Fragment23, { children: [
10369
+ /* @__PURE__ */ jsx100("div", { ref: limitRef, className: "ss-w-limit", role: "status", tabIndex: -1, children: state.limit ? limitText(state.limit, ui) : null }),
10370
+ paused ? null : /* @__PURE__ */ jsx100(
10039
10371
  ChatInput,
10040
10372
  {
10041
10373
  ref: inputRef,
@@ -10054,9 +10386,9 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
10054
10386
  }
10055
10387
 
10056
10388
  // src/components/HostEventsProvider.tsx
10057
- import { jsx as jsx98 } from "react/jsx-runtime";
10389
+ import { jsx as jsx101 } from "react/jsx-runtime";
10058
10390
  function HostEventsProvider({ value, children }) {
10059
- return /* @__PURE__ */ jsx98(SlipStateContext.Provider, { value: value.slipState, children });
10391
+ return /* @__PURE__ */ jsx101(SlipStateContext.Provider, { value: value.slipState, children });
10060
10392
  }
10061
10393
 
10062
10394
  // src/styles/css.generated.ts
@@ -11212,6 +11544,11 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
11212
11544
  .ss-w-mk-ctx-right { display: flex; align-items: center; gap: 6px; margin-left: auto; flex: none; }
11213
11545
  /* flex:1 keeps the composer pinned to the panel bottom when a tab is empty */
11214
11546
  .ss-w-mon-empty { flex: 1; padding: 24px 16px; text-align: center; font-size: 12.5px; color: var(--ss-w-faint); }
11547
+ /* shared group-header label for Club Fixtures (round) and Squad (position) list groups */
11548
+ .ss-w-club-eyebrow { font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--ss-w-faint); padding: 10px 2px 4px; }
11549
+ .ss-w-sq-row { display: flex; align-items: center; gap: 10px; padding: 7px 2px; border-bottom: 1px solid var(--ss-w-line); }
11550
+ .ss-w-sq-num { flex: none; width: 20px; text-align: right; font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--ss-w-faint); }
11551
+ .ss-w-sq-name { font-size: 13px; font-weight: 600; color: var(--ss-w-ink); }
11215
11552
  /* Per-pin unavailable state: the pin's context line still rendered above (score, name, unpin), but
11216
11553
  the pin has neither a card nor history (compose-time rescue failed) -- a small inline note beats
11217
11554
  a bare context line with nothing under it. */
@@ -11815,7 +12152,7 @@ var WIDGET_CSS = `.ss-w-root { all: revert; }
11815
12152
  `;
11816
12153
 
11817
12154
  // src/StatsWidget.tsx
11818
- import { jsx as jsx99 } from "react/jsx-runtime";
12155
+ import { jsx as jsx102 } from "react/jsx-runtime";
11819
12156
  function buildClient(props) {
11820
12157
  try {
11821
12158
  if ("client" in props && props.client) {
@@ -11849,14 +12186,14 @@ function StatsWidget(props) {
11849
12186
  [built?.client]
11850
12187
  );
11851
12188
  const ui = useMemo6(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
11852
- const rootRef = useRef25(null);
11853
- const introDoneRef = useRef25(false);
11854
- const markIntroDone = useCallback18(() => {
12189
+ const rootRef = useRef28(null);
12190
+ const introDoneRef = useRef28(false);
12191
+ const markIntroDone = useCallback21(() => {
11855
12192
  introDoneRef.current = true;
11856
12193
  }, []);
11857
12194
  const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
11858
12195
  const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
11859
- const [hasToday, setHasToday] = useState48(false);
12196
+ const [hasToday, setHasToday] = useState51(false);
11860
12197
  const liveCardWatches = useMemo6(() => {
11861
12198
  const seen = /* @__PURE__ */ new Set();
11862
12199
  const out = [];
@@ -11871,25 +12208,27 @@ function StatsWidget(props) {
11871
12208
  return out;
11872
12209
  }, [controller.state.messages]);
11873
12210
  const locale = cfg?.locale;
12211
+ const clubFixturesResult = useClubFixtures(built?.conversation ?? null);
11874
12212
  const monitor = useLiveMonitor({
11875
12213
  getLiveMonitor: (pins) => built ? built.conversation.getLiveMonitor(pins, locale) : Promise.resolve(null),
11876
12214
  getMarketOdds: (matchId, dev) => built ? built.conversation.getMarketOdds(matchId, dev) : Promise.resolve(null),
11877
12215
  storageKey: `ss-w-pins:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`,
11878
12216
  isOpen: controller.state.isOpen,
11879
12217
  hasToday,
11880
- watches: liveCardWatches
12218
+ watches: liveCardWatches,
12219
+ clubEnabled: clubFixturesResult.enabled
11881
12220
  });
11882
12221
  const operatorUserId = cfg?.userContext?.operatorUserId;
11883
12222
  const anonymousUserId = cfg?.userContext?.anonymousUserId;
11884
- const getSchedule = useCallback18(
12223
+ const getSchedule = useCallback21(
11885
12224
  (localDate, utcOffsetMinutes) => built ? built.conversation.getSchedule(localDate, utcOffsetMinutes, operatorUserId, anonymousUserId) : Promise.resolve(null),
11886
12225
  [built, operatorUserId, anonymousUserId]
11887
12226
  );
11888
- const postLeagueStar = useCallback18(
12227
+ const postLeagueStar = useCallback21(
11889
12228
  (competitionId, starred) => built ? built.conversation.starLeague(competitionId, starred, operatorUserId, anonymousUserId) : Promise.resolve(null),
11890
12229
  [built, operatorUserId, anonymousUserId]
11891
12230
  );
11892
- const getStates = useCallback18(
12231
+ const getStates = useCallback21(
11893
12232
  (matchIds) => built ? built.conversation.getStates(matchIds) : Promise.resolve(null),
11894
12233
  [built]
11895
12234
  );
@@ -11908,11 +12247,11 @@ function StatsWidget(props) {
11908
12247
  pinnedMatchIds
11909
12248
  });
11910
12249
  const todayHasContent = visibleGroupsOf(discovery.groups, discovery.states).length > 0;
11911
- useEffect29(() => {
12250
+ useEffect32(() => {
11912
12251
  setHasToday(todayHasContent);
11913
12252
  }, [todayHasContent]);
11914
- const prevLiveSnapshotRef = useRef25(monitor.snapshot);
11915
- useEffect29(() => {
12253
+ const prevLiveSnapshotRef = useRef28(monitor.snapshot);
12254
+ useEffect32(() => {
11916
12255
  const snap = monitor.snapshot;
11917
12256
  if (!snap || snap === prevLiveSnapshotRef.current) return;
11918
12257
  prevLiveSnapshotRef.current = snap;
@@ -11948,14 +12287,16 @@ function StatsWidget(props) {
11948
12287
  }, [monitor.snapshot]);
11949
12288
  const gamesResult = useGames(built?.conversation ?? null, { activeTab: monitor.activeTab });
11950
12289
  const leaderboardResult = useLeaderboard(built?.conversation ?? null, { activeTab: monitor.activeTab });
11951
- const getPricePresets = useCallback18(
12290
+ const clubStandingsResult = useClubStandings(built?.conversation ?? null, { activeTab: monitor.activeTab, enabled: clubFixturesResult.enabled });
12291
+ const clubSquadResult = useClubSquad(built?.conversation ?? null, { activeTab: monitor.activeTab, enabled: clubFixturesResult.enabled });
12292
+ const getPricePresets = useCallback21(
11952
12293
  (locale2) => built ? built.conversation.getPricePresets(locale2, { pool: "open" }) : Promise.resolve(null),
11953
12294
  [built]
11954
12295
  );
11955
12296
  const presetGrid = usePresetGrid({ getPricePresets, isOpen: controller.state.isOpen, locale: ui.presets.lang });
11956
12297
  const markTodayActivity = monitor.markTodayActivity;
11957
- const prevLiveCountRef = useRef25(0);
11958
- useEffect29(() => {
12298
+ const prevLiveCountRef = useRef28(0);
12299
+ useEffect32(() => {
11959
12300
  const rose = prevLiveCountRef.current === 0 && discovery.liveCount > 0;
11960
12301
  prevLiveCountRef.current = discovery.liveCount;
11961
12302
  if (rose) markTodayActivity();
@@ -12005,11 +12346,11 @@ function StatsWidget(props) {
12005
12346
  })
12006
12347
  }));
12007
12348
  const conversationId = controller.state.conversationId ?? void 0;
12008
- useEffect29(() => {
12349
+ useEffect32(() => {
12009
12350
  if (!logger) return;
12010
12351
  logger.setIdentity({ operatorUserId, anonymousUserId, conversationId });
12011
12352
  }, [logger, operatorUserId, anonymousUserId, conversationId]);
12012
- useEffect29(() => {
12353
+ useEffect32(() => {
12013
12354
  if (!logger) return;
12014
12355
  logger.resume();
12015
12356
  const onHide = () => {
@@ -12027,14 +12368,14 @@ function StatsWidget(props) {
12027
12368
  logger.dispose();
12028
12369
  };
12029
12370
  }, [logger]);
12030
- useEffect29(() => {
12371
+ useEffect32(() => {
12031
12372
  if (!built || !ui.injectStyles) return;
12032
12373
  const node = rootRef.current?.getRootNode();
12033
12374
  if (node) injectStyles(node);
12034
12375
  }, [built, ui.injectStyles]);
12035
12376
  if (!built) return null;
12036
12377
  const attrs = themeAttrs(ui);
12037
- return /* @__PURE__ */ jsx99(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx99(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx99("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__ */ jsx99(
12378
+ return /* @__PURE__ */ jsx102(EventLogContext.Provider, { value: logger, children: /* @__PURE__ */ jsx102(HostEventsProvider, { value: hostEvents, children: /* @__PURE__ */ jsx102("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__ */ jsx102(
12038
12379
  ChatPanel,
12039
12380
  {
12040
12381
  controller,
@@ -12045,11 +12386,14 @@ function StatsWidget(props) {
12045
12386
  discovery,
12046
12387
  gamesResult,
12047
12388
  leaderboardResult,
12389
+ clubFixturesResult,
12390
+ clubStandingsResult,
12391
+ clubSquadResult,
12048
12392
  loggedIn: !!operatorUserId,
12049
12393
  conversation: built?.conversation ?? null,
12050
12394
  presetGrid
12051
12395
  }
12052
- ) : /* @__PURE__ */ jsx99(
12396
+ ) : /* @__PURE__ */ jsx102(
12053
12397
  ChatFab,
12054
12398
  {
12055
12399
  label: ui.launcherLabel,