@sensiblestats/widget-react 0.77.0 → 0.78.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.cjs CHANGED
@@ -37,7 +37,7 @@ __export(index_exports, {
37
37
  module.exports = __toCommonJS(index_exports);
38
38
 
39
39
  // src/StatsWidget.tsx
40
- var import_react54 = require("react");
40
+ var import_react55 = require("react");
41
41
  var import_widget_sdk5 = require("@sensiblestats/widget-sdk");
42
42
 
43
43
  // src/kickoff.ts
@@ -3144,11 +3144,26 @@ function usePopupTelemetry(log, isOpen, popupText, dismissPopup) {
3144
3144
  }, [log, dismissPopup]);
3145
3145
  }
3146
3146
 
3147
+ // src/openTelemetry.ts
3148
+ var import_react12 = require("react");
3149
+ function useOpenTelemetry(log, isOpen) {
3150
+ const openLoggedRef = (0, import_react12.useRef)(false);
3151
+ (0, import_react12.useEffect)(() => {
3152
+ if (!isOpen) {
3153
+ openLoggedRef.current = false;
3154
+ return;
3155
+ }
3156
+ if (openLoggedRef.current || !log) return;
3157
+ openLoggedRef.current = true;
3158
+ log.log({ name: "widget_open" });
3159
+ }, [log, isOpen]);
3160
+ }
3161
+
3147
3162
  // src/components/ChatFab.tsx
3148
- var import_react13 = require("react");
3163
+ var import_react14 = require("react");
3149
3164
 
3150
3165
  // src/components/BrandMark.tsx
3151
- var import_react12 = require("react");
3166
+ var import_react13 = require("react");
3152
3167
 
3153
3168
  // src/assets/logo.ts
3154
3169
  var SS_LOGO_DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjoAAAI6CAYAAAAuSOLAAAAAAXNSR0IArs4c6QAAAJplWElmTU0AKgAAAAgAAwESAAMAAAABAAEAAAExAAIAAAA9AAAAModpAAQAAAABAAAAcAAAAABBZG9iZSBQaG90b3Nob3AgMjYuMTAgKDIwMjUwNzMwLm0uMzE2NiAwN2IxMjM0KSAgKE1hY2ludG9zaCkAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAAI6oAMABAAAAAEAAAI6AAAAACwGtVwAAAQwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6QzBGRTM5NjM5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6QzBGRTM5NjI5NEJEMTFGMEJGNjZEMjUyN0U0MzU5RUM8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0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";
@@ -3211,7 +3226,7 @@ function DashboardIcon({ name }) {
3211
3226
  // src/components/BrandMark.tsx
3212
3227
  var import_jsx_runtime2 = require("react/jsx-runtime");
3213
3228
  function BrandMark({ logoUrl, className }) {
3214
- const [failed, setFailed] = (0, import_react12.useState)(false);
3229
+ const [failed, setFailed] = (0, import_react13.useState)(false);
3215
3230
  if (!logoUrl || failed) return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SsMark, { className });
3216
3231
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("img", { className, src: logoUrl, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
3217
3232
  }
@@ -3247,9 +3262,9 @@ function GreetingBubble({ text, onOpen, onDismiss, dismissLabel = "Dismiss", ask
3247
3262
  var import_jsx_runtime4 = require("react/jsx-runtime");
3248
3263
  function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup, dismissLabel = "Dismiss", introAllowed = false, onIntroStart, asks }) {
3249
3264
  const bubble = popupText ?? greeting;
3250
- const [intro, setIntro] = (0, import_react13.useState)(false);
3251
- const armedRef = (0, import_react13.useRef)(introAllowed);
3252
- (0, import_react13.useEffect)(() => {
3265
+ const [intro, setIntro] = (0, import_react14.useState)(false);
3266
+ const armedRef = (0, import_react14.useRef)(introAllowed);
3267
+ (0, import_react14.useEffect)(() => {
3253
3268
  if (armedRef.current && bubble) {
3254
3269
  armedRef.current = false;
3255
3270
  setIntro(true);
@@ -3263,10 +3278,10 @@ function ChatFab({ label, greeting, popupText, logoUrl, onOpen, onDismissPopup,
3263
3278
  }
3264
3279
 
3265
3280
  // src/components/ChatPanel.tsx
3266
- var import_react53 = require("react");
3281
+ var import_react54 = require("react");
3267
3282
 
3268
3283
  // src/components/ChatHeader.tsx
3269
- var import_react14 = require("react");
3284
+ var import_react15 = require("react");
3270
3285
  var import_jsx_runtime5 = require("react/jsx-runtime");
3271
3286
  function ChatHeader({
3272
3287
  onClose,
@@ -3278,15 +3293,15 @@ function ChatHeader({
3278
3293
  newConversationLabel = "New conversation",
3279
3294
  moreOptionsLabel = "More options"
3280
3295
  }) {
3281
- const [menuOpen, setMenuOpen] = (0, import_react14.useState)(false);
3282
- const wrapRef = (0, import_react14.useRef)(null);
3283
- const kebabRef = (0, import_react14.useRef)(null);
3284
- const firstItemRef = (0, import_react14.useRef)(null);
3296
+ const [menuOpen, setMenuOpen] = (0, import_react15.useState)(false);
3297
+ const wrapRef = (0, import_react15.useRef)(null);
3298
+ const kebabRef = (0, import_react15.useRef)(null);
3299
+ const firstItemRef = (0, import_react15.useRef)(null);
3285
3300
  const hasMenu = !!(canReset && onNewConversation);
3286
- (0, import_react14.useEffect)(() => {
3301
+ (0, import_react15.useEffect)(() => {
3287
3302
  if (menuOpen) firstItemRef.current?.focus();
3288
3303
  }, [menuOpen]);
3289
- (0, import_react14.useEffect)(() => {
3304
+ (0, import_react15.useEffect)(() => {
3290
3305
  if (!menuOpen) return;
3291
3306
  const onPointer = (e) => {
3292
3307
  if (!wrapRef.current?.contains(e.target)) setMenuOpen(false);
@@ -3342,7 +3357,7 @@ function ChatHeader({
3342
3357
  }
3343
3358
 
3344
3359
  // src/components/MessageList.tsx
3345
- var import_react32 = require("react");
3360
+ var import_react33 = require("react");
3346
3361
 
3347
3362
  // src/components/Markdown.tsx
3348
3363
  var import_react_markdown = __toESM(require("react-markdown"), 1);
@@ -3360,7 +3375,7 @@ function Markdown({ text }) {
3360
3375
  }
3361
3376
 
3362
3377
  // src/components/EntityCardList.tsx
3363
- var import_react15 = require("react");
3378
+ var import_react16 = require("react");
3364
3379
  var import_jsx_runtime7 = require("react/jsx-runtime");
3365
3380
  var MAX_VISIBLE = 3;
3366
3381
  var RECORD_RE = /^(\d+)-(\d+)-(\d+)$/;
@@ -3444,7 +3459,7 @@ function ScopeTabs({ scopes, active, onSelect }) {
3444
3459
  )) });
3445
3460
  }
3446
3461
  function EntityCardItem({ c }) {
3447
- const [active, setActive] = (0, import_react15.useState)(0);
3462
+ const [active, setActive] = (0, import_react16.useState)(0);
3448
3463
  const hasBody = c.scopes.length > 0;
3449
3464
  if (!hasBody) {
3450
3465
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "ss-w-ecard ss-w-ecard-bare", "data-kind": c.kind, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CardHeader, { c, showScopeCrest: false }) });
@@ -3458,7 +3473,7 @@ function EntityCardItem({ c }) {
3458
3473
  ] });
3459
3474
  }
3460
3475
  function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMoreLabel = (n) => `Show ${n} more` }) {
3461
- const [expanded, setExpanded] = (0, import_react15.useState)(false);
3476
+ const [expanded, setExpanded] = (0, import_react16.useState)(false);
3462
3477
  if (cards.length === 0) return null;
3463
3478
  const visible = expanded ? cards : cards.slice(0, MAX_VISIBLE);
3464
3479
  const overflow = cards.length - MAX_VISIBLE;
@@ -3469,22 +3484,22 @@ function EntityCardList({ cards, disabled, showLessLabel = "Show less", showMore
3469
3484
  }
3470
3485
 
3471
3486
  // src/components/AddToSlipButton.tsx
3472
- var import_react18 = require("react");
3487
+ var import_react19 = require("react");
3473
3488
  var import_widget_sdk4 = require("@sensiblestats/widget-sdk");
3474
3489
 
3475
3490
  // src/slipStateContext.ts
3476
- var import_react16 = require("react");
3477
- var SlipStateContext = (0, import_react16.createContext)(null);
3491
+ var import_react17 = require("react");
3492
+ var SlipStateContext = (0, import_react17.createContext)(null);
3478
3493
  function useSlipState() {
3479
- return (0, import_react16.useContext)(SlipStateContext);
3494
+ return (0, import_react17.useContext)(SlipStateContext);
3480
3495
  }
3481
3496
 
3482
3497
  // src/components/Toast.tsx
3483
- var import_react17 = require("react");
3498
+ var import_react18 = require("react");
3484
3499
  var import_jsx_runtime8 = require("react/jsx-runtime");
3485
3500
  var DISMISS_MS = 4e3;
3486
3501
  function Toast({ toast, onDismiss }) {
3487
- (0, import_react17.useEffect)(() => {
3502
+ (0, import_react18.useEffect)(() => {
3488
3503
  if (!toast) return;
3489
3504
  const timer = setTimeout(onDismiss, DISMISS_MS);
3490
3505
  return () => clearTimeout(timer);
@@ -3502,10 +3517,10 @@ function withTimeout(value) {
3502
3517
  ]);
3503
3518
  }
3504
3519
  function SlipButton({ selection, shownOdds, marketDeveloperName, selectionLabel, line, slip, ui, price, ariaLabel }) {
3505
- const [pending, setPending] = (0, import_react18.useState)(false);
3506
- const [settledLocal, setSettledLocal] = (0, import_react18.useState)(false);
3507
- const [toast, setToast] = (0, import_react18.useState)(null);
3508
- const dismiss = (0, import_react18.useCallback)(() => setToast(null), []);
3520
+ const [pending, setPending] = (0, import_react19.useState)(false);
3521
+ const [settledLocal, setSettledLocal] = (0, import_react19.useState)(false);
3522
+ const [toast, setToast] = (0, import_react19.useState)(null);
3523
+ const dismiss = (0, import_react19.useCallback)(() => setToast(null), []);
3509
3524
  const log = useEventLog();
3510
3525
  const slipState = useSlipState();
3511
3526
  const handler = slip.onAddToSlip;
@@ -3617,14 +3632,14 @@ function OddsMovementBadge({
3617
3632
  }
3618
3633
 
3619
3634
  // src/components/Crest.tsx
3620
- var import_react19 = require("react");
3635
+ var import_react20 = require("react");
3621
3636
  var import_jsx_runtime11 = require("react/jsx-runtime");
3622
3637
  function initials2(name) {
3623
3638
  return (name ?? "").trim().slice(0, 1).toUpperCase() || "?";
3624
3639
  }
3625
3640
  function Crest2({ url, name, kind }) {
3626
3641
  const cls = kind === "comp" ? "ss-w-bi-comp-logo" : "ss-w-bi-crest";
3627
- const [failed, setFailed] = (0, import_react19.useState)(false);
3642
+ const [failed, setFailed] = (0, import_react20.useState)(false);
3628
3643
  if (url && !failed) {
3629
3644
  return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
3630
3645
  }
@@ -3632,7 +3647,7 @@ function Crest2({ url, name, kind }) {
3632
3647
  }
3633
3648
 
3634
3649
  // src/components/PinToggle.tsx
3635
- var import_react20 = require("react");
3650
+ var import_react21 = require("react");
3636
3651
  var import_jsx_runtime12 = require("react/jsx-runtime");
3637
3652
  var PIN_GLYPHS = {
3638
3653
  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" },
@@ -3640,8 +3655,8 @@ var PIN_GLYPHS = {
3640
3655
  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" }
3641
3656
  };
3642
3657
  function PinToggle({ pin, monitor, ui, market }) {
3643
- const [toast, setToast] = (0, import_react20.useState)(null);
3644
- const dismiss = (0, import_react20.useCallback)(() => setToast(null), []);
3658
+ const [toast, setToast] = (0, import_react21.useState)(null);
3659
+ const dismiss = (0, import_react21.useCallback)(() => setToast(null), []);
3645
3660
  const log = useEventLog();
3646
3661
  if (!monitor || !monitor.enabled) return null;
3647
3662
  const key = pinKey(pin);
@@ -3697,11 +3712,11 @@ function PinToggle({ pin, monitor, ui, market }) {
3697
3712
  }
3698
3713
 
3699
3714
  // src/components/PriceHistoryButton.tsx
3700
- var import_react21 = require("react");
3715
+ var import_react22 = require("react");
3701
3716
  var import_jsx_runtime13 = require("react/jsx-runtime");
3702
3717
  function PriceHistoryButton({ selection, monitor, ui }) {
3703
- const [toast, setToast] = (0, import_react21.useState)(null);
3704
- const dismiss = (0, import_react21.useCallback)(() => setToast(null), []);
3718
+ const [toast, setToast] = (0, import_react22.useState)(null);
3719
+ const dismiss = (0, import_react22.useCallback)(() => setToast(null), []);
3705
3720
  const log = useEventLog();
3706
3721
  if (!monitor || !monitor.enabled) return null;
3707
3722
  const name = joinSelection(selection.selectionLabel ?? void 0, selection.line ?? void 0);
@@ -3816,10 +3831,10 @@ function BettingInsightList({ insights, ui, slip, monitor }) {
3816
3831
  }
3817
3832
 
3818
3833
  // src/presetToolsContext.ts
3819
- var import_react22 = require("react");
3820
- var PresetToolsContext = (0, import_react22.createContext)(null);
3834
+ var import_react23 = require("react");
3835
+ var PresetToolsContext = (0, import_react23.createContext)(null);
3821
3836
  function usePresetTools() {
3822
- return (0, import_react22.useContext)(PresetToolsContext);
3837
+ return (0, import_react23.useContext)(PresetToolsContext);
3823
3838
  }
3824
3839
 
3825
3840
  // src/components/ComboCardList.tsx
@@ -3883,7 +3898,7 @@ function ComboCardList({ cards, ui, slip, monitor }) {
3883
3898
  }
3884
3899
 
3885
3900
  // src/components/MarketOddsCardList.tsx
3886
- var import_react23 = require("react");
3901
+ var import_react24 = require("react");
3887
3902
 
3888
3903
  // src/components/AllMarketsButton.tsx
3889
3904
  var import_jsx_runtime16 = require("react/jsx-runtime");
@@ -3946,7 +3961,7 @@ function fmtHhMm(iso, locale) {
3946
3961
  return new Date(iso).toLocaleTimeString(locale, { hour: "2-digit", minute: "2-digit", hour12: false });
3947
3962
  }
3948
3963
  function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }) {
3949
- const [open, setOpen] = (0, import_react23.useState)(false);
3964
+ const [open, setOpen] = (0, import_react24.useState)(false);
3950
3965
  const kickoffFallback = vm.kickoffUtc && ui?.bettingKickoff ? ui.bettingKickoff(vm.kickoffUtc) : void 0;
3951
3966
  const kickoff = vm.kickoffLabel ?? (kickoffFallback ? `${kickoffFallback.dayLabel} ${kickoffFallback.time}` : void 0);
3952
3967
  const hasNamedTeams = !!vm.homeTeamName && !!vm.awayTeamName;
@@ -3956,9 +3971,9 @@ function MarketOddsCard({ vm, ui, slip, monitor, inSlipIds, hideHeader, pinRef }
3956
3971
  const asOfMs = live ? new Date(live.asOfUtc).getTime() : NaN;
3957
3972
  const isStale = live != null && !isClosed && (vm.awaitingLiveUpdate === true || Date.now() - asOfMs > STALE_AFTER_MS);
3958
3973
  const staleTime = isStale && live ? fmtHhMm(live.asOfUtc, ui?.locale ?? "en") : null;
3959
- const [, setStaleTick] = (0, import_react23.useState)(0);
3974
+ const [, setStaleTick] = (0, import_react24.useState)(0);
3960
3975
  const watchStale = live != null && !isClosed && !isStale;
3961
- (0, import_react23.useEffect)(() => {
3976
+ (0, import_react24.useEffect)(() => {
3962
3977
  if (!watchStale) return;
3963
3978
  const id = window.setTimeout(() => setStaleTick((n) => n + 1), Math.max(0, asOfMs + STALE_AFTER_MS - Date.now()) + 1);
3964
3979
  return () => window.clearTimeout(id);
@@ -4037,7 +4052,7 @@ function MarketOddsCardList({ cards, ui, slip, monitor, inSlipIds, hideHeader, p
4037
4052
  }
4038
4053
 
4039
4054
  // src/components/CompactOddsList.tsx
4040
- var import_react24 = require("react");
4055
+ var import_react25 = require("react");
4041
4056
 
4042
4057
  // src/compactList.ts
4043
4058
  var COMPACT_MIN_CARDS = 3;
@@ -4151,11 +4166,11 @@ function Row({ row, columns, ui, slip, monitor, rowRef }) {
4151
4166
  ] });
4152
4167
  }
4153
4168
  function CompactOddsList({ list, ui, slip, monitor }) {
4154
- const [shown, setShown] = (0, import_react24.useState)(COMPACT_PAGE);
4169
+ const [shown, setShown] = (0, import_react25.useState)(COMPACT_PAGE);
4155
4170
  const hidden = list.rowCount - shown;
4156
- const [focusIndex, setFocusIndex] = (0, import_react24.useState)(null);
4157
- const focusRef = (0, import_react24.useRef)(null);
4158
- (0, import_react24.useEffect)(() => {
4171
+ const [focusIndex, setFocusIndex] = (0, import_react25.useState)(null);
4172
+ const focusRef = (0, import_react25.useRef)(null);
4173
+ (0, import_react25.useEffect)(() => {
4159
4174
  if (focusIndex !== null) focusRef.current?.focus();
4160
4175
  }, [focusIndex]);
4161
4176
  let left = shown;
@@ -4460,7 +4475,7 @@ function FixtureCard({ card }) {
4460
4475
  }
4461
4476
 
4462
4477
  // src/components/dashboard/CountdownCard.tsx
4463
- var import_react25 = require("react");
4478
+ var import_react26 = require("react");
4464
4479
  var import_jsx_runtime24 = require("react/jsx-runtime");
4465
4480
  var DAY_MS = 864e5;
4466
4481
  function remainingSegments(kickoffUnix, nowMs, withSeconds) {
@@ -4479,12 +4494,12 @@ function remainingSegments(kickoffUnix, nowMs, withSeconds) {
4479
4494
  function CountdownCard({ card }) {
4480
4495
  const { data } = card;
4481
4496
  const unitLabel = { d: data.daysUnit, h: data.hoursUnit, m: data.minutesUnit, s: data.secondsUnit };
4482
- const [nowMs, setNowMs] = (0, import_react25.useState)(() => Date.now());
4483
- const [reduced] = (0, import_react25.useState)(
4497
+ const [nowMs, setNowMs] = (0, import_react26.useState)(() => Date.now());
4498
+ const [reduced] = (0, import_react26.useState)(
4484
4499
  () => typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches
4485
4500
  );
4486
4501
  const withinDay = data.kickoffUnix * 1e3 - nowMs < DAY_MS;
4487
- (0, import_react25.useEffect)(() => {
4502
+ (0, import_react26.useEffect)(() => {
4488
4503
  if (reduced) return;
4489
4504
  const id = window.setInterval(() => setNowMs(Date.now()), withinDay ? 1e3 : 6e4);
4490
4505
  return () => window.clearInterval(id);
@@ -4492,7 +4507,7 @@ function CountdownCard({ card }) {
4492
4507
  const segments = remainingSegments(data.kickoffUnix, nowMs, withinDay && !reduced);
4493
4508
  return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "ss-w-fandash-card ss-w-fandash-countdown", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "ss-w-fandash-countdown-top", children: [
4494
4509
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "ss-w-fandash-eyebrow", children: card.title ?? "Kick-off in" }),
4495
- segments ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react25.Fragment, { children: [
4510
+ segments ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "ss-w-fandash-countdown-clock", children: segments.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react26.Fragment, { children: [
4496
4511
  i > 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "ss-w-fandash-countdown-colon", children: ":" }) : null,
4497
4512
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "ss-w-fandash-countdown-seg", children: [
4498
4513
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "ss-w-fandash-countdown-value", children: s.value }),
@@ -4503,7 +4518,7 @@ function CountdownCard({ card }) {
4503
4518
  }
4504
4519
 
4505
4520
  // src/components/dashboard/InjuriesCard.tsx
4506
- var import_react26 = require("react");
4521
+ var import_react27 = require("react");
4507
4522
  var import_jsx_runtime25 = require("react/jsx-runtime");
4508
4523
  var SHOWN = 3;
4509
4524
  function ColHead({ name, crestUrl }) {
@@ -4526,7 +4541,7 @@ function InjuryList({ rows, emptyLabel, limit }) {
4526
4541
  }
4527
4542
  function InjuriesCard({ card, ui }) {
4528
4543
  const { data } = card;
4529
- const [expanded, setExpanded] = (0, import_react26.useState)(false);
4544
+ const [expanded, setExpanded] = (0, import_react27.useState)(false);
4530
4545
  const hidden = Math.max(0, data.ours.length - SHOWN) + Math.max(0, data.theirs.length - SHOWN);
4531
4546
  const limit = expanded ? void 0 : SHOWN;
4532
4547
  const showMore = ui?.showMore ?? ((n) => `Show ${n} more`);
@@ -4632,7 +4647,7 @@ function LinksCard({ card }) {
4632
4647
  }
4633
4648
 
4634
4649
  // src/components/dashboard/PostMatchResultCard.tsx
4635
- var import_react27 = require("react");
4650
+ var import_react28 = require("react");
4636
4651
  var import_jsx_runtime31 = require("react/jsx-runtime");
4637
4652
  function initials3(name) {
4638
4653
  return name.trim().slice(0, 3).toUpperCase();
@@ -4642,7 +4657,7 @@ function PostMatchCrest({
4642
4657
  name,
4643
4658
  side
4644
4659
  }) {
4645
- const [failed, setFailed] = (0, import_react27.useState)(false);
4660
+ const [failed, setFailed] = (0, import_react28.useState)(false);
4646
4661
  const cls = `ss-w-fandash-postmatch-crest ss-w-fandash-postmatch-crest--${side}`;
4647
4662
  if (url && !failed) {
4648
4663
  return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -4841,10 +4856,10 @@ function RestingFormCard({ card }) {
4841
4856
  }
4842
4857
 
4843
4858
  // src/components/dashboard/LiveScoreCard.tsx
4844
- var import_react29 = require("react");
4859
+ var import_react30 = require("react");
4845
4860
 
4846
4861
  // src/useLiveClock.ts
4847
- var import_react28 = require("react");
4862
+ var import_react29 = require("react");
4848
4863
  var TICK_MS = 6e4;
4849
4864
  var MAX_LIVE_TICK_MINUTES = 15;
4850
4865
  function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
@@ -4853,10 +4868,10 @@ function computeDisplayMinute(minute, clockRunning, receivedAtMs) {
4853
4868
  return minute + Math.min(Math.max(0, elapsedMinutes), MAX_LIVE_TICK_MINUTES);
4854
4869
  }
4855
4870
  function useLiveClock(minute, clockRunning, receivedAtMs) {
4856
- const [displayMinute, setDisplayMinute] = (0, import_react28.useState)(
4871
+ const [displayMinute, setDisplayMinute] = (0, import_react29.useState)(
4857
4872
  () => computeDisplayMinute(minute, clockRunning, receivedAtMs)
4858
4873
  );
4859
- (0, import_react28.useEffect)(() => {
4874
+ (0, import_react29.useEffect)(() => {
4860
4875
  setDisplayMinute(computeDisplayMinute(minute, clockRunning, receivedAtMs));
4861
4876
  if (!clockRunning) return;
4862
4877
  const id = window.setInterval(() => {
@@ -4873,7 +4888,7 @@ function initials5(name) {
4873
4888
  return name.trim().slice(0, 3).toUpperCase();
4874
4889
  }
4875
4890
  function LiveCrest({ url, name, side }) {
4876
- const [failed, setFailed] = (0, import_react29.useState)(false);
4891
+ const [failed, setFailed] = (0, import_react30.useState)(false);
4877
4892
  const cls = `ss-w-fandash-live-crest ss-w-fandash-live-crest--${side}`;
4878
4893
  if (url && !failed) {
4879
4894
  return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("img", { className: cls, src: url, alt: "", "aria-hidden": "true", onError: () => setFailed(true) });
@@ -4892,7 +4907,7 @@ function LiveScoreCard({
4892
4907
  }) {
4893
4908
  const { data } = card;
4894
4909
  const seedKey = `${data.minute}:${data.homeScore}:${data.awayScore}`;
4895
- const seedRef = (0, import_react29.useRef)(null);
4910
+ const seedRef = (0, import_react30.useRef)(null);
4896
4911
  if (!seedRef.current || seedRef.current.key !== seedKey) {
4897
4912
  seedRef.current = { key: seedKey, receivedAtMs: Date.now() };
4898
4913
  }
@@ -4932,7 +4947,7 @@ function LiveScoreCard({
4932
4947
  }
4933
4948
 
4934
4949
  // src/components/dashboard/LiveTimelineCard.tsx
4935
- var import_react30 = require("react");
4950
+ var import_react31 = require("react");
4936
4951
  var import_jsx_runtime41 = require("react/jsx-runtime");
4937
4952
  var SHOWN2 = 3;
4938
4953
  function EventIcon({ type }) {
@@ -4974,7 +4989,7 @@ function EventRow({ e }) {
4974
4989
  ] });
4975
4990
  }
4976
4991
  function LiveTimelineCard({ card, ui }) {
4977
- const [expanded, setExpanded] = (0, import_react30.useState)(false);
4992
+ const [expanded, setExpanded] = (0, import_react31.useState)(false);
4978
4993
  const events = card.data.events;
4979
4994
  if (!events || events.length === 0) return null;
4980
4995
  const sorted = [...events].sort((a, b) => b.minute - a.minute);
@@ -4999,7 +5014,7 @@ function LiveTimelineCard({ card, ui }) {
4999
5014
  }
5000
5015
 
5001
5016
  // src/components/dashboard/MomentumWave.tsx
5002
- var import_react31 = require("react");
5017
+ var import_react32 = require("react");
5003
5018
  var import_jsx_runtime42 = require("react/jsx-runtime");
5004
5019
  var WIDTH = 270;
5005
5020
  var HEIGHT = 56;
@@ -5023,7 +5038,7 @@ function MomentumWave({
5023
5038
  }) {
5024
5039
  if (points.length === 0) return null;
5025
5040
  const { area, line, lastLeftPct, lastTopPx } = buildPaths(points);
5026
- const clipId = (0, import_react31.useId)();
5041
+ const clipId = (0, import_react32.useId)();
5027
5042
  const topClipId = `${clipId}-top`;
5028
5043
  const bottomClipId = `${clipId}-bottom`;
5029
5044
  const topClass = clubIsHome ? "ss-w-fandash-live-mom-home" : "ss-w-fandash-live-mom-away";
@@ -5216,11 +5231,11 @@ function turnAnchor(messages) {
5216
5231
  }
5217
5232
  function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
5218
5233
  const { state, send } = controller;
5219
- const listRef = (0, import_react32.useRef)(null);
5220
- const endRef = (0, import_react32.useRef)(null);
5221
- const pinnedRef = (0, import_react32.useRef)(true);
5222
- const anchoredTurnRef = (0, import_react32.useRef)(null);
5223
- (0, import_react32.useEffect)(() => {
5234
+ const listRef = (0, import_react33.useRef)(null);
5235
+ const endRef = (0, import_react33.useRef)(null);
5236
+ const pinnedRef = (0, import_react33.useRef)(true);
5237
+ const anchoredTurnRef = (0, import_react33.useRef)(null);
5238
+ (0, import_react33.useEffect)(() => {
5224
5239
  const anchor = turnAnchor(state.messages);
5225
5240
  const list = listRef.current;
5226
5241
  if (anchor && anchor.turnId !== anchoredTurnRef.current) {
@@ -5277,13 +5292,13 @@ function MessageList({ controller, ui, slip, onDashboardTap, monitor }) {
5277
5292
  }
5278
5293
 
5279
5294
  // src/components/ChatInput.tsx
5280
- var import_react33 = require("react");
5295
+ var import_react34 = require("react");
5281
5296
  var import_jsx_runtime48 = require("react/jsx-runtime");
5282
- var ChatInput = (0, import_react33.forwardRef)(function ChatInput2({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message", disabled = false, onType }, ref) {
5283
- const [value, setValue] = (0, import_react33.useState)("");
5284
- const textareaRef = (0, import_react33.useRef)(null);
5285
- const stopRef = (0, import_react33.useRef)(null);
5286
- const textBoxWantsFocusRef = (0, import_react33.useRef)(false);
5297
+ var ChatInput = (0, import_react34.forwardRef)(function ChatInput2({ placeholder, streaming, onSend, onStop, stopLabel = "Stop response", sendLabel = "Send message", disabled = false, onType }, ref) {
5298
+ const [value, setValue] = (0, import_react34.useState)("");
5299
+ const textareaRef = (0, import_react34.useRef)(null);
5300
+ const stopRef = (0, import_react34.useRef)(null);
5301
+ const textBoxWantsFocusRef = (0, import_react34.useRef)(false);
5287
5302
  const submit = () => {
5288
5303
  if (disabled) return;
5289
5304
  const t = value.trim();
@@ -5297,7 +5312,7 @@ var ChatInput = (0, import_react33.forwardRef)(function ChatInput2({ placeholder
5297
5312
  submit();
5298
5313
  }
5299
5314
  };
5300
- (0, import_react33.useImperativeHandle)(ref, () => ({
5315
+ (0, import_react34.useImperativeHandle)(ref, () => ({
5301
5316
  focus() {
5302
5317
  const box = textareaRef.current;
5303
5318
  if (box && !box.disabled) {
@@ -5309,7 +5324,7 @@ var ChatInput = (0, import_react33.forwardRef)(function ChatInput2({ placeholder
5309
5324
  stopRef.current?.focus();
5310
5325
  }
5311
5326
  }), []);
5312
- (0, import_react33.useEffect)(() => {
5327
+ (0, import_react34.useEffect)(() => {
5313
5328
  if (streaming || disabled || !textBoxWantsFocusRef.current) return;
5314
5329
  textBoxWantsFocusRef.current = false;
5315
5330
  const box = textareaRef.current;
@@ -5431,10 +5446,10 @@ function MarketAccordion({ match, monitor, ui, slip }) {
5431
5446
  }
5432
5447
 
5433
5448
  // src/components/LiveFactBlock.tsx
5434
- var import_react34 = require("react");
5449
+ var import_react35 = require("react");
5435
5450
  var import_jsx_runtime51 = require("react/jsx-runtime");
5436
5451
  function LiveFactBlock({ facts, matchId, ui, slip, onAsk }) {
5437
- const [expanded, setExpanded] = (0, import_react34.useState)(false);
5452
+ const [expanded, setExpanded] = (0, import_react35.useState)(false);
5438
5453
  const [current, ...earlier] = facts;
5439
5454
  if (!current) return null;
5440
5455
  const m = current.market;
@@ -5801,7 +5816,7 @@ function TodayPanel({ discovery, ui, monitor }) {
5801
5816
  }
5802
5817
 
5803
5818
  // src/components/GamesPanel.tsx
5804
- var import_react48 = require("react");
5819
+ var import_react49 = require("react");
5805
5820
 
5806
5821
  // src/components/GamesLoginWall.tsx
5807
5822
  var import_jsx_runtime57 = require("react/jsx-runtime");
@@ -5810,7 +5825,7 @@ function GamesLoginWall({ ui }) {
5810
5825
  }
5811
5826
 
5812
5827
  // src/components/GamesHub.tsx
5813
- var import_react35 = require("react");
5828
+ var import_react36 = require("react");
5814
5829
 
5815
5830
  // src/components/games/ui/gameMeta.ts
5816
5831
  function prettifyGameId(gameId) {
@@ -5995,8 +6010,8 @@ function pickHeroGame(games) {
5995
6010
  }
5996
6011
  var tileKey = (g) => `${g.gameId}-${g.gameDay}-${g.fixtureId}`;
5997
6012
  function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
5998
- const [, setTick] = (0, import_react35.useState)(0);
5999
- (0, import_react35.useEffect)(() => {
6013
+ const [, setTick] = (0, import_react36.useState)(0);
6014
+ (0, import_react36.useEffect)(() => {
6000
6015
  const id = setInterval(() => setTick((t) => t + 1), 6e4);
6001
6016
  return () => clearInterval(id);
6002
6017
  }, []);
@@ -6056,10 +6071,10 @@ function GamesHub({ games, myWeeklyRow, weeklyPrize, onOpen, ui }) {
6056
6071
  }
6057
6072
 
6058
6073
  // src/components/GameScreenHost.tsx
6059
- var import_react47 = require("react");
6074
+ var import_react48 = require("react");
6060
6075
 
6061
6076
  // src/useGamePlay.ts
6062
- var import_react36 = require("react");
6077
+ var import_react37 = require("react");
6063
6078
  function toSubmitResult(payload) {
6064
6079
  return {
6065
6080
  // 'pending' means the play is recorded but awaiting resolution (fixture games)
@@ -6071,17 +6086,17 @@ function toSubmitResult(payload) {
6071
6086
  };
6072
6087
  }
6073
6088
  function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh }) {
6074
- const [result, setResult] = (0, import_react36.useState)(null);
6075
- const [submitting, setSubmitting] = (0, import_react36.useState)(false);
6076
- const [rawStatus, setRawStatus] = (0, import_react36.useState)(null);
6077
- const inFlightRef = (0, import_react36.useRef)(false);
6078
- const convRef = (0, import_react36.useRef)(conversation);
6089
+ const [result, setResult] = (0, import_react37.useState)(null);
6090
+ const [submitting, setSubmitting] = (0, import_react37.useState)(false);
6091
+ const [rawStatus, setRawStatus] = (0, import_react37.useState)(null);
6092
+ const inFlightRef = (0, import_react37.useRef)(false);
6093
+ const convRef = (0, import_react37.useRef)(conversation);
6079
6094
  convRef.current = conversation;
6080
- const optsRef = (0, import_react36.useRef)({ gameId, gameDay, fixtureId, locale, refresh });
6095
+ const optsRef = (0, import_react37.useRef)({ gameId, gameDay, fixtureId, locale, refresh });
6081
6096
  optsRef.current = { gameId, gameDay, fixtureId, locale, refresh };
6082
- const resultRef = (0, import_react36.useRef)(null);
6097
+ const resultRef = (0, import_react37.useRef)(null);
6083
6098
  resultRef.current = result;
6084
- const refetch = (0, import_react36.useCallback)(async () => {
6099
+ const refetch = (0, import_react37.useCallback)(async () => {
6085
6100
  const conv = convRef.current;
6086
6101
  if (!conv) return;
6087
6102
  const opts = optsRef.current;
@@ -6097,7 +6112,7 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
6097
6112
  } catch {
6098
6113
  }
6099
6114
  }, []);
6100
- const submit = (0, import_react36.useCallback)(async (answerJson) => {
6115
+ const submit = (0, import_react37.useCallback)(async (answerJson) => {
6101
6116
  const conv = convRef.current;
6102
6117
  if (!conv || inFlightRef.current) return;
6103
6118
  inFlightRef.current = true;
@@ -6124,14 +6139,14 @@ function useGamePlay(conversation, { gameId, gameDay, fixtureId, locale, refresh
6124
6139
  setSubmitting(false);
6125
6140
  }
6126
6141
  }, [refetch]);
6127
- const hydrate = (0, import_react36.useCallback)(() => {
6142
+ const hydrate = (0, import_react37.useCallback)(() => {
6128
6143
  void refetch();
6129
6144
  }, [refetch]);
6130
6145
  return { result, submitting, submit, hydrate, rawStatus };
6131
6146
  }
6132
6147
 
6133
6148
  // src/components/games/MysteryTigerGame.tsx
6134
- var import_react38 = require("react");
6149
+ var import_react39 = require("react");
6135
6150
 
6136
6151
  // src/components/games/nationFlags.ts
6137
6152
  var FLAGS = {
@@ -6342,7 +6357,7 @@ function isNationCode(flag) {
6342
6357
  }
6343
6358
 
6344
6359
  // src/components/games/PlayerAvatar.tsx
6345
- var import_react37 = require("react");
6360
+ var import_react38 = require("react");
6346
6361
  var import_jsx_runtime63 = require("react/jsx-runtime");
6347
6362
  function initialsOf(name) {
6348
6363
  const parts = name.trim().split(/\s+/).filter(Boolean);
@@ -6360,7 +6375,7 @@ function PlayerAvatar({
6360
6375
  imagePath,
6361
6376
  className
6362
6377
  }) {
6363
- const [failed, setFailed] = (0, import_react37.useState)(false);
6378
+ const [failed, setFailed] = (0, import_react38.useState)(false);
6364
6379
  const showImage = Boolean(imagePath) && !isPlaceholderImage(imagePath) && !failed;
6365
6380
  return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className, "aria-hidden": "true", children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("img", { src: imagePath, alt: "", loading: "lazy", onError: () => setFailed(true) }) : /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "ss-w-av-initials", children: initialsOf(name) }) });
6366
6381
  }
@@ -6626,8 +6641,8 @@ function MysteryTigerGame({
6626
6641
  onBack
6627
6642
  }) {
6628
6643
  const t = ui.games.mysteryTiger;
6629
- const [query, setQuery] = (0, import_react38.useState)("");
6630
- const inputId = (0, import_react38.useId)();
6644
+ const [query, setQuery] = (0, import_react39.useState)("");
6645
+ const inputId = (0, import_react39.useId)();
6631
6646
  const clientState = parseClientState(result?.clientStateJson);
6632
6647
  const guessResults = clientState?.guessResults ?? [];
6633
6648
  const alreadyGuessedIds = new Set(guessResults.map((g) => g.playerId));
@@ -6888,13 +6903,13 @@ function HigherOrLowerGame({
6888
6903
  }
6889
6904
 
6890
6905
  // src/components/games/CareerPathGame.tsx
6891
- var import_react40 = require("react");
6906
+ var import_react41 = require("react");
6892
6907
 
6893
6908
  // src/components/games/ui/CrestShield.tsx
6894
- var import_react39 = require("react");
6909
+ var import_react40 = require("react");
6895
6910
  var import_jsx_runtime75 = require("react/jsx-runtime");
6896
6911
  function CrestShield({ src, name, size = 28 }) {
6897
- const [failed, setFailed] = (0, import_react39.useState)(false);
6912
+ const [failed, setFailed] = (0, import_react40.useState)(false);
6898
6913
  if (src && !isPlaceholderImage(src) && !failed) {
6899
6914
  return /* @__PURE__ */ (0, import_jsx_runtime75.jsx)("img", { className: "ss-g-crest", src, alt: name, width: size, height: size, loading: "lazy", onError: () => setFailed(true) });
6900
6915
  }
@@ -6926,8 +6941,8 @@ function CareerPathGame({
6926
6941
  }) {
6927
6942
  const s = ui.games.careerPath;
6928
6943
  const title = gameTitle({ gameId: "career-path" }, ui.games.titles);
6929
- const [query, setQuery] = (0, import_react40.useState)("");
6930
- const inputId = (0, import_react40.useId)();
6944
+ const [query, setQuery] = (0, import_react41.useState)("");
6945
+ const inputId = (0, import_react41.useId)();
6931
6946
  const clientState = parseClientState3(result?.clientStateJson);
6932
6947
  const alreadyGuessedIds = new Set(clientState?.guessResults.map((g) => g.playerId) ?? []);
6933
6948
  const isOver = result?.alreadyPlayed === true || clientState?.solved === true || clientState?.failed === true;
@@ -7033,7 +7048,7 @@ function CareerPathGame({
7033
7048
  }
7034
7049
 
7035
7050
  // src/components/games/BeatTheGridGame.tsx
7036
- var import_react41 = __toESM(require("react"), 1);
7051
+ var import_react42 = __toESM(require("react"), 1);
7037
7052
 
7038
7053
  // src/components/games/ui/OptionList.tsx
7039
7054
  var import_jsx_runtime77 = require("react/jsx-runtime");
@@ -7122,10 +7137,10 @@ function SearchSheet({
7122
7137
  ui
7123
7138
  }) {
7124
7139
  const s = ui.games.beatTheGrid;
7125
- const [query, setQuery] = (0, import_react41.useState)("");
7126
- const inputId = (0, import_react41.useId)();
7127
- const inputRef = (0, import_react41.useRef)(null);
7128
- (0, import_react41.useEffect)(() => {
7140
+ const [query, setQuery] = (0, import_react42.useState)("");
7141
+ const inputId = (0, import_react42.useId)();
7142
+ const inputRef = (0, import_react42.useRef)(null);
7143
+ (0, import_react42.useEffect)(() => {
7129
7144
  inputRef.current?.focus();
7130
7145
  }, [row, col]);
7131
7146
  const filtered = playerPool.filter(
@@ -7190,7 +7205,7 @@ function BeatTheGridGame({
7190
7205
  }) {
7191
7206
  const s = ui.games.beatTheGrid;
7192
7207
  const title = gameTitle({ gameId: "beat-the-grid" }, ui.games.titles);
7193
- const [activeCell, setActiveCell] = (0, import_react41.useState)(null);
7208
+ const [activeCell, setActiveCell] = (0, import_react42.useState)(null);
7194
7209
  const clientState = parseClientState4(result?.clientStateJson);
7195
7210
  const filledCells = clientState?.cells ?? [];
7196
7211
  const isLocked2 = result?.alreadyPlayed === true || clientState?.isComplete === true;
@@ -7264,7 +7279,7 @@ function BeatTheGridGame({
7264
7279
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { "aria-hidden": "true", children: abbr }),
7265
7280
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("span", { className: "ss-g-sr", children: rowLabel })
7266
7281
  ] });
7267
- return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_react41.default.Fragment, { children: [
7282
+ return /* @__PURE__ */ (0, import_jsx_runtime78.jsxs)(import_react42.default.Fragment, { children: [
7268
7283
  /* @__PURE__ */ (0, import_jsx_runtime78.jsx)("div", { className: "ss-g-btg-rowhdr", "data-meta": rowMeta ? "true" : void 0, children: rowHeaderContent }),
7269
7284
  cols.map((colLabel, colIdx) => {
7270
7285
  const filled = findCellResult(filledCells, rowIdx, colIdx);
@@ -7345,7 +7360,7 @@ function BeatTheGridGame({
7345
7360
  }
7346
7361
 
7347
7362
  // src/components/games/GuessTheXiGame.tsx
7348
- var import_react42 = require("react");
7363
+ var import_react43 = require("react");
7349
7364
 
7350
7365
  // src/components/games/ui/PitchSvg.tsx
7351
7366
  var import_jsx_runtime79 = require("react/jsx-runtime");
@@ -7434,8 +7449,8 @@ function GuessTheXiGame({
7434
7449
  onBack
7435
7450
  }) {
7436
7451
  const t = ui.games.guessTheXi;
7437
- const [query, setQuery] = (0, import_react42.useState)("");
7438
- const inputId = (0, import_react42.useId)();
7452
+ const [query, setQuery] = (0, import_react43.useState)("");
7453
+ const inputId = (0, import_react43.useId)();
7439
7454
  const clientState = parseClientState5(result?.clientStateJson);
7440
7455
  const isOver = result?.alreadyPlayed === true || clientState?.status === "solved" || clientState?.status === "failed";
7441
7456
  const solved = clientState?.status === "solved";
@@ -7577,7 +7592,7 @@ function GuessTheXiGame({
7577
7592
  }
7578
7593
 
7579
7594
  // src/components/games/DailyQuizGame.tsx
7580
- var import_react43 = require("react");
7595
+ var import_react44 = require("react");
7581
7596
  var import_jsx_runtime81 = require("react/jsx-runtime");
7582
7597
  function parseClientState6(json) {
7583
7598
  if (!json) return null;
@@ -7618,8 +7633,8 @@ function DailyQuizGame({
7618
7633
  }) {
7619
7634
  const s = ui.games.dailyQuiz;
7620
7635
  const title = gameTitle({ gameId: "daily-quiz" }, ui.games.titles);
7621
- const [selections, setSelections] = (0, import_react43.useState)(/* @__PURE__ */ new Map());
7622
- const [page, setPage] = (0, import_react43.useState)(0);
7636
+ const [selections, setSelections] = (0, import_react44.useState)(/* @__PURE__ */ new Map());
7637
+ const [page, setPage] = (0, import_react44.useState)(0);
7623
7638
  const clientState = parseClientState6(result?.clientStateJson);
7624
7639
  const results = clientState?.results ?? [];
7625
7640
  const isRevealed = results.length > 0 || result?.alreadyPlayed === true;
@@ -7729,7 +7744,7 @@ function DailyQuizGame({
7729
7744
  }
7730
7745
 
7731
7746
  // src/components/games/MatchdayPredictorGame.tsx
7732
- var import_react44 = require("react");
7747
+ var import_react45 = require("react");
7733
7748
  var import_jsx_runtime82 = require("react/jsx-runtime");
7734
7749
  var SCORER_SEARCH_THRESHOLD = 9;
7735
7750
  function parseClientState7(json) {
@@ -7825,12 +7840,12 @@ function MatchdayPredictorGame({
7825
7840
  onBack
7826
7841
  }) {
7827
7842
  const t = ui.games.predictor;
7828
- const [homeScore, setHomeScore] = (0, import_react44.useState)(0);
7829
- const [awayScore, setAwayScore] = (0, import_react44.useState)(0);
7830
- const [firstScorerPlayerId, setFirstScorerPlayerId] = (0, import_react44.useState)(null);
7831
- const [lastEdited, setLastEdited] = (0, import_react44.useState)("home");
7832
- const [query, setQuery] = (0, import_react44.useState)("");
7833
- const searchId = (0, import_react44.useId)();
7843
+ const [homeScore, setHomeScore] = (0, import_react45.useState)(0);
7844
+ const [awayScore, setAwayScore] = (0, import_react45.useState)(0);
7845
+ const [firstScorerPlayerId, setFirstScorerPlayerId] = (0, import_react45.useState)(null);
7846
+ const [lastEdited, setLastEdited] = (0, import_react45.useState)("home");
7847
+ const [query, setQuery] = (0, import_react45.useState)("");
7848
+ const searchId = (0, import_react45.useId)();
7834
7849
  const clientState = parseClientState7(result?.clientStateJson);
7835
7850
  const alreadyPlayed = result?.alreadyPlayed === true;
7836
7851
  const header = /* @__PURE__ */ (0, import_jsx_runtime82.jsx)(
@@ -7997,7 +8012,7 @@ function MatchdayPredictorGame({
7997
8012
  }
7998
8013
 
7999
8014
  // src/components/games/StartingXiGame.tsx
8000
- var import_react45 = require("react");
8015
+ var import_react46 = require("react");
8001
8016
  var import_jsx_runtime83 = require("react/jsx-runtime");
8002
8017
  var POINTS_PER_STARTER = 8;
8003
8018
  var XI_SIZE = 11;
@@ -8041,10 +8056,10 @@ function StartingXiGame({
8041
8056
  lockAtUtc
8042
8057
  }) {
8043
8058
  const t = ui.games.startingXi;
8044
- const [slotPlayers, setSlotPlayers] = (0, import_react45.useState)(() => Array(XI_SIZE).fill(null));
8045
- const [active, setActive] = (0, import_react45.useState)(0);
8046
- const [query, setQuery] = (0, import_react45.useState)("");
8047
- const searchId = (0, import_react45.useId)();
8059
+ const [slotPlayers, setSlotPlayers] = (0, import_react46.useState)(() => Array(XI_SIZE).fill(null));
8060
+ const [active, setActive] = (0, import_react46.useState)(0);
8061
+ const [query, setQuery] = (0, import_react46.useState)("");
8062
+ const searchId = (0, import_react46.useId)();
8048
8063
  const clientState = parseClientState8(result?.clientStateJson);
8049
8064
  const alreadyPlayed = result?.alreadyPlayed === true;
8050
8065
  const header = /* @__PURE__ */ (0, import_jsx_runtime83.jsx)(
@@ -8183,7 +8198,7 @@ function StartingXiGame({
8183
8198
  }
8184
8199
 
8185
8200
  // src/components/games/StatLadderGame.tsx
8186
- var import_react46 = require("react");
8201
+ var import_react47 = require("react");
8187
8202
  var import_jsx_runtime84 = require("react/jsx-runtime");
8188
8203
  function ladderClue(ladder) {
8189
8204
  const mystery = ladder.find((r) => r.rank === 2);
@@ -8220,9 +8235,9 @@ function StatLadderGame({
8220
8235
  onBack
8221
8236
  }) {
8222
8237
  const t = ui.games.statLadder;
8223
- const [query, setQuery] = (0, import_react46.useState)("");
8224
- const [selectedId, setSelectedId] = (0, import_react46.useState)(null);
8225
- const searchId = (0, import_react46.useId)();
8238
+ const [query, setQuery] = (0, import_react47.useState)("");
8239
+ const [selectedId, setSelectedId] = (0, import_react47.useState)(null);
8240
+ const searchId = (0, import_react47.useId)();
8226
8241
  const clientState = parseClientState9(result?.clientStateJson);
8227
8242
  const revealed = clientState != null;
8228
8243
  const header = /* @__PURE__ */ (0, import_jsx_runtime84.jsx)(GameHeader, { title: gameTitle({ gameId: "stat-ladder" }, ui.games.titles), eyebrow: t.eyebrow, onBack, backLabel: ui.back });
@@ -8428,8 +8443,8 @@ function GameScreenHost({
8428
8443
  ui
8429
8444
  }) {
8430
8445
  const { gameId, fixtureId, gameDay = "", lockAtUtc = null } = selected;
8431
- const [configJson, setConfigJson] = (0, import_react47.useState)(null);
8432
- (0, import_react47.useEffect)(() => {
8446
+ const [configJson, setConfigJson] = (0, import_react48.useState)(null);
8447
+ (0, import_react48.useEffect)(() => {
8433
8448
  setConfigJson(null);
8434
8449
  if (!conversation) return;
8435
8450
  let cancelled = false;
@@ -8452,12 +8467,12 @@ function GameScreenHost({
8452
8467
  fixtureId: fixtureId || void 0,
8453
8468
  locale: ui.games.lang
8454
8469
  });
8455
- (0, import_react47.useEffect)(() => {
8470
+ (0, import_react48.useEffect)(() => {
8456
8471
  if (conversation) hydrate();
8457
8472
  }, [conversation, gameId]);
8458
- const hydrateRef = (0, import_react47.useRef)(hydrate);
8473
+ const hydrateRef = (0, import_react48.useRef)(hydrate);
8459
8474
  hydrateRef.current = hydrate;
8460
- (0, import_react47.useEffect)(() => {
8475
+ (0, import_react48.useEffect)(() => {
8461
8476
  if (!FIXTURE_GAME_IDS.has(gameId)) return;
8462
8477
  if (rawStatus !== "pending") return;
8463
8478
  const timerId = setInterval(() => {
@@ -8592,8 +8607,8 @@ function GamesPanel({
8592
8607
  leaderboard,
8593
8608
  refreshHub
8594
8609
  }) {
8595
- const [selected, setSelected] = (0, import_react48.useState)(null);
8596
- (0, import_react48.useEffect)(() => {
8610
+ const [selected, setSelected] = (0, import_react49.useState)(null);
8611
+ (0, import_react49.useEffect)(() => {
8597
8612
  ensureGamesFonts();
8598
8613
  }, []);
8599
8614
  if (!loggedIn) return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(GamesLoginWall, { ui });
@@ -8624,7 +8639,7 @@ function GamesPanel({
8624
8639
  }
8625
8640
 
8626
8641
  // src/components/Leaderboard.tsx
8627
- var import_react49 = require("react");
8642
+ var import_react50 = require("react");
8628
8643
 
8629
8644
  // src/components/LeaderboardRow.tsx
8630
8645
  var import_jsx_runtime88 = require("react/jsx-runtime");
@@ -8709,7 +8724,7 @@ function Leaderboard({
8709
8724
  ui,
8710
8725
  onPlay
8711
8726
  }) {
8712
- const [segment, setSegment] = (0, import_react49.useState)("weekly");
8727
+ const [segment, setSegment] = (0, import_react50.useState)("weekly");
8713
8728
  const myRow = segment === "weekly" ? data.myWeeklyRow : data.myAllTimeRow;
8714
8729
  const offBoard = myRow !== null && myRow !== void 0 && myRow.rank === -1;
8715
8730
  const isEmpty = segment === "weekly" ? data.weeklyTop.length === 0 : data.allTimeTop.length === 0;
@@ -8789,10 +8804,10 @@ function LeaderboardPanel({ loggedIn, data, loading, onPlay, ui }) {
8789
8804
  }
8790
8805
 
8791
8806
  // src/components/PresetSpeedDial.tsx
8792
- var import_react50 = require("react");
8807
+ var import_react51 = require("react");
8793
8808
  var import_jsx_runtime92 = require("react/jsx-runtime");
8794
8809
  function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef, buttonRef }) {
8795
- const pillsId = (0, import_react50.useId)();
8810
+ const pillsId = (0, import_react51.useId)();
8796
8811
  const tabIndex = expanded ? 0 : -1;
8797
8812
  return /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)("div", { ref: rootRef, className: "ss-w-dial", children: [
8798
8813
  /* @__PURE__ */ (0, import_jsx_runtime92.jsxs)(
@@ -8826,16 +8841,16 @@ function PresetSpeedDial({ expanded, showDot, strings, onToggle, onOpen, rootRef
8826
8841
  }
8827
8842
 
8828
8843
  // src/components/PresetTools.tsx
8829
- var import_react51 = require("react");
8844
+ var import_react52 = require("react");
8830
8845
  var import_jsx_runtime93 = require("react/jsx-runtime");
8831
8846
  var FOCUSABLE = 'button:not([disabled]), [href], input:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
8832
8847
  function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8833
- const dialogRef = (0, import_react51.useRef)(null);
8834
- const titleId = (0, import_react51.useId)();
8835
- (0, import_react51.useEffect)(() => {
8848
+ const dialogRef = (0, import_react52.useRef)(null);
8849
+ const titleId = (0, import_react52.useId)();
8850
+ (0, import_react52.useEffect)(() => {
8836
8851
  dialogRef.current?.focus();
8837
8852
  }, []);
8838
- (0, import_react51.useEffect)(() => {
8853
+ (0, import_react52.useEffect)(() => {
8839
8854
  const onKey = (e) => {
8840
8855
  if (e.key !== "Escape") return;
8841
8856
  e.stopPropagation();
@@ -8877,7 +8892,7 @@ function PresetToolModal({ title, closeLabel, onClose, children, footer }) {
8877
8892
  function fillTemplate(template, slots) {
8878
8893
  return template.split(/(\{[a-z]+\})/).filter((part) => part !== "").map((part, i) => {
8879
8894
  const key = /^\{([a-z]+)\}$/.exec(part)?.[1];
8880
- return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_react51.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8895
+ return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(import_react52.Fragment, { children: key !== void 0 && key in slots ? slots[key] : part }, i);
8881
8896
  });
8882
8897
  }
8883
8898
  function NumberSelect({ current, choices: choices2, label, notToday, lockEmpty = true, onChoose }) {
@@ -8946,15 +8961,15 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
8946
8961
  const totals = comboTotals(grid);
8947
8962
  const legChoices = comboLegChoices(grid);
8948
8963
  const count = FIXED_SINGLES_COUNT;
8949
- const [maxPrice, setMaxPrice] = (0, import_react51.useState)(() => startSingles(grid.singles, limits, START.maxPrice, count));
8950
- const [minPrice, setMinPrice] = (0, import_react51.useState)(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
8951
- const [start] = (0, import_react51.useState)(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
8952
- const [total, setTotal] = (0, import_react51.useState)(start.total);
8953
- const [legs, setLegs] = (0, import_react51.useState)(start.legs);
8954
- const [bigStart] = (0, import_react51.useState)(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
8955
- const [bigTotal, setBigTotal] = (0, import_react51.useState)(bigStart.total);
8956
- const [bigLegs, setBigLegs] = (0, import_react51.useState)(bigStart.legs);
8957
- const [announcement, setAnnouncement] = (0, import_react51.useState)("");
8964
+ const [maxPrice, setMaxPrice] = (0, import_react52.useState)(() => startSingles(grid.singles, limits, START.maxPrice, count));
8965
+ const [minPrice, setMinPrice] = (0, import_react52.useState)(() => startSingles(grid.singlesFrom, floors, START.minPrice, count));
8966
+ const [start] = (0, import_react52.useState)(() => startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs));
8967
+ const [total, setTotal] = (0, import_react52.useState)(start.total);
8968
+ const [legs, setLegs] = (0, import_react52.useState)(start.legs);
8969
+ const [bigStart] = (0, import_react52.useState)(() => startCombo(grid, totals, legChoices, BIG_COMBO.total, BIG_COMBO.legs));
8970
+ const [bigTotal, setBigTotal] = (0, import_react52.useState)(bigStart.total);
8971
+ const [bigLegs, setBigLegs] = (0, import_react52.useState)(bigStart.legs);
8972
+ const [announcement, setAnnouncement] = (0, import_react52.useState)("");
8958
8973
  const maxCell = findSingles(grid.singles, maxPrice, count);
8959
8974
  const minCell = findSingles(grid.singlesFrom, minPrice, count);
8960
8975
  const comboCell = findCombo(grid, total, legs);
@@ -8998,7 +9013,7 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
8998
9013
  const totalChoices = totals.map((v) => ({ value: v, text: v.toFixed(1), available: legChoices.some((n) => !!findCombo(grid, v, n)) }));
8999
9014
  const legChoicesFor = (t) => legChoices.map((n) => ({ value: n, text: String(n), available: !!findCombo(grid, t, n) }));
9000
9015
  const markets = grid.markets ?? [];
9001
- const [marketIdx, setMarketIdx] = (0, import_react51.useState)(0);
9016
+ const [marketIdx, setMarketIdx] = (0, import_react52.useState)(0);
9002
9017
  const marketCell = markets[marketIdx] ?? null;
9003
9018
  const marketLabels = markets.map((c) => strings.marketShort(c.marketDeveloperName, c.marketLabel, c.selectionLabel ?? null));
9004
9019
  const singlesReady = (cell) => cell ? strings.readyCount(cell.picks.length) : strings.unavailable;
@@ -9079,14 +9094,14 @@ function SetNumbersTool({ grid, strings, streaming, onSend, onClose }) {
9079
9094
  function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal, initialLegs, onSend, onClose }) {
9080
9095
  const totals = comboTotals(grid);
9081
9096
  const legChoices = comboLegChoices(grid);
9082
- const [start] = (0, import_react51.useState)(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
9083
- const [total, setTotal] = (0, import_react51.useState)(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
9084
- const [legs, setLegs] = (0, import_react51.useState)(() => {
9097
+ const [start] = (0, import_react52.useState)(() => initialTotal === void 0 ? startCombo(grid, totals, legChoices, START.comboTotal, START.comboLegs) : null);
9098
+ const [total, setTotal] = (0, import_react52.useState)(() => initialTotal !== void 0 ? nearest(totals, initialTotal) : start.total);
9099
+ const [legs, setLegs] = (0, import_react52.useState)(() => {
9085
9100
  if (initialTotal === void 0) return initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : start.legs;
9086
9101
  const from = initialLegs !== void 0 ? clampLegs(legChoices, initialLegs) : startValue(legChoices, START.comboLegs);
9087
9102
  return legsForTotal(grid, nearest(totals, initialTotal), from);
9088
9103
  });
9089
- const [announcement, setAnnouncement] = (0, import_react51.useState)("");
9104
+ const [announcement, setAnnouncement] = (0, import_react52.useState)("");
9090
9105
  const cell = findCombo(grid, total, legs);
9091
9106
  const minLegs = legChoices[0] ?? legs;
9092
9107
  const maxLegs = legChoices[legChoices.length - 1] ?? legs;
@@ -9119,7 +9134,7 @@ function BuildComboTool({ grid, strings, streaming, formatKickoff, initialTotal,
9119
9134
  }
9120
9135
 
9121
9136
  // src/usePresetDial.ts
9122
- var import_react52 = require("react");
9137
+ var import_react53 = require("react");
9123
9138
  function sendInFlight(messages, isStreaming) {
9124
9139
  const last = messages[messages.length - 1];
9125
9140
  return isStreaming && !!last && last.role === "assistant" && !last.done && !last.isGreeting;
@@ -9133,25 +9148,25 @@ function lastUserId(messages) {
9133
9148
  }
9134
9149
  var SCROLL_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "PageUp", "PageDown", "Home", "End", " "]);
9135
9150
  function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming, activeTab }) {
9136
- const [expanded, setExpanded] = (0, import_react52.useState)(() => !sendInFlight(messages, isStreaming));
9137
- const fold = (0, import_react52.useCallback)(() => setExpanded(false), []);
9138
- const toggle = (0, import_react52.useCallback)(() => setExpanded((e) => !e), []);
9151
+ const [expanded, setExpanded] = (0, import_react53.useState)(() => !sendInFlight(messages, isStreaming));
9152
+ const fold = (0, import_react53.useCallback)(() => setExpanded(false), []);
9153
+ const toggle = (0, import_react53.useCallback)(() => setExpanded((e) => !e), []);
9139
9154
  const currentUserId = lastUserId(messages);
9140
- const userIdRef = (0, import_react52.useRef)(currentUserId);
9141
- (0, import_react52.useEffect)(() => {
9155
+ const userIdRef = (0, import_react53.useRef)(currentUserId);
9156
+ (0, import_react53.useEffect)(() => {
9142
9157
  if (currentUserId === userIdRef.current) return;
9143
9158
  userIdRef.current = currentUserId;
9144
9159
  setExpanded(false);
9145
9160
  }, [currentUserId]);
9146
- const tabRef = (0, import_react52.useRef)(activeTab);
9147
- (0, import_react52.useEffect)(() => {
9161
+ const tabRef = (0, import_react53.useRef)(activeTab);
9162
+ (0, import_react53.useEffect)(() => {
9148
9163
  if (activeTab === tabRef.current) return;
9149
9164
  tabRef.current = activeTab;
9150
9165
  setExpanded(false);
9151
9166
  }, [activeTab]);
9152
- const expandedRef = (0, import_react52.useRef)(expanded);
9167
+ const expandedRef = (0, import_react53.useRef)(expanded);
9153
9168
  expandedRef.current = expanded;
9154
- (0, import_react52.useEffect)(() => {
9169
+ (0, import_react53.useEffect)(() => {
9155
9170
  const onEscape = (e) => {
9156
9171
  const dial = dialRef.current;
9157
9172
  if (e.key !== "Escape" || !dial || !e.composedPath().includes(dial)) return;
@@ -9164,7 +9179,7 @@ function usePresetDial({ layerRef, dialRef, dialButtonRef, messages, isStreaming
9164
9179
  window.addEventListener("keydown", onEscape, true);
9165
9180
  return () => window.removeEventListener("keydown", onEscape, true);
9166
9181
  }, [dialRef, dialButtonRef]);
9167
- (0, import_react52.useEffect)(() => {
9182
+ (0, import_react53.useEffect)(() => {
9168
9183
  if (!expanded) return;
9169
9184
  const layer = layerRef.current;
9170
9185
  const inDial = (e) => {
@@ -9219,8 +9234,8 @@ function markToolSeen() {
9219
9234
  var import_jsx_runtime94 = require("react/jsx-runtime");
9220
9235
  var FULLSCREEN_QUERY = "(max-width: 639px)";
9221
9236
  function useIsModal() {
9222
- const [modal, setModal] = (0, import_react53.useState)(false);
9223
- (0, import_react53.useEffect)(() => {
9237
+ const [modal, setModal] = (0, import_react54.useState)(false);
9238
+ (0, import_react54.useEffect)(() => {
9224
9239
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
9225
9240
  const mql = window.matchMedia(FULLSCREEN_QUERY);
9226
9241
  const sync = () => setModal(mql.matches);
@@ -9234,7 +9249,7 @@ var HIDDEN_LAYER_STYLE = { position: "absolute", inset: 0, visibility: "hidden",
9234
9249
  function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, gamesResult, leaderboardResult, loggedIn, conversation, presetGrid }) {
9235
9250
  const { state, close, stop, send, reset } = controller;
9236
9251
  const isModal = useIsModal();
9237
- (0, import_react53.useEffect)(() => {
9252
+ (0, import_react54.useEffect)(() => {
9238
9253
  const onKey = (e) => {
9239
9254
  if (e.key === "Escape") close();
9240
9255
  };
@@ -9249,17 +9264,17 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9249
9264
  monitor?.setActiveTab("chat");
9250
9265
  send(text, { grounding });
9251
9266
  };
9252
- (0, import_react53.useEffect)(() => {
9267
+ (0, import_react54.useEffect)(() => {
9253
9268
  if (monitor && monitor.activeTab !== "chat" && state.isStreaming) monitor.markChatActivity();
9254
9269
  }, [monitor, state.isStreaming, state.messages.length]);
9255
9270
  const onChatTab = !monitor || monitor.activeTab === "chat";
9256
- const layerRef = (0, import_react53.useRef)(null);
9257
- const dialRef = (0, import_react53.useRef)(null);
9258
- const dialButtonRef = (0, import_react53.useRef)(null);
9259
- const inputRef = (0, import_react53.useRef)(null);
9260
- const focusAfterCloseRef = (0, import_react53.useRef)(null);
9261
- const [tool, setTool] = (0, import_react53.useState)(null);
9262
- const [toolSeen, setToolSeen] = (0, import_react53.useState)(readToolSeen);
9271
+ const layerRef = (0, import_react54.useRef)(null);
9272
+ const dialRef = (0, import_react54.useRef)(null);
9273
+ const dialButtonRef = (0, import_react54.useRef)(null);
9274
+ const inputRef = (0, import_react54.useRef)(null);
9275
+ const focusAfterCloseRef = (0, import_react54.useRef)(null);
9276
+ const [tool, setTool] = (0, import_react54.useState)(null);
9277
+ const [toolSeen, setToolSeen] = (0, import_react54.useState)(readToolSeen);
9263
9278
  const dial = usePresetDial({
9264
9279
  layerRef,
9265
9280
  dialRef,
@@ -9270,39 +9285,39 @@ function ChatPanel({ controller, ui, slip, onDashboardTap, monitor, discovery, g
9270
9285
  });
9271
9286
  const { fold } = dial;
9272
9287
  const showDial = !!presetGrid && onChatTab && !tool;
9273
- const openTool = (0, import_react53.useCallback)((next) => {
9288
+ const openTool = (0, import_react54.useCallback)((next) => {
9274
9289
  fold();
9275
9290
  markToolSeen();
9276
9291
  setToolSeen(true);
9277
9292
  setTool(next);
9278
9293
  }, [fold]);
9279
- const onPill = (0, import_react53.useCallback)((kind) => openTool(kind === "numbers" ? { kind: "numbers" } : { kind: "combo" }), [openTool]);
9280
- const toolsValue = (0, import_react53.useMemo)(
9294
+ const onPill = (0, import_react54.useCallback)((kind) => openTool(kind === "numbers" ? { kind: "numbers" } : { kind: "combo" }), [openTool]);
9295
+ const toolsValue = (0, import_react54.useMemo)(
9281
9296
  () => presetGrid ? { openBuilder: (total, legs) => openTool({ kind: "combo", total, legs }), changeLabel: ui.presets.changeCombo } : null,
9282
9297
  [presetGrid, openTool, ui.presets.changeCombo]
9283
9298
  );
9284
- const closeTool = (0, import_react53.useCallback)(() => {
9299
+ const closeTool = (0, import_react54.useCallback)(() => {
9285
9300
  focusAfterCloseRef.current = "dial";
9286
9301
  setTool(null);
9287
9302
  }, []);
9288
- const sendAsk = (0, import_react53.useCallback)((ask) => {
9303
+ const sendAsk = (0, import_react54.useCallback)((ask) => {
9289
9304
  focusAfterCloseRef.current = "composer";
9290
9305
  setTool(null);
9291
9306
  monitor?.setActiveTab("chat");
9292
9307
  send(ask.message, { displayText: ask.displayText, preset: ask.preset });
9293
9308
  }, [monitor, send]);
9294
- const formatKickoff = (0, import_react53.useCallback)((kickoffUtc) => {
9309
+ const formatKickoff = (0, import_react54.useCallback)((kickoffUtc) => {
9295
9310
  const k = ui.bettingKickoff(kickoffUtc);
9296
9311
  return `${k.dayLabel} ${k.time}`;
9297
9312
  }, [ui]);
9298
- (0, import_react53.useEffect)(() => {
9313
+ (0, import_react54.useEffect)(() => {
9299
9314
  if (tool) return;
9300
9315
  const target = focusAfterCloseRef.current;
9301
9316
  focusAfterCloseRef.current = null;
9302
9317
  if (target === "dial") dialButtonRef.current?.focus();
9303
9318
  else if (target === "composer") inputRef.current?.focus();
9304
9319
  }, [tool]);
9305
- (0, import_react53.useEffect)(() => {
9320
+ (0, import_react54.useEffect)(() => {
9306
9321
  if (!tool || onChatTab && presetGrid) return;
9307
9322
  focusAfterCloseRef.current = "composer";
9308
9323
  setTool(null);
@@ -11100,24 +11115,24 @@ function injectStyles(root) {
11100
11115
  function StatsWidget(props) {
11101
11116
  const injectedClient = "client" in props ? props.client : void 0;
11102
11117
  const cfg = props.config;
11103
- const built = (0, import_react54.useMemo)(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
11104
- const logger = (0, import_react54.useMemo)(
11118
+ const built = (0, import_react55.useMemo)(() => buildClient(props), [injectedClient, cfg?.operatorId, cfg?.publicKey, cfg?.baseUrl]);
11119
+ const logger = (0, import_react55.useMemo)(
11105
11120
  () => built ? built.client.createEventLogger({
11106
11121
  operatorUserId: cfg?.userContext?.operatorUserId,
11107
11122
  anonymousUserId: cfg?.userContext?.anonymousUserId
11108
11123
  }) : null,
11109
11124
  [built?.client]
11110
11125
  );
11111
- const ui = (0, import_react54.useMemo)(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
11112
- const rootRef = (0, import_react54.useRef)(null);
11113
- const introDoneRef = (0, import_react54.useRef)(false);
11114
- const markIntroDone = (0, import_react54.useCallback)(() => {
11126
+ const ui = (0, import_react55.useMemo)(() => normalizeUi(props.config ?? { operatorId: "", publicKey: "" }), [props.config]);
11127
+ const rootRef = (0, import_react55.useRef)(null);
11128
+ const introDoneRef = (0, import_react55.useRef)(false);
11129
+ const markIntroDone = (0, import_react55.useCallback)(() => {
11115
11130
  introDoneRef.current = true;
11116
11131
  }, []);
11117
11132
  const convStorageKey = `ss-w-conv:${cfg?.operatorId ?? ""}:${cfg?.userContext?.operatorUserId ?? "anon"}`;
11118
11133
  const controller = useChatStream(built?.conversation ?? emptyConversation(), ui.starters, built ? ui.greetingMessage : void 0, convStorageKey);
11119
- const [hasToday, setHasToday] = (0, import_react54.useState)(false);
11120
- const liveCardWatches = (0, import_react54.useMemo)(() => {
11134
+ const [hasToday, setHasToday] = (0, import_react55.useState)(false);
11135
+ const liveCardWatches = (0, import_react55.useMemo)(() => {
11121
11136
  const seen = /* @__PURE__ */ new Set();
11122
11137
  const out = [];
11123
11138
  for (const msg of controller.state.messages) {
@@ -11139,15 +11154,15 @@ function StatsWidget(props) {
11139
11154
  hasToday,
11140
11155
  watches: liveCardWatches
11141
11156
  });
11142
- const getSchedule = (0, import_react54.useCallback)(
11157
+ const getSchedule = (0, import_react55.useCallback)(
11143
11158
  (localDate, utcOffsetMinutes) => built ? built.conversation.getSchedule(localDate, utcOffsetMinutes) : Promise.resolve(null),
11144
11159
  [built]
11145
11160
  );
11146
- const getStates = (0, import_react54.useCallback)(
11161
+ const getStates = (0, import_react55.useCallback)(
11147
11162
  (matchIds) => built ? built.conversation.getStates(matchIds) : Promise.resolve(null),
11148
11163
  [built]
11149
11164
  );
11150
- const pinnedMatchIds = (0, import_react54.useMemo)(
11165
+ const pinnedMatchIds = (0, import_react55.useMemo)(
11151
11166
  () => monitor.pins.filter((p) => p.kind === "match").map((p) => p.matchId),
11152
11167
  [monitor.pins]
11153
11168
  );
@@ -11159,11 +11174,11 @@ function StatsWidget(props) {
11159
11174
  pinnedMatchIds
11160
11175
  });
11161
11176
  const todayHasContent = visibleGroupsOf(discovery.groups, discovery.states).length > 0;
11162
- (0, import_react54.useEffect)(() => {
11177
+ (0, import_react55.useEffect)(() => {
11163
11178
  setHasToday(todayHasContent);
11164
11179
  }, [todayHasContent]);
11165
- const prevLiveSnapshotRef = (0, import_react54.useRef)(monitor.snapshot);
11166
- (0, import_react54.useEffect)(() => {
11180
+ const prevLiveSnapshotRef = (0, import_react55.useRef)(monitor.snapshot);
11181
+ (0, import_react55.useEffect)(() => {
11167
11182
  const snap = monitor.snapshot;
11168
11183
  if (!snap || snap === prevLiveSnapshotRef.current) return;
11169
11184
  prevLiveSnapshotRef.current = snap;
@@ -11199,14 +11214,14 @@ function StatsWidget(props) {
11199
11214
  }, [monitor.snapshot]);
11200
11215
  const gamesResult = useGames(built?.conversation ?? null, { activeTab: monitor.activeTab });
11201
11216
  const leaderboardResult = useLeaderboard(built?.conversation ?? null, { activeTab: monitor.activeTab });
11202
- const getPricePresets = (0, import_react54.useCallback)(
11217
+ const getPricePresets = (0, import_react55.useCallback)(
11203
11218
  (locale2) => built ? built.conversation.getPricePresets(locale2, { pool: "open" }) : Promise.resolve(null),
11204
11219
  [built]
11205
11220
  );
11206
11221
  const presetGrid = usePresetGrid({ getPricePresets, isOpen: controller.state.isOpen, locale: ui.presets.lang });
11207
11222
  const markTodayActivity = monitor.markTodayActivity;
11208
- const prevLiveCountRef = (0, import_react54.useRef)(0);
11209
- (0, import_react54.useEffect)(() => {
11223
+ const prevLiveCountRef = (0, import_react55.useRef)(0);
11224
+ (0, import_react55.useEffect)(() => {
11210
11225
  const rose = prevLiveCountRef.current === 0 && discovery.liveCount > 0;
11211
11226
  prevLiveCountRef.current = discovery.liveCount;
11212
11227
  if (rose) markTodayActivity();
@@ -11220,7 +11235,7 @@ function StatsWidget(props) {
11220
11235
  closePanel: controller.close
11221
11236
  });
11222
11237
  const markAdded = hostEvents.markAdded;
11223
- const slip = (0, import_react54.useMemo)(
11238
+ const slip = (0, import_react55.useMemo)(
11224
11239
  () => {
11225
11240
  const handler = props.config?.onAddToSlip;
11226
11241
  return {
@@ -11239,11 +11254,12 @@ function StatsWidget(props) {
11239
11254
  },
11240
11255
  [props.config?.onAddToSlip, controller.state.conversationId, markAdded]
11241
11256
  );
11242
- const onDashboardTap = (0, import_react54.useMemo)(
11257
+ const onDashboardTap = (0, import_react55.useMemo)(
11243
11258
  () => built ? createDashboardTapSignal((input) => built.conversation.sendSignal(input), logger) : void 0,
11244
11259
  [built, logger]
11245
11260
  );
11246
11261
  const dismissPopup = usePopupTelemetry(logger, controller.state.isOpen, controller.state.popupText, controller.dismissPopup);
11262
+ useOpenTelemetry(logger, controller.state.isOpen);
11247
11263
  const asks = bubbleAsks(controller.state.messages, ui.presets.standoutAsk).map((ask) => ({
11248
11264
  label: ask.label,
11249
11265
  onTap: () => runBubbleAsk(ask, {
@@ -11257,11 +11273,11 @@ function StatsWidget(props) {
11257
11273
  const operatorUserId = cfg?.userContext?.operatorUserId;
11258
11274
  const anonymousUserId = cfg?.userContext?.anonymousUserId;
11259
11275
  const conversationId = controller.state.conversationId ?? void 0;
11260
- (0, import_react54.useEffect)(() => {
11276
+ (0, import_react55.useEffect)(() => {
11261
11277
  if (!logger) return;
11262
11278
  logger.setIdentity({ operatorUserId, anonymousUserId, conversationId });
11263
11279
  }, [logger, operatorUserId, anonymousUserId, conversationId]);
11264
- (0, import_react54.useEffect)(() => {
11280
+ (0, import_react55.useEffect)(() => {
11265
11281
  if (!logger) return;
11266
11282
  logger.resume();
11267
11283
  const onHide = () => {
@@ -11279,7 +11295,7 @@ function StatsWidget(props) {
11279
11295
  logger.dispose();
11280
11296
  };
11281
11297
  }, [logger]);
11282
- (0, import_react54.useEffect)(() => {
11298
+ (0, import_react55.useEffect)(() => {
11283
11299
  if (!built || !ui.injectStyles) return;
11284
11300
  const node = rootRef.current?.getRootNode();
11285
11301
  if (node) injectStyles(node);