@agg-build/ui 2.7.0 → 2.7.2
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/{chunk-C247AYH7.mjs → chunk-7R2SMMAG.mjs} +49 -12
- package/dist/{chunk-XAG432PJ.mjs → chunk-EKUH3265.mjs} +7 -1
- package/dist/events.js +7 -1
- package/dist/events.mjs +1 -1
- package/dist/index.js +55 -12
- package/dist/index.mjs +2 -2
- package/dist/pages.js +55 -12
- package/dist/pages.mjs +2 -2
- package/dist/types/pages/event-market/sports-event-market.utils.d.mts +12 -2
- package/dist/types/pages/event-market/sports-event-market.utils.d.ts +12 -2
- package/package.json +2 -2
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
isErrorWithStatus,
|
|
11
11
|
useEventListTabs,
|
|
12
12
|
useEventListTabsHeaderOverflow
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-EKUH3265.mjs";
|
|
14
14
|
import {
|
|
15
15
|
DEPOSIT_MODAL_OPEN_EVENT,
|
|
16
16
|
PlaceOrder,
|
|
@@ -480,9 +480,9 @@ var SPORTS_PERIOD_ORDER = [
|
|
|
480
480
|
"first_inning",
|
|
481
481
|
"second_inning",
|
|
482
482
|
"third_inning",
|
|
483
|
-
"first_5_innings",
|
|
484
483
|
"other"
|
|
485
484
|
];
|
|
485
|
+
var FIRST_N_INNINGS_PATTERN = /^first_(\d{1,2})_innings$/;
|
|
486
486
|
var SPORTS_MARKET_TYPE_ORDER = [
|
|
487
487
|
"to_advance",
|
|
488
488
|
"moneyline",
|
|
@@ -513,6 +513,10 @@ var stripLineValueFromQuestion = (question) => {
|
|
|
513
513
|
var SPORTS_PERIOD_FAMILY_ORDER = ["period", "inning", "set", "map", "game"];
|
|
514
514
|
var getSportsPeriodOrderIndex = (period) => {
|
|
515
515
|
var _a, _b;
|
|
516
|
+
const inningsMatch = FIRST_N_INNINGS_PATTERN.exec(period);
|
|
517
|
+
if (inningsMatch) {
|
|
518
|
+
return SPORTS_PERIOD_ORDER.indexOf("third_inning") + 1 + Number(inningsMatch[1]) / 100;
|
|
519
|
+
}
|
|
516
520
|
const periodIndex = SPORTS_PERIOD_ORDER.indexOf(period);
|
|
517
521
|
if (periodIndex >= 0) {
|
|
518
522
|
return period === "other" ? Number.MAX_SAFE_INTEGER : periodIndex;
|
|
@@ -615,6 +619,28 @@ var resolveMarketSectionTabKey = (market) => {
|
|
|
615
619
|
if (category === "other") return "other";
|
|
616
620
|
return null;
|
|
617
621
|
};
|
|
622
|
+
var SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS = {
|
|
623
|
+
halves: /* @__PURE__ */ new Set(["soccer", "basketball", "american_football", "rugby", "aussie_rules"]),
|
|
624
|
+
quarters: /* @__PURE__ */ new Set(["basketball", "american_football", "lacrosse", "aussie_rules"]),
|
|
625
|
+
innings: /* @__PURE__ */ new Set(["baseball"]),
|
|
626
|
+
sets: /* @__PURE__ */ new Set(["tennis", "table_tennis", "volleyball"]),
|
|
627
|
+
maps: /* @__PURE__ */ new Set(["esports"]),
|
|
628
|
+
ot: /* @__PURE__ */ new Set(["basketball", "american_football", "hockey", "soccer"])
|
|
629
|
+
};
|
|
630
|
+
var PERIOD_N_FAMILY_PATTERN = /^period_\d{1,2}$/;
|
|
631
|
+
var isPeriodFamilyAllowedForSport = (family, sport) => {
|
|
632
|
+
if (!sport || sport === "other_sport") return true;
|
|
633
|
+
if (PERIOD_N_FAMILY_PATTERN.test(family)) return sport === "hockey";
|
|
634
|
+
const normalizedFamily = FIRST_N_INNINGS_PATTERN.test(family) ? "innings" : family;
|
|
635
|
+
const allowedSports = SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS[normalizedFamily];
|
|
636
|
+
return !allowedSports || allowedSports.has(sport);
|
|
637
|
+
};
|
|
638
|
+
var resolveEffectiveMarketSectionTabKey = (market, sport) => {
|
|
639
|
+
const key = resolveMarketSectionTabKey(market);
|
|
640
|
+
if (!key || !key.startsWith("period:")) return key;
|
|
641
|
+
const family = key.slice("period:".length);
|
|
642
|
+
return isPeriodFamilyAllowedForSport(family, sport) ? key : "other";
|
|
643
|
+
};
|
|
618
644
|
var resolveVisibleSportsSectionTabs = (event) => {
|
|
619
645
|
var _a, _b, _c;
|
|
620
646
|
const periodsByFamily = /* @__PURE__ */ new Map();
|
|
@@ -623,7 +649,7 @@ var resolveVisibleSportsSectionTabs = (event) => {
|
|
|
623
649
|
let hasExactScore = false;
|
|
624
650
|
let hasOther = false;
|
|
625
651
|
for (const market of event.venueMarkets) {
|
|
626
|
-
const key =
|
|
652
|
+
const key = resolveEffectiveMarketSectionTabKey(market, event.sport);
|
|
627
653
|
if (!key) continue;
|
|
628
654
|
if (key === "game_lines") hasGameLines = true;
|
|
629
655
|
else if (key === "exact_score") hasExactScore = true;
|
|
@@ -745,30 +771,40 @@ var dropDecomposedLegsMergedIntoSingle = (markets) => {
|
|
|
745
771
|
var resolveSportsSectionMarkets = ({
|
|
746
772
|
tab,
|
|
747
773
|
eventMarkets,
|
|
748
|
-
sectionMarkets
|
|
774
|
+
sectionMarkets,
|
|
775
|
+
sport
|
|
749
776
|
}) => {
|
|
750
|
-
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
777
|
+
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
778
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
779
|
+
);
|
|
751
780
|
const filteredSectionMarkets = effectiveSectionMarkets.filter(
|
|
752
|
-
(market) =>
|
|
781
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
753
782
|
);
|
|
754
783
|
if (tab.key === "other" || tab.key === `stat:${SPORTS_GENERIC_STAT}`) {
|
|
755
784
|
const seenIds = new Set(filteredSectionMarkets.map((market) => market.id));
|
|
756
785
|
const strayMarkets = eventMarkets.filter(
|
|
757
|
-
(market) => !seenIds.has(market.id) &&
|
|
786
|
+
(market) => !seenIds.has(market.id) && resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
758
787
|
);
|
|
759
788
|
return [...filteredSectionMarkets, ...strayMarkets];
|
|
760
789
|
}
|
|
761
790
|
if (tab.kind !== "game_lines") return filteredSectionMarkets;
|
|
762
791
|
const dedupeEventMarketsOfType = (type) => {
|
|
763
792
|
const dedupedMarkets = [];
|
|
764
|
-
const
|
|
793
|
+
const keptIndexByKey = /* @__PURE__ */ new Map();
|
|
765
794
|
for (const market of eventMarkets) {
|
|
766
795
|
if (normalizeSportsMarketType(market.sportsMarketType) !== type || resolveMarketSectionTabKey(market) !== "game_lines") {
|
|
767
796
|
continue;
|
|
768
797
|
}
|
|
769
798
|
const key = resolveSportsMarketAggKey(market) || market.id;
|
|
770
|
-
|
|
771
|
-
|
|
799
|
+
const keptIndex = keptIndexByKey.get(key);
|
|
800
|
+
if (keptIndex !== void 0) {
|
|
801
|
+
const kept = dedupedMarkets[keptIndex];
|
|
802
|
+
if (!hasTeamTitledOutcomes(kept) && hasTeamTitledOutcomes(market)) {
|
|
803
|
+
dedupedMarkets[keptIndex] = market;
|
|
804
|
+
}
|
|
805
|
+
continue;
|
|
806
|
+
}
|
|
807
|
+
keptIndexByKey.set(key, dedupedMarkets.length);
|
|
772
808
|
dedupedMarkets.push(market);
|
|
773
809
|
}
|
|
774
810
|
return dropDecomposedLegsMergedIntoSingle(dedupedMarkets);
|
|
@@ -1857,9 +1893,10 @@ var SportsMarkets = ({
|
|
|
1857
1893
|
() => resolveSportsSectionMarkets({
|
|
1858
1894
|
tab: activeTab,
|
|
1859
1895
|
eventMarkets: tabSourceMarkets,
|
|
1860
|
-
sectionMarkets
|
|
1896
|
+
sectionMarkets,
|
|
1897
|
+
sport: event.sport
|
|
1861
1898
|
}),
|
|
1862
|
-
[activeTab, tabSourceMarkets, sectionMarkets]
|
|
1899
|
+
[activeTab, tabSourceMarkets, sectionMarkets, event.sport]
|
|
1863
1900
|
);
|
|
1864
1901
|
const isSectionSettled = !isSectionLoading && !hasNextPage && !isFetchingNextPage;
|
|
1865
1902
|
const stableSectionMarkets = stableMarketsByTab[activeTabKey];
|
|
@@ -4908,7 +4908,13 @@ var MarketDetailsList = ({
|
|
|
4908
4908
|
} = useVenueMarkets2({
|
|
4909
4909
|
venueEventId: resolvedEventId,
|
|
4910
4910
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
4911
|
-
status: MarketStatus.open
|
|
4911
|
+
status: MarketStatus.open,
|
|
4912
|
+
// Keep in lockstep with useEnrichedVenueEvent: limit is part of the React
|
|
4913
|
+
// Query key, so a mismatch would fork the shared cache into two requests.
|
|
4914
|
+
// fetchAll drains every page — events can exceed any single-page limit
|
|
4915
|
+
// (e.g. 80 open markets on one staging event).
|
|
4916
|
+
limit: 100,
|
|
4917
|
+
fetchAll: true
|
|
4912
4918
|
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
4913
4919
|
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
4914
4920
|
// markets-under-an-event ordering. Passing sortBy here would override it.
|
package/dist/events.js
CHANGED
|
@@ -13706,7 +13706,13 @@ var MarketDetailsList = ({
|
|
|
13706
13706
|
} = (0, import_hooks43.useVenueMarkets)({
|
|
13707
13707
|
venueEventId: resolvedEventId,
|
|
13708
13708
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
13709
|
-
status: import_hooks43.MarketStatus.open
|
|
13709
|
+
status: import_hooks43.MarketStatus.open,
|
|
13710
|
+
// Keep in lockstep with useEnrichedVenueEvent: limit is part of the React
|
|
13711
|
+
// Query key, so a mismatch would fork the shared cache into two requests.
|
|
13712
|
+
// fetchAll drains every page — events can exceed any single-page limit
|
|
13713
|
+
// (e.g. 80 open markets on one staging event).
|
|
13714
|
+
limit: 100,
|
|
13715
|
+
fetchAll: true
|
|
13710
13716
|
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
13711
13717
|
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
13712
13718
|
// markets-under-an-event ordering. Passing sortBy here would override it.
|
package/dist/events.mjs
CHANGED
package/dist/index.js
CHANGED
|
@@ -17648,7 +17648,13 @@ var MarketDetailsList = ({
|
|
|
17648
17648
|
} = (0, import_hooks51.useVenueMarkets)({
|
|
17649
17649
|
venueEventId: resolvedEventId,
|
|
17650
17650
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
17651
|
-
status: import_hooks51.MarketStatus.open
|
|
17651
|
+
status: import_hooks51.MarketStatus.open,
|
|
17652
|
+
// Keep in lockstep with useEnrichedVenueEvent: limit is part of the React
|
|
17653
|
+
// Query key, so a mismatch would fork the shared cache into two requests.
|
|
17654
|
+
// fetchAll drains every page — events can exceed any single-page limit
|
|
17655
|
+
// (e.g. 80 open markets on one staging event).
|
|
17656
|
+
limit: 100,
|
|
17657
|
+
fetchAll: true
|
|
17652
17658
|
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
17653
17659
|
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
17654
17660
|
// markets-under-an-event ordering. Passing sortBy here would override it.
|
|
@@ -25760,9 +25766,9 @@ var SPORTS_PERIOD_ORDER = [
|
|
|
25760
25766
|
"first_inning",
|
|
25761
25767
|
"second_inning",
|
|
25762
25768
|
"third_inning",
|
|
25763
|
-
"first_5_innings",
|
|
25764
25769
|
"other"
|
|
25765
25770
|
];
|
|
25771
|
+
var FIRST_N_INNINGS_PATTERN = /^first_(\d{1,2})_innings$/;
|
|
25766
25772
|
var SPORTS_MARKET_TYPE_ORDER = [
|
|
25767
25773
|
"to_advance",
|
|
25768
25774
|
"moneyline",
|
|
@@ -25793,6 +25799,10 @@ var stripLineValueFromQuestion = (question) => {
|
|
|
25793
25799
|
var SPORTS_PERIOD_FAMILY_ORDER = ["period", "inning", "set", "map", "game"];
|
|
25794
25800
|
var getSportsPeriodOrderIndex = (period) => {
|
|
25795
25801
|
var _a, _b;
|
|
25802
|
+
const inningsMatch = FIRST_N_INNINGS_PATTERN.exec(period);
|
|
25803
|
+
if (inningsMatch) {
|
|
25804
|
+
return SPORTS_PERIOD_ORDER.indexOf("third_inning") + 1 + Number(inningsMatch[1]) / 100;
|
|
25805
|
+
}
|
|
25796
25806
|
const periodIndex = SPORTS_PERIOD_ORDER.indexOf(period);
|
|
25797
25807
|
if (periodIndex >= 0) {
|
|
25798
25808
|
return period === "other" ? Number.MAX_SAFE_INTEGER : periodIndex;
|
|
@@ -25895,6 +25905,28 @@ var resolveMarketSectionTabKey = (market) => {
|
|
|
25895
25905
|
if (category === "other") return "other";
|
|
25896
25906
|
return null;
|
|
25897
25907
|
};
|
|
25908
|
+
var SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS = {
|
|
25909
|
+
halves: /* @__PURE__ */ new Set(["soccer", "basketball", "american_football", "rugby", "aussie_rules"]),
|
|
25910
|
+
quarters: /* @__PURE__ */ new Set(["basketball", "american_football", "lacrosse", "aussie_rules"]),
|
|
25911
|
+
innings: /* @__PURE__ */ new Set(["baseball"]),
|
|
25912
|
+
sets: /* @__PURE__ */ new Set(["tennis", "table_tennis", "volleyball"]),
|
|
25913
|
+
maps: /* @__PURE__ */ new Set(["esports"]),
|
|
25914
|
+
ot: /* @__PURE__ */ new Set(["basketball", "american_football", "hockey", "soccer"])
|
|
25915
|
+
};
|
|
25916
|
+
var PERIOD_N_FAMILY_PATTERN = /^period_\d{1,2}$/;
|
|
25917
|
+
var isPeriodFamilyAllowedForSport = (family, sport) => {
|
|
25918
|
+
if (!sport || sport === "other_sport") return true;
|
|
25919
|
+
if (PERIOD_N_FAMILY_PATTERN.test(family)) return sport === "hockey";
|
|
25920
|
+
const normalizedFamily = FIRST_N_INNINGS_PATTERN.test(family) ? "innings" : family;
|
|
25921
|
+
const allowedSports = SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS[normalizedFamily];
|
|
25922
|
+
return !allowedSports || allowedSports.has(sport);
|
|
25923
|
+
};
|
|
25924
|
+
var resolveEffectiveMarketSectionTabKey = (market, sport) => {
|
|
25925
|
+
const key = resolveMarketSectionTabKey(market);
|
|
25926
|
+
if (!key || !key.startsWith("period:")) return key;
|
|
25927
|
+
const family = key.slice("period:".length);
|
|
25928
|
+
return isPeriodFamilyAllowedForSport(family, sport) ? key : "other";
|
|
25929
|
+
};
|
|
25898
25930
|
var resolveVisibleSportsSectionTabs = (event) => {
|
|
25899
25931
|
var _a, _b, _c;
|
|
25900
25932
|
const periodsByFamily = /* @__PURE__ */ new Map();
|
|
@@ -25903,7 +25935,7 @@ var resolveVisibleSportsSectionTabs = (event) => {
|
|
|
25903
25935
|
let hasExactScore = false;
|
|
25904
25936
|
let hasOther = false;
|
|
25905
25937
|
for (const market of event.venueMarkets) {
|
|
25906
|
-
const key =
|
|
25938
|
+
const key = resolveEffectiveMarketSectionTabKey(market, event.sport);
|
|
25907
25939
|
if (!key) continue;
|
|
25908
25940
|
if (key === "game_lines") hasGameLines = true;
|
|
25909
25941
|
else if (key === "exact_score") hasExactScore = true;
|
|
@@ -26025,30 +26057,40 @@ var dropDecomposedLegsMergedIntoSingle = (markets) => {
|
|
|
26025
26057
|
var resolveSportsSectionMarkets = ({
|
|
26026
26058
|
tab,
|
|
26027
26059
|
eventMarkets,
|
|
26028
|
-
sectionMarkets
|
|
26060
|
+
sectionMarkets,
|
|
26061
|
+
sport
|
|
26029
26062
|
}) => {
|
|
26030
|
-
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
26063
|
+
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
26064
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
26065
|
+
);
|
|
26031
26066
|
const filteredSectionMarkets = effectiveSectionMarkets.filter(
|
|
26032
|
-
(market) =>
|
|
26067
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
26033
26068
|
);
|
|
26034
26069
|
if (tab.key === "other" || tab.key === `stat:${SPORTS_GENERIC_STAT}`) {
|
|
26035
26070
|
const seenIds = new Set(filteredSectionMarkets.map((market) => market.id));
|
|
26036
26071
|
const strayMarkets = eventMarkets.filter(
|
|
26037
|
-
(market) => !seenIds.has(market.id) &&
|
|
26072
|
+
(market) => !seenIds.has(market.id) && resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
26038
26073
|
);
|
|
26039
26074
|
return [...filteredSectionMarkets, ...strayMarkets];
|
|
26040
26075
|
}
|
|
26041
26076
|
if (tab.kind !== "game_lines") return filteredSectionMarkets;
|
|
26042
26077
|
const dedupeEventMarketsOfType = (type) => {
|
|
26043
26078
|
const dedupedMarkets = [];
|
|
26044
|
-
const
|
|
26079
|
+
const keptIndexByKey = /* @__PURE__ */ new Map();
|
|
26045
26080
|
for (const market of eventMarkets) {
|
|
26046
26081
|
if (normalizeSportsMarketType(market.sportsMarketType) !== type || resolveMarketSectionTabKey(market) !== "game_lines") {
|
|
26047
26082
|
continue;
|
|
26048
26083
|
}
|
|
26049
26084
|
const key = resolveSportsMarketAggKey(market) || market.id;
|
|
26050
|
-
|
|
26051
|
-
|
|
26085
|
+
const keptIndex = keptIndexByKey.get(key);
|
|
26086
|
+
if (keptIndex !== void 0) {
|
|
26087
|
+
const kept = dedupedMarkets[keptIndex];
|
|
26088
|
+
if (!hasTeamTitledOutcomes(kept) && hasTeamTitledOutcomes(market)) {
|
|
26089
|
+
dedupedMarkets[keptIndex] = market;
|
|
26090
|
+
}
|
|
26091
|
+
continue;
|
|
26092
|
+
}
|
|
26093
|
+
keptIndexByKey.set(key, dedupedMarkets.length);
|
|
26052
26094
|
dedupedMarkets.push(market);
|
|
26053
26095
|
}
|
|
26054
26096
|
return dropDecomposedLegsMergedIntoSingle(dedupedMarkets);
|
|
@@ -27131,9 +27173,10 @@ var SportsMarkets = ({
|
|
|
27131
27173
|
() => resolveSportsSectionMarkets({
|
|
27132
27174
|
tab: activeTab,
|
|
27133
27175
|
eventMarkets: tabSourceMarkets,
|
|
27134
|
-
sectionMarkets
|
|
27176
|
+
sectionMarkets,
|
|
27177
|
+
sport: event.sport
|
|
27135
27178
|
}),
|
|
27136
|
-
[activeTab, tabSourceMarkets, sectionMarkets]
|
|
27179
|
+
[activeTab, tabSourceMarkets, sectionMarkets, event.sport]
|
|
27137
27180
|
);
|
|
27138
27181
|
const isSectionSettled = !isSectionLoading && !hasNextPage && !isFetchingNextPage;
|
|
27139
27182
|
const stableSectionMarkets = stableMarketsByTab[activeTabKey];
|
package/dist/index.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
UserProfilePage,
|
|
12
12
|
buildAggTxExplorerHref,
|
|
13
13
|
useHomePageModals
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-7R2SMMAG.mjs";
|
|
15
15
|
import {
|
|
16
16
|
EventList,
|
|
17
17
|
EventListItem,
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
orderbookRowLimitDefault,
|
|
29
29
|
resolveEventDetailsSyncKey,
|
|
30
30
|
useCenterOrderbookSpread
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-EKUH3265.mjs";
|
|
32
32
|
import {
|
|
33
33
|
CARD_NETWORK_OPTIONS,
|
|
34
34
|
DepositModal,
|
package/dist/pages.js
CHANGED
|
@@ -16213,7 +16213,13 @@ var MarketDetailsList = ({
|
|
|
16213
16213
|
} = (0, import_hooks49.useVenueMarkets)({
|
|
16214
16214
|
venueEventId: resolvedEventId,
|
|
16215
16215
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
16216
|
-
status: import_hooks49.MarketStatus.open
|
|
16216
|
+
status: import_hooks49.MarketStatus.open,
|
|
16217
|
+
// Keep in lockstep with useEnrichedVenueEvent: limit is part of the React
|
|
16218
|
+
// Query key, so a mismatch would fork the shared cache into two requests.
|
|
16219
|
+
// fetchAll drains every page — events can exceed any single-page limit
|
|
16220
|
+
// (e.g. 80 open markets on one staging event).
|
|
16221
|
+
limit: 100,
|
|
16222
|
+
fetchAll: true
|
|
16217
16223
|
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
16218
16224
|
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
16219
16225
|
// markets-under-an-event ordering. Passing sortBy here would override it.
|
|
@@ -23539,9 +23545,9 @@ var SPORTS_PERIOD_ORDER = [
|
|
|
23539
23545
|
"first_inning",
|
|
23540
23546
|
"second_inning",
|
|
23541
23547
|
"third_inning",
|
|
23542
|
-
"first_5_innings",
|
|
23543
23548
|
"other"
|
|
23544
23549
|
];
|
|
23550
|
+
var FIRST_N_INNINGS_PATTERN = /^first_(\d{1,2})_innings$/;
|
|
23545
23551
|
var SPORTS_MARKET_TYPE_ORDER = [
|
|
23546
23552
|
"to_advance",
|
|
23547
23553
|
"moneyline",
|
|
@@ -23572,6 +23578,10 @@ var stripLineValueFromQuestion = (question) => {
|
|
|
23572
23578
|
var SPORTS_PERIOD_FAMILY_ORDER = ["period", "inning", "set", "map", "game"];
|
|
23573
23579
|
var getSportsPeriodOrderIndex = (period) => {
|
|
23574
23580
|
var _a, _b;
|
|
23581
|
+
const inningsMatch = FIRST_N_INNINGS_PATTERN.exec(period);
|
|
23582
|
+
if (inningsMatch) {
|
|
23583
|
+
return SPORTS_PERIOD_ORDER.indexOf("third_inning") + 1 + Number(inningsMatch[1]) / 100;
|
|
23584
|
+
}
|
|
23575
23585
|
const periodIndex = SPORTS_PERIOD_ORDER.indexOf(period);
|
|
23576
23586
|
if (periodIndex >= 0) {
|
|
23577
23587
|
return period === "other" ? Number.MAX_SAFE_INTEGER : periodIndex;
|
|
@@ -23674,6 +23684,28 @@ var resolveMarketSectionTabKey = (market) => {
|
|
|
23674
23684
|
if (category === "other") return "other";
|
|
23675
23685
|
return null;
|
|
23676
23686
|
};
|
|
23687
|
+
var SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS = {
|
|
23688
|
+
halves: /* @__PURE__ */ new Set(["soccer", "basketball", "american_football", "rugby", "aussie_rules"]),
|
|
23689
|
+
quarters: /* @__PURE__ */ new Set(["basketball", "american_football", "lacrosse", "aussie_rules"]),
|
|
23690
|
+
innings: /* @__PURE__ */ new Set(["baseball"]),
|
|
23691
|
+
sets: /* @__PURE__ */ new Set(["tennis", "table_tennis", "volleyball"]),
|
|
23692
|
+
maps: /* @__PURE__ */ new Set(["esports"]),
|
|
23693
|
+
ot: /* @__PURE__ */ new Set(["basketball", "american_football", "hockey", "soccer"])
|
|
23694
|
+
};
|
|
23695
|
+
var PERIOD_N_FAMILY_PATTERN = /^period_\d{1,2}$/;
|
|
23696
|
+
var isPeriodFamilyAllowedForSport = (family, sport) => {
|
|
23697
|
+
if (!sport || sport === "other_sport") return true;
|
|
23698
|
+
if (PERIOD_N_FAMILY_PATTERN.test(family)) return sport === "hockey";
|
|
23699
|
+
const normalizedFamily = FIRST_N_INNINGS_PATTERN.test(family) ? "innings" : family;
|
|
23700
|
+
const allowedSports = SPORTS_PERIOD_FAMILY_ALLOWED_SPORTS[normalizedFamily];
|
|
23701
|
+
return !allowedSports || allowedSports.has(sport);
|
|
23702
|
+
};
|
|
23703
|
+
var resolveEffectiveMarketSectionTabKey = (market, sport) => {
|
|
23704
|
+
const key = resolveMarketSectionTabKey(market);
|
|
23705
|
+
if (!key || !key.startsWith("period:")) return key;
|
|
23706
|
+
const family = key.slice("period:".length);
|
|
23707
|
+
return isPeriodFamilyAllowedForSport(family, sport) ? key : "other";
|
|
23708
|
+
};
|
|
23677
23709
|
var resolveVisibleSportsSectionTabs = (event) => {
|
|
23678
23710
|
var _a, _b, _c;
|
|
23679
23711
|
const periodsByFamily = /* @__PURE__ */ new Map();
|
|
@@ -23682,7 +23714,7 @@ var resolveVisibleSportsSectionTabs = (event) => {
|
|
|
23682
23714
|
let hasExactScore = false;
|
|
23683
23715
|
let hasOther = false;
|
|
23684
23716
|
for (const market of event.venueMarkets) {
|
|
23685
|
-
const key =
|
|
23717
|
+
const key = resolveEffectiveMarketSectionTabKey(market, event.sport);
|
|
23686
23718
|
if (!key) continue;
|
|
23687
23719
|
if (key === "game_lines") hasGameLines = true;
|
|
23688
23720
|
else if (key === "exact_score") hasExactScore = true;
|
|
@@ -23804,30 +23836,40 @@ var dropDecomposedLegsMergedIntoSingle = (markets) => {
|
|
|
23804
23836
|
var resolveSportsSectionMarkets = ({
|
|
23805
23837
|
tab,
|
|
23806
23838
|
eventMarkets,
|
|
23807
|
-
sectionMarkets
|
|
23839
|
+
sectionMarkets,
|
|
23840
|
+
sport
|
|
23808
23841
|
}) => {
|
|
23809
|
-
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
23842
|
+
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter(
|
|
23843
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
23844
|
+
);
|
|
23810
23845
|
const filteredSectionMarkets = effectiveSectionMarkets.filter(
|
|
23811
|
-
(market) =>
|
|
23846
|
+
(market) => resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
23812
23847
|
);
|
|
23813
23848
|
if (tab.key === "other" || tab.key === `stat:${SPORTS_GENERIC_STAT}`) {
|
|
23814
23849
|
const seenIds = new Set(filteredSectionMarkets.map((market) => market.id));
|
|
23815
23850
|
const strayMarkets = eventMarkets.filter(
|
|
23816
|
-
(market) => !seenIds.has(market.id) &&
|
|
23851
|
+
(market) => !seenIds.has(market.id) && resolveEffectiveMarketSectionTabKey(market, sport) === tab.key
|
|
23817
23852
|
);
|
|
23818
23853
|
return [...filteredSectionMarkets, ...strayMarkets];
|
|
23819
23854
|
}
|
|
23820
23855
|
if (tab.kind !== "game_lines") return filteredSectionMarkets;
|
|
23821
23856
|
const dedupeEventMarketsOfType = (type) => {
|
|
23822
23857
|
const dedupedMarkets = [];
|
|
23823
|
-
const
|
|
23858
|
+
const keptIndexByKey = /* @__PURE__ */ new Map();
|
|
23824
23859
|
for (const market of eventMarkets) {
|
|
23825
23860
|
if (normalizeSportsMarketType(market.sportsMarketType) !== type || resolveMarketSectionTabKey(market) !== "game_lines") {
|
|
23826
23861
|
continue;
|
|
23827
23862
|
}
|
|
23828
23863
|
const key = resolveSportsMarketAggKey(market) || market.id;
|
|
23829
|
-
|
|
23830
|
-
|
|
23864
|
+
const keptIndex = keptIndexByKey.get(key);
|
|
23865
|
+
if (keptIndex !== void 0) {
|
|
23866
|
+
const kept = dedupedMarkets[keptIndex];
|
|
23867
|
+
if (!hasTeamTitledOutcomes(kept) && hasTeamTitledOutcomes(market)) {
|
|
23868
|
+
dedupedMarkets[keptIndex] = market;
|
|
23869
|
+
}
|
|
23870
|
+
continue;
|
|
23871
|
+
}
|
|
23872
|
+
keptIndexByKey.set(key, dedupedMarkets.length);
|
|
23831
23873
|
dedupedMarkets.push(market);
|
|
23832
23874
|
}
|
|
23833
23875
|
return dropDecomposedLegsMergedIntoSingle(dedupedMarkets);
|
|
@@ -24910,9 +24952,10 @@ var SportsMarkets = ({
|
|
|
24910
24952
|
() => resolveSportsSectionMarkets({
|
|
24911
24953
|
tab: activeTab,
|
|
24912
24954
|
eventMarkets: tabSourceMarkets,
|
|
24913
|
-
sectionMarkets
|
|
24955
|
+
sectionMarkets,
|
|
24956
|
+
sport: event.sport
|
|
24914
24957
|
}),
|
|
24915
|
-
[activeTab, tabSourceMarkets, sectionMarkets]
|
|
24958
|
+
[activeTab, tabSourceMarkets, sectionMarkets, event.sport]
|
|
24916
24959
|
);
|
|
24917
24960
|
const isSectionSettled = !isSectionLoading && !hasNextPage && !isFetchingNextPage;
|
|
24918
24961
|
const stableSectionMarkets = stableMarketsByTab[activeTabKey];
|
package/dist/pages.mjs
CHANGED
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
UserProfilePage,
|
|
9
9
|
buildAggTxExplorerHref,
|
|
10
10
|
useHomePageModals
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-7R2SMMAG.mjs";
|
|
12
|
+
import "./chunk-EKUH3265.mjs";
|
|
13
13
|
import {
|
|
14
14
|
DEPOSIT_MODAL_OPEN_EVENT,
|
|
15
15
|
WITHDRAW_MODAL_OPEN_EVENT,
|
|
@@ -44,6 +44,7 @@ export type SportsPeriodGroup = {
|
|
|
44
44
|
markets: VenueMarket[];
|
|
45
45
|
groups: SportsMarketDisplayGroup[];
|
|
46
46
|
};
|
|
47
|
+
export declare const getSportsPeriodOrderIndex: (period: SportsPeriodKey) => number;
|
|
47
48
|
/**
|
|
48
49
|
* Collapse a period into its display FAMILY, so one tab covers the periods a
|
|
49
50
|
* viewer thinks of together: soccer's 1h+2h are a single "Halves" tab (as
|
|
@@ -73,17 +74,26 @@ export declare const resolveSportsStatToken: (market: Pick<VenueMarket, "marketS
|
|
|
73
74
|
* ungrouped market list instead of inventing an empty tab.
|
|
74
75
|
*/
|
|
75
76
|
export declare const resolveMarketSectionTabKey: (market: Pick<VenueMarket, "marketGroup" | "marketCategory" | "marketSubtype" | "question" | "sportsMarketType" | "period">) => string | null;
|
|
76
|
-
|
|
77
|
+
/**
|
|
78
|
+
* `resolveMarketSectionTabKey`, sport-gated: a "period:<family>" key whose
|
|
79
|
+
* family isn't plausible for the event's sport demotes to "other" so the
|
|
80
|
+
* market surfaces under the Other tab instead of a nonsense period tab. Used
|
|
81
|
+
* by both the visible-tabs builder and the section-market filter so a
|
|
82
|
+
* demoted market is never silently dropped from either.
|
|
83
|
+
*/
|
|
84
|
+
export declare const resolveEffectiveMarketSectionTabKey: (market: Parameters<typeof resolveMarketSectionTabKey>[0], sport?: string | null) => string | null;
|
|
85
|
+
export declare const resolveVisibleSportsSectionTabs: (event: Pick<VenueEventWithMarkets, "categories" | "title" | "venueMarkets" | "sport">) => SportsSectionTab[];
|
|
77
86
|
export declare const resolveSportsSectionFilters: (tab: SportsSectionTab) => {
|
|
78
87
|
marketGroup?: SportsMarketGroupKey[];
|
|
79
88
|
marketCategory?: SportsMarketCategoryKey[];
|
|
80
89
|
sportsMarketType?: SportsMarketTypeKey[];
|
|
81
90
|
period?: SportsPeriodKey[];
|
|
82
91
|
};
|
|
83
|
-
export declare const resolveSportsSectionMarkets: ({ tab, eventMarkets, sectionMarkets, }: {
|
|
92
|
+
export declare const resolveSportsSectionMarkets: ({ tab, eventMarkets, sectionMarkets, sport, }: {
|
|
84
93
|
tab: SportsSectionTab;
|
|
85
94
|
eventMarkets: VenueMarket[];
|
|
86
95
|
sectionMarkets: VenueMarket[];
|
|
96
|
+
sport?: string | null;
|
|
87
97
|
}) => VenueMarket[];
|
|
88
98
|
export declare const resolveSportsMarketCardVariant: (market: VenueMarket) => SportsMarketCardVariant;
|
|
89
99
|
export declare const isBinarySportsMoneylineMarket: (market: VenueMarket) => boolean;
|
|
@@ -44,6 +44,7 @@ export type SportsPeriodGroup = {
|
|
|
44
44
|
markets: VenueMarket[];
|
|
45
45
|
groups: SportsMarketDisplayGroup[];
|
|
46
46
|
};
|
|
47
|
+
export declare const getSportsPeriodOrderIndex: (period: SportsPeriodKey) => number;
|
|
47
48
|
/**
|
|
48
49
|
* Collapse a period into its display FAMILY, so one tab covers the periods a
|
|
49
50
|
* viewer thinks of together: soccer's 1h+2h are a single "Halves" tab (as
|
|
@@ -73,17 +74,26 @@ export declare const resolveSportsStatToken: (market: Pick<VenueMarket, "marketS
|
|
|
73
74
|
* ungrouped market list instead of inventing an empty tab.
|
|
74
75
|
*/
|
|
75
76
|
export declare const resolveMarketSectionTabKey: (market: Pick<VenueMarket, "marketGroup" | "marketCategory" | "marketSubtype" | "question" | "sportsMarketType" | "period">) => string | null;
|
|
76
|
-
|
|
77
|
+
/**
|
|
78
|
+
* `resolveMarketSectionTabKey`, sport-gated: a "period:<family>" key whose
|
|
79
|
+
* family isn't plausible for the event's sport demotes to "other" so the
|
|
80
|
+
* market surfaces under the Other tab instead of a nonsense period tab. Used
|
|
81
|
+
* by both the visible-tabs builder and the section-market filter so a
|
|
82
|
+
* demoted market is never silently dropped from either.
|
|
83
|
+
*/
|
|
84
|
+
export declare const resolveEffectiveMarketSectionTabKey: (market: Parameters<typeof resolveMarketSectionTabKey>[0], sport?: string | null) => string | null;
|
|
85
|
+
export declare const resolveVisibleSportsSectionTabs: (event: Pick<VenueEventWithMarkets, "categories" | "title" | "venueMarkets" | "sport">) => SportsSectionTab[];
|
|
77
86
|
export declare const resolveSportsSectionFilters: (tab: SportsSectionTab) => {
|
|
78
87
|
marketGroup?: SportsMarketGroupKey[];
|
|
79
88
|
marketCategory?: SportsMarketCategoryKey[];
|
|
80
89
|
sportsMarketType?: SportsMarketTypeKey[];
|
|
81
90
|
period?: SportsPeriodKey[];
|
|
82
91
|
};
|
|
83
|
-
export declare const resolveSportsSectionMarkets: ({ tab, eventMarkets, sectionMarkets, }: {
|
|
92
|
+
export declare const resolveSportsSectionMarkets: ({ tab, eventMarkets, sectionMarkets, sport, }: {
|
|
84
93
|
tab: SportsSectionTab;
|
|
85
94
|
eventMarkets: VenueMarket[];
|
|
86
95
|
sectionMarkets: VenueMarket[];
|
|
96
|
+
sport?: string | null;
|
|
87
97
|
}) => VenueMarket[];
|
|
88
98
|
export declare const resolveSportsMarketCardVariant: (market: VenueMarket) => SportsMarketCardVariant;
|
|
89
99
|
export declare const isBinarySportsMoneylineMarket: (market: VenueMarket) => boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agg-build/ui",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.2",
|
|
4
4
|
"description": "Pre-built React component library for the AGG prediction market aggregator. Tailwind-based, themeable, with primitives, event surfaces, trading flows, full pages, and modals.",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"liveline": "^0.0.7",
|
|
101
101
|
"react": "^18.0.0 || ^19.0.0",
|
|
102
102
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
103
|
-
"@agg-build/hooks": "^2.7.
|
|
103
|
+
"@agg-build/hooks": "^2.7.2",
|
|
104
104
|
"@agg-build/sdk": "^2.5.1"
|
|
105
105
|
},
|
|
106
106
|
"dependencies": {
|