@agg-build/ui 4.21.0 → 4.21.1

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.
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  isErrorWithStatus
4
- } from "./chunk-DWPBGMVJ.mjs";
4
+ } from "./chunk-LTFRGJPL.mjs";
5
5
  import {
6
6
  Badge,
7
7
  Card,
@@ -1650,64 +1650,32 @@ var formatContractChartTime = (timestamp) => {
1650
1650
 
1651
1651
  // src/events/item-details/event-markets-chart.utils.ts
1652
1652
  import { resolveMarketTradingState } from "@agg-build/hooks";
1653
- var EVENT_CHART_SERIES_LIMIT = 8;
1654
- function resolveEventChartSelectedOutcome(markets, venue, selectedOutcomeId) {
1655
- var _a, _b;
1656
- if (!selectedOutcomeId) return null;
1657
- const allMarkets = normalizeVenueMarketCluster(markets);
1658
- const market = allMarkets.find(
1659
- (item) => item.venueMarketOutcomes.some((outcome2) => outcome2.id === selectedOutcomeId)
1660
- );
1661
- const outcome = market == null ? void 0 : market.venueMarketOutcomes.find((item) => item.id === selectedOutcomeId);
1662
- if (!market || !outcome) return null;
1663
- return (_b = (_a = collectEligibleVenueOutcomes({
1664
- venueMarkets: normalizeVenueMarketCluster(markets, market.id),
1665
- selectedOutcomeLabel: outcome.label,
1666
- selectedOutcomeId
1667
- }).find((item) => item.venue === venue)) == null ? void 0 : _a.outcomeId) != null ? _b : null;
1668
- }
1669
- function resolveEventChartPage(outcomes, selectedOutcomeId, requestedPage) {
1653
+ var EVENT_CHART_MARKET_LIMIT = 3;
1654
+ var marketVolume = (market) => {
1670
1655
  var _a;
1671
- const pinned = outcomes.find((outcome) => outcome.id === selectedOutcomeId);
1672
- const remaining = outcomes.filter((outcome) => outcome.id !== (pinned == null ? void 0 : pinned.id));
1673
- const pageSize = EVENT_CHART_SERIES_LIMIT - (pinned ? 1 : 0);
1674
- const pageCount = Math.max(1, Math.ceil(remaining.length / pageSize));
1675
- const page = Math.max(0, Math.min(requestedPage, pageCount - 1));
1676
- return {
1677
- page,
1678
- pageCount,
1679
- pinnedId: (_a = pinned == null ? void 0 : pinned.id) != null ? _a : null,
1680
- outcomes: [
1681
- ...pinned ? [pinned] : [],
1682
- ...remaining.slice(page * pageSize, (page + 1) * pageSize)
1683
- ]
1684
- };
1685
- }
1686
- var resolveEventChartOutcomes = (markets, venue, eventEndDate) => normalizeVenueMarketCluster(markets).filter((market) => market.venue === venue).sort(
1687
- (left, right) => {
1688
- var _a, _b;
1689
- return ((_a = right.volume) != null ? _a : 0) - ((_b = left.volume) != null ? _b : 0) || left.id.localeCompare(right.id);
1690
- }
1691
- ).flatMap((market) => {
1656
+ return Number.isFinite(market.volume) ? Math.max(0, (_a = market.volume) != null ? _a : 0) : 0;
1657
+ };
1658
+ var resolveTopEventChartMarkets = (markets, venue) => normalizeVenueMarketCluster(markets).filter((market) => market.venue === venue && market.venueMarketOutcomes.length > 0).sort(
1659
+ (left, right) => marketVolume(right) - marketVolume(left) || left.id.localeCompare(right.id)
1660
+ ).slice(0, EVENT_CHART_MARKET_LIMIT);
1661
+ var resolveEventChartOutcomes = (markets, venue, eventEndDate) => resolveTopEventChartMarkets(markets, venue).flatMap((market) => {
1692
1662
  var _a, _b, _c;
1693
1663
  const state = resolveMarketTradingState(market);
1694
1664
  const hasFinalResult = state.kind === "resolved" && market.venueMarketOutcomes.some((outcome) => outcome.winner === true) && market.venueMarketOutcomes.every((outcome) => outcome.winner != null);
1695
1665
  const settledAt = Date.parse((_c = (_b = (_a = market.resolutionDate) != null ? _a : market.endDate) != null ? _b : eventEndDate) != null ? _c : "") / 1e3;
1696
- const ordered = [...market.venueMarketOutcomes].sort((a, b) => {
1697
- const rank = (label) => label.trim().toLowerCase() === "yes" ? 0 : label.trim().toLowerCase() === "no" ? 1 : 2;
1698
- return rank(a.label) - rank(b.label);
1699
- });
1666
+ const ordered = sortOutcomeSelectorOutcomes(market.venueMarketOutcomes);
1700
1667
  return ordered.map((outcome) => {
1701
- var _a2;
1668
+ var _a2, _b2;
1702
1669
  return {
1703
1670
  id: outcome.id,
1704
1671
  marketId: market.id,
1705
1672
  venue: market.venue,
1706
1673
  side: outcome.label,
1674
+ outcomeLabel: ((_a2 = outcome.title) == null ? void 0 : _a2.trim()) || outcome.label,
1707
1675
  live: !state.isTradingDisabled,
1708
1676
  finalValue: hasFinalResult ? outcome.winner ? 100 : 0 : void 0,
1709
1677
  settledAt: Number.isFinite(settledAt) ? settledAt : void 0,
1710
- label: `${market.question} \xB7 ${((_a2 = outcome.title) == null ? void 0 : _a2.trim()) || outcome.label}`
1678
+ label: `${market.question} \xB7 ${((_b2 = outcome.title) == null ? void 0 : _b2.trim()) || outcome.label}`
1711
1679
  };
1712
1680
  });
1713
1681
  });
@@ -1720,8 +1688,7 @@ var EventMarketsChart = ({
1720
1688
  eventEndDate,
1721
1689
  contractWindow,
1722
1690
  range,
1723
- live,
1724
- selectedOutcomeId
1691
+ live
1725
1692
  }) => {
1726
1693
  var _a, _b, _c, _d, _e, _f, _g;
1727
1694
  const labels = useLabels6();
@@ -1733,31 +1700,20 @@ var EventMarketsChart = ({
1733
1700
  () => [...new Set(normalizeVenueMarketCluster(markets).map((market) => market.venue))],
1734
1701
  [markets]
1735
1702
  );
1736
- const venue = venues.includes(defaultVenue) ? defaultVenue : (_a = venues[0]) != null ? _a : defaultVenue;
1737
- const outcomes = useMemo5(
1738
- () => resolveEventChartOutcomes(markets, venue, eventEndDate),
1739
- [markets, venue, eventEndDate]
1740
- );
1741
1703
  const [selection, setSelection] = useState2(() => ({
1742
- venue,
1743
- page: 0,
1704
+ defaultVenue,
1705
+ venue: defaultVenue,
1744
1706
  hidden: /* @__PURE__ */ new Set()
1745
1707
  }));
1746
- const currentSelection = useMemo5(
1747
- () => selection.venue === venue ? selection : { venue, page: 0, hidden: /* @__PURE__ */ new Set() },
1748
- [selection, venue]
1749
- );
1750
- const pinnedOutcomeId = useMemo5(
1751
- () => resolveEventChartSelectedOutcome(markets, venue, selectedOutcomeId),
1752
- [markets, venue, selectedOutcomeId]
1753
- );
1754
- const page = useMemo5(
1755
- () => resolveEventChartPage(outcomes, pinnedOutcomeId, currentSelection.page),
1756
- [outcomes, pinnedOutcomeId, currentSelection.page]
1757
- );
1758
- const activeOutcomes = page.outcomes.filter(
1759
- (outcome) => outcome.id === page.pinnedId || !currentSelection.hidden.has(outcome.id)
1708
+ const requestedVenue = selection.defaultVenue === defaultVenue ? selection.venue : defaultVenue;
1709
+ const venue = venues.includes(requestedVenue) ? requestedVenue : (_a = venues[0]) != null ? _a : defaultVenue;
1710
+ const hidden = selection.defaultVenue === defaultVenue && selection.venue === venue ? selection.hidden : /* @__PURE__ */ new Set();
1711
+ const topMarkets = useMemo5(() => resolveTopEventChartMarkets(markets, venue), [markets, venue]);
1712
+ const outcomes = useMemo5(
1713
+ () => resolveEventChartOutcomes(topMarkets, venue, eventEndDate),
1714
+ [topMarkets, venue, eventEndDate]
1760
1715
  );
1716
+ const activeOutcomes = outcomes.filter((outcome) => !hidden.has(outcome.id));
1761
1717
  const activeIds = new Set(activeOutcomes.map((outcome) => outcome.id));
1762
1718
  const rollingWindow = useRollingChartWindow({
1763
1719
  range,
@@ -1790,10 +1746,10 @@ var EventMarketsChart = ({
1790
1746
  live: live && !windowEnded
1791
1747
  });
1792
1748
  const stableColorIds = useMemo5(
1793
- () => [...new Set(outcomes.map((outcome) => outcome.marketId))].sort(),
1794
- [outcomes]
1749
+ () => normalizeVenueMarketCluster(markets).filter((market) => market.venue === venue).map((market) => market.id).sort(),
1750
+ [markets, venue]
1795
1751
  );
1796
- const allSeries = page.outcomes.map((outcome) => {
1752
+ const allSeries = outcomes.map((outcome) => {
1797
1753
  var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h, _i;
1798
1754
  const settledAt = outcome.settledAt == null ? void 0 : contractWindow ? Math.min(outcome.settledAt, contractWindow.to) : outcome.settledAt;
1799
1755
  const outcomeLive = outcome.live && !windowEnded;
@@ -1829,110 +1785,109 @@ var EventMarketsChart = ({
1829
1785
  });
1830
1786
  const visibleSeries = allSeries.filter((series) => activeIds.has(series.id));
1831
1787
  const hasVisibleHistory = visibleSeries.some((series) => series.points.length > 0);
1832
- const volume = useMemo5(
1833
- () => normalizeVenueMarketCluster(markets).filter((market) => market.venue === venue).reduce((sum, market) => {
1788
+ const volume = topMarkets.reduce(
1789
+ (sum, market) => {
1834
1790
  var _a2;
1835
- return sum + ((_a2 = market.volume) != null ? _a2 : 0);
1836
- }, 0),
1837
- [markets, venue]
1791
+ return sum + (Number.isFinite(market.volume) ? Math.max(0, (_a2 = market.volume) != null ? _a2 : 0) : 0);
1792
+ },
1793
+ 0
1838
1794
  );
1839
1795
  const venueLabel = (_g = labels.venues[venue]) != null ? _g : venue;
1840
1796
  return /* @__PURE__ */ jsxs4("div", { className: "agg-event-markets-chart flex flex-col gap-3", children: [
1841
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-wrap items-center justify-between gap-2 text-agg-sm text-agg-muted-foreground", children: [
1842
- /* @__PURE__ */ jsx6("span", { role: "status", children: labels.eventItemDetails.comparisonSeriesCount(activeOutcomes.length, outcomes.length) }),
1843
- page.pageCount > 1 ? /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-2", children: [
1844
- /* @__PURE__ */ jsx6(
1845
- Button,
1846
- {
1847
- variant: "tertiary",
1848
- size: "small",
1849
- disabled: page.page === 0,
1850
- onClick: (event) => {
1851
- event.stopPropagation();
1852
- setSelection(__spreadProps(__spreadValues({}, currentSelection), { page: page.page - 1 }));
1853
- },
1854
- prefix: /* @__PURE__ */ jsx6(Icon, { name: "chevron-left", size: "small" }),
1855
- children: labels.eventItemDetails.comparisonPreviousSeries
1856
- }
1857
- ),
1858
- /* @__PURE__ */ jsx6("span", { children: labels.eventItemDetails.comparisonSeriesPage(page.page + 1, page.pageCount) }),
1859
- /* @__PURE__ */ jsx6(
1860
- Button,
1861
- {
1862
- variant: "tertiary",
1863
- size: "small",
1864
- disabled: page.page + 1 === page.pageCount,
1865
- onClick: (event) => {
1866
- event.stopPropagation();
1867
- setSelection(__spreadProps(__spreadValues({}, currentSelection), { page: page.page + 1 }));
1868
- },
1869
- suffix: /* @__PURE__ */ jsx6(Icon, { name: "chevron-right", size: "small" }),
1870
- children: labels.eventItemDetails.comparisonNextSeries
1871
- }
1872
- )
1873
- ] }) : null
1874
- ] }),
1875
- outcomes.length > EVENT_CHART_SERIES_LIMIT ? /* @__PURE__ */ jsx6("p", { className: "text-agg-xs text-agg-muted-foreground", children: labels.eventItemDetails.comparisonSeriesBudget(EVENT_CHART_SERIES_LIMIT) }) : null,
1797
+ /* @__PURE__ */ jsx6("div", { className: "agg-market-badges flex min-w-0 gap-2 overflow-x-auto pb-1 md:flex-wrap", children: venues.map((item) => {
1798
+ var _a2, _b2;
1799
+ return /* @__PURE__ */ jsx6(
1800
+ "button",
1801
+ {
1802
+ type: "button",
1803
+ "aria-label": (_a2 = labels.venues[item]) != null ? _a2 : item,
1804
+ "aria-pressed": venue === item,
1805
+ className: "agg-market-badge cursor-pointer rounded-agg-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary",
1806
+ onClick: (event) => {
1807
+ event.preventDefault();
1808
+ event.stopPropagation();
1809
+ if (item !== venue) setSelection({ defaultVenue, venue: item, hidden: /* @__PURE__ */ new Set() });
1810
+ },
1811
+ children: /* @__PURE__ */ jsx6(
1812
+ Badge,
1813
+ {
1814
+ text: (_b2 = labels.venues[item]) != null ? _b2 : item,
1815
+ prefix: /* @__PURE__ */ jsx6(VenueLogo, { venue: item, size: "small", title: item }),
1816
+ size: "large",
1817
+ isActive: venue === item,
1818
+ classNames: { root: "shrink-0 border px-4 h-8 md:h-9" }
1819
+ }
1820
+ )
1821
+ },
1822
+ item
1823
+ );
1824
+ }) }),
1876
1825
  /* @__PURE__ */ jsx6(
1877
1826
  "div",
1878
1827
  {
1879
1828
  role: "group",
1880
1829
  "aria-label": labels.eventItemDetails.chartLegend,
1881
- className: "flex flex-wrap gap-x-5 gap-y-2",
1882
- children: allSeries.map((series) => /* @__PURE__ */ jsxs4(
1883
- "button",
1884
- {
1885
- type: "button",
1886
- "data-chart-outcome-id": series.id,
1887
- "aria-pressed": activeIds.has(series.id),
1888
- disabled: series.id === page.pinnedId,
1889
- onClick: (event) => {
1890
- event.stopPropagation();
1891
- setSelection(() => {
1892
- const next = new Set(currentSelection.hidden);
1893
- if (next.has(series.id)) next.delete(series.id);
1894
- else next.add(series.id);
1895
- return __spreadProps(__spreadValues({}, currentSelection), { hidden: next });
1896
- });
1830
+ className: "flex flex-col gap-2",
1831
+ children: topMarkets.map((market) => {
1832
+ var _a2;
1833
+ return /* @__PURE__ */ jsxs4(
1834
+ "div",
1835
+ {
1836
+ "data-chart-market-id": market.id,
1837
+ className: "flex min-w-0 flex-wrap items-center justify-between gap-x-4 gap-y-1",
1838
+ children: [
1839
+ /* @__PURE__ */ jsxs4("span", { className: "flex min-w-0 items-center gap-2 text-agg-sm text-agg-foreground", children: [
1840
+ /* @__PURE__ */ jsx6(
1841
+ "span",
1842
+ {
1843
+ "aria-hidden": "true",
1844
+ className: "h-0 w-4 shrink-0 border-t-2",
1845
+ style: {
1846
+ borderColor: (_a2 = allSeries.find((series) => series.marketId === market.id)) == null ? void 0 : _a2.color
1847
+ }
1848
+ }
1849
+ ),
1850
+ /* @__PURE__ */ jsx6("span", { className: "truncate", title: market.question, children: market.question })
1851
+ ] }),
1852
+ /* @__PURE__ */ jsx6("div", { className: "agg-outcome-switch flex max-w-full flex-wrap gap-1 rounded-agg-full bg-agg-secondary", children: allSeries.filter((series) => series.marketId === market.id).map((series) => {
1853
+ const value = !activeIds.has(series.id) ? labels.eventItemDetails.comparisonHiddenSeries : series.pending ? labels.common.loading : series.points.length === 0 ? labels.eventItemDetails.marketHistoryUnavailable : formatDefaultChartValue(
1854
+ series.current != null ? series.current * 100 : series.points.at(-1).value
1855
+ );
1856
+ return /* @__PURE__ */ jsx6(
1857
+ "button",
1858
+ {
1859
+ type: "button",
1860
+ "data-chart-outcome-id": series.id,
1861
+ "aria-label": `${series.label} ${value}`,
1862
+ "aria-pressed": activeIds.has(series.id),
1863
+ title: `${series.label} ${value}`,
1864
+ className: "cursor-pointer rounded-agg-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary",
1865
+ onClick: (event) => {
1866
+ event.preventDefault();
1867
+ event.stopPropagation();
1868
+ const next = new Set(hidden);
1869
+ if (next.has(series.id)) next.delete(series.id);
1870
+ else next.add(series.id);
1871
+ setSelection({ defaultVenue, venue, hidden: next });
1872
+ },
1873
+ children: /* @__PURE__ */ jsx6(
1874
+ Badge,
1875
+ {
1876
+ text: `${series.outcomeLabel} ${value}`,
1877
+ size: "large",
1878
+ isActive: activeIds.has(series.id),
1879
+ classNames: { root: "h-8 w-36 border px-4 tabular-nums md:h-9" }
1880
+ }
1881
+ )
1882
+ },
1883
+ series.id
1884
+ );
1885
+ }) })
1886
+ ]
1897
1887
  },
1898
- className: "flex max-w-full cursor-pointer items-center gap-2 rounded-agg-sm py-1 text-agg-sm text-agg-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary disabled:cursor-default disabled:opacity-50",
1899
- style: { opacity: activeIds.has(series.id) ? 1 : 0.4 },
1900
- children: [
1901
- /* @__PURE__ */ jsx6(
1902
- "span",
1903
- {
1904
- "aria-hidden": "true",
1905
- className: "h-0 w-4 shrink-0 border-t-2",
1906
- style: {
1907
- borderColor: series.color,
1908
- borderTopStyle: series.lineStyle === "dashed" ? "dashed" : "solid"
1909
- }
1910
- }
1911
- ),
1912
- /* @__PURE__ */ jsx6("span", { className: "min-w-0 text-left [overflow-wrap:anywhere]", children: series.label }),
1913
- series.id === page.pinnedId ? /* @__PURE__ */ jsx6("span", { children: labels.eventItemDetails.comparisonSelectedSeries }) : null,
1914
- /* @__PURE__ */ jsxs4("span", { className: "inline-grid shrink-0 items-center font-agg-semibold tabular-nums", children: [
1915
- [
1916
- formatDefaultChartValue(100),
1917
- formatDefaultChartValue(99.9),
1918
- labels.common.loading,
1919
- labels.eventItemDetails.comparisonHiddenSeries,
1920
- labels.eventItemDetails.marketHistoryUnavailable
1921
- ].map((value, index) => /* @__PURE__ */ jsx6(
1922
- "span",
1923
- {
1924
- "aria-hidden": "true",
1925
- className: "invisible col-start-1 row-start-1 select-none",
1926
- children: value
1927
- },
1928
- index
1929
- )),
1930
- /* @__PURE__ */ jsx6("span", { className: "col-start-1 row-start-1", children: !activeIds.has(series.id) ? labels.eventItemDetails.comparisonHiddenSeries : series.pending ? labels.common.loading : series.points.length === 0 ? labels.eventItemDetails.marketHistoryUnavailable : series.current != null ? formatDefaultChartValue(series.current * 100) : formatDefaultChartValue(series.points.at(-1).value) })
1931
- ] })
1932
- ]
1933
- },
1934
- series.id
1935
- ))
1888
+ market.id
1889
+ );
1890
+ })
1936
1891
  }
1937
1892
  ),
1938
1893
  visibleSeries.length === 0 && allSeries.length > 0 ? /* @__PURE__ */ jsx6(
@@ -2434,7 +2389,7 @@ var EventListItemDetailsContent = ({
2434
2389
  recurringMarkets,
2435
2390
  sportsLiveState
2436
2391
  }) => {
2437
- var _a, _b, _c, _d, _e, _f, _g;
2392
+ var _a, _b, _c, _d, _e, _f;
2438
2393
  const [selectedChartType, setSelectedChartType] = useState3("line");
2439
2394
  const [chartView, setChartView] = useState3(defaultChartView);
2440
2395
  const lastAppliedEventSyncKeyRef = useRef2(null);
@@ -2762,7 +2717,6 @@ var EventListItemDetailsContent = ({
2762
2717
  {
2763
2718
  markets: event.venueMarkets,
2764
2719
  defaultVenue: event.venue,
2765
- selectedOutcomeId: (tradingContext == null ? void 0 : tradingContext.selectedEventId) === event.id ? tradingContext.selectedOutcomeId : (_f = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.venueMarketOutcomes[0]) == null ? void 0 : _f.id,
2766
2720
  eventEndDate: event.endDate,
2767
2721
  contractWindow,
2768
2722
  range: chartRangeOverride != null ? chartRangeOverride : config.chart.selectedChartTimeRange,
@@ -2777,7 +2731,7 @@ var EventListItemDetailsContent = ({
2777
2731
  selectedChartType,
2778
2732
  venueInfo,
2779
2733
  venueMarkets,
2780
- selectedMarketId: (_g = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.id) != null ? _g : null,
2734
+ selectedMarketId: (_f = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.id) != null ? _f : null,
2781
2735
  livePrices,
2782
2736
  restMidpoints,
2783
2737
  bestMidpoint,
@@ -4,7 +4,7 @@ import {
4
4
  MarketDetails,
5
5
  MarketDetailsList,
6
6
  isErrorWithStatus
7
- } from "./chunk-DWPBGMVJ.mjs";
7
+ } from "./chunk-LTFRGJPL.mjs";
8
8
  import {
9
9
  PlaceOrder,
10
10
  SettlementDetails,
@@ -1368,6 +1368,7 @@ var resolveSportsSectionMarkets = ({
1368
1368
  }
1369
1369
  if (tab.kind !== "game_lines") return filteredSectionMarkets;
1370
1370
  const dedupeEventMarketsOfType = (type) => {
1371
+ var _a, _b, _c, _d;
1371
1372
  const dedupedMarkets = [];
1372
1373
  const keptIndexByKey = /* @__PURE__ */ new Map();
1373
1374
  for (const market of eventMarkets) {
@@ -1378,6 +1379,10 @@ var resolveSportsSectionMarkets = ({
1378
1379
  const keptIndex = keptIndexByKey.get(key);
1379
1380
  if (keptIndex !== void 0) {
1380
1381
  const kept = dedupedMarkets[keptIndex];
1382
+ if (hasTeamTitledOutcomes(kept) && hasTeamTitledOutcomes(market) && ((_b = (_a = kept.venueMarketOutcomes) == null ? void 0 : _a.length) != null ? _b : 0) !== ((_d = (_c = market.venueMarketOutcomes) == null ? void 0 : _c.length) != null ? _d : 0)) {
1383
+ dedupedMarkets.push(market);
1384
+ continue;
1385
+ }
1381
1386
  if (!hasTeamTitledOutcomes(kept) && hasTeamTitledOutcomes(market)) {
1382
1387
  dedupedMarkets[keptIndex] = market;
1383
1388
  }
@@ -1507,6 +1512,12 @@ var SPORTS_LEG_GROUPABLE_GROUPS = /* @__PURE__ */ new Set([
1507
1512
  "specials",
1508
1513
  "completion"
1509
1514
  ]);
1515
+ var DRAW_OUTCOME_TITLE_PATTERN = /\b(draw|tie)\b/i;
1516
+ var isThreeWayMoneylineHub = (market) => {
1517
+ var _a, _b;
1518
+ const outcomes = (_a = market.venueMarketOutcomes) != null ? _a : [];
1519
+ return normalizeSportsMarketType(market.sportsMarketType) === "moneyline" && normalizeSportsMarketGroup(market.marketGroup) === "game_lines" && normalizeSportsPeriod(market.period) === "full" && outcomes.length === 3 && outcomes.filter((outcome) => DRAW_OUTCOME_TITLE_PATTERN.test(toTrimmedString(outcome.title))).length === 1 && ((_b = market.matchedVenueMarkets) != null ? _b : []).length > 0;
1520
+ };
1510
1521
  var resolveDisplayGroupFamilyKey = (market, sport) => {
1511
1522
  var _a, _b, _c;
1512
1523
  const normalizedQuestion = sanitizeFamilyValue(toTrimmedString(market.question));
@@ -1516,7 +1527,7 @@ var resolveDisplayGroupFamilyKey = (market, sport) => {
1516
1527
  const sportsMarketType = (_b = normalizeSportsMarketType(market.sportsMarketType)) != null ? _b : "other";
1517
1528
  const period = normalizeSportsPeriod(market.period);
1518
1529
  const marketCategory = (_c = normalizeSportsMarketCategory(market.marketCategory)) != null ? _c : "other";
1519
- if (isBinarySportsMoneylineMarket(market)) {
1530
+ if (isBinarySportsMoneylineMarket(market) || isThreeWayMoneylineHub(market)) {
1520
1531
  return `${period}|moneyline|${marketCategory}`;
1521
1532
  }
1522
1533
  if (sportsMarketType === "to_advance") {
@@ -1580,7 +1591,7 @@ var formatSportsLegTitle = (token) => {
1580
1591
  var resolveDisplayGroupTitle = (market, groupMarkets = [market], sport, isCombinedLegGroup = false) => {
1581
1592
  const sportsMarketType = normalizeSportsMarketType(market.sportsMarketType);
1582
1593
  const question = toTrimmedString(market.question);
1583
- if (isBinarySportsMoneylineMarket(market)) return "Moneyline";
1594
+ if (isBinarySportsMoneylineMarket(market) || isThreeWayMoneylineHub(market)) return "Moneyline";
1584
1595
  if (sportsMarketType === "to_advance") return "Team to Advance";
1585
1596
  if (sportsMarketType === "spread") return "Spreads";
1586
1597
  if (isCombinedLegGroup) {
@@ -8,7 +8,7 @@ import {
8
8
  EventListTabs,
9
9
  useEventListTabs,
10
10
  useEventListTabsHeaderOverflow
11
- } from "./chunk-JLO2BGSF.mjs";
11
+ } from "./chunk-LIB6TLLV.mjs";
12
12
  import {
13
13
  OPEN_ORDER_FALLBACK_THUMBNAIL_SRC,
14
14
  OPEN_ORDER_QUERY_STATUSES,
@@ -21,7 +21,7 @@ import {
21
21
  parseRawMicroValue,
22
22
  selectOpenLimitOrders,
23
23
  useOpenOrderCancellation
24
- } from "./chunk-DONMO42Q.mjs";
24
+ } from "./chunk-R7ARCUYW.mjs";
25
25
  import {
26
26
  DEPOSIT_MODAL_OPEN_EVENT,
27
27
  WITHDRAW_MODAL_OPEN_EVENT,
@@ -266,7 +266,7 @@ var useHomePageModals = () => {
266
266
  // src/pages/home/index.tsx
267
267
  import { jsx, jsxs } from "react/jsx-runtime";
268
268
  var DeferredEventMarketPage = lazy(
269
- () => import("./event-market-UREM3ZE7.mjs").then((module) => ({ default: module.EventMarketPage }))
269
+ () => import("./event-market-5SIXH2XF.mjs").then((module) => ({ default: module.EventMarketPage }))
270
270
  );
271
271
  var MIN_SEARCH_LENGTH = 3;
272
272
  var SEARCH_DEBOUNCE_MS = 300;
@@ -6,8 +6,8 @@ import {
6
6
  EventOpenOrdersCard,
7
7
  formatRecurringCountdown,
8
8
  useEventOpenOrders
9
- } from "./chunk-DONMO42Q.mjs";
10
- import "./chunk-DWPBGMVJ.mjs";
9
+ } from "./chunk-R7ARCUYW.mjs";
10
+ import "./chunk-LTFRGJPL.mjs";
11
11
  import "./chunk-NV6WT3TN.mjs";
12
12
  import "./chunk-WOCZ4TVT.mjs";
13
13
  import "./chunk-CKHECAKV.mjs";