@agg-build/ui 2.1.1 → 2.1.3
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-XHDGSRG7.mjs → chunk-BW7S2YR3.mjs} +1139 -308
- package/dist/{chunk-TERG43WW.mjs → chunk-R2YNZJZ3.mjs} +69 -27
- package/dist/{chunk-RPXRTXCY.mjs → chunk-T4YZGAYS.mjs} +22 -1
- package/dist/{chunk-IQT4I5B4.mjs → chunk-TAGPAADA.mjs} +2108 -767
- package/dist/{chunk-NK57KMYN.mjs → chunk-TBZWRUFB.mjs} +752 -589
- package/dist/{chunk-YJO6LMRT.mjs → chunk-VP76G6PN.mjs} +87 -25
- package/dist/{chunk-WU2C3C6K.mjs → chunk-XHE2VO3S.mjs} +4 -21
- package/dist/events.js +1014 -760
- package/dist/events.mjs +5 -3
- package/dist/index.js +9937 -7880
- package/dist/index.mjs +117 -456
- package/dist/modals.js +1 -1
- package/dist/modals.mjs +3 -3
- package/dist/pages.js +8513 -6380
- package/dist/pages.mjs +6 -6
- package/dist/primitives.js +85 -25
- package/dist/primitives.mjs +1 -1
- package/dist/styles.css +1 -1
- package/dist/tailwind.css +1 -1
- package/dist/trading.js +979 -402
- package/dist/trading.mjs +10 -6
- package/dist/types/events/item/event-list-item.utils.d.mts +1 -25
- package/dist/types/events/item/event-list-item.utils.d.ts +1 -25
- package/dist/types/events/item-details/index.d.mts +2 -1
- package/dist/types/events/item-details/index.d.ts +2 -1
- package/dist/types/events/market-details/market-details-graph-panel.d.mts +39 -0
- package/dist/types/events/market-details/market-details-graph-panel.d.ts +39 -0
- package/dist/types/events/market-details/market-details-outcome-button.d.mts +2 -1
- package/dist/types/events/market-details/market-details-outcome-button.d.ts +2 -1
- package/dist/types/events/market-details/market-details.types.d.mts +31 -0
- package/dist/types/events/market-details/market-details.types.d.ts +31 -0
- package/dist/types/events/market-details/market-details.utils.d.mts +3 -16
- package/dist/types/events/market-details/market-details.utils.d.ts +3 -16
- package/dist/types/events/shared/format-event-title.d.mts +24 -0
- package/dist/types/events/shared/format-event-title.d.ts +24 -0
- package/dist/types/events/shared/format-sports-event-time.d.mts +2 -0
- package/dist/types/events/shared/format-sports-event-time.d.ts +2 -0
- package/dist/types/events/shared/select-best-outcome.d.mts +88 -0
- package/dist/types/events/shared/select-best-outcome.d.ts +88 -0
- package/dist/types/notifications/agg-notification-events-provider.d.mts +10 -1
- package/dist/types/notifications/agg-notification-events-provider.d.ts +10 -1
- package/dist/types/pages/event-market/event-market.shared.d.mts +30 -0
- package/dist/types/pages/event-market/event-market.shared.d.ts +30 -0
- package/dist/types/pages/event-market/event-market.types.d.mts +7 -0
- package/dist/types/pages/event-market/event-market.types.d.ts +7 -0
- package/dist/types/pages/event-market/sports-event-market-page.d.mts +8 -0
- package/dist/types/pages/event-market/sports-event-market-page.d.ts +8 -0
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.mts +13 -0
- package/dist/types/pages/event-market/sports-event-market.fixtures.d.ts +13 -0
- package/dist/types/pages/event-market/sports-event-market.utils.d.mts +156 -0
- package/dist/types/pages/event-market/sports-event-market.utils.d.ts +156 -0
- package/dist/types/pages/event-market/sports-line-rail.d.mts +17 -0
- package/dist/types/pages/event-market/sports-line-rail.d.ts +17 -0
- package/dist/types/pages/event-market/sports-market-card.d.mts +22 -0
- package/dist/types/pages/event-market/sports-market-card.d.ts +22 -0
- package/dist/types/pages/event-market/sports-markets.d.mts +13 -0
- package/dist/types/pages/event-market/sports-markets.d.ts +13 -0
- package/dist/types/primitives/state-message/index.d.mts +1 -1
- package/dist/types/primitives/state-message/index.d.ts +1 -1
- package/dist/types/primitives/state-message/state-message.types.d.mts +1 -1
- package/dist/types/primitives/state-message/state-message.types.d.ts +1 -1
- package/dist/types/trading/index.d.mts +2 -0
- package/dist/types/trading/index.d.ts +2 -0
- package/dist/types/trading/place-order/index.d.mts +1 -1
- package/dist/types/trading/place-order/index.d.ts +1 -1
- package/dist/types/trading/place-order/index.place-order.types.d.mts +30 -1
- package/dist/types/trading/place-order/index.place-order.types.d.ts +30 -1
- package/dist/types/trading/settlement/settlement-text.utils.d.mts +5 -2
- package/dist/types/trading/settlement/settlement-text.utils.d.ts +5 -2
- package/dist/types/trading/use-claim-winnings.d.mts +84 -0
- package/dist/types/trading/use-claim-winnings.d.ts +84 -0
- package/dist/types/trading/use-resolved-market-claim.d.mts +26 -0
- package/dist/types/trading/use-resolved-market-claim.d.ts +26 -0
- package/package.json +3 -3
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
resolveUnifiedOrderBookEntries,
|
|
23
23
|
sortOutcomeSelectorOutcomes,
|
|
24
24
|
useEventTradingContext
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-R2YNZJZ3.mjs";
|
|
26
26
|
import {
|
|
27
27
|
AutocompleteSelect,
|
|
28
28
|
Badge,
|
|
@@ -52,6 +52,7 @@ import {
|
|
|
52
52
|
dedupeVenueMarketsById,
|
|
53
53
|
detailsBaseCardClassName,
|
|
54
54
|
filterEventsByTabValue,
|
|
55
|
+
formatEventTitleWithDateSuffix,
|
|
55
56
|
formatMarketProbabilityPercent,
|
|
56
57
|
formatPriceGapPercent,
|
|
57
58
|
getMarketDetailsTabs,
|
|
@@ -72,7 +73,7 @@ import {
|
|
|
72
73
|
sortCategoriesForNavigation,
|
|
73
74
|
sortOutcomes,
|
|
74
75
|
splitEventsByLifecycle
|
|
75
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-VP76G6PN.mjs";
|
|
76
77
|
|
|
77
78
|
// src/events/item/index.tsx
|
|
78
79
|
import {
|
|
@@ -232,7 +233,7 @@ var normalizeEventListItemV2Comparison = ({
|
|
|
232
233
|
return __spreadProps(__spreadValues({}, row), {
|
|
233
234
|
prices
|
|
234
235
|
});
|
|
235
|
-
});
|
|
236
|
+
}).filter((row) => row.prices.length === 0 || row.prices.some((price) => price.price > 0));
|
|
236
237
|
const matchedVenues = collectMatchedVenues(rows);
|
|
237
238
|
return {
|
|
238
239
|
rows,
|
|
@@ -353,7 +354,13 @@ var EventListItemContent = ({
|
|
|
353
354
|
const config = useSdkUiConfig();
|
|
354
355
|
const labels = useLabels();
|
|
355
356
|
const allVenueMarkets = useMemo(() => event.venueMarkets, [event.venueMarkets]);
|
|
356
|
-
const resolvedTitle =
|
|
357
|
+
const resolvedTitle = formatEventTitleWithDateSuffix({
|
|
358
|
+
title: event.title,
|
|
359
|
+
categories: event.categories,
|
|
360
|
+
structureType: event.structureType,
|
|
361
|
+
gameStartTime: event.gameStartTime,
|
|
362
|
+
endDate: event.endDate
|
|
363
|
+
});
|
|
357
364
|
const resolvedImage = event.image;
|
|
358
365
|
const visibleVenueLogos = useMemo(() => {
|
|
359
366
|
var _a2;
|
|
@@ -379,8 +386,10 @@ var EventListItemContent = ({
|
|
|
379
386
|
} = useVenueMarkets({
|
|
380
387
|
venueEventId: event.id,
|
|
381
388
|
enabled: shouldEnableLazyMarketLoading && isLazyMarketsQueryEnabled,
|
|
382
|
-
|
|
383
|
-
|
|
389
|
+
// List/tile surface: axis/dates sort by volume so the scroll tail matches
|
|
390
|
+
// the volume-sorted top-3 (the detail page omits context and keeps the
|
|
391
|
+
// structured threshold/date order).
|
|
392
|
+
context: "list",
|
|
384
393
|
status: marketStatus
|
|
385
394
|
});
|
|
386
395
|
const resolvedOutcomeMarkets = useMemo(() => {
|
|
@@ -2495,11 +2504,20 @@ var EventListItemDetailsContent = ({
|
|
|
2495
2504
|
if (typeof resolvedVolume !== "number") return "";
|
|
2496
2505
|
return `${config.formatting.formatCompactCurrency(resolvedVolume)} ${labels.eventItemDetails.volumeSuffix}`;
|
|
2497
2506
|
}, [config, event.volume, labels.eventItemDetails.volumeSuffix, venueMarkets]);
|
|
2507
|
+
const resolvedTitle = useMemo5(() => {
|
|
2508
|
+
return formatEventTitleWithDateSuffix({
|
|
2509
|
+
title: event.title,
|
|
2510
|
+
categories: event.categories,
|
|
2511
|
+
structureType: event.structureType,
|
|
2512
|
+
gameStartTime: event.gameStartTime,
|
|
2513
|
+
endDate: event.endDate
|
|
2514
|
+
});
|
|
2515
|
+
}, [event.categories, event.gameStartTime, event.endDate, event.structureType, event.title]);
|
|
2498
2516
|
return /* @__PURE__ */ jsxs4(
|
|
2499
2517
|
Card,
|
|
2500
2518
|
{
|
|
2501
2519
|
className: cn("group/agg-event-details", detailsBaseCardClassName, classNames == null ? void 0 : classNames.root),
|
|
2502
|
-
"aria-label": ariaLabel != null ? ariaLabel :
|
|
2520
|
+
"aria-label": ariaLabel != null ? ariaLabel : resolvedTitle,
|
|
2503
2521
|
onClick: () => {
|
|
2504
2522
|
onClick == null ? void 0 : onClick(event);
|
|
2505
2523
|
},
|
|
@@ -2534,7 +2552,7 @@ var EventListItemDetailsContent = ({
|
|
|
2534
2552
|
"truncate text-wrap wrap-break-word line-clamp-2",
|
|
2535
2553
|
classNames == null ? void 0 : classNames.title
|
|
2536
2554
|
),
|
|
2537
|
-
children:
|
|
2555
|
+
children: resolvedTitle
|
|
2538
2556
|
}
|
|
2539
2557
|
),
|
|
2540
2558
|
venueMarkets.length > 1 ? /* @__PURE__ */ jsx5(
|
|
@@ -3228,49 +3246,82 @@ OrderbookWithStates.displayName = "OrderbookWithStates";
|
|
|
3228
3246
|
|
|
3229
3247
|
// src/events/market-details/index.tsx
|
|
3230
3248
|
import {
|
|
3231
|
-
CHART_TIME_RANGES as CHART_TIME_RANGES2,
|
|
3232
3249
|
findLivePriceById,
|
|
3233
3250
|
MarketStatus,
|
|
3234
3251
|
mergeBestPricesPreferringLive as mergeBestPricesPreferringLive2,
|
|
3235
3252
|
optimizedImageUrl as optimizedImageUrl3,
|
|
3236
3253
|
resolveMarketTradingState,
|
|
3237
3254
|
useEventTradingContext as useEventTradingContext2,
|
|
3238
|
-
|
|
3255
|
+
useEventOrderbookData as useEventOrderbookData2,
|
|
3256
|
+
useLabels as useLabels7,
|
|
3239
3257
|
useLiveBestPrices as useLiveBestPrices2,
|
|
3258
|
+
useLiveBestPriceCandidates,
|
|
3240
3259
|
useLiveOutcomePrices as useLiveOutcomePrices2,
|
|
3241
|
-
useMarketChart as useMarketChart2,
|
|
3242
3260
|
useMarketOrderbook,
|
|
3243
|
-
|
|
3244
|
-
useSdkUiConfig as useSdkUiConfig3,
|
|
3261
|
+
useSdkUiConfig as useSdkUiConfig4,
|
|
3245
3262
|
useVenueMarkets as useVenueMarkets2,
|
|
3246
3263
|
useViewportMidpoints
|
|
3247
3264
|
} from "@agg-build/hooks";
|
|
3248
|
-
import { useEffect as
|
|
3265
|
+
import { useEffect as useEffect5, useId, useMemo as useMemo7, useState as useState5 } from "react";
|
|
3249
3266
|
|
|
3250
|
-
// src/events/shared/
|
|
3267
|
+
// src/events/shared/select-best-outcome.ts
|
|
3251
3268
|
var normalizeOutcomeLabel2 = (label) => {
|
|
3252
3269
|
return typeof label === "string" ? label.trim().toLowerCase() : "";
|
|
3253
3270
|
};
|
|
3254
|
-
var
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3271
|
+
var selectBestOutcomeCandidate = (args) => {
|
|
3272
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
3273
|
+
const { outcomeId, selection } = args;
|
|
3274
|
+
if (!outcomeId) return void 0;
|
|
3275
|
+
const resolveVenueMarketId = (venue) => {
|
|
3276
|
+
var _a2, _b2;
|
|
3277
|
+
return venue ? (_b2 = (_a2 = args.venueMarketIdByVenue) == null ? void 0 : _a2.get(venue)) != null ? _b2 : void 0 : void 0;
|
|
3278
|
+
};
|
|
3279
|
+
const make = (price, venue, source, updatedAt) => ({
|
|
3280
|
+
price,
|
|
3281
|
+
venue: venue != null ? venue : void 0,
|
|
3282
|
+
venueMarketId: resolveVenueMarketId(venue != null ? venue : void 0),
|
|
3283
|
+
outcomeId,
|
|
3284
|
+
source,
|
|
3285
|
+
updatedAt: updatedAt != null ? updatedAt : void 0
|
|
3286
|
+
});
|
|
3287
|
+
if (selection === "buy" || selection === "sell") {
|
|
3288
|
+
const wsSidePrice = selection === "buy" ? (_a = args.live) == null ? void 0 : _a.bestAsk : (_b = args.live) == null ? void 0 : _b.bestBid;
|
|
3289
|
+
const wsSideVenue = selection === "buy" ? (_c = args.live) == null ? void 0 : _c.bestAskVenue : (_d = args.live) == null ? void 0 : _d.bestBidVenue;
|
|
3290
|
+
if (wsSidePrice != null) {
|
|
3291
|
+
return make(wsSidePrice, wsSideVenue, "ws", (_e = args.live) == null ? void 0 : _e.updatedAt);
|
|
3292
|
+
}
|
|
3293
|
+
const restSidePrice = selection === "buy" ? (_f = args.restBest) == null ? void 0 : _f.bestAsk : (_g = args.restBest) == null ? void 0 : _g.bestBid;
|
|
3294
|
+
const restSideVenue = selection === "buy" ? (_h = args.restBestVenues) == null ? void 0 : _h.bestAskVenue : (_i = args.restBestVenues) == null ? void 0 : _i.bestBidVenue;
|
|
3295
|
+
if (restSidePrice != null) {
|
|
3296
|
+
return make(restSidePrice, restSideVenue, "rest-best", void 0);
|
|
3297
|
+
}
|
|
3268
3298
|
}
|
|
3269
|
-
if (
|
|
3270
|
-
return
|
|
3299
|
+
if (((_j = args.live) == null ? void 0 : _j.midpoint) != null) {
|
|
3300
|
+
return make(args.live.midpoint, args.live.midpointVenue, "ws", args.live.updatedAt);
|
|
3271
3301
|
}
|
|
3272
|
-
|
|
3273
|
-
|
|
3302
|
+
if (normalizeOutcomeLabel2(args.outcomeLabel) === "yes" && args.bestMidpoint != null && args.bestMidpointVenue) {
|
|
3303
|
+
return make(args.bestMidpoint, args.bestMidpointVenue, "rest-midpoint", void 0);
|
|
3304
|
+
}
|
|
3305
|
+
if (args.restMidpoint != null) {
|
|
3306
|
+
return make(args.restMidpoint, args.restMidpointVenue, "rest-midpoint", void 0);
|
|
3307
|
+
}
|
|
3308
|
+
if (args.staticPrice != null) {
|
|
3309
|
+
return make(args.staticPrice, args.staticVenue, "static", void 0);
|
|
3310
|
+
}
|
|
3311
|
+
return void 0;
|
|
3312
|
+
};
|
|
3313
|
+
var buildVenueMarketIdByVenue = (venueMarkets) => {
|
|
3314
|
+
var _a;
|
|
3315
|
+
const map = /* @__PURE__ */ new Map();
|
|
3316
|
+
if (!(venueMarkets == null ? void 0 : venueMarkets.length)) return map;
|
|
3317
|
+
const visit = (vm) => {
|
|
3318
|
+
if (vm.venue && vm.id && !map.has(vm.venue)) map.set(vm.venue, vm.id);
|
|
3319
|
+
};
|
|
3320
|
+
for (const vm of venueMarkets) {
|
|
3321
|
+
visit(vm);
|
|
3322
|
+
for (const sibling of (_a = vm.matchedVenueMarkets) != null ? _a : []) visit(sibling);
|
|
3323
|
+
}
|
|
3324
|
+
return map;
|
|
3274
3325
|
};
|
|
3275
3326
|
|
|
3276
3327
|
// src/events/market-details/market-details-outcome-button.tsx
|
|
@@ -3295,14 +3346,17 @@ var marketDetailsOutcomeButtonToneClasses = {
|
|
|
3295
3346
|
};
|
|
3296
3347
|
var getMarketDetailsOutcomeButtonClassNames = ({
|
|
3297
3348
|
enableAnimations,
|
|
3349
|
+
enforceFixedWidth,
|
|
3298
3350
|
isSelected,
|
|
3299
|
-
tone
|
|
3351
|
+
tone,
|
|
3352
|
+
variant
|
|
3300
3353
|
}) => {
|
|
3301
3354
|
const toneClasses = marketDetailsOutcomeButtonToneClasses[tone];
|
|
3355
|
+
const widthClassName = variant === "line" ? "w-[200px]" : variant === "outcome" ? "w-[160px]" : "w-[140px]";
|
|
3302
3356
|
return {
|
|
3303
3357
|
root: cn(
|
|
3304
|
-
"w-[140px]",
|
|
3305
|
-
"flex h-9 shrink-0 cursor-pointer select-none items-center justify-center gap-2 rounded-agg-full border px-
|
|
3358
|
+
enforceFixedWidth ? widthClassName : "w-[140px]",
|
|
3359
|
+
"flex h-9 shrink-0 cursor-pointer select-none items-center justify-center gap-2 rounded-agg-full border px-4 py-1.5 text-left shadow-none",
|
|
3306
3360
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary",
|
|
3307
3361
|
"disabled:cursor-not-allowed disabled:opacity-60",
|
|
3308
3362
|
getMotionClassName(
|
|
@@ -3318,6 +3372,7 @@ var getMarketDetailsOutcomeButtonClassNames = ({
|
|
|
3318
3372
|
var MarketDetailsOutcomeButton = ({
|
|
3319
3373
|
ariaControls,
|
|
3320
3374
|
enableAnimations,
|
|
3375
|
+
enforceFixedWidth,
|
|
3321
3376
|
isSelected,
|
|
3322
3377
|
item,
|
|
3323
3378
|
onSelect
|
|
@@ -3325,10 +3380,14 @@ var MarketDetailsOutcomeButton = ({
|
|
|
3325
3380
|
var _a;
|
|
3326
3381
|
const classNames = getMarketDetailsOutcomeButtonClassNames({
|
|
3327
3382
|
enableAnimations,
|
|
3383
|
+
enforceFixedWidth,
|
|
3328
3384
|
isSelected,
|
|
3329
|
-
tone: item.tone
|
|
3385
|
+
tone: item.tone,
|
|
3386
|
+
variant: item.variant
|
|
3330
3387
|
});
|
|
3331
|
-
|
|
3388
|
+
const itemLabel = (_a = item.title) != null ? _a : item.label;
|
|
3389
|
+
const isLineVariant = item.variant === "line";
|
|
3390
|
+
return /* @__PURE__ */ jsx8(
|
|
3332
3391
|
"button",
|
|
3333
3392
|
{
|
|
3334
3393
|
type: "button",
|
|
@@ -3338,46 +3397,386 @@ var MarketDetailsOutcomeButton = ({
|
|
|
3338
3397
|
"aria-controls": ariaControls,
|
|
3339
3398
|
"aria-selected": isSelected,
|
|
3340
3399
|
tabIndex: isSelected ? 0 : -1,
|
|
3341
|
-
className: cn(
|
|
3400
|
+
className: cn(
|
|
3401
|
+
classNames.root,
|
|
3402
|
+
"overflow-hidden",
|
|
3403
|
+
enforceFixedWidth ? "flex-none" : "flex-1 md:flex-auto"
|
|
3404
|
+
),
|
|
3342
3405
|
onClick: () => onSelect(item.label),
|
|
3343
|
-
children: [
|
|
3406
|
+
children: isLineVariant ? /* @__PURE__ */ jsxs6("div", { className: "flex min-w-0 max-w-full items-center justify-center gap-1.5 overflow-hidden", children: [
|
|
3344
3407
|
/* @__PURE__ */ jsx8(VenueLogo, { venue: item.venue, size: "small" }),
|
|
3345
|
-
/* @__PURE__ */
|
|
3346
|
-
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3350
|
-
|
|
3351
|
-
|
|
3352
|
-
|
|
3353
|
-
|
|
3354
|
-
|
|
3355
|
-
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
3364
|
-
|
|
3365
|
-
|
|
3408
|
+
/* @__PURE__ */ jsx8(
|
|
3409
|
+
Typography,
|
|
3410
|
+
{
|
|
3411
|
+
as: "span",
|
|
3412
|
+
variant: isSelected ? "body-strong" : "body",
|
|
3413
|
+
className: cn("min-w-0 truncate whitespace-nowrap text-center", classNames.text),
|
|
3414
|
+
children: itemLabel
|
|
3415
|
+
}
|
|
3416
|
+
),
|
|
3417
|
+
item.lineLabel ? /* @__PURE__ */ jsx8(
|
|
3418
|
+
Typography,
|
|
3419
|
+
{
|
|
3420
|
+
as: "span",
|
|
3421
|
+
variant: isSelected ? "body-strong" : "body",
|
|
3422
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
3423
|
+
children: item.lineLabel
|
|
3424
|
+
}
|
|
3425
|
+
) : null,
|
|
3426
|
+
/* @__PURE__ */ jsx8(
|
|
3427
|
+
Typography,
|
|
3428
|
+
{
|
|
3429
|
+
as: "span",
|
|
3430
|
+
variant: isSelected ? "body-strong" : "body",
|
|
3431
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
3432
|
+
children: formatProbabilityCents(item.probability)
|
|
3433
|
+
}
|
|
3434
|
+
)
|
|
3435
|
+
] }) : /* @__PURE__ */ jsxs6("div", { className: "inline-flex max-w-full items-center justify-center gap-1.5", children: [
|
|
3436
|
+
/* @__PURE__ */ jsx8(VenueLogo, { venue: item.venue, size: "small" }),
|
|
3437
|
+
/* @__PURE__ */ jsx8(
|
|
3438
|
+
Typography,
|
|
3439
|
+
{
|
|
3440
|
+
as: "span",
|
|
3441
|
+
variant: isSelected ? "body-strong" : "body",
|
|
3442
|
+
className: cn("truncate whitespace-nowrap text-center", classNames.text),
|
|
3443
|
+
children: itemLabel
|
|
3444
|
+
}
|
|
3445
|
+
),
|
|
3446
|
+
/* @__PURE__ */ jsx8(
|
|
3447
|
+
Typography,
|
|
3448
|
+
{
|
|
3449
|
+
as: "span",
|
|
3450
|
+
variant: isSelected ? "body-strong" : "body",
|
|
3451
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
3452
|
+
children: formatProbabilityCents(item.probability)
|
|
3453
|
+
}
|
|
3454
|
+
)
|
|
3455
|
+
] })
|
|
3366
3456
|
}
|
|
3367
3457
|
);
|
|
3368
3458
|
};
|
|
3369
3459
|
MarketDetailsOutcomeButton.displayName = "MarketDetailsOutcomeButton";
|
|
3370
3460
|
|
|
3461
|
+
// src/events/market-details/market-details-graph-panel.tsx
|
|
3462
|
+
import {
|
|
3463
|
+
CHART_TIME_RANGES as CHART_TIME_RANGES2,
|
|
3464
|
+
useLabels as useLabels6,
|
|
3465
|
+
useMarketChart as useMarketChart2,
|
|
3466
|
+
useRollingChartWindow as useRollingChartWindow2,
|
|
3467
|
+
useSdkUiConfig as useSdkUiConfig3
|
|
3468
|
+
} from "@agg-build/hooks";
|
|
3469
|
+
import { useEffect as useEffect4, useMemo as useMemo6, useRef as useRef5, useState as useState4 } from "react";
|
|
3470
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
3471
|
+
var MarketDetailsGraphPanel = ({
|
|
3472
|
+
venueMarkets,
|
|
3473
|
+
selectedOutcomeLabel,
|
|
3474
|
+
selectedOutcomeId,
|
|
3475
|
+
livePrices,
|
|
3476
|
+
wsLivePrices,
|
|
3477
|
+
headerOutcomeItems,
|
|
3478
|
+
isResolvedMarket,
|
|
3479
|
+
isOutcomeSelectionLocked,
|
|
3480
|
+
volume,
|
|
3481
|
+
live,
|
|
3482
|
+
classNames
|
|
3483
|
+
}) => {
|
|
3484
|
+
var _a, _b, _c;
|
|
3485
|
+
const config = useSdkUiConfig3();
|
|
3486
|
+
const {
|
|
3487
|
+
formatting: { formatPercent, formatCompactCurrency },
|
|
3488
|
+
general: { theme }
|
|
3489
|
+
} = config;
|
|
3490
|
+
const isDarkTheme = theme === "dark";
|
|
3491
|
+
const labels = useLabels6();
|
|
3492
|
+
const selectedTimeRange = config.chart.selectedChartTimeRange;
|
|
3493
|
+
const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
|
|
3494
|
+
const [chartRangeOverride, setChartRangeOverride] = useState4(null);
|
|
3495
|
+
const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
|
|
3496
|
+
const [selectedChartType, setSelectedChartType] = useState4("line");
|
|
3497
|
+
const [selectedGraphVenue, setSelectedGraphVenue] = useState4(null);
|
|
3498
|
+
const [chartOutcomeLabel, setChartOutcomeLabel] = useState4(selectedOutcomeLabel);
|
|
3499
|
+
const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
|
|
3500
|
+
const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
|
|
3501
|
+
const chartOutcomesByVenue = useMemo6(() => {
|
|
3502
|
+
return resolveChartVenueOutcomes({
|
|
3503
|
+
eligibleVenueOutcomes: collectEligibleVenueOutcomes({
|
|
3504
|
+
venueMarkets,
|
|
3505
|
+
selectedOutcomeLabel: resolvedChartOutcomeLabel,
|
|
3506
|
+
selectedOutcomeId: chartSelectedOutcomeId
|
|
3507
|
+
}),
|
|
3508
|
+
livePrices
|
|
3509
|
+
});
|
|
3510
|
+
}, [livePrices, venueMarkets, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
|
|
3511
|
+
const rollingWindow = useRollingChartWindow2({ range: effectiveChartTimeRange });
|
|
3512
|
+
const chartPrimaryOutcomeId = (_b = (_a = chartOutcomesByVenue[0]) == null ? void 0 : _a.outcome.id) != null ? _b : null;
|
|
3513
|
+
const chartVenueOutcomeIds = useMemo6(() => {
|
|
3514
|
+
return chartOutcomesByVenue.map((item) => item.outcome.id);
|
|
3515
|
+
}, [chartOutcomesByVenue]);
|
|
3516
|
+
const {
|
|
3517
|
+
data: marketChartData,
|
|
3518
|
+
isLoading: isMarketChartLoading,
|
|
3519
|
+
error: marketChartError,
|
|
3520
|
+
refetch: refetchMarketChart
|
|
3521
|
+
} = useMarketChart2({
|
|
3522
|
+
marketId: chartPrimaryOutcomeId,
|
|
3523
|
+
venueMarketIds: chartVenueOutcomeIds,
|
|
3524
|
+
interval: rollingWindow.interval,
|
|
3525
|
+
startTs: rollingWindow.startTs * 1e3,
|
|
3526
|
+
endTs: rollingWindow.endTs * 1e3,
|
|
3527
|
+
// The panel only mounts when the chart is actually visible, so enable as
|
|
3528
|
+
// soon as we have an outcome to chart.
|
|
3529
|
+
enabled: !!chartPrimaryOutcomeId,
|
|
3530
|
+
live,
|
|
3531
|
+
refetchIntervalMs: rollingWindow.refetchIntervalMs,
|
|
3532
|
+
// Stable cache key per user-selected range so tab/page revisits hit cache
|
|
3533
|
+
// instead of refetching on every bucket-boundary rollover.
|
|
3534
|
+
rangeKey: rollingWindow.range
|
|
3535
|
+
});
|
|
3536
|
+
const hasAutoFallenBackRangeRef = useRef5(false);
|
|
3537
|
+
useEffect4(() => {
|
|
3538
|
+
hasAutoFallenBackRangeRef.current = false;
|
|
3539
|
+
setChartRangeOverride(null);
|
|
3540
|
+
}, [chartPrimaryOutcomeId]);
|
|
3541
|
+
useEffect4(() => {
|
|
3542
|
+
if (!shouldAutoFallbackToAllRange({
|
|
3543
|
+
chartData: marketChartData,
|
|
3544
|
+
isLoading: isMarketChartLoading,
|
|
3545
|
+
error: marketChartError,
|
|
3546
|
+
currentRange: effectiveChartTimeRange,
|
|
3547
|
+
hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
|
|
3548
|
+
domainStartTs: rollingWindow.startTs
|
|
3549
|
+
})) {
|
|
3550
|
+
return;
|
|
3551
|
+
}
|
|
3552
|
+
hasAutoFallenBackRangeRef.current = true;
|
|
3553
|
+
setChartRangeOverride("ALL");
|
|
3554
|
+
}, [
|
|
3555
|
+
marketChartData,
|
|
3556
|
+
isMarketChartLoading,
|
|
3557
|
+
marketChartError,
|
|
3558
|
+
effectiveChartTimeRange,
|
|
3559
|
+
rollingWindow.startTs
|
|
3560
|
+
]);
|
|
3561
|
+
const chartAvailableOutcomesByVenue = useMemo6(() => {
|
|
3562
|
+
return filterChartVenueOutcomesByRenderableVenues({
|
|
3563
|
+
chartData: marketChartData,
|
|
3564
|
+
venueOutcomes: chartOutcomesByVenue
|
|
3565
|
+
});
|
|
3566
|
+
}, [chartOutcomesByVenue, marketChartData]);
|
|
3567
|
+
const graphSeries = useMemo6(() => {
|
|
3568
|
+
var _a2, _b2, _c2, _d;
|
|
3569
|
+
const baseColor = resolveSeriesColor(
|
|
3570
|
+
(_d = (_c2 = selectedGraphVenue != null ? selectedGraphVenue : (_a2 = chartAvailableOutcomesByVenue[0]) == null ? void 0 : _a2.venue) != null ? _c2 : (_b2 = chartOutcomesByVenue[0]) == null ? void 0 : _b2.venue) != null ? _d : "polymarket",
|
|
3571
|
+
0,
|
|
3572
|
+
isDarkTheme
|
|
3573
|
+
);
|
|
3574
|
+
const domainStartTs = rollingWindow.startTs;
|
|
3575
|
+
return resolveMarketChartDisplaySeries({
|
|
3576
|
+
chartData: marketChartData,
|
|
3577
|
+
selectedVenue: selectedGraphVenue,
|
|
3578
|
+
transformProbability: (value) => value
|
|
3579
|
+
}).map((seriesItem) => {
|
|
3580
|
+
return {
|
|
3581
|
+
id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
|
|
3582
|
+
venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
|
|
3583
|
+
color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
|
|
3584
|
+
// Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
|
|
3585
|
+
// bars don't bleed in across a range shrink or long mount.
|
|
3586
|
+
points: seriesItem.points.filter((point) => point.time >= domainStartTs)
|
|
3587
|
+
};
|
|
3588
|
+
});
|
|
3589
|
+
}, [
|
|
3590
|
+
isDarkTheme,
|
|
3591
|
+
chartPrimaryOutcomeId,
|
|
3592
|
+
marketChartData,
|
|
3593
|
+
rollingWindow.startTs,
|
|
3594
|
+
selectedGraphVenue,
|
|
3595
|
+
resolvedChartOutcomeLabel,
|
|
3596
|
+
chartAvailableOutcomesByVenue,
|
|
3597
|
+
chartOutcomesByVenue
|
|
3598
|
+
]);
|
|
3599
|
+
const graphLiveState = useMemo6(() => {
|
|
3600
|
+
return resolveMarketChartLiveState({
|
|
3601
|
+
chartData: marketChartData,
|
|
3602
|
+
selectedVenue: selectedGraphVenue,
|
|
3603
|
+
transformProbability: (value) => value
|
|
3604
|
+
});
|
|
3605
|
+
}, [marketChartData, selectedGraphVenue]);
|
|
3606
|
+
const hasChartError = !!marketChartError;
|
|
3607
|
+
useEffect4(() => {
|
|
3608
|
+
if (!selectedGraphVenue) {
|
|
3609
|
+
return;
|
|
3610
|
+
}
|
|
3611
|
+
if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
|
|
3612
|
+
return;
|
|
3613
|
+
}
|
|
3614
|
+
setSelectedGraphVenue(null);
|
|
3615
|
+
}, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
|
|
3616
|
+
const handleGraphVenueToggle = (venue) => {
|
|
3617
|
+
setSelectedGraphVenue((currentVenue) => {
|
|
3618
|
+
if (currentVenue === venue) return null;
|
|
3619
|
+
return venue;
|
|
3620
|
+
});
|
|
3621
|
+
};
|
|
3622
|
+
const handleRetryMarketChart = () => {
|
|
3623
|
+
void refetchMarketChart();
|
|
3624
|
+
};
|
|
3625
|
+
return /* @__PURE__ */ jsxs7("div", { className: cn("agg-price-chart flex flex-col gap-5 p-5", classNames == null ? void 0 : classNames.graph), children: [
|
|
3626
|
+
hasChartError ? /* @__PURE__ */ jsx9(
|
|
3627
|
+
StateMessage,
|
|
3628
|
+
{
|
|
3629
|
+
title: labels.marketDetails.chartUnavailableTitle,
|
|
3630
|
+
description: labels.marketDetails.chartUnavailableDescription,
|
|
3631
|
+
icon: /* @__PURE__ */ jsx9(WarningIcon, {}),
|
|
3632
|
+
onAction: handleRetryMarketChart,
|
|
3633
|
+
classNames: { root: "min-h-[248px] px-5 py-10 md:min-h-[272px]" }
|
|
3634
|
+
}
|
|
3635
|
+
) : /* @__PURE__ */ jsx9(
|
|
3636
|
+
LineChart,
|
|
3637
|
+
{
|
|
3638
|
+
series: graphSeries,
|
|
3639
|
+
height: 260,
|
|
3640
|
+
isLoading: isMarketChartLoading,
|
|
3641
|
+
chartType: selectedChartType,
|
|
3642
|
+
liveCandle: selectedChartType === "candlestick" ? (_c = graphLiveState.liveCandle) != null ? _c : void 0 : void 0,
|
|
3643
|
+
lineValue: graphLiveState.lineValue,
|
|
3644
|
+
classNames: { root: "agg-chart-region w-full" },
|
|
3645
|
+
showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
|
|
3646
|
+
renderSeriesControls: () => {
|
|
3647
|
+
var _a2, _b2, _c2, _d;
|
|
3648
|
+
return /* @__PURE__ */ jsxs7("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
|
|
3649
|
+
/* @__PURE__ */ jsx9("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
|
|
3650
|
+
var _a3;
|
|
3651
|
+
const probability = formatProbabilityPercent(
|
|
3652
|
+
(_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
|
|
3653
|
+
formatPercent
|
|
3654
|
+
);
|
|
3655
|
+
const isActiveVenue = selectedGraphVenue === item.venue;
|
|
3656
|
+
return /* @__PURE__ */ jsxs7(
|
|
3657
|
+
"button",
|
|
3658
|
+
{
|
|
3659
|
+
type: "button",
|
|
3660
|
+
"aria-label": `${item.venue} ${probability}`,
|
|
3661
|
+
"aria-pressed": isActiveVenue,
|
|
3662
|
+
className: cn(
|
|
3663
|
+
"agg-market-venue",
|
|
3664
|
+
"cursor-pointer",
|
|
3665
|
+
"inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
|
|
3666
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary-hover",
|
|
3667
|
+
isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
|
|
3668
|
+
),
|
|
3669
|
+
onClick: (e) => {
|
|
3670
|
+
e.preventDefault();
|
|
3671
|
+
e.stopPropagation();
|
|
3672
|
+
handleGraphVenueToggle(item.venue);
|
|
3673
|
+
},
|
|
3674
|
+
children: [
|
|
3675
|
+
/* @__PURE__ */ jsx9(VenueLogo, { venue: item.venue, size: "small" }),
|
|
3676
|
+
/* @__PURE__ */ jsx9("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
|
|
3677
|
+
]
|
|
3678
|
+
},
|
|
3679
|
+
`${item.market.id}-${item.outcome.id}`
|
|
3680
|
+
);
|
|
3681
|
+
}) }),
|
|
3682
|
+
!isOutcomeSelectionLocked ? /* @__PURE__ */ jsx9(
|
|
3683
|
+
SwitchButton,
|
|
3684
|
+
{
|
|
3685
|
+
ariaLabel: labels.marketDetails.outcomeSelectorAria,
|
|
3686
|
+
className: "agg-outcome-switch w-full shrink-0 md:w-fit",
|
|
3687
|
+
value: (_d = (_c2 = (_a2 = headerOutcomeItems.find(
|
|
3688
|
+
(outcome) => outcome.label === resolvedChartOutcomeLabel
|
|
3689
|
+
)) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d : "",
|
|
3690
|
+
onValueChange: (outcomeId) => {
|
|
3691
|
+
const outcome = headerOutcomeItems.find(
|
|
3692
|
+
(headerOutcomeItem) => headerOutcomeItem.id === outcomeId
|
|
3693
|
+
);
|
|
3694
|
+
if (!outcome) return;
|
|
3695
|
+
setChartOutcomeLabel(outcome.label);
|
|
3696
|
+
},
|
|
3697
|
+
options: headerOutcomeItems.map((outcome) => {
|
|
3698
|
+
var _a3, _b3;
|
|
3699
|
+
const price = outcome.probability;
|
|
3700
|
+
return {
|
|
3701
|
+
value: outcome.id,
|
|
3702
|
+
label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
|
|
3703
|
+
ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
|
|
3704
|
+
};
|
|
3705
|
+
})
|
|
3706
|
+
}
|
|
3707
|
+
) : null
|
|
3708
|
+
] });
|
|
3709
|
+
}
|
|
3710
|
+
}
|
|
3711
|
+
),
|
|
3712
|
+
/* @__PURE__ */ jsxs7(
|
|
3713
|
+
"div",
|
|
3714
|
+
{
|
|
3715
|
+
className: cn(
|
|
3716
|
+
"agg-chart-footer",
|
|
3717
|
+
"flex flex-row justify-between gap-2 text-agg-sm leading-agg-5 text-agg-muted-foreground md:flex-row md:items-center md:justify-between",
|
|
3718
|
+
classNames == null ? void 0 : classNames.footer
|
|
3719
|
+
),
|
|
3720
|
+
children: [
|
|
3721
|
+
/* @__PURE__ */ jsx9("span", { children: typeof volume !== "number" ? labels.marketDetails.volumeUnavailable : volume > 0 ? `${formatCompactCurrency(volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
|
|
3722
|
+
/* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
|
|
3723
|
+
/* @__PURE__ */ jsx9(
|
|
3724
|
+
ChartTypeSwitch,
|
|
3725
|
+
{
|
|
3726
|
+
className: "agg-chart-type-switch shrink-0",
|
|
3727
|
+
value: selectedChartType,
|
|
3728
|
+
onValueChange: setSelectedChartType
|
|
3729
|
+
}
|
|
3730
|
+
),
|
|
3731
|
+
/* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "hidden h-4 w-px bg-agg-separator md:block" }),
|
|
3732
|
+
CHART_TIME_RANGES2.map((timeRange) => {
|
|
3733
|
+
const isActive = effectiveChartTimeRange === timeRange;
|
|
3734
|
+
const isDisabled = isResolvedMarket && timeRange !== "ALL";
|
|
3735
|
+
return /* @__PURE__ */ jsx9(
|
|
3736
|
+
"button",
|
|
3737
|
+
{
|
|
3738
|
+
type: "button",
|
|
3739
|
+
disabled: isDisabled,
|
|
3740
|
+
className: cn(
|
|
3741
|
+
"agg-chart-time-range-trigger",
|
|
3742
|
+
"cursor-pointer text-agg-sm leading-agg-5",
|
|
3743
|
+
isDisabled && "cursor-not-allowed opacity-50",
|
|
3744
|
+
isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
|
|
3745
|
+
),
|
|
3746
|
+
"aria-pressed": isActive,
|
|
3747
|
+
"aria-disabled": isDisabled,
|
|
3748
|
+
onClick: (e) => {
|
|
3749
|
+
e.preventDefault();
|
|
3750
|
+
e.stopPropagation();
|
|
3751
|
+
if (isDisabled) return;
|
|
3752
|
+
setChartRangeOverride(null);
|
|
3753
|
+
setSelectedTimeRange(timeRange);
|
|
3754
|
+
},
|
|
3755
|
+
children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
|
|
3756
|
+
},
|
|
3757
|
+
timeRange
|
|
3758
|
+
);
|
|
3759
|
+
})
|
|
3760
|
+
] })
|
|
3761
|
+
]
|
|
3762
|
+
}
|
|
3763
|
+
)
|
|
3764
|
+
] });
|
|
3765
|
+
};
|
|
3766
|
+
MarketDetailsGraphPanel.displayName = "MarketDetailsGraphPanel";
|
|
3767
|
+
|
|
3371
3768
|
// src/events/market-details/index.tsx
|
|
3372
|
-
import { Fragment as Fragment2, jsx as
|
|
3769
|
+
import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
3373
3770
|
var MarketDetailsUnavailableState = ({
|
|
3771
|
+
marketId,
|
|
3374
3772
|
ariaLabel,
|
|
3375
3773
|
classNames
|
|
3376
3774
|
}) => {
|
|
3377
|
-
const labels =
|
|
3378
|
-
return /* @__PURE__ */
|
|
3775
|
+
const labels = useLabels7();
|
|
3776
|
+
return /* @__PURE__ */ jsx10(
|
|
3379
3777
|
Card,
|
|
3380
3778
|
{
|
|
3779
|
+
"data-market-id": marketId || void 0,
|
|
3381
3780
|
className: cn(
|
|
3382
3781
|
"group/agg-market-card agg-market-card-unavailable",
|
|
3383
3782
|
marketDetailsBaseCardClassName,
|
|
@@ -3385,24 +3784,26 @@ var MarketDetailsUnavailableState = ({
|
|
|
3385
3784
|
),
|
|
3386
3785
|
role: "status",
|
|
3387
3786
|
"aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.unavailableAria,
|
|
3388
|
-
children: /* @__PURE__ */
|
|
3389
|
-
/* @__PURE__ */
|
|
3390
|
-
/* @__PURE__ */
|
|
3787
|
+
children: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-1 p-5", children: [
|
|
3788
|
+
/* @__PURE__ */ jsx10(Typography, { variant: "body-large-strong", children: labels.marketDetails.unavailableTitle }),
|
|
3789
|
+
/* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.unavailableDescription })
|
|
3391
3790
|
] })
|
|
3392
3791
|
}
|
|
3393
3792
|
);
|
|
3394
3793
|
};
|
|
3395
3794
|
var MarketDetailsNotFoundState = ({
|
|
3795
|
+
marketId,
|
|
3396
3796
|
ariaLabel: _ariaLabel,
|
|
3397
3797
|
classNames: _classNames
|
|
3398
3798
|
}) => {
|
|
3399
|
-
const labels =
|
|
3400
|
-
return /* @__PURE__ */
|
|
3799
|
+
const labels = useLabels7();
|
|
3800
|
+
return /* @__PURE__ */ jsx10(
|
|
3401
3801
|
StateMessage,
|
|
3402
3802
|
{
|
|
3803
|
+
"data-market-id": marketId || void 0,
|
|
3403
3804
|
title: labels.marketDetails.notFoundTitle,
|
|
3404
3805
|
description: labels.marketDetails.notFoundDescription,
|
|
3405
|
-
icon: /* @__PURE__ */
|
|
3806
|
+
icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
|
|
3406
3807
|
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
3407
3808
|
}
|
|
3408
3809
|
);
|
|
@@ -3420,6 +3821,11 @@ var MarketDetailsContent = ({
|
|
|
3420
3821
|
ariaLabel,
|
|
3421
3822
|
classNames,
|
|
3422
3823
|
otherContent,
|
|
3824
|
+
headerAccessory,
|
|
3825
|
+
compactHeader = false,
|
|
3826
|
+
subtitleOverride,
|
|
3827
|
+
headerOutcomeVariant,
|
|
3828
|
+
headerOutcomeItemsOverride,
|
|
3423
3829
|
onOutcomeSelect,
|
|
3424
3830
|
live,
|
|
3425
3831
|
midpointsFallback,
|
|
@@ -3427,29 +3833,33 @@ var MarketDetailsContent = ({
|
|
|
3427
3833
|
suppressOutcomeFallbackSelection,
|
|
3428
3834
|
midpointsResult
|
|
3429
3835
|
}) => {
|
|
3430
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i
|
|
3431
|
-
const config =
|
|
3836
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
3837
|
+
const config = useSdkUiConfig4();
|
|
3432
3838
|
const {
|
|
3433
3839
|
features: { enableAnimations },
|
|
3434
|
-
formatting: { formatPercent }
|
|
3435
|
-
general: { theme }
|
|
3840
|
+
formatting: { formatPercent }
|
|
3436
3841
|
} = config;
|
|
3437
|
-
const
|
|
3438
|
-
const labels = useLabels6();
|
|
3842
|
+
const labels = useLabels7();
|
|
3439
3843
|
const tradingContext = useEventTradingContext2();
|
|
3440
3844
|
const detailsContentId = useId();
|
|
3441
3845
|
const tradeSide = (_a = tradingContext == null ? void 0 : tradingContext.tradeSide) != null ? _a : "buy";
|
|
3442
|
-
const
|
|
3443
|
-
const wsBestPrices = useLiveBestPrices2(venueMarkets);
|
|
3444
|
-
const resolvedMarket = useMemo6(() => {
|
|
3846
|
+
const resolvedMarket = useMemo7(() => {
|
|
3445
3847
|
return resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
3446
3848
|
}, [venueMarkets, marketId]);
|
|
3447
|
-
const
|
|
3849
|
+
const clusterVenueMarkets = resolvedMarket == null ? void 0 : resolvedMarket.venueMarkets;
|
|
3850
|
+
const wsLivePrices = useLiveOutcomePrices2(clusterVenueMarkets);
|
|
3851
|
+
const wsBestPrices = useLiveBestPrices2(clusterVenueMarkets);
|
|
3852
|
+
const wsBestCandidates = useLiveBestPriceCandidates(clusterVenueMarkets);
|
|
3853
|
+
const scopedResolvedMarket = useMemo7(() => {
|
|
3448
3854
|
var _a2, _b2;
|
|
3449
3855
|
if (!resolvedMarket) return null;
|
|
3450
3856
|
return (_b2 = (_a2 = resolvedMarket.venueMarkets.find((venueMarket) => venueMarket.id === resolvedMarket.id)) != null ? _a2 : resolvedMarket.venueMarkets[0]) != null ? _b2 : null;
|
|
3451
3857
|
}, [resolvedMarket]);
|
|
3452
3858
|
const isResolvedMarket = resolveMarketTradingState(scopedResolvedMarket).kind === "resolved";
|
|
3859
|
+
useEventOrderbookData2(
|
|
3860
|
+
isResolvedMarket ? [] : resolvedMarket == null ? void 0 : resolvedMarket.venueMarkets,
|
|
3861
|
+
(_b = scopedResolvedMarket == null ? void 0 : scopedResolvedMarket.id) != null ? _b : null
|
|
3862
|
+
);
|
|
3453
3863
|
const clusterMidpointResult = midpointsResult != null ? midpointsResult : {
|
|
3454
3864
|
prices: /* @__PURE__ */ new Map(),
|
|
3455
3865
|
bestMidpointsByOutcomeId: /* @__PURE__ */ new Map(),
|
|
@@ -3460,26 +3870,25 @@ var MarketDetailsContent = ({
|
|
|
3460
3870
|
bestMidpoint: void 0,
|
|
3461
3871
|
bestMidpointVenue: void 0
|
|
3462
3872
|
};
|
|
3463
|
-
const clusterMidpoints = (
|
|
3873
|
+
const clusterMidpoints = (_c = clusterMidpointResult.bestMidpointsByOutcomeId) != null ? _c : clusterMidpointResult.prices;
|
|
3464
3874
|
const clusterBestMidpointsByOutcomeId = clusterMidpoints;
|
|
3465
3875
|
const clusterVenueByOutcomeId = clusterMidpointResult.venueByOutcomeId;
|
|
3466
3876
|
const clusterBestMidpoint = clusterMidpointResult.bestMidpoint;
|
|
3467
3877
|
const clusterBestMidpointVenue = clusterMidpointResult.bestMidpointVenue;
|
|
3468
3878
|
const clusterBestPricesRest = clusterMidpointResult.bestPrices;
|
|
3469
|
-
const clusterBestPrices =
|
|
3879
|
+
const clusterBestPrices = useMemo7(
|
|
3470
3880
|
() => mergeBestPricesPreferringLive2(clusterBestPricesRest, wsBestPrices),
|
|
3471
3881
|
[clusterBestPricesRest, wsBestPrices]
|
|
3472
3882
|
);
|
|
3473
3883
|
const clusterBestPriceVenuesByOutcomeId = clusterMidpointResult.bestPriceVenuesByOutcomeId;
|
|
3474
|
-
const clusterMidpointMarkets =
|
|
3884
|
+
const clusterMidpointMarkets = useMemo7(() => {
|
|
3475
3885
|
var _a2;
|
|
3476
3886
|
if (!resolvedMarket) return [];
|
|
3477
3887
|
return (_a2 = resolvedMarket.venueMarkets) != null ? _a2 : [];
|
|
3478
3888
|
}, [resolvedMarket]);
|
|
3479
|
-
const tradableVenues =
|
|
3889
|
+
const tradableVenues = useMemo7(() => {
|
|
3480
3890
|
var _a2;
|
|
3481
3891
|
if (clusterMidpointMarkets.length === 0) return null;
|
|
3482
|
-
if (clusterMidpoints.size === 0) return null;
|
|
3483
3892
|
const set = /* @__PURE__ */ new Set();
|
|
3484
3893
|
for (const market of clusterMidpointMarkets) {
|
|
3485
3894
|
for (const outcome of (_a2 = market.venueMarketOutcomes) != null ? _a2 : []) {
|
|
@@ -3489,28 +3898,20 @@ var MarketDetailsContent = ({
|
|
|
3489
3898
|
}
|
|
3490
3899
|
}
|
|
3491
3900
|
}
|
|
3901
|
+
if (set.size === 0) return null;
|
|
3492
3902
|
return set;
|
|
3493
3903
|
}, [clusterMidpointMarkets, clusterMidpoints]);
|
|
3494
|
-
const model =
|
|
3904
|
+
const model = useMemo7(() => {
|
|
3495
3905
|
return buildMarketDetailsModel({
|
|
3496
3906
|
venueMarkets,
|
|
3497
3907
|
marketId,
|
|
3498
3908
|
title,
|
|
3499
3909
|
image,
|
|
3500
3910
|
formatCompactCurrency: config.formatting.formatCompactCurrency,
|
|
3501
|
-
labels
|
|
3502
|
-
tradableVenues
|
|
3911
|
+
labels
|
|
3503
3912
|
});
|
|
3504
|
-
}, [
|
|
3505
|
-
|
|
3506
|
-
venueMarkets,
|
|
3507
|
-
image,
|
|
3508
|
-
labels,
|
|
3509
|
-
marketId,
|
|
3510
|
-
title,
|
|
3511
|
-
tradableVenues
|
|
3512
|
-
]);
|
|
3513
|
-
const livePrices = useMemo6(() => {
|
|
3913
|
+
}, [config.formatting.formatCompactCurrency, venueMarkets, image, labels, marketId, title]);
|
|
3914
|
+
const livePrices = useMemo7(() => {
|
|
3514
3915
|
const merged = /* @__PURE__ */ new Map();
|
|
3515
3916
|
if (midpointsFallback == null ? void 0 : midpointsFallback.size) {
|
|
3516
3917
|
for (const [outcomeId, price] of midpointsFallback) {
|
|
@@ -3525,37 +3926,32 @@ var MarketDetailsContent = ({
|
|
|
3525
3926
|
for (const [k, v] of wsLivePrices) merged.set(k, v);
|
|
3526
3927
|
return merged;
|
|
3527
3928
|
}, [clusterMidpoints, midpointsFallback, wsLivePrices]);
|
|
3528
|
-
const scopedMarketForCard =
|
|
3929
|
+
const scopedMarketForCard = useMemo7(() => {
|
|
3529
3930
|
var _a2;
|
|
3530
3931
|
if (!model) return null;
|
|
3531
3932
|
return (_a2 = model.market.venueMarkets.find((venueMarket) => venueMarket.id === model.market.id)) != null ? _a2 : model.primaryVenueMarket;
|
|
3532
3933
|
}, [model]);
|
|
3533
|
-
const marketTradingState =
|
|
3934
|
+
const marketTradingState = useMemo7(() => {
|
|
3534
3935
|
return resolveMarketTradingState(scopedMarketForCard);
|
|
3535
3936
|
}, [scopedMarketForCard]);
|
|
3536
3937
|
const isOutcomeSelectionLocked = marketTradingState.isTradingDisabled;
|
|
3537
3938
|
const isUpcomingMarket = marketTradingState.kind === "unopened";
|
|
3538
3939
|
const marketStatePresentation = resolveTradingStatePresentation(labels, marketTradingState);
|
|
3539
|
-
const marketDetailsTabs =
|
|
3940
|
+
const marketDetailsTabs = useMemo7(() => {
|
|
3540
3941
|
return getMarketDetailsTabs(labels);
|
|
3541
3942
|
}, [labels]);
|
|
3542
|
-
const [selectedTab, setSelectedTab] =
|
|
3943
|
+
const [selectedTab, setSelectedTab] = useState5(
|
|
3543
3944
|
() => resolveInitialTab(defaultTab)
|
|
3544
3945
|
);
|
|
3545
|
-
const [isOpened, setIsOpened] =
|
|
3546
|
-
|
|
3946
|
+
const [isOpened, setIsOpened] = useState5(controlledIsOpened);
|
|
3947
|
+
useEffect5(() => {
|
|
3547
3948
|
setSelectedTab(resolveInitialTab(defaultTab));
|
|
3548
3949
|
}, [defaultTab]);
|
|
3549
|
-
|
|
3950
|
+
useEffect5(() => {
|
|
3550
3951
|
setIsOpened(controlledIsOpened);
|
|
3551
3952
|
}, [controlledIsOpened]);
|
|
3552
|
-
const selectedTimeRange = config.chart.selectedChartTimeRange;
|
|
3553
|
-
const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
|
|
3554
3953
|
const effectiveSelectedTab = isResolvedMarket ? "graph" : selectedTab;
|
|
3555
|
-
const
|
|
3556
|
-
const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
|
|
3557
|
-
const [selectedChartType, setSelectedChartType] = useState4("line");
|
|
3558
|
-
const scopedSelectedOutcomeState = useMemo6(() => {
|
|
3954
|
+
const scopedSelectedOutcomeState = useMemo7(() => {
|
|
3559
3955
|
if (!model) {
|
|
3560
3956
|
return {
|
|
3561
3957
|
outcomeId: null,
|
|
@@ -3575,17 +3971,9 @@ var MarketDetailsContent = ({
|
|
|
3575
3971
|
tradingContext == null ? void 0 : tradingContext.selectedOutcomeId
|
|
3576
3972
|
]);
|
|
3577
3973
|
const selectedOutcomeId = scopedSelectedOutcomeState.outcomeId;
|
|
3578
|
-
const selectedOutcomeLabel = (
|
|
3974
|
+
const selectedOutcomeLabel = (_d = scopedSelectedOutcomeState.outcomeLabel) != null ? _d : null;
|
|
3579
3975
|
const selectOutcome = tradingContext == null ? void 0 : tradingContext.selectOutcome;
|
|
3580
|
-
|
|
3581
|
-
const [chartOutcomeLabel, setChartOutcomeLabel] = useState4(selectedOutcomeLabel);
|
|
3582
|
-
useEffect4(() => {
|
|
3583
|
-
if (!isOpened) return;
|
|
3584
|
-
if (selectedOutcomeLabel) {
|
|
3585
|
-
setChartOutcomeLabel(selectedOutcomeLabel);
|
|
3586
|
-
}
|
|
3587
|
-
}, [isOpened]);
|
|
3588
|
-
useEffect4(() => {
|
|
3976
|
+
useEffect5(() => {
|
|
3589
3977
|
var _a2;
|
|
3590
3978
|
if (!isOpened || !model) return;
|
|
3591
3979
|
if (isOutcomeSelectionLocked) return;
|
|
@@ -3609,31 +3997,38 @@ var MarketDetailsContent = ({
|
|
|
3609
3997
|
tradingContext == null ? void 0 : tradingContext.selectedMarketId,
|
|
3610
3998
|
selectOutcome
|
|
3611
3999
|
]);
|
|
3612
|
-
const
|
|
4000
|
+
const venueMarketIdByVenue = useMemo7(
|
|
4001
|
+
() => buildVenueMarketIdByVenue(model == null ? void 0 : model.market.venueMarkets),
|
|
4002
|
+
[model]
|
|
4003
|
+
);
|
|
4004
|
+
const headerOutcomeItems = useMemo7(() => {
|
|
3613
4005
|
if (!model) return [];
|
|
3614
|
-
|
|
4006
|
+
if (headerOutcomeItemsOverride) return headerOutcomeItemsOverride;
|
|
4007
|
+
const items = resolveHeaderOutcomeItems(
|
|
4008
|
+
model.market.venueMarkets,
|
|
4009
|
+
scopedMarketForCard,
|
|
4010
|
+
headerOutcomeVariant
|
|
4011
|
+
);
|
|
3615
4012
|
return items.map((item) => {
|
|
3616
4013
|
var _a2;
|
|
3617
4014
|
const fallbackPrice = midpointsFallback == null ? void 0 : midpointsFallback.get(item.id);
|
|
3618
|
-
const
|
|
3619
|
-
outcomeId: item.id,
|
|
3620
|
-
outcomeLabel: item.label,
|
|
3621
|
-
selection: tradeSide,
|
|
3622
|
-
bestMidpointVenue: clusterBestMidpointVenue,
|
|
3623
|
-
bestVenueByOutcomeId: clusterVenueByOutcomeId,
|
|
3624
|
-
bestPriceVenuesByOutcomeId: clusterBestPriceVenuesByOutcomeId,
|
|
3625
|
-
fallbackVenue: midpointsFallbackVenues == null ? void 0 : midpointsFallbackVenues.get(item.id)
|
|
3626
|
-
});
|
|
3627
|
-
const outcomeBestPrice = getDisplayOutcomePrice({
|
|
4015
|
+
const candidate = selectBestOutcomeCandidate({
|
|
3628
4016
|
outcomeId: item.id,
|
|
3629
4017
|
outcomeLabel: item.label,
|
|
3630
4018
|
selection: tradeSide,
|
|
3631
|
-
|
|
4019
|
+
live: wsBestCandidates.get(item.id),
|
|
4020
|
+
restBest: clusterBestPricesRest.get(item.id),
|
|
4021
|
+
restBestVenues: clusterBestPriceVenuesByOutcomeId.get(item.id),
|
|
4022
|
+
restMidpoint: clusterBestMidpointsByOutcomeId.get(item.id),
|
|
4023
|
+
restMidpointVenue: clusterVenueByOutcomeId.get(item.id),
|
|
3632
4024
|
bestMidpoint: clusterBestMidpoint,
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
|
|
4025
|
+
bestMidpointVenue: clusterBestMidpointVenue,
|
|
4026
|
+
staticPrice: fallbackPrice,
|
|
4027
|
+
staticVenue: midpointsFallbackVenues == null ? void 0 : midpointsFallbackVenues.get(item.id),
|
|
4028
|
+
venueMarketIdByVenue
|
|
3636
4029
|
});
|
|
4030
|
+
const bestVenue = candidate == null ? void 0 : candidate.venue;
|
|
4031
|
+
const outcomeBestPrice = candidate == null ? void 0 : candidate.price;
|
|
3637
4032
|
if (isResolvedMarket) {
|
|
3638
4033
|
const isWinningOutcome = item.id === ((_a2 = marketTradingState.winningOutcome) == null ? void 0 : _a2.id);
|
|
3639
4034
|
return __spreadValues(__spreadProps(__spreadValues({}, item), {
|
|
@@ -3651,19 +4046,22 @@ var MarketDetailsContent = ({
|
|
|
3651
4046
|
clusterBestMidpoint,
|
|
3652
4047
|
clusterBestMidpointVenue,
|
|
3653
4048
|
clusterBestMidpointsByOutcomeId,
|
|
3654
|
-
|
|
4049
|
+
clusterBestPricesRest,
|
|
3655
4050
|
clusterBestPriceVenuesByOutcomeId,
|
|
4051
|
+
headerOutcomeItemsOverride,
|
|
3656
4052
|
model,
|
|
3657
4053
|
scopedMarketForCard,
|
|
4054
|
+
headerOutcomeVariant,
|
|
3658
4055
|
clusterVenueByOutcomeId,
|
|
3659
4056
|
isResolvedMarket,
|
|
3660
|
-
(
|
|
4057
|
+
(_e = marketTradingState.winningOutcome) == null ? void 0 : _e.id,
|
|
3661
4058
|
midpointsFallback,
|
|
3662
4059
|
midpointsFallbackVenues,
|
|
3663
4060
|
tradeSide,
|
|
3664
|
-
|
|
4061
|
+
venueMarketIdByVenue,
|
|
4062
|
+
wsBestCandidates
|
|
3665
4063
|
]);
|
|
3666
|
-
const headlineProbability =
|
|
4064
|
+
const headlineProbability = useMemo7(() => {
|
|
3667
4065
|
var _a2, _b2, _c2, _d2;
|
|
3668
4066
|
if (!model || !scopedMarketForCard) return void 0;
|
|
3669
4067
|
if (isResolvedMarket) {
|
|
@@ -3699,7 +4097,7 @@ var MarketDetailsContent = ({
|
|
|
3699
4097
|
midpointsFallback,
|
|
3700
4098
|
wsLivePrices
|
|
3701
4099
|
]);
|
|
3702
|
-
const selectedOutcomesByVenue =
|
|
4100
|
+
const selectedOutcomesByVenue = useMemo7(() => {
|
|
3703
4101
|
if (!model) return [];
|
|
3704
4102
|
return collectEligibleVenueOutcomes({
|
|
3705
4103
|
venueMarkets: model.market.venueMarkets,
|
|
@@ -3711,73 +4109,9 @@ var MarketDetailsContent = ({
|
|
|
3711
4109
|
selectedOutcomeId
|
|
3712
4110
|
});
|
|
3713
4111
|
}, [model, selectedOutcomeLabel, selectedOutcomeId]);
|
|
3714
|
-
const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
|
|
3715
|
-
const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
|
|
3716
|
-
const chartOutcomesByVenue = useMemo6(() => {
|
|
3717
|
-
if (!model) return [];
|
|
3718
|
-
return resolveChartVenueOutcomes({
|
|
3719
|
-
eligibleVenueOutcomes: collectEligibleVenueOutcomes({
|
|
3720
|
-
venueMarkets: model.market.venueMarkets,
|
|
3721
|
-
selectedOutcomeLabel: resolvedChartOutcomeLabel,
|
|
3722
|
-
selectedOutcomeId: chartSelectedOutcomeId
|
|
3723
|
-
}),
|
|
3724
|
-
livePrices
|
|
3725
|
-
});
|
|
3726
|
-
}, [livePrices, model, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
|
|
3727
|
-
const chartEnabled = isOpened && effectiveSelectedTab === "graph";
|
|
3728
4112
|
const orderBookEnabled = isOpened && effectiveSelectedTab === "order-book" && !marketTradingState.isTradingDisabled;
|
|
3729
|
-
const
|
|
3730
|
-
const
|
|
3731
|
-
const primaryOutcomeId = (_h = (_g = selectedOutcomesByVenue[0]) == null ? void 0 : _g.outcome.id) != null ? _h : null;
|
|
3732
|
-
const chartPrimaryOutcomeId = (_j = (_i = chartOutcomesByVenue[0]) == null ? void 0 : _i.outcome.id) != null ? _j : null;
|
|
3733
|
-
const chartVenueOutcomeIds = useMemo6(() => {
|
|
3734
|
-
return chartOutcomesByVenue.map((item) => item.outcome.id);
|
|
3735
|
-
}, [chartOutcomesByVenue]);
|
|
3736
|
-
const {
|
|
3737
|
-
data: marketChartData,
|
|
3738
|
-
isLoading: isMarketChartLoading,
|
|
3739
|
-
error: marketChartError,
|
|
3740
|
-
refetch: refetchMarketChart
|
|
3741
|
-
} = useMarketChart2({
|
|
3742
|
-
marketId: chartPrimaryOutcomeId,
|
|
3743
|
-
venueMarketIds: chartVenueOutcomeIds,
|
|
3744
|
-
interval: rollingWindow.interval,
|
|
3745
|
-
startTs: rollingWindow.startTs * 1e3,
|
|
3746
|
-
endTs: rollingWindow.endTs * 1e3,
|
|
3747
|
-
enabled: chartEnabled && !!chartPrimaryOutcomeId,
|
|
3748
|
-
live,
|
|
3749
|
-
refetchIntervalMs: rollingWindow.refetchIntervalMs,
|
|
3750
|
-
// Stable cache key per user-selected range so tab/page revisits hit cache
|
|
3751
|
-
// instead of refetching on every bucket-boundary rollover.
|
|
3752
|
-
rangeKey: rollingWindow.range
|
|
3753
|
-
});
|
|
3754
|
-
const hasAutoFallenBackRangeRef = useRef5(false);
|
|
3755
|
-
useEffect4(() => {
|
|
3756
|
-
hasAutoFallenBackRangeRef.current = false;
|
|
3757
|
-
setChartRangeOverride(null);
|
|
3758
|
-
}, [chartPrimaryOutcomeId]);
|
|
3759
|
-
useEffect4(() => {
|
|
3760
|
-
if (!shouldAutoFallbackToAllRange({
|
|
3761
|
-
chartData: marketChartData,
|
|
3762
|
-
isLoading: isMarketChartLoading,
|
|
3763
|
-
error: marketChartError,
|
|
3764
|
-
currentRange: effectiveChartTimeRange,
|
|
3765
|
-
hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
|
|
3766
|
-
// Ignore stale bars outside the rolling window — see comment on the
|
|
3767
|
-
// matching effect in event-list-item-details.
|
|
3768
|
-
domainStartTs: rollingWindow.startTs
|
|
3769
|
-
})) {
|
|
3770
|
-
return;
|
|
3771
|
-
}
|
|
3772
|
-
hasAutoFallenBackRangeRef.current = true;
|
|
3773
|
-
setChartRangeOverride("ALL");
|
|
3774
|
-
}, [
|
|
3775
|
-
marketChartData,
|
|
3776
|
-
isMarketChartLoading,
|
|
3777
|
-
marketChartError,
|
|
3778
|
-
effectiveChartTimeRange,
|
|
3779
|
-
rollingWindow.startTs
|
|
3780
|
-
]);
|
|
4113
|
+
const primaryVenueMarketId = (_g = (_f = selectedOutcomesByVenue[0]) == null ? void 0 : _f.market.id) != null ? _g : null;
|
|
4114
|
+
const primaryOutcomeId = (_i = (_h = selectedOutcomesByVenue[0]) == null ? void 0 : _h.outcome.id) != null ? _i : null;
|
|
3781
4115
|
const marketOrderbookResult = useMarketOrderbook({
|
|
3782
4116
|
marketId: primaryVenueMarketId,
|
|
3783
4117
|
enabled: orderBookEnabled && !!primaryVenueMarketId,
|
|
@@ -3787,14 +4121,14 @@ var MarketDetailsContent = ({
|
|
|
3787
4121
|
})),
|
|
3788
4122
|
live
|
|
3789
4123
|
});
|
|
3790
|
-
const marketOrderbookDataById =
|
|
4124
|
+
const marketOrderbookDataById = useMemo7(() => {
|
|
3791
4125
|
var _a2;
|
|
3792
4126
|
return (_a2 = marketOrderbookResult.dataById) != null ? _a2 : {};
|
|
3793
4127
|
}, [marketOrderbookResult]);
|
|
3794
4128
|
const isOrderBookLoading = marketOrderbookResult.isLoading;
|
|
3795
4129
|
const orderBookError = marketOrderbookResult.error;
|
|
3796
4130
|
const refetchOrderBook = marketOrderbookResult.refetch;
|
|
3797
|
-
const aggregatedOrderbookRows =
|
|
4131
|
+
const aggregatedOrderbookRows = useMemo7(() => {
|
|
3798
4132
|
return mergeVenueOutcomeOrderbooks({
|
|
3799
4133
|
eligibleOutcomes: selectedOutcomesByVenue,
|
|
3800
4134
|
orderbooksByOutcomeId: marketOrderbookDataById
|
|
@@ -3802,7 +4136,7 @@ var MarketDetailsContent = ({
|
|
|
3802
4136
|
}, [marketOrderbookDataById, selectedOutcomesByVenue]);
|
|
3803
4137
|
const askRows = aggregatedOrderbookRows.askRows;
|
|
3804
4138
|
const bidRows = aggregatedOrderbookRows.bidRows;
|
|
3805
|
-
const unifiedEntries =
|
|
4139
|
+
const unifiedEntries = useMemo7(() => {
|
|
3806
4140
|
return resolveUnifiedOrderBookEntries({
|
|
3807
4141
|
askRows,
|
|
3808
4142
|
bidRows,
|
|
@@ -3810,7 +4144,7 @@ var MarketDetailsContent = ({
|
|
|
3810
4144
|
spread: aggregatedOrderbookRows.spread
|
|
3811
4145
|
});
|
|
3812
4146
|
}, [aggregatedOrderbookRows.midpoint, aggregatedOrderbookRows.spread, askRows, bidRows]);
|
|
3813
|
-
const orderbookSnapshotKey =
|
|
4147
|
+
const orderbookSnapshotKey = useMemo7(() => {
|
|
3814
4148
|
if (selectedOutcomesByVenue.length === 0) return null;
|
|
3815
4149
|
return selectedOutcomesByVenue.map((item) => {
|
|
3816
4150
|
var _a2, _b2;
|
|
@@ -3818,52 +4152,7 @@ var MarketDetailsContent = ({
|
|
|
3818
4152
|
return `${item.outcomeId}:${snapshotVersion}`;
|
|
3819
4153
|
}).join("|");
|
|
3820
4154
|
}, [marketOrderbookDataById, selectedOutcomesByVenue]);
|
|
3821
|
-
const
|
|
3822
|
-
return filterChartVenueOutcomesByRenderableVenues({
|
|
3823
|
-
chartData: marketChartData,
|
|
3824
|
-
venueOutcomes: chartOutcomesByVenue
|
|
3825
|
-
});
|
|
3826
|
-
}, [chartOutcomesByVenue, marketChartData]);
|
|
3827
|
-
const graphSeries = useMemo6(() => {
|
|
3828
|
-
var _a2, _b2, _c2, _d2;
|
|
3829
|
-
const baseColor = resolveSeriesColor(
|
|
3830
|
-
(_d2 = (_c2 = selectedGraphVenue != null ? selectedGraphVenue : (_a2 = chartAvailableOutcomesByVenue[0]) == null ? void 0 : _a2.venue) != null ? _c2 : (_b2 = chartOutcomesByVenue[0]) == null ? void 0 : _b2.venue) != null ? _d2 : "polymarket",
|
|
3831
|
-
0,
|
|
3832
|
-
isDarkTheme
|
|
3833
|
-
);
|
|
3834
|
-
const domainStartTs = rollingWindow.startTs;
|
|
3835
|
-
return resolveMarketChartDisplaySeries({
|
|
3836
|
-
chartData: marketChartData,
|
|
3837
|
-
selectedVenue: selectedGraphVenue,
|
|
3838
|
-
transformProbability: (value) => value
|
|
3839
|
-
}).map((seriesItem) => {
|
|
3840
|
-
return {
|
|
3841
|
-
id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
|
|
3842
|
-
venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
|
|
3843
|
-
color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
|
|
3844
|
-
// Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
|
|
3845
|
-
// bars don't bleed in across a range shrink or long mount.
|
|
3846
|
-
points: seriesItem.points.filter((point) => point.time >= domainStartTs)
|
|
3847
|
-
};
|
|
3848
|
-
});
|
|
3849
|
-
}, [
|
|
3850
|
-
isDarkTheme,
|
|
3851
|
-
chartPrimaryOutcomeId,
|
|
3852
|
-
marketChartData,
|
|
3853
|
-
rollingWindow.startTs,
|
|
3854
|
-
selectedGraphVenue,
|
|
3855
|
-
resolvedChartOutcomeLabel,
|
|
3856
|
-
chartAvailableOutcomesByVenue,
|
|
3857
|
-
chartOutcomesByVenue
|
|
3858
|
-
]);
|
|
3859
|
-
const graphLiveState = useMemo6(() => {
|
|
3860
|
-
return resolveMarketChartLiveState({
|
|
3861
|
-
chartData: marketChartData,
|
|
3862
|
-
selectedVenue: selectedGraphVenue,
|
|
3863
|
-
transformProbability: (value) => value
|
|
3864
|
-
});
|
|
3865
|
-
}, [marketChartData, selectedGraphVenue]);
|
|
3866
|
-
const otherRows = useMemo6(() => {
|
|
4155
|
+
const otherRows = useMemo7(() => {
|
|
3867
4156
|
if (!model) return [];
|
|
3868
4157
|
return resolveOtherTabRows(model.market, labels);
|
|
3869
4158
|
}, [labels, model]);
|
|
@@ -3873,7 +4162,6 @@ var MarketDetailsContent = ({
|
|
|
3873
4162
|
const isSnapshotUnavailableError = typeof orderBookError === "object" && orderBookError != null && "message" in orderBookError && typeof orderBookError.message === "string" && /^snapshot unavailable for\s+\S+/i.test(orderBookError.message);
|
|
3874
4163
|
const orderBookErrorDescription = isSnapshotUnavailableError ? labels.marketDetails.orderBookUnavailableDescription : typeof orderBookError === "object" && orderBookError != null && "message" in orderBookError && typeof orderBookError.message === "string" && orderBookError.message.trim().length > 0 ? orderBookError.message : labels.marketDetails.orderBookUnavailableDescription;
|
|
3875
4164
|
const hasNoOrderBook = isOrderBookNotFound && !isMarketResolved || !isOrderBookLoading && !hasOrderBookError && (selectedOutcomesByVenue.length === 0 || aggregatedOrderbookRows.hasNoOrderBook);
|
|
3876
|
-
const hasChartError = !!marketChartError;
|
|
3877
4165
|
const selectHeaderOutcome = ({
|
|
3878
4166
|
item,
|
|
3879
4167
|
shouldNotifyOutcomeSelect = false
|
|
@@ -3881,7 +4169,7 @@ var MarketDetailsContent = ({
|
|
|
3881
4169
|
var _a2, _b2;
|
|
3882
4170
|
if (isOutcomeSelectionLocked) return;
|
|
3883
4171
|
if (item == null ? void 0 : item.id) {
|
|
3884
|
-
const targetMarket = (_a2 =
|
|
4172
|
+
const targetMarket = (_a2 = venueMarkets.find(
|
|
3885
4173
|
(venueMarket) => venueMarket.venueMarketOutcomes.some((outcome) => outcome.id === item.id)
|
|
3886
4174
|
)) != null ? _a2 : null;
|
|
3887
4175
|
if ((targetMarket == null ? void 0 : targetMarket.id) && targetMarket.id !== (tradingContext == null ? void 0 : tradingContext.selectedMarketId)) {
|
|
@@ -3923,23 +4211,14 @@ var MarketDetailsContent = ({
|
|
|
3923
4211
|
if (!marketId) return;
|
|
3924
4212
|
onOpenChange == null ? void 0 : onOpenChange(marketId);
|
|
3925
4213
|
};
|
|
3926
|
-
const handleGraphVenueToggle = (venue) => {
|
|
3927
|
-
setSelectedGraphVenue((currentVenue) => {
|
|
3928
|
-
if (currentVenue === venue) return null;
|
|
3929
|
-
return venue;
|
|
3930
|
-
});
|
|
3931
|
-
};
|
|
3932
4214
|
const handleRetryOrderBook = () => {
|
|
3933
4215
|
void refetchOrderBook();
|
|
3934
4216
|
};
|
|
3935
|
-
const handleRetryMarketChart = () => {
|
|
3936
|
-
void refetchMarketChart();
|
|
3937
|
-
};
|
|
3938
4217
|
const orderbookState = marketTradingState.isTradingDisabled ? {
|
|
3939
4218
|
kind: "disabled",
|
|
3940
4219
|
title: marketStatePresentation.title,
|
|
3941
4220
|
description: marketStatePresentation.description,
|
|
3942
|
-
icon: /* @__PURE__ */
|
|
4221
|
+
icon: /* @__PURE__ */ jsx10(Icon, { name: marketStatePresentation.iconName, className: "h-5 w-5", "aria-hidden": "true" })
|
|
3943
4222
|
} : isOrderBookLoading ? { kind: "loading" } : hasOrderBookError ? {
|
|
3944
4223
|
kind: "error",
|
|
3945
4224
|
title: labels.marketDetails.orderBookUnavailableTitle,
|
|
@@ -3954,22 +4233,27 @@ var MarketDetailsContent = ({
|
|
|
3954
4233
|
title: labels.marketDetails.orderBookEmptyTitle,
|
|
3955
4234
|
description: labels.marketDetails.orderBookEmptyDescription
|
|
3956
4235
|
} : { kind: "data" };
|
|
3957
|
-
useEffect4(() => {
|
|
3958
|
-
if (!selectedGraphVenue) {
|
|
3959
|
-
return;
|
|
3960
|
-
}
|
|
3961
|
-
if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
|
|
3962
|
-
return;
|
|
3963
|
-
}
|
|
3964
|
-
setSelectedGraphVenue(null);
|
|
3965
|
-
}, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
|
|
3966
4236
|
if (marketId && !resolvedMarket) {
|
|
3967
|
-
return /* @__PURE__ */
|
|
4237
|
+
return /* @__PURE__ */ jsx10(
|
|
4238
|
+
MarketDetailsNotFoundState,
|
|
4239
|
+
{
|
|
4240
|
+
marketId,
|
|
4241
|
+
ariaLabel,
|
|
4242
|
+
classNames
|
|
4243
|
+
}
|
|
4244
|
+
);
|
|
3968
4245
|
}
|
|
3969
4246
|
if (!model) {
|
|
3970
|
-
return /* @__PURE__ */
|
|
4247
|
+
return /* @__PURE__ */ jsx10(
|
|
4248
|
+
MarketDetailsUnavailableState,
|
|
4249
|
+
{
|
|
4250
|
+
marketId,
|
|
4251
|
+
ariaLabel,
|
|
4252
|
+
classNames
|
|
4253
|
+
}
|
|
4254
|
+
);
|
|
3971
4255
|
}
|
|
3972
|
-
return /* @__PURE__ */
|
|
4256
|
+
return /* @__PURE__ */ jsxs8(
|
|
3973
4257
|
Card,
|
|
3974
4258
|
{
|
|
3975
4259
|
className: cn(
|
|
@@ -3980,9 +4264,10 @@ var MarketDetailsContent = ({
|
|
|
3980
4264
|
classNames == null ? void 0 : classNames.root
|
|
3981
4265
|
),
|
|
3982
4266
|
children: [
|
|
3983
|
-
/* @__PURE__ */
|
|
4267
|
+
/* @__PURE__ */ jsxs8(
|
|
3984
4268
|
"div",
|
|
3985
4269
|
{
|
|
4270
|
+
"data-market-id": marketId || void 0,
|
|
3986
4271
|
className: cn(
|
|
3987
4272
|
"agg-market-card-header",
|
|
3988
4273
|
"flex flex-col items-stretch gap-3 px-5 py-3 md:flex-row md:flex-nowrap md:items-center md:justify-between",
|
|
@@ -3990,7 +4275,7 @@ var MarketDetailsContent = ({
|
|
|
3990
4275
|
classNames == null ? void 0 : classNames.header
|
|
3991
4276
|
),
|
|
3992
4277
|
children: [
|
|
3993
|
-
/* @__PURE__ */
|
|
4278
|
+
/* @__PURE__ */ jsxs8(
|
|
3994
4279
|
"button",
|
|
3995
4280
|
{
|
|
3996
4281
|
className: cn(
|
|
@@ -4004,17 +4289,17 @@ var MarketDetailsContent = ({
|
|
|
4004
4289
|
"aria-controls": detailsContentId,
|
|
4005
4290
|
"aria-label": isOpened ? labels.marketDetails.toggleCloseDetailsAria(model.title) : labels.marketDetails.toggleOpenDetailsAria(model.title),
|
|
4006
4291
|
children: [
|
|
4007
|
-
/* @__PURE__ */
|
|
4008
|
-
/* @__PURE__ */
|
|
4292
|
+
/* @__PURE__ */ jsxs8("div", { className: "agg-market-summary flex min-w-24 flex-1 items-center gap-3 md:gap-4", children: [
|
|
4293
|
+
!compactHeader ? /* @__PURE__ */ jsx10(
|
|
4009
4294
|
RemoteImage,
|
|
4010
4295
|
{
|
|
4011
4296
|
src: optimizedImageUrl3(model.image, 60),
|
|
4012
4297
|
alt: "",
|
|
4013
4298
|
className: "agg-market-image size-12 rounded-agg-lg object-cover md:size-[60px]"
|
|
4014
4299
|
}
|
|
4015
|
-
),
|
|
4016
|
-
/* @__PURE__ */
|
|
4017
|
-
/* @__PURE__ */
|
|
4300
|
+
) : null,
|
|
4301
|
+
/* @__PURE__ */ jsxs8("div", { className: "flex min-w-24 flex-col", children: [
|
|
4302
|
+
/* @__PURE__ */ jsx10(Tooltip, { content: model.title, side: "top", children: /* @__PURE__ */ jsx10("div", { className: "min-w-0", children: /* @__PURE__ */ jsx10(
|
|
4018
4303
|
Typography,
|
|
4019
4304
|
{
|
|
4020
4305
|
as: "h3",
|
|
@@ -4023,16 +4308,16 @@ var MarketDetailsContent = ({
|
|
|
4023
4308
|
children: model.title
|
|
4024
4309
|
}
|
|
4025
4310
|
) }) }),
|
|
4026
|
-
/* @__PURE__ */
|
|
4311
|
+
/* @__PURE__ */ jsx10("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsx10(
|
|
4027
4312
|
Typography,
|
|
4028
4313
|
{
|
|
4029
4314
|
variant: "label",
|
|
4030
4315
|
className: "agg-market-meta truncate text-agg-muted-foreground",
|
|
4031
|
-
children: model.subtitle
|
|
4316
|
+
children: subtitleOverride != null ? subtitleOverride : model.subtitle
|
|
4032
4317
|
}
|
|
4033
4318
|
) }),
|
|
4034
|
-
marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */
|
|
4035
|
-
/* @__PURE__ */
|
|
4319
|
+
marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */ jsxs8("div", { className: "mt-2 flex flex-wrap items-center gap-2 justify-center md:justify-start", children: [
|
|
4320
|
+
/* @__PURE__ */ jsxs8(
|
|
4036
4321
|
"span",
|
|
4037
4322
|
{
|
|
4038
4323
|
className: cn(
|
|
@@ -4040,7 +4325,7 @@ var MarketDetailsContent = ({
|
|
|
4040
4325
|
resolveTradingStateBadgeClassName(marketTradingState.kind)
|
|
4041
4326
|
),
|
|
4042
4327
|
children: [
|
|
4043
|
-
/* @__PURE__ */
|
|
4328
|
+
/* @__PURE__ */ jsx10(
|
|
4044
4329
|
Icon,
|
|
4045
4330
|
{
|
|
4046
4331
|
name: marketStatePresentation.iconName,
|
|
@@ -4048,20 +4333,20 @@ var MarketDetailsContent = ({
|
|
|
4048
4333
|
className: "h-3.5 w-3.5"
|
|
4049
4334
|
}
|
|
4050
4335
|
),
|
|
4051
|
-
/* @__PURE__ */
|
|
4336
|
+
/* @__PURE__ */ jsx10("span", { children: marketStatePresentation.badgeLabel })
|
|
4052
4337
|
]
|
|
4053
4338
|
}
|
|
4054
4339
|
),
|
|
4055
|
-
marketStatePresentation.timestampLabel ? /* @__PURE__ */
|
|
4056
|
-
marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */
|
|
4340
|
+
marketStatePresentation.timestampLabel ? /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.timestampLabel }) : null,
|
|
4341
|
+
marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.winningOutcomeLabel }) : null
|
|
4057
4342
|
] }) : null
|
|
4058
4343
|
] })
|
|
4059
4344
|
] }),
|
|
4060
|
-
/* @__PURE__ */
|
|
4345
|
+
!compactHeader ? /* @__PURE__ */ jsx10(Typography, { as: "div", variant: "heading", className: "agg-market-headline shrink-0", children: formatProbabilityPercent(headlineProbability, formatPercent) }) : null
|
|
4061
4346
|
]
|
|
4062
4347
|
}
|
|
4063
4348
|
),
|
|
4064
|
-
marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */
|
|
4349
|
+
marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */ jsx10("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs8(
|
|
4065
4350
|
"span",
|
|
4066
4351
|
{
|
|
4067
4352
|
className: cn(
|
|
@@ -4074,7 +4359,7 @@ var MarketDetailsContent = ({
|
|
|
4074
4359
|
"border-transparent bg-agg-secondary-hover"
|
|
4075
4360
|
),
|
|
4076
4361
|
children: [
|
|
4077
|
-
/* @__PURE__ */
|
|
4362
|
+
/* @__PURE__ */ jsx10(
|
|
4078
4363
|
Icon,
|
|
4079
4364
|
{
|
|
4080
4365
|
name: marketTradingState.winningOutcome.label.trim().toLowerCase() === "yes" ? "check-circle" : "cross-circle",
|
|
@@ -4085,10 +4370,10 @@ var MarketDetailsContent = ({
|
|
|
4085
4370
|
)
|
|
4086
4371
|
}
|
|
4087
4372
|
),
|
|
4088
|
-
/* @__PURE__ */
|
|
4373
|
+
/* @__PURE__ */ jsx10(Typography, { variant: "body", children: labels.eventMarketPage.resolvedOutcome(marketTradingState.winningOutcome.label) })
|
|
4089
4374
|
]
|
|
4090
4375
|
}
|
|
4091
|
-
) }) : isUpcomingMarket ? /* @__PURE__ */
|
|
4376
|
+
) }) : isUpcomingMarket ? /* @__PURE__ */ jsx10("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ jsxs8(
|
|
4092
4377
|
"span",
|
|
4093
4378
|
{
|
|
4094
4379
|
className: cn(
|
|
@@ -4097,7 +4382,7 @@ var MarketDetailsContent = ({
|
|
|
4097
4382
|
resolveTradingStateBadgeClassName(marketTradingState.kind)
|
|
4098
4383
|
),
|
|
4099
4384
|
children: [
|
|
4100
|
-
/* @__PURE__ */
|
|
4385
|
+
/* @__PURE__ */ jsx10(
|
|
4101
4386
|
Icon,
|
|
4102
4387
|
{
|
|
4103
4388
|
name: marketStatePresentation.iconName,
|
|
@@ -4106,10 +4391,10 @@ var MarketDetailsContent = ({
|
|
|
4106
4391
|
"aria-hidden": "true"
|
|
4107
4392
|
}
|
|
4108
4393
|
),
|
|
4109
|
-
/* @__PURE__ */
|
|
4394
|
+
/* @__PURE__ */ jsx10("span", { children: marketStatePresentation.badgeLabel })
|
|
4110
4395
|
]
|
|
4111
4396
|
}
|
|
4112
|
-
) }) : /* @__PURE__ */
|
|
4397
|
+
) }) : /* @__PURE__ */ jsx10(
|
|
4113
4398
|
"div",
|
|
4114
4399
|
{
|
|
4115
4400
|
className: "agg-outcomes flex w-full flex-wrap gap-2 md:w-auto md:shrink-0 md:flex-nowrap",
|
|
@@ -4118,9 +4403,10 @@ var MarketDetailsContent = ({
|
|
|
4118
4403
|
onKeyDown: (eventToHandle) => handleOutcomeKeyDown(eventToHandle),
|
|
4119
4404
|
children: headerOutcomeItems.map((item) => {
|
|
4120
4405
|
const isActiveOutcome = item.id === selectedOutcomeId;
|
|
4121
|
-
return /* @__PURE__ */
|
|
4406
|
+
return /* @__PURE__ */ jsx10(
|
|
4122
4407
|
MarketDetailsOutcomeButton,
|
|
4123
4408
|
{
|
|
4409
|
+
enforceFixedWidth: headerOutcomeVariant != null,
|
|
4124
4410
|
item,
|
|
4125
4411
|
isSelected: isActiveOutcome,
|
|
4126
4412
|
enableAnimations: config.features.enableAnimations,
|
|
@@ -4144,7 +4430,8 @@ var MarketDetailsContent = ({
|
|
|
4144
4430
|
]
|
|
4145
4431
|
}
|
|
4146
4432
|
),
|
|
4147
|
-
/* @__PURE__ */
|
|
4433
|
+
headerAccessory ? /* @__PURE__ */ jsx10("div", { className: "agg-market-card-accessory border-t border-agg-separator", children: headerAccessory }) : null,
|
|
4434
|
+
/* @__PURE__ */ jsx10(
|
|
4148
4435
|
"div",
|
|
4149
4436
|
{
|
|
4150
4437
|
id: detailsContentId,
|
|
@@ -4158,9 +4445,9 @@ var MarketDetailsContent = ({
|
|
|
4158
4445
|
isOpened ? "grid-rows-[1fr] opacity-100" : "pointer-events-none grid-rows-[0fr] opacity-0"
|
|
4159
4446
|
),
|
|
4160
4447
|
"aria-hidden": !isOpened,
|
|
4161
|
-
children: /* @__PURE__ */
|
|
4162
|
-
/* @__PURE__ */
|
|
4163
|
-
/* @__PURE__ */
|
|
4448
|
+
children: /* @__PURE__ */ jsxs8("div", { className: "min-h-0", children: [
|
|
4449
|
+
/* @__PURE__ */ jsx10("div", { className: "h-px w-full bg-agg-separator" }),
|
|
4450
|
+
/* @__PURE__ */ jsxs8(
|
|
4164
4451
|
"div",
|
|
4165
4452
|
{
|
|
4166
4453
|
className: cn(
|
|
@@ -4174,8 +4461,8 @@ var MarketDetailsContent = ({
|
|
|
4174
4461
|
) : "translate-y-5 opacity-0"
|
|
4175
4462
|
),
|
|
4176
4463
|
children: [
|
|
4177
|
-
!isResolvedMarket ? /* @__PURE__ */
|
|
4178
|
-
/* @__PURE__ */
|
|
4464
|
+
!isResolvedMarket ? /* @__PURE__ */ jsxs8(Fragment2, { children: [
|
|
4465
|
+
/* @__PURE__ */ jsx10("div", { className: cn("block", classNames == null ? void 0 : classNames.tabs), children: /* @__PURE__ */ jsx10(
|
|
4179
4466
|
Tabs,
|
|
4180
4467
|
{
|
|
4181
4468
|
ariaLabel: labels.marketDetails.tabsAria,
|
|
@@ -4186,10 +4473,10 @@ var MarketDetailsContent = ({
|
|
|
4186
4473
|
className: "agg-market-tabs w-full px-5"
|
|
4187
4474
|
}
|
|
4188
4475
|
) }),
|
|
4189
|
-
/* @__PURE__ */
|
|
4476
|
+
/* @__PURE__ */ jsx10("div", { className: "h-px w-full bg-agg-separator" })
|
|
4190
4477
|
] }) : null,
|
|
4191
|
-
/* @__PURE__ */
|
|
4192
|
-
effectiveSelectedTab === "order-book" ? /* @__PURE__ */
|
|
4478
|
+
/* @__PURE__ */ jsxs8("div", { className: cn("agg-market-card-body p-0", classNames == null ? void 0 : classNames.content), children: [
|
|
4479
|
+
effectiveSelectedTab === "order-book" ? /* @__PURE__ */ jsx10(
|
|
4193
4480
|
OrderbookWithStates,
|
|
4194
4481
|
{
|
|
4195
4482
|
state: orderbookState,
|
|
@@ -4215,159 +4502,29 @@ var MarketDetailsContent = ({
|
|
|
4215
4502
|
wrapperClassName: classNames == null ? void 0 : classNames.orderBook
|
|
4216
4503
|
}
|
|
4217
4504
|
) : null,
|
|
4218
|
-
effectiveSelectedTab === "graph" ? /* @__PURE__ */
|
|
4219
|
-
|
|
4220
|
-
|
|
4221
|
-
|
|
4222
|
-
|
|
4223
|
-
|
|
4224
|
-
|
|
4225
|
-
|
|
4226
|
-
|
|
4227
|
-
|
|
4228
|
-
|
|
4229
|
-
|
|
4230
|
-
|
|
4231
|
-
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4235
|
-
liveCandle: selectedChartType === "candlestick" ? (_k = graphLiveState.liveCandle) != null ? _k : void 0 : void 0,
|
|
4236
|
-
lineValue: graphLiveState.lineValue,
|
|
4237
|
-
classNames: { root: "agg-chart-region w-full" },
|
|
4238
|
-
showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
|
|
4239
|
-
renderSeriesControls: () => {
|
|
4240
|
-
var _a2, _b2, _c2, _d2;
|
|
4241
|
-
return /* @__PURE__ */ jsxs7("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
|
|
4242
|
-
/* @__PURE__ */ jsx9("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
|
|
4243
|
-
var _a3;
|
|
4244
|
-
const probability = formatProbabilityPercent(
|
|
4245
|
-
(_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
|
|
4246
|
-
formatPercent
|
|
4247
|
-
);
|
|
4248
|
-
const isActiveVenue = selectedGraphVenue === item.venue;
|
|
4249
|
-
return /* @__PURE__ */ jsxs7(
|
|
4250
|
-
"button",
|
|
4251
|
-
{
|
|
4252
|
-
type: "button",
|
|
4253
|
-
"aria-label": `${item.venue} ${probability}`,
|
|
4254
|
-
"aria-pressed": isActiveVenue,
|
|
4255
|
-
className: cn(
|
|
4256
|
-
"agg-market-venue",
|
|
4257
|
-
"cursor-pointer",
|
|
4258
|
-
"inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
|
|
4259
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary-hover",
|
|
4260
|
-
isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
|
|
4261
|
-
),
|
|
4262
|
-
onClick: (e) => {
|
|
4263
|
-
e.preventDefault();
|
|
4264
|
-
e.stopPropagation();
|
|
4265
|
-
handleGraphVenueToggle(item.venue);
|
|
4266
|
-
},
|
|
4267
|
-
children: [
|
|
4268
|
-
/* @__PURE__ */ jsx9(VenueLogo, { venue: item.venue, size: "small" }),
|
|
4269
|
-
/* @__PURE__ */ jsx9("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
|
|
4270
|
-
]
|
|
4271
|
-
},
|
|
4272
|
-
`${item.market.id}-${item.outcome.id}`
|
|
4273
|
-
);
|
|
4274
|
-
}) }),
|
|
4275
|
-
!isOutcomeSelectionLocked ? /* @__PURE__ */ jsx9(
|
|
4276
|
-
SwitchButton,
|
|
4277
|
-
{
|
|
4278
|
-
ariaLabel: labels.marketDetails.outcomeSelectorAria,
|
|
4279
|
-
className: "agg-outcome-switch w-full shrink-0 md:w-fit",
|
|
4280
|
-
value: (_d2 = (_c2 = (_a2 = headerOutcomeItems.find(
|
|
4281
|
-
(outcome) => outcome.label === resolvedChartOutcomeLabel
|
|
4282
|
-
)) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d2 : "",
|
|
4283
|
-
onValueChange: (outcomeId) => {
|
|
4284
|
-
const outcome = headerOutcomeItems.find(
|
|
4285
|
-
(headerOutcomeItem) => headerOutcomeItem.id === outcomeId
|
|
4286
|
-
);
|
|
4287
|
-
if (!outcome) return;
|
|
4288
|
-
setChartOutcomeLabel(outcome.label);
|
|
4289
|
-
},
|
|
4290
|
-
options: headerOutcomeItems.map((outcome) => {
|
|
4291
|
-
var _a3, _b3;
|
|
4292
|
-
const price = outcome.probability;
|
|
4293
|
-
return {
|
|
4294
|
-
value: outcome.id,
|
|
4295
|
-
label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
|
|
4296
|
-
ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
|
|
4297
|
-
};
|
|
4298
|
-
})
|
|
4299
|
-
}
|
|
4300
|
-
) : null
|
|
4301
|
-
] });
|
|
4302
|
-
}
|
|
4303
|
-
}
|
|
4304
|
-
),
|
|
4305
|
-
/* @__PURE__ */ jsxs7(
|
|
4306
|
-
"div",
|
|
4307
|
-
{
|
|
4308
|
-
className: cn(
|
|
4309
|
-
"agg-chart-footer",
|
|
4310
|
-
"flex flex-row justify-between gap-2 text-agg-sm leading-agg-5 text-agg-muted-foreground md:flex-row md:items-center md:justify-between",
|
|
4311
|
-
classNames == null ? void 0 : classNames.footer
|
|
4312
|
-
),
|
|
4313
|
-
children: [
|
|
4314
|
-
/* @__PURE__ */ jsx9("span", { children: typeof model.market.volume !== "number" ? labels.marketDetails.volumeUnavailable : model.market.volume > 0 ? `${config.formatting.formatCompactCurrency(model.market.volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
|
|
4315
|
-
/* @__PURE__ */ jsxs7("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
|
|
4316
|
-
/* @__PURE__ */ jsx9(
|
|
4317
|
-
ChartTypeSwitch,
|
|
4318
|
-
{
|
|
4319
|
-
className: "agg-chart-type-switch shrink-0",
|
|
4320
|
-
value: selectedChartType,
|
|
4321
|
-
onValueChange: setSelectedChartType
|
|
4322
|
-
}
|
|
4323
|
-
),
|
|
4324
|
-
/* @__PURE__ */ jsx9(
|
|
4325
|
-
"span",
|
|
4326
|
-
{
|
|
4327
|
-
"aria-hidden": "true",
|
|
4328
|
-
className: "hidden h-4 w-px bg-agg-separator md:block"
|
|
4329
|
-
}
|
|
4330
|
-
),
|
|
4331
|
-
CHART_TIME_RANGES2.map((timeRange) => {
|
|
4332
|
-
const isActive = effectiveChartTimeRange === timeRange;
|
|
4333
|
-
const isDisabled = isResolvedMarket && timeRange !== "ALL";
|
|
4334
|
-
return /* @__PURE__ */ jsx9(
|
|
4335
|
-
"button",
|
|
4336
|
-
{
|
|
4337
|
-
type: "button",
|
|
4338
|
-
disabled: isDisabled,
|
|
4339
|
-
className: cn(
|
|
4340
|
-
"agg-chart-time-range-trigger",
|
|
4341
|
-
"cursor-pointer text-agg-sm leading-agg-5",
|
|
4342
|
-
isDisabled && "cursor-not-allowed opacity-50",
|
|
4343
|
-
isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
|
|
4344
|
-
),
|
|
4345
|
-
"aria-pressed": isActive,
|
|
4346
|
-
"aria-disabled": isDisabled,
|
|
4347
|
-
onClick: (e) => {
|
|
4348
|
-
e.preventDefault();
|
|
4349
|
-
e.stopPropagation();
|
|
4350
|
-
if (isDisabled) return;
|
|
4351
|
-
setChartRangeOverride(null);
|
|
4352
|
-
setSelectedTimeRange(timeRange);
|
|
4353
|
-
},
|
|
4354
|
-
children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
|
|
4355
|
-
},
|
|
4356
|
-
timeRange
|
|
4357
|
-
);
|
|
4358
|
-
})
|
|
4359
|
-
] })
|
|
4360
|
-
]
|
|
4361
|
-
}
|
|
4362
|
-
)
|
|
4363
|
-
] }) : null,
|
|
4364
|
-
effectiveSelectedTab === "other" ? /* @__PURE__ */ jsx9("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ jsx9("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ jsxs7(
|
|
4505
|
+
isOpened && effectiveSelectedTab === "graph" ? /* @__PURE__ */ jsx10(
|
|
4506
|
+
MarketDetailsGraphPanel,
|
|
4507
|
+
{
|
|
4508
|
+
venueMarkets: model.market.venueMarkets,
|
|
4509
|
+
selectedOutcomeLabel,
|
|
4510
|
+
selectedOutcomeId,
|
|
4511
|
+
livePrices,
|
|
4512
|
+
wsLivePrices,
|
|
4513
|
+
headerOutcomeItems,
|
|
4514
|
+
isResolvedMarket,
|
|
4515
|
+
isOutcomeSelectionLocked,
|
|
4516
|
+
volume: model.market.volume,
|
|
4517
|
+
live,
|
|
4518
|
+
classNames: { graph: classNames == null ? void 0 : classNames.graph, footer: classNames == null ? void 0 : classNames.footer }
|
|
4519
|
+
}
|
|
4520
|
+
) : null,
|
|
4521
|
+
effectiveSelectedTab === "other" ? /* @__PURE__ */ jsx10("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ jsx10("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ jsxs8(
|
|
4365
4522
|
"div",
|
|
4366
4523
|
{
|
|
4367
4524
|
className: "agg-market-meta-row flex items-center justify-between rounded-agg-xl bg-agg-secondary-hover px-4 py-3",
|
|
4368
4525
|
children: [
|
|
4369
|
-
/* @__PURE__ */
|
|
4370
|
-
/* @__PURE__ */
|
|
4526
|
+
/* @__PURE__ */ jsx10(Typography, { variant: "label", className: "text-agg-muted-foreground", children: row.label }),
|
|
4527
|
+
/* @__PURE__ */ jsx10(Typography, { variant: "body", className: "text-right", children: row.value })
|
|
4371
4528
|
]
|
|
4372
4529
|
},
|
|
4373
4530
|
row.label
|
|
@@ -4385,9 +4542,9 @@ var MarketDetailsContent = ({
|
|
|
4385
4542
|
};
|
|
4386
4543
|
var MarketDetails = (_a) => {
|
|
4387
4544
|
var _b = _a, { isOpened } = _b, props = __objRest(_b, ["isOpened"]);
|
|
4388
|
-
const labels =
|
|
4545
|
+
const labels = useLabels7();
|
|
4389
4546
|
if (props.isLoading) {
|
|
4390
|
-
return /* @__PURE__ */
|
|
4547
|
+
return /* @__PURE__ */ jsx10(
|
|
4391
4548
|
Skeleton,
|
|
4392
4549
|
{
|
|
4393
4550
|
view: "market-details-minified",
|
|
@@ -4397,7 +4554,7 @@ var MarketDetails = (_a) => {
|
|
|
4397
4554
|
);
|
|
4398
4555
|
}
|
|
4399
4556
|
if ("venueMarkets" in props && props.venueMarkets) {
|
|
4400
|
-
return /* @__PURE__ */
|
|
4557
|
+
return /* @__PURE__ */ jsx10(
|
|
4401
4558
|
MarketDetailsContent,
|
|
4402
4559
|
__spreadProps(__spreadValues({}, props), {
|
|
4403
4560
|
isOpened,
|
|
@@ -4409,7 +4566,7 @@ var MarketDetails = (_a) => {
|
|
|
4409
4566
|
);
|
|
4410
4567
|
}
|
|
4411
4568
|
const { classNames: fallbackClassNames } = props;
|
|
4412
|
-
return /* @__PURE__ */
|
|
4569
|
+
return /* @__PURE__ */ jsx10(MarketDetailsUnavailableState, { classNames: fallbackClassNames });
|
|
4413
4570
|
};
|
|
4414
4571
|
MarketDetails.displayName = "MarketDetails";
|
|
4415
4572
|
var AFFIRMATIVE_WINNER_LABELS = /* @__PURE__ */ new Set(["yes", "up", "buy", "long", "true"]);
|
|
@@ -4466,11 +4623,11 @@ var MarketDetailsList = ({
|
|
|
4466
4623
|
midpointsResult
|
|
4467
4624
|
}) => {
|
|
4468
4625
|
var _a, _b;
|
|
4469
|
-
const labels =
|
|
4626
|
+
const labels = useLabels7();
|
|
4470
4627
|
const tradingContext = useEventTradingContext2();
|
|
4471
4628
|
const selectedMarketId = (_a = tradingContext == null ? void 0 : tradingContext.selectedMarketId) != null ? _a : null;
|
|
4472
|
-
const [expandedMarketId, setExpandedMarketId] =
|
|
4473
|
-
const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] =
|
|
4629
|
+
const [expandedMarketId, setExpandedMarketId] = useState5(null);
|
|
4630
|
+
const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] = useState5(false);
|
|
4474
4631
|
const resolvedEventId = eventId || "";
|
|
4475
4632
|
const {
|
|
4476
4633
|
markets: rawMarkets,
|
|
@@ -4479,11 +4636,12 @@ var MarketDetailsList = ({
|
|
|
4479
4636
|
} = useVenueMarkets2({
|
|
4480
4637
|
venueEventId: resolvedEventId,
|
|
4481
4638
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
4482
|
-
status: MarketStatus.open
|
|
4483
|
-
sortBy:
|
|
4484
|
-
|
|
4639
|
+
status: MarketStatus.open
|
|
4640
|
+
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
4641
|
+
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
4642
|
+
// markets-under-an-event ordering. Passing sortBy here would override it.
|
|
4485
4643
|
});
|
|
4486
|
-
const sourceMarkets =
|
|
4644
|
+
const sourceMarkets = useMemo7(() => {
|
|
4487
4645
|
var _a2;
|
|
4488
4646
|
if ((_a2 = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _a2.length) {
|
|
4489
4647
|
return eventTradingState.marketStates.map((item) => item.market);
|
|
@@ -4491,10 +4649,10 @@ var MarketDetailsList = ({
|
|
|
4491
4649
|
if (providedMarkets) return providedMarkets;
|
|
4492
4650
|
return rawMarkets;
|
|
4493
4651
|
}, [eventTradingState == null ? void 0 : eventTradingState.marketStates, providedMarkets, rawMarkets]);
|
|
4494
|
-
const isResolvedEvent =
|
|
4652
|
+
const isResolvedEvent = useMemo7(() => {
|
|
4495
4653
|
return resolveIsResolvedEvent(sourceMarkets, eventTradingState);
|
|
4496
4654
|
}, [eventTradingState, sourceMarkets]);
|
|
4497
|
-
const groupedMarkets =
|
|
4655
|
+
const groupedMarkets = useMemo7(() => {
|
|
4498
4656
|
if (sourceMarkets.length === 0) {
|
|
4499
4657
|
return {
|
|
4500
4658
|
primary: [],
|
|
@@ -4534,21 +4692,21 @@ var MarketDetailsList = ({
|
|
|
4534
4692
|
return { primary, upcoming, resolved, closed };
|
|
4535
4693
|
}, [eventTradingState, isResolvedEvent, sourceMarkets]);
|
|
4536
4694
|
const shouldShowResolvedToggle = !isResolvedEvent && groupedMarkets.resolved.length > 0;
|
|
4537
|
-
const visibleResolvedMarkets =
|
|
4695
|
+
const visibleResolvedMarkets = useMemo7(() => {
|
|
4538
4696
|
if (isResolvedEvent || areResolvedMarketsVisible) return groupedMarkets.resolved;
|
|
4539
4697
|
return [];
|
|
4540
4698
|
}, [areResolvedMarketsVisible, groupedMarkets.resolved, isResolvedEvent]);
|
|
4541
|
-
const displayedMarkets =
|
|
4699
|
+
const displayedMarkets = useMemo7(() => {
|
|
4542
4700
|
return [...groupedMarkets.primary, ...visibleResolvedMarkets];
|
|
4543
4701
|
}, [groupedMarkets.primary, visibleResolvedMarkets]);
|
|
4544
4702
|
const hasPrefetchedMarkets = !!providedMarkets || !!((_b = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _b.length);
|
|
4545
|
-
const midpointEligibleMarkets =
|
|
4703
|
+
const midpointEligibleMarkets = useMemo7(() => {
|
|
4546
4704
|
return displayedMarkets.filter(
|
|
4547
4705
|
(market) => resolveMarketTradingState(market).kind !== "resolved"
|
|
4548
4706
|
);
|
|
4549
4707
|
}, [displayedMarkets]);
|
|
4550
4708
|
const { prices: midpointsFallback, venueByOutcomeId: midpointsFallbackVenues } = useViewportMidpoints(midpointEligibleMarkets);
|
|
4551
|
-
|
|
4709
|
+
useEffect5(() => {
|
|
4552
4710
|
if (isResolvedEvent) {
|
|
4553
4711
|
setAreResolvedMarketsVisible(false);
|
|
4554
4712
|
return;
|
|
@@ -4557,7 +4715,7 @@ var MarketDetailsList = ({
|
|
|
4557
4715
|
setAreResolvedMarketsVisible(false);
|
|
4558
4716
|
}
|
|
4559
4717
|
}, [groupedMarkets.resolved.length, isResolvedEvent]);
|
|
4560
|
-
|
|
4718
|
+
useEffect5(() => {
|
|
4561
4719
|
if (displayedMarkets.length === 0) return;
|
|
4562
4720
|
if (selectedMarketId && displayedMarkets.some((market) => market.id === selectedMarketId)) {
|
|
4563
4721
|
return;
|
|
@@ -4574,7 +4732,7 @@ var MarketDetailsList = ({
|
|
|
4574
4732
|
if (!autoSelectFallbackMarket) return;
|
|
4575
4733
|
tradingContext == null ? void 0 : tradingContext.selectMarket(fallbackSelectableMarket.id, fallbackSelectableMarket);
|
|
4576
4734
|
}, [autoSelectFallbackMarket, displayedMarkets, selectedMarketId, sourceMarkets, tradingContext]);
|
|
4577
|
-
|
|
4735
|
+
useEffect5(() => {
|
|
4578
4736
|
if (!expandedMarketId) return;
|
|
4579
4737
|
if (displayedMarkets.some((market) => market.id === expandedMarketId)) return;
|
|
4580
4738
|
setExpandedMarketId(null);
|
|
@@ -4592,7 +4750,7 @@ var MarketDetailsList = ({
|
|
|
4592
4750
|
tradingContext == null ? void 0 : tradingContext.selectMarket(market.id, market);
|
|
4593
4751
|
};
|
|
4594
4752
|
if (!hasPrefetchedMarkets && isLoading) {
|
|
4595
|
-
return /* @__PURE__ */
|
|
4753
|
+
return /* @__PURE__ */ jsx10(
|
|
4596
4754
|
Skeleton,
|
|
4597
4755
|
{
|
|
4598
4756
|
view: "market-details-minified",
|
|
@@ -4602,29 +4760,29 @@ var MarketDetailsList = ({
|
|
|
4602
4760
|
);
|
|
4603
4761
|
}
|
|
4604
4762
|
if (!hasPrefetchedMarkets && error) {
|
|
4605
|
-
return /* @__PURE__ */
|
|
4763
|
+
return /* @__PURE__ */ jsx10(
|
|
4606
4764
|
StateMessage,
|
|
4607
4765
|
{
|
|
4608
4766
|
title: labels.marketDetails.unavailableTitle,
|
|
4609
4767
|
description: labels.marketDetails.unavailableDescription,
|
|
4610
|
-
icon: /* @__PURE__ */
|
|
4768
|
+
icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
|
|
4611
4769
|
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
4612
4770
|
}
|
|
4613
4771
|
);
|
|
4614
4772
|
}
|
|
4615
4773
|
if (displayedMarkets.length === 0 && !shouldShowResolvedToggle) {
|
|
4616
4774
|
const hasSourceMarkets = sourceMarkets.length > 0;
|
|
4617
|
-
return /* @__PURE__ */
|
|
4775
|
+
return /* @__PURE__ */ jsx10(
|
|
4618
4776
|
StateMessage,
|
|
4619
4777
|
{
|
|
4620
4778
|
title: hasSourceMarkets ? isResolvedEvent ? labels.markets.emptyResolved : labels.markets.emptyNoOpen : labels.marketDetails.notFoundTitle,
|
|
4621
4779
|
description: hasSourceMarkets ? void 0 : labels.marketDetails.notFoundDescription,
|
|
4622
|
-
icon: /* @__PURE__ */
|
|
4780
|
+
icon: /* @__PURE__ */ jsx10(SearchEmptyIcon, {}),
|
|
4623
4781
|
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
4624
4782
|
}
|
|
4625
4783
|
);
|
|
4626
4784
|
}
|
|
4627
|
-
const renderMarketCard = (market) => /* @__PURE__ */
|
|
4785
|
+
const renderMarketCard = (market) => /* @__PURE__ */ jsx10("div", { children: /* @__PURE__ */ jsx10(
|
|
4628
4786
|
MarketDetails,
|
|
4629
4787
|
{
|
|
4630
4788
|
marketId: market.id,
|
|
@@ -4651,9 +4809,9 @@ var MarketDetailsList = ({
|
|
|
4651
4809
|
midpointsResult
|
|
4652
4810
|
}
|
|
4653
4811
|
) }, market.id);
|
|
4654
|
-
return /* @__PURE__ */
|
|
4812
|
+
return /* @__PURE__ */ jsxs8("div", { className: cn("agg-market-list flex flex-col gap-3", classNames == null ? void 0 : classNames.root), children: [
|
|
4655
4813
|
groupedMarkets.primary.map((market) => renderMarketCard(market)),
|
|
4656
|
-
shouldShowResolvedToggle ? /* @__PURE__ */
|
|
4814
|
+
shouldShowResolvedToggle ? /* @__PURE__ */ jsx10(
|
|
4657
4815
|
Button,
|
|
4658
4816
|
{
|
|
4659
4817
|
variant: "tertiary",
|
|
@@ -4663,7 +4821,7 @@ var MarketDetailsList = ({
|
|
|
4663
4821
|
setAreResolvedMarketsVisible((isVisible) => !isVisible);
|
|
4664
4822
|
},
|
|
4665
4823
|
"aria-expanded": areResolvedMarketsVisible,
|
|
4666
|
-
suffix: /* @__PURE__ */
|
|
4824
|
+
suffix: /* @__PURE__ */ jsx10(
|
|
4667
4825
|
Icon,
|
|
4668
4826
|
{
|
|
4669
4827
|
name: areResolvedMarketsVisible ? "chevron-up" : "chevron-down",
|
|
@@ -4687,17 +4845,17 @@ import {
|
|
|
4687
4845
|
useAppConfig as useAppConfig2,
|
|
4688
4846
|
useCategories,
|
|
4689
4847
|
useCategoryChildren,
|
|
4690
|
-
useLabels as
|
|
4691
|
-
useSdkUiConfig as
|
|
4848
|
+
useLabels as useLabels9,
|
|
4849
|
+
useSdkUiConfig as useSdkUiConfig5,
|
|
4692
4850
|
useVenueEvents
|
|
4693
4851
|
} from "@agg-build/hooks";
|
|
4694
4852
|
import { VENUES } from "@agg-build/sdk";
|
|
4695
4853
|
import * as Dialog from "@radix-ui/react-dialog";
|
|
4696
|
-
import { useEffect as
|
|
4854
|
+
import { useEffect as useEffect7, useMemo as useMemo10, useRef as useRef7, useState as useState7 } from "react";
|
|
4697
4855
|
|
|
4698
4856
|
// src/events/list/category-sidebar.tsx
|
|
4699
|
-
import { useMemo as
|
|
4700
|
-
import { jsx as
|
|
4857
|
+
import { useMemo as useMemo8 } from "react";
|
|
4858
|
+
import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
4701
4859
|
var rowBase = cn(
|
|
4702
4860
|
"flex min-h-11 w-full items-center gap-3 rounded-[6px] px-3 py-3",
|
|
4703
4861
|
"text-left text-agg-sm font-agg-normal leading-agg-5",
|
|
@@ -4719,7 +4877,7 @@ var CategorySidebar = ({
|
|
|
4719
4877
|
onToggleCategory
|
|
4720
4878
|
}) => {
|
|
4721
4879
|
const isDrilledIn = categoryPath.length > 0;
|
|
4722
|
-
const sortedBaseChildren =
|
|
4880
|
+
const sortedBaseChildren = useMemo8(() => {
|
|
4723
4881
|
var _a;
|
|
4724
4882
|
if (!baseCategoryId) return [];
|
|
4725
4883
|
const children = [...(_a = childrenByParentId.get(baseCategoryId)) != null ? _a : []];
|
|
@@ -4739,7 +4897,7 @@ var CategorySidebar = ({
|
|
|
4739
4897
|
}) => {
|
|
4740
4898
|
var _a, _b;
|
|
4741
4899
|
const hasKnownChildren = ((_b = (_a = childrenByParentId.get(entry.id)) == null ? void 0 : _a.length) != null ? _b : 0) > 0;
|
|
4742
|
-
return /* @__PURE__ */
|
|
4900
|
+
return /* @__PURE__ */ jsxs9(
|
|
4743
4901
|
"button",
|
|
4744
4902
|
{
|
|
4745
4903
|
type: "button",
|
|
@@ -4747,8 +4905,8 @@ var CategorySidebar = ({
|
|
|
4747
4905
|
className: isSelected ? selectedRowClassName : idleRowClassName,
|
|
4748
4906
|
onClick,
|
|
4749
4907
|
children: [
|
|
4750
|
-
/* @__PURE__ */
|
|
4751
|
-
hasKnownChildren ? /* @__PURE__ */
|
|
4908
|
+
/* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 truncate first-letter:uppercase", children: entry.label }),
|
|
4909
|
+
hasKnownChildren ? /* @__PURE__ */ jsx11(
|
|
4752
4910
|
Icon,
|
|
4753
4911
|
{
|
|
4754
4912
|
name: isExpanded ? "chevron-up" : "chevron-down",
|
|
@@ -4756,7 +4914,7 @@ var CategorySidebar = ({
|
|
|
4756
4914
|
color: "currentColor",
|
|
4757
4915
|
className: "shrink-0 text-agg-muted-foreground"
|
|
4758
4916
|
}
|
|
4759
|
-
) : /* @__PURE__ */
|
|
4917
|
+
) : /* @__PURE__ */ jsx11("span", { className: "shrink-0 text-agg-muted-foreground", children: entry.eventCount })
|
|
4760
4918
|
]
|
|
4761
4919
|
},
|
|
4762
4920
|
entry.id
|
|
@@ -4774,27 +4932,27 @@ var CategorySidebar = ({
|
|
|
4774
4932
|
const hasKnownChildren = childCategories.length > 0;
|
|
4775
4933
|
const isExpanded = ((_d = categoryPath[depth]) == null ? void 0 : _d.id) === category.id && !collapsedCategoryIds.has(category.id);
|
|
4776
4934
|
const isSelected = ((_e = categoryPath[depth]) == null ? void 0 : _e.id) === category.id && categoryPath.length === depth + 1;
|
|
4777
|
-
return /* @__PURE__ */
|
|
4935
|
+
return /* @__PURE__ */ jsxs9("div", { className: "flex w-full flex-col", children: [
|
|
4778
4936
|
renderRow({
|
|
4779
4937
|
entry,
|
|
4780
4938
|
isExpanded,
|
|
4781
4939
|
isSelected,
|
|
4782
4940
|
onClick: () => onToggleCategory({ entry, depth, hasKnownChildren, isExpanded, isSelected })
|
|
4783
4941
|
}),
|
|
4784
|
-
/* @__PURE__ */
|
|
4942
|
+
/* @__PURE__ */ jsx11(
|
|
4785
4943
|
"div",
|
|
4786
4944
|
{
|
|
4787
4945
|
className: cn(
|
|
4788
4946
|
"grid transition-[grid-template-rows] duration-150 ease-in-out motion-reduce:transition-none",
|
|
4789
4947
|
isExpanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
4790
4948
|
),
|
|
4791
|
-
children: /* @__PURE__ */
|
|
4949
|
+
children: /* @__PURE__ */ jsx11("div", { className: "overflow-hidden", children: /* @__PURE__ */ jsx11("div", { className: "flex w-full flex-col gap-1 pl-4 pt-1", children: childCategories.map((child) => renderBranch(child, depth + 1)) }) })
|
|
4792
4950
|
}
|
|
4793
4951
|
)
|
|
4794
4952
|
] }, category.id);
|
|
4795
4953
|
};
|
|
4796
|
-
return /* @__PURE__ */
|
|
4797
|
-
/* @__PURE__ */
|
|
4954
|
+
return /* @__PURE__ */ jsxs9("div", { className: "flex w-full flex-col gap-1", children: [
|
|
4955
|
+
/* @__PURE__ */ jsxs9(
|
|
4798
4956
|
"button",
|
|
4799
4957
|
{
|
|
4800
4958
|
type: "button",
|
|
@@ -4802,8 +4960,8 @@ var CategorySidebar = ({
|
|
|
4802
4960
|
className: !isDrilledIn ? selectedRowClassName : idleRowClassName,
|
|
4803
4961
|
onClick: onSelectAll,
|
|
4804
4962
|
children: [
|
|
4805
|
-
/* @__PURE__ */
|
|
4806
|
-
/* @__PURE__ */
|
|
4963
|
+
/* @__PURE__ */ jsx11("span", { className: "min-w-0 flex-1 truncate", children: labels.subcategoriesAll }),
|
|
4964
|
+
/* @__PURE__ */ jsx11("span", { className: "shrink-0 text-agg-muted-foreground", children: totalEventCount })
|
|
4807
4965
|
]
|
|
4808
4966
|
}
|
|
4809
4967
|
),
|
|
@@ -4813,8 +4971,8 @@ var CategorySidebar = ({
|
|
|
4813
4971
|
CategorySidebar.displayName = "CategorySidebar";
|
|
4814
4972
|
|
|
4815
4973
|
// src/events/list/event-list-tabs.tsx
|
|
4816
|
-
import { getVenueAvailabilityState, useAppConfig, useGeoBlock, useLabels as
|
|
4817
|
-
import { useCallback as useCallback3, useEffect as
|
|
4974
|
+
import { getVenueAvailabilityState, useAppConfig, useGeoBlock, useLabels as useLabels8 } from "@agg-build/hooks";
|
|
4975
|
+
import { useCallback as useCallback3, useEffect as useEffect6, useMemo as useMemo9, useRef as useRef6, useState as useState6 } from "react";
|
|
4818
4976
|
|
|
4819
4977
|
// src/events/list/event-list.constants.ts
|
|
4820
4978
|
import { MatchStatus, Venue as Venue2 } from "@agg-build/sdk";
|
|
@@ -4881,16 +5039,16 @@ var getDefaultEventListTabs = (labels) => {
|
|
|
4881
5039
|
};
|
|
4882
5040
|
|
|
4883
5041
|
// src/events/list/event-list-tabs.tsx
|
|
4884
|
-
import { jsx as
|
|
5042
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
4885
5043
|
var renderTabIcon = (tab, isActive) => {
|
|
4886
5044
|
if (tab.iconName === "warning-filled") {
|
|
4887
|
-
return /* @__PURE__ */
|
|
5045
|
+
return /* @__PURE__ */ jsx12(Icon, { name: "warning-filled", size: "small", color: "currentColor" });
|
|
4888
5046
|
}
|
|
4889
5047
|
if (tab.venueLogo) {
|
|
4890
|
-
return /* @__PURE__ */
|
|
5048
|
+
return /* @__PURE__ */ jsx12(VenueLogo, { venue: tab.venueLogo, size: "small" });
|
|
4891
5049
|
}
|
|
4892
5050
|
if (!tab.iconName) return null;
|
|
4893
|
-
return /* @__PURE__ */
|
|
5051
|
+
return /* @__PURE__ */ jsx12(
|
|
4894
5052
|
Icon,
|
|
4895
5053
|
{
|
|
4896
5054
|
name: tab.iconName,
|
|
@@ -4900,10 +5058,10 @@ var renderTabIcon = (tab, isActive) => {
|
|
|
4900
5058
|
);
|
|
4901
5059
|
};
|
|
4902
5060
|
var useEventListTabs = (tabs) => {
|
|
4903
|
-
const labels =
|
|
5061
|
+
const labels = useLabels8();
|
|
4904
5062
|
const { disabledVenues } = useAppConfig();
|
|
4905
5063
|
const { isLocationBlocked } = useGeoBlock();
|
|
4906
|
-
return
|
|
5064
|
+
return useMemo9(() => {
|
|
4907
5065
|
const baseTabs = tabs != null ? tabs : getDefaultEventListTabs(labels);
|
|
4908
5066
|
return baseTabs.flatMap((tab) => {
|
|
4909
5067
|
if (!tab.venueLogo) return [tab];
|
|
@@ -4932,13 +5090,13 @@ var EventListTabs = ({
|
|
|
4932
5090
|
overflowBehavior
|
|
4933
5091
|
}) => {
|
|
4934
5092
|
const resolvedTabs = useEventListTabs(tabs);
|
|
4935
|
-
|
|
5093
|
+
useEffect6(() => {
|
|
4936
5094
|
const fallbackTab = resolvedTabs.find((tab) => !tab.disabled);
|
|
4937
5095
|
if (!fallbackTab) return;
|
|
4938
5096
|
if (resolvedTabs.some((tab) => tab.value === activeTab && !tab.disabled)) return;
|
|
4939
5097
|
onTabChange(fallbackTab.value);
|
|
4940
5098
|
}, [activeTab, onTabChange, resolvedTabs]);
|
|
4941
|
-
const items =
|
|
5099
|
+
const items = useMemo9(() => {
|
|
4942
5100
|
return resolvedTabs.map((tab) => {
|
|
4943
5101
|
const isActive = tab.value === activeTab;
|
|
4944
5102
|
return {
|
|
@@ -4950,7 +5108,7 @@ var EventListTabs = ({
|
|
|
4950
5108
|
};
|
|
4951
5109
|
});
|
|
4952
5110
|
}, [activeTab, resolvedTabs]);
|
|
4953
|
-
return /* @__PURE__ */
|
|
5111
|
+
return /* @__PURE__ */ jsx12(
|
|
4954
5112
|
Tabs,
|
|
4955
5113
|
{
|
|
4956
5114
|
ariaLabel,
|
|
@@ -4967,7 +5125,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
|
|
|
4967
5125
|
const headerRef = useRef6(null);
|
|
4968
5126
|
const titleRef = useRef6(null);
|
|
4969
5127
|
const requiredTabsWidthRef = useRef6(0);
|
|
4970
|
-
const [shouldUseSelectOverflow, setShouldUseSelectOverflow] =
|
|
5128
|
+
const [shouldUseSelectOverflow, setShouldUseSelectOverflow] = useState6(false);
|
|
4971
5129
|
const updateTabsOverflowBehavior = useCallback3(() => {
|
|
4972
5130
|
var _a;
|
|
4973
5131
|
if (typeof window === "undefined") return;
|
|
@@ -5005,10 +5163,10 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
|
|
|
5005
5163
|
if (requiredTabsWidthRef.current <= 0) return;
|
|
5006
5164
|
setShouldUseSelectOverflow(requiredTabsWidthRef.current > availableTabsWidth);
|
|
5007
5165
|
}, [options == null ? void 0 : options.minTabsInlineWidthForSelect, options == null ? void 0 : options.preferSelectOnOverflow]);
|
|
5008
|
-
|
|
5166
|
+
useEffect6(() => {
|
|
5009
5167
|
updateTabsOverflowBehavior();
|
|
5010
5168
|
}, [recomputeOn, updateTabsOverflowBehavior]);
|
|
5011
|
-
|
|
5169
|
+
useEffect6(() => {
|
|
5012
5170
|
if (typeof window === "undefined") return;
|
|
5013
5171
|
const handleResize = () => {
|
|
5014
5172
|
updateTabsOverflowBehavior();
|
|
@@ -5018,7 +5176,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
|
|
|
5018
5176
|
window.removeEventListener("resize", handleResize);
|
|
5019
5177
|
};
|
|
5020
5178
|
}, [updateTabsOverflowBehavior]);
|
|
5021
|
-
|
|
5179
|
+
useEffect6(() => {
|
|
5022
5180
|
if (typeof ResizeObserver === "undefined") return;
|
|
5023
5181
|
const headerElement = headerRef.current;
|
|
5024
5182
|
const titleElement = titleRef.current;
|
|
@@ -5036,7 +5194,7 @@ var useEventListTabsHeaderOverflow = (recomputeOn, options) => {
|
|
|
5036
5194
|
};
|
|
5037
5195
|
|
|
5038
5196
|
// src/events/list/index.tsx
|
|
5039
|
-
import { jsx as
|
|
5197
|
+
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
5040
5198
|
var SORT_ICON_BY_VALUE = {
|
|
5041
5199
|
volume24hr: "sort-volume-24hr",
|
|
5042
5200
|
topArbitrage: "sort-top-arbitrage",
|
|
@@ -5074,45 +5232,45 @@ var EventList = ({
|
|
|
5074
5232
|
stateRef
|
|
5075
5233
|
}) => {
|
|
5076
5234
|
var _a, _b, _c, _d, _e;
|
|
5077
|
-
const labels =
|
|
5235
|
+
const labels = useLabels9();
|
|
5078
5236
|
const { disabledVenues } = useAppConfig2();
|
|
5079
5237
|
const {
|
|
5080
|
-
features: { enableVenueEventDiscoveryFilters }
|
|
5081
|
-
} =
|
|
5238
|
+
features: { enableVenueEventDiscoveryFilters, showSportsMarkets }
|
|
5239
|
+
} = useSdkUiConfig5();
|
|
5082
5240
|
const isDiscoveryFiltersEnabled = enableVenueEventDiscoveryFilters && !search;
|
|
5083
5241
|
const resolvedTabs = useEventListTabs();
|
|
5084
|
-
const visibleVenues =
|
|
5242
|
+
const visibleVenues = useMemo10(
|
|
5085
5243
|
() => disabledVenues.length === 0 ? void 0 : getVisibleVenueIdsByConfig(VENUES, disabledVenues),
|
|
5086
5244
|
[disabledVenues]
|
|
5087
5245
|
);
|
|
5088
|
-
const [activeTabValue, setActiveTabValue] =
|
|
5246
|
+
const [activeTabValue, setActiveTabValue] = useState7(
|
|
5089
5247
|
(_b = initialVenueTab != null ? initialVenueTab : (_a = resolvedTabs[0]) == null ? void 0 : _a.value) != null ? _b : "matched"
|
|
5090
5248
|
);
|
|
5091
|
-
const [selectedSort, setSelectedSort] =
|
|
5092
|
-
const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] =
|
|
5093
|
-
const [categoryPath, setCategoryPath] =
|
|
5094
|
-
const [collapsedCategoryIds, setCollapsedCategoryIds] =
|
|
5095
|
-
const sortItems =
|
|
5249
|
+
const [selectedSort, setSelectedSort] = useState7("volume24hr");
|
|
5250
|
+
const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] = useState7(false);
|
|
5251
|
+
const [categoryPath, setCategoryPath] = useState7([]);
|
|
5252
|
+
const [collapsedCategoryIds, setCollapsedCategoryIds] = useState7(() => /* @__PURE__ */ new Set());
|
|
5253
|
+
const sortItems = useMemo10(() => {
|
|
5096
5254
|
return [
|
|
5097
5255
|
{
|
|
5098
5256
|
value: "volume24hr",
|
|
5099
5257
|
label: labels.eventList.sortBy24hVolume,
|
|
5100
|
-
icon: /* @__PURE__ */
|
|
5258
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.volume24hr, size: "small", color: "currentColor" })
|
|
5101
5259
|
},
|
|
5102
5260
|
{
|
|
5103
5261
|
value: "topArbitrage",
|
|
5104
5262
|
label: labels.eventList.sortByTopArbitrage,
|
|
5105
|
-
icon: /* @__PURE__ */
|
|
5263
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.topArbitrage, size: "small", color: "currentColor" })
|
|
5106
5264
|
},
|
|
5107
5265
|
{
|
|
5108
5266
|
value: "volume",
|
|
5109
5267
|
label: labels.eventList.sortByTotalVolume,
|
|
5110
|
-
icon: /* @__PURE__ */
|
|
5268
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.volume, size: "small", color: "currentColor" })
|
|
5111
5269
|
},
|
|
5112
5270
|
{
|
|
5113
5271
|
value: "endDate",
|
|
5114
5272
|
label: labels.eventList.sortByEndingSoon,
|
|
5115
|
-
icon: /* @__PURE__ */
|
|
5273
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: SORT_ICON_BY_VALUE.endDate, size: "small", color: "currentColor" })
|
|
5116
5274
|
}
|
|
5117
5275
|
];
|
|
5118
5276
|
}, [
|
|
@@ -5122,7 +5280,7 @@ var EventList = ({
|
|
|
5122
5280
|
labels.eventList.sortByTotalVolume
|
|
5123
5281
|
]);
|
|
5124
5282
|
const baseCategoryId = (_c = categoryIds == null ? void 0 : categoryIds[0]) != null ? _c : null;
|
|
5125
|
-
|
|
5283
|
+
useEffect7(() => {
|
|
5126
5284
|
if (!isDiscoveryFiltersEnabled) return;
|
|
5127
5285
|
setCategoryPath([]);
|
|
5128
5286
|
setCollapsedCategoryIds(/* @__PURE__ */ new Set());
|
|
@@ -5132,10 +5290,10 @@ var EventList = ({
|
|
|
5132
5290
|
enabled: isDiscoveryFiltersEnabled,
|
|
5133
5291
|
limit: 100
|
|
5134
5292
|
});
|
|
5135
|
-
const sortedTopLevelCategories =
|
|
5293
|
+
const sortedTopLevelCategories = useMemo10(() => {
|
|
5136
5294
|
return sortCategoriesForNavigation(topLevelCategories);
|
|
5137
5295
|
}, [topLevelCategories]);
|
|
5138
|
-
const baseCategoryChildPrefetchIds =
|
|
5296
|
+
const baseCategoryChildPrefetchIds = useMemo10(() => {
|
|
5139
5297
|
return Array.from(
|
|
5140
5298
|
/* @__PURE__ */ new Set([
|
|
5141
5299
|
...sortedTopLevelCategories.map((category) => category.id),
|
|
@@ -5149,7 +5307,7 @@ var EventList = ({
|
|
|
5149
5307
|
parentIds: baseCategoryChildPrefetchIds,
|
|
5150
5308
|
limit: 100
|
|
5151
5309
|
});
|
|
5152
|
-
const visibleChildPrefetchIds =
|
|
5310
|
+
const visibleChildPrefetchIds = useMemo10(() => {
|
|
5153
5311
|
var _a2, _b2;
|
|
5154
5312
|
const ids = /* @__PURE__ */ new Set();
|
|
5155
5313
|
if (baseCategoryId) {
|
|
@@ -5170,7 +5328,7 @@ var EventList = ({
|
|
|
5170
5328
|
parentIds: visibleChildPrefetchIds,
|
|
5171
5329
|
limit: 100
|
|
5172
5330
|
});
|
|
5173
|
-
const visibleGrandchildPrefetchIds =
|
|
5331
|
+
const visibleGrandchildPrefetchIds = useMemo10(() => {
|
|
5174
5332
|
var _a2;
|
|
5175
5333
|
const ids = /* @__PURE__ */ new Set();
|
|
5176
5334
|
for (const expandedCategory of categoryPath) {
|
|
@@ -5186,7 +5344,7 @@ var EventList = ({
|
|
|
5186
5344
|
parentIds: visibleGrandchildPrefetchIds,
|
|
5187
5345
|
limit: 100
|
|
5188
5346
|
});
|
|
5189
|
-
const childrenByParentId =
|
|
5347
|
+
const childrenByParentId = useMemo10(() => {
|
|
5190
5348
|
return new Map([
|
|
5191
5349
|
...baseChildrenByParentId,
|
|
5192
5350
|
...visibleChildrenByParentId,
|
|
@@ -5194,33 +5352,33 @@ var EventList = ({
|
|
|
5194
5352
|
]);
|
|
5195
5353
|
}, [baseChildrenByParentId, visibleChildrenByParentId, visibleGrandchildrenByParentId]);
|
|
5196
5354
|
const shouldRenderSubcategoryFilters = isDiscoveryFiltersEnabled && baseCategoryId !== null && (((_e = (_d = childrenByParentId.get(baseCategoryId)) == null ? void 0 : _d.length) != null ? _e : 0) > 0 || categoryPath.length > 0);
|
|
5197
|
-
const baseCategoryEventCount =
|
|
5355
|
+
const baseCategoryEventCount = useMemo10(() => {
|
|
5198
5356
|
var _a2, _b2;
|
|
5199
5357
|
return (_b2 = (_a2 = sortedTopLevelCategories.find((c) => c.id === baseCategoryId)) == null ? void 0 : _a2.eventCount) != null ? _b2 : 0;
|
|
5200
5358
|
}, [baseCategoryId, sortedTopLevelCategories]);
|
|
5201
|
-
const resolvedCategoryIds =
|
|
5359
|
+
const resolvedCategoryIds = useMemo10(() => {
|
|
5202
5360
|
if (!isDiscoveryFiltersEnabled) return categoryIds;
|
|
5203
5361
|
return resolveCategoryIdsFromPath(categoryPath, baseCategoryId ? [baseCategoryId] : void 0);
|
|
5204
5362
|
}, [baseCategoryId, categoryIds, categoryPath, isDiscoveryFiltersEnabled]);
|
|
5205
|
-
const sortQueryParams =
|
|
5363
|
+
const sortQueryParams = useMemo10(() => {
|
|
5206
5364
|
return resolveSortQueryParams(selectedSort);
|
|
5207
5365
|
}, [selectedSort]);
|
|
5208
|
-
const activeTab =
|
|
5366
|
+
const activeTab = useMemo10(() => {
|
|
5209
5367
|
return resolvedTabs.find((tab) => tab.value === activeTabValue);
|
|
5210
5368
|
}, [activeTabValue, resolvedTabs]);
|
|
5211
|
-
const venues =
|
|
5369
|
+
const venues = useMemo10(() => {
|
|
5212
5370
|
return resolveTabVenus(activeTab, visibleVenues);
|
|
5213
5371
|
}, [activeTab, visibleVenues]);
|
|
5214
|
-
const matchStatus =
|
|
5372
|
+
const matchStatus = useMemo10(() => {
|
|
5215
5373
|
return activeTabValue === "matched" ? activeTab == null ? void 0 : activeTab.matchStatus : void 0;
|
|
5216
5374
|
}, [activeTabValue, activeTab]);
|
|
5217
|
-
const resolvedMaxVisibleItems =
|
|
5375
|
+
const resolvedMaxVisibleItems = useMemo10(() => {
|
|
5218
5376
|
if (!Number.isFinite(maxVisibleItems)) return void 0;
|
|
5219
5377
|
return Math.max(1, Math.floor(maxVisibleItems));
|
|
5220
5378
|
}, [maxVisibleItems]);
|
|
5221
5379
|
const requestLimit = resolvedMaxVisibleItems != null ? resolvedMaxVisibleItems : limit;
|
|
5222
5380
|
const shouldPaginate = resolvedMaxVisibleItems == null;
|
|
5223
|
-
const endDateFrom =
|
|
5381
|
+
const endDateFrom = useMemo10(() => {
|
|
5224
5382
|
if (search) return void 0;
|
|
5225
5383
|
const BUCKET_MINUTES = 5;
|
|
5226
5384
|
const bucket = /* @__PURE__ */ new Date();
|
|
@@ -5247,23 +5405,27 @@ var EventList = ({
|
|
|
5247
5405
|
sortBy: sortQueryParams.sortBy,
|
|
5248
5406
|
sortDir: sortQueryParams.sortDir,
|
|
5249
5407
|
endDateFrom,
|
|
5408
|
+
// Fold same-venue companion events into one tile per game when the sports
|
|
5409
|
+
// markets experience is enabled (the sports event-detail view loads the
|
|
5410
|
+
// folded companions via aggKey). Gated on the same flag as that view.
|
|
5411
|
+
grouped: showSportsMarkets,
|
|
5250
5412
|
initialPages: initialLoadedPageCount
|
|
5251
5413
|
});
|
|
5252
|
-
|
|
5414
|
+
useEffect7(() => {
|
|
5253
5415
|
if (stateRef) {
|
|
5254
5416
|
stateRef.current = { venueTab: activeTabValue, loadedPageCount };
|
|
5255
5417
|
}
|
|
5256
5418
|
}, [stateRef, activeTabValue, loadedPageCount]);
|
|
5257
|
-
const filteredEvents =
|
|
5419
|
+
const filteredEvents = useMemo10(() => {
|
|
5258
5420
|
return filterEventsByTabValue(events, activeTabValue);
|
|
5259
5421
|
}, [events, activeTabValue]);
|
|
5260
|
-
const groupedEvents =
|
|
5422
|
+
const groupedEvents = useMemo10(() => {
|
|
5261
5423
|
return splitEventsByLifecycle(filteredEvents);
|
|
5262
5424
|
}, [filteredEvents]);
|
|
5263
|
-
const orderedEvents =
|
|
5425
|
+
const orderedEvents = useMemo10(() => {
|
|
5264
5426
|
return groupedEvents.open;
|
|
5265
5427
|
}, [groupedEvents.open]);
|
|
5266
|
-
const tileEvents =
|
|
5428
|
+
const tileEvents = useMemo10(() => {
|
|
5267
5429
|
const normalizedEvents = orderedEvents.map((event) => mapEventToEventListItemEvent(event)).filter((event) => event != null);
|
|
5268
5430
|
if (resolvedMaxVisibleItems == null) return normalizedEvents;
|
|
5269
5431
|
return normalizedEvents.slice(0, resolvedMaxVisibleItems);
|
|
@@ -5272,7 +5434,7 @@ var EventList = ({
|
|
|
5272
5434
|
const shouldRenderEmptyState = !isLoading && !isError && tileEvents.length === 0;
|
|
5273
5435
|
const shouldRenderPaginationLoadingItems = shouldPaginate && hasNextPage;
|
|
5274
5436
|
const loadMoreRef = useRef7(null);
|
|
5275
|
-
|
|
5437
|
+
useEffect7(() => {
|
|
5276
5438
|
if (!shouldPaginate) return;
|
|
5277
5439
|
if (!hasNextPage) return;
|
|
5278
5440
|
if (typeof IntersectionObserver === "undefined") return;
|
|
@@ -5323,7 +5485,7 @@ var EventList = ({
|
|
|
5323
5485
|
onCategoryRootChange == null ? void 0 : onCategoryRootChange(baseCategoryId != null ? baseCategoryId : void 0);
|
|
5324
5486
|
};
|
|
5325
5487
|
if (shouldRenderLoadingState) {
|
|
5326
|
-
return /* @__PURE__ */
|
|
5488
|
+
return /* @__PURE__ */ jsx13(
|
|
5327
5489
|
Skeleton,
|
|
5328
5490
|
{
|
|
5329
5491
|
view: "event-list",
|
|
@@ -5332,8 +5494,8 @@ var EventList = ({
|
|
|
5332
5494
|
}
|
|
5333
5495
|
);
|
|
5334
5496
|
}
|
|
5335
|
-
return /* @__PURE__ */
|
|
5336
|
-
/* @__PURE__ */
|
|
5497
|
+
return /* @__PURE__ */ jsxs10("section", { className: "agg-event-list flex w-full flex-col gap-2 md:gap-5 t", children: [
|
|
5498
|
+
/* @__PURE__ */ jsxs10(
|
|
5337
5499
|
"header",
|
|
5338
5500
|
{
|
|
5339
5501
|
className: cn(
|
|
@@ -5342,9 +5504,9 @@ var EventList = ({
|
|
|
5342
5504
|
"gap-2 sm:flex-row sm:items-center sm:gap-4"
|
|
5343
5505
|
),
|
|
5344
5506
|
children: [
|
|
5345
|
-
/* @__PURE__ */
|
|
5346
|
-
/* @__PURE__ */
|
|
5347
|
-
/* @__PURE__ */
|
|
5507
|
+
/* @__PURE__ */ jsx13("div", { className: "agg-event-list-title min-w-32", children: /* @__PURE__ */ jsx13(Typography, { as: "h2", variant: "title", className: "truncate first-letter:uppercase", children: title }) }),
|
|
5508
|
+
/* @__PURE__ */ jsxs10("div", { className: "hidden min-w-0 max-w-full items-center gap-3 md:flex", children: [
|
|
5509
|
+
/* @__PURE__ */ jsx13(
|
|
5348
5510
|
EventListTabs,
|
|
5349
5511
|
{
|
|
5350
5512
|
ariaLabel: labels.eventList.tabsAria(title),
|
|
@@ -5354,7 +5516,7 @@ var EventList = ({
|
|
|
5354
5516
|
overflowBehavior: "scroll"
|
|
5355
5517
|
}
|
|
5356
5518
|
),
|
|
5357
|
-
/* @__PURE__ */
|
|
5519
|
+
/* @__PURE__ */ jsx13(
|
|
5358
5520
|
Select,
|
|
5359
5521
|
{
|
|
5360
5522
|
ariaLabel: labels.eventList.sortByLabel,
|
|
@@ -5370,8 +5532,8 @@ var EventList = ({
|
|
|
5370
5532
|
]
|
|
5371
5533
|
}
|
|
5372
5534
|
),
|
|
5373
|
-
/* @__PURE__ */
|
|
5374
|
-
/* @__PURE__ */
|
|
5535
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex w-full gap-2 md:hidden mb-3", children: [
|
|
5536
|
+
/* @__PURE__ */ jsx13(
|
|
5375
5537
|
EventListTabs,
|
|
5376
5538
|
{
|
|
5377
5539
|
ariaLabel: labels.eventList.tabsAria(title),
|
|
@@ -5381,7 +5543,7 @@ var EventList = ({
|
|
|
5381
5543
|
overflowBehavior: "select"
|
|
5382
5544
|
}
|
|
5383
5545
|
),
|
|
5384
|
-
/* @__PURE__ */
|
|
5546
|
+
/* @__PURE__ */ jsx13(
|
|
5385
5547
|
Select,
|
|
5386
5548
|
{
|
|
5387
5549
|
ariaLabel: labels.eventList.sortByLabel,
|
|
@@ -5392,23 +5554,23 @@ var EventList = ({
|
|
|
5392
5554
|
contentClassName: "rounded-[12px] py-2 shadow-[0_8px_16px_rgba(0,0,0,0.1)]"
|
|
5393
5555
|
}
|
|
5394
5556
|
),
|
|
5395
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */
|
|
5557
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13(
|
|
5396
5558
|
"button",
|
|
5397
5559
|
{
|
|
5398
5560
|
type: "button",
|
|
5399
5561
|
className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-[8px] border-2 border-agg-primary bg-agg-secondary text-agg-foreground cursor-pointer",
|
|
5400
5562
|
"aria-label": labels.eventList.subcategoriesOpenAria,
|
|
5401
5563
|
onClick: () => setIsSubcategoriesModalOpen(true),
|
|
5402
|
-
children: /* @__PURE__ */
|
|
5564
|
+
children: /* @__PURE__ */ jsx13(Icon, { name: "apps", size: "small", color: "currentColor" })
|
|
5403
5565
|
}
|
|
5404
5566
|
) : null
|
|
5405
5567
|
] }),
|
|
5406
|
-
/* @__PURE__ */
|
|
5568
|
+
/* @__PURE__ */ jsxs10(
|
|
5407
5569
|
"div",
|
|
5408
5570
|
{
|
|
5409
5571
|
className: cn("flex w-full gap-6", shouldRenderSubcategoryFilters ? "md:items-start" : ""),
|
|
5410
5572
|
children: [
|
|
5411
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */
|
|
5573
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13("aside", { className: "hidden w-[200px] shrink-0 md:block self-start sticky top-4", children: /* @__PURE__ */ jsx13("div", { className: "agg-sidebar max-h-[calc(100vh-19rem)] overflow-y-auto rounded-[8px] border border-agg-separator bg-agg-secondary p-2", children: /* @__PURE__ */ jsx13(
|
|
5412
5574
|
CategorySidebar,
|
|
5413
5575
|
{
|
|
5414
5576
|
baseCategoryId,
|
|
@@ -5421,7 +5583,7 @@ var EventList = ({
|
|
|
5421
5583
|
onToggleCategory: handleToggleSubcategory
|
|
5422
5584
|
}
|
|
5423
5585
|
) }) }) : null,
|
|
5424
|
-
/* @__PURE__ */
|
|
5586
|
+
/* @__PURE__ */ jsxs10(
|
|
5425
5587
|
"div",
|
|
5426
5588
|
{
|
|
5427
5589
|
className: cn(
|
|
@@ -5432,7 +5594,7 @@ var EventList = ({
|
|
|
5432
5594
|
gridClassName
|
|
5433
5595
|
),
|
|
5434
5596
|
children: [
|
|
5435
|
-
tileEvents.map((event) => /* @__PURE__ */
|
|
5597
|
+
tileEvents.map((event) => /* @__PURE__ */ jsx13(
|
|
5436
5598
|
EventListItem,
|
|
5437
5599
|
{
|
|
5438
5600
|
event,
|
|
@@ -5447,7 +5609,7 @@ var EventList = ({
|
|
|
5447
5609
|
},
|
|
5448
5610
|
event.id
|
|
5449
5611
|
)),
|
|
5450
|
-
shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */
|
|
5612
|
+
shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ jsx13(
|
|
5451
5613
|
EventListItem,
|
|
5452
5614
|
{
|
|
5453
5615
|
isLoading: true,
|
|
@@ -5457,20 +5619,20 @@ var EventList = ({
|
|
|
5457
5619
|
},
|
|
5458
5620
|
`loading-${index}`
|
|
5459
5621
|
)) : null,
|
|
5460
|
-
shouldRenderEmptyState ? /* @__PURE__ */
|
|
5622
|
+
shouldRenderEmptyState ? /* @__PURE__ */ jsx13("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx13(
|
|
5461
5623
|
StateMessage,
|
|
5462
5624
|
{
|
|
5463
5625
|
title: labels.eventList.emptyTitle,
|
|
5464
5626
|
description: labels.eventList.emptyDescription,
|
|
5465
|
-
icon: /* @__PURE__ */
|
|
5627
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: "search-empty" })
|
|
5466
5628
|
}
|
|
5467
5629
|
) }) : null,
|
|
5468
|
-
isError ? /* @__PURE__ */
|
|
5630
|
+
isError ? /* @__PURE__ */ jsx13("div", { className: "col-span-full w-full", children: /* @__PURE__ */ jsx13(
|
|
5469
5631
|
StateMessage,
|
|
5470
5632
|
{
|
|
5471
5633
|
title: labels.eventList.errorTitle,
|
|
5472
5634
|
description: labels.eventList.errorDescription,
|
|
5473
|
-
icon: /* @__PURE__ */
|
|
5635
|
+
icon: /* @__PURE__ */ jsx13(Icon, { name: "warning" })
|
|
5474
5636
|
}
|
|
5475
5637
|
) }) : null
|
|
5476
5638
|
]
|
|
@@ -5479,7 +5641,7 @@ var EventList = ({
|
|
|
5479
5641
|
]
|
|
5480
5642
|
}
|
|
5481
5643
|
),
|
|
5482
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */
|
|
5644
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ jsx13(Modal, { open: isSubcategoriesModalOpen, onOpenChange: setIsSubcategoriesModalOpen, children: /* @__PURE__ */ jsx13(
|
|
5483
5645
|
Modal.Container,
|
|
5484
5646
|
{
|
|
5485
5647
|
classNames: {
|
|
@@ -5488,20 +5650,20 @@ var EventList = ({
|
|
|
5488
5650
|
content: "items-end p-0 pointer-events-none",
|
|
5489
5651
|
container: "w-full max-w-none border-0 bg-transparent shadow-none"
|
|
5490
5652
|
},
|
|
5491
|
-
children: /* @__PURE__ */
|
|
5492
|
-
/* @__PURE__ */
|
|
5493
|
-
/* @__PURE__ */
|
|
5494
|
-
/* @__PURE__ */
|
|
5495
|
-
/* @__PURE__ */
|
|
5653
|
+
children: /* @__PURE__ */ jsxs10("div", { className: "pointer-events-auto w-full rounded-t-[12px] border border-agg-separator bg-agg-secondary", children: [
|
|
5654
|
+
/* @__PURE__ */ jsx13("div", { className: "flex justify-center pb-1 pt-3", "aria-hidden": "true", children: /* @__PURE__ */ jsx13("div", { className: "h-1 w-10 rounded-full bg-agg-muted-foreground/30" }) }),
|
|
5655
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between px-4 pb-2 pt-1", children: [
|
|
5656
|
+
/* @__PURE__ */ jsx13(Dialog.Title, { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: labels.eventList.subcategoriesLabel }),
|
|
5657
|
+
/* @__PURE__ */ jsx13(
|
|
5496
5658
|
Dialog.Close,
|
|
5497
5659
|
{
|
|
5498
5660
|
className: "flex cursor-pointer items-center justify-center rounded-full p-1 text-agg-muted-foreground hover:bg-agg-secondary-hover",
|
|
5499
5661
|
"aria-label": labels.common.close,
|
|
5500
|
-
children: /* @__PURE__ */
|
|
5662
|
+
children: /* @__PURE__ */ jsx13(CloseIcon, { className: "h-5 w-5" })
|
|
5501
5663
|
}
|
|
5502
5664
|
)
|
|
5503
5665
|
] }),
|
|
5504
|
-
/* @__PURE__ */
|
|
5666
|
+
/* @__PURE__ */ jsx13("div", { className: "flex flex-col gap-1 px-4 pb-4", children: /* @__PURE__ */ jsx13(
|
|
5505
5667
|
CategorySidebar,
|
|
5506
5668
|
{
|
|
5507
5669
|
baseCategoryId,
|
|
@@ -5517,7 +5679,7 @@ var EventList = ({
|
|
|
5517
5679
|
] })
|
|
5518
5680
|
}
|
|
5519
5681
|
) }) : null,
|
|
5520
|
-
shouldPaginate && hasNextPage ? /* @__PURE__ */
|
|
5682
|
+
shouldPaginate && hasNextPage ? /* @__PURE__ */ jsx13("div", { ref: loadMoreRef, className: "agg-event-list-sentinel h-px w-full", "aria-hidden": true }) : null
|
|
5521
5683
|
] });
|
|
5522
5684
|
};
|
|
5523
5685
|
EventList.displayName = "EventList";
|
|
@@ -5530,6 +5692,7 @@ export {
|
|
|
5530
5692
|
collectEligibleVenueOutcomeIds,
|
|
5531
5693
|
mergeVenueOutcomeOrderbooks,
|
|
5532
5694
|
SettlementSummary,
|
|
5695
|
+
resolveEventDetailsSyncKey,
|
|
5533
5696
|
EventListItemDetails,
|
|
5534
5697
|
orderbookRowLimitDefault,
|
|
5535
5698
|
useCenterOrderbookSpread,
|