@agg-market/ui 3.0.1 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/chart.js +18 -5
  2. package/dist/chart.mjs +2 -2
  3. package/dist/{chunk-422MCIXV.mjs → chunk-34IRJYSU.mjs} +15 -11
  4. package/dist/{chunk-KUWTY4EM.mjs → chunk-3W7NBJLU.mjs} +1 -1
  5. package/dist/chunk-4343LYSH.mjs +45 -0
  6. package/dist/{chunk-RKCVOKE3.mjs → chunk-CTYJVVHJ.mjs} +26 -3
  7. package/dist/{chunk-MVJNQN7P.mjs → chunk-DHBHKIJR.mjs} +153 -94
  8. package/dist/{chunk-KRQFVMJE.mjs → chunk-GFBF2J3Y.mjs} +18 -25
  9. package/dist/{chunk-ZJJA4I3I.mjs → chunk-KIYMVWL4.mjs} +1 -1
  10. package/dist/{chunk-CTVMT3VL.mjs → chunk-LCZKSITC.mjs} +2 -2
  11. package/dist/chunk-M4RJHRFT.mjs +445 -0
  12. package/dist/{chunk-KSCSYCEF.mjs → chunk-MJHKBCXQ.mjs} +1 -1
  13. package/dist/{chunk-GHB3GOCW.mjs → chunk-MKVGQ7AS.mjs} +17 -21
  14. package/dist/{chunk-BN5VVHNV.mjs → chunk-OJVTGNIF.mjs} +17 -4
  15. package/dist/{chunk-FF3QYU26.mjs → chunk-Q6DGDBPV.mjs} +87 -26
  16. package/dist/{chunk-DCORNTCY.mjs → chunk-QDMHLRDY.mjs} +31 -62
  17. package/dist/{chunk-RGHA4PZH.mjs → chunk-T7TATHPD.mjs} +34 -10
  18. package/dist/chunk-XUCS575S.mjs +65 -0
  19. package/dist/event-list-item-details.js +1836 -407
  20. package/dist/event-list-item-details.mjs +10 -6
  21. package/dist/event-list-item.js +448 -279
  22. package/dist/event-list-item.mjs +6 -3
  23. package/dist/event-list.js +787 -627
  24. package/dist/event-list.mjs +7 -4
  25. package/dist/event-market-page.d.mts +1 -1
  26. package/dist/event-market-page.d.ts +1 -1
  27. package/dist/event-market-page.js +2684 -2572
  28. package/dist/event-market-page.mjs +12 -11
  29. package/dist/home-page.js +804 -644
  30. package/dist/home-page.mjs +8 -5
  31. package/dist/index.d.mts +3 -2
  32. package/dist/index.d.ts +3 -2
  33. package/dist/index.js +1344 -1177
  34. package/dist/index.mjs +23 -18
  35. package/dist/market-details.js +919 -757
  36. package/dist/market-details.mjs +9 -7
  37. package/dist/place-order.d.mts +1 -1
  38. package/dist/place-order.d.ts +1 -1
  39. package/dist/place-order.js +151 -189
  40. package/dist/place-order.mjs +2 -2
  41. package/dist/search.js +3 -0
  42. package/dist/search.mjs +2 -1
  43. package/dist/settlement.d.mts +1 -1
  44. package/dist/settlement.d.ts +1 -1
  45. package/dist/settlement.js +151 -189
  46. package/dist/settlement.mjs +2 -2
  47. package/dist/skeleton.js +151 -189
  48. package/dist/skeleton.mjs +1 -1
  49. package/dist/state-message.d.mts +16 -0
  50. package/dist/state-message.d.ts +16 -0
  51. package/dist/state-message.js +1629 -0
  52. package/dist/state-message.mjs +14 -0
  53. package/dist/styles.css +1 -1
  54. package/dist/switch-button.js +2 -2
  55. package/dist/switch-button.mjs +1 -1
  56. package/dist/tailwind.css +1 -1
  57. package/package.json +14 -2
  58. package/dist/chunk-V52WSZHQ.mjs +0 -482
  59. package/dist/{types-DkGlbmXq.d.mts → types-BImwqY4o.d.mts} +4 -4
  60. package/dist/{types-DkGlbmXq.d.ts → types-BImwqY4o.d.ts} +4 -4
@@ -1,31 +1,33 @@
1
+ import {
2
+ Tabs
3
+ } from "./chunk-S3H63TQ5.mjs";
1
4
  import {
2
5
  buildPriceHistoryGroups,
3
6
  getTimeWindowByRange,
4
7
  resolveOutcomeLabels,
5
8
  resolveOutcomesByVenue,
6
9
  resolveSeriesColor
7
- } from "./chunk-422MCIXV.mjs";
8
- import {
9
- Tabs
10
- } from "./chunk-S3H63TQ5.mjs";
10
+ } from "./chunk-34IRJYSU.mjs";
11
11
  import {
12
12
  getVenueSummary,
13
+ isErrorWithStatus,
13
14
  normalizeProbability,
14
15
  resolveTileImage,
15
16
  resolveTileTitle,
16
17
  selectPrimaryVenueMarket
17
- } from "./chunk-GHB3GOCW.mjs";
18
+ } from "./chunk-MKVGQ7AS.mjs";
18
19
  import {
20
+ StateMessage
21
+ } from "./chunk-XUCS575S.mjs";
22
+ import {
23
+ MarketDetailsOderbookSkeleton,
19
24
  Skeleton,
20
25
  eventListItemDetailsTimeRanges,
21
26
  getMarketDetailsTabs,
22
27
  marketDetailsBaseCardClassName,
23
28
  marketDetailsDefaultIsOpened,
24
29
  orderBookRowLimitDefault
25
- } from "./chunk-V52WSZHQ.mjs";
26
- import {
27
- LoadingIcon
28
- } from "./chunk-IGPNIM2B.mjs";
30
+ } from "./chunk-M4RJHRFT.mjs";
29
31
  import {
30
32
  VenueLogo
31
33
  } from "./chunk-PORVP72S.mjs";
@@ -37,10 +39,10 @@ import {
37
39
  } from "./chunk-FO2QCB4Z.mjs";
38
40
  import {
39
41
  LineChart
40
- } from "./chunk-BN5VVHNV.mjs";
42
+ } from "./chunk-OJVTGNIF.mjs";
41
43
  import {
42
44
  SwitchButton
43
- } from "./chunk-CTVMT3VL.mjs";
45
+ } from "./chunk-LCZKSITC.mjs";
44
46
  import {
45
47
  __spreadProps,
46
48
  __spreadValues,
@@ -88,12 +90,11 @@ var resolveInitialTab = (defaultTab) => {
88
90
  return "order-book";
89
91
  };
90
92
  var resolveMarket = (event, marketId) => {
91
- var _a;
92
93
  if (!event.markets.length)
93
94
  return void 0;
94
95
  if (!marketId)
95
96
  return event.markets[0];
96
- return (_a = event.markets.find((market) => market.id === marketId)) != null ? _a : event.markets[0];
97
+ return event.markets.find((market) => market.id === marketId);
97
98
  };
98
99
  var resolveDisplayOutcomeLabels = (labels) => {
99
100
  if (!hasBinaryLabels(labels))
@@ -182,8 +183,7 @@ var resolveSubtitle = ({
182
183
  };
183
184
  var resolveOrderBookRows = ({
184
185
  data,
185
- side,
186
- depth
186
+ side
187
187
  }) => {
188
188
  if (!(data == null ? void 0 : data.length))
189
189
  return [];
@@ -214,9 +214,8 @@ var resolveOrderBookRows = ({
214
214
  return left.price - right.price;
215
215
  return right.price - left.price;
216
216
  });
217
- const limitedRows = sortedRows.slice(0, Math.max(1, depth));
218
- const maxTotal = limitedRows.reduce((currentMax, row) => Math.max(currentMax, row.total), 0) || 1;
219
- return limitedRows.map((row) => __spreadProps(__spreadValues({}, row), {
217
+ const maxTotal = sortedRows.reduce((currentMax, row) => Math.max(currentMax, row.total), 0) || 1;
218
+ return sortedRows.map((row) => __spreadProps(__spreadValues({}, row), {
220
219
  barScale: row.total / maxTotal
221
220
  }));
222
221
  };
@@ -325,48 +324,78 @@ var MarketDetailsUnavailableState = ({
325
324
  }
326
325
  );
327
326
  };
327
+ var MarketDetailsNotFoundState = ({
328
+ ariaLabel,
329
+ classNames
330
+ }) => {
331
+ const labels = useLabels();
332
+ return /* @__PURE__ */ jsx(Card, { className: cn(marketDetailsBaseCardClassName, "p-0", classNames == null ? void 0 : classNames.root), children: /* @__PURE__ */ jsx(
333
+ StateMessage,
334
+ {
335
+ ariaLabel: ariaLabel != null ? ariaLabel : labels.marketDetails.notFoundAria,
336
+ title: labels.marketDetails.notFoundTitle,
337
+ description: labels.marketDetails.notFoundDescription,
338
+ className: "min-h-[280px] md:min-h-[320px]"
339
+ }
340
+ ) });
341
+ };
328
342
  var OrderBookRows = ({
329
343
  rows,
330
344
  title,
331
345
  formatNumber,
332
- formatCurrency
346
+ formatCurrency,
347
+ visibleRows
333
348
  }) => {
334
349
  const labels = useLabels();
335
350
  const isAsks = title === labels.marketDetails.asks;
336
351
  const priceClassName = isAsks ? "text-agg-orderbook-ask" : "text-agg-orderbook-bid";
337
352
  const barClassName = isAsks ? "bg-agg-orderbook-ask/10" : "bg-agg-orderbook-bid/10";
353
+ const maxVisibleRows = Math.max(1, visibleRows);
354
+ const orderBookRowHeightPx = 28;
355
+ const orderBookDividerHeightPx = 1;
356
+ const orderBookRowGapPx = 8;
357
+ const orderBookVisibleHeightPx = maxVisibleRows * orderBookRowHeightPx + Math.max(0, maxVisibleRows - 1) * (orderBookDividerHeightPx + orderBookRowGapPx);
338
358
  return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
339
359
  /* @__PURE__ */ jsx(Typography, { variant: "caption-caps", children: title }),
340
- rows.map((row, index) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
341
- /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[52px_1fr_1fr_52px] items-center gap-2 md:grid-cols-[88px_1fr_1fr_minmax(120px,220px)] md:gap-6", children: [
342
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 md:gap-3", children: [
343
- /* @__PURE__ */ jsx(VenueLogo, { venue: row.venue, size: "small" }),
344
- /* @__PURE__ */ jsx(
345
- "span",
346
- {
347
- className: cn(
348
- "text-agg-xs font-agg-bold leading-agg-4 md:text-agg-sm md:leading-agg-5",
349
- priceClassName
350
- ),
351
- children: formatProbabilityCents(row.price)
352
- }
353
- )
354
- ] }),
355
- /* @__PURE__ */ jsx("span", { className: "truncate text-agg-xs leading-agg-4 text-center text-agg-foreground md:text-agg-sm md:leading-agg-5", children: formatNumber(row.size) }),
356
- /* @__PURE__ */ jsx("span", { className: "truncate text-agg-xs leading-agg-4 text-center text-agg-foreground md:text-agg-sm md:leading-agg-5", children: formatCurrency(row.total) }),
357
- /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(
358
- "div",
359
- {
360
- "aria-hidden": "true",
361
- className: cn("h-2 rounded-agg-full", barClassName),
362
- style: {
363
- width: `${Math.max(20, Math.round(row.barScale * 100))}%`
364
- }
365
- }
366
- ) })
367
- ] }),
368
- index < rows.length - 1 ? /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-agg-separator" }) : null
369
- ] }, row.id))
360
+ /* @__PURE__ */ jsx(
361
+ "div",
362
+ {
363
+ className: "overflow-y-auto pr-1 flex flex-col gap-2",
364
+ style: { maxHeight: `${orderBookVisibleHeightPx}px` },
365
+ role: "region",
366
+ "aria-label": `${title} order book levels`,
367
+ children: rows.map((row, index) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
368
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[52px_1fr_1fr_52px] items-center gap-2 md:grid-cols-[88px_1fr_1fr_minmax(120px,220px)] md:gap-6", children: [
369
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 md:gap-3", children: [
370
+ /* @__PURE__ */ jsx(VenueLogo, { venue: row.venue, size: "small" }),
371
+ /* @__PURE__ */ jsx(
372
+ "span",
373
+ {
374
+ className: cn(
375
+ "text-agg-xs font-agg-bold leading-agg-4 md:text-agg-sm md:leading-agg-5",
376
+ priceClassName
377
+ ),
378
+ children: formatProbabilityCents(row.price)
379
+ }
380
+ )
381
+ ] }),
382
+ /* @__PURE__ */ jsx("span", { className: "truncate text-agg-xs leading-agg-4 text-center text-agg-foreground md:text-agg-sm md:leading-agg-5", children: formatNumber(row.size) }),
383
+ /* @__PURE__ */ jsx("span", { className: "truncate text-agg-xs leading-agg-4 text-center text-agg-foreground md:text-agg-sm md:leading-agg-5", children: formatCurrency(row.total) }),
384
+ /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx(
385
+ "div",
386
+ {
387
+ "aria-hidden": "true",
388
+ className: cn("h-2 rounded-agg-full", barClassName),
389
+ style: {
390
+ width: `${Math.max(20, Math.round(row.barScale * 100))}%`
391
+ }
392
+ }
393
+ ) })
394
+ ] }),
395
+ index < rows.length - 1 ? /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-agg-separator" }) : null
396
+ ] }, row.id))
397
+ }
398
+ )
370
399
  ] });
371
400
  };
372
401
  var getOutcomeButtonClassName = ({
@@ -413,6 +442,9 @@ var MarketDetailsContent = ({
413
442
  labels
414
443
  });
415
444
  }, [config.formatCompactCurrency, event, image, labels, marketId, title]);
445
+ const resolvedMarket = useMemo(() => {
446
+ return resolveMarket(event, marketId);
447
+ }, [event, marketId]);
416
448
  const marketDetailsTabs = useMemo(() => {
417
449
  return getMarketDetailsTabs(labels);
418
450
  }, [labels]);
@@ -484,9 +516,10 @@ var MarketDetailsContent = ({
484
516
  });
485
517
  return [...uniqueOutcomesByVenueAndId.values()];
486
518
  }, [outcomesByLabel]);
519
+ const canonicalMarketIdForHistory = model == null ? void 0 : model.market.id;
487
520
  const priceHistoryGroups = useMemo(() => {
488
- return buildPriceHistoryGroups(graphOutcomes);
489
- }, [graphOutcomes]);
521
+ return buildPriceHistoryGroups(graphOutcomes, canonicalMarketIdForHistory);
522
+ }, [canonicalMarketIdForHistory, graphOutcomes]);
490
523
  const { data: priceHistoryData, isLoading: isPriceHistoryLoading } = usePriceHistory(__spreadProps(__spreadValues({
491
524
  groups: priceHistoryGroups
492
525
  }, timeWindow), {
@@ -499,24 +532,27 @@ var MarketDetailsContent = ({
499
532
  liveUpdate: true
500
533
  }));
501
534
  }, [selectedOutcomesByVenue]);
502
- const { data: orderBookData, isLoading: isOrderBookLoading } = useOrderBook({
535
+ const {
536
+ data: orderBookData,
537
+ isLoading: isOrderBookLoading,
538
+ error: orderBookError,
539
+ results: orderBookResults
540
+ } = useOrderBook({
503
541
  orderbooks: orderBookInputs,
504
542
  enabled: isOpened && selectedTab === "order-book" && orderBookInputs.length > 0
505
543
  });
506
544
  const askRows = useMemo(() => {
507
545
  return resolveOrderBookRows({
508
546
  data: orderBookData,
509
- side: "asks",
510
- depth: orderBookDepth
547
+ side: "asks"
511
548
  });
512
- }, [orderBookData, orderBookDepth]);
549
+ }, [orderBookData]);
513
550
  const bidRows = useMemo(() => {
514
551
  return resolveOrderBookRows({
515
552
  data: orderBookData,
516
- side: "bids",
517
- depth: orderBookDepth
553
+ side: "bids"
518
554
  });
519
- }, [orderBookData, orderBookDepth]);
555
+ }, [orderBookData]);
520
556
  const priceHistoryByVenue = useMemo(() => {
521
557
  const historyByVenue = /* @__PURE__ */ new Map();
522
558
  if (!(priceHistoryData == null ? void 0 : priceHistoryData.length)) {
@@ -536,11 +572,14 @@ var MarketDetailsContent = ({
536
572
  const graphSeriesByOutcomeLabel = useMemo(() => {
537
573
  const seriesByOutcomeLabel = /* @__PURE__ */ new Map();
538
574
  const resolveOutcomeCandidateIds = (outcomeByVenue) => {
539
- var _a;
575
+ var _a, _b;
576
+ const marketWithCanonicalId = outcomeByVenue.market;
540
577
  return [
541
578
  outcomeByVenue.outcome.id,
542
579
  (_a = outcomeByVenue.outcome.externalIdentifier) != null ? _a : void 0,
543
- outcomeByVenue.market.externalIdentifier
580
+ outcomeByVenue.market.externalIdentifier,
581
+ (_b = marketWithCanonicalId.marketId) != null ? _b : void 0,
582
+ canonicalMarketIdForHistory
544
583
  ].filter((value) => typeof value === "string" && value.trim().length > 0);
545
584
  };
546
585
  headerOutcomeItems.forEach((headerOutcomeItem) => {
@@ -572,7 +611,7 @@ var MarketDetailsContent = ({
572
611
  seriesByOutcomeLabel.set(headerOutcomeItem.label, graphSeries2);
573
612
  });
574
613
  return seriesByOutcomeLabel;
575
- }, [headerOutcomeItems, outcomesByLabel, priceHistoryByVenue]);
614
+ }, [canonicalMarketIdForHistory, headerOutcomeItems, outcomesByLabel, priceHistoryByVenue]);
576
615
  const graphSeries = useMemo(() => {
577
616
  var _a;
578
617
  if (!selectedOutcomeLabel)
@@ -587,6 +626,9 @@ var MarketDetailsContent = ({
587
626
  return [];
588
627
  return resolveOtherTabRows(model.market, labels);
589
628
  }, [labels, model]);
629
+ const isOrderBookNotFound = isErrorWithStatus(orderBookError, 404);
630
+ const hasOrderBookError = !!orderBookError && !isOrderBookNotFound;
631
+ const hasNoOrderBook = isOrderBookNotFound || !isOrderBookLoading && !hasOrderBookError && (orderBookInputs.length === 0 || askRows.length === 0 && bidRows.length === 0);
590
632
  const handleOutcomeKeyDown = (eventToHandle) => {
591
633
  var _a;
592
634
  if ((eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowLeft" && (eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowRight") {
@@ -620,6 +662,9 @@ var MarketDetailsContent = ({
620
662
  return venue;
621
663
  });
622
664
  };
665
+ const handleRetryOrderBook = () => {
666
+ void Promise.all(orderBookResults.map((result) => result.refetch()));
667
+ };
623
668
  useEffect(() => {
624
669
  if (!selectedGraphVenue) {
625
670
  return;
@@ -629,6 +674,9 @@ var MarketDetailsContent = ({
629
674
  }
630
675
  setSelectedGraphVenue(null);
631
676
  }, [selectedGraphVenue, selectedOutcomesByVenue]);
677
+ if (marketId && !resolvedMarket) {
678
+ return /* @__PURE__ */ jsx(MarketDetailsNotFoundState, { ariaLabel, classNames });
679
+ }
632
680
  if (!model) {
633
681
  return /* @__PURE__ */ jsx(MarketDetailsUnavailableState, { ariaLabel, classNames });
634
682
  }
@@ -636,28 +684,29 @@ var MarketDetailsContent = ({
636
684
  Card,
637
685
  {
638
686
  className: cn(
639
- "w-full cursor-pointer rounded-agg-2xl text-left outline-none",
687
+ "w-full rounded-agg-2xl text-left outline-none",
640
688
  marketDetailsBaseCardClassName,
641
689
  classNames == null ? void 0 : classNames.root
642
690
  ),
643
- "aria-expanded": isOpened,
644
- "aria-controls": detailsContentId,
645
- role: "button",
646
- tabIndex: 0,
647
- "aria-label": isOpened ? labels.marketDetails.toggleCloseDetailsAria(model.title) : labels.marketDetails.toggleOpenDetailsAria(model.title),
648
- onClick: handleToggleExpanded,
649
- onKeyDown: handleToggleExpanded,
650
691
  children: [
651
692
  /* @__PURE__ */ jsxs(
652
693
  "div",
653
694
  {
654
695
  className: cn(
655
- "flex flex-row items-center justify-between gap-3 px-5 py-4",
696
+ "cursor-pointer disabled:cursor-default",
697
+ "flex flex-wrap flex-row items-center justify-between gap-3 px-5 py-4",
656
698
  isOpened && "pb-3",
657
699
  classNames == null ? void 0 : classNames.header
658
700
  ),
701
+ "aria-expanded": isOpened,
702
+ "aria-controls": detailsContentId,
703
+ role: "button",
704
+ tabIndex: 0,
705
+ "aria-label": isOpened ? labels.marketDetails.toggleCloseDetailsAria(model.title) : labels.marketDetails.toggleOpenDetailsAria(model.title),
706
+ onClick: handleToggleExpanded,
707
+ onKeyDown: handleToggleExpanded,
659
708
  children: [
660
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-3 md:gap-4", children: [
709
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-52 items-center gap-3 md:gap-4", children: [
661
710
  model.image ? /* @__PURE__ */ jsx(
662
711
  "img",
663
712
  {
@@ -736,10 +785,7 @@ var MarketDetailsContent = ({
736
785
  id: detailsContentId,
737
786
  className: cn(
738
787
  "grid overflow-hidden",
739
- getMotionClassName(
740
- config.enableAnimations,
741
- "transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)]"
742
- ),
788
+ getMotionClassName(config.enableAnimations, "transition-all duration-500 ease-in-out"),
743
789
  isOpened ? "grid-rows-[1fr] opacity-100" : "pointer-events-none grid-rows-[0fr] opacity-0"
744
790
  ),
745
791
  "aria-hidden": !isOpened,
@@ -751,7 +797,7 @@ var MarketDetailsContent = ({
751
797
  className: cn(
752
798
  getMotionClassName(
753
799
  config.enableAnimations,
754
- "transition-all duration-500 ease-[cubic-bezier(0.4,0,0.2,1)]"
800
+ "transition-all duration-500 ease-in-out"
755
801
  ),
756
802
  isOpened ? cn(
757
803
  "translate-y-0 opacity-100",
@@ -772,17 +818,24 @@ var MarketDetailsContent = ({
772
818
  ) }),
773
819
  /* @__PURE__ */ jsx("div", { className: "h-px w-full bg-agg-separator" }),
774
820
  /* @__PURE__ */ jsxs("div", { className: cn("p-5", classNames == null ? void 0 : classNames.content), children: [
775
- selectedTab === "order-book" ? /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-5", classNames == null ? void 0 : classNames.orderBook), children: isOrderBookLoading ? /* @__PURE__ */ jsxs(
776
- "div",
821
+ selectedTab === "order-book" ? /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-5", classNames == null ? void 0 : classNames.orderBook), children: isOrderBookLoading ? /* @__PURE__ */ jsx(MarketDetailsOderbookSkeleton, {}) : hasOrderBookError ? /* @__PURE__ */ jsx(
822
+ StateMessage,
777
823
  {
778
- className: "flex flex-col gap-2 min-h-40 items-center justify-center",
779
- role: "status",
780
- "aria-label": labels.marketDetails.loadingOrderbookAria,
781
- "aria-busy": true,
782
- children: [
783
- /* @__PURE__ */ jsx(LoadingIcon, {}),
784
- /* @__PURE__ */ jsx(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.loadingOrderbookLabel })
785
- ]
824
+ ariaLabel: labels.marketDetails.orderBookUnavailableAria,
825
+ tone: "warning",
826
+ title: labels.marketDetails.orderBookUnavailableTitle,
827
+ description: labels.marketDetails.orderBookUnavailableDescription,
828
+ actionLabel: labels.common.retry,
829
+ onAction: handleRetryOrderBook,
830
+ className: "min-h-[248px] px-5 py-10 md:min-h-[272px]"
831
+ }
832
+ ) : hasNoOrderBook ? /* @__PURE__ */ jsx(
833
+ StateMessage,
834
+ {
835
+ ariaLabel: labels.marketDetails.orderBookEmptyAria,
836
+ title: labels.marketDetails.orderBookEmptyTitle,
837
+ description: labels.marketDetails.orderBookEmptyDescription,
838
+ className: "min-h-[248px] px-5 py-10 md:min-h-[272px]"
786
839
  }
787
840
  ) : /* @__PURE__ */ jsxs(Fragment, { children: [
788
841
  /* @__PURE__ */ jsx(
@@ -791,7 +844,8 @@ var MarketDetailsContent = ({
791
844
  rows: askRows,
792
845
  title: labels.marketDetails.asks,
793
846
  formatNumber: config.formatNumber,
794
- formatCurrency: config.formatCurrency
847
+ formatCurrency: config.formatCurrency,
848
+ visibleRows: orderBookDepth
795
849
  }
796
850
  ),
797
851
  /* @__PURE__ */ jsx(
@@ -800,7 +854,8 @@ var MarketDetailsContent = ({
800
854
  rows: bidRows,
801
855
  title: labels.marketDetails.bids,
802
856
  formatNumber: config.formatNumber,
803
- formatCurrency: config.formatCurrency
857
+ formatCurrency: config.formatCurrency,
858
+ visibleRows: orderBookDepth
804
859
  }
805
860
  )
806
861
  ] }) }) : null,
@@ -935,12 +990,13 @@ var MarketDetails = (props) => {
935
990
  (_a2 = props.onOpenChange) == null ? void 0 : _a2.call(props, nextIsOpened);
936
991
  };
937
992
  const hasEventProp = "event" in props && !!props.event;
938
- const { event: fetchedEvent, isLoading: isFetchingEvent } = useEvent(
939
- hasEventProp ? void 0 : props.eventId,
940
- {
941
- enabled: !props.isLoading && !hasEventProp && !!props.eventId
942
- }
943
- );
993
+ const {
994
+ event: fetchedEvent,
995
+ error: eventError,
996
+ isLoading: isFetchingEvent
997
+ } = useEvent(hasEventProp ? void 0 : props.eventId, {
998
+ enabled: !props.isLoading && !hasEventProp && !!props.eventId
999
+ });
944
1000
  if (props.isLoading) {
945
1001
  return /* @__PURE__ */ jsx(
946
1002
  MarketDetailsLoadingState,
@@ -972,6 +1028,9 @@ var MarketDetails = (props) => {
972
1028
  );
973
1029
  }
974
1030
  if (!fetchedEvent) {
1031
+ if (isErrorWithStatus(eventError, 404)) {
1032
+ return /* @__PURE__ */ jsx(MarketDetailsNotFoundState, { ariaLabel: props.ariaLabel, classNames: props.classNames });
1033
+ }
975
1034
  return /* @__PURE__ */ jsx(MarketDetailsUnavailableState, { ariaLabel: props.ariaLabel, classNames: props.classNames });
976
1035
  }
977
1036
  return /* @__PURE__ */ jsx(
@@ -1,12 +1,15 @@
1
1
  import {
2
2
  EventListItem
3
- } from "./chunk-RKCVOKE3.mjs";
3
+ } from "./chunk-CTYJVVHJ.mjs";
4
4
  import {
5
5
  Tabs
6
6
  } from "./chunk-S3H63TQ5.mjs";
7
+ import {
8
+ StateMessage
9
+ } from "./chunk-XUCS575S.mjs";
7
10
  import {
8
11
  Skeleton
9
- } from "./chunk-V52WSZHQ.mjs";
12
+ } from "./chunk-M4RJHRFT.mjs";
10
13
  import {
11
14
  VenueLogo
12
15
  } from "./chunk-PORVP72S.mjs";
@@ -17,8 +20,9 @@ import {
17
20
  Typography
18
21
  } from "./chunk-ERGNR6UQ.mjs";
19
22
  import {
20
- __spreadProps,
21
- __spreadValues,
23
+ Card
24
+ } from "./chunk-FO2QCB4Z.mjs";
25
+ import {
22
26
  cn
23
27
  } from "./chunk-GJ4U5NCE.mjs";
24
28
 
@@ -55,22 +59,10 @@ var getDefaultEventListTabs = (labels) => {
55
59
 
56
60
  // src/events/list/event-list.utils.ts
57
61
  var mapEventToEventListItemEvent = (event) => {
58
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
59
- const fallbackVenueEvent = event.venueEvents[0];
60
- if (!fallbackVenueEvent)
61
- return null;
62
62
  const mergedVenueMarkets = event.markets.flatMap((m) => m.venueMarkets);
63
- if ((mergedVenueMarkets == null ? void 0 : mergedVenueMarkets.length) === 0)
63
+ if (mergedVenueMarkets.length === 0)
64
64
  return null;
65
- return __spreadProps(__spreadValues({}, event), {
66
- id: event.id,
67
- title: event.title || fallbackVenueEvent.title,
68
- description: (_b = (_a = event.description) != null ? _a : fallbackVenueEvent.description) != null ? _b : null,
69
- volume: (_d = (_c = event.volume) != null ? _c : fallbackVenueEvent.volume) != null ? _d : null,
70
- startDate: (_f = (_e = event.startDate) != null ? _e : fallbackVenueEvent.startDate) != null ? _f : null,
71
- endDate: (_h = (_g = event.endDate) != null ? _g : fallbackVenueEvent.endDate) != null ? _h : null,
72
- creationDate: (_j = (_i = event.creationDate) != null ? _i : fallbackVenueEvent.creationDate) != null ? _j : null
73
- });
65
+ return event;
74
66
  };
75
67
  var filterEventsByTabValue = (events, _tabValue) => {
76
68
  return events;
@@ -146,7 +138,7 @@ var EventList = ({
146
138
  const [activeTabValue, setActiveTabValue] = useState(
147
139
  (_b = (_a = defaultEventListTabs[0]) == null ? void 0 : _a.value) != null ? _b : "matched"
148
140
  );
149
- const [shouldUseSelectOverflow, setShouldUseSelectOverflow] = useState(false);
141
+ const [_shouldUseSelectOverflow, setShouldUseSelectOverflow] = useState(false);
150
142
  const activeTab = useMemo(() => {
151
143
  return defaultEventListTabs.find((tab) => tab.value === activeTabValue);
152
144
  }, [activeTabValue]);
@@ -308,14 +300,15 @@ var EventList = ({
308
300
  },
309
301
  `loading-${index}`
310
302
  )),
311
- !isLoading && !isError && (tileEvents == null ? void 0 : tileEvents.length) === 0 ? /* @__PURE__ */ jsx(
312
- Typography,
303
+ !isLoading && !isError && (tileEvents == null ? void 0 : tileEvents.length) === 0 ? /* @__PURE__ */ jsx(Card, { className: "col-span-full overflow-hidden shadow-none hover:shadow-none", children: /* @__PURE__ */ jsx(
304
+ StateMessage,
313
305
  {
314
- variant: "body",
315
- className: "w-full col-span-full flex flex-col items-center justify-center h-32",
316
- children: labels.eventList.empty
306
+ ariaLabel: labels.eventList.emptyAria,
307
+ title: labels.eventList.emptyTitle,
308
+ description: labels.eventList.emptyDescription,
309
+ className: "min-h-[320px]"
317
310
  }
318
- ) : null,
311
+ ) }) : null,
319
312
  isError ? /* @__PURE__ */ jsx(
320
313
  Typography,
321
314
  {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EventList
3
- } from "./chunk-KRQFVMJE.mjs";
3
+ } from "./chunk-GFBF2J3Y.mjs";
4
4
  import {
5
5
  Tabs
6
6
  } from "./chunk-S3H63TQ5.mjs";
@@ -60,10 +60,10 @@ var SwitchButton = ({
60
60
  return null;
61
61
  }
62
62
  const handleKeyDown = (event, optionIndex) => {
63
- if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") {
63
+ if ((event == null ? void 0 : event.key) !== "ArrowLeft" && (event == null ? void 0 : event.key) !== "ArrowRight") {
64
64
  return;
65
65
  }
66
- event.preventDefault();
66
+ event == null ? void 0 : event.preventDefault();
67
67
  const nextOptionIndex = resolveNextEnabledIndex(
68
68
  options,
69
69
  optionIndex,