@agg-build/ui 2.5.3 → 2.7.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/{chunk-AELMIG74.mjs → chunk-C247AYH7.mjs} +242 -162
- package/dist/{chunk-FAU2VOL6.mjs → chunk-O27JUYCF.mjs} +36 -25
- package/dist/index.js +277 -186
- package/dist/index.mjs +2 -2
- package/dist/pages.js +277 -186
- package/dist/pages.mjs +2 -2
- package/dist/trading.js +36 -25
- package/dist/trading.mjs +1 -1
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.mts +5 -5
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.ts +5 -5
- package/dist/types/pages/event-market/sports-event-market.utils.d.mts +34 -43
- package/dist/types/pages/event-market/sports-event-market.utils.d.ts +34 -43
- package/dist/types/pages/event-market/sports-markets.d.mts +1 -2
- package/dist/types/pages/event-market/sports-markets.d.ts +1 -2
- package/dist/types/trading/place-order/index.place-order.utils.d.mts +9 -0
- package/dist/types/trading/place-order/index.place-order.utils.d.ts +9 -0
- package/package.json +2 -2
package/dist/pages.js
CHANGED
|
@@ -18331,7 +18331,7 @@ var buildLiveRouteCards = ({
|
|
|
18331
18331
|
};
|
|
18332
18332
|
}
|
|
18333
18333
|
const avgPrice = sq.avgPrice;
|
|
18334
|
-
const soloQuoteData = __spreadProps(__spreadValues({}, quoteData), {
|
|
18334
|
+
const soloQuoteData = __spreadValues(__spreadProps(__spreadValues({}, quoteData), {
|
|
18335
18335
|
// Preview-only solos intentionally carry no executable quoteId; the card
|
|
18336
18336
|
// should still render for comparison, while the CTA stays disabled until
|
|
18337
18337
|
// the user is funded and requotes.
|
|
@@ -18344,7 +18344,7 @@ var buildLiveRouteCards = ({
|
|
|
18344
18344
|
returnPct: sq.returnPct,
|
|
18345
18345
|
// venueSoloQuotes stripped on solo card's quoteData (only the primary needs them)
|
|
18346
18346
|
venueSoloQuotes: void 0
|
|
18347
|
-
});
|
|
18347
|
+
}), sq.quoteId ? { status: "ok", error: void 0 } : null);
|
|
18348
18348
|
return {
|
|
18349
18349
|
id: `live-solo-${sq.venue}`,
|
|
18350
18350
|
hint: labels.averagePrice(avgPrice),
|
|
@@ -18400,6 +18400,17 @@ var buildLiveRouteCards = ({
|
|
|
18400
18400
|
})() : [];
|
|
18401
18401
|
return [...baseCards, ...unavailableCards, ...warningOnlyUnavailableCards];
|
|
18402
18402
|
};
|
|
18403
|
+
var resolveDefaultRouteCardId = (routeCards, primaryStatus) => {
|
|
18404
|
+
var _a, _b, _c, _d;
|
|
18405
|
+
if (routeCards.length === 0) return null;
|
|
18406
|
+
if (primaryStatus === "insufficient_balance") {
|
|
18407
|
+
const executableCard = routeCards.find(
|
|
18408
|
+
(card) => !card.isUnavailable && card.quoteData.status === "ok" && card.quoteData.quoteId
|
|
18409
|
+
);
|
|
18410
|
+
if (executableCard) return executableCard.id;
|
|
18411
|
+
}
|
|
18412
|
+
return (_d = (_c = (_a = routeCards.find((card) => !card.isUnavailable)) == null ? void 0 : _a.id) != null ? _c : (_b = routeCards[0]) == null ? void 0 : _b.id) != null ? _d : null;
|
|
18413
|
+
};
|
|
18403
18414
|
var sellSharesToAtomicUnits = (shares) => {
|
|
18404
18415
|
if (!Number.isFinite(shares) || shares <= 0) return BigInt(0);
|
|
18405
18416
|
const [whole = "0", fraction = ""] = shares.toFixed(12).split(".");
|
|
@@ -20334,7 +20345,7 @@ var PlaceOrder = ({
|
|
|
20334
20345
|
resolvedClaim,
|
|
20335
20346
|
midpointsResult
|
|
20336
20347
|
}) => {
|
|
20337
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X;
|
|
20348
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y;
|
|
20338
20349
|
const {
|
|
20339
20350
|
enableDebug: isExecutionDebugEnabled,
|
|
20340
20351
|
features: { enableAnimations, showFeesBreakdown, showLimitOrders },
|
|
@@ -20765,13 +20776,13 @@ var PlaceOrder = ({
|
|
|
20765
20776
|
venueSellQuotes.quotes
|
|
20766
20777
|
]);
|
|
20767
20778
|
const resolvedSelectedRouteCardId = (0, import_react36.useMemo)(() => {
|
|
20768
|
-
var _a2
|
|
20779
|
+
var _a2;
|
|
20769
20780
|
if (routeCards.length === 0) return null;
|
|
20770
20781
|
if (selectedRouteCardId && routeCards.some((card) => card.id === selectedRouteCardId && !card.isUnavailable)) {
|
|
20771
20782
|
return selectedRouteCardId;
|
|
20772
20783
|
}
|
|
20773
|
-
return (
|
|
20774
|
-
}, [routeCards, selectedRouteCardId]);
|
|
20784
|
+
return resolveDefaultRouteCardId(routeCards, isSell ? void 0 : (_a2 = smartRoute.data) == null ? void 0 : _a2.status);
|
|
20785
|
+
}, [routeCards, selectedRouteCardId, isSell, (_w = smartRoute.data) == null ? void 0 : _w.status]);
|
|
20775
20786
|
(0, import_react36.useEffect)(() => {
|
|
20776
20787
|
if (routeCards.length === 0) {
|
|
20777
20788
|
setSelectedRouteCardId(null);
|
|
@@ -20811,14 +20822,14 @@ var PlaceOrder = ({
|
|
|
20811
20822
|
setLimitPriceInputError(null);
|
|
20812
20823
|
}, [executionType, scopedSelectedOutcomeId, selectedOutcomeDisplayPrice]);
|
|
20813
20824
|
const orderedRouteCards = routeCards;
|
|
20814
|
-
const selectedRouteCard = (
|
|
20825
|
+
const selectedRouteCard = (_y = (_x = orderedRouteCards.find((card) => card.id === resolvedSelectedRouteCardId)) != null ? _x : orderedRouteCards[0]) != null ? _y : null;
|
|
20815
20826
|
const isKalshiRoute = (0, import_react36.useMemo)(() => {
|
|
20816
20827
|
if (selectedRouteCard) {
|
|
20817
20828
|
return selectedRouteCard.venue === "kalshi" || selectedRouteCard.quoteData.fills.some((f) => f.venue === "kalshi");
|
|
20818
20829
|
}
|
|
20819
20830
|
return (scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.venue) === "kalshi";
|
|
20820
20831
|
}, [selectedRouteCard, scopedSelectedMarket]);
|
|
20821
|
-
const displayedBalance = isPaperMode ? paperTotalBalance : isKalshiRoute ? (
|
|
20832
|
+
const displayedBalance = isPaperMode ? paperTotalBalance : isKalshiRoute ? (_z = liveBalanceState.kalshiBalance) != null ? _z : 0 : liveAvailableBalance;
|
|
20822
20833
|
const legacyKalshiAccount = (0, import_react36.useMemo)(
|
|
20823
20834
|
() => {
|
|
20824
20835
|
var _a2;
|
|
@@ -20826,8 +20837,8 @@ var PlaceOrder = ({
|
|
|
20826
20837
|
},
|
|
20827
20838
|
[user == null ? void 0 : user.venueAccounts]
|
|
20828
20839
|
);
|
|
20829
|
-
const isKalshiAccountActive = (
|
|
20830
|
-
const isKalshiVerified = ((
|
|
20840
|
+
const isKalshiAccountActive = (_A = kalshiKeyStatus == null ? void 0 : kalshiKeyStatus.connected) != null ? _A : (legacyKalshiAccount == null ? void 0 : legacyKalshiAccount.status) === "active";
|
|
20841
|
+
const isKalshiVerified = ((_B = kalshiKeyStatus == null ? void 0 : kalshiKeyStatus.kycStatus) != null ? _B : legacyKalshiAccount == null ? void 0 : legacyKalshiAccount.kycStatus) === "verified";
|
|
20831
20842
|
const hasKalshiConnectionState = kalshiKeyStatus !== void 0 || (user == null ? void 0 : user.venueAccounts) != null;
|
|
20832
20843
|
const isKalshiAvailable = (0, import_hooks60.getVenueAvailabilityState)({
|
|
20833
20844
|
venueId: "kalshi",
|
|
@@ -20854,7 +20865,7 @@ var PlaceOrder = ({
|
|
|
20854
20865
|
[aggClient, onConnectKalshi, refetchKalshiKeyStatus]
|
|
20855
20866
|
);
|
|
20856
20867
|
const needsKycVerification = isAuthenticated && hasKalshiConnectionState && isKalshiRoute && isKalshiAccountActive && !isKalshiVerified;
|
|
20857
|
-
const verifyKalshiConnectionLabel = (
|
|
20868
|
+
const verifyKalshiConnectionLabel = (_F = (_E = (_D = (_C = labels.onboarding) == null ? void 0 : _C.connectKalshiModal) == null ? void 0 : _D.actions) == null ? void 0 : _E.verifyConnection) != null ? _F : tradingLabels.kycRequired;
|
|
20858
20869
|
const handleRouteCardSelect = (0, import_react36.useCallback)(
|
|
20859
20870
|
(cardId) => {
|
|
20860
20871
|
if (cardId === resolvedSelectedRouteCardId) {
|
|
@@ -20869,15 +20880,15 @@ var PlaceOrder = ({
|
|
|
20869
20880
|
[resolvedSelectedRouteCardId, routeCards]
|
|
20870
20881
|
);
|
|
20871
20882
|
const executionProgress = (0, import_hooks60.useExecutionProgress)({
|
|
20872
|
-
orderIds: (
|
|
20873
|
-
quoteId: (
|
|
20883
|
+
orderIds: (_G = submissionProgressState == null ? void 0 : submissionProgressState.orderIds) != null ? _G : null,
|
|
20884
|
+
quoteId: (_H = submissionProgressState == null ? void 0 : submissionProgressState.quoteId) != null ? _H : null,
|
|
20874
20885
|
mode: isPaperMode ? "paper" : void 0,
|
|
20875
|
-
enabled: ((submissionProgressState == null ? void 0 : submissionProgressState.phase) === "submitting" || (submissionProgressState == null ? void 0 : submissionProgressState.phase) === "executing") && !!((
|
|
20886
|
+
enabled: ((submissionProgressState == null ? void 0 : submissionProgressState.phase) === "submitting" || (submissionProgressState == null ? void 0 : submissionProgressState.phase) === "executing") && !!((_I = submissionProgressState == null ? void 0 : submissionProgressState.orderIds) == null ? void 0 : _I.length)
|
|
20876
20887
|
});
|
|
20877
|
-
const selectedOutcomeLabel = (
|
|
20878
|
-
const headerImage = (
|
|
20879
|
-
const headerTitle = (
|
|
20880
|
-
const headerSubtitle = (
|
|
20888
|
+
const selectedOutcomeLabel = (_L = (_K = (_J = outcomes.find((outcome) => outcome.id === scopedSelectedOutcomeId)) == null ? void 0 : _J.label) != null ? _K : scopedSelectedOutcome == null ? void 0 : scopedSelectedOutcome.label) != null ? _L : "";
|
|
20889
|
+
const headerImage = (_N = (_M = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.image) != null ? _M : scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.image) != null ? _N : null;
|
|
20890
|
+
const headerTitle = (_P = (_O = scopedSelectedEvent == null ? void 0 : scopedSelectedEvent.title) != null ? _O : scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.question) != null ? _P : "";
|
|
20891
|
+
const headerSubtitle = (_Q = scopedSelectedMarket == null ? void 0 : scopedSelectedMarket.question) != null ? _Q : "";
|
|
20881
20892
|
const buildExecutionSummary = (0, import_react36.useCallback)(
|
|
20882
20893
|
(quoteData, executionVenue, orderId, partialFillSummary) => {
|
|
20883
20894
|
var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2;
|
|
@@ -21175,19 +21186,19 @@ var PlaceOrder = ({
|
|
|
21175
21186
|
queryClient,
|
|
21176
21187
|
submissionProgressState
|
|
21177
21188
|
]);
|
|
21178
|
-
const activeQuoteData = (
|
|
21189
|
+
const activeQuoteData = (_S = (_R = selectedRouteCard == null ? void 0 : selectedRouteCard.quoteData) != null ? _R : smartRoute.data) != null ? _S : null;
|
|
21179
21190
|
const visibleRouteCards = orderedRouteCards.length > PLACE_ORDER_ROUTE_COLLAPSED_CARD_COUNT && !isRoutesExpanded ? orderedRouteCards.slice(0, PLACE_ORDER_ROUTE_COLLAPSED_CARD_COUNT) : orderedRouteCards;
|
|
21180
21191
|
const hasEnteredAmount = internalAmount > 0;
|
|
21181
21192
|
const isQuoteLoading = !isLimitOrder && hasEnteredAmount && (smartRoute.isFetching || smartRoute.isLoading || isSell && (venueSellQuotes.isFetching || venueSellQuotes.isLoading));
|
|
21182
21193
|
const routeLoadingMessage = isQuoteLoading ? smartRoute.loadingReason === "updating-route" ? tradingLabels.updatingRoute : smartRoute.loadingReason === "refreshing-quotes" ? tradingLabels.refreshingQuotes : tradingLabels.findingBestOdds : null;
|
|
21183
|
-
const selectedRouteFills = (
|
|
21194
|
+
const selectedRouteFills = (_T = selectedRouteCard == null ? void 0 : selectedRouteCard.quoteData.fills) != null ? _T : [];
|
|
21184
21195
|
const isKalshiOnlyRoute = isKalshiRoute && ((selectedRouteCard == null ? void 0 : selectedRouteCard.venue) === import_sdk22.Venue.kalshi || selectedRouteFills.length > 0 && selectedRouteFills.every((fill) => fill.venue === import_sdk22.Venue.kalshi));
|
|
21185
21196
|
const isOnchainOnlyRoute = !isKalshiRoute || selectedRouteFills.length > 0 && selectedRouteFills.every((fill) => fill.venue !== import_sdk22.Venue.kalshi);
|
|
21186
21197
|
const kalshiRequiredAmount = isSell ? 0 : selectedRouteFills.filter((fill) => fill.venue === import_sdk22.Venue.kalshi).reduce((total, fill) => total + fill.venueQty * fill.avgPrice, 0);
|
|
21187
21198
|
const onchainRequiredAmount = isSell ? 0 : selectedRouteFills.filter((fill) => fill.venue !== import_sdk22.Venue.kalshi).reduce((total, fill) => total + fill.venueQty * fill.avgPrice, 0);
|
|
21188
21199
|
const resolvedKalshiRequiredAmount = isKalshiOnlyRoute || isKalshiRoute && selectedRouteFills.length === 0 ? internalAmount : kalshiRequiredAmount;
|
|
21189
21200
|
const resolvedOnchainRequiredAmount = isOnchainOnlyRoute || !isKalshiRoute && selectedRouteFills.length === 0 ? internalAmount : onchainRequiredAmount;
|
|
21190
|
-
const isKalshiBalanceInsufficient = !isPaperMode && isKalshiRoute && resolvedKalshiRequiredAmount > ((
|
|
21201
|
+
const isKalshiBalanceInsufficient = !isPaperMode && isKalshiRoute && resolvedKalshiRequiredAmount > ((_U = liveBalanceState.kalshiBalance) != null ? _U : 0);
|
|
21191
21202
|
const isOnchainBalanceInsufficient = resolvedOnchainRequiredAmount > liveAvailableBalance;
|
|
21192
21203
|
const isInsufficientBalance = !isSell && isAuthenticated && hasEnteredAmount && !isBalanceLoading && (isLimitOrder ? internalAmount > totalBalance : isPaperMode ? internalAmount > paperTotalBalance : isKalshiBalanceInsufficient || isOnchainBalanceInsufficient);
|
|
21193
21204
|
const isQuoteInsufficientBalance = !isLimitOrder && (activeQuoteData == null ? void 0 : activeQuoteData.status) === "insufficient_balance";
|
|
@@ -21281,7 +21292,7 @@ var PlaceOrder = ({
|
|
|
21281
21292
|
}
|
|
21282
21293
|
return (_d2 = selectedRouteCard.hint) != null ? _d2 : "";
|
|
21283
21294
|
}, [selectedRouteCard, tradingLabels]);
|
|
21284
|
-
const displayedToWinValue = (
|
|
21295
|
+
const displayedToWinValue = (_V = selectedRouteCard == null ? void 0 : selectedRouteCard.numericValue) != null ? _V : 0;
|
|
21285
21296
|
const limitOrderPayload = (0, import_react36.useMemo)(() => {
|
|
21286
21297
|
if (!scopedSelectedMarket || !scopedSelectedOutcomeId || internalAmount <= 0) return null;
|
|
21287
21298
|
if (limitPriceInputError) return null;
|
|
@@ -21400,13 +21411,13 @@ var PlaceOrder = ({
|
|
|
21400
21411
|
];
|
|
21401
21412
|
}, [activeFeeBreakdown, tradingLabels]);
|
|
21402
21413
|
const isActionLoading = isPrimaryActionLoading || executeManaged.isPending || placeLimitOrder.isPending || isBeforeActionPending;
|
|
21403
|
-
const selectedRouteGeoBlocked = (
|
|
21414
|
+
const selectedRouteGeoBlocked = (_W = selectedRouteCard == null ? void 0 : selectedRouteCard.isUnavailable) != null ? _W : false;
|
|
21404
21415
|
const geoBlockedVenuesFromWarnings = (0, import_react36.useMemo)(
|
|
21405
21416
|
() => {
|
|
21406
21417
|
var _a2;
|
|
21407
21418
|
return extractGeoBlockedVenues((_a2 = smartRoute.data) == null ? void 0 : _a2.warnings);
|
|
21408
21419
|
},
|
|
21409
|
-
[(
|
|
21420
|
+
[(_X = smartRoute.data) == null ? void 0 : _X.warnings]
|
|
21410
21421
|
);
|
|
21411
21422
|
const isPrimaryVenueGeoBlocked = (0, import_react36.useMemo)(() => {
|
|
21412
21423
|
var _a2, _b2;
|
|
@@ -22064,7 +22075,7 @@ var PlaceOrder = ({
|
|
|
22064
22075
|
PlaceOrderResolvedView,
|
|
22065
22076
|
{
|
|
22066
22077
|
tradingState: resolvedReadOnlyTradingState,
|
|
22067
|
-
resolutionTimestamp: (
|
|
22078
|
+
resolutionTimestamp: (_Y = resolvedEventTradingState.resolvesAt) != null ? _Y : resolvedReadOnlyTradingState.resolvesAt,
|
|
22068
22079
|
resolvedClaim,
|
|
22069
22080
|
classNames,
|
|
22070
22081
|
className,
|
|
@@ -23497,64 +23508,15 @@ var SPORTS_LEGACY_PROP_CATEGORY_KEY_SET = /* @__PURE__ */ new Set([
|
|
|
23497
23508
|
"assists",
|
|
23498
23509
|
"shots"
|
|
23499
23510
|
]);
|
|
23500
|
-
var
|
|
23501
|
-
"
|
|
23502
|
-
|
|
23503
|
-
|
|
23504
|
-
|
|
23505
|
-
|
|
23506
|
-
|
|
23507
|
-
totals: "game_lines",
|
|
23508
|
-
period_lines: "halves",
|
|
23509
|
-
exact_score: "exact_score",
|
|
23510
|
-
team_props: "other",
|
|
23511
|
-
player_props: "other",
|
|
23512
|
-
specials: "other",
|
|
23513
|
-
completion: "other",
|
|
23514
|
-
other: "other"
|
|
23515
|
-
};
|
|
23516
|
-
var SPORTS_SECTION_TAB_DEFINITIONS = [
|
|
23517
|
-
{
|
|
23518
|
-
key: "game_lines",
|
|
23519
|
-
// NO sportsMarketType filter: spread/total markets on some sports (e.g.
|
|
23520
|
-
// esports "Map 1 Rounds Handicap"/"Total Rounds") are sportsMarketType="other"
|
|
23521
|
-
// with marketGroup=spreads/totals; AND-ing the game-line types would drop them
|
|
23522
|
-
// and leave only the moneyline. marketGroup already scopes the tab. (Safe now
|
|
23523
|
-
// that classify_market no longer mis-groups prop/to-score-first/extra-innings
|
|
23524
|
-
// markets into game_lines/totals — see agg-venue-core market_group.rs.)
|
|
23525
|
-
marketGroup: ["game_lines", "spreads", "totals"]
|
|
23526
|
-
// No server-side period filter: many regular-time game-line markets arrive
|
|
23527
|
-
// with period=null (moneyline sides, team totals, BTTS), and a
|
|
23528
|
-
// period=["full"] filter would drop them server-side. The Game Lines tab
|
|
23529
|
-
// narrows to the regular-time group client-side instead (see SportsMarkets).
|
|
23530
|
-
},
|
|
23531
|
-
{ key: "exact_score", marketGroup: ["exact_score"] },
|
|
23532
|
-
{
|
|
23533
|
-
key: "halves",
|
|
23534
|
-
// NO sportsMarketType filter: half-result legs ("France leading at halftime?")
|
|
23535
|
-
// are sportsMarketType="other"; AND-ing the game-line types would drop them.
|
|
23536
|
-
// marketGroup=period_lines + period already scope the tab.
|
|
23537
|
-
marketGroup: ["period_lines"],
|
|
23538
|
-
period: ["1h", "2h"]
|
|
23539
|
-
},
|
|
23540
|
-
{ key: "corners", marketCategory: "corners" },
|
|
23541
|
-
{ key: "goals", marketCategory: "goals" },
|
|
23542
|
-
{ key: "assists", marketCategory: "assists" },
|
|
23543
|
-
{ key: "shots", marketCategory: "shots" },
|
|
23544
|
-
{
|
|
23545
|
-
key: "other",
|
|
23546
|
-
// `player_props` is deliberately NOT fetched here: goals/assists/shots/corners
|
|
23547
|
-
// props already have dedicated tabs (resolveMarketSectionTabKey routes them
|
|
23548
|
-
// there by category), so including the group would re-fetch hundreds of props
|
|
23549
|
-
// already shown elsewhere. The handful with no stat category (e.g. "saves")
|
|
23550
|
-
// are back-filled from the game-wide set in resolveSportsSectionMarkets.
|
|
23551
|
-
marketGroup: ["other", "team_props", "specials", "completion"]
|
|
23552
|
-
}
|
|
23511
|
+
var SPORTS_GAME_LINE_GROUPS = [
|
|
23512
|
+
"game_lines",
|
|
23513
|
+
"spreads",
|
|
23514
|
+
"totals",
|
|
23515
|
+
"team_props",
|
|
23516
|
+
"specials",
|
|
23517
|
+
"completion"
|
|
23553
23518
|
];
|
|
23554
|
-
var
|
|
23555
|
-
var SPORTS_NON_STANDARD_VISIBLE_TAB_KEY_SET = new Set(
|
|
23556
|
-
SPORTS_NON_STANDARD_VISIBLE_TAB_KEYS
|
|
23557
|
-
);
|
|
23519
|
+
var SPORTS_GENERIC_STAT = "player_props";
|
|
23558
23520
|
var ESPORTS_CATEGORY_TOKENS = /* @__PURE__ */ new Set([
|
|
23559
23521
|
"esports",
|
|
23560
23522
|
"video games",
|
|
@@ -23565,9 +23527,6 @@ var ESPORTS_CATEGORY_TOKENS = /* @__PURE__ */ new Set([
|
|
|
23565
23527
|
]);
|
|
23566
23528
|
var ESPORTS_TITLE_PATTERN = /\b(?:esports?|valorant|counter-strike|cs2|league of legends|lol|dota|rocket league|overwatch|rainbow six|starcraft|call of duty)\b/i;
|
|
23567
23529
|
var SERIES_SCOPE_PATTERN = /\b(?:bo[1-9]|best of \d+|map \d+|game \d+)\b/i;
|
|
23568
|
-
var SPORTS_SECTION_TAB_BY_KEY = new Map(
|
|
23569
|
-
SPORTS_SECTION_TAB_DEFINITIONS.map((definition) => [definition.key, definition])
|
|
23570
|
-
);
|
|
23571
23530
|
var SPORTS_PERIOD_ORDER = [
|
|
23572
23531
|
"full",
|
|
23573
23532
|
"1h",
|
|
@@ -23632,12 +23591,13 @@ var getSportsMarketTypeOrderIndex = (sportsMarketType) => {
|
|
|
23632
23591
|
const marketTypeIndex = SPORTS_MARKET_TYPE_ORDER.indexOf(sportsMarketType);
|
|
23633
23592
|
return marketTypeIndex >= 0 ? marketTypeIndex : SPORTS_MARKET_TYPE_ORDER.length;
|
|
23634
23593
|
};
|
|
23635
|
-
var
|
|
23636
|
-
|
|
23637
|
-
if (
|
|
23638
|
-
|
|
23639
|
-
}
|
|
23640
|
-
return
|
|
23594
|
+
var resolveSportsPeriodFamily = (period) => {
|
|
23595
|
+
if (period === "1h" || period === "2h") return "halves";
|
|
23596
|
+
if (period === "q1" || period === "q2" || period === "q3" || period === "q4") return "quarters";
|
|
23597
|
+
if (/^inning_\d{1,2}$/.test(period)) return "innings";
|
|
23598
|
+
if (/^set_\d{1,2}$/.test(period)) return "sets";
|
|
23599
|
+
if (/^(?:map|game)_\d{1,2}$/.test(period)) return "maps";
|
|
23600
|
+
return period;
|
|
23641
23601
|
};
|
|
23642
23602
|
var normalizeSportsPeriod = (value) => {
|
|
23643
23603
|
const resolvedValue = toTrimmedString(value).toLowerCase();
|
|
@@ -23682,34 +23642,134 @@ var resolveFallbackSportsMarketCategory = (market) => {
|
|
|
23682
23642
|
if (question.includes("goal")) return "goals";
|
|
23683
23643
|
return null;
|
|
23684
23644
|
};
|
|
23645
|
+
var resolveSportsStatToken = (market) => {
|
|
23646
|
+
const subtype = toTrimmedString(market.marketSubtype).toLowerCase();
|
|
23647
|
+
const playerMatch = /_player_(.+)$/.exec(subtype);
|
|
23648
|
+
if (playerMatch) return playerMatch[1];
|
|
23649
|
+
const category = normalizeSportsMarketCategory(market.marketCategory);
|
|
23650
|
+
if (category && SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(category)) return category;
|
|
23651
|
+
return null;
|
|
23652
|
+
};
|
|
23685
23653
|
var resolveMarketSectionTabKey = (market) => {
|
|
23654
|
+
var _a;
|
|
23686
23655
|
if (normalizeSportsMarketType(market.sportsMarketType) === "to_advance") {
|
|
23687
23656
|
return "game_lines";
|
|
23688
23657
|
}
|
|
23689
23658
|
const normalizedCategory = normalizeSportsMarketCategory(market.marketCategory);
|
|
23690
23659
|
const fallbackCategory = !normalizedCategory || normalizedCategory === "other" ? resolveFallbackSportsMarketCategory(market) : null;
|
|
23691
23660
|
const category = fallbackCategory != null ? fallbackCategory : normalizedCategory;
|
|
23692
|
-
if (category &&
|
|
23693
|
-
|
|
23694
|
-
}
|
|
23661
|
+
if (category && SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(category)) return `stat:${category}`;
|
|
23662
|
+
if (category === "exact_score") return "exact_score";
|
|
23695
23663
|
const group = normalizeSportsMarketGroup(market.marketGroup);
|
|
23696
|
-
if (group) return
|
|
23664
|
+
if (group === "exact_score") return "exact_score";
|
|
23665
|
+
if (group === "player_props") {
|
|
23666
|
+
return `stat:${(_a = resolveSportsStatToken(market)) != null ? _a : SPORTS_GENERIC_STAT}`;
|
|
23667
|
+
}
|
|
23668
|
+
if (group === "period_lines") {
|
|
23669
|
+
return `period:${resolveSportsPeriodFamily(normalizeSportsPeriod(market.period))}`;
|
|
23670
|
+
}
|
|
23671
|
+
if (group === "other") return "other";
|
|
23672
|
+
if (group) return "game_lines";
|
|
23697
23673
|
if (category === "game_lines") return "game_lines";
|
|
23698
23674
|
if (category === "other") return "other";
|
|
23699
23675
|
return null;
|
|
23700
23676
|
};
|
|
23701
|
-
var
|
|
23702
|
-
var _a;
|
|
23703
|
-
const
|
|
23704
|
-
const
|
|
23677
|
+
var resolveVisibleSportsSectionTabs = (event) => {
|
|
23678
|
+
var _a, _b, _c;
|
|
23679
|
+
const periodsByFamily = /* @__PURE__ */ new Map();
|
|
23680
|
+
const statVolume = /* @__PURE__ */ new Map();
|
|
23681
|
+
let hasGameLines = false;
|
|
23682
|
+
let hasExactScore = false;
|
|
23683
|
+
let hasOther = false;
|
|
23684
|
+
for (const market of event.venueMarkets) {
|
|
23685
|
+
const key = resolveMarketSectionTabKey(market);
|
|
23686
|
+
if (!key) continue;
|
|
23687
|
+
if (key === "game_lines") hasGameLines = true;
|
|
23688
|
+
else if (key === "exact_score") hasExactScore = true;
|
|
23689
|
+
else if (key === "other") hasOther = true;
|
|
23690
|
+
else if (key.startsWith("period:")) {
|
|
23691
|
+
const family = key.slice("period:".length);
|
|
23692
|
+
const periods = (_a = periodsByFamily.get(family)) != null ? _a : /* @__PURE__ */ new Set();
|
|
23693
|
+
periods.add(normalizeSportsPeriod(market.period));
|
|
23694
|
+
periodsByFamily.set(family, periods);
|
|
23695
|
+
} else if (key.startsWith("stat:")) {
|
|
23696
|
+
const stat = key.slice("stat:".length);
|
|
23697
|
+
statVolume.set(stat, ((_b = statVolume.get(stat)) != null ? _b : 0) + ((_c = market.volume) != null ? _c : 0));
|
|
23698
|
+
}
|
|
23699
|
+
}
|
|
23700
|
+
const tabs = [];
|
|
23701
|
+
if (hasGameLines) tabs.push({ key: "game_lines", kind: "game_lines" });
|
|
23702
|
+
const periodTabs = Array.from(periodsByFamily.entries()).map(([periodFamily, periods]) => ({
|
|
23703
|
+
key: `period:${periodFamily}`,
|
|
23704
|
+
kind: "period",
|
|
23705
|
+
periodFamily,
|
|
23706
|
+
periods: Array.from(periods).sort(
|
|
23707
|
+
(left, right) => getSportsPeriodOrderIndex(left) - getSportsPeriodOrderIndex(right)
|
|
23708
|
+
)
|
|
23709
|
+
})).sort(
|
|
23710
|
+
(left, right) => getSportsPeriodOrderIndex(left.periods[0]) - getSportsPeriodOrderIndex(right.periods[0])
|
|
23711
|
+
);
|
|
23712
|
+
tabs.push(...periodTabs);
|
|
23713
|
+
const statTabs = Array.from(statVolume.entries()).sort((left, right) => {
|
|
23714
|
+
if (left[0] === SPORTS_GENERIC_STAT !== (right[0] === SPORTS_GENERIC_STAT)) {
|
|
23715
|
+
return left[0] === SPORTS_GENERIC_STAT ? 1 : -1;
|
|
23716
|
+
}
|
|
23717
|
+
return right[1] - left[1];
|
|
23718
|
+
}).map(([stat]) => ({ key: `stat:${stat}`, kind: "stat", stat }));
|
|
23719
|
+
tabs.push(...statTabs);
|
|
23720
|
+
if (hasExactScore) tabs.push({ key: "exact_score", kind: "exact_score" });
|
|
23721
|
+
if (hasOther) tabs.push({ key: "other", kind: "other" });
|
|
23722
|
+
if (isNonStandardSportsLikeEvent(event)) {
|
|
23723
|
+
return tabs.filter((tab) => tab.kind === "game_lines" || tab.kind === "other");
|
|
23724
|
+
}
|
|
23725
|
+
return tabs;
|
|
23726
|
+
};
|
|
23727
|
+
var resolveSportsSectionFilters = (tab) => {
|
|
23728
|
+
if (tab.kind === "period") {
|
|
23729
|
+
return {
|
|
23730
|
+
marketGroup: ["period_lines"],
|
|
23731
|
+
marketCategory: void 0,
|
|
23732
|
+
sportsMarketType: void 0,
|
|
23733
|
+
period: tab.periods ? [...tab.periods] : void 0
|
|
23734
|
+
};
|
|
23735
|
+
}
|
|
23736
|
+
if (tab.kind === "stat") {
|
|
23737
|
+
const legacyCategory = SPORTS_LEGACY_PROP_CATEGORY_KEY_SET.has(
|
|
23738
|
+
tab.stat
|
|
23739
|
+
) ? tab.stat : null;
|
|
23740
|
+
return legacyCategory ? {
|
|
23741
|
+
marketGroup: void 0,
|
|
23742
|
+
marketCategory: [legacyCategory],
|
|
23743
|
+
sportsMarketType: void 0,
|
|
23744
|
+
period: void 0
|
|
23745
|
+
} : {
|
|
23746
|
+
marketGroup: ["player_props"],
|
|
23747
|
+
marketCategory: void 0,
|
|
23748
|
+
sportsMarketType: void 0,
|
|
23749
|
+
period: void 0
|
|
23750
|
+
};
|
|
23751
|
+
}
|
|
23752
|
+
if (tab.kind === "exact_score") {
|
|
23753
|
+
return {
|
|
23754
|
+
marketGroup: ["exact_score"],
|
|
23755
|
+
marketCategory: void 0,
|
|
23756
|
+
sportsMarketType: void 0,
|
|
23757
|
+
period: void 0
|
|
23758
|
+
};
|
|
23759
|
+
}
|
|
23760
|
+
if (tab.kind === "other") {
|
|
23761
|
+
return {
|
|
23762
|
+
marketGroup: ["other"],
|
|
23763
|
+
marketCategory: void 0,
|
|
23764
|
+
sportsMarketType: void 0,
|
|
23765
|
+
period: void 0
|
|
23766
|
+
};
|
|
23767
|
+
}
|
|
23705
23768
|
return {
|
|
23706
|
-
marketGroup:
|
|
23707
|
-
|
|
23708
|
-
|
|
23709
|
-
|
|
23710
|
-
marketCategory: !useMarketGroup && resolvedDefinition.marketCategory ? [resolvedDefinition.marketCategory] : void 0,
|
|
23711
|
-
sportsMarketType: resolvedDefinition.sportsMarketType ? [...resolvedDefinition.sportsMarketType] : void 0,
|
|
23712
|
-
period: resolvedDefinition.period ? [...resolvedDefinition.period] : void 0
|
|
23769
|
+
marketGroup: [...SPORTS_GAME_LINE_GROUPS],
|
|
23770
|
+
marketCategory: void 0,
|
|
23771
|
+
sportsMarketType: void 0,
|
|
23772
|
+
period: void 0
|
|
23713
23773
|
};
|
|
23714
23774
|
};
|
|
23715
23775
|
var hasTeamTitledOutcomes = (market) => {
|
|
@@ -23723,28 +23783,41 @@ var isClusterRelation = (left, right) => {
|
|
|
23723
23783
|
var _a, _b;
|
|
23724
23784
|
return ((_a = left.matchedVenueMarkets) != null ? _a : []).some((market) => market.id === right.id) || ((_b = right.matchedVenueMarkets) != null ? _b : []).some((market) => market.id === left.id);
|
|
23725
23785
|
};
|
|
23726
|
-
var
|
|
23727
|
-
|
|
23728
|
-
|
|
23729
|
-
|
|
23730
|
-
);
|
|
23786
|
+
var isDecomposedLeg = (market) => {
|
|
23787
|
+
var _a;
|
|
23788
|
+
const labels = ((_a = market.venueMarketOutcomes) != null ? _a : []).map(
|
|
23789
|
+
(outcome) => toTrimmedString(outcome.label).toLowerCase()
|
|
23790
|
+
);
|
|
23791
|
+
return labels.length === 2 && labels.every((label2) => YES_NO_LABELS.has(label2)) && !hasTeamTitledOutcomes(market);
|
|
23792
|
+
};
|
|
23793
|
+
var dropDecomposedLegsMergedIntoSingle = (markets) => {
|
|
23794
|
+
const legs = markets.filter((market) => isDecomposedLeg(market));
|
|
23795
|
+
if (legs.length === 0) return markets;
|
|
23796
|
+
const hasMergedSingle = markets.some(
|
|
23797
|
+
(market) => {
|
|
23798
|
+
var _a, _b;
|
|
23799
|
+
return hasTeamTitledOutcomes(market) && ((_b = (_a = market.venueMarketOutcomes) == null ? void 0 : _a.length) != null ? _b : 0) >= legs.length && markets.some((other) => other !== market && isClusterRelation(market, other));
|
|
23800
|
+
}
|
|
23801
|
+
);
|
|
23802
|
+
return hasMergedSingle ? markets.filter((market) => !isDecomposedLeg(market)) : markets;
|
|
23803
|
+
};
|
|
23731
23804
|
var resolveSportsSectionMarkets = ({
|
|
23732
|
-
|
|
23805
|
+
tab,
|
|
23733
23806
|
eventMarkets,
|
|
23734
23807
|
sectionMarkets
|
|
23735
23808
|
}) => {
|
|
23736
|
-
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter((market) => resolveMarketSectionTabKey(market) ===
|
|
23809
|
+
const effectiveSectionMarkets = sectionMarkets.length > 0 ? sectionMarkets : eventMarkets.filter((market) => resolveMarketSectionTabKey(market) === tab.key);
|
|
23737
23810
|
const filteredSectionMarkets = effectiveSectionMarkets.filter(
|
|
23738
|
-
(market) => resolveMarketSectionTabKey(market) ===
|
|
23811
|
+
(market) => resolveMarketSectionTabKey(market) === tab.key
|
|
23739
23812
|
);
|
|
23740
|
-
if (
|
|
23813
|
+
if (tab.key === "other" || tab.key === `stat:${SPORTS_GENERIC_STAT}`) {
|
|
23741
23814
|
const seenIds = new Set(filteredSectionMarkets.map((market) => market.id));
|
|
23742
|
-
const
|
|
23743
|
-
(market) => !seenIds.has(market.id) && resolveMarketSectionTabKey(market) ===
|
|
23815
|
+
const strayMarkets = eventMarkets.filter(
|
|
23816
|
+
(market) => !seenIds.has(market.id) && resolveMarketSectionTabKey(market) === tab.key
|
|
23744
23817
|
);
|
|
23745
|
-
return [...filteredSectionMarkets, ...
|
|
23818
|
+
return [...filteredSectionMarkets, ...strayMarkets];
|
|
23746
23819
|
}
|
|
23747
|
-
if (
|
|
23820
|
+
if (tab.kind !== "game_lines") return filteredSectionMarkets;
|
|
23748
23821
|
const dedupeEventMarketsOfType = (type) => {
|
|
23749
23822
|
const dedupedMarkets = [];
|
|
23750
23823
|
const seenKeys = /* @__PURE__ */ new Set();
|
|
@@ -23844,7 +23917,9 @@ var resolveSpreadOutcomeTeamNames = (activeMarket, groupMarkets) => {
|
|
|
23844
23917
|
return toTrimmedString((_b = (_a = market.venueMarketOutcomes) == null ? void 0 : _a[index]) == null ? void 0 : _b.title);
|
|
23845
23918
|
}).filter((title2) => isSpreadTeamTitle(title2));
|
|
23846
23919
|
if (cleanTitles.length === 0) return null;
|
|
23847
|
-
return cleanTitles.reduce(
|
|
23920
|
+
return cleanTitles.reduce(
|
|
23921
|
+
(longest, title2) => title2.length > longest.length ? title2 : longest
|
|
23922
|
+
);
|
|
23848
23923
|
};
|
|
23849
23924
|
return { favored: pickName(0), dog: pickName(1) };
|
|
23850
23925
|
};
|
|
@@ -23853,9 +23928,7 @@ var resolveCombinedMoneylineLegLabel = (market) => {
|
|
|
23853
23928
|
return toTrimmedString(typedMarket.shortTitle) || toTrimmedString(market.question);
|
|
23854
23929
|
};
|
|
23855
23930
|
var areCombinedMoneylineLegsDistinct = (markets) => {
|
|
23856
|
-
const labels = markets.map(
|
|
23857
|
-
(market) => resolveCombinedMoneylineLegLabel(market).toLowerCase()
|
|
23858
|
-
);
|
|
23931
|
+
const labels = markets.map((market) => resolveCombinedMoneylineLegLabel(market).toLowerCase());
|
|
23859
23932
|
return labels.every((label2) => label2.length > 0) && new Set(labels).size === labels.length;
|
|
23860
23933
|
};
|
|
23861
23934
|
var resolveDisplayGroupFamilyKey = (market) => {
|
|
@@ -24140,6 +24213,15 @@ var buildSportsSlideFromGroup = (group) => {
|
|
|
24140
24213
|
defaultStopIndex
|
|
24141
24214
|
};
|
|
24142
24215
|
};
|
|
24216
|
+
var formatSportsPeriodGrammarLabel = (period) => {
|
|
24217
|
+
const grammarMatch = SPORTS_PERIOD_GRAMMAR_PATTERN.exec(period);
|
|
24218
|
+
if (!grammarMatch) return null;
|
|
24219
|
+
if (grammarMatch[1]) {
|
|
24220
|
+
const family = grammarMatch[1].charAt(0).toUpperCase() + grammarMatch[1].slice(1);
|
|
24221
|
+
return `${family} ${Number(grammarMatch[2])}`;
|
|
24222
|
+
}
|
|
24223
|
+
return `First ${Number(grammarMatch[3])} Innings`;
|
|
24224
|
+
};
|
|
24143
24225
|
var resolveSportsCategoryTokens = (event) => {
|
|
24144
24226
|
return new Set(
|
|
24145
24227
|
event.categories.flatMap((entry) => {
|
|
@@ -24162,39 +24244,20 @@ var isNonStandardSportsLikeEvent = (event) => {
|
|
|
24162
24244
|
return ESPORTS_TITLE_PATTERN.test(question) || SERIES_SCOPE_PATTERN.test(question);
|
|
24163
24245
|
});
|
|
24164
24246
|
};
|
|
24165
|
-
var resolveVisibleSportsSectionTabDefinitions = (event) => {
|
|
24166
|
-
const presentTabKeys = /* @__PURE__ */ new Set();
|
|
24167
|
-
for (const market of event.venueMarkets) {
|
|
24168
|
-
const tabKey = resolveMarketSectionTabKey(market);
|
|
24169
|
-
if (tabKey) presentTabKeys.add(tabKey);
|
|
24170
|
-
}
|
|
24171
|
-
let definitions = SPORTS_SECTION_TAB_DEFINITIONS.filter(
|
|
24172
|
-
(definition) => presentTabKeys.has(definition.key)
|
|
24173
|
-
);
|
|
24174
|
-
if (isNonStandardSportsLikeEvent(event)) {
|
|
24175
|
-
definitions = definitions.filter(
|
|
24176
|
-
(definition) => SPORTS_NON_STANDARD_VISIBLE_TAB_KEY_SET.has(definition.key)
|
|
24177
|
-
);
|
|
24178
|
-
}
|
|
24179
|
-
return definitions;
|
|
24180
|
-
};
|
|
24181
24247
|
var mergeSportsSectionMarketsIntoEvent = ({
|
|
24182
24248
|
event,
|
|
24183
24249
|
sectionMarketsByKey
|
|
24184
24250
|
}) => {
|
|
24185
|
-
var _a;
|
|
24186
24251
|
const orderedVenueMarkets = [...event.venueMarkets];
|
|
24187
24252
|
const seenMarketIds = new Set(orderedVenueMarkets.map((market) => market.id));
|
|
24188
|
-
for (const
|
|
24189
|
-
for (const market of
|
|
24253
|
+
for (const markets of Object.values(sectionMarketsByKey)) {
|
|
24254
|
+
for (const market of markets != null ? markets : []) {
|
|
24190
24255
|
if (seenMarketIds.has(market.id)) continue;
|
|
24191
24256
|
seenMarketIds.add(market.id);
|
|
24192
24257
|
orderedVenueMarkets.push(market);
|
|
24193
24258
|
}
|
|
24194
24259
|
}
|
|
24195
|
-
return __spreadProps(__spreadValues({}, event), {
|
|
24196
|
-
venueMarkets: orderedVenueMarkets
|
|
24197
|
-
});
|
|
24260
|
+
return __spreadProps(__spreadValues({}, event), { venueMarkets: orderedVenueMarkets });
|
|
24198
24261
|
};
|
|
24199
24262
|
|
|
24200
24263
|
// src/pages/event-market/sports-market-card.tsx
|
|
@@ -24677,24 +24740,48 @@ SportsMarketCard.displayName = "SportsMarketCard";
|
|
|
24677
24740
|
|
|
24678
24741
|
// src/pages/event-market/sports-markets.tsx
|
|
24679
24742
|
var import_jsx_runtime162 = require("react/jsx-runtime");
|
|
24680
|
-
var
|
|
24681
|
-
|
|
24743
|
+
var STAT_LABEL_OVERRIDES = {
|
|
24744
|
+
rbis: "RBIs",
|
|
24745
|
+
hits_runs_rbis: "Hits + Runs + RBIs",
|
|
24746
|
+
ot: "OT"
|
|
24747
|
+
};
|
|
24748
|
+
var formatStatLabel = (stat) => {
|
|
24749
|
+
var _a;
|
|
24750
|
+
return (_a = STAT_LABEL_OVERRIDES[stat]) != null ? _a : stat.split("_").filter(Boolean).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
|
|
24751
|
+
};
|
|
24752
|
+
var LEGACY_STAT_LABEL_KEYS = {
|
|
24753
|
+
corners: "cornersTab",
|
|
24754
|
+
goals: "goalsTab",
|
|
24755
|
+
assists: "assistsTab",
|
|
24756
|
+
shots: "shotsTab"
|
|
24757
|
+
};
|
|
24758
|
+
var resolveSportsSectionLabel = (labels, tab) => {
|
|
24759
|
+
var _a, _b, _c, _d, _e;
|
|
24760
|
+
const sports = labels.eventMarketPage.sports;
|
|
24761
|
+
switch (tab.kind) {
|
|
24682
24762
|
case "game_lines":
|
|
24683
|
-
return
|
|
24684
|
-
case "halves":
|
|
24685
|
-
return labels.eventMarketPage.sports.halvesTab;
|
|
24763
|
+
return sports.gameLinesTab;
|
|
24686
24764
|
case "exact_score":
|
|
24687
|
-
return
|
|
24688
|
-
case "corners":
|
|
24689
|
-
return labels.eventMarketPage.sports.cornersTab;
|
|
24690
|
-
case "goals":
|
|
24691
|
-
return labels.eventMarketPage.sports.goalsTab;
|
|
24692
|
-
case "assists":
|
|
24693
|
-
return labels.eventMarketPage.sports.assistsTab;
|
|
24694
|
-
case "shots":
|
|
24695
|
-
return labels.eventMarketPage.sports.shotsTab;
|
|
24765
|
+
return sports.exactScoreTab;
|
|
24696
24766
|
case "other":
|
|
24697
|
-
return
|
|
24767
|
+
return sports.otherTab;
|
|
24768
|
+
case "stat": {
|
|
24769
|
+
if (tab.stat === "player_props") return sports.playerPropsTab;
|
|
24770
|
+
const legacyLabelKey = tab.stat ? LEGACY_STAT_LABEL_KEYS[tab.stat] : void 0;
|
|
24771
|
+
return legacyLabelKey ? sports[legacyLabelKey] : formatStatLabel((_a = tab.stat) != null ? _a : "");
|
|
24772
|
+
}
|
|
24773
|
+
case "period": {
|
|
24774
|
+
switch (tab.periodFamily) {
|
|
24775
|
+
case "halves":
|
|
24776
|
+
return sports.halvesTab;
|
|
24777
|
+
case "quarters":
|
|
24778
|
+
return sports.quartersTab;
|
|
24779
|
+
case "sets":
|
|
24780
|
+
return sports.setsTab;
|
|
24781
|
+
default:
|
|
24782
|
+
return (_e = (_c = formatSportsPeriodGrammarLabel((_b = tab.periodFamily) != null ? _b : "")) == null ? void 0 : _c.replace(/^First /, "")) != null ? _e : formatStatLabel((_d = tab.periodFamily) != null ? _d : "");
|
|
24783
|
+
}
|
|
24784
|
+
}
|
|
24698
24785
|
}
|
|
24699
24786
|
};
|
|
24700
24787
|
var SportsTabButton = ({
|
|
@@ -24782,18 +24869,23 @@ var SportsMarkets = ({
|
|
|
24782
24869
|
}
|
|
24783
24870
|
return merged;
|
|
24784
24871
|
}, [event.venueMarkets, gameMarkets]);
|
|
24785
|
-
const
|
|
24786
|
-
() =>
|
|
24872
|
+
const visibleTabs = (0, import_react41.useMemo)(
|
|
24873
|
+
() => resolveVisibleSportsSectionTabs(__spreadProps(__spreadValues({}, event), { venueMarkets: tabSourceMarkets })),
|
|
24787
24874
|
[event, tabSourceMarkets]
|
|
24788
24875
|
);
|
|
24789
|
-
const shouldRenderTabs =
|
|
24790
|
-
const [activeTabKey, setActiveTabKey] = (0, import_react41.useState)(
|
|
24791
|
-
|
|
24876
|
+
const shouldRenderTabs = visibleTabs.length > 1 && tabSourceMarkets.length > 1;
|
|
24877
|
+
const [activeTabKey, setActiveTabKey] = (0, import_react41.useState)((_b = (_a = visibleTabs[0]) == null ? void 0 : _a.key) != null ? _b : "game_lines");
|
|
24878
|
+
const activeTab = (0, import_react41.useMemo)(
|
|
24879
|
+
() => {
|
|
24880
|
+
var _a2, _b2;
|
|
24881
|
+
return (_b2 = (_a2 = visibleTabs.find((tab) => tab.key === activeTabKey)) != null ? _a2 : visibleTabs[0]) != null ? _b2 : { key: "game_lines", kind: "game_lines" };
|
|
24882
|
+
},
|
|
24883
|
+
[visibleTabs, activeTabKey]
|
|
24792
24884
|
);
|
|
24793
24885
|
const [expandedGroupId, setExpandedGroupId] = (0, import_react41.useState)(null);
|
|
24794
24886
|
const [stableMarketsByTab, setStableMarketsByTab] = (0, import_react41.useState)({});
|
|
24795
|
-
const activeTabLabel = resolveSportsSectionLabel(labels,
|
|
24796
|
-
const sectionFilters = resolveSportsSectionFilters(
|
|
24887
|
+
const activeTabLabel = resolveSportsSectionLabel(labels, activeTab);
|
|
24888
|
+
const sectionFilters = resolveSportsSectionFilters(activeTab);
|
|
24797
24889
|
const sectionMarketsQuery = (0, import_hooks65.useVenueMarkets)({
|
|
24798
24890
|
aggKey: event.aggKey ? [event.aggKey] : void 0,
|
|
24799
24891
|
sportsMarketType: sectionFilters.sportsMarketType,
|
|
@@ -24816,26 +24908,25 @@ var SportsMarkets = ({
|
|
|
24816
24908
|
} = sectionMarketsQuery;
|
|
24817
24909
|
const resolvedSectionMarkets = (0, import_react41.useMemo)(
|
|
24818
24910
|
() => resolveSportsSectionMarkets({
|
|
24819
|
-
|
|
24911
|
+
tab: activeTab,
|
|
24820
24912
|
eventMarkets: tabSourceMarkets,
|
|
24821
24913
|
sectionMarkets
|
|
24822
24914
|
}),
|
|
24823
|
-
[
|
|
24915
|
+
[activeTab, tabSourceMarkets, sectionMarkets]
|
|
24824
24916
|
);
|
|
24825
24917
|
const isSectionSettled = !isSectionLoading && !hasNextPage && !isFetchingNextPage;
|
|
24826
24918
|
const stableSectionMarkets = stableMarketsByTab[activeTabKey];
|
|
24827
|
-
const displayedSectionMarkets =
|
|
24919
|
+
const displayedSectionMarkets = (0, import_react41.useMemo)(
|
|
24920
|
+
() => stableSectionMarkets != null ? stableSectionMarkets : isSectionSettled ? resolvedSectionMarkets : [],
|
|
24921
|
+
[stableSectionMarkets, isSectionSettled, resolvedSectionMarkets]
|
|
24922
|
+
);
|
|
24828
24923
|
const periodGroups = (0, import_react41.useMemo)(
|
|
24829
24924
|
() => groupSportsMarketsByPeriod(displayedSectionMarkets),
|
|
24830
24925
|
[displayedSectionMarkets]
|
|
24831
24926
|
);
|
|
24832
|
-
const displayedPeriodGroups = (0, import_react41.useMemo)(
|
|
24833
|
-
() => activeTabKey === "game_lines" ? periodGroups.filter((periodGroup) => periodGroup.key === "full") : periodGroups,
|
|
24834
|
-
[activeTabKey, periodGroups]
|
|
24835
|
-
);
|
|
24836
24927
|
const allGroups = (0, import_react41.useMemo)(
|
|
24837
|
-
() =>
|
|
24838
|
-
[
|
|
24928
|
+
() => periodGroups.flatMap((periodGroup) => periodGroup.groups),
|
|
24929
|
+
[periodGroups]
|
|
24839
24930
|
);
|
|
24840
24931
|
(0, import_react41.useEffect)(() => {
|
|
24841
24932
|
if (hasNextPage && !isFetchingNextPage) {
|
|
@@ -24869,9 +24960,9 @@ var SportsMarkets = ({
|
|
|
24869
24960
|
}, [activeTabKey, displayedSectionMarkets, hasAggKey, onSectionMarketsChange]);
|
|
24870
24961
|
(0, import_react41.useEffect)(() => {
|
|
24871
24962
|
var _a2, _b2;
|
|
24872
|
-
if (
|
|
24873
|
-
setActiveTabKey((_b2 = (_a2 =
|
|
24874
|
-
}, [activeTabKey,
|
|
24963
|
+
if (visibleTabs.some((tab) => tab.key === activeTabKey)) return;
|
|
24964
|
+
setActiveTabKey((_b2 = (_a2 = visibleTabs[0]) == null ? void 0 : _a2.key) != null ? _b2 : "game_lines");
|
|
24965
|
+
}, [activeTabKey, visibleTabs]);
|
|
24875
24966
|
const lastActiveTabRef = (0, import_react41.useRef)(null);
|
|
24876
24967
|
(0, import_react41.useEffect)(() => {
|
|
24877
24968
|
if (allGroups.length === 0) return;
|
|
@@ -24918,14 +25009,14 @@ var SportsMarkets = ({
|
|
|
24918
25009
|
role: "tablist",
|
|
24919
25010
|
"aria-label": labels.eventMarketPage.sports.sectionTabsAria,
|
|
24920
25011
|
className: "flex flex-nowrap items-center gap-2 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
24921
|
-
children:
|
|
25012
|
+
children: visibleTabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(
|
|
24922
25013
|
SportsTabButton,
|
|
24923
25014
|
{
|
|
24924
|
-
isActive:
|
|
24925
|
-
label: resolveSportsSectionLabel(labels,
|
|
24926
|
-
onClick: () => setActiveTabKey(
|
|
25015
|
+
isActive: tab.key === activeTabKey,
|
|
25016
|
+
label: resolveSportsSectionLabel(labels, tab),
|
|
25017
|
+
onClick: () => setActiveTabKey(tab.key)
|
|
24927
25018
|
},
|
|
24928
|
-
|
|
25019
|
+
tab.key
|
|
24929
25020
|
))
|
|
24930
25021
|
}
|
|
24931
25022
|
) : null,
|
|
@@ -24939,7 +25030,7 @@ var SportsMarkets = ({
|
|
|
24939
25030
|
classNames: { root: "min-h-[220px]" }
|
|
24940
25031
|
}
|
|
24941
25032
|
) : null,
|
|
24942
|
-
|
|
25033
|
+
periodGroups.map((periodGroup) => {
|
|
24943
25034
|
return /* @__PURE__ */ (0, import_jsx_runtime162.jsx)(
|
|
24944
25035
|
"section",
|
|
24945
25036
|
{
|
|
@@ -24996,7 +25087,7 @@ var SportsEventMarketPage = ({
|
|
|
24996
25087
|
}, [event, sectionMarketsByKey]);
|
|
24997
25088
|
const eventTradingState = (0, import_react42.useMemo)(() => (0, import_hooks66.resolveEventTradingState)(composedEvent), [composedEvent]);
|
|
24998
25089
|
const hasSportsSections = (0, import_react42.useMemo)(
|
|
24999
|
-
() =>
|
|
25090
|
+
() => resolveVisibleSportsSectionTabs(event).length > 0,
|
|
25000
25091
|
[event]
|
|
25001
25092
|
);
|
|
25002
25093
|
const stickyOrderPanelState = resolveEventMarketPageStickyState({
|