@agg-build/ui 2.1.2 → 2.1.4

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.
Files changed (65) hide show
  1. package/dist/{chunk-ZOECARZW.mjs → chunk-BW7S2YR3.mjs} +798 -312
  2. package/dist/{chunk-7ZR5JYB3.mjs → chunk-FLESSOSU.mjs} +2077 -533
  3. package/dist/{chunk-5RBHMMY3.mjs → chunk-R2YNZJZ3.mjs} +69 -27
  4. package/dist/{chunk-75AMJAWR.mjs → chunk-T4YZGAYS.mjs} +22 -1
  5. package/dist/{chunk-JJDYOBVG.mjs → chunk-TBZWRUFB.mjs} +654 -560
  6. package/dist/{chunk-TBD3N4T4.mjs → chunk-VP76G6PN.mjs} +41 -41
  7. package/dist/{chunk-NRNBJPYK.mjs → chunk-XHE2VO3S.mjs} +4 -21
  8. package/dist/events.js +776 -638
  9. package/dist/events.mjs +5 -3
  10. package/dist/index.js +5665 -3867
  11. package/dist/index.mjs +112 -455
  12. package/dist/modals.mjs +3 -3
  13. package/dist/pages.js +8330 -6452
  14. package/dist/pages.mjs +6 -6
  15. package/dist/primitives.js +40 -41
  16. package/dist/primitives.mjs +1 -1
  17. package/dist/styles.css +1 -1
  18. package/dist/tailwind.css +1 -1
  19. package/dist/trading.js +652 -415
  20. package/dist/trading.mjs +4 -4
  21. package/dist/types/events/item/event-list-item.utils.d.mts +1 -25
  22. package/dist/types/events/item/event-list-item.utils.d.ts +1 -25
  23. package/dist/types/events/item-details/index.d.mts +2 -1
  24. package/dist/types/events/item-details/index.d.ts +2 -1
  25. package/dist/types/events/market-details/market-details-graph-panel.d.mts +39 -0
  26. package/dist/types/events/market-details/market-details-graph-panel.d.ts +39 -0
  27. package/dist/types/events/market-details/market-details-outcome-button.d.mts +2 -1
  28. package/dist/types/events/market-details/market-details-outcome-button.d.ts +2 -1
  29. package/dist/types/events/market-details/market-details.types.d.mts +31 -0
  30. package/dist/types/events/market-details/market-details.types.d.ts +31 -0
  31. package/dist/types/events/market-details/market-details.utils.d.mts +3 -16
  32. package/dist/types/events/market-details/market-details.utils.d.ts +3 -16
  33. package/dist/types/events/shared/format-event-title.d.mts +1 -2
  34. package/dist/types/events/shared/format-event-title.d.ts +1 -2
  35. package/dist/types/events/shared/format-sports-event-time.d.mts +2 -0
  36. package/dist/types/events/shared/format-sports-event-time.d.ts +2 -0
  37. package/dist/types/notifications/agg-notification-events-provider.d.mts +10 -1
  38. package/dist/types/notifications/agg-notification-events-provider.d.ts +10 -1
  39. package/dist/types/pages/event-market/event-market.shared.d.mts +30 -0
  40. package/dist/types/pages/event-market/event-market.shared.d.ts +30 -0
  41. package/dist/types/pages/event-market/sports-event-market-page.d.mts +8 -0
  42. package/dist/types/pages/event-market/sports-event-market-page.d.ts +8 -0
  43. package/dist/types/pages/event-market/sports-event-market.fixtures.d.mts +13 -0
  44. package/dist/types/pages/event-market/sports-event-market.fixtures.d.ts +13 -0
  45. package/dist/types/pages/event-market/sports-event-market.utils.d.mts +156 -0
  46. package/dist/types/pages/event-market/sports-event-market.utils.d.ts +156 -0
  47. package/dist/types/pages/event-market/sports-line-rail.d.mts +17 -0
  48. package/dist/types/pages/event-market/sports-line-rail.d.ts +17 -0
  49. package/dist/types/pages/event-market/sports-market-card.d.mts +22 -0
  50. package/dist/types/pages/event-market/sports-market-card.d.ts +22 -0
  51. package/dist/types/pages/event-market/sports-markets.d.mts +13 -0
  52. package/dist/types/pages/event-market/sports-markets.d.ts +13 -0
  53. package/dist/types/primitives/search/search.utils.d.mts +1 -3
  54. package/dist/types/primitives/search/search.utils.d.ts +1 -3
  55. package/dist/types/primitives/state-message/index.d.mts +1 -1
  56. package/dist/types/primitives/state-message/index.d.ts +1 -1
  57. package/dist/types/primitives/state-message/state-message.types.d.mts +1 -1
  58. package/dist/types/primitives/state-message/state-message.types.d.ts +1 -1
  59. package/dist/types/trading/place-order/index.d.mts +1 -1
  60. package/dist/types/trading/place-order/index.d.ts +1 -1
  61. package/dist/types/trading/place-order/index.place-order.types.d.mts +7 -0
  62. package/dist/types/trading/place-order/index.place-order.types.d.ts +7 -0
  63. package/dist/types/trading/settlement/settlement-text.utils.d.mts +5 -2
  64. package/dist/types/trading/settlement/settlement-text.utils.d.ts +5 -2
  65. package/package.json +3 -3
@@ -22,7 +22,7 @@ import {
22
22
  resolveUnifiedOrderBookEntries,
23
23
  sortOutcomeSelectorOutcomes,
24
24
  useEventTradingContext
25
- } from "./chunk-5RBHMMY3.mjs";
25
+ } from "./chunk-R2YNZJZ3.mjs";
26
26
  import {
27
27
  AutocompleteSelect,
28
28
  Badge,
@@ -73,7 +73,7 @@ import {
73
73
  sortCategoriesForNavigation,
74
74
  sortOutcomes,
75
75
  splitEventsByLifecycle
76
- } from "./chunk-TBD3N4T4.mjs";
76
+ } from "./chunk-VP76G6PN.mjs";
77
77
 
78
78
  // src/events/item/index.tsx
79
79
  import {
@@ -233,7 +233,7 @@ var normalizeEventListItemV2Comparison = ({
233
233
  return __spreadProps(__spreadValues({}, row), {
234
234
  prices
235
235
  });
236
- });
236
+ }).filter((row) => row.prices.length === 0 || row.prices.some((price) => price.price > 0));
237
237
  const matchedVenues = collectMatchedVenues(rows);
238
238
  return {
239
239
  rows,
@@ -359,8 +359,7 @@ var EventListItemContent = ({
359
359
  categories: event.categories,
360
360
  structureType: event.structureType,
361
361
  gameStartTime: event.gameStartTime,
362
- endDate: event.endDate,
363
- locale: config.general.locale
362
+ endDate: event.endDate
364
363
  });
365
364
  const resolvedImage = event.image;
366
365
  const visibleVenueLogos = useMemo(() => {
@@ -387,8 +386,10 @@ var EventListItemContent = ({
387
386
  } = useVenueMarkets({
388
387
  venueEventId: event.id,
389
388
  enabled: shouldEnableLazyMarketLoading && isLazyMarketsQueryEnabled,
390
- sortBy: "yesPrice",
391
- sortDir: "desc",
389
+ // List/tile surface: axis/dates sort by volume so the scroll tail matches
390
+ // the volume-sorted top-3 (the detail page omits context and keeps the
391
+ // structured threshold/date order).
392
+ context: "list",
392
393
  status: marketStatus
393
394
  });
394
395
  const resolvedOutcomeMarkets = useMemo(() => {
@@ -2509,17 +2510,9 @@ var EventListItemDetailsContent = ({
2509
2510
  categories: event.categories,
2510
2511
  structureType: event.structureType,
2511
2512
  gameStartTime: event.gameStartTime,
2512
- endDate: event.endDate,
2513
- locale: config.general.locale
2513
+ endDate: event.endDate
2514
2514
  });
2515
- }, [
2516
- config.general.locale,
2517
- event.categories,
2518
- event.gameStartTime,
2519
- event.endDate,
2520
- event.structureType,
2521
- event.title
2522
- ]);
2515
+ }, [event.categories, event.gameStartTime, event.endDate, event.structureType, event.title]);
2523
2516
  return /* @__PURE__ */ jsxs4(
2524
2517
  Card,
2525
2518
  {
@@ -3253,7 +3246,6 @@ OrderbookWithStates.displayName = "OrderbookWithStates";
3253
3246
 
3254
3247
  // src/events/market-details/index.tsx
3255
3248
  import {
3256
- CHART_TIME_RANGES as CHART_TIME_RANGES2,
3257
3249
  findLivePriceById,
3258
3250
  MarketStatus,
3259
3251
  mergeBestPricesPreferringLive as mergeBestPricesPreferringLive2,
@@ -3261,18 +3253,16 @@ import {
3261
3253
  resolveMarketTradingState,
3262
3254
  useEventTradingContext as useEventTradingContext2,
3263
3255
  useEventOrderbookData as useEventOrderbookData2,
3264
- useLabels as useLabels6,
3256
+ useLabels as useLabels7,
3265
3257
  useLiveBestPrices as useLiveBestPrices2,
3266
3258
  useLiveBestPriceCandidates,
3267
3259
  useLiveOutcomePrices as useLiveOutcomePrices2,
3268
- useMarketChart as useMarketChart2,
3269
3260
  useMarketOrderbook,
3270
- useRollingChartWindow as useRollingChartWindow2,
3271
- useSdkUiConfig as useSdkUiConfig3,
3261
+ useSdkUiConfig as useSdkUiConfig4,
3272
3262
  useVenueMarkets as useVenueMarkets2,
3273
3263
  useViewportMidpoints
3274
3264
  } from "@agg-build/hooks";
3275
- import { useEffect as useEffect4, useId, useMemo as useMemo6, useRef as useRef5, useState as useState4 } from "react";
3265
+ import { useEffect as useEffect5, useId, useMemo as useMemo7, useState as useState5 } from "react";
3276
3266
 
3277
3267
  // src/events/shared/select-best-outcome.ts
3278
3268
  var normalizeOutcomeLabel2 = (label) => {
@@ -3356,14 +3346,17 @@ var marketDetailsOutcomeButtonToneClasses = {
3356
3346
  };
3357
3347
  var getMarketDetailsOutcomeButtonClassNames = ({
3358
3348
  enableAnimations,
3349
+ enforceFixedWidth,
3359
3350
  isSelected,
3360
- tone
3351
+ tone,
3352
+ variant
3361
3353
  }) => {
3362
3354
  const toneClasses = marketDetailsOutcomeButtonToneClasses[tone];
3355
+ const widthClassName = variant === "line" ? "w-[200px]" : variant === "outcome" ? "w-[160px]" : "w-[140px]";
3363
3356
  return {
3364
3357
  root: cn(
3365
- "w-[140px]",
3366
- "flex h-9 shrink-0 cursor-pointer select-none items-center justify-center gap-2 rounded-agg-full border px-5 py-1.5 text-left shadow-none",
3358
+ enforceFixedWidth ? widthClassName : "w-[140px]",
3359
+ "flex h-9 shrink-0 cursor-pointer select-none items-center justify-center gap-2 rounded-agg-full border px-4 py-1.5 text-left shadow-none",
3367
3360
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary",
3368
3361
  "disabled:cursor-not-allowed disabled:opacity-60",
3369
3362
  getMotionClassName(
@@ -3379,6 +3372,7 @@ var getMarketDetailsOutcomeButtonClassNames = ({
3379
3372
  var MarketDetailsOutcomeButton = ({
3380
3373
  ariaControls,
3381
3374
  enableAnimations,
3375
+ enforceFixedWidth,
3382
3376
  isSelected,
3383
3377
  item,
3384
3378
  onSelect
@@ -3386,10 +3380,14 @@ var MarketDetailsOutcomeButton = ({
3386
3380
  var _a;
3387
3381
  const classNames = getMarketDetailsOutcomeButtonClassNames({
3388
3382
  enableAnimations,
3383
+ enforceFixedWidth,
3389
3384
  isSelected,
3390
- tone: item.tone
3385
+ tone: item.tone,
3386
+ variant: item.variant
3391
3387
  });
3392
- return /* @__PURE__ */ jsxs6(
3388
+ const itemLabel = (_a = item.title) != null ? _a : item.label;
3389
+ const isLineVariant = item.variant === "line";
3390
+ return /* @__PURE__ */ jsx8(
3393
3391
  "button",
3394
3392
  {
3395
3393
  type: "button",
@@ -3399,46 +3397,386 @@ var MarketDetailsOutcomeButton = ({
3399
3397
  "aria-controls": ariaControls,
3400
3398
  "aria-selected": isSelected,
3401
3399
  tabIndex: isSelected ? 0 : -1,
3402
- className: cn(classNames.root, "flex-1 md:flex-auto", "gap-1!"),
3400
+ className: cn(
3401
+ classNames.root,
3402
+ "overflow-hidden",
3403
+ enforceFixedWidth ? "flex-none" : "flex-1 md:flex-auto"
3404
+ ),
3403
3405
  onClick: () => onSelect(item.label),
3404
- children: [
3406
+ children: isLineVariant ? /* @__PURE__ */ jsxs6("div", { className: "flex min-w-0 max-w-full items-center justify-center gap-1.5 overflow-hidden", children: [
3405
3407
  /* @__PURE__ */ jsx8(VenueLogo, { venue: item.venue, size: "small" }),
3406
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-row items-center gap-1 min-w-0", children: [
3407
- /* @__PURE__ */ jsx8(
3408
- Typography,
3409
- {
3410
- as: "span",
3411
- variant: isSelected ? "body-strong" : "body",
3412
- className: cn("whitespace-nowrap truncate", classNames.text),
3413
- children: (_a = item.title) != null ? _a : item.label
3414
- }
3415
- ),
3416
- /* @__PURE__ */ jsx8(
3417
- Typography,
3418
- {
3419
- as: "span",
3420
- variant: isSelected ? "body-strong" : "body",
3421
- className: cn(classNames.text),
3422
- children: formatProbabilityCents(item.probability)
3423
- }
3424
- )
3425
- ] })
3426
- ]
3408
+ /* @__PURE__ */ jsx8(
3409
+ Typography,
3410
+ {
3411
+ as: "span",
3412
+ variant: isSelected ? "body-strong" : "body",
3413
+ className: cn("min-w-0 truncate whitespace-nowrap text-center", classNames.text),
3414
+ children: itemLabel
3415
+ }
3416
+ ),
3417
+ item.lineLabel ? /* @__PURE__ */ jsx8(
3418
+ Typography,
3419
+ {
3420
+ as: "span",
3421
+ variant: isSelected ? "body-strong" : "body",
3422
+ className: cn("shrink-0 whitespace-nowrap", classNames.text),
3423
+ children: item.lineLabel
3424
+ }
3425
+ ) : null,
3426
+ /* @__PURE__ */ jsx8(
3427
+ Typography,
3428
+ {
3429
+ as: "span",
3430
+ variant: isSelected ? "body-strong" : "body",
3431
+ className: cn("shrink-0 whitespace-nowrap", classNames.text),
3432
+ children: formatProbabilityCents(item.probability)
3433
+ }
3434
+ )
3435
+ ] }) : /* @__PURE__ */ jsxs6("div", { className: "inline-flex max-w-full items-center justify-center gap-1.5", children: [
3436
+ /* @__PURE__ */ jsx8(VenueLogo, { venue: item.venue, size: "small" }),
3437
+ /* @__PURE__ */ jsx8(
3438
+ Typography,
3439
+ {
3440
+ as: "span",
3441
+ variant: isSelected ? "body-strong" : "body",
3442
+ className: cn("truncate whitespace-nowrap text-center", classNames.text),
3443
+ children: itemLabel
3444
+ }
3445
+ ),
3446
+ /* @__PURE__ */ jsx8(
3447
+ Typography,
3448
+ {
3449
+ as: "span",
3450
+ variant: isSelected ? "body-strong" : "body",
3451
+ className: cn("shrink-0 whitespace-nowrap", classNames.text),
3452
+ children: formatProbabilityCents(item.probability)
3453
+ }
3454
+ )
3455
+ ] })
3427
3456
  }
3428
3457
  );
3429
3458
  };
3430
3459
  MarketDetailsOutcomeButton.displayName = "MarketDetailsOutcomeButton";
3431
3460
 
3461
+ // src/events/market-details/market-details-graph-panel.tsx
3462
+ import {
3463
+ CHART_TIME_RANGES as CHART_TIME_RANGES2,
3464
+ useLabels as useLabels6,
3465
+ useMarketChart as useMarketChart2,
3466
+ useRollingChartWindow as useRollingChartWindow2,
3467
+ useSdkUiConfig as useSdkUiConfig3
3468
+ } from "@agg-build/hooks";
3469
+ import { useEffect as useEffect4, useMemo as useMemo6, useRef as useRef5, useState as useState4 } from "react";
3470
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
3471
+ var MarketDetailsGraphPanel = ({
3472
+ venueMarkets,
3473
+ selectedOutcomeLabel,
3474
+ selectedOutcomeId,
3475
+ livePrices,
3476
+ wsLivePrices,
3477
+ headerOutcomeItems,
3478
+ isResolvedMarket,
3479
+ isOutcomeSelectionLocked,
3480
+ volume,
3481
+ live,
3482
+ classNames
3483
+ }) => {
3484
+ var _a, _b, _c;
3485
+ const config = useSdkUiConfig3();
3486
+ const {
3487
+ formatting: { formatPercent, formatCompactCurrency },
3488
+ general: { theme }
3489
+ } = config;
3490
+ const isDarkTheme = theme === "dark";
3491
+ const labels = useLabels6();
3492
+ const selectedTimeRange = config.chart.selectedChartTimeRange;
3493
+ const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
3494
+ const [chartRangeOverride, setChartRangeOverride] = useState4(null);
3495
+ const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
3496
+ const [selectedChartType, setSelectedChartType] = useState4("line");
3497
+ const [selectedGraphVenue, setSelectedGraphVenue] = useState4(null);
3498
+ const [chartOutcomeLabel, setChartOutcomeLabel] = useState4(selectedOutcomeLabel);
3499
+ const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
3500
+ const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
3501
+ const chartOutcomesByVenue = useMemo6(() => {
3502
+ return resolveChartVenueOutcomes({
3503
+ eligibleVenueOutcomes: collectEligibleVenueOutcomes({
3504
+ venueMarkets,
3505
+ selectedOutcomeLabel: resolvedChartOutcomeLabel,
3506
+ selectedOutcomeId: chartSelectedOutcomeId
3507
+ }),
3508
+ livePrices
3509
+ });
3510
+ }, [livePrices, venueMarkets, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
3511
+ const rollingWindow = useRollingChartWindow2({ range: effectiveChartTimeRange });
3512
+ const chartPrimaryOutcomeId = (_b = (_a = chartOutcomesByVenue[0]) == null ? void 0 : _a.outcome.id) != null ? _b : null;
3513
+ const chartVenueOutcomeIds = useMemo6(() => {
3514
+ return chartOutcomesByVenue.map((item) => item.outcome.id);
3515
+ }, [chartOutcomesByVenue]);
3516
+ const {
3517
+ data: marketChartData,
3518
+ isLoading: isMarketChartLoading,
3519
+ error: marketChartError,
3520
+ refetch: refetchMarketChart
3521
+ } = useMarketChart2({
3522
+ marketId: chartPrimaryOutcomeId,
3523
+ venueMarketIds: chartVenueOutcomeIds,
3524
+ interval: rollingWindow.interval,
3525
+ startTs: rollingWindow.startTs * 1e3,
3526
+ endTs: rollingWindow.endTs * 1e3,
3527
+ // The panel only mounts when the chart is actually visible, so enable as
3528
+ // soon as we have an outcome to chart.
3529
+ enabled: !!chartPrimaryOutcomeId,
3530
+ live,
3531
+ refetchIntervalMs: rollingWindow.refetchIntervalMs,
3532
+ // Stable cache key per user-selected range so tab/page revisits hit cache
3533
+ // instead of refetching on every bucket-boundary rollover.
3534
+ rangeKey: rollingWindow.range
3535
+ });
3536
+ const hasAutoFallenBackRangeRef = useRef5(false);
3537
+ useEffect4(() => {
3538
+ hasAutoFallenBackRangeRef.current = false;
3539
+ setChartRangeOverride(null);
3540
+ }, [chartPrimaryOutcomeId]);
3541
+ useEffect4(() => {
3542
+ if (!shouldAutoFallbackToAllRange({
3543
+ chartData: marketChartData,
3544
+ isLoading: isMarketChartLoading,
3545
+ error: marketChartError,
3546
+ currentRange: effectiveChartTimeRange,
3547
+ hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
3548
+ domainStartTs: rollingWindow.startTs
3549
+ })) {
3550
+ return;
3551
+ }
3552
+ hasAutoFallenBackRangeRef.current = true;
3553
+ setChartRangeOverride("ALL");
3554
+ }, [
3555
+ marketChartData,
3556
+ isMarketChartLoading,
3557
+ marketChartError,
3558
+ effectiveChartTimeRange,
3559
+ rollingWindow.startTs
3560
+ ]);
3561
+ const chartAvailableOutcomesByVenue = useMemo6(() => {
3562
+ return filterChartVenueOutcomesByRenderableVenues({
3563
+ chartData: marketChartData,
3564
+ venueOutcomes: chartOutcomesByVenue
3565
+ });
3566
+ }, [chartOutcomesByVenue, marketChartData]);
3567
+ const graphSeries = useMemo6(() => {
3568
+ var _a2, _b2, _c2, _d;
3569
+ const baseColor = resolveSeriesColor(
3570
+ (_d = (_c2 = selectedGraphVenue != null ? selectedGraphVenue : (_a2 = chartAvailableOutcomesByVenue[0]) == null ? void 0 : _a2.venue) != null ? _c2 : (_b2 = chartOutcomesByVenue[0]) == null ? void 0 : _b2.venue) != null ? _d : "polymarket",
3571
+ 0,
3572
+ isDarkTheme
3573
+ );
3574
+ const domainStartTs = rollingWindow.startTs;
3575
+ return resolveMarketChartDisplaySeries({
3576
+ chartData: marketChartData,
3577
+ selectedVenue: selectedGraphVenue,
3578
+ transformProbability: (value) => value
3579
+ }).map((seriesItem) => {
3580
+ return {
3581
+ id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
3582
+ venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
3583
+ color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
3584
+ // Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
3585
+ // bars don't bleed in across a range shrink or long mount.
3586
+ points: seriesItem.points.filter((point) => point.time >= domainStartTs)
3587
+ };
3588
+ });
3589
+ }, [
3590
+ isDarkTheme,
3591
+ chartPrimaryOutcomeId,
3592
+ marketChartData,
3593
+ rollingWindow.startTs,
3594
+ selectedGraphVenue,
3595
+ resolvedChartOutcomeLabel,
3596
+ chartAvailableOutcomesByVenue,
3597
+ chartOutcomesByVenue
3598
+ ]);
3599
+ const graphLiveState = useMemo6(() => {
3600
+ return resolveMarketChartLiveState({
3601
+ chartData: marketChartData,
3602
+ selectedVenue: selectedGraphVenue,
3603
+ transformProbability: (value) => value
3604
+ });
3605
+ }, [marketChartData, selectedGraphVenue]);
3606
+ const hasChartError = !!marketChartError;
3607
+ useEffect4(() => {
3608
+ if (!selectedGraphVenue) {
3609
+ return;
3610
+ }
3611
+ if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
3612
+ return;
3613
+ }
3614
+ setSelectedGraphVenue(null);
3615
+ }, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
3616
+ const handleGraphVenueToggle = (venue) => {
3617
+ setSelectedGraphVenue((currentVenue) => {
3618
+ if (currentVenue === venue) return null;
3619
+ return venue;
3620
+ });
3621
+ };
3622
+ const handleRetryMarketChart = () => {
3623
+ void refetchMarketChart();
3624
+ };
3625
+ return /* @__PURE__ */ jsxs7("div", { className: cn("agg-price-chart flex flex-col gap-5 p-5", classNames == null ? void 0 : classNames.graph), children: [
3626
+ hasChartError ? /* @__PURE__ */ jsx9(
3627
+ StateMessage,
3628
+ {
3629
+ title: labels.marketDetails.chartUnavailableTitle,
3630
+ description: labels.marketDetails.chartUnavailableDescription,
3631
+ icon: /* @__PURE__ */ jsx9(WarningIcon, {}),
3632
+ onAction: handleRetryMarketChart,
3633
+ classNames: { root: "min-h-[248px] px-5 py-10 md:min-h-[272px]" }
3634
+ }
3635
+ ) : /* @__PURE__ */ jsx9(
3636
+ LineChart,
3637
+ {
3638
+ series: graphSeries,
3639
+ height: 260,
3640
+ isLoading: isMarketChartLoading,
3641
+ chartType: selectedChartType,
3642
+ liveCandle: selectedChartType === "candlestick" ? (_c = graphLiveState.liveCandle) != null ? _c : void 0 : void 0,
3643
+ lineValue: graphLiveState.lineValue,
3644
+ classNames: { root: "agg-chart-region w-full" },
3645
+ showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
3646
+ renderSeriesControls: () => {
3647
+ var _a2, _b2, _c2, _d;
3648
+ return /* @__PURE__ */ jsxs7("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
3649
+ /* @__PURE__ */ jsx9("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
3650
+ var _a3;
3651
+ const probability = formatProbabilityPercent(
3652
+ (_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
3653
+ formatPercent
3654
+ );
3655
+ const isActiveVenue = selectedGraphVenue === item.venue;
3656
+ return /* @__PURE__ */ jsxs7(
3657
+ "button",
3658
+ {
3659
+ type: "button",
3660
+ "aria-label": `${item.venue} ${probability}`,
3661
+ "aria-pressed": isActiveVenue,
3662
+ className: cn(
3663
+ "agg-market-venue",
3664
+ "cursor-pointer",
3665
+ "inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
3666
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary-hover",
3667
+ isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
3668
+ ),
3669
+ onClick: (e) => {
3670
+ e.preventDefault();
3671
+ e.stopPropagation();
3672
+ handleGraphVenueToggle(item.venue);
3673
+ },
3674
+ children: [
3675
+ /* @__PURE__ */ jsx9(VenueLogo, { venue: item.venue, size: "small" }),
3676
+ /* @__PURE__ */ jsx9("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
3677
+ ]
3678
+ },
3679
+ `${item.market.id}-${item.outcome.id}`
3680
+ );
3681
+ }) }),
3682
+ !isOutcomeSelectionLocked ? /* @__PURE__ */ jsx9(
3683
+ SwitchButton,
3684
+ {
3685
+ ariaLabel: labels.marketDetails.outcomeSelectorAria,
3686
+ className: "agg-outcome-switch w-full shrink-0 md:w-fit",
3687
+ value: (_d = (_c2 = (_a2 = headerOutcomeItems.find(
3688
+ (outcome) => outcome.label === resolvedChartOutcomeLabel
3689
+ )) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d : "",
3690
+ onValueChange: (outcomeId) => {
3691
+ const outcome = headerOutcomeItems.find(
3692
+ (headerOutcomeItem) => headerOutcomeItem.id === outcomeId
3693
+ );
3694
+ if (!outcome) return;
3695
+ setChartOutcomeLabel(outcome.label);
3696
+ },
3697
+ options: headerOutcomeItems.map((outcome) => {
3698
+ var _a3, _b3;
3699
+ const price = outcome.probability;
3700
+ return {
3701
+ value: outcome.id,
3702
+ label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
3703
+ ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
3704
+ };
3705
+ })
3706
+ }
3707
+ ) : null
3708
+ ] });
3709
+ }
3710
+ }
3711
+ ),
3712
+ /* @__PURE__ */ jsxs7(
3713
+ "div",
3714
+ {
3715
+ className: cn(
3716
+ "agg-chart-footer",
3717
+ "flex flex-row justify-between gap-2 text-agg-sm leading-agg-5 text-agg-muted-foreground md:flex-row md:items-center md:justify-between",
3718
+ classNames == null ? void 0 : classNames.footer
3719
+ ),
3720
+ children: [
3721
+ /* @__PURE__ */ jsx9("span", { children: typeof volume !== "number" ? labels.marketDetails.volumeUnavailable : volume > 0 ? `${formatCompactCurrency(volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
3722
+ /* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
3723
+ /* @__PURE__ */ jsx9(
3724
+ ChartTypeSwitch,
3725
+ {
3726
+ className: "agg-chart-type-switch shrink-0",
3727
+ value: selectedChartType,
3728
+ onValueChange: setSelectedChartType
3729
+ }
3730
+ ),
3731
+ /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "hidden h-4 w-px bg-agg-separator md:block" }),
3732
+ CHART_TIME_RANGES2.map((timeRange) => {
3733
+ const isActive = effectiveChartTimeRange === timeRange;
3734
+ const isDisabled = isResolvedMarket && timeRange !== "ALL";
3735
+ return /* @__PURE__ */ jsx9(
3736
+ "button",
3737
+ {
3738
+ type: "button",
3739
+ disabled: isDisabled,
3740
+ className: cn(
3741
+ "agg-chart-time-range-trigger",
3742
+ "cursor-pointer text-agg-sm leading-agg-5",
3743
+ isDisabled && "cursor-not-allowed opacity-50",
3744
+ isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
3745
+ ),
3746
+ "aria-pressed": isActive,
3747
+ "aria-disabled": isDisabled,
3748
+ onClick: (e) => {
3749
+ e.preventDefault();
3750
+ e.stopPropagation();
3751
+ if (isDisabled) return;
3752
+ setChartRangeOverride(null);
3753
+ setSelectedTimeRange(timeRange);
3754
+ },
3755
+ children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
3756
+ },
3757
+ timeRange
3758
+ );
3759
+ })
3760
+ ] })
3761
+ ]
3762
+ }
3763
+ )
3764
+ ] });
3765
+ };
3766
+ MarketDetailsGraphPanel.displayName = "MarketDetailsGraphPanel";
3767
+
3432
3768
  // src/events/market-details/index.tsx
3433
- import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
3769
+ import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
3434
3770
  var MarketDetailsUnavailableState = ({
3771
+ marketId,
3435
3772
  ariaLabel,
3436
3773
  classNames
3437
3774
  }) => {
3438
- const labels = useLabels6();
3439
- return /* @__PURE__ */ jsx9(
3775
+ const labels = useLabels7();
3776
+ return /* @__PURE__ */ jsx10(
3440
3777
  Card,
3441
3778
  {
3779
+ "data-market-id": marketId || void 0,
3442
3780
  className: cn(
3443
3781
  "group/agg-market-card agg-market-card-unavailable",
3444
3782
  marketDetailsBaseCardClassName,
@@ -3446,24 +3784,26 @@ var MarketDetailsUnavailableState = ({
3446
3784
  ),
3447
3785
  role: "status",
3448
3786
  "aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.unavailableAria,
3449
- children: /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-1 p-5", children: [
3450
- /* @__PURE__ */ jsx9(Typography, { variant: "body-large-strong", children: labels.marketDetails.unavailableTitle }),
3451
- /* @__PURE__ */ jsx9(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.unavailableDescription })
3787
+ children: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-1 p-5", children: [
3788
+ /* @__PURE__ */ jsx10(Typography, { variant: "body-large-strong", children: labels.marketDetails.unavailableTitle }),
3789
+ /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.unavailableDescription })
3452
3790
  ] })
3453
3791
  }
3454
3792
  );
3455
3793
  };
3456
3794
  var MarketDetailsNotFoundState = ({
3795
+ marketId,
3457
3796
  ariaLabel: _ariaLabel,
3458
3797
  classNames: _classNames
3459
3798
  }) => {
3460
- const labels = useLabels6();
3461
- return /* @__PURE__ */ jsx9(
3799
+ const labels = useLabels7();
3800
+ return /* @__PURE__ */ jsx10(
3462
3801
  StateMessage,
3463
3802
  {
3803
+ "data-market-id": marketId || void 0,
3464
3804
  title: labels.marketDetails.notFoundTitle,
3465
3805
  description: labels.marketDetails.notFoundDescription,
3466
- icon: /* @__PURE__ */ jsx9(SearchEmptyIcon, {}),
3806
+ icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
3467
3807
  classNames: { root: "min-h-[280px] md:min-h-[320px]" }
3468
3808
  }
3469
3809
  );
@@ -3481,6 +3821,11 @@ var MarketDetailsContent = ({
3481
3821
  ariaLabel,
3482
3822
  classNames,
3483
3823
  otherContent,
3824
+ headerAccessory,
3825
+ compactHeader = false,
3826
+ subtitleOverride,
3827
+ headerOutcomeVariant,
3828
+ headerOutcomeItemsOverride,
3484
3829
  onOutcomeSelect,
3485
3830
  live,
3486
3831
  midpointsFallback,
@@ -3488,25 +3833,24 @@ var MarketDetailsContent = ({
3488
3833
  suppressOutcomeFallbackSelection,
3489
3834
  midpointsResult
3490
3835
  }) => {
3491
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
3492
- const config = useSdkUiConfig3();
3836
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
3837
+ const config = useSdkUiConfig4();
3493
3838
  const {
3494
3839
  features: { enableAnimations },
3495
- formatting: { formatPercent },
3496
- general: { theme }
3840
+ formatting: { formatPercent }
3497
3841
  } = config;
3498
- const isDarkTheme = theme === "dark";
3499
- const labels = useLabels6();
3842
+ const labels = useLabels7();
3500
3843
  const tradingContext = useEventTradingContext2();
3501
3844
  const detailsContentId = useId();
3502
3845
  const tradeSide = (_a = tradingContext == null ? void 0 : tradingContext.tradeSide) != null ? _a : "buy";
3503
- const wsLivePrices = useLiveOutcomePrices2(venueMarkets);
3504
- const wsBestPrices = useLiveBestPrices2(venueMarkets);
3505
- const wsBestCandidates = useLiveBestPriceCandidates(venueMarkets);
3506
- const resolvedMarket = useMemo6(() => {
3846
+ const resolvedMarket = useMemo7(() => {
3507
3847
  return resolveMarketFromVenueMarkets(venueMarkets, marketId);
3508
3848
  }, [venueMarkets, marketId]);
3509
- const scopedResolvedMarket = useMemo6(() => {
3849
+ const clusterVenueMarkets = resolvedMarket == null ? void 0 : resolvedMarket.venueMarkets;
3850
+ const wsLivePrices = useLiveOutcomePrices2(clusterVenueMarkets);
3851
+ const wsBestPrices = useLiveBestPrices2(clusterVenueMarkets);
3852
+ const wsBestCandidates = useLiveBestPriceCandidates(clusterVenueMarkets);
3853
+ const scopedResolvedMarket = useMemo7(() => {
3510
3854
  var _a2, _b2;
3511
3855
  if (!resolvedMarket) return null;
3512
3856
  return (_b2 = (_a2 = resolvedMarket.venueMarkets.find((venueMarket) => venueMarket.id === resolvedMarket.id)) != null ? _a2 : resolvedMarket.venueMarkets[0]) != null ? _b2 : null;
@@ -3532,20 +3876,19 @@ var MarketDetailsContent = ({
3532
3876
  const clusterBestMidpoint = clusterMidpointResult.bestMidpoint;
3533
3877
  const clusterBestMidpointVenue = clusterMidpointResult.bestMidpointVenue;
3534
3878
  const clusterBestPricesRest = clusterMidpointResult.bestPrices;
3535
- const clusterBestPrices = useMemo6(
3879
+ const clusterBestPrices = useMemo7(
3536
3880
  () => mergeBestPricesPreferringLive2(clusterBestPricesRest, wsBestPrices),
3537
3881
  [clusterBestPricesRest, wsBestPrices]
3538
3882
  );
3539
3883
  const clusterBestPriceVenuesByOutcomeId = clusterMidpointResult.bestPriceVenuesByOutcomeId;
3540
- const clusterMidpointMarkets = useMemo6(() => {
3884
+ const clusterMidpointMarkets = useMemo7(() => {
3541
3885
  var _a2;
3542
3886
  if (!resolvedMarket) return [];
3543
3887
  return (_a2 = resolvedMarket.venueMarkets) != null ? _a2 : [];
3544
3888
  }, [resolvedMarket]);
3545
- const tradableVenues = useMemo6(() => {
3889
+ const tradableVenues = useMemo7(() => {
3546
3890
  var _a2;
3547
3891
  if (clusterMidpointMarkets.length === 0) return null;
3548
- if (clusterMidpoints.size === 0) return null;
3549
3892
  const set = /* @__PURE__ */ new Set();
3550
3893
  for (const market of clusterMidpointMarkets) {
3551
3894
  for (const outcome of (_a2 = market.venueMarketOutcomes) != null ? _a2 : []) {
@@ -3555,28 +3898,20 @@ var MarketDetailsContent = ({
3555
3898
  }
3556
3899
  }
3557
3900
  }
3901
+ if (set.size === 0) return null;
3558
3902
  return set;
3559
3903
  }, [clusterMidpointMarkets, clusterMidpoints]);
3560
- const model = useMemo6(() => {
3904
+ const model = useMemo7(() => {
3561
3905
  return buildMarketDetailsModel({
3562
3906
  venueMarkets,
3563
3907
  marketId,
3564
3908
  title,
3565
3909
  image,
3566
3910
  formatCompactCurrency: config.formatting.formatCompactCurrency,
3567
- labels,
3568
- tradableVenues
3911
+ labels
3569
3912
  });
3570
- }, [
3571
- config.formatting.formatCompactCurrency,
3572
- venueMarkets,
3573
- image,
3574
- labels,
3575
- marketId,
3576
- title,
3577
- tradableVenues
3578
- ]);
3579
- const livePrices = useMemo6(() => {
3913
+ }, [config.formatting.formatCompactCurrency, venueMarkets, image, labels, marketId, title]);
3914
+ const livePrices = useMemo7(() => {
3580
3915
  const merged = /* @__PURE__ */ new Map();
3581
3916
  if (midpointsFallback == null ? void 0 : midpointsFallback.size) {
3582
3917
  for (const [outcomeId, price] of midpointsFallback) {
@@ -3591,37 +3926,32 @@ var MarketDetailsContent = ({
3591
3926
  for (const [k, v] of wsLivePrices) merged.set(k, v);
3592
3927
  return merged;
3593
3928
  }, [clusterMidpoints, midpointsFallback, wsLivePrices]);
3594
- const scopedMarketForCard = useMemo6(() => {
3929
+ const scopedMarketForCard = useMemo7(() => {
3595
3930
  var _a2;
3596
3931
  if (!model) return null;
3597
3932
  return (_a2 = model.market.venueMarkets.find((venueMarket) => venueMarket.id === model.market.id)) != null ? _a2 : model.primaryVenueMarket;
3598
3933
  }, [model]);
3599
- const marketTradingState = useMemo6(() => {
3934
+ const marketTradingState = useMemo7(() => {
3600
3935
  return resolveMarketTradingState(scopedMarketForCard);
3601
3936
  }, [scopedMarketForCard]);
3602
3937
  const isOutcomeSelectionLocked = marketTradingState.isTradingDisabled;
3603
3938
  const isUpcomingMarket = marketTradingState.kind === "unopened";
3604
3939
  const marketStatePresentation = resolveTradingStatePresentation(labels, marketTradingState);
3605
- const marketDetailsTabs = useMemo6(() => {
3940
+ const marketDetailsTabs = useMemo7(() => {
3606
3941
  return getMarketDetailsTabs(labels);
3607
3942
  }, [labels]);
3608
- const [selectedTab, setSelectedTab] = useState4(
3943
+ const [selectedTab, setSelectedTab] = useState5(
3609
3944
  () => resolveInitialTab(defaultTab)
3610
3945
  );
3611
- const [isOpened, setIsOpened] = useState4(controlledIsOpened);
3612
- useEffect4(() => {
3946
+ const [isOpened, setIsOpened] = useState5(controlledIsOpened);
3947
+ useEffect5(() => {
3613
3948
  setSelectedTab(resolveInitialTab(defaultTab));
3614
3949
  }, [defaultTab]);
3615
- useEffect4(() => {
3950
+ useEffect5(() => {
3616
3951
  setIsOpened(controlledIsOpened);
3617
3952
  }, [controlledIsOpened]);
3618
- const selectedTimeRange = config.chart.selectedChartTimeRange;
3619
- const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
3620
3953
  const effectiveSelectedTab = isResolvedMarket ? "graph" : selectedTab;
3621
- const [chartRangeOverride, setChartRangeOverride] = useState4(null);
3622
- const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
3623
- const [selectedChartType, setSelectedChartType] = useState4("line");
3624
- const scopedSelectedOutcomeState = useMemo6(() => {
3954
+ const scopedSelectedOutcomeState = useMemo7(() => {
3625
3955
  if (!model) {
3626
3956
  return {
3627
3957
  outcomeId: null,
@@ -3643,15 +3973,7 @@ var MarketDetailsContent = ({
3643
3973
  const selectedOutcomeId = scopedSelectedOutcomeState.outcomeId;
3644
3974
  const selectedOutcomeLabel = (_d = scopedSelectedOutcomeState.outcomeLabel) != null ? _d : null;
3645
3975
  const selectOutcome = tradingContext == null ? void 0 : tradingContext.selectOutcome;
3646
- const [selectedGraphVenue, setSelectedGraphVenue] = useState4(null);
3647
- const [chartOutcomeLabel, setChartOutcomeLabel] = useState4(selectedOutcomeLabel);
3648
- useEffect4(() => {
3649
- if (!isOpened) return;
3650
- if (selectedOutcomeLabel) {
3651
- setChartOutcomeLabel(selectedOutcomeLabel);
3652
- }
3653
- }, [isOpened]);
3654
- useEffect4(() => {
3976
+ useEffect5(() => {
3655
3977
  var _a2;
3656
3978
  if (!isOpened || !model) return;
3657
3979
  if (isOutcomeSelectionLocked) return;
@@ -3675,13 +3997,18 @@ var MarketDetailsContent = ({
3675
3997
  tradingContext == null ? void 0 : tradingContext.selectedMarketId,
3676
3998
  selectOutcome
3677
3999
  ]);
3678
- const venueMarketIdByVenue = useMemo6(
4000
+ const venueMarketIdByVenue = useMemo7(
3679
4001
  () => buildVenueMarketIdByVenue(model == null ? void 0 : model.market.venueMarkets),
3680
4002
  [model]
3681
4003
  );
3682
- const headerOutcomeItems = useMemo6(() => {
4004
+ const headerOutcomeItems = useMemo7(() => {
3683
4005
  if (!model) return [];
3684
- const items = resolveHeaderOutcomeItems(model.market.venueMarkets, scopedMarketForCard);
4006
+ if (headerOutcomeItemsOverride) return headerOutcomeItemsOverride;
4007
+ const items = resolveHeaderOutcomeItems(
4008
+ model.market.venueMarkets,
4009
+ scopedMarketForCard,
4010
+ headerOutcomeVariant
4011
+ );
3685
4012
  return items.map((item) => {
3686
4013
  var _a2;
3687
4014
  const fallbackPrice = midpointsFallback == null ? void 0 : midpointsFallback.get(item.id);
@@ -3721,8 +4048,10 @@ var MarketDetailsContent = ({
3721
4048
  clusterBestMidpointsByOutcomeId,
3722
4049
  clusterBestPricesRest,
3723
4050
  clusterBestPriceVenuesByOutcomeId,
4051
+ headerOutcomeItemsOverride,
3724
4052
  model,
3725
4053
  scopedMarketForCard,
4054
+ headerOutcomeVariant,
3726
4055
  clusterVenueByOutcomeId,
3727
4056
  isResolvedMarket,
3728
4057
  (_e = marketTradingState.winningOutcome) == null ? void 0 : _e.id,
@@ -3732,7 +4061,7 @@ var MarketDetailsContent = ({
3732
4061
  venueMarketIdByVenue,
3733
4062
  wsBestCandidates
3734
4063
  ]);
3735
- const headlineProbability = useMemo6(() => {
4064
+ const headlineProbability = useMemo7(() => {
3736
4065
  var _a2, _b2, _c2, _d2;
3737
4066
  if (!model || !scopedMarketForCard) return void 0;
3738
4067
  if (isResolvedMarket) {
@@ -3768,7 +4097,7 @@ var MarketDetailsContent = ({
3768
4097
  midpointsFallback,
3769
4098
  wsLivePrices
3770
4099
  ]);
3771
- const selectedOutcomesByVenue = useMemo6(() => {
4100
+ const selectedOutcomesByVenue = useMemo7(() => {
3772
4101
  if (!model) return [];
3773
4102
  return collectEligibleVenueOutcomes({
3774
4103
  venueMarkets: model.market.venueMarkets,
@@ -3780,73 +4109,9 @@ var MarketDetailsContent = ({
3780
4109
  selectedOutcomeId
3781
4110
  });
3782
4111
  }, [model, selectedOutcomeLabel, selectedOutcomeId]);
3783
- const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
3784
- const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
3785
- const chartOutcomesByVenue = useMemo6(() => {
3786
- if (!model) return [];
3787
- return resolveChartVenueOutcomes({
3788
- eligibleVenueOutcomes: collectEligibleVenueOutcomes({
3789
- venueMarkets: model.market.venueMarkets,
3790
- selectedOutcomeLabel: resolvedChartOutcomeLabel,
3791
- selectedOutcomeId: chartSelectedOutcomeId
3792
- }),
3793
- livePrices
3794
- });
3795
- }, [livePrices, model, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
3796
- const chartEnabled = isOpened && effectiveSelectedTab === "graph";
3797
4112
  const orderBookEnabled = isOpened && effectiveSelectedTab === "order-book" && !marketTradingState.isTradingDisabled;
3798
- const rollingWindow = useRollingChartWindow2({ range: effectiveChartTimeRange });
3799
4113
  const primaryVenueMarketId = (_g = (_f = selectedOutcomesByVenue[0]) == null ? void 0 : _f.market.id) != null ? _g : null;
3800
4114
  const primaryOutcomeId = (_i = (_h = selectedOutcomesByVenue[0]) == null ? void 0 : _h.outcome.id) != null ? _i : null;
3801
- const chartPrimaryOutcomeId = (_k = (_j = chartOutcomesByVenue[0]) == null ? void 0 : _j.outcome.id) != null ? _k : null;
3802
- const chartVenueOutcomeIds = useMemo6(() => {
3803
- return chartOutcomesByVenue.map((item) => item.outcome.id);
3804
- }, [chartOutcomesByVenue]);
3805
- const {
3806
- data: marketChartData,
3807
- isLoading: isMarketChartLoading,
3808
- error: marketChartError,
3809
- refetch: refetchMarketChart
3810
- } = useMarketChart2({
3811
- marketId: chartPrimaryOutcomeId,
3812
- venueMarketIds: chartVenueOutcomeIds,
3813
- interval: rollingWindow.interval,
3814
- startTs: rollingWindow.startTs * 1e3,
3815
- endTs: rollingWindow.endTs * 1e3,
3816
- enabled: chartEnabled && !!chartPrimaryOutcomeId,
3817
- live,
3818
- refetchIntervalMs: rollingWindow.refetchIntervalMs,
3819
- // Stable cache key per user-selected range so tab/page revisits hit cache
3820
- // instead of refetching on every bucket-boundary rollover.
3821
- rangeKey: rollingWindow.range
3822
- });
3823
- const hasAutoFallenBackRangeRef = useRef5(false);
3824
- useEffect4(() => {
3825
- hasAutoFallenBackRangeRef.current = false;
3826
- setChartRangeOverride(null);
3827
- }, [chartPrimaryOutcomeId]);
3828
- useEffect4(() => {
3829
- if (!shouldAutoFallbackToAllRange({
3830
- chartData: marketChartData,
3831
- isLoading: isMarketChartLoading,
3832
- error: marketChartError,
3833
- currentRange: effectiveChartTimeRange,
3834
- hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
3835
- // Ignore stale bars outside the rolling window — see comment on the
3836
- // matching effect in event-list-item-details.
3837
- domainStartTs: rollingWindow.startTs
3838
- })) {
3839
- return;
3840
- }
3841
- hasAutoFallenBackRangeRef.current = true;
3842
- setChartRangeOverride("ALL");
3843
- }, [
3844
- marketChartData,
3845
- isMarketChartLoading,
3846
- marketChartError,
3847
- effectiveChartTimeRange,
3848
- rollingWindow.startTs
3849
- ]);
3850
4115
  const marketOrderbookResult = useMarketOrderbook({
3851
4116
  marketId: primaryVenueMarketId,
3852
4117
  enabled: orderBookEnabled && !!primaryVenueMarketId,
@@ -3856,14 +4121,14 @@ var MarketDetailsContent = ({
3856
4121
  })),
3857
4122
  live
3858
4123
  });
3859
- const marketOrderbookDataById = useMemo6(() => {
4124
+ const marketOrderbookDataById = useMemo7(() => {
3860
4125
  var _a2;
3861
4126
  return (_a2 = marketOrderbookResult.dataById) != null ? _a2 : {};
3862
4127
  }, [marketOrderbookResult]);
3863
4128
  const isOrderBookLoading = marketOrderbookResult.isLoading;
3864
4129
  const orderBookError = marketOrderbookResult.error;
3865
4130
  const refetchOrderBook = marketOrderbookResult.refetch;
3866
- const aggregatedOrderbookRows = useMemo6(() => {
4131
+ const aggregatedOrderbookRows = useMemo7(() => {
3867
4132
  return mergeVenueOutcomeOrderbooks({
3868
4133
  eligibleOutcomes: selectedOutcomesByVenue,
3869
4134
  orderbooksByOutcomeId: marketOrderbookDataById
@@ -3871,7 +4136,7 @@ var MarketDetailsContent = ({
3871
4136
  }, [marketOrderbookDataById, selectedOutcomesByVenue]);
3872
4137
  const askRows = aggregatedOrderbookRows.askRows;
3873
4138
  const bidRows = aggregatedOrderbookRows.bidRows;
3874
- const unifiedEntries = useMemo6(() => {
4139
+ const unifiedEntries = useMemo7(() => {
3875
4140
  return resolveUnifiedOrderBookEntries({
3876
4141
  askRows,
3877
4142
  bidRows,
@@ -3879,7 +4144,7 @@ var MarketDetailsContent = ({
3879
4144
  spread: aggregatedOrderbookRows.spread
3880
4145
  });
3881
4146
  }, [aggregatedOrderbookRows.midpoint, aggregatedOrderbookRows.spread, askRows, bidRows]);
3882
- const orderbookSnapshotKey = useMemo6(() => {
4147
+ const orderbookSnapshotKey = useMemo7(() => {
3883
4148
  if (selectedOutcomesByVenue.length === 0) return null;
3884
4149
  return selectedOutcomesByVenue.map((item) => {
3885
4150
  var _a2, _b2;
@@ -3887,52 +4152,7 @@ var MarketDetailsContent = ({
3887
4152
  return `${item.outcomeId}:${snapshotVersion}`;
3888
4153
  }).join("|");
3889
4154
  }, [marketOrderbookDataById, selectedOutcomesByVenue]);
3890
- const chartAvailableOutcomesByVenue = useMemo6(() => {
3891
- return filterChartVenueOutcomesByRenderableVenues({
3892
- chartData: marketChartData,
3893
- venueOutcomes: chartOutcomesByVenue
3894
- });
3895
- }, [chartOutcomesByVenue, marketChartData]);
3896
- const graphSeries = useMemo6(() => {
3897
- var _a2, _b2, _c2, _d2;
3898
- const baseColor = resolveSeriesColor(
3899
- (_d2 = (_c2 = selectedGraphVenue != null ? selectedGraphVenue : (_a2 = chartAvailableOutcomesByVenue[0]) == null ? void 0 : _a2.venue) != null ? _c2 : (_b2 = chartOutcomesByVenue[0]) == null ? void 0 : _b2.venue) != null ? _d2 : "polymarket",
3900
- 0,
3901
- isDarkTheme
3902
- );
3903
- const domainStartTs = rollingWindow.startTs;
3904
- return resolveMarketChartDisplaySeries({
3905
- chartData: marketChartData,
3906
- selectedVenue: selectedGraphVenue,
3907
- transformProbability: (value) => value
3908
- }).map((seriesItem) => {
3909
- return {
3910
- id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
3911
- venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
3912
- color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
3913
- // Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
3914
- // bars don't bleed in across a range shrink or long mount.
3915
- points: seriesItem.points.filter((point) => point.time >= domainStartTs)
3916
- };
3917
- });
3918
- }, [
3919
- isDarkTheme,
3920
- chartPrimaryOutcomeId,
3921
- marketChartData,
3922
- rollingWindow.startTs,
3923
- selectedGraphVenue,
3924
- resolvedChartOutcomeLabel,
3925
- chartAvailableOutcomesByVenue,
3926
- chartOutcomesByVenue
3927
- ]);
3928
- const graphLiveState = useMemo6(() => {
3929
- return resolveMarketChartLiveState({
3930
- chartData: marketChartData,
3931
- selectedVenue: selectedGraphVenue,
3932
- transformProbability: (value) => value
3933
- });
3934
- }, [marketChartData, selectedGraphVenue]);
3935
- const otherRows = useMemo6(() => {
4155
+ const otherRows = useMemo7(() => {
3936
4156
  if (!model) return [];
3937
4157
  return resolveOtherTabRows(model.market, labels);
3938
4158
  }, [labels, model]);
@@ -3942,7 +4162,6 @@ var MarketDetailsContent = ({
3942
4162
  const isSnapshotUnavailableError = typeof orderBookError === "object" && orderBookError != null && "message" in orderBookError && typeof orderBookError.message === "string" && /^snapshot unavailable for\s+\S+/i.test(orderBookError.message);
3943
4163
  const orderBookErrorDescription = isSnapshotUnavailableError ? labels.marketDetails.orderBookUnavailableDescription : typeof orderBookError === "object" && orderBookError != null && "message" in orderBookError && typeof orderBookError.message === "string" && orderBookError.message.trim().length > 0 ? orderBookError.message : labels.marketDetails.orderBookUnavailableDescription;
3944
4164
  const hasNoOrderBook = isOrderBookNotFound && !isMarketResolved || !isOrderBookLoading && !hasOrderBookError && (selectedOutcomesByVenue.length === 0 || aggregatedOrderbookRows.hasNoOrderBook);
3945
- const hasChartError = !!marketChartError;
3946
4165
  const selectHeaderOutcome = ({
3947
4166
  item,
3948
4167
  shouldNotifyOutcomeSelect = false
@@ -3950,7 +4169,7 @@ var MarketDetailsContent = ({
3950
4169
  var _a2, _b2;
3951
4170
  if (isOutcomeSelectionLocked) return;
3952
4171
  if (item == null ? void 0 : item.id) {
3953
- const targetMarket = (_a2 = model == null ? void 0 : model.market.venueMarkets.find(
4172
+ const targetMarket = (_a2 = venueMarkets.find(
3954
4173
  (venueMarket) => venueMarket.venueMarketOutcomes.some((outcome) => outcome.id === item.id)
3955
4174
  )) != null ? _a2 : null;
3956
4175
  if ((targetMarket == null ? void 0 : targetMarket.id) && targetMarket.id !== (tradingContext == null ? void 0 : tradingContext.selectedMarketId)) {
@@ -3992,23 +4211,14 @@ var MarketDetailsContent = ({
3992
4211
  if (!marketId) return;
3993
4212
  onOpenChange == null ? void 0 : onOpenChange(marketId);
3994
4213
  };
3995
- const handleGraphVenueToggle = (venue) => {
3996
- setSelectedGraphVenue((currentVenue) => {
3997
- if (currentVenue === venue) return null;
3998
- return venue;
3999
- });
4000
- };
4001
4214
  const handleRetryOrderBook = () => {
4002
4215
  void refetchOrderBook();
4003
4216
  };
4004
- const handleRetryMarketChart = () => {
4005
- void refetchMarketChart();
4006
- };
4007
4217
  const orderbookState = marketTradingState.isTradingDisabled ? {
4008
4218
  kind: "disabled",
4009
4219
  title: marketStatePresentation.title,
4010
4220
  description: marketStatePresentation.description,
4011
- icon: /* @__PURE__ */ jsx9(Icon, { name: marketStatePresentation.iconName, className: "h-5 w-5", "aria-hidden": "true" })
4221
+ icon: /* @__PURE__ */ jsx10(Icon, { name: marketStatePresentation.iconName, className: "h-5 w-5", "aria-hidden": "true" })
4012
4222
  } : isOrderBookLoading ? { kind: "loading" } : hasOrderBookError ? {
4013
4223
  kind: "error",
4014
4224
  title: labels.marketDetails.orderBookUnavailableTitle,
@@ -4023,22 +4233,27 @@ var MarketDetailsContent = ({
4023
4233
  title: labels.marketDetails.orderBookEmptyTitle,
4024
4234
  description: labels.marketDetails.orderBookEmptyDescription
4025
4235
  } : { kind: "data" };
4026
- useEffect4(() => {
4027
- if (!selectedGraphVenue) {
4028
- return;
4029
- }
4030
- if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
4031
- return;
4032
- }
4033
- setSelectedGraphVenue(null);
4034
- }, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
4035
4236
  if (marketId && !resolvedMarket) {
4036
- return /* @__PURE__ */ jsx9(MarketDetailsNotFoundState, { ariaLabel, classNames });
4237
+ return /* @__PURE__ */ jsx10(
4238
+ MarketDetailsNotFoundState,
4239
+ {
4240
+ marketId,
4241
+ ariaLabel,
4242
+ classNames
4243
+ }
4244
+ );
4037
4245
  }
4038
4246
  if (!model) {
4039
- return /* @__PURE__ */ jsx9(MarketDetailsUnavailableState, { ariaLabel, classNames });
4247
+ return /* @__PURE__ */ jsx10(
4248
+ MarketDetailsUnavailableState,
4249
+ {
4250
+ marketId,
4251
+ ariaLabel,
4252
+ classNames
4253
+ }
4254
+ );
4040
4255
  }
4041
- return /* @__PURE__ */ jsxs7(
4256
+ return /* @__PURE__ */ jsxs8(
4042
4257
  Card,
4043
4258
  {
4044
4259
  className: cn(
@@ -4049,9 +4264,10 @@ var MarketDetailsContent = ({
4049
4264
  classNames == null ? void 0 : classNames.root
4050
4265
  ),
4051
4266
  children: [
4052
- /* @__PURE__ */ jsxs7(
4267
+ /* @__PURE__ */ jsxs8(
4053
4268
  "div",
4054
4269
  {
4270
+ "data-market-id": marketId || void 0,
4055
4271
  className: cn(
4056
4272
  "agg-market-card-header",
4057
4273
  "flex flex-col items-stretch gap-3 px-5 py-3 md:flex-row md:flex-nowrap md:items-center md:justify-between",
@@ -4059,7 +4275,7 @@ var MarketDetailsContent = ({
4059
4275
  classNames == null ? void 0 : classNames.header
4060
4276
  ),
4061
4277
  children: [
4062
- /* @__PURE__ */ jsxs7(
4278
+ /* @__PURE__ */ jsxs8(
4063
4279
  "button",
4064
4280
  {
4065
4281
  className: cn(
@@ -4073,17 +4289,17 @@ var MarketDetailsContent = ({
4073
4289
  "aria-controls": detailsContentId,
4074
4290
  "aria-label": isOpened ? labels.marketDetails.toggleCloseDetailsAria(model.title) : labels.marketDetails.toggleOpenDetailsAria(model.title),
4075
4291
  children: [
4076
- /* @__PURE__ */ jsxs7("div", { className: "agg-market-summary flex min-w-24 flex-1 items-center gap-3 md:gap-4", children: [
4077
- /* @__PURE__ */ jsx9(
4292
+ /* @__PURE__ */ jsxs8("div", { className: "agg-market-summary flex min-w-24 flex-1 items-center gap-3 md:gap-4", children: [
4293
+ !compactHeader ? /* @__PURE__ */ jsx10(
4078
4294
  RemoteImage,
4079
4295
  {
4080
4296
  src: optimizedImageUrl3(model.image, 60),
4081
4297
  alt: "",
4082
4298
  className: "agg-market-image size-12 rounded-agg-lg object-cover md:size-[60px]"
4083
4299
  }
4084
- ),
4085
- /* @__PURE__ */ jsxs7("div", { className: "flex min-w-24 flex-col", children: [
4086
- /* @__PURE__ */ jsx9(Tooltip, { content: model.title, side: "top", children: /* @__PURE__ */ jsx9("div", { className: "min-w-0", children: /* @__PURE__ */ jsx9(
4300
+ ) : null,
4301
+ /* @__PURE__ */ jsxs8("div", { className: "flex min-w-24 flex-col", children: [
4302
+ /* @__PURE__ */ jsx10(Tooltip, { content: model.title, side: "top", children: /* @__PURE__ */ jsx10("div", { className: "min-w-0", children: /* @__PURE__ */ jsx10(
4087
4303
  Typography,
4088
4304
  {
4089
4305
  as: "h3",
@@ -4092,16 +4308,16 @@ var MarketDetailsContent = ({
4092
4308
  children: model.title
4093
4309
  }
4094
4310
  ) }) }),
4095
- /* @__PURE__ */ jsx9("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsx9(
4311
+ /* @__PURE__ */ jsx10("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsx10(
4096
4312
  Typography,
4097
4313
  {
4098
4314
  variant: "label",
4099
4315
  className: "agg-market-meta truncate text-agg-muted-foreground",
4100
- children: model.subtitle
4316
+ children: subtitleOverride != null ? subtitleOverride : model.subtitle
4101
4317
  }
4102
4318
  ) }),
4103
- marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */ jsxs7("div", { className: "mt-2 flex flex-wrap items-center gap-2 justify-center md:justify-start", children: [
4104
- /* @__PURE__ */ jsxs7(
4319
+ marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */ jsxs8("div", { className: "mt-2 flex flex-wrap items-center gap-2 justify-center md:justify-start", children: [
4320
+ /* @__PURE__ */ jsxs8(
4105
4321
  "span",
4106
4322
  {
4107
4323
  className: cn(
@@ -4109,7 +4325,7 @@ var MarketDetailsContent = ({
4109
4325
  resolveTradingStateBadgeClassName(marketTradingState.kind)
4110
4326
  ),
4111
4327
  children: [
4112
- /* @__PURE__ */ jsx9(
4328
+ /* @__PURE__ */ jsx10(
4113
4329
  Icon,
4114
4330
  {
4115
4331
  name: marketStatePresentation.iconName,
@@ -4117,20 +4333,20 @@ var MarketDetailsContent = ({
4117
4333
  className: "h-3.5 w-3.5"
4118
4334
  }
4119
4335
  ),
4120
- /* @__PURE__ */ jsx9("span", { children: marketStatePresentation.badgeLabel })
4336
+ /* @__PURE__ */ jsx10("span", { children: marketStatePresentation.badgeLabel })
4121
4337
  ]
4122
4338
  }
4123
4339
  ),
4124
- marketStatePresentation.timestampLabel ? /* @__PURE__ */ jsx9(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.timestampLabel }) : null,
4125
- marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */ jsx9(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.winningOutcomeLabel }) : null
4340
+ marketStatePresentation.timestampLabel ? /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.timestampLabel }) : null,
4341
+ marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.winningOutcomeLabel }) : null
4126
4342
  ] }) : null
4127
4343
  ] })
4128
4344
  ] }),
4129
- /* @__PURE__ */ jsx9(Typography, { as: "div", variant: "heading", className: "agg-market-headline shrink-0", children: formatProbabilityPercent(headlineProbability, formatPercent) })
4345
+ !compactHeader ? /* @__PURE__ */ jsx10(Typography, { as: "div", variant: "heading", className: "agg-market-headline shrink-0", children: formatProbabilityPercent(headlineProbability, formatPercent) }) : null
4130
4346
  ]
4131
4347
  }
4132
4348
  ),
4133
- marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */ jsx9("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs7(
4349
+ marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */ jsx10("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs8(
4134
4350
  "span",
4135
4351
  {
4136
4352
  className: cn(
@@ -4143,7 +4359,7 @@ var MarketDetailsContent = ({
4143
4359
  "border-transparent bg-agg-secondary-hover"
4144
4360
  ),
4145
4361
  children: [
4146
- /* @__PURE__ */ jsx9(
4362
+ /* @__PURE__ */ jsx10(
4147
4363
  Icon,
4148
4364
  {
4149
4365
  name: marketTradingState.winningOutcome.label.trim().toLowerCase() === "yes" ? "check-circle" : "cross-circle",
@@ -4154,10 +4370,10 @@ var MarketDetailsContent = ({
4154
4370
  )
4155
4371
  }
4156
4372
  ),
4157
- /* @__PURE__ */ jsx9(Typography, { variant: "body", children: labels.eventMarketPage.resolvedOutcome(marketTradingState.winningOutcome.label) })
4373
+ /* @__PURE__ */ jsx10(Typography, { variant: "body", children: labels.eventMarketPage.resolvedOutcome(marketTradingState.winningOutcome.label) })
4158
4374
  ]
4159
4375
  }
4160
- ) }) : isUpcomingMarket ? /* @__PURE__ */ jsx9("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs7(
4376
+ ) }) : isUpcomingMarket ? /* @__PURE__ */ jsx10("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs8(
4161
4377
  "span",
4162
4378
  {
4163
4379
  className: cn(
@@ -4166,7 +4382,7 @@ var MarketDetailsContent = ({
4166
4382
  resolveTradingStateBadgeClassName(marketTradingState.kind)
4167
4383
  ),
4168
4384
  children: [
4169
- /* @__PURE__ */ jsx9(
4385
+ /* @__PURE__ */ jsx10(
4170
4386
  Icon,
4171
4387
  {
4172
4388
  name: marketStatePresentation.iconName,
@@ -4175,10 +4391,10 @@ var MarketDetailsContent = ({
4175
4391
  "aria-hidden": "true"
4176
4392
  }
4177
4393
  ),
4178
- /* @__PURE__ */ jsx9("span", { children: marketStatePresentation.badgeLabel })
4394
+ /* @__PURE__ */ jsx10("span", { children: marketStatePresentation.badgeLabel })
4179
4395
  ]
4180
4396
  }
4181
- ) }) : /* @__PURE__ */ jsx9(
4397
+ ) }) : /* @__PURE__ */ jsx10(
4182
4398
  "div",
4183
4399
  {
4184
4400
  className: "agg-outcomes flex w-full flex-wrap gap-2 md:w-auto md:shrink-0 md:flex-nowrap",
@@ -4187,9 +4403,10 @@ var MarketDetailsContent = ({
4187
4403
  onKeyDown: (eventToHandle) => handleOutcomeKeyDown(eventToHandle),
4188
4404
  children: headerOutcomeItems.map((item) => {
4189
4405
  const isActiveOutcome = item.id === selectedOutcomeId;
4190
- return /* @__PURE__ */ jsx9(
4406
+ return /* @__PURE__ */ jsx10(
4191
4407
  MarketDetailsOutcomeButton,
4192
4408
  {
4409
+ enforceFixedWidth: headerOutcomeVariant != null,
4193
4410
  item,
4194
4411
  isSelected: isActiveOutcome,
4195
4412
  enableAnimations: config.features.enableAnimations,
@@ -4213,7 +4430,8 @@ var MarketDetailsContent = ({
4213
4430
  ]
4214
4431
  }
4215
4432
  ),
4216
- /* @__PURE__ */ jsx9(
4433
+ headerAccessory ? /* @__PURE__ */ jsx10("div", { className: "agg-market-card-accessory border-t border-agg-separator", children: headerAccessory }) : null,
4434
+ /* @__PURE__ */ jsx10(
4217
4435
  "div",
4218
4436
  {
4219
4437
  id: detailsContentId,
@@ -4227,9 +4445,9 @@ var MarketDetailsContent = ({
4227
4445
  isOpened ? "grid-rows-[1fr] opacity-100" : "pointer-events-none grid-rows-[0fr] opacity-0"
4228
4446
  ),
4229
4447
  "aria-hidden": !isOpened,
4230
- children: /* @__PURE__ */ jsxs7("div", { className: "min-h-0", children: [
4231
- /* @__PURE__ */ jsx9("div", { className: "h-px w-full bg-agg-separator" }),
4232
- /* @__PURE__ */ jsxs7(
4448
+ children: /* @__PURE__ */ jsxs8("div", { className: "min-h-0", children: [
4449
+ /* @__PURE__ */ jsx10("div", { className: "h-px w-full bg-agg-separator" }),
4450
+ /* @__PURE__ */ jsxs8(
4233
4451
  "div",
4234
4452
  {
4235
4453
  className: cn(
@@ -4243,8 +4461,8 @@ var MarketDetailsContent = ({
4243
4461
  ) : "translate-y-5 opacity-0"
4244
4462
  ),
4245
4463
  children: [
4246
- !isResolvedMarket ? /* @__PURE__ */ jsxs7(Fragment2, { children: [
4247
- /* @__PURE__ */ jsx9("div", { className: cn("block", classNames == null ? void 0 : classNames.tabs), children: /* @__PURE__ */ jsx9(
4464
+ !isResolvedMarket ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
4465
+ /* @__PURE__ */ jsx10("div", { className: cn("block", classNames == null ? void 0 : classNames.tabs), children: /* @__PURE__ */ jsx10(
4248
4466
  Tabs,
4249
4467
  {
4250
4468
  ariaLabel: labels.marketDetails.tabsAria,
@@ -4255,10 +4473,10 @@ var MarketDetailsContent = ({
4255
4473
  className: "agg-market-tabs w-full px-5"
4256
4474
  }
4257
4475
  ) }),
4258
- /* @__PURE__ */ jsx9("div", { className: "h-px w-full bg-agg-separator" })
4476
+ /* @__PURE__ */ jsx10("div", { className: "h-px w-full bg-agg-separator" })
4259
4477
  ] }) : null,
4260
- /* @__PURE__ */ jsxs7("div", { className: cn("agg-market-card-body p-0", classNames == null ? void 0 : classNames.content), children: [
4261
- effectiveSelectedTab === "order-book" ? /* @__PURE__ */ jsx9(
4478
+ /* @__PURE__ */ jsxs8("div", { className: cn("agg-market-card-body p-0", classNames == null ? void 0 : classNames.content), children: [
4479
+ effectiveSelectedTab === "order-book" ? /* @__PURE__ */ jsx10(
4262
4480
  OrderbookWithStates,
4263
4481
  {
4264
4482
  state: orderbookState,
@@ -4284,159 +4502,29 @@ var MarketDetailsContent = ({
4284
4502
  wrapperClassName: classNames == null ? void 0 : classNames.orderBook
4285
4503
  }
4286
4504
  ) : null,
4287
- effectiveSelectedTab === "graph" ? /* @__PURE__ */ jsxs7("div", { className: cn("agg-price-chart flex flex-col gap-5 p-5", classNames == null ? void 0 : classNames.graph), children: [
4288
- hasChartError ? /* @__PURE__ */ jsx9(
4289
- StateMessage,
4290
- {
4291
- title: labels.marketDetails.chartUnavailableTitle,
4292
- description: labels.marketDetails.chartUnavailableDescription,
4293
- icon: /* @__PURE__ */ jsx9(WarningIcon, {}),
4294
- onAction: handleRetryMarketChart,
4295
- classNames: { root: "min-h-[248px] px-5 py-10 md:min-h-[272px]" }
4296
- }
4297
- ) : /* @__PURE__ */ jsx9(
4298
- LineChart,
4299
- {
4300
- series: graphSeries,
4301
- height: 260,
4302
- isLoading: isMarketChartLoading,
4303
- chartType: selectedChartType,
4304
- liveCandle: selectedChartType === "candlestick" ? (_l = graphLiveState.liveCandle) != null ? _l : void 0 : void 0,
4305
- lineValue: graphLiveState.lineValue,
4306
- classNames: { root: "agg-chart-region w-full" },
4307
- showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
4308
- renderSeriesControls: () => {
4309
- var _a2, _b2, _c2, _d2;
4310
- return /* @__PURE__ */ jsxs7("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
4311
- /* @__PURE__ */ jsx9("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
4312
- var _a3;
4313
- const probability = formatProbabilityPercent(
4314
- (_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
4315
- formatPercent
4316
- );
4317
- const isActiveVenue = selectedGraphVenue === item.venue;
4318
- return /* @__PURE__ */ jsxs7(
4319
- "button",
4320
- {
4321
- type: "button",
4322
- "aria-label": `${item.venue} ${probability}`,
4323
- "aria-pressed": isActiveVenue,
4324
- className: cn(
4325
- "agg-market-venue",
4326
- "cursor-pointer",
4327
- "inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
4328
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary-hover",
4329
- isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
4330
- ),
4331
- onClick: (e) => {
4332
- e.preventDefault();
4333
- e.stopPropagation();
4334
- handleGraphVenueToggle(item.venue);
4335
- },
4336
- children: [
4337
- /* @__PURE__ */ jsx9(VenueLogo, { venue: item.venue, size: "small" }),
4338
- /* @__PURE__ */ jsx9("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
4339
- ]
4340
- },
4341
- `${item.market.id}-${item.outcome.id}`
4342
- );
4343
- }) }),
4344
- !isOutcomeSelectionLocked ? /* @__PURE__ */ jsx9(
4345
- SwitchButton,
4346
- {
4347
- ariaLabel: labels.marketDetails.outcomeSelectorAria,
4348
- className: "agg-outcome-switch w-full shrink-0 md:w-fit",
4349
- value: (_d2 = (_c2 = (_a2 = headerOutcomeItems.find(
4350
- (outcome) => outcome.label === resolvedChartOutcomeLabel
4351
- )) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d2 : "",
4352
- onValueChange: (outcomeId) => {
4353
- const outcome = headerOutcomeItems.find(
4354
- (headerOutcomeItem) => headerOutcomeItem.id === outcomeId
4355
- );
4356
- if (!outcome) return;
4357
- setChartOutcomeLabel(outcome.label);
4358
- },
4359
- options: headerOutcomeItems.map((outcome) => {
4360
- var _a3, _b3;
4361
- const price = outcome.probability;
4362
- return {
4363
- value: outcome.id,
4364
- label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
4365
- ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
4366
- };
4367
- })
4368
- }
4369
- ) : null
4370
- ] });
4371
- }
4372
- }
4373
- ),
4374
- /* @__PURE__ */ jsxs7(
4375
- "div",
4376
- {
4377
- className: cn(
4378
- "agg-chart-footer",
4379
- "flex flex-row justify-between gap-2 text-agg-sm leading-agg-5 text-agg-muted-foreground md:flex-row md:items-center md:justify-between",
4380
- classNames == null ? void 0 : classNames.footer
4381
- ),
4382
- children: [
4383
- /* @__PURE__ */ jsx9("span", { children: typeof model.market.volume !== "number" ? labels.marketDetails.volumeUnavailable : model.market.volume > 0 ? `${config.formatting.formatCompactCurrency(model.market.volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
4384
- /* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
4385
- /* @__PURE__ */ jsx9(
4386
- ChartTypeSwitch,
4387
- {
4388
- className: "agg-chart-type-switch shrink-0",
4389
- value: selectedChartType,
4390
- onValueChange: setSelectedChartType
4391
- }
4392
- ),
4393
- /* @__PURE__ */ jsx9(
4394
- "span",
4395
- {
4396
- "aria-hidden": "true",
4397
- className: "hidden h-4 w-px bg-agg-separator md:block"
4398
- }
4399
- ),
4400
- CHART_TIME_RANGES2.map((timeRange) => {
4401
- const isActive = effectiveChartTimeRange === timeRange;
4402
- const isDisabled = isResolvedMarket && timeRange !== "ALL";
4403
- return /* @__PURE__ */ jsx9(
4404
- "button",
4405
- {
4406
- type: "button",
4407
- disabled: isDisabled,
4408
- className: cn(
4409
- "agg-chart-time-range-trigger",
4410
- "cursor-pointer text-agg-sm leading-agg-5",
4411
- isDisabled && "cursor-not-allowed opacity-50",
4412
- isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
4413
- ),
4414
- "aria-pressed": isActive,
4415
- "aria-disabled": isDisabled,
4416
- onClick: (e) => {
4417
- e.preventDefault();
4418
- e.stopPropagation();
4419
- if (isDisabled) return;
4420
- setChartRangeOverride(null);
4421
- setSelectedTimeRange(timeRange);
4422
- },
4423
- children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
4424
- },
4425
- timeRange
4426
- );
4427
- })
4428
- ] })
4429
- ]
4430
- }
4431
- )
4432
- ] }) : null,
4433
- effectiveSelectedTab === "other" ? /* @__PURE__ */ jsx9("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ jsx9("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ jsxs7(
4505
+ isOpened && effectiveSelectedTab === "graph" ? /* @__PURE__ */ jsx10(
4506
+ MarketDetailsGraphPanel,
4507
+ {
4508
+ venueMarkets: model.market.venueMarkets,
4509
+ selectedOutcomeLabel,
4510
+ selectedOutcomeId,
4511
+ livePrices,
4512
+ wsLivePrices,
4513
+ headerOutcomeItems,
4514
+ isResolvedMarket,
4515
+ isOutcomeSelectionLocked,
4516
+ volume: model.market.volume,
4517
+ live,
4518
+ classNames: { graph: classNames == null ? void 0 : classNames.graph, footer: classNames == null ? void 0 : classNames.footer }
4519
+ }
4520
+ ) : null,
4521
+ effectiveSelectedTab === "other" ? /* @__PURE__ */ jsx10("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ jsx10("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ jsxs8(
4434
4522
  "div",
4435
4523
  {
4436
4524
  className: "agg-market-meta-row flex items-center justify-between rounded-agg-xl bg-agg-secondary-hover px-4 py-3",
4437
4525
  children: [
4438
- /* @__PURE__ */ jsx9(Typography, { variant: "label", className: "text-agg-muted-foreground", children: row.label }),
4439
- /* @__PURE__ */ jsx9(Typography, { variant: "body", className: "text-right", children: row.value })
4526
+ /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: row.label }),
4527
+ /* @__PURE__ */ jsx10(Typography, { variant: "body", className: "text-right", children: row.value })
4440
4528
  ]
4441
4529
  },
4442
4530
  row.label
@@ -4454,9 +4542,9 @@ var MarketDetailsContent = ({
4454
4542
  };
4455
4543
  var MarketDetails = (_a) => {
4456
4544
  var _b = _a, { isOpened } = _b, props = __objRest(_b, ["isOpened"]);
4457
- const labels = useLabels6();
4545
+ const labels = useLabels7();
4458
4546
  if (props.isLoading) {
4459
- return /* @__PURE__ */ jsx9(
4547
+ return /* @__PURE__ */ jsx10(
4460
4548
  Skeleton,
4461
4549
  {
4462
4550
  view: "market-details-minified",
@@ -4466,7 +4554,7 @@ var MarketDetails = (_a) => {
4466
4554
  );
4467
4555
  }
4468
4556
  if ("venueMarkets" in props && props.venueMarkets) {
4469
- return /* @__PURE__ */ jsx9(
4557
+ return /* @__PURE__ */ jsx10(
4470
4558
  MarketDetailsContent,
4471
4559
  __spreadProps(__spreadValues({}, props), {
4472
4560
  isOpened,
@@ -4478,7 +4566,7 @@ var MarketDetails = (_a) => {
4478
4566
  );
4479
4567
  }
4480
4568
  const { classNames: fallbackClassNames } = props;
4481
- return /* @__PURE__ */ jsx9(MarketDetailsUnavailableState, { classNames: fallbackClassNames });
4569
+ return /* @__PURE__ */ jsx10(MarketDetailsUnavailableState, { classNames: fallbackClassNames });
4482
4570
  };
4483
4571
  MarketDetails.displayName = "MarketDetails";
4484
4572
  var AFFIRMATIVE_WINNER_LABELS = /* @__PURE__ */ new Set(["yes", "up", "buy", "long", "true"]);
@@ -4535,11 +4623,11 @@ var MarketDetailsList = ({
4535
4623
  midpointsResult
4536
4624
  }) => {
4537
4625
  var _a, _b;
4538
- const labels = useLabels6();
4626
+ const labels = useLabels7();
4539
4627
  const tradingContext = useEventTradingContext2();
4540
4628
  const selectedMarketId = (_a = tradingContext == null ? void 0 : tradingContext.selectedMarketId) != null ? _a : null;
4541
- const [expandedMarketId, setExpandedMarketId] = useState4(null);
4542
- const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] = useState4(false);
4629
+ const [expandedMarketId, setExpandedMarketId] = useState5(null);
4630
+ const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] = useState5(false);
4543
4631
  const resolvedEventId = eventId || "";
4544
4632
  const {
4545
4633
  markets: rawMarkets,
@@ -4548,11 +4636,12 @@ var MarketDetailsList = ({
4548
4636
  } = useVenueMarkets2({
4549
4637
  venueEventId: resolvedEventId,
4550
4638
  enabled: !providedMarkets && !!resolvedEventId,
4551
- status: MarketStatus.open,
4552
- sortBy: "yesPrice",
4553
- sortDir: "desc"
4639
+ status: MarketStatus.open
4640
+ // No explicit sortBy: event-scoped /venue-markets sorts by the event's
4641
+ // type-aware order (structureOrderBy), matching the home-card top-3 and the
4642
+ // markets-under-an-event ordering. Passing sortBy here would override it.
4554
4643
  });
4555
- const sourceMarkets = useMemo6(() => {
4644
+ const sourceMarkets = useMemo7(() => {
4556
4645
  var _a2;
4557
4646
  if ((_a2 = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _a2.length) {
4558
4647
  return eventTradingState.marketStates.map((item) => item.market);
@@ -4560,10 +4649,10 @@ var MarketDetailsList = ({
4560
4649
  if (providedMarkets) return providedMarkets;
4561
4650
  return rawMarkets;
4562
4651
  }, [eventTradingState == null ? void 0 : eventTradingState.marketStates, providedMarkets, rawMarkets]);
4563
- const isResolvedEvent = useMemo6(() => {
4652
+ const isResolvedEvent = useMemo7(() => {
4564
4653
  return resolveIsResolvedEvent(sourceMarkets, eventTradingState);
4565
4654
  }, [eventTradingState, sourceMarkets]);
4566
- const groupedMarkets = useMemo6(() => {
4655
+ const groupedMarkets = useMemo7(() => {
4567
4656
  if (sourceMarkets.length === 0) {
4568
4657
  return {
4569
4658
  primary: [],
@@ -4603,21 +4692,21 @@ var MarketDetailsList = ({
4603
4692
  return { primary, upcoming, resolved, closed };
4604
4693
  }, [eventTradingState, isResolvedEvent, sourceMarkets]);
4605
4694
  const shouldShowResolvedToggle = !isResolvedEvent && groupedMarkets.resolved.length > 0;
4606
- const visibleResolvedMarkets = useMemo6(() => {
4695
+ const visibleResolvedMarkets = useMemo7(() => {
4607
4696
  if (isResolvedEvent || areResolvedMarketsVisible) return groupedMarkets.resolved;
4608
4697
  return [];
4609
4698
  }, [areResolvedMarketsVisible, groupedMarkets.resolved, isResolvedEvent]);
4610
- const displayedMarkets = useMemo6(() => {
4699
+ const displayedMarkets = useMemo7(() => {
4611
4700
  return [...groupedMarkets.primary, ...visibleResolvedMarkets];
4612
4701
  }, [groupedMarkets.primary, visibleResolvedMarkets]);
4613
4702
  const hasPrefetchedMarkets = !!providedMarkets || !!((_b = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _b.length);
4614
- const midpointEligibleMarkets = useMemo6(() => {
4703
+ const midpointEligibleMarkets = useMemo7(() => {
4615
4704
  return displayedMarkets.filter(
4616
4705
  (market) => resolveMarketTradingState(market).kind !== "resolved"
4617
4706
  );
4618
4707
  }, [displayedMarkets]);
4619
4708
  const { prices: midpointsFallback, venueByOutcomeId: midpointsFallbackVenues } = useViewportMidpoints(midpointEligibleMarkets);
4620
- useEffect4(() => {
4709
+ useEffect5(() => {
4621
4710
  if (isResolvedEvent) {
4622
4711
  setAreResolvedMarketsVisible(false);
4623
4712
  return;
@@ -4626,7 +4715,7 @@ var MarketDetailsList = ({
4626
4715
  setAreResolvedMarketsVisible(false);
4627
4716
  }
4628
4717
  }, [groupedMarkets.resolved.length, isResolvedEvent]);
4629
- useEffect4(() => {
4718
+ useEffect5(() => {
4630
4719
  if (displayedMarkets.length === 0) return;
4631
4720
  if (selectedMarketId && displayedMarkets.some((market) => market.id === selectedMarketId)) {
4632
4721
  return;
@@ -4643,7 +4732,7 @@ var MarketDetailsList = ({
4643
4732
  if (!autoSelectFallbackMarket) return;
4644
4733
  tradingContext == null ? void 0 : tradingContext.selectMarket(fallbackSelectableMarket.id, fallbackSelectableMarket);
4645
4734
  }, [autoSelectFallbackMarket, displayedMarkets, selectedMarketId, sourceMarkets, tradingContext]);
4646
- useEffect4(() => {
4735
+ useEffect5(() => {
4647
4736
  if (!expandedMarketId) return;
4648
4737
  if (displayedMarkets.some((market) => market.id === expandedMarketId)) return;
4649
4738
  setExpandedMarketId(null);
@@ -4661,7 +4750,7 @@ var MarketDetailsList = ({
4661
4750
  tradingContext == null ? void 0 : tradingContext.selectMarket(market.id, market);
4662
4751
  };
4663
4752
  if (!hasPrefetchedMarkets && isLoading) {
4664
- return /* @__PURE__ */ jsx9(
4753
+ return /* @__PURE__ */ jsx10(
4665
4754
  Skeleton,
4666
4755
  {
4667
4756
  view: "market-details-minified",
@@ -4671,29 +4760,29 @@ var MarketDetailsList = ({
4671
4760
  );
4672
4761
  }
4673
4762
  if (!hasPrefetchedMarkets && error) {
4674
- return /* @__PURE__ */ jsx9(
4763
+ return /* @__PURE__ */ jsx10(
4675
4764
  StateMessage,
4676
4765
  {
4677
4766
  title: labels.marketDetails.unavailableTitle,
4678
4767
  description: labels.marketDetails.unavailableDescription,
4679
- icon: /* @__PURE__ */ jsx9(SearchEmptyIcon, {}),
4768
+ icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
4680
4769
  classNames: { root: "min-h-[280px] md:min-h-[320px]" }
4681
4770
  }
4682
4771
  );
4683
4772
  }
4684
4773
  if (displayedMarkets.length === 0 && !shouldShowResolvedToggle) {
4685
4774
  const hasSourceMarkets = sourceMarkets.length > 0;
4686
- return /* @__PURE__ */ jsx9(
4775
+ return /* @__PURE__ */ jsx10(
4687
4776
  StateMessage,
4688
4777
  {
4689
4778
  title: hasSourceMarkets ? isResolvedEvent ? labels.markets.emptyResolved : labels.markets.emptyNoOpen : labels.marketDetails.notFoundTitle,
4690
4779
  description: hasSourceMarkets ? void 0 : labels.marketDetails.notFoundDescription,
4691
- icon: /* @__PURE__ */ jsx9(SearchEmptyIcon, {}),
4780
+ icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
4692
4781
  classNames: { root: "min-h-[280px] md:min-h-[320px]" }
4693
4782
  }
4694
4783
  );
4695
4784
  }
4696
- const renderMarketCard = (market) => /* @__PURE__ */ jsx9("div", { children: /* @__PURE__ */ jsx9(
4785
+ const renderMarketCard = (market) => /* @__PURE__ */ jsx10("div", { children: /* @__PURE__ */ jsx10(
4697
4786
  MarketDetails,
4698
4787
  {
4699
4788
  marketId: market.id,
@@ -4720,9 +4809,9 @@ var MarketDetailsList = ({
4720
4809
  midpointsResult
4721
4810
  }
4722
4811
  ) }, market.id);
4723
- return /* @__PURE__ */ jsxs7("div", { className: cn("agg-market-list flex flex-col gap-3", classNames == null ? void 0 : classNames.root), children: [
4812
+ return /* @__PURE__ */ jsxs8("div", { className: cn("agg-market-list flex flex-col gap-3", classNames == null ? void 0 : classNames.root), children: [
4724
4813
  groupedMarkets.primary.map((market) => renderMarketCard(market)),
4725
- shouldShowResolvedToggle ? /* @__PURE__ */ jsx9(
4814
+ shouldShowResolvedToggle ? /* @__PURE__ */ jsx10(
4726
4815
  Button,
4727
4816
  {
4728
4817
  variant: "tertiary",
@@ -4732,7 +4821,7 @@ var MarketDetailsList = ({
4732
4821
  setAreResolvedMarketsVisible((isVisible) => !isVisible);
4733
4822
  },
4734
4823
  "aria-expanded": areResolvedMarketsVisible,
4735
- suffix: /* @__PURE__ */ jsx9(
4824
+ suffix: /* @__PURE__ */ jsx10(
4736
4825
  Icon,
4737
4826
  {
4738
4827
  name: areResolvedMarketsVisible ? "chevron-up" : "chevron-down",
@@ -4756,17 +4845,17 @@ import {
4756
4845
  useAppConfig as useAppConfig2,
4757
4846
  useCategories,
4758
4847
  useCategoryChildren,
4759
- useLabels as useLabels8,
4760
- useSdkUiConfig as useSdkUiConfig4,
4848
+ useLabels as useLabels9,
4849
+ useSdkUiConfig as useSdkUiConfig5,
4761
4850
  useVenueEvents
4762
4851
  } from "@agg-build/hooks";
4763
4852
  import { VENUES } from "@agg-build/sdk";
4764
4853
  import * as Dialog from "@radix-ui/react-dialog";
4765
- import { useEffect as useEffect6, useMemo as useMemo9, useRef as useRef7, useState as useState6 } from "react";
4854
+ import { useEffect as useEffect7, useMemo as useMemo10, useRef as useRef7, useState as useState7 } from "react";
4766
4855
 
4767
4856
  // src/events/list/category-sidebar.tsx
4768
- import { useMemo as useMemo7 } from "react";
4769
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
4857
+ import { useMemo as useMemo8 } from "react";
4858
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
4770
4859
  var rowBase = cn(
4771
4860
  "flex min-h-11 w-full items-center gap-3 rounded-[6px] px-3 py-3",
4772
4861
  "text-left text-agg-sm font-agg-normal leading-agg-5",
@@ -4788,7 +4877,7 @@ var CategorySidebar = ({
4788
4877
  onToggleCategory
4789
4878
  }) => {
4790
4879
  const isDrilledIn = categoryPath.length > 0;
4791
- const sortedBaseChildren = useMemo7(() => {
4880
+ const sortedBaseChildren = useMemo8(() => {
4792
4881
  var _a;
4793
4882
  if (!baseCategoryId) return [];
4794
4883
  const children = [...(_a = childrenByParentId.get(baseCategoryId)) != null ? _a : []];
@@ -4808,7 +4897,7 @@ var CategorySidebar = ({
4808
4897
  }) => {
4809
4898
  var _a, _b;
4810
4899
  const hasKnownChildren = ((_b = (_a = childrenByParentId.get(entry.id)) == null ? void 0 : _a.length) != null ? _b : 0) > 0;
4811
- return /* @__PURE__ */ jsxs8(
4900
+ return /* @__PURE__ */ jsxs9(
4812
4901
  "button",
4813
4902
  {
4814
4903
  type: "button",
@@ -4816,8 +4905,8 @@ var CategorySidebar = ({
4816
4905
  className: isSelected ? selectedRowClassName : idleRowClassName,
4817
4906
  onClick,
4818
4907
  children: [
4819
- /* @__PURE__ */ jsx10("span", { className: "min-w-0 flex-1 truncate first-letter:uppercase", children: entry.label }),
4820
- hasKnownChildren ? /* @__PURE__ */ jsx10(
4908
+ /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 truncate first-letter:uppercase", children: entry.label }),
4909
+ hasKnownChildren ? /* @__PURE__ */ jsx11(
4821
4910
  Icon,
4822
4911
  {
4823
4912
  name: isExpanded ? "chevron-up" : "chevron-down",
@@ -4825,7 +4914,7 @@ var CategorySidebar = ({
4825
4914
  color: "currentColor",
4826
4915
  className: "shrink-0 text-agg-muted-foreground"
4827
4916
  }
4828
- ) : /* @__PURE__ */ jsx10("span", { className: "shrink-0 text-agg-muted-foreground", children: entry.eventCount })
4917
+ ) : /* @__PURE__ */ jsx11("span", { className: "shrink-0 text-agg-muted-foreground", children: entry.eventCount })
4829
4918
  ]
4830
4919
  },
4831
4920
  entry.id
@@ -4843,27 +4932,27 @@ var CategorySidebar = ({
4843
4932
  const hasKnownChildren = childCategories.length > 0;
4844
4933
  const isExpanded = ((_d = categoryPath[depth]) == null ? void 0 : _d.id) === category.id && !collapsedCategoryIds.has(category.id);
4845
4934
  const isSelected = ((_e = categoryPath[depth]) == null ? void 0 : _e.id) === category.id && categoryPath.length === depth + 1;
4846
- return /* @__PURE__ */ jsxs8("div", { className: "flex w-full flex-col", children: [
4935
+ return /* @__PURE__ */ jsxs9("div", { className: "flex w-full flex-col", children: [
4847
4936
  renderRow({
4848
4937
  entry,
4849
4938
  isExpanded,
4850
4939
  isSelected,
4851
4940
  onClick: () => onToggleCategory({ entry, depth, hasKnownChildren, isExpanded, isSelected })
4852
4941
  }),
4853
- /* @__PURE__ */ jsx10(
4942
+ /* @__PURE__ */ jsx11(
4854
4943
  "div",
4855
4944
  {
4856
4945
  className: cn(
4857
4946
  "grid transition-[grid-template-rows] duration-150 ease-in-out motion-reduce:transition-none",
4858
4947
  isExpanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
4859
4948
  ),
4860
- children: /* @__PURE__ */ jsx10("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx10("div", { className: "flex w-full flex-col gap-1 pl-4 pt-1", children: childCategories.map((child) => renderBranch(child, depth + 1)) }) })
4949
+ children: /* @__PURE__ */ jsx11("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx11("div", { className: "flex w-full flex-col gap-1 pl-4 pt-1", children: childCategories.map((child) => renderBranch(child, depth + 1)) }) })
4861
4950
  }
4862
4951
  )
4863
4952
  ] }, category.id);
4864
4953
  };
4865
- return /* @__PURE__ */ jsxs8("div", { className: "flex w-full flex-col gap-1", children: [
4866
- /* @__PURE__ */ jsxs8(
4954
+ return /* @__PURE__ */ jsxs9("div", { className: "flex w-full flex-col gap-1", children: [
4955
+ /* @__PURE__ */ jsxs9(
4867
4956
  "button",
4868
4957
  {
4869
4958
  type: "button",
@@ -4871,8 +4960,8 @@ var CategorySidebar = ({
4871
4960
  className: !isDrilledIn ? selectedRowClassName : idleRowClassName,
4872
4961
  onClick: onSelectAll,
4873
4962
  children: [
4874
- /* @__PURE__ */ jsx10("span", { className: "min-w-0 flex-1 truncate", children: labels.subcategoriesAll }),
4875
- /* @__PURE__ */ jsx10("span", { className: "shrink-0 text-agg-muted-foreground", children: totalEventCount })
4963
+ /* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 truncate", children: labels.subcategoriesAll }),
4964
+ /* @__PURE__ */ jsx11("span", { className: "shrink-0 text-agg-muted-foreground", children: totalEventCount })
4876
4965
  ]
4877
4966
  }
4878
4967
  ),
@@ -4882,8 +4971,8 @@ var CategorySidebar = ({
4882
4971
  CategorySidebar.displayName = "CategorySidebar";
4883
4972
 
4884
4973
  // src/events/list/event-list-tabs.tsx
4885
- import { getVenueAvailabilityState, useAppConfig, useGeoBlock, useLabels as useLabels7 } from "@agg-build/hooks";
4886
- import { useCallback as useCallback3, useEffect as useEffect5, useMemo as useMemo8, useRef as useRef6, useState as useState5 } from "react";
4974
+ import { getVenueAvailabilityState, useAppConfig, useGeoBlock, useLabels as useLabels8 } from "@agg-build/hooks";
4975
+ import { useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo9, useRef as useRef6, useState as useState6 } from "react";
4887
4976
 
4888
4977
  // src/events/list/event-list.constants.ts
4889
4978
  import { MatchStatus, Venue as Venue2 } from "@agg-build/sdk";
@@ -4950,16 +5039,16 @@ var getDefaultEventListTabs = (labels) => {
4950
5039
  };
4951
5040
 
4952
5041
  // src/events/list/event-list-tabs.tsx
4953
- import { jsx as jsx11 } from "react/jsx-runtime";
5042
+ import { jsx as jsx12 } from "react/jsx-runtime";
4954
5043
  var renderTabIcon = (tab, isActive) => {
4955
5044
  if (tab.iconName === "warning-filled") {
4956
- return /* @__PURE__ */ jsx11(Icon, { name: "warning-filled", size: "small", color: "currentColor" });
5045
+ return /* @__PURE__ */ jsx12(Icon, { name: "warning-filled", size: "small", color: "currentColor" });
4957
5046
  }
4958
5047
  if (tab.venueLogo) {
4959
- return /* @__PURE__ */ jsx11(VenueLogo, { venue: tab.venueLogo, size: "small" });
5048
+ return /* @__PURE__ */ jsx12(VenueLogo, { venue: tab.venueLogo, size: "small" });
4960
5049
  }
4961
5050
  if (!tab.iconName) return null;
4962
- return /* @__PURE__ */ jsx11(
5051
+ return /* @__PURE__ */ jsx12(
4963
5052
  Icon,
4964
5053
  {
4965
5054
  name: tab.iconName,
@@ -4969,10 +5058,10 @@ var renderTabIcon = (tab, isActive) => {
4969
5058
  );
4970
5059
  };
4971
5060
  var useEventListTabs = (tabs) => {
4972
- const labels = useLabels7();
5061
+ const labels = useLabels8();
4973
5062
  const { disabledVenues } = useAppConfig();
4974
5063
  const { isLocationBlocked } = useGeoBlock();
4975
- return useMemo8(() => {
5064
+ return useMemo9(() => {
4976
5065
  const baseTabs = tabs != null ? tabs : getDefaultEventListTabs(labels);
4977
5066
  return baseTabs.flatMap((tab) => {
4978
5067
  if (!tab.venueLogo) return [tab];
@@ -5001,13 +5090,13 @@ var EventListTabs = ({
5001
5090
  overflowBehavior
5002
5091
  }) => {
5003
5092
  const resolvedTabs = useEventListTabs(tabs);
5004
- useEffect5(() => {
5093
+ useEffect6(() => {
5005
5094
  const fallbackTab = resolvedTabs.find((tab) => !tab.disabled);
5006
5095
  if (!fallbackTab) return;
5007
5096
  if (resolvedTabs.some((tab) => tab.value === activeTab && !tab.disabled)) return;
5008
5097
  onTabChange(fallbackTab.value);
5009
5098
  }, [activeTab, onTabChange, resolvedTabs]);
5010
- const items = useMemo8(() => {
5099
+ const items = useMemo9(() => {
5011
5100
  return resolvedTabs.map((tab) => {
5012
5101
  const isActive = tab.value === activeTab;
5013
5102
  return {
@@ -5019,7 +5108,7 @@ var EventListTabs = ({
5019
5108
  };
5020
5109
  });
5021
5110
  }, [activeTab, resolvedTabs]);
5022
- return /* @__PURE__ */ jsx11(
5111
+ return /* @__PURE__ */ jsx12(
5023
5112
  Tabs,
5024
5113
  {
5025
5114
  ariaLabel,
@@ -5036,7 +5125,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
5036
5125
  const headerRef = useRef6(null);
5037
5126
  const titleRef = useRef6(null);
5038
5127
  const requiredTabsWidthRef = useRef6(0);
5039
- const [shouldUseSelectOverflow, setShouldUseSelectOverflow] = useState5(false);
5128
+ const [shouldUseSelectOverflow, setShouldUseSelectOverflow] = useState6(false);
5040
5129
  const updateTabsOverflowBehavior = useCallback3(() => {
5041
5130
  var _a;
5042
5131
  if (typeof window === "undefined") return;
@@ -5074,10 +5163,10 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
5074
5163
  if (requiredTabsWidthRef.current <= 0) return;
5075
5164
  setShouldUseSelectOverflow(requiredTabsWidthRef.current > availableTabsWidth);
5076
5165
  }, [options == null ? void 0 : options.minTabsInlineWidthForSelect, options == null ? void 0 : options.preferSelectOnOverflow]);
5077
- useEffect5(() => {
5166
+ useEffect6(() => {
5078
5167
  updateTabsOverflowBehavior();
5079
5168
  }, [recomputeOn, updateTabsOverflowBehavior]);
5080
- useEffect5(() => {
5169
+ useEffect6(() => {
5081
5170
  if (typeof window === "undefined") return;
5082
5171
  const handleResize = () => {
5083
5172
  updateTabsOverflowBehavior();
@@ -5087,7 +5176,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
5087
5176
  window.removeEventListener("resize", handleResize);
5088
5177
  };
5089
5178
  }, [updateTabsOverflowBehavior]);
5090
- useEffect5(() => {
5179
+ useEffect6(() => {
5091
5180
  if (typeof ResizeObserver === "undefined") return;
5092
5181
  const headerElement = headerRef.current;
5093
5182
  const titleElement = titleRef.current;
@@ -5105,7 +5194,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
5105
5194
  };
5106
5195
 
5107
5196
  // src/events/list/index.tsx
5108
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
5197
+ import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
5109
5198
  var SORT_ICON_BY_VALUE = {
5110
5199
  volume24hr: "sort-volume-24hr",
5111
5200
  topArbitrage: "sort-top-arbitrage",
@@ -5143,45 +5232,45 @@ var EventList = ({
5143
5232
  stateRef
5144
5233
  }) => {
5145
5234
  var _a, _b, _c, _d, _e;
5146
- const labels = useLabels8();
5235
+ const labels = useLabels9();
5147
5236
  const { disabledVenues } = useAppConfig2();
5148
5237
  const {
5149
- features: { enableVenueEventDiscoveryFilters }
5150
- } = useSdkUiConfig4();
5238
+ features: { enableVenueEventDiscoveryFilters, showSportsMarkets }
5239
+ } = useSdkUiConfig5();
5151
5240
  const isDiscoveryFiltersEnabled = enableVenueEventDiscoveryFilters && !search;
5152
5241
  const resolvedTabs = useEventListTabs();
5153
- const visibleVenues = useMemo9(
5242
+ const visibleVenues = useMemo10(
5154
5243
  () => disabledVenues.length === 0 ? void 0 : getVisibleVenueIdsByConfig(VENUES, disabledVenues),
5155
5244
  [disabledVenues]
5156
5245
  );
5157
- const [activeTabValue, setActiveTabValue] = useState6(
5246
+ const [activeTabValue, setActiveTabValue] = useState7(
5158
5247
  (_b = initialVenueTab != null ? initialVenueTab : (_a = resolvedTabs[0]) == null ? void 0 : _a.value) != null ? _b : "matched"
5159
5248
  );
5160
- const [selectedSort, setSelectedSort] = useState6("volume24hr");
5161
- const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] = useState6(false);
5162
- const [categoryPath, setCategoryPath] = useState6([]);
5163
- const [collapsedCategoryIds, setCollapsedCategoryIds] = useState6(() => /* @__PURE__ */ new Set());
5164
- const sortItems = useMemo9(() => {
5249
+ const [selectedSort, setSelectedSort] = useState7("volume24hr");
5250
+ const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] = useState7(false);
5251
+ const [categoryPath, setCategoryPath] = useState7([]);
5252
+ const [collapsedCategoryIds, setCollapsedCategoryIds] = useState7(() => /* @__PURE__ */ new Set());
5253
+ const sortItems = useMemo10(() => {
5165
5254
  return [
5166
5255
  {
5167
5256
  value: "volume24hr",
5168
5257
  label: labels.eventList.sortBy24hVolume,
5169
- icon: /* @__PURE__ */ jsx12(Icon, { name: SORT_ICON_BY_VALUE.volume24hr, size: "small", color: "currentColor" })
5258
+ icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.volume24hr, size: "small", color: "currentColor" })
5170
5259
  },
5171
5260
  {
5172
5261
  value: "topArbitrage",
5173
5262
  label: labels.eventList.sortByTopArbitrage,
5174
- icon: /* @__PURE__ */ jsx12(Icon, { name: SORT_ICON_BY_VALUE.topArbitrage, size: "small", color: "currentColor" })
5263
+ icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.topArbitrage, size: "small", color: "currentColor" })
5175
5264
  },
5176
5265
  {
5177
5266
  value: "volume",
5178
5267
  label: labels.eventList.sortByTotalVolume,
5179
- icon: /* @__PURE__ */ jsx12(Icon, { name: SORT_ICON_BY_VALUE.volume, size: "small", color: "currentColor" })
5268
+ icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.volume, size: "small", color: "currentColor" })
5180
5269
  },
5181
5270
  {
5182
5271
  value: "endDate",
5183
5272
  label: labels.eventList.sortByEndingSoon,
5184
- icon: /* @__PURE__ */ jsx12(Icon, { name: SORT_ICON_BY_VALUE.endDate, size: "small", color: "currentColor" })
5273
+ icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.endDate, size: "small", color: "currentColor" })
5185
5274
  }
5186
5275
  ];
5187
5276
  }, [
@@ -5191,7 +5280,7 @@ var EventList = ({
5191
5280
  labels.eventList.sortByTotalVolume
5192
5281
  ]);
5193
5282
  const baseCategoryId = (_c = categoryIds == null ? void 0 : categoryIds[0]) != null ? _c : null;
5194
- useEffect6(() => {
5283
+ useEffect7(() => {
5195
5284
  if (!isDiscoveryFiltersEnabled) return;
5196
5285
  setCategoryPath([]);
5197
5286
  setCollapsedCategoryIds(/* @__PURE__ */ new Set());
@@ -5201,10 +5290,10 @@ var EventList = ({
5201
5290
  enabled: isDiscoveryFiltersEnabled,
5202
5291
  limit: 100
5203
5292
  });
5204
- const sortedTopLevelCategories = useMemo9(() => {
5293
+ const sortedTopLevelCategories = useMemo10(() => {
5205
5294
  return sortCategoriesForNavigation(topLevelCategories);
5206
5295
  }, [topLevelCategories]);
5207
- const baseCategoryChildPrefetchIds = useMemo9(() => {
5296
+ const baseCategoryChildPrefetchIds = useMemo10(() => {
5208
5297
  return Array.from(
5209
5298
  /* @__PURE__ */ new Set([
5210
5299
  ...sortedTopLevelCategories.map((category) => category.id),
@@ -5218,7 +5307,7 @@ var EventList = ({
5218
5307
  parentIds: baseCategoryChildPrefetchIds,
5219
5308
  limit: 100
5220
5309
  });
5221
- const visibleChildPrefetchIds = useMemo9(() => {
5310
+ const visibleChildPrefetchIds = useMemo10(() => {
5222
5311
  var _a2, _b2;
5223
5312
  const ids = /* @__PURE__ */ new Set();
5224
5313
  if (baseCategoryId) {
@@ -5239,7 +5328,7 @@ var EventList = ({
5239
5328
  parentIds: visibleChildPrefetchIds,
5240
5329
  limit: 100
5241
5330
  });
5242
- const visibleGrandchildPrefetchIds = useMemo9(() => {
5331
+ const visibleGrandchildPrefetchIds = useMemo10(() => {
5243
5332
  var _a2;
5244
5333
  const ids = /* @__PURE__ */ new Set();
5245
5334
  for (const expandedCategory of categoryPath) {
@@ -5255,7 +5344,7 @@ var EventList = ({
5255
5344
  parentIds: visibleGrandchildPrefetchIds,
5256
5345
  limit: 100
5257
5346
  });
5258
- const childrenByParentId = useMemo9(() => {
5347
+ const childrenByParentId = useMemo10(() => {
5259
5348
  return new Map([
5260
5349
  ...baseChildrenByParentId,
5261
5350
  ...visibleChildrenByParentId,
@@ -5263,33 +5352,33 @@ var EventList = ({
5263
5352
  ]);
5264
5353
  }, [baseChildrenByParentId, visibleChildrenByParentId, visibleGrandchildrenByParentId]);
5265
5354
  const shouldRenderSubcategoryFilters = isDiscoveryFiltersEnabled && baseCategoryId !== null && (((_e = (_d = childrenByParentId.get(baseCategoryId)) == null ? void 0 : _d.length) != null ? _e : 0) > 0 || categoryPath.length > 0);
5266
- const baseCategoryEventCount = useMemo9(() => {
5355
+ const baseCategoryEventCount = useMemo10(() => {
5267
5356
  var _a2, _b2;
5268
5357
  return (_b2 = (_a2 = sortedTopLevelCategories.find((c) => c.id === baseCategoryId)) == null ? void 0 : _a2.eventCount) != null ? _b2 : 0;
5269
5358
  }, [baseCategoryId, sortedTopLevelCategories]);
5270
- const resolvedCategoryIds = useMemo9(() => {
5359
+ const resolvedCategoryIds = useMemo10(() => {
5271
5360
  if (!isDiscoveryFiltersEnabled) return categoryIds;
5272
5361
  return resolveCategoryIdsFromPath(categoryPath, baseCategoryId ? [baseCategoryId] : void 0);
5273
5362
  }, [baseCategoryId, categoryIds, categoryPath, isDiscoveryFiltersEnabled]);
5274
- const sortQueryParams = useMemo9(() => {
5363
+ const sortQueryParams = useMemo10(() => {
5275
5364
  return resolveSortQueryParams(selectedSort);
5276
5365
  }, [selectedSort]);
5277
- const activeTab = useMemo9(() => {
5366
+ const activeTab = useMemo10(() => {
5278
5367
  return resolvedTabs.find((tab) => tab.value === activeTabValue);
5279
5368
  }, [activeTabValue, resolvedTabs]);
5280
- const venues = useMemo9(() => {
5369
+ const venues = useMemo10(() => {
5281
5370
  return resolveTabVenus(activeTab, visibleVenues);
5282
5371
  }, [activeTab, visibleVenues]);
5283
- const matchStatus = useMemo9(() => {
5372
+ const matchStatus = useMemo10(() => {
5284
5373
  return activeTabValue === "matched" ? activeTab == null ? void 0 : activeTab.matchStatus : void 0;
5285
5374
  }, [activeTabValue, activeTab]);
5286
- const resolvedMaxVisibleItems = useMemo9(() => {
5375
+ const resolvedMaxVisibleItems = useMemo10(() => {
5287
5376
  if (!Number.isFinite(maxVisibleItems)) return void 0;
5288
5377
  return Math.max(1, Math.floor(maxVisibleItems));
5289
5378
  }, [maxVisibleItems]);
5290
5379
  const requestLimit = resolvedMaxVisibleItems != null ? resolvedMaxVisibleItems : limit;
5291
5380
  const shouldPaginate = resolvedMaxVisibleItems == null;
5292
- const endDateFrom = useMemo9(() => {
5381
+ const endDateFrom = useMemo10(() => {
5293
5382
  if (search) return void 0;
5294
5383
  const BUCKET_MINUTES = 5;
5295
5384
  const bucket = /* @__PURE__ */ new Date();
@@ -5316,23 +5405,27 @@ var EventList = ({
5316
5405
  sortBy: sortQueryParams.sortBy,
5317
5406
  sortDir: sortQueryParams.sortDir,
5318
5407
  endDateFrom,
5408
+ // Fold same-venue companion events into one tile per game when the sports
5409
+ // markets experience is enabled (the sports event-detail view loads the
5410
+ // folded companions via aggKey). Gated on the same flag as that view.
5411
+ grouped: showSportsMarkets,
5319
5412
  initialPages: initialLoadedPageCount
5320
5413
  });
5321
- useEffect6(() => {
5414
+ useEffect7(() => {
5322
5415
  if (stateRef) {
5323
5416
  stateRef.current = { venueTab: activeTabValue, loadedPageCount };
5324
5417
  }
5325
5418
  }, [stateRef, activeTabValue, loadedPageCount]);
5326
- const filteredEvents = useMemo9(() => {
5419
+ const filteredEvents = useMemo10(() => {
5327
5420
  return filterEventsByTabValue(events, activeTabValue);
5328
5421
  }, [events, activeTabValue]);
5329
- const groupedEvents = useMemo9(() => {
5422
+ const groupedEvents = useMemo10(() => {
5330
5423
  return splitEventsByLifecycle(filteredEvents);
5331
5424
  }, [filteredEvents]);
5332
- const orderedEvents = useMemo9(() => {
5425
+ const orderedEvents = useMemo10(() => {
5333
5426
  return groupedEvents.open;
5334
5427
  }, [groupedEvents.open]);
5335
- const tileEvents = useMemo9(() => {
5428
+ const tileEvents = useMemo10(() => {
5336
5429
  const normalizedEvents = orderedEvents.map((event) => mapEventToEventListItemEvent(event)).filter((event) => event != null);
5337
5430
  if (resolvedMaxVisibleItems == null) return normalizedEvents;
5338
5431
  return normalizedEvents.slice(0, resolvedMaxVisibleItems);
@@ -5341,7 +5434,7 @@ var EventList = ({
5341
5434
  const shouldRenderEmptyState = !isLoading && !isError && tileEvents.length === 0;
5342
5435
  const shouldRenderPaginationLoadingItems = shouldPaginate && hasNextPage;
5343
5436
  const loadMoreRef = useRef7(null);
5344
- useEffect6(() => {
5437
+ useEffect7(() => {
5345
5438
  if (!shouldPaginate) return;
5346
5439
  if (!hasNextPage) return;
5347
5440
  if (typeof IntersectionObserver === "undefined") return;
@@ -5392,7 +5485,7 @@ var EventList = ({
5392
5485
  onCategoryRootChange == null ? void 0 : onCategoryRootChange(baseCategoryId != null ? baseCategoryId : void 0);
5393
5486
  };
5394
5487
  if (shouldRenderLoadingState) {
5395
- return /* @__PURE__ */ jsx12(
5488
+ return /* @__PURE__ */ jsx13(
5396
5489
  Skeleton,
5397
5490
  {
5398
5491
  view: "event-list",
@@ -5401,8 +5494,8 @@ var EventList = ({
5401
5494
  }
5402
5495
  );
5403
5496
  }
5404
- return /* @__PURE__ */ jsxs9("section", { className: "agg-event-list flex w-full flex-col gap-2 md:gap-5 t", children: [
5405
- /* @__PURE__ */ jsxs9(
5497
+ return /* @__PURE__ */ jsxs10("section", { className: "agg-event-list flex w-full flex-col gap-2 md:gap-5 t", children: [
5498
+ /* @__PURE__ */ jsxs10(
5406
5499
  "header",
5407
5500
  {
5408
5501
  className: cn(
@@ -5411,9 +5504,9 @@ var EventList = ({
5411
5504
  "gap-2 sm:flex-row sm:items-center sm:gap-4"
5412
5505
  ),
5413
5506
  children: [
5414
- /* @__PURE__ */ jsx12("div", { className: "agg-event-list-title min-w-32", children: /* @__PURE__ */ jsx12(Typography, { as: "h2", variant: "title", className: "truncate first-letter:uppercase", children: title }) }),
5415
- /* @__PURE__ */ jsxs9("div", { className: "hidden min-w-0 max-w-full items-center gap-3 md:flex", children: [
5416
- /* @__PURE__ */ jsx12(
5507
+ /* @__PURE__ */ jsx13("div", { className: "agg-event-list-title min-w-32", children: /* @__PURE__ */ jsx13(Typography, { as: "h2", variant: "title", className: "truncate first-letter:uppercase", children: title }) }),
5508
+ /* @__PURE__ */ jsxs10("div", { className: "hidden min-w-0 max-w-full items-center gap-3 md:flex", children: [
5509
+ /* @__PURE__ */ jsx13(
5417
5510
  EventListTabs,
5418
5511
  {
5419
5512
  ariaLabel: labels.eventList.tabsAria(title),
@@ -5423,7 +5516,7 @@ var EventList = ({
5423
5516
  overflowBehavior: "scroll"
5424
5517
  }
5425
5518
  ),
5426
- /* @__PURE__ */ jsx12(
5519
+ /* @__PURE__ */ jsx13(
5427
5520
  Select,
5428
5521
  {
5429
5522
  ariaLabel: labels.eventList.sortByLabel,
@@ -5439,8 +5532,8 @@ var EventList = ({
5439
5532
  ]
5440
5533
  }
5441
5534
  ),
5442
- /* @__PURE__ */ jsxs9("div", { className: "flex w-full gap-2 md:hidden mb-3", children: [
5443
- /* @__PURE__ */ jsx12(
5535
+ /* @__PURE__ */ jsxs10("div", { className: "flex w-full gap-2 md:hidden mb-3", children: [
5536
+ /* @__PURE__ */ jsx13(
5444
5537
  EventListTabs,
5445
5538
  {
5446
5539
  ariaLabel: labels.eventList.tabsAria(title),
@@ -5450,7 +5543,7 @@ var EventList = ({
5450
5543
  overflowBehavior: "select"
5451
5544
  }
5452
5545
  ),
5453
- /* @__PURE__ */ jsx12(
5546
+ /* @__PURE__ */ jsx13(
5454
5547
  Select,
5455
5548
  {
5456
5549
  ariaLabel: labels.eventList.sortByLabel,
@@ -5461,23 +5554,23 @@ var EventList = ({
5461
5554
  contentClassName: "rounded-[12px] py-2 shadow-[0_8px_16px_rgba(0,0,0,0.1)]"
5462
5555
  }
5463
5556
  ),
5464
- shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx12(
5557
+ shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13(
5465
5558
  "button",
5466
5559
  {
5467
5560
  type: "button",
5468
5561
  className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-[8px] border-2 border-agg-primary bg-agg-secondary text-agg-foreground cursor-pointer",
5469
5562
  "aria-label": labels.eventList.subcategoriesOpenAria,
5470
5563
  onClick: () => setIsSubcategoriesModalOpen(true),
5471
- children: /* @__PURE__ */ jsx12(Icon, { name: "apps", size: "small", color: "currentColor" })
5564
+ children: /* @__PURE__ */ jsx13(Icon, { name: "apps", size: "small", color: "currentColor" })
5472
5565
  }
5473
5566
  ) : null
5474
5567
  ] }),
5475
- /* @__PURE__ */ jsxs9(
5568
+ /* @__PURE__ */ jsxs10(
5476
5569
  "div",
5477
5570
  {
5478
5571
  className: cn("flex w-full gap-6", shouldRenderSubcategoryFilters ? "md:items-start" : ""),
5479
5572
  children: [
5480
- shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx12("aside", { className: "hidden w-[200px] shrink-0 md:block self-start sticky top-4", children: /* @__PURE__ */ jsx12("div", { className: "agg-sidebar max-h-[calc(100vh-19rem)] overflow-y-auto rounded-[8px] border border-agg-separator bg-agg-secondary p-2", children: /* @__PURE__ */ jsx12(
5573
+ shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13("aside", { className: "hidden w-[200px] shrink-0 md:block self-start sticky top-4", children: /* @__PURE__ */ jsx13("div", { className: "agg-sidebar max-h-[calc(100vh-19rem)] overflow-y-auto rounded-[8px] border border-agg-separator bg-agg-secondary p-2", children: /* @__PURE__ */ jsx13(
5481
5574
  CategorySidebar,
5482
5575
  {
5483
5576
  baseCategoryId,
@@ -5490,7 +5583,7 @@ var EventList = ({
5490
5583
  onToggleCategory: handleToggleSubcategory
5491
5584
  }
5492
5585
  ) }) }) : null,
5493
- /* @__PURE__ */ jsxs9(
5586
+ /* @__PURE__ */ jsxs10(
5494
5587
  "div",
5495
5588
  {
5496
5589
  className: cn(
@@ -5501,7 +5594,7 @@ var EventList = ({
5501
5594
  gridClassName
5502
5595
  ),
5503
5596
  children: [
5504
- tileEvents.map((event) => /* @__PURE__ */ jsx12(
5597
+ tileEvents.map((event) => /* @__PURE__ */ jsx13(
5505
5598
  EventListItem,
5506
5599
  {
5507
5600
  event,
@@ -5516,7 +5609,7 @@ var EventList = ({
5516
5609
  },
5517
5610
  event.id
5518
5611
  )),
5519
- shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsx12(
5612
+ shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsx13(
5520
5613
  EventListItem,
5521
5614
  {
5522
5615
  isLoading: true,
@@ -5526,20 +5619,20 @@ var EventList = ({
5526
5619
  },
5527
5620
  `loading-${index}`
5528
5621
  )) : null,
5529
- shouldRenderEmptyState ? /* @__PURE__ */ jsx12("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx12(
5622
+ shouldRenderEmptyState ? /* @__PURE__ */ jsx13("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx13(
5530
5623
  StateMessage,
5531
5624
  {
5532
5625
  title: labels.eventList.emptyTitle,
5533
5626
  description: labels.eventList.emptyDescription,
5534
- icon: /* @__PURE__ */ jsx12(Icon, { name: "search-empty" })
5627
+ icon: /* @__PURE__ */ jsx13(Icon, { name: "search-empty" })
5535
5628
  }
5536
5629
  ) }) : null,
5537
- isError ? /* @__PURE__ */ jsx12("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx12(
5630
+ isError ? /* @__PURE__ */ jsx13("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx13(
5538
5631
  StateMessage,
5539
5632
  {
5540
5633
  title: labels.eventList.errorTitle,
5541
5634
  description: labels.eventList.errorDescription,
5542
- icon: /* @__PURE__ */ jsx12(Icon, { name: "warning" })
5635
+ icon: /* @__PURE__ */ jsx13(Icon, { name: "warning" })
5543
5636
  }
5544
5637
  ) }) : null
5545
5638
  ]
@@ -5548,7 +5641,7 @@ var EventList = ({
5548
5641
  ]
5549
5642
  }
5550
5643
  ),
5551
- shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx12(Modal, { open: isSubcategoriesModalOpen, onOpenChange: setIsSubcategoriesModalOpen, children: /* @__PURE__ */ jsx12(
5644
+ shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13(Modal, { open: isSubcategoriesModalOpen, onOpenChange: setIsSubcategoriesModalOpen, children: /* @__PURE__ */ jsx13(
5552
5645
  Modal.Container,
5553
5646
  {
5554
5647
  classNames: {
@@ -5557,20 +5650,20 @@ var EventList = ({
5557
5650
  content: "items-end p-0 pointer-events-none",
5558
5651
  container: "w-full max-w-none border-0 bg-transparent shadow-none"
5559
5652
  },
5560
- children: /* @__PURE__ */ jsxs9("div", { className: "pointer-events-auto w-full rounded-t-[12px] border border-agg-separator bg-agg-secondary", children: [
5561
- /* @__PURE__ */ jsx12("div", { className: "flex justify-center pb-1 pt-3", "aria-hidden": "true", children: /* @__PURE__ */ jsx12("div", { className: "h-1 w-10 rounded-full bg-agg-muted-foreground/30" }) }),
5562
- /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-between px-4 pb-2 pt-1", children: [
5563
- /* @__PURE__ */ jsx12(Dialog.Title, { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: labels.eventList.subcategoriesLabel }),
5564
- /* @__PURE__ */ jsx12(
5653
+ children: /* @__PURE__ */ jsxs10("div", { className: "pointer-events-auto w-full rounded-t-[12px] border border-agg-separator bg-agg-secondary", children: [
5654
+ /* @__PURE__ */ jsx13("div", { className: "flex justify-center pb-1 pt-3", "aria-hidden": "true", children: /* @__PURE__ */ jsx13("div", { className: "h-1 w-10 rounded-full bg-agg-muted-foreground/30" }) }),
5655
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between px-4 pb-2 pt-1", children: [
5656
+ /* @__PURE__ */ jsx13(Dialog.Title, { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: labels.eventList.subcategoriesLabel }),
5657
+ /* @__PURE__ */ jsx13(
5565
5658
  Dialog.Close,
5566
5659
  {
5567
5660
  className: "flex cursor-pointer items-center justify-center rounded-full p-1 text-agg-muted-foreground hover:bg-agg-secondary-hover",
5568
5661
  "aria-label": labels.common.close,
5569
- children: /* @__PURE__ */ jsx12(CloseIcon, { className: "h-5 w-5" })
5662
+ children: /* @__PURE__ */ jsx13(CloseIcon, { className: "h-5 w-5" })
5570
5663
  }
5571
5664
  )
5572
5665
  ] }),
5573
- /* @__PURE__ */ jsx12("div", { className: "flex flex-col gap-1 px-4 pb-4", children: /* @__PURE__ */ jsx12(
5666
+ /* @__PURE__ */ jsx13("div", { className: "flex flex-col gap-1 px-4 pb-4", children: /* @__PURE__ */ jsx13(
5574
5667
  CategorySidebar,
5575
5668
  {
5576
5669
  baseCategoryId,
@@ -5586,7 +5679,7 @@ var EventList = ({
5586
5679
  ] })
5587
5680
  }
5588
5681
  ) }) : null,
5589
- shouldPaginate && hasNextPage ? /* @__PURE__ */ jsx12("div", { ref: loadMoreRef, className: "agg-event-list-sentinel h-px w-full", "aria-hidden": true }) : null
5682
+ shouldPaginate && hasNextPage ? /* @__PURE__ */ jsx13("div", { ref: loadMoreRef, className: "agg-event-list-sentinel h-px w-full", "aria-hidden": true }) : null
5590
5683
  ] });
5591
5684
  };
5592
5685
  EventList.displayName = "EventList";
@@ -5599,6 +5692,7 @@ export {
5599
5692
  collectEligibleVenueOutcomeIds,
5600
5693
  mergeVenueOutcomeOrderbooks,
5601
5694
  SettlementSummary,
5695
+ resolveEventDetailsSyncKey,
5602
5696
  EventListItemDetails,
5603
5697
  orderbookRowLimitDefault,
5604
5698
  useCenterOrderbookSpread,