@agg-build/ui 1.3.0 → 2.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.
package/dist/pages.js CHANGED
@@ -4534,482 +4534,131 @@ var import_hooks27 = require("@agg-build/hooks");
4534
4534
  var import_react7 = require("react");
4535
4535
 
4536
4536
  // src/events/list/event-list.utils.ts
4537
- var import_hooks9 = require("@agg-build/hooks");
4538
- var import_sdk = require("@agg-build/sdk");
4539
-
4540
- // src/events/item/event-list-item.utils.ts
4541
4537
  var import_hooks8 = require("@agg-build/hooks");
4542
-
4543
- // src/events/shared/venue-market-cluster.ts
4544
- var toNonEmptyString = (value) => {
4545
- if (typeof value !== "string") return void 0;
4546
- const trimmedValue = value.trim();
4547
- return trimmedValue ? trimmedValue : void 0;
4548
- };
4549
- var addGraphEdge = (adjacencyById, fromMarketId, toMarketId) => {
4550
- var _a, _b;
4551
- if (fromMarketId === toMarketId) return;
4552
- const fromNeighbors = (_a = adjacencyById.get(fromMarketId)) != null ? _a : /* @__PURE__ */ new Set();
4553
- fromNeighbors.add(toMarketId);
4554
- adjacencyById.set(fromMarketId, fromNeighbors);
4555
- const toNeighbors = (_b = adjacencyById.get(toMarketId)) != null ? _b : /* @__PURE__ */ new Set();
4556
- toNeighbors.add(fromMarketId);
4557
- adjacencyById.set(toMarketId, toNeighbors);
4558
- };
4559
- var dedupeSourceMarketsById = (markets) => {
4560
- const seenMarketIds = /* @__PURE__ */ new Set();
4561
- return markets.filter((market) => {
4562
- if (seenMarketIds.has(market.id)) {
4563
- return false;
4564
- }
4565
- seenMarketIds.add(market.id);
4538
+ var import_sdk = require("@agg-build/sdk");
4539
+ var filterOpenEvents = (events) => {
4540
+ return events.filter((event) => {
4541
+ var _a;
4542
+ if (event.status && event.status !== import_hooks8.MarketStatus.open) return false;
4543
+ const openMarkets = (_a = event.venueMarkets) == null ? void 0 : _a.filter(
4544
+ (m) => !m.status || m.status === import_hooks8.MarketStatus.open
4545
+ );
4546
+ if (!openMarkets || openMarkets.length === 0) return false;
4566
4547
  return true;
4567
4548
  });
4568
4549
  };
4569
- var collectDirectRelationMarkets = (market) => {
4570
- var _a, _b, _c;
4571
- const relationMarkets = [];
4572
- const seenRelationIds = /* @__PURE__ */ new Set();
4573
- const addRelationMarket = (relationMarket) => {
4574
- if (!relationMarket) return;
4575
- if (seenRelationIds.has(relationMarket.id)) return;
4576
- seenRelationIds.add(relationMarket.id);
4577
- relationMarkets.push(relationMarket);
4578
- };
4579
- for (const matchedVenueMarket of (_a = market.matchedVenueMarkets) != null ? _a : []) {
4580
- addRelationMarket(matchedVenueMarket);
4550
+ var resolveEventVolume = (event) => {
4551
+ if (typeof event.volume === "number" && Number.isFinite(event.volume)) {
4552
+ return event.volume;
4581
4553
  }
4582
- addRelationMarket(
4583
- (_c = (_b = market.matchEntry) == null ? void 0 : _b.targetVenueMarket) != null ? _c : void 0
4584
- );
4585
- return relationMarkets;
4554
+ return event.venueMarkets.reduce((maxVolume, market) => {
4555
+ if (typeof market.volume !== "number" || !Number.isFinite(market.volume)) {
4556
+ return maxVolume;
4557
+ }
4558
+ return Math.max(maxVolume, market.volume);
4559
+ }, -1);
4586
4560
  };
4587
- var collectUniqueRelatedMarkets = (markets, sourceMarketsById) => {
4588
- const relatedMarketsById = /* @__PURE__ */ new Map();
4589
- for (const market of markets) {
4590
- for (const relatedMarket of collectDirectRelationMarkets(market)) {
4591
- if (sourceMarketsById.has(relatedMarket.id) || relatedMarketsById.has(relatedMarket.id)) {
4592
- continue;
4561
+ var sortEventsByVolumeDesc = (events, sortEventsBy) => {
4562
+ return events.map((event, index) => ({
4563
+ event,
4564
+ index,
4565
+ volume: resolveEventVolume(event)
4566
+ })).sort((left, right) => {
4567
+ if (sortEventsBy === "volume") {
4568
+ if (left.volume !== right.volume) {
4569
+ return right.volume - left.volume;
4593
4570
  }
4594
- relatedMarketsById.set(relatedMarket.id, relatedMarket);
4595
4571
  }
4596
- }
4597
- return Array.from(relatedMarketsById.values());
4572
+ return left.index - right.index;
4573
+ }).map(({ event }) => event);
4598
4574
  };
4599
- var normalizeVenueMarketCluster = (markets, selectedMarketId) => {
4600
- var _a, _b;
4601
- if (markets.length === 0) return [];
4602
- const orderedSourceMarkets = dedupeSourceMarketsById(markets);
4603
- const sourceMarketsById = new Map(orderedSourceMarkets.map((market) => [market.id, market]));
4604
- const orderedRelatedMarkets = collectUniqueRelatedMarkets(
4605
- orderedSourceMarkets,
4606
- sourceMarketsById
4575
+ var resolveEventLifecycle = (event) => {
4576
+ const hasOpenMarket = event.venueMarkets.some(
4577
+ (market) => !market.status || market.status === import_hooks8.MarketStatus.open
4607
4578
  );
4608
- const relatedMarketsById = new Map(orderedRelatedMarkets.map((market) => [market.id, market]));
4609
- const resolvedSelectedMarketId = toNonEmptyString(selectedMarketId);
4610
- if (!resolvedSelectedMarketId) {
4611
- return [...orderedSourceMarkets, ...orderedRelatedMarkets];
4612
- }
4613
- const adjacencyById = /* @__PURE__ */ new Map();
4614
- for (const market of orderedSourceMarkets) {
4615
- for (const relatedMarket of collectDirectRelationMarkets(market)) {
4616
- addGraphEdge(adjacencyById, market.id, relatedMarket.id);
4617
- }
4618
- const targetVenueMarketId = toNonEmptyString((_a = market.matchEntry) == null ? void 0 : _a.targetVenueMarketId);
4619
- if (targetVenueMarketId) {
4620
- addGraphEdge(adjacencyById, market.id, targetVenueMarketId);
4621
- }
4622
- }
4623
- if (!sourceMarketsById.has(resolvedSelectedMarketId) && !relatedMarketsById.has(resolvedSelectedMarketId)) {
4624
- return [];
4625
- }
4626
- const visitedMarketIds = /* @__PURE__ */ new Set();
4627
- const queue = [resolvedSelectedMarketId];
4628
- while (queue.length > 0) {
4629
- const currentMarketId = queue.shift();
4630
- if (!currentMarketId || visitedMarketIds.has(currentMarketId)) {
4631
- continue;
4632
- }
4633
- visitedMarketIds.add(currentMarketId);
4634
- const neighborMarketIds = adjacencyById.get(currentMarketId);
4635
- for (const neighborMarketId of Array.from(neighborMarketIds != null ? neighborMarketIds : /* @__PURE__ */ new Set())) {
4636
- if (!visitedMarketIds.has(neighborMarketId)) {
4637
- queue.push(neighborMarketId);
4638
- }
4639
- }
4640
- }
4641
- const orderedClusterMarkets = [];
4642
- const appendedMarketIds = /* @__PURE__ */ new Set();
4643
- const appendMarket = (market) => {
4644
- if (!market) return;
4645
- if (!visitedMarketIds.has(market.id)) return;
4646
- if (appendedMarketIds.has(market.id)) return;
4647
- appendedMarketIds.add(market.id);
4648
- orderedClusterMarkets.push(market);
4649
- };
4650
- appendMarket(
4651
- (_b = sourceMarketsById.get(resolvedSelectedMarketId)) != null ? _b : relatedMarketsById.get(resolvedSelectedMarketId)
4579
+ if (hasOpenMarket) return "open";
4580
+ const hasUpcomingMarket = event.venueMarkets.some(
4581
+ (market) => market.status === import_hooks8.MarketStatus.unopened
4652
4582
  );
4653
- for (const market of orderedSourceMarkets) {
4654
- appendMarket(market);
4655
- }
4656
- for (const market of orderedRelatedMarkets) {
4657
- appendMarket(market);
4658
- }
4659
- return orderedClusterMarkets;
4660
- };
4661
-
4662
- // src/events/item/event-list-item.utils.ts
4663
- var resolveEventListItemEvent = (fetchedEvent) => {
4664
- if (!fetchedEvent) return void 0;
4665
- if (!fetchedEvent.venueMarkets || fetchedEvent.venueMarkets.length === 0) return void 0;
4666
- return fetchedEvent;
4667
- };
4668
- var normalizeProbability = (value) => {
4669
- if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
4670
- if (value < 0) return 0;
4671
- if (value > 1) return 1;
4672
- return value;
4583
+ if (hasUpcomingMarket) return "upcoming";
4584
+ const hasResolvedMarket = event.venueMarkets.some(
4585
+ (market) => market.status === import_hooks8.MarketStatus.resolved
4586
+ );
4587
+ if (hasResolvedMarket) return "resolved";
4588
+ if (event.status === import_hooks8.MarketStatus.open) return "open";
4589
+ if (event.status === import_hooks8.MarketStatus.unopened) return "upcoming";
4590
+ if (event.status === import_hooks8.MarketStatus.resolved) return "resolved";
4591
+ return "ignore";
4673
4592
  };
4674
- var formatWholePercent = (value) => {
4675
- return `${Math.round(value * 100)}%`;
4593
+ var splitEventsByLifecycle = (events) => {
4594
+ const groupedEvents = events.reduce(
4595
+ (grouped, event) => {
4596
+ const lifecycle = resolveEventLifecycle(event);
4597
+ if (lifecycle === "ignore") return grouped;
4598
+ grouped[lifecycle].push(event);
4599
+ return grouped;
4600
+ },
4601
+ {
4602
+ open: [],
4603
+ upcoming: [],
4604
+ resolved: []
4605
+ }
4606
+ );
4607
+ return {
4608
+ open: sortEventsByVolumeDesc(groupedEvents.open),
4609
+ upcoming: sortEventsByVolumeDesc(groupedEvents.upcoming),
4610
+ resolved: sortEventsByVolumeDesc(groupedEvents.resolved)
4611
+ };
4676
4612
  };
4677
- var hasDateLabel = (outcome) => {
4678
- return !!toDate(outcome.label);
4613
+ var mapEventToEventListItemEvent = (event) => {
4614
+ if (!event.venueMarkets || event.venueMarkets.length === 0) return null;
4615
+ return event;
4679
4616
  };
4680
- var isYesLabel = (label2) => label2.trim().toLowerCase() === "yes";
4681
- var isNoLabel = (label2) => label2.trim().toLowerCase() === "no";
4682
- var hasBinaryOutcomes = (outcomes) => {
4683
- return outcomes.some((o) => isYesLabel(o.label)) && outcomes.some((o) => isNoLabel(o.label));
4617
+ var filterEventsByTabValue = (events, _tabValue) => {
4618
+ return events;
4684
4619
  };
4685
- var sortYesFirst = (outcomes) => {
4686
- return [...outcomes].sort((a, b) => {
4687
- if (isYesLabel(a.label) && !isYesLabel(b.label)) return -1;
4688
- if (!isYesLabel(a.label) && isYesLabel(b.label)) return 1;
4689
- return 0;
4620
+ var sortCategoriesForNavigation = (categories) => {
4621
+ return [...categories].sort((left, right) => {
4622
+ const leftIsOther = left.name.trim().toLowerCase() === "other";
4623
+ const rightIsOther = right.name.trim().toLowerCase() === "other";
4624
+ if (leftIsOther === rightIsOther) return 0;
4625
+ return leftIsOther ? 1 : -1;
4690
4626
  });
4691
4627
  };
4692
- var resolveYesOutcome = (market) => {
4693
- return market.venueMarketOutcomes.find((outcome) => isYesLabel(outcome.label));
4694
- };
4695
- var resolveYesOutcomeProbability = (market) => {
4628
+ var resolveCategoryIdsFromPath = (path, fallbackCategoryIds) => {
4696
4629
  var _a;
4697
- return normalizeProbability((_a = resolveYesOutcome(market)) == null ? void 0 : _a.price);
4630
+ const deepest = (_a = path[path.length - 1]) == null ? void 0 : _a.id;
4631
+ if (deepest) return [deepest];
4632
+ return fallbackCategoryIds;
4698
4633
  };
4699
- var formatMarketProbabilityPercent = (value, formatPercent = formatWholePercent) => {
4700
- const probability = normalizeProbability(value);
4701
- if (probability == null) return "-";
4702
- const formattedValue = formatPercent(probability);
4703
- if (probability > 0 && formattedValue === formatPercent(0)) {
4704
- return "<1%";
4634
+ var resolveTabVenus = (tab, visibleVenues) => {
4635
+ const applyAllowList = (venues) => {
4636
+ if (!venues) {
4637
+ return visibleVenues && visibleVenues.length > 0 ? visibleVenues : void 0;
4638
+ }
4639
+ if (!visibleVenues) return venues;
4640
+ const filtered = venues.filter((v) => visibleVenues.includes(v));
4641
+ return filtered.length > 0 ? filtered : void 0;
4642
+ };
4643
+ if (!tab) return applyAllowList(void 0);
4644
+ if (tab.venues && tab.venues.length > 0) return applyAllowList(tab.venues);
4645
+ if (import_sdk.VENUES.includes(tab.value)) {
4646
+ return applyAllowList([tab.value]);
4705
4647
  }
4706
- return formattedValue;
4707
- };
4708
- var formatPriceGapPercent = (value) => {
4709
- if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
4710
- if (value < import_hooks8.MIN_PRICE_GAP_PCT) return void 0;
4711
- if (value > import_hooks8.MAX_PRICE_GAP_PCT) return void 0;
4712
- return `${Math.round(value)}%`;
4713
- };
4714
- var sortOutcomes = (outcomes) => {
4715
- if (outcomes.length <= 1) return outcomes;
4716
- if (hasBinaryOutcomes(outcomes)) {
4717
- return sortYesFirst(outcomes);
4718
- }
4719
- const now = Date.now();
4720
- if (outcomes.some(hasDateLabel)) {
4721
- return [...outcomes].sort((a, b) => {
4722
- var _a, _b, _c, _d;
4723
- const aDate = (_b = (_a = toDate(a.label)) == null ? void 0 : _a.getTime()) != null ? _b : 0;
4724
- const bDate = (_d = (_c = toDate(b.label)) == null ? void 0 : _c.getTime()) != null ? _d : 0;
4725
- return Math.abs(aDate - now) - Math.abs(bDate - now);
4726
- });
4727
- }
4728
- return [...outcomes].sort((a, b) => {
4729
- var _a, _b;
4730
- const aPrice = (_a = normalizeProbability(a.price)) != null ? _a : 0;
4731
- const bPrice = (_b = normalizeProbability(b.price)) != null ? _b : 0;
4732
- return bPrice - aPrice;
4733
- });
4734
- };
4735
- var compareVisibleOutcomeRows = (left, right) => {
4736
- var _a, _b;
4737
- const leftDate = toDate(resolveOutcomeTitle(left.outcome));
4738
- const rightDate = toDate(resolveOutcomeTitle(right.outcome));
4739
- if (leftDate && rightDate) {
4740
- return leftDate.getTime() - rightDate.getTime();
4741
- }
4742
- const leftProbability = (_a = normalizeProbability(left.outcome.price)) != null ? _a : -1;
4743
- const rightProbability = (_b = normalizeProbability(right.outcome.price)) != null ? _b : -1;
4744
- return rightProbability - leftProbability;
4745
- };
4746
- var shouldReplaceVisibleOutcome = (current, next) => {
4747
- var _a, _b;
4748
- const currentVolume = typeof current.market.volume === "number" ? current.market.volume : -1;
4749
- const nextVolume = typeof next.market.volume === "number" ? next.market.volume : -1;
4750
- if (currentVolume !== nextVolume) {
4751
- return nextVolume > currentVolume;
4752
- }
4753
- const currentProbability = (_a = normalizeProbability(current.outcome.price)) != null ? _a : -1;
4754
- const nextProbability = (_b = normalizeProbability(next.outcome.price)) != null ? _b : -1;
4755
- return nextProbability > currentProbability;
4756
- };
4757
- var resolveVisibleOutcomes = (venueMarkets) => {
4758
- const visibleOutcomesByLabel = /* @__PURE__ */ new Map();
4759
- venueMarkets.forEach((market) => {
4760
- const title2 = market.question;
4761
- const canonicalOutcome = sortOutcomes(market.venueMarketOutcomes)[0];
4762
- if (!canonicalOutcome) return;
4763
- const normalizedTitle = title2.trim().toLowerCase();
4764
- const nextVisibleOutcome = {
4765
- venue: market.venue,
4766
- market,
4767
- outcome: canonicalOutcome,
4768
- title: title2
4769
- };
4770
- const currentVisibleOutcome = visibleOutcomesByLabel.get(normalizedTitle);
4771
- if (!currentVisibleOutcome || shouldReplaceVisibleOutcome(currentVisibleOutcome, nextVisibleOutcome)) {
4772
- visibleOutcomesByLabel.set(normalizedTitle, nextVisibleOutcome);
4773
- }
4774
- });
4775
- return [...visibleOutcomesByLabel.values()].sort(compareVisibleOutcomeRows).slice(0, Math.max(1, 2));
4776
- };
4777
- var dedupeVenueMarketsById = (venueMarkets) => {
4778
- const seenClusterIds = /* @__PURE__ */ new Set();
4779
- return venueMarkets.filter((venueMarket) => {
4780
- var _a;
4781
- if (seenClusterIds.has(venueMarket.id)) {
4782
- return false;
4783
- }
4784
- seenClusterIds.add(venueMarket.id);
4785
- for (const sibling of (_a = venueMarket.matchedVenueMarkets) != null ? _a : []) {
4786
- seenClusterIds.add(sibling.id);
4787
- }
4788
- return true;
4789
- });
4790
- };
4791
- var resolveOutcomeTitle = (outcome) => {
4792
- var _a, _b;
4793
- return (_b = (_a = outcome == null ? void 0 : outcome.title) != null ? _a : outcome == null ? void 0 : outcome.label) == null ? void 0 : _b.trim();
4794
- };
4795
- var selectPrimaryVenueMarket = (venueMarkets) => {
4796
- if (venueMarkets.length === 0) return void 0;
4797
- if (venueMarkets.length === 1) return venueMarkets[0];
4798
- return [...venueMarkets].sort((a, b) => {
4799
- const aVolume = typeof a.volume === "number" ? a.volume : -1;
4800
- const bVolume = typeof b.volume === "number" ? b.volume : -1;
4801
- return bVolume - aVolume;
4802
- })[0];
4803
- };
4804
- var resolveTileImage = (event, primaryVenueMarket, imageOverride) => {
4805
- if (typeof imageOverride === "string" && imageOverride.trim()) {
4806
- return imageOverride;
4807
- }
4808
- if (typeof event.image === "string" && event.image.trim()) {
4809
- return event.image;
4810
- }
4811
- if (typeof (primaryVenueMarket == null ? void 0 : primaryVenueMarket.image) === "string" && primaryVenueMarket.image.trim()) {
4812
- return primaryVenueMarket.image;
4813
- }
4814
- return void 0;
4815
- };
4816
- var formatCountLabel = (count, singular, plural) => {
4817
- return `${count} ${count === 1 ? singular : plural}`;
4818
- };
4819
- var getVenueSummary = (venueMarkets, options) => {
4820
- const normalizedVenueMarkets = normalizeVenueMarketCluster(venueMarkets);
4821
- const tradableVenues = options == null ? void 0 : options.tradableVenues;
4822
- const isVenueTradable = (venue) => {
4823
- if (tradableVenues == null) return true;
4824
- return tradableVenues.has(venue);
4825
- };
4826
- const uniqueVenues = Array.from(
4827
- new Set(
4828
- normalizedVenueMarkets.filter((market) => isVenueTradable(market.venue)).map((market) => market.venue)
4829
- )
4830
- );
4831
- return {
4832
- marketCount: normalizedVenueMarkets.length,
4833
- venueCount: uniqueVenues.length,
4834
- singleVenue: uniqueVenues.length === 1 ? uniqueVenues[0] : void 0
4835
- };
4836
- };
4837
- var resolveVenueLabel = (venue, venueInfo, labels) => {
4838
- var _a, _b;
4839
- if (!venue) return labels.eventItem.venueSingular;
4840
- return (_b = (_a = venueInfo == null ? void 0 : venueInfo[venue]) == null ? void 0 : _a.label) != null ? _b : labels.venues[venue];
4841
- };
4842
- var resolveDisplayVolume = (eventVolume, venueMarkets) => {
4843
- if (typeof eventVolume === "number" && eventVolume > 0) return eventVolume;
4844
- const clusterMarkets = normalizeVenueMarketCluster(venueMarkets);
4845
- const marketSum = clusterMarkets.reduce(
4846
- (acc, m) => acc + (typeof m.volume === "number" ? m.volume : 0),
4847
- 0
4848
- );
4849
- if (marketSum > 0) return marketSum;
4850
- return void 0;
4851
- };
4852
-
4853
- // src/events/list/event-list.utils.ts
4854
- var filterOpenEvents = (events) => {
4855
- return events.filter((event) => {
4856
- var _a;
4857
- if (event.status && event.status !== import_hooks9.MarketStatus.open) return false;
4858
- const openMarkets = (_a = event.venueMarkets) == null ? void 0 : _a.filter(
4859
- (m) => !m.status || m.status === import_hooks9.MarketStatus.open
4860
- );
4861
- if (!openMarkets || openMarkets.length === 0) return false;
4862
- return true;
4863
- });
4864
- };
4865
- var resolveEventVolume = (event) => {
4866
- if (typeof event.volume === "number" && Number.isFinite(event.volume)) {
4867
- return event.volume;
4868
- }
4869
- return event.venueMarkets.reduce((maxVolume, market) => {
4870
- if (typeof market.volume !== "number" || !Number.isFinite(market.volume)) {
4871
- return maxVolume;
4872
- }
4873
- return Math.max(maxVolume, market.volume);
4874
- }, -1);
4875
- };
4876
- var sortEventsByVolumeDesc = (events, sortEventsBy) => {
4877
- return events.map((event, index) => ({
4878
- event,
4879
- index,
4880
- volume: resolveEventVolume(event)
4881
- })).sort((left, right) => {
4882
- if (sortEventsBy === "volume") {
4883
- if (left.volume !== right.volume) {
4884
- return right.volume - left.volume;
4885
- }
4886
- }
4887
- return left.index - right.index;
4888
- }).map(({ event }) => event);
4889
- };
4890
- var resolveEventLifecycle = (event) => {
4891
- const hasOpenMarket = event.venueMarkets.some(
4892
- (market) => !market.status || market.status === import_hooks9.MarketStatus.open
4893
- );
4894
- if (hasOpenMarket) return "open";
4895
- const hasUpcomingMarket = event.venueMarkets.some(
4896
- (market) => market.status === import_hooks9.MarketStatus.unopened
4897
- );
4898
- if (hasUpcomingMarket) return "upcoming";
4899
- const hasResolvedMarket = event.venueMarkets.some(
4900
- (market) => market.status === import_hooks9.MarketStatus.resolved
4901
- );
4902
- if (hasResolvedMarket) return "resolved";
4903
- if (event.status === import_hooks9.MarketStatus.open) return "open";
4904
- if (event.status === import_hooks9.MarketStatus.unopened) return "upcoming";
4905
- if (event.status === import_hooks9.MarketStatus.resolved) return "resolved";
4906
- return "ignore";
4907
- };
4908
- var splitEventsByLifecycle = (events) => {
4909
- const groupedEvents = events.reduce(
4910
- (grouped, event) => {
4911
- const lifecycle = resolveEventLifecycle(event);
4912
- if (lifecycle === "ignore") return grouped;
4913
- grouped[lifecycle].push(event);
4914
- return grouped;
4915
- },
4916
- {
4917
- open: [],
4918
- upcoming: [],
4919
- resolved: []
4920
- }
4921
- );
4922
- return {
4923
- open: sortEventsByVolumeDesc(groupedEvents.open),
4924
- upcoming: sortEventsByVolumeDesc(groupedEvents.upcoming),
4925
- resolved: sortEventsByVolumeDesc(groupedEvents.resolved)
4926
- };
4927
- };
4928
- var mapEventToEventListItemEvent = (event) => {
4929
- if (!event.venueMarkets || event.venueMarkets.length === 0) return null;
4930
- return event;
4931
- };
4932
- var filterEventsByTabValue = (events, _tabValue) => {
4933
- return events;
4934
- };
4935
- var sortMarketsByYesOddsDesc = (markets) => {
4936
- return markets.map((market, index) => ({
4937
- market,
4938
- index,
4939
- yesProbability: resolveYesOutcomeProbability(market)
4940
- })).sort((left, right) => {
4941
- const leftHasYesProbability = left.yesProbability != null;
4942
- const rightHasYesProbability = right.yesProbability != null;
4943
- if (leftHasYesProbability !== rightHasYesProbability) {
4944
- return leftHasYesProbability ? -1 : 1;
4945
- }
4946
- if (left.yesProbability != null && right.yesProbability != null) {
4947
- if (left.yesProbability !== right.yesProbability) {
4948
- return right.yesProbability - left.yesProbability;
4949
- }
4950
- }
4951
- return left.index - right.index;
4952
- }).map(({ market }) => market);
4953
- };
4954
- var resolveMarketVolume = (market) => {
4955
- if (typeof market.volume !== "number") return 0;
4956
- if (!Number.isFinite(market.volume)) return 0;
4957
- return market.volume;
4958
- };
4959
- var sortMarketsByVolumeDesc = (markets) => {
4960
- return markets.map((market, index) => ({
4961
- market,
4962
- index,
4963
- volume: resolveMarketVolume(market)
4964
- })).sort((left, right) => {
4965
- if (left.volume !== right.volume) {
4966
- return right.volume - left.volume;
4967
- }
4968
- return left.index - right.index;
4969
- }).map(({ market }) => market);
4970
- };
4971
- var sortCategoriesForNavigation = (categories) => {
4972
- return [...categories].sort((left, right) => {
4973
- const leftIsOther = left.name.trim().toLowerCase() === "other";
4974
- const rightIsOther = right.name.trim().toLowerCase() === "other";
4975
- if (leftIsOther === rightIsOther) return 0;
4976
- return leftIsOther ? 1 : -1;
4977
- });
4978
- };
4979
- var resolveCategoryIdsFromPath = (path, fallbackCategoryIds) => {
4980
- var _a;
4981
- const deepest = (_a = path[path.length - 1]) == null ? void 0 : _a.id;
4982
- if (deepest) return [deepest];
4983
- return fallbackCategoryIds;
4984
- };
4985
- var resolveTabVenus = (tab, visibleVenues) => {
4986
- const applyAllowList = (venues) => {
4987
- if (!venues) {
4988
- return visibleVenues && visibleVenues.length > 0 ? visibleVenues : void 0;
4989
- }
4990
- if (!visibleVenues) return venues;
4991
- const filtered = venues.filter((v) => visibleVenues.includes(v));
4992
- return filtered.length > 0 ? filtered : void 0;
4993
- };
4994
- if (!tab) return applyAllowList(void 0);
4995
- if (tab.venues && tab.venues.length > 0) return applyAllowList(tab.venues);
4996
- if (import_sdk.VENUES.includes(tab.value)) {
4997
- return applyAllowList([tab.value]);
4998
- }
4999
- return applyAllowList(void 0);
4648
+ return applyAllowList(void 0);
5000
4649
  };
5001
4650
 
5002
4651
  // src/primitives/remote-image/index.tsx
5003
- var import_hooks11 = require("@agg-build/hooks");
4652
+ var import_hooks10 = require("@agg-build/hooks");
5004
4653
  var import_react6 = require("react");
5005
4654
 
5006
4655
  // src/primitives/skeleton/skeleton-block.tsx
5007
- var import_hooks10 = require("@agg-build/hooks");
4656
+ var import_hooks9 = require("@agg-build/hooks");
5008
4657
  var import_jsx_runtime93 = require("react/jsx-runtime");
5009
4658
  var SkeletonBlock = ({ className }) => {
5010
4659
  const {
5011
4660
  features: { enableAnimations }
5012
- } = (0, import_hooks10.useSdkUiConfig)();
4661
+ } = (0, import_hooks9.useSdkUiConfig)();
5013
4662
  return /* @__PURE__ */ (0, import_jsx_runtime93.jsx)(
5014
4663
  "div",
5015
4664
  {
@@ -5053,7 +4702,7 @@ var RemoteImage = ({
5053
4702
  }) => {
5054
4703
  const {
5055
4704
  general: { theme }
5056
- } = (0, import_hooks11.useSdkUiConfig)();
4705
+ } = (0, import_hooks10.useSdkUiConfig)();
5057
4706
  const isDarkTheme = theme === "dark";
5058
4707
  const [status, setStatus] = (0, import_react6.useState)(
5059
4708
  () => resolveRemoteImageStatusFromSrc(src)
@@ -5127,17 +4776,17 @@ var RemoteImage = ({
5127
4776
  RemoteImage.displayName = "RemoteImage";
5128
4777
 
5129
4778
  // src/primitives/skeleton/views/event-list-skeleton-view.tsx
5130
- var import_hooks13 = require("@agg-build/hooks");
4779
+ var import_hooks12 = require("@agg-build/hooks");
5131
4780
 
5132
4781
  // src/primitives/skeleton/views/event-list-item-skeleton-view.tsx
5133
- var import_hooks12 = require("@agg-build/hooks");
4782
+ var import_hooks11 = require("@agg-build/hooks");
5134
4783
  var import_jsx_runtime95 = require("react/jsx-runtime");
5135
4784
  var EventListItemSkeletonView = ({
5136
4785
  className,
5137
4786
  ariaLabel,
5138
4787
  isStandalone = false
5139
4788
  }) => {
5140
- const labels = (0, import_hooks12.useLabels)();
4789
+ const labels = (0, import_hooks11.useLabels)();
5141
4790
  const outcomeTitleWidths = ["max-w-40", "max-w-[200px]"];
5142
4791
  return /* @__PURE__ */ (0, import_jsx_runtime95.jsxs)(
5143
4792
  Card,
@@ -5203,7 +4852,7 @@ var EventListSkeletonView = ({
5203
4852
  ariaLabel,
5204
4853
  withSidebar
5205
4854
  }) => {
5206
- const labels = (0, import_hooks13.useLabels)();
4855
+ const labels = (0, import_hooks12.useLabels)();
5207
4856
  return /* @__PURE__ */ (0, import_jsx_runtime96.jsxs)(
5208
4857
  "section",
5209
4858
  {
@@ -5242,7 +4891,7 @@ var EventListSkeletonView = ({
5242
4891
  EventListSkeletonView.displayName = "EventListSkeletonView";
5243
4892
 
5244
4893
  // src/primitives/skeleton/views/event-list-item-details-skeleton-view.tsx
5245
- var import_hooks14 = require("@agg-build/hooks");
4894
+ var import_hooks13 = require("@agg-build/hooks");
5246
4895
 
5247
4896
  // src/events/item-details/event-list-item-details.constants.ts
5248
4897
  var detailsBaseCardClassName = "w-full gap-6 p-5 md:gap-8";
@@ -5253,7 +4902,7 @@ var EventListItemDetailsSkeletonView = ({
5253
4902
  className,
5254
4903
  ariaLabel
5255
4904
  }) => {
5256
- const labels = (0, import_hooks14.useLabels)();
4905
+ const labels = (0, import_hooks13.useLabels)();
5257
4906
  return /* @__PURE__ */ (0, import_jsx_runtime97.jsxs)(
5258
4907
  Card,
5259
4908
  {
@@ -5290,7 +4939,7 @@ var EventListItemDetailsSkeletonView = ({
5290
4939
  EventListItemDetailsSkeletonView.displayName = "EventListItemDetailsSkeletonView";
5291
4940
 
5292
4941
  // src/primitives/skeleton/views/market-details-skeleton-view.tsx
5293
- var import_hooks15 = require("@agg-build/hooks");
4942
+ var import_hooks14 = require("@agg-build/hooks");
5294
4943
 
5295
4944
  // src/events/market-details/market-details.constants.ts
5296
4945
  var marketDetailsBaseCardClassName = "w-full overflow-hidden rounded-agg-lg border border-agg-separator bg-agg-secondary text-agg-foreground shadow-none hover:shadow-none";
@@ -5386,7 +5035,7 @@ var MarketDetailsSkeletonView = ({
5386
5035
  ariaLabel,
5387
5036
  isDetailed
5388
5037
  }) => {
5389
- const labels = (0, import_hooks15.useLabels)();
5038
+ const labels = (0, import_hooks14.useLabels)();
5390
5039
  return /* @__PURE__ */ (0, import_jsx_runtime98.jsxs)(
5391
5040
  Card,
5392
5041
  {
@@ -5487,7 +5136,7 @@ var PlaceOrderSkeletonView = ({
5487
5136
  PlaceOrderSkeletonView.displayName = "PlaceOrderSkeletonView";
5488
5137
 
5489
5138
  // src/primitives/skeleton/views/search-skeleton-view.tsx
5490
- var import_hooks16 = require("@agg-build/hooks");
5139
+ var import_hooks15 = require("@agg-build/hooks");
5491
5140
  var import_jsx_runtime100 = require("react/jsx-runtime");
5492
5141
  var SearchSkeletonRow = () => {
5493
5142
  return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)("div", { className: "flex w-full items-center gap-6 px-5 py-4", children: [
@@ -5513,7 +5162,7 @@ var SearchSkeletonRow = () => {
5513
5162
  ] });
5514
5163
  };
5515
5164
  var SearchSkeletonView = ({ className, ariaLabel }) => {
5516
- const labels = (0, import_hooks16.useLabels)();
5165
+ const labels = (0, import_hooks15.useLabels)();
5517
5166
  return /* @__PURE__ */ (0, import_jsx_runtime100.jsxs)(
5518
5167
  "div",
5519
5168
  {
@@ -5535,13 +5184,13 @@ var SearchSkeletonView = ({ className, ariaLabel }) => {
5535
5184
  SearchSkeletonView.displayName = "SearchSkeletonView";
5536
5185
 
5537
5186
  // src/primitives/skeleton/views/settlement-skeleton-view.tsx
5538
- var import_hooks17 = require("@agg-build/hooks");
5187
+ var import_hooks16 = require("@agg-build/hooks");
5539
5188
  var import_jsx_runtime101 = require("react/jsx-runtime");
5540
5189
  var SettlementSkeletonView = ({
5541
5190
  className,
5542
5191
  ariaLabel
5543
5192
  }) => {
5544
- const labels = (0, import_hooks17.useLabels)();
5193
+ const labels = (0, import_hooks16.useLabels)();
5545
5194
  return /* @__PURE__ */ (0, import_jsx_runtime101.jsxs)(
5546
5195
  Card,
5547
5196
  {
@@ -5755,7 +5404,7 @@ var Skeleton = ({
5755
5404
  Skeleton.displayName = "Skeleton";
5756
5405
 
5757
5406
  // src/primitives/venue-logo/index.tsx
5758
- var import_hooks26 = require("@agg-build/hooks");
5407
+ var import_hooks25 = require("@agg-build/hooks");
5759
5408
 
5760
5409
  // src/primitives/venue-logo/venue-logo.constants.ts
5761
5410
  var import_sdk10 = require("@agg-build/sdk");
@@ -5808,7 +5457,7 @@ var DefaultVenueIcon = (_a) => {
5808
5457
  };
5809
5458
 
5810
5459
  // src/primitives/venue-logo/svg/logo-hyperliquid.tsx
5811
- var import_hooks18 = require("@agg-build/hooks");
5460
+ var import_hooks17 = require("@agg-build/hooks");
5812
5461
  var import_sdk2 = require("@agg-build/sdk");
5813
5462
  var import_jsx_runtime106 = require("react/jsx-runtime");
5814
5463
  var LogoHyperliquidIcon = (_a) => {
@@ -5826,7 +5475,7 @@ var LogoHyperliquidIcon = (_a) => {
5826
5475
  var _a2;
5827
5476
  const {
5828
5477
  general: { theme }
5829
- } = (0, import_hooks18.useAggUiConfig)();
5478
+ } = (0, import_hooks17.useAggUiConfig)();
5830
5479
  const isDarkTheme = theme === "dark";
5831
5480
  const primaryColor = resolveLogoPrimaryColor({
5832
5481
  brandColor: (_a2 = resolveVenueLineColor(import_sdk2.Venue.hyperliquid, isDarkTheme)) != null ? _a2 : "#97FCE4",
@@ -5856,7 +5505,7 @@ var LogoHyperliquidIcon = (_a) => {
5856
5505
  LogoHyperliquidIcon.displayName = "LogoHyperliquidIcon";
5857
5506
 
5858
5507
  // src/primitives/venue-logo/svg/logo-kalshi.tsx
5859
- var import_hooks19 = require("@agg-build/hooks");
5508
+ var import_hooks18 = require("@agg-build/hooks");
5860
5509
  var import_sdk3 = require("@agg-build/sdk");
5861
5510
  var import_jsx_runtime107 = require("react/jsx-runtime");
5862
5511
  var LogoKalshiIcon = (_a) => {
@@ -5874,7 +5523,7 @@ var LogoKalshiIcon = (_a) => {
5874
5523
  var _a2;
5875
5524
  const {
5876
5525
  general: { theme }
5877
- } = (0, import_hooks19.useAggUiConfig)();
5526
+ } = (0, import_hooks18.useAggUiConfig)();
5878
5527
  const isDarkTheme = theme === "dark";
5879
5528
  const primaryColor = resolveLogoPrimaryColor({
5880
5529
  brandColor: (_a2 = resolveVenueLineColor(import_sdk3.Venue.kalshi, isDarkTheme)) != null ? _a2 : "#18C590",
@@ -5904,7 +5553,7 @@ var LogoKalshiIcon = (_a) => {
5904
5553
  LogoKalshiIcon.displayName = "LogoKalshiIcon";
5905
5554
 
5906
5555
  // src/primitives/venue-logo/svg/logo-limitless.tsx
5907
- var import_hooks20 = require("@agg-build/hooks");
5556
+ var import_hooks19 = require("@agg-build/hooks");
5908
5557
  var import_sdk4 = require("@agg-build/sdk");
5909
5558
  var import_jsx_runtime108 = require("react/jsx-runtime");
5910
5559
  var LogoLimitlessIcon = (_a) => {
@@ -5922,7 +5571,7 @@ var LogoLimitlessIcon = (_a) => {
5922
5571
  var _a2;
5923
5572
  const {
5924
5573
  general: { theme }
5925
- } = (0, import_hooks20.useAggUiConfig)();
5574
+ } = (0, import_hooks19.useAggUiConfig)();
5926
5575
  const isDarkTheme = theme === "dark";
5927
5576
  const primaryColor = resolveLogoPrimaryColor({
5928
5577
  brandColor: (_a2 = resolveVenueLineColor(import_sdk4.Venue.limitless, isDarkTheme)) != null ? _a2 : "#c4fe00",
@@ -5952,7 +5601,7 @@ var LogoLimitlessIcon = (_a) => {
5952
5601
  LogoLimitlessIcon.displayName = "LogoLimitlessIcon";
5953
5602
 
5954
5603
  // src/primitives/venue-logo/svg/logo-myriad.tsx
5955
- var import_hooks21 = require("@agg-build/hooks");
5604
+ var import_hooks20 = require("@agg-build/hooks");
5956
5605
  var import_sdk5 = require("@agg-build/sdk");
5957
5606
  var import_jsx_runtime109 = require("react/jsx-runtime");
5958
5607
  var LogoMyriadIcon = (_a) => {
@@ -5970,7 +5619,7 @@ var LogoMyriadIcon = (_a) => {
5970
5619
  var _a2;
5971
5620
  const {
5972
5621
  general: { theme }
5973
- } = (0, import_hooks21.useAggUiConfig)();
5622
+ } = (0, import_hooks20.useAggUiConfig)();
5974
5623
  const isDarkTheme = theme === "dark";
5975
5624
  const primaryColor = resolveLogoPrimaryColor({
5976
5625
  brandColor: (_a2 = resolveVenueLineColor(import_sdk5.Venue.myriad, isDarkTheme)) != null ? _a2 : "#2E5CFF",
@@ -6000,7 +5649,7 @@ var LogoMyriadIcon = (_a) => {
6000
5649
  LogoMyriadIcon.displayName = "LogoMyriadIcon";
6001
5650
 
6002
5651
  // src/primitives/venue-logo/svg/logo-opinion.tsx
6003
- var import_hooks22 = require("@agg-build/hooks");
5652
+ var import_hooks21 = require("@agg-build/hooks");
6004
5653
  var import_sdk6 = require("@agg-build/sdk");
6005
5654
  var import_jsx_runtime110 = require("react/jsx-runtime");
6006
5655
  var LogoOpinionIcon = (_a) => {
@@ -6018,7 +5667,7 @@ var LogoOpinionIcon = (_a) => {
6018
5667
  var _a2;
6019
5668
  const {
6020
5669
  general: { theme }
6021
- } = (0, import_hooks22.useAggUiConfig)();
5670
+ } = (0, import_hooks21.useAggUiConfig)();
6022
5671
  const isDarkTheme = theme === "dark";
6023
5672
  const primaryColor = resolveLogoPrimaryColor({
6024
5673
  brandColor: (_a2 = resolveVenueLineColor(import_sdk6.Venue.opinion, isDarkTheme)) != null ? _a2 : "#ec5e26",
@@ -6048,7 +5697,7 @@ var LogoOpinionIcon = (_a) => {
6048
5697
  LogoOpinionIcon.displayName = "LogoOpinionIcon";
6049
5698
 
6050
5699
  // src/primitives/venue-logo/svg/logo-polymarket.tsx
6051
- var import_hooks23 = require("@agg-build/hooks");
5700
+ var import_hooks22 = require("@agg-build/hooks");
6052
5701
  var import_sdk7 = require("@agg-build/sdk");
6053
5702
  var import_jsx_runtime111 = require("react/jsx-runtime");
6054
5703
  var LogoPolymarketIcon = (_a) => {
@@ -6066,7 +5715,7 @@ var LogoPolymarketIcon = (_a) => {
6066
5715
  var _a2;
6067
5716
  const {
6068
5717
  general: { theme }
6069
- } = (0, import_hooks23.useAggUiConfig)();
5718
+ } = (0, import_hooks22.useAggUiConfig)();
6070
5719
  const isDarkTheme = theme === "dark";
6071
5720
  const primaryColor = resolveLogoPrimaryColor({
6072
5721
  brandColor: (_a2 = resolveVenueLineColor(import_sdk7.Venue.polymarket, isDarkTheme)) != null ? _a2 : "#2E5CFF",
@@ -6096,7 +5745,7 @@ var LogoPolymarketIcon = (_a) => {
6096
5745
  LogoPolymarketIcon.displayName = "LogoPolymarketIcon";
6097
5746
 
6098
5747
  // src/primitives/venue-logo/svg/logo-predict.tsx
6099
- var import_hooks24 = require("@agg-build/hooks");
5748
+ var import_hooks23 = require("@agg-build/hooks");
6100
5749
  var import_sdk8 = require("@agg-build/sdk");
6101
5750
  var import_jsx_runtime112 = require("react/jsx-runtime");
6102
5751
  var LogoPredictIcon = (_a) => {
@@ -6114,7 +5763,7 @@ var LogoPredictIcon = (_a) => {
6114
5763
  var _a2;
6115
5764
  const {
6116
5765
  general: { theme }
6117
- } = (0, import_hooks24.useAggUiConfig)();
5766
+ } = (0, import_hooks23.useAggUiConfig)();
6118
5767
  const isDarkTheme = theme === "dark";
6119
5768
  const primaryColor = resolveLogoPrimaryColor({
6120
5769
  brandColor: (_a2 = resolveVenueLineColor(import_sdk8.Venue.predict, isDarkTheme)) != null ? _a2 : "#705bf6",
@@ -6146,7 +5795,7 @@ var LogoPredictIcon = (_a) => {
6146
5795
  LogoPredictIcon.displayName = "LogoPredictIcon";
6147
5796
 
6148
5797
  // src/primitives/venue-logo/svg/logo-probable.tsx
6149
- var import_hooks25 = require("@agg-build/hooks");
5798
+ var import_hooks24 = require("@agg-build/hooks");
6150
5799
  var import_sdk9 = require("@agg-build/sdk");
6151
5800
  var import_jsx_runtime113 = require("react/jsx-runtime");
6152
5801
  var LogoProbableIcon = (_a) => {
@@ -6164,7 +5813,7 @@ var LogoProbableIcon = (_a) => {
6164
5813
  var _a2;
6165
5814
  const {
6166
5815
  general: { theme }
6167
- } = (0, import_hooks25.useAggUiConfig)();
5816
+ } = (0, import_hooks24.useAggUiConfig)();
6168
5817
  const isDarkTheme = theme === "dark";
6169
5818
  const primaryColor = resolveLogoPrimaryColor({
6170
5819
  brandColor: (_a2 = resolveVenueLineColor(import_sdk9.Venue.probable, isDarkTheme)) != null ? _a2 : "#EC4899",
@@ -6223,144 +5872,455 @@ var venueLogoUrlRegistry = {
6223
5872
  [import_sdk10.Venue.myriad]: `${VENUE_LOGO_BASE_URL}/myriad.png`,
6224
5873
  [import_sdk10.Venue.hyperliquid]: `${VENUE_LOGO_BASE_URL}/hyperliquid.png`
6225
5874
  };
6226
- var venueLogoLabels = {
6227
- [import_sdk10.Venue.kalshi]: "Kalshi",
6228
- [import_sdk10.Venue.limitless]: "Limitless",
6229
- [import_sdk10.Venue.opinion]: "Opinion",
6230
- [import_sdk10.Venue.polymarket]: "Polymarket",
6231
- [import_sdk10.Venue.predict]: "Predict",
6232
- [import_sdk10.Venue.probable]: "Probable",
6233
- [import_sdk10.Venue.myriad]: "Myriad",
6234
- [import_sdk10.Venue.hyperliquid]: "Hyperliquid"
5875
+ var venueLogoLabels = {
5876
+ [import_sdk10.Venue.kalshi]: "Kalshi",
5877
+ [import_sdk10.Venue.limitless]: "Limitless",
5878
+ [import_sdk10.Venue.opinion]: "Opinion",
5879
+ [import_sdk10.Venue.polymarket]: "Polymarket",
5880
+ [import_sdk10.Venue.predict]: "Predict",
5881
+ [import_sdk10.Venue.probable]: "Probable",
5882
+ [import_sdk10.Venue.myriad]: "Myriad",
5883
+ [import_sdk10.Venue.hyperliquid]: "Hyperliquid"
5884
+ };
5885
+ var DEFAULT_VENUE_LABEL = "Market";
5886
+ var DEFAULT_VENUE_LOGO_URL = `${VENUE_LOGO_BASE_URL}/default.png`;
5887
+ var venueLogoNames = Object.keys(venueLogoRegistry);
5888
+ var sizeClasses2 = {
5889
+ small: "h-4 w-4",
5890
+ medium: "h-6 w-6",
5891
+ large: "h-8 w-8"
5892
+ };
5893
+ var lineColorByVenue = {
5894
+ light: {
5895
+ [import_sdk10.Venue.kalshi]: "#00D295",
5896
+ [import_sdk10.Venue.limitless]: "#000000",
5897
+ [import_sdk10.Venue.opinion]: "#000000",
5898
+ [import_sdk10.Venue.polymarket]: "#2E5CFF",
5899
+ [import_sdk10.Venue.predict]: "#6D57F8",
5900
+ [import_sdk10.Venue.probable]: "#F05923",
5901
+ [import_sdk10.Venue.myriad]: "#000000",
5902
+ [import_sdk10.Venue.hyperliquid]: "#97FCE4"
5903
+ },
5904
+ dark: {
5905
+ [import_sdk10.Venue.kalshi]: "#00D295",
5906
+ [import_sdk10.Venue.limitless]: "#FFFFFF",
5907
+ [import_sdk10.Venue.opinion]: "#FFFFFF",
5908
+ [import_sdk10.Venue.polymarket]: "#2E5CFF",
5909
+ [import_sdk10.Venue.predict]: "#6D57F8",
5910
+ [import_sdk10.Venue.probable]: "#F05923",
5911
+ [import_sdk10.Venue.myriad]: "#FFFFFF",
5912
+ [import_sdk10.Venue.hyperliquid]: "#97FCE4"
5913
+ }
5914
+ };
5915
+ var resolveVenueLineColor = (venue, isDarkTheme) => {
5916
+ return lineColorByVenue[isDarkTheme ? "dark" : "light"][venue];
5917
+ };
5918
+ var DEFAULT_VENUE_COLOR = "#94a3b8";
5919
+ var fallbackLineColors = [
5920
+ DEFAULT_VENUE_COLOR,
5921
+ "#7AF2D3",
5922
+ "#C14BFF",
5923
+ "#FFB703",
5924
+ "#3A86FF",
5925
+ "#8AC926",
5926
+ "#FF6F61",
5927
+ "#6A4C93",
5928
+ "#00BBF9",
5929
+ "#F15BB5",
5930
+ "#2EC4B6"
5931
+ ];
5932
+
5933
+ // src/primitives/venue-logo/venue-logo.utils.ts
5934
+ var resolveVenueLogoLabel = ({
5935
+ ariaLabel,
5936
+ labels,
5937
+ venue,
5938
+ venueFallbackLabels
5939
+ }) => {
5940
+ var _a;
5941
+ return (_a = ariaLabel != null ? ariaLabel : labels.venues[venue]) != null ? _a : venueFallbackLabels[venue];
5942
+ };
5943
+ var resolveVenueLogoIsColor = ({
5944
+ isColor,
5945
+ isMonochromatic
5946
+ }) => {
5947
+ return isMonochromatic ? false : isColor;
5948
+ };
5949
+
5950
+ // src/primitives/venue-logo/index.tsx
5951
+ var import_jsx_runtime114 = require("react/jsx-runtime");
5952
+ var VenueLogo = ({
5953
+ venue,
5954
+ variant = "icon",
5955
+ isColor = true,
5956
+ isMonochromatic = false,
5957
+ color,
5958
+ size = "medium",
5959
+ className,
5960
+ ariaLabel,
5961
+ title: title2
5962
+ }) => {
5963
+ var _a, _b;
5964
+ const labels = (0, import_hooks25.useLabels)();
5965
+ const sizeClass = sizeClasses2[size];
5966
+ const resolvedLabel = resolveVenueLogoLabel({
5967
+ ariaLabel,
5968
+ labels,
5969
+ venue,
5970
+ venueFallbackLabels: venueLogoLabels
5971
+ });
5972
+ const isUnknownVenue = !(venue in venueLogoRegistry);
5973
+ if (isUnknownVenue && process.env.NODE_ENV === "development") {
5974
+ console.warn(`[AggUI] Unknown venue "${venue}" \u2014 using default logo`);
5975
+ }
5976
+ if (variant === "logo") {
5977
+ return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
5978
+ RemoteImage,
5979
+ {
5980
+ src: (_a = venueLogoUrlRegistry[venue]) != null ? _a : DEFAULT_VENUE_LOGO_URL,
5981
+ alt: resolvedLabel || DEFAULT_VENUE_LABEL,
5982
+ title: title2,
5983
+ className: cn("shrink-0 rounded-agg-lg object-cover", sizeClass, className)
5984
+ }
5985
+ );
5986
+ }
5987
+ const Component2 = (_b = venueLogoRegistry[venue]) != null ? _b : DefaultVenueIcon;
5988
+ const resolvedIsColor = resolveVenueLogoIsColor({
5989
+ isColor,
5990
+ isMonochromatic
5991
+ });
5992
+ return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
5993
+ Component2,
5994
+ {
5995
+ className: cn("group/agg-venue-logo", "shrink-0", sizeClass, className),
5996
+ isColor: resolvedIsColor,
5997
+ color,
5998
+ "aria-label": resolvedLabel || DEFAULT_VENUE_LABEL,
5999
+ title: title2
6000
+ }
6001
+ );
6002
+ };
6003
+ VenueLogo.displayName = "VenueLogo";
6004
+
6005
+ // src/primitives/search/search.constants.ts
6006
+ var DEFAULT_SEARCH_LIMIT = 5;
6007
+ var MIN_SEARCH_LENGTH = 3;
6008
+ var SEARCH_DEBOUNCE_MS = 300;
6009
+
6010
+ // src/primitives/search/search.utils.ts
6011
+ var import_sdk11 = require("@agg-build/sdk");
6012
+ var import_dayjs2 = __toESM(require("dayjs"));
6013
+
6014
+ // src/events/item/event-list-item.utils.ts
6015
+ var import_hooks26 = require("@agg-build/hooks");
6016
+
6017
+ // src/events/shared/venue-market-cluster.ts
6018
+ var toNonEmptyString = (value) => {
6019
+ if (typeof value !== "string") return void 0;
6020
+ const trimmedValue = value.trim();
6021
+ return trimmedValue ? trimmedValue : void 0;
6022
+ };
6023
+ var addGraphEdge = (adjacencyById, fromMarketId, toMarketId) => {
6024
+ var _a, _b;
6025
+ if (fromMarketId === toMarketId) return;
6026
+ const fromNeighbors = (_a = adjacencyById.get(fromMarketId)) != null ? _a : /* @__PURE__ */ new Set();
6027
+ fromNeighbors.add(toMarketId);
6028
+ adjacencyById.set(fromMarketId, fromNeighbors);
6029
+ const toNeighbors = (_b = adjacencyById.get(toMarketId)) != null ? _b : /* @__PURE__ */ new Set();
6030
+ toNeighbors.add(fromMarketId);
6031
+ adjacencyById.set(toMarketId, toNeighbors);
6032
+ };
6033
+ var dedupeSourceMarketsById = (markets) => {
6034
+ const seenMarketIds = /* @__PURE__ */ new Set();
6035
+ return markets.filter((market) => {
6036
+ if (seenMarketIds.has(market.id)) {
6037
+ return false;
6038
+ }
6039
+ seenMarketIds.add(market.id);
6040
+ return true;
6041
+ });
6042
+ };
6043
+ var collectDirectRelationMarkets = (market) => {
6044
+ var _a, _b, _c;
6045
+ const relationMarkets = [];
6046
+ const seenRelationIds = /* @__PURE__ */ new Set();
6047
+ const addRelationMarket = (relationMarket) => {
6048
+ if (!relationMarket) return;
6049
+ if (seenRelationIds.has(relationMarket.id)) return;
6050
+ seenRelationIds.add(relationMarket.id);
6051
+ relationMarkets.push(relationMarket);
6052
+ };
6053
+ for (const matchedVenueMarket of (_a = market.matchedVenueMarkets) != null ? _a : []) {
6054
+ addRelationMarket(matchedVenueMarket);
6055
+ }
6056
+ addRelationMarket(
6057
+ (_c = (_b = market.matchEntry) == null ? void 0 : _b.targetVenueMarket) != null ? _c : void 0
6058
+ );
6059
+ return relationMarkets;
6060
+ };
6061
+ var collectUniqueRelatedMarkets = (markets, sourceMarketsById) => {
6062
+ const relatedMarketsById = /* @__PURE__ */ new Map();
6063
+ for (const market of markets) {
6064
+ for (const relatedMarket of collectDirectRelationMarkets(market)) {
6065
+ if (sourceMarketsById.has(relatedMarket.id) || relatedMarketsById.has(relatedMarket.id)) {
6066
+ continue;
6067
+ }
6068
+ relatedMarketsById.set(relatedMarket.id, relatedMarket);
6069
+ }
6070
+ }
6071
+ return Array.from(relatedMarketsById.values());
6072
+ };
6073
+ var normalizeVenueMarketCluster = (markets, selectedMarketId) => {
6074
+ var _a, _b;
6075
+ if (markets.length === 0) return [];
6076
+ const orderedSourceMarkets = dedupeSourceMarketsById(markets);
6077
+ const sourceMarketsById = new Map(orderedSourceMarkets.map((market) => [market.id, market]));
6078
+ const orderedRelatedMarkets = collectUniqueRelatedMarkets(
6079
+ orderedSourceMarkets,
6080
+ sourceMarketsById
6081
+ );
6082
+ const relatedMarketsById = new Map(orderedRelatedMarkets.map((market) => [market.id, market]));
6083
+ const resolvedSelectedMarketId = toNonEmptyString(selectedMarketId);
6084
+ if (!resolvedSelectedMarketId) {
6085
+ return [...orderedSourceMarkets, ...orderedRelatedMarkets];
6086
+ }
6087
+ const adjacencyById = /* @__PURE__ */ new Map();
6088
+ for (const market of orderedSourceMarkets) {
6089
+ for (const relatedMarket of collectDirectRelationMarkets(market)) {
6090
+ addGraphEdge(adjacencyById, market.id, relatedMarket.id);
6091
+ }
6092
+ const targetVenueMarketId = toNonEmptyString((_a = market.matchEntry) == null ? void 0 : _a.targetVenueMarketId);
6093
+ if (targetVenueMarketId) {
6094
+ addGraphEdge(adjacencyById, market.id, targetVenueMarketId);
6095
+ }
6096
+ }
6097
+ if (!sourceMarketsById.has(resolvedSelectedMarketId) && !relatedMarketsById.has(resolvedSelectedMarketId)) {
6098
+ return [];
6099
+ }
6100
+ const visitedMarketIds = /* @__PURE__ */ new Set();
6101
+ const queue = [resolvedSelectedMarketId];
6102
+ while (queue.length > 0) {
6103
+ const currentMarketId = queue.shift();
6104
+ if (!currentMarketId || visitedMarketIds.has(currentMarketId)) {
6105
+ continue;
6106
+ }
6107
+ visitedMarketIds.add(currentMarketId);
6108
+ const neighborMarketIds = adjacencyById.get(currentMarketId);
6109
+ for (const neighborMarketId of Array.from(neighborMarketIds != null ? neighborMarketIds : /* @__PURE__ */ new Set())) {
6110
+ if (!visitedMarketIds.has(neighborMarketId)) {
6111
+ queue.push(neighborMarketId);
6112
+ }
6113
+ }
6114
+ }
6115
+ const orderedClusterMarkets = [];
6116
+ const appendedMarketIds = /* @__PURE__ */ new Set();
6117
+ const appendMarket = (market) => {
6118
+ if (!market) return;
6119
+ if (!visitedMarketIds.has(market.id)) return;
6120
+ if (appendedMarketIds.has(market.id)) return;
6121
+ appendedMarketIds.add(market.id);
6122
+ orderedClusterMarkets.push(market);
6123
+ };
6124
+ appendMarket(
6125
+ (_b = sourceMarketsById.get(resolvedSelectedMarketId)) != null ? _b : relatedMarketsById.get(resolvedSelectedMarketId)
6126
+ );
6127
+ for (const market of orderedSourceMarkets) {
6128
+ appendMarket(market);
6129
+ }
6130
+ for (const market of orderedRelatedMarkets) {
6131
+ appendMarket(market);
6132
+ }
6133
+ return orderedClusterMarkets;
6134
+ };
6135
+
6136
+ // src/events/item/event-list-item.utils.ts
6137
+ var resolveEventListItemEvent = (fetchedEvent) => {
6138
+ if (!fetchedEvent) return void 0;
6139
+ if (!fetchedEvent.venueMarkets || fetchedEvent.venueMarkets.length === 0) return void 0;
6140
+ return fetchedEvent;
6141
+ };
6142
+ var normalizeProbability = (value) => {
6143
+ if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
6144
+ if (value < 0) return 0;
6145
+ if (value > 1) return 1;
6146
+ return value;
6147
+ };
6148
+ var formatWholePercent = (value) => {
6149
+ return `${Math.round(value * 100)}%`;
6150
+ };
6151
+ var hasDateLabel = (outcome) => {
6152
+ return !!toDate(outcome.label);
6153
+ };
6154
+ var isYesLabel = (label2) => label2.trim().toLowerCase() === "yes";
6155
+ var isNoLabel = (label2) => label2.trim().toLowerCase() === "no";
6156
+ var hasBinaryOutcomes = (outcomes) => {
6157
+ return outcomes.some((o) => isYesLabel(o.label)) && outcomes.some((o) => isNoLabel(o.label));
6158
+ };
6159
+ var sortYesFirst = (outcomes) => {
6160
+ return [...outcomes].sort((a, b) => {
6161
+ if (isYesLabel(a.label) && !isYesLabel(b.label)) return -1;
6162
+ if (!isYesLabel(a.label) && isYesLabel(b.label)) return 1;
6163
+ return 0;
6164
+ });
6165
+ };
6166
+ var resolveYesOutcome = (market) => {
6167
+ return market.venueMarketOutcomes.find((outcome) => isYesLabel(outcome.label));
6168
+ };
6169
+ var formatMarketProbabilityPercent = (value, formatPercent = formatWholePercent) => {
6170
+ const probability = normalizeProbability(value);
6171
+ if (probability == null) return "-";
6172
+ const formattedValue = formatPercent(probability);
6173
+ if (probability > 0 && formattedValue === formatPercent(0)) {
6174
+ return "<1%";
6175
+ }
6176
+ return formattedValue;
6177
+ };
6178
+ var formatPriceGapPercent = (value) => {
6179
+ if (typeof value !== "number" || !Number.isFinite(value)) return void 0;
6180
+ if (value < import_hooks26.MIN_PRICE_GAP_PCT) return void 0;
6181
+ if (value > import_hooks26.MAX_PRICE_GAP_PCT) return void 0;
6182
+ return `${Math.round(value)}%`;
6235
6183
  };
6236
- var DEFAULT_VENUE_LABEL = "Market";
6237
- var DEFAULT_VENUE_LOGO_URL = `${VENUE_LOGO_BASE_URL}/default.png`;
6238
- var venueLogoNames = Object.keys(venueLogoRegistry);
6239
- var sizeClasses2 = {
6240
- small: "h-4 w-4",
6241
- medium: "h-6 w-6",
6242
- large: "h-8 w-8"
6184
+ var sortOutcomes = (outcomes) => {
6185
+ if (outcomes.length <= 1) return outcomes;
6186
+ if (hasBinaryOutcomes(outcomes)) {
6187
+ return sortYesFirst(outcomes);
6188
+ }
6189
+ const now = Date.now();
6190
+ if (outcomes.some(hasDateLabel)) {
6191
+ return [...outcomes].sort((a, b) => {
6192
+ var _a, _b, _c, _d;
6193
+ const aDate = (_b = (_a = toDate(a.label)) == null ? void 0 : _a.getTime()) != null ? _b : 0;
6194
+ const bDate = (_d = (_c = toDate(b.label)) == null ? void 0 : _c.getTime()) != null ? _d : 0;
6195
+ return Math.abs(aDate - now) - Math.abs(bDate - now);
6196
+ });
6197
+ }
6198
+ return [...outcomes].sort((a, b) => {
6199
+ var _a, _b;
6200
+ const aPrice = (_a = normalizeProbability(a.price)) != null ? _a : 0;
6201
+ const bPrice = (_b = normalizeProbability(b.price)) != null ? _b : 0;
6202
+ return bPrice - aPrice;
6203
+ });
6243
6204
  };
6244
- var lineColorByVenue = {
6245
- light: {
6246
- [import_sdk10.Venue.kalshi]: "#00D295",
6247
- [import_sdk10.Venue.limitless]: "#000000",
6248
- [import_sdk10.Venue.opinion]: "#000000",
6249
- [import_sdk10.Venue.polymarket]: "#2E5CFF",
6250
- [import_sdk10.Venue.predict]: "#6D57F8",
6251
- [import_sdk10.Venue.probable]: "#F05923",
6252
- [import_sdk10.Venue.myriad]: "#000000",
6253
- [import_sdk10.Venue.hyperliquid]: "#97FCE4"
6254
- },
6255
- dark: {
6256
- [import_sdk10.Venue.kalshi]: "#00D295",
6257
- [import_sdk10.Venue.limitless]: "#FFFFFF",
6258
- [import_sdk10.Venue.opinion]: "#FFFFFF",
6259
- [import_sdk10.Venue.polymarket]: "#2E5CFF",
6260
- [import_sdk10.Venue.predict]: "#6D57F8",
6261
- [import_sdk10.Venue.probable]: "#F05923",
6262
- [import_sdk10.Venue.myriad]: "#FFFFFF",
6263
- [import_sdk10.Venue.hyperliquid]: "#97FCE4"
6205
+ var compareVisibleOutcomeRows = (left, right) => {
6206
+ var _a, _b;
6207
+ const leftDate = toDate(resolveOutcomeTitle(left.outcome));
6208
+ const rightDate = toDate(resolveOutcomeTitle(right.outcome));
6209
+ if (leftDate && rightDate) {
6210
+ return leftDate.getTime() - rightDate.getTime();
6264
6211
  }
6212
+ const leftProbability = (_a = normalizeProbability(left.outcome.price)) != null ? _a : -1;
6213
+ const rightProbability = (_b = normalizeProbability(right.outcome.price)) != null ? _b : -1;
6214
+ return rightProbability - leftProbability;
6265
6215
  };
6266
- var resolveVenueLineColor = (venue, isDarkTheme) => {
6267
- return lineColorByVenue[isDarkTheme ? "dark" : "light"][venue];
6216
+ var shouldReplaceVisibleOutcome = (current, next) => {
6217
+ var _a, _b;
6218
+ const currentVolume = typeof current.market.volume === "number" ? current.market.volume : -1;
6219
+ const nextVolume = typeof next.market.volume === "number" ? next.market.volume : -1;
6220
+ if (currentVolume !== nextVolume) {
6221
+ return nextVolume > currentVolume;
6222
+ }
6223
+ const currentProbability = (_a = normalizeProbability(current.outcome.price)) != null ? _a : -1;
6224
+ const nextProbability = (_b = normalizeProbability(next.outcome.price)) != null ? _b : -1;
6225
+ return nextProbability > currentProbability;
6268
6226
  };
6269
- var DEFAULT_VENUE_COLOR = "#94a3b8";
6270
- var fallbackLineColors = [
6271
- DEFAULT_VENUE_COLOR,
6272
- "#7AF2D3",
6273
- "#C14BFF",
6274
- "#FFB703",
6275
- "#3A86FF",
6276
- "#8AC926",
6277
- "#FF6F61",
6278
- "#6A4C93",
6279
- "#00BBF9",
6280
- "#F15BB5",
6281
- "#2EC4B6"
6282
- ];
6283
-
6284
- // src/primitives/venue-logo/venue-logo.utils.ts
6285
- var resolveVenueLogoLabel = ({
6286
- ariaLabel,
6287
- labels,
6288
- venue,
6289
- venueFallbackLabels
6290
- }) => {
6291
- var _a;
6292
- return (_a = ariaLabel != null ? ariaLabel : labels.venues[venue]) != null ? _a : venueFallbackLabels[venue];
6227
+ var resolveVisibleOutcomes = (venueMarkets) => {
6228
+ const visibleOutcomesByLabel = /* @__PURE__ */ new Map();
6229
+ venueMarkets.forEach((market) => {
6230
+ const title2 = market.question;
6231
+ const canonicalOutcome = sortOutcomes(market.venueMarketOutcomes)[0];
6232
+ if (!canonicalOutcome) return;
6233
+ const normalizedTitle = title2.trim().toLowerCase();
6234
+ const nextVisibleOutcome = {
6235
+ venue: market.venue,
6236
+ market,
6237
+ outcome: canonicalOutcome,
6238
+ title: title2
6239
+ };
6240
+ const currentVisibleOutcome = visibleOutcomesByLabel.get(normalizedTitle);
6241
+ if (!currentVisibleOutcome || shouldReplaceVisibleOutcome(currentVisibleOutcome, nextVisibleOutcome)) {
6242
+ visibleOutcomesByLabel.set(normalizedTitle, nextVisibleOutcome);
6243
+ }
6244
+ });
6245
+ return [...visibleOutcomesByLabel.values()].sort(compareVisibleOutcomeRows).slice(0, Math.max(1, 2));
6293
6246
  };
6294
- var resolveVenueLogoIsColor = ({
6295
- isColor,
6296
- isMonochromatic
6297
- }) => {
6298
- return isMonochromatic ? false : isColor;
6247
+ var dedupeVenueMarketsById = (venueMarkets) => {
6248
+ const seenClusterIds = /* @__PURE__ */ new Set();
6249
+ return venueMarkets.filter((venueMarket) => {
6250
+ var _a;
6251
+ if (seenClusterIds.has(venueMarket.id)) {
6252
+ return false;
6253
+ }
6254
+ seenClusterIds.add(venueMarket.id);
6255
+ for (const sibling of (_a = venueMarket.matchedVenueMarkets) != null ? _a : []) {
6256
+ seenClusterIds.add(sibling.id);
6257
+ }
6258
+ return true;
6259
+ });
6299
6260
  };
6300
-
6301
- // src/primitives/venue-logo/index.tsx
6302
- var import_jsx_runtime114 = require("react/jsx-runtime");
6303
- var VenueLogo = ({
6304
- venue,
6305
- variant = "icon",
6306
- isColor = true,
6307
- isMonochromatic = false,
6308
- color,
6309
- size = "medium",
6310
- className,
6311
- ariaLabel,
6312
- title: title2
6313
- }) => {
6261
+ var resolveOutcomeTitle = (outcome) => {
6314
6262
  var _a, _b;
6315
- const labels = (0, import_hooks26.useLabels)();
6316
- const sizeClass = sizeClasses2[size];
6317
- const resolvedLabel = resolveVenueLogoLabel({
6318
- ariaLabel,
6319
- labels,
6320
- venue,
6321
- venueFallbackLabels: venueLogoLabels
6322
- });
6323
- const isUnknownVenue = !(venue in venueLogoRegistry);
6324
- if (isUnknownVenue && process.env.NODE_ENV === "development") {
6325
- console.warn(`[AggUI] Unknown venue "${venue}" \u2014 using default logo`);
6263
+ return (_b = (_a = outcome == null ? void 0 : outcome.title) != null ? _a : outcome == null ? void 0 : outcome.label) == null ? void 0 : _b.trim();
6264
+ };
6265
+ var selectPrimaryVenueMarket = (venueMarkets) => {
6266
+ if (venueMarkets.length === 0) return void 0;
6267
+ if (venueMarkets.length === 1) return venueMarkets[0];
6268
+ return [...venueMarkets].sort((a, b) => {
6269
+ const aVolume = typeof a.volume === "number" ? a.volume : -1;
6270
+ const bVolume = typeof b.volume === "number" ? b.volume : -1;
6271
+ return bVolume - aVolume;
6272
+ })[0];
6273
+ };
6274
+ var resolveTileImage = (event, primaryVenueMarket, imageOverride) => {
6275
+ if (typeof imageOverride === "string" && imageOverride.trim()) {
6276
+ return imageOverride;
6326
6277
  }
6327
- if (variant === "logo") {
6328
- return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
6329
- RemoteImage,
6330
- {
6331
- src: (_a = venueLogoUrlRegistry[venue]) != null ? _a : DEFAULT_VENUE_LOGO_URL,
6332
- alt: resolvedLabel || DEFAULT_VENUE_LABEL,
6333
- title: title2,
6334
- className: cn("shrink-0 rounded-agg-lg object-cover", sizeClass, className)
6335
- }
6336
- );
6278
+ if (typeof event.image === "string" && event.image.trim()) {
6279
+ return event.image;
6337
6280
  }
6338
- const Component2 = (_b = venueLogoRegistry[venue]) != null ? _b : DefaultVenueIcon;
6339
- const resolvedIsColor = resolveVenueLogoIsColor({
6340
- isColor,
6341
- isMonochromatic
6342
- });
6343
- return /* @__PURE__ */ (0, import_jsx_runtime114.jsx)(
6344
- Component2,
6345
- {
6346
- className: cn("group/agg-venue-logo", "shrink-0", sizeClass, className),
6347
- isColor: resolvedIsColor,
6348
- color,
6349
- "aria-label": resolvedLabel || DEFAULT_VENUE_LABEL,
6350
- title: title2
6351
- }
6281
+ if (typeof (primaryVenueMarket == null ? void 0 : primaryVenueMarket.image) === "string" && primaryVenueMarket.image.trim()) {
6282
+ return primaryVenueMarket.image;
6283
+ }
6284
+ return void 0;
6285
+ };
6286
+ var formatCountLabel = (count, singular, plural) => {
6287
+ return `${count} ${count === 1 ? singular : plural}`;
6288
+ };
6289
+ var getVenueSummary = (venueMarkets, options) => {
6290
+ const normalizedVenueMarkets = normalizeVenueMarketCluster(venueMarkets);
6291
+ const tradableVenues = options == null ? void 0 : options.tradableVenues;
6292
+ const isVenueTradable = (venue) => {
6293
+ if (tradableVenues == null) return true;
6294
+ return tradableVenues.has(venue);
6295
+ };
6296
+ const uniqueVenues = Array.from(
6297
+ new Set(
6298
+ normalizedVenueMarkets.filter((market) => isVenueTradable(market.venue)).map((market) => market.venue)
6299
+ )
6352
6300
  );
6301
+ return {
6302
+ marketCount: normalizedVenueMarkets.length,
6303
+ venueCount: uniqueVenues.length,
6304
+ singleVenue: uniqueVenues.length === 1 ? uniqueVenues[0] : void 0
6305
+ };
6306
+ };
6307
+ var resolveVenueLabel = (venue, venueInfo, labels) => {
6308
+ var _a, _b;
6309
+ if (!venue) return labels.eventItem.venueSingular;
6310
+ return (_b = (_a = venueInfo == null ? void 0 : venueInfo[venue]) == null ? void 0 : _a.label) != null ? _b : labels.venues[venue];
6311
+ };
6312
+ var resolveDisplayVolume = (eventVolume, venueMarkets) => {
6313
+ if (typeof eventVolume === "number" && eventVolume > 0) return eventVolume;
6314
+ const clusterMarkets = normalizeVenueMarketCluster(venueMarkets);
6315
+ const marketSum = clusterMarkets.reduce(
6316
+ (acc, m) => acc + (typeof m.volume === "number" ? m.volume : 0),
6317
+ 0
6318
+ );
6319
+ if (marketSum > 0) return marketSum;
6320
+ return void 0;
6353
6321
  };
6354
- VenueLogo.displayName = "VenueLogo";
6355
-
6356
- // src/primitives/search/search.constants.ts
6357
- var DEFAULT_SEARCH_LIMIT = 5;
6358
- var MIN_SEARCH_LENGTH = 3;
6359
- var SEARCH_DEBOUNCE_MS = 300;
6360
6322
 
6361
6323
  // src/primitives/search/search.utils.ts
6362
- var import_sdk11 = require("@agg-build/sdk");
6363
- var import_dayjs2 = __toESM(require("dayjs"));
6364
6324
  var formatSearchContextLabel = (value) => {
6365
6325
  if (!(0, import_dayjs2.default)(value).isValid()) return value;
6366
6326
  return (0, import_dayjs2.default)(value).format("MMMM D, YYYY");
@@ -8656,7 +8616,7 @@ var resolveOutcomeRows = ({
8656
8616
  outcome
8657
8617
  }));
8658
8618
  }
8659
- return sortMarketsByYesOddsDesc(venueMarkets).map((market) => {
8619
+ return venueMarkets.map((market) => {
8660
8620
  const outcome = resolveDisplayOutcome(market);
8661
8621
  if (!outcome) return void 0;
8662
8622
  return {
@@ -12755,13 +12715,12 @@ var EventListItemDetailsContent = ({
12755
12715
  () => resolvedEventTradingState.displayMarkets,
12756
12716
  [resolvedEventTradingState.displayMarkets]
12757
12717
  );
12758
- const sortedVenueMarkets = (0, import_react21.useMemo)(() => sortMarketsByVolumeDesc(venueMarkets), [venueMarkets]);
12759
12718
  const marketOptions = (0, import_react21.useMemo)(
12760
- () => sortedVenueMarkets.map((vm) => ({
12719
+ () => venueMarkets.map((vm) => ({
12761
12720
  value: vm.id,
12762
12721
  label: vm.question
12763
12722
  })),
12764
- [sortedVenueMarkets]
12723
+ [venueMarkets]
12765
12724
  );
12766
12725
  const volumeLabel = (0, import_react21.useMemo)(() => {
12767
12726
  const resolvedVolume = resolveDisplayVolume(event.volume, venueMarkets);
@@ -14858,8 +14817,7 @@ var MarketDetailsList = ({
14858
14817
  return resolveIsResolvedEvent(sourceMarkets, eventTradingState);
14859
14818
  }, [eventTradingState, sourceMarkets]);
14860
14819
  const groupedMarkets = (0, import_react24.useMemo)(() => {
14861
- const sortedMarkets = sortMarketsByVolumeDesc(sourceMarkets);
14862
- if (sortedMarkets.length === 0) {
14820
+ if (sourceMarkets.length === 0) {
14863
14821
  return {
14864
14822
  primary: [],
14865
14823
  closed: [],
@@ -14868,9 +14826,9 @@ var MarketDetailsList = ({
14868
14826
  };
14869
14827
  }
14870
14828
  if (isResolvedEvent) {
14871
- const winnerMarketId = resolveResolvedWinnerMarketId(sortedMarkets, eventTradingState);
14829
+ const winnerMarketId = resolveResolvedWinnerMarketId(sourceMarkets, eventTradingState);
14872
14830
  return {
14873
- primary: moveMarketToFront(sortedMarkets, winnerMarketId),
14831
+ primary: moveMarketToFront(sourceMarkets, winnerMarketId),
14874
14832
  upcoming: [],
14875
14833
  resolved: []
14876
14834
  };
@@ -14879,7 +14837,7 @@ var MarketDetailsList = ({
14879
14837
  const upcoming = [];
14880
14838
  const resolved = [];
14881
14839
  const closed = [];
14882
- sortedMarkets.forEach((market) => {
14840
+ sourceMarkets.forEach((market) => {
14883
14841
  const marketStateKind = (0, import_hooks48.resolveMarketTradingState)(market).kind;
14884
14842
  if (marketStateKind === "resolved") {
14885
14843
  resolved.push(market);
@@ -19649,19 +19607,14 @@ var EventMarketPageContent = ({
19649
19607
  stickyOrderPanel,
19650
19608
  resolvedClaim
19651
19609
  }) => {
19652
- const sortedEvent = (0, import_react29.useMemo)(() => {
19653
- return __spreadProps(__spreadValues({}, event), {
19654
- venueMarkets: sortMarketsByVolumeDesc(event.venueMarkets)
19655
- });
19656
- }, [event]);
19657
- const eventTradingState = (0, import_react29.useMemo)(() => (0, import_hooks53.resolveEventTradingState)(sortedEvent), [sortedEvent]);
19610
+ const eventTradingState = (0, import_react29.useMemo)(() => (0, import_hooks53.resolveEventTradingState)(event), [event]);
19658
19611
  const stickyOrderPanelState = resolveEventMarketPageStickyState({
19659
19612
  stickyOrderPanel
19660
19613
  });
19661
19614
  const [isMobileTradeOpen, setIsMobileTradeOpen] = (0, import_react29.useState)(false);
19662
19615
  const isMobileViewport = useIsMobileEventMarketViewport();
19663
19616
  const tradingContext = (0, import_hooks53.useEventTradingContext)();
19664
- const midpointsResult = (0, import_hooks53.useMidpoints)(sortedEvent.venueMarkets);
19617
+ const midpointsResult = (0, import_hooks53.useMidpoints)(event.venueMarkets);
19665
19618
  const setTradeSideRef = (0, import_react29.useRef)(tradingContext == null ? void 0 : tradingContext.setTradeSide);
19666
19619
  setTradeSideRef.current = tradingContext == null ? void 0 : tradingContext.setTradeSide;
19667
19620
  (0, import_react29.useEffect)(() => {
@@ -19670,7 +19623,7 @@ var EventMarketPageContent = ({
19670
19623
  (_a = setTradeSideRef.current) == null ? void 0 : _a.call(setTradeSideRef, import_hooks53.TradeSide.Buy);
19671
19624
  };
19672
19625
  }, []);
19673
- if (!sortedEvent.venueMarkets.length) {
19626
+ if (!event.venueMarkets.length) {
19674
19627
  return /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(EventMarketPageUnavailableState, { ariaLabel });
19675
19628
  }
19676
19629
  return /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(
@@ -19681,7 +19634,7 @@ var EventMarketPageContent = ({
19681
19634
  "w-full mx-auto max-w-[1360px] px-6 lg:px-10 pb-10",
19682
19635
  classNames == null ? void 0 : classNames.root
19683
19636
  ),
19684
- "aria-label": ariaLabel != null ? ariaLabel : sortedEvent.title,
19637
+ "aria-label": ariaLabel != null ? ariaLabel : event.title,
19685
19638
  children: [
19686
19639
  /* @__PURE__ */ (0, import_jsx_runtime144.jsxs)(
19687
19640
  "div",
@@ -19706,7 +19659,7 @@ var EventMarketPageContent = ({
19706
19659
  /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(
19707
19660
  EventListItemDetails,
19708
19661
  {
19709
- event: sortedEvent,
19662
+ event,
19710
19663
  defaultMarketId,
19711
19664
  defaultOutcomeId,
19712
19665
  eventTradingState,
@@ -19719,7 +19672,7 @@ var EventMarketPageContent = ({
19719
19672
  /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(
19720
19673
  MarketDetailsList,
19721
19674
  {
19722
- eventId: sortedEvent.id,
19675
+ eventId: event.id,
19723
19676
  markets: eventTradingState.displayMarkets,
19724
19677
  eventTradingState,
19725
19678
  live: true,
@@ -19747,7 +19700,7 @@ var EventMarketPageContent = ({
19747
19700
  classNames: resolveMobileTradePlaceOrderClassNames(classNames)
19748
19701
  }
19749
19702
  ) }) : null,
19750
- /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SettlementDetails, { eventId: sortedEvent.id, className: classNames == null ? void 0 : classNames.settlement })
19703
+ /* @__PURE__ */ (0, import_jsx_runtime144.jsx)(SettlementDetails, { eventId: event.id, className: classNames == null ? void 0 : classNames.settlement })
19751
19704
  ]
19752
19705
  }
19753
19706
  ),