@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
package/dist/events.js
CHANGED
|
@@ -74,6 +74,7 @@ __export(events_exports, {
|
|
|
74
74
|
formatProbabilityCents: () => formatProbabilityCents,
|
|
75
75
|
mergeVenueOutcomeOrderbooks: () => mergeVenueOutcomeOrderbooks,
|
|
76
76
|
orderbookRowLimitDefault: () => orderbookRowLimitDefault,
|
|
77
|
+
resolveEventDetailsSyncKey: () => resolveEventDetailsSyncKey,
|
|
77
78
|
resolveOrderBookRows: () => resolveOrderBookRows,
|
|
78
79
|
resolveUnifiedOrderBookEntries: () => resolveUnifiedOrderBookEntries,
|
|
79
80
|
useCenterOrderbookSpread: () => useCenterOrderbookSpread
|
|
@@ -5491,6 +5492,62 @@ var VenueLogo = ({
|
|
|
5491
5492
|
};
|
|
5492
5493
|
VenueLogo.displayName = "VenueLogo";
|
|
5493
5494
|
|
|
5495
|
+
// src/events/shared/format-sports-event-time.ts
|
|
5496
|
+
var import_dayjs2 = __toESM(require("dayjs"));
|
|
5497
|
+
var import_timezone = __toESM(require("dayjs/plugin/timezone"));
|
|
5498
|
+
var import_utc = __toESM(require("dayjs/plugin/utc"));
|
|
5499
|
+
import_dayjs2.default.extend(import_utc.default);
|
|
5500
|
+
import_dayjs2.default.extend(import_timezone.default);
|
|
5501
|
+
var SPORTS_EVENT_TIMEZONE = "America/New_York";
|
|
5502
|
+
var SPORTS_EVENT_TIME_FORMAT = "MMM D, h:mm A";
|
|
5503
|
+
var formatSportsEventTimeEt = (value) => {
|
|
5504
|
+
const resolvedValue = value.trim();
|
|
5505
|
+
if (!resolvedValue) return null;
|
|
5506
|
+
const parsedValue = import_dayjs2.default.utc(resolvedValue);
|
|
5507
|
+
if (!parsedValue.isValid()) return null;
|
|
5508
|
+
return `${parsedValue.tz(SPORTS_EVENT_TIMEZONE).format(SPORTS_EVENT_TIME_FORMAT)} ET`;
|
|
5509
|
+
};
|
|
5510
|
+
|
|
5511
|
+
// src/events/shared/format-event-title.ts
|
|
5512
|
+
var SPORT_CATEGORY_TOKENS = /* @__PURE__ */ new Set(["sport", "sports"]);
|
|
5513
|
+
var normalizeCategoryToken = (value) => {
|
|
5514
|
+
if (typeof value !== "string") return null;
|
|
5515
|
+
const normalizedValue = value.trim().toLowerCase();
|
|
5516
|
+
if (!normalizedValue) return null;
|
|
5517
|
+
return normalizedValue;
|
|
5518
|
+
};
|
|
5519
|
+
var isSportCategoryToken = (value) => {
|
|
5520
|
+
const normalizedValue = normalizeCategoryToken(value);
|
|
5521
|
+
if (!normalizedValue) return false;
|
|
5522
|
+
return SPORT_CATEGORY_TOKENS.has(normalizedValue);
|
|
5523
|
+
};
|
|
5524
|
+
var isSportEvent = (categories, structureType) => {
|
|
5525
|
+
var _a;
|
|
5526
|
+
if (isSportCategoryToken(structureType)) return true;
|
|
5527
|
+
return (_a = categories == null ? void 0 : categories.some((categoryEntry) => {
|
|
5528
|
+
var _a2, _b, _c, _d;
|
|
5529
|
+
return isSportCategoryToken(categoryEntry.id) || isSportCategoryToken((_a2 = categoryEntry.category) == null ? void 0 : _a2.id) || isSportCategoryToken((_b = categoryEntry.category) == null ? void 0 : _b.name) || isSportCategoryToken((_c = categoryEntry.category) == null ? void 0 : _c.displayName) || isSportCategoryToken((_d = categoryEntry.category) == null ? void 0 : _d.parentId);
|
|
5530
|
+
})) != null ? _a : false;
|
|
5531
|
+
};
|
|
5532
|
+
var formatEventTitleWithDateSuffix = ({
|
|
5533
|
+
title: title2,
|
|
5534
|
+
categories,
|
|
5535
|
+
structureType,
|
|
5536
|
+
gameStartTime,
|
|
5537
|
+
endDate
|
|
5538
|
+
}) => {
|
|
5539
|
+
const resolvedTitle = title2.trim();
|
|
5540
|
+
if (!resolvedTitle) return resolvedTitle;
|
|
5541
|
+
if (!isSportEvent(categories, structureType)) return resolvedTitle;
|
|
5542
|
+
const dateSource = gameStartTime != null ? gameStartTime : endDate;
|
|
5543
|
+
if (!dateSource) return resolvedTitle;
|
|
5544
|
+
const formattedDate = formatSportsEventTimeEt(dateSource);
|
|
5545
|
+
if (!formattedDate) return resolvedTitle;
|
|
5546
|
+
const suffix = ` - ${formattedDate}`;
|
|
5547
|
+
if (resolvedTitle.endsWith(suffix)) return resolvedTitle;
|
|
5548
|
+
return `${resolvedTitle}${suffix}`;
|
|
5549
|
+
};
|
|
5550
|
+
|
|
5494
5551
|
// src/events/item/event-list-item.utils.ts
|
|
5495
5552
|
var import_hooks25 = require("@agg-build/hooks");
|
|
5496
5553
|
|
|
@@ -5709,18 +5766,9 @@ var selectPrimaryVenueMarket = (venueMarkets) => {
|
|
|
5709
5766
|
return bVolume - aVolume;
|
|
5710
5767
|
})[0];
|
|
5711
5768
|
};
|
|
5712
|
-
var getVenueSummary = (venueMarkets
|
|
5769
|
+
var getVenueSummary = (venueMarkets) => {
|
|
5713
5770
|
const normalizedVenueMarkets = normalizeVenueMarketCluster(venueMarkets);
|
|
5714
|
-
const
|
|
5715
|
-
const isVenueTradable = (venue) => {
|
|
5716
|
-
if (tradableVenues == null) return true;
|
|
5717
|
-
return tradableVenues.has(venue);
|
|
5718
|
-
};
|
|
5719
|
-
const uniqueVenues = Array.from(
|
|
5720
|
-
new Set(
|
|
5721
|
-
normalizedVenueMarkets.filter((market) => isVenueTradable(market.venue)).map((market) => market.venue)
|
|
5722
|
-
)
|
|
5723
|
-
);
|
|
5771
|
+
const uniqueVenues = Array.from(new Set(normalizedVenueMarkets.map((market) => market.venue)));
|
|
5724
5772
|
return {
|
|
5725
5773
|
marketCount: normalizedVenueMarkets.length,
|
|
5726
5774
|
venueCount: uniqueVenues.length,
|
|
@@ -6147,7 +6195,7 @@ var Select = ({
|
|
|
6147
6195
|
disabled: item.disabled,
|
|
6148
6196
|
className: cn(
|
|
6149
6197
|
"agg-select-item",
|
|
6150
|
-
"relative flex w-full items-center gap-3 rounded-[6px]
|
|
6198
|
+
"relative flex w-full items-center gap-3 rounded-[6px] pl-3 pr-5 py-3 text-left text-agg-sm leading-agg-5 outline-none",
|
|
6151
6199
|
"hover:bg-agg-secondary-hover focus-visible:bg-agg-secondary-hover",
|
|
6152
6200
|
isSelected ? "bg-agg-primary/10 font-agg-normal text-agg-primary" : "font-agg-normal text-agg-foreground",
|
|
6153
6201
|
item.disabled && "cursor-not-allowed opacity-60",
|
|
@@ -6332,13 +6380,20 @@ var resolveStateMessageHasAction = ({ onAction }) => {
|
|
|
6332
6380
|
|
|
6333
6381
|
// src/primitives/state-message/index.tsx
|
|
6334
6382
|
var import_jsx_runtime116 = require("react/jsx-runtime");
|
|
6335
|
-
var StateMessage = ({
|
|
6336
|
-
|
|
6337
|
-
|
|
6338
|
-
|
|
6339
|
-
|
|
6340
|
-
|
|
6341
|
-
|
|
6383
|
+
var StateMessage = (_a) => {
|
|
6384
|
+
var _b = _a, {
|
|
6385
|
+
icon,
|
|
6386
|
+
title: title2,
|
|
6387
|
+
description,
|
|
6388
|
+
onAction,
|
|
6389
|
+
classNames
|
|
6390
|
+
} = _b, rest = __objRest(_b, [
|
|
6391
|
+
"icon",
|
|
6392
|
+
"title",
|
|
6393
|
+
"description",
|
|
6394
|
+
"onAction",
|
|
6395
|
+
"classNames"
|
|
6396
|
+
]);
|
|
6342
6397
|
const labels = (0, import_hooks28.useLabels)();
|
|
6343
6398
|
const hasAction = resolveStateMessageHasAction({ onAction });
|
|
6344
6399
|
const resolvedIcon = (0, import_react6.cloneElement)(icon, {
|
|
@@ -6347,7 +6402,7 @@ var StateMessage = ({
|
|
|
6347
6402
|
});
|
|
6348
6403
|
return /* @__PURE__ */ (0, import_jsx_runtime116.jsx)(
|
|
6349
6404
|
"div",
|
|
6350
|
-
{
|
|
6405
|
+
__spreadProps(__spreadValues({}, rest), {
|
|
6351
6406
|
className: cn(
|
|
6352
6407
|
"agg-state-message",
|
|
6353
6408
|
"flex min-h-[240px] w-full flex-col items-center justify-center px-5 py-10 text-center md:px-10",
|
|
@@ -6406,7 +6461,7 @@ var StateMessage = ({
|
|
|
6406
6461
|
]
|
|
6407
6462
|
}
|
|
6408
6463
|
)
|
|
6409
|
-
}
|
|
6464
|
+
})
|
|
6410
6465
|
);
|
|
6411
6466
|
};
|
|
6412
6467
|
StateMessage.displayName = "StateMessage";
|
|
@@ -7250,7 +7305,7 @@ var normalizeEventListItemV2Comparison = ({
|
|
|
7250
7305
|
return __spreadProps(__spreadValues({}, row), {
|
|
7251
7306
|
prices
|
|
7252
7307
|
});
|
|
7253
|
-
});
|
|
7308
|
+
}).filter((row) => row.prices.length === 0 || row.prices.some((price) => price.price > 0));
|
|
7254
7309
|
const matchedVenues = collectMatchedVenues(rows);
|
|
7255
7310
|
return {
|
|
7256
7311
|
rows,
|
|
@@ -7371,7 +7426,13 @@ var EventListItemContent = ({
|
|
|
7371
7426
|
const config = (0, import_hooks31.useSdkUiConfig)();
|
|
7372
7427
|
const labels = (0, import_hooks31.useLabels)();
|
|
7373
7428
|
const allVenueMarkets = (0, import_react10.useMemo)(() => event.venueMarkets, [event.venueMarkets]);
|
|
7374
|
-
const resolvedTitle =
|
|
7429
|
+
const resolvedTitle = formatEventTitleWithDateSuffix({
|
|
7430
|
+
title: event.title,
|
|
7431
|
+
categories: event.categories,
|
|
7432
|
+
structureType: event.structureType,
|
|
7433
|
+
gameStartTime: event.gameStartTime,
|
|
7434
|
+
endDate: event.endDate
|
|
7435
|
+
});
|
|
7375
7436
|
const resolvedImage = event.image;
|
|
7376
7437
|
const visibleVenueLogos = (0, import_react10.useMemo)(() => {
|
|
7377
7438
|
var _a2;
|
|
@@ -7397,8 +7458,10 @@ var EventListItemContent = ({
|
|
|
7397
7458
|
} = (0, import_hooks31.useVenueMarkets)({
|
|
7398
7459
|
venueEventId: event.id,
|
|
7399
7460
|
enabled: shouldEnableLazyMarketLoading && isLazyMarketsQueryEnabled,
|
|
7400
|
-
|
|
7401
|
-
|
|
7461
|
+
// List/tile surface: axis/dates sort by volume so the scroll tail matches
|
|
7462
|
+
// the volume-sorted top-3 (the detail page omits context and keeps the
|
|
7463
|
+
// structured threshold/date order).
|
|
7464
|
+
context: "list",
|
|
7402
7465
|
status: marketStatus
|
|
7403
7466
|
});
|
|
7404
7467
|
const resolvedOutcomeMarkets = (0, import_react10.useMemo)(() => {
|
|
@@ -7984,10 +8047,10 @@ var import_hooks33 = require("@agg-build/hooks");
|
|
|
7984
8047
|
|
|
7985
8048
|
// src/events/market-details/market-details.utils.ts
|
|
7986
8049
|
var import_sdk12 = require("@agg-build/sdk");
|
|
7987
|
-
var
|
|
8050
|
+
var import_dayjs4 = __toESM(require("dayjs"));
|
|
7988
8051
|
|
|
7989
8052
|
// src/events/item-details/event-list-item-details.utils.ts
|
|
7990
|
-
var
|
|
8053
|
+
var import_dayjs3 = __toESM(require("dayjs"));
|
|
7991
8054
|
var compareOutcomeSelectorLabels = (leftLabel, rightLabel) => {
|
|
7992
8055
|
const leftSemanticLabel = toSemanticLabel(leftLabel);
|
|
7993
8056
|
const rightSemanticLabel = toSemanticLabel(rightLabel);
|
|
@@ -8000,8 +8063,8 @@ var compareOutcomeSelectorLabels = (leftLabel, rightLabel) => {
|
|
|
8000
8063
|
if (leftBinaryOrder != null && rightBinaryOrder != null) {
|
|
8001
8064
|
return leftBinaryOrder - rightBinaryOrder;
|
|
8002
8065
|
}
|
|
8003
|
-
const leftDate = isDateLikeLabel(leftLabel) ? (0,
|
|
8004
|
-
const rightDate = isDateLikeLabel(rightLabel) ? (0,
|
|
8066
|
+
const leftDate = isDateLikeLabel(leftLabel) ? (0, import_dayjs3.default)(leftLabel).valueOf() : null;
|
|
8067
|
+
const rightDate = isDateLikeLabel(rightLabel) ? (0, import_dayjs3.default)(rightLabel).valueOf() : null;
|
|
8005
8068
|
if (leftDate != null && rightDate != null && leftDate !== rightDate) {
|
|
8006
8069
|
return leftDate - rightDate;
|
|
8007
8070
|
}
|
|
@@ -8042,7 +8105,7 @@ var toSemanticLabel = (value) => {
|
|
|
8042
8105
|
};
|
|
8043
8106
|
var isDateLikeLabel = (value) => {
|
|
8044
8107
|
if (!value.trim()) return false;
|
|
8045
|
-
return (0,
|
|
8108
|
+
return (0, import_dayjs3.default)(value).isValid();
|
|
8046
8109
|
};
|
|
8047
8110
|
var matchOutcomeByLabel = (outcome, selectedOutcomeLabel) => {
|
|
8048
8111
|
const normalizedSelectedLabel = normalizeLabel(selectedOutcomeLabel);
|
|
@@ -8410,6 +8473,42 @@ var resolveDisplayOutcomeLabels = (labels) => {
|
|
|
8410
8473
|
(label2) => labels.some((value) => normalizeLabel2(value) === normalizeLabel2(label2))
|
|
8411
8474
|
);
|
|
8412
8475
|
};
|
|
8476
|
+
var TRAILING_LINE_VALUE_PATTERN = /^(.*?)(\s+[+-]?\d+(?:\.\d+)?)$/;
|
|
8477
|
+
var resolveLineOutcomeDisplayParts = (label2, title2) => {
|
|
8478
|
+
var _a, _b;
|
|
8479
|
+
const sourceText = (title2 == null ? void 0 : title2.trim()) || label2.trim();
|
|
8480
|
+
const match = TRAILING_LINE_VALUE_PATTERN.exec(sourceText);
|
|
8481
|
+
if (!match) {
|
|
8482
|
+
return {
|
|
8483
|
+
title: (title2 == null ? void 0 : title2.trim()) || null,
|
|
8484
|
+
lineLabel: null
|
|
8485
|
+
};
|
|
8486
|
+
}
|
|
8487
|
+
const baseTitle = ((_a = match[1]) == null ? void 0 : _a.trim()) || null;
|
|
8488
|
+
const lineLabel = ((_b = match[2]) == null ? void 0 : _b.trim()) || null;
|
|
8489
|
+
return {
|
|
8490
|
+
title: baseTitle,
|
|
8491
|
+
lineLabel
|
|
8492
|
+
};
|
|
8493
|
+
};
|
|
8494
|
+
var formatScopedLineValue = (value) => {
|
|
8495
|
+
return Number.isInteger(value) ? String(value) : value.toFixed(1);
|
|
8496
|
+
};
|
|
8497
|
+
var resolveScopedMarketLineLabel = ({
|
|
8498
|
+
outcomeIndex,
|
|
8499
|
+
scopedMarket
|
|
8500
|
+
}) => {
|
|
8501
|
+
var _a;
|
|
8502
|
+
const lineValue = scopedMarket == null ? void 0 : scopedMarket.lineValue;
|
|
8503
|
+
if (lineValue == null) return null;
|
|
8504
|
+
const sportsMarketType = normalizeLabel2((_a = scopedMarket == null ? void 0 : scopedMarket.sportsMarketType) != null ? _a : "");
|
|
8505
|
+
if (sportsMarketType === "spread") {
|
|
8506
|
+
const directionalLineValue = outcomeIndex === 0 ? lineValue : lineValue * -1;
|
|
8507
|
+
const prefix = directionalLineValue > 0 ? "+" : "";
|
|
8508
|
+
return `${prefix}${formatScopedLineValue(directionalLineValue)}`;
|
|
8509
|
+
}
|
|
8510
|
+
return formatScopedLineValue(lineValue);
|
|
8511
|
+
};
|
|
8413
8512
|
var resolveMarketDetailsOutcomeLabels = (venueMarkets) => {
|
|
8414
8513
|
var _a;
|
|
8415
8514
|
const primaryMarket = selectPrimaryVenueMarket(venueMarkets);
|
|
@@ -8462,12 +8561,12 @@ var resolveScopedSelectedOutcome = ({
|
|
|
8462
8561
|
outcomeLabel: matchingOutcome.label
|
|
8463
8562
|
};
|
|
8464
8563
|
}
|
|
8465
|
-
|
|
8466
|
-
|
|
8467
|
-
|
|
8468
|
-
|
|
8469
|
-
|
|
8470
|
-
}
|
|
8564
|
+
}
|
|
8565
|
+
if (suppressFallbackWhenSelectedOutcomeOutOfScope) {
|
|
8566
|
+
return {
|
|
8567
|
+
outcomeId: null,
|
|
8568
|
+
outcomeLabel: void 0
|
|
8569
|
+
};
|
|
8471
8570
|
}
|
|
8472
8571
|
const outcomeLabels = resolveDisplayOutcomeLabels(
|
|
8473
8572
|
resolveMarketDetailsOutcomeLabels(venueMarkets).map((outcome) => outcome.label)
|
|
@@ -8505,28 +8604,36 @@ var resolveOutcomeTone = (label2, index) => {
|
|
|
8505
8604
|
}
|
|
8506
8605
|
return index === 0 ? "positive" : "negative";
|
|
8507
8606
|
};
|
|
8508
|
-
var resolveHeaderOutcomeItems = (venueMarkets, scopedMarket) => {
|
|
8607
|
+
var resolveHeaderOutcomeItems = (venueMarkets, scopedMarket, variant) => {
|
|
8509
8608
|
const outcomes = resolveMarketDetailsOutcomeLabels(venueMarkets);
|
|
8510
8609
|
const labels = resolveDisplayOutcomeLabels(outcomes.map((outcome) => outcome.label));
|
|
8511
8610
|
const probabilityByLabel = resolveAverageProbabilityByLabel(venueMarkets, labels);
|
|
8512
|
-
return labels.
|
|
8513
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
8611
|
+
return labels.map((label2, index) => {
|
|
8612
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
8514
8613
|
const scopedOutcome = (_a = scopedMarket == null ? void 0 : scopedMarket.venueMarketOutcomes) == null ? void 0 : _a.find(
|
|
8515
8614
|
(outcome) => normalizeLabel2(outcome.label) === normalizeLabel2(label2)
|
|
8516
8615
|
);
|
|
8517
8616
|
const scopedTitle = ((_b = scopedOutcome == null ? void 0 : scopedOutcome.title) == null ? void 0 : _b.trim()) || null;
|
|
8518
8617
|
const fallbackTitle = (_d = (_c = outcomes.find((outcome) => normalizeLabel2(outcome.label) === normalizeLabel2(label2))) == null ? void 0 : _c.title) != null ? _d : null;
|
|
8519
|
-
const
|
|
8618
|
+
const resolvedTitle = scopedOutcome ? scopedTitle : fallbackTitle;
|
|
8619
|
+
const lineDisplayParts = variant === "line" ? resolveLineOutcomeDisplayParts(label2, resolvedTitle) : { title: resolvedTitle, lineLabel: null };
|
|
8620
|
+
const fallbackLineLabel = variant === "line" ? resolveScopedMarketLineLabel({
|
|
8621
|
+
outcomeIndex: index,
|
|
8622
|
+
scopedMarket
|
|
8623
|
+
}) : null;
|
|
8624
|
+
const sportsMarketType = normalizeLabel2((_e = scopedMarket == null ? void 0 : scopedMarket.sportsMarketType) != null ? _e : "");
|
|
8520
8625
|
const fallbackOutcomeByVenue = resolveOutcomesByVenue(venueMarkets, label2)[0];
|
|
8521
|
-
const outcomeId = (
|
|
8522
|
-
const venue = (
|
|
8626
|
+
const outcomeId = (_g = (_f = scopedOutcome == null ? void 0 : scopedOutcome.id) != null ? _f : fallbackOutcomeByVenue == null ? void 0 : fallbackOutcomeByVenue.outcome.id) != null ? _g : "";
|
|
8627
|
+
const venue = (_k = (_j = (_h = scopedMarket == null ? void 0 : scopedMarket.venue) != null ? _h : fallbackOutcomeByVenue == null ? void 0 : fallbackOutcomeByVenue.venue) != null ? _j : (_i = venueMarkets[0]) == null ? void 0 : _i.venue) != null ? _k : "polymarket";
|
|
8523
8628
|
return {
|
|
8524
|
-
title:
|
|
8629
|
+
title: lineDisplayParts.title,
|
|
8525
8630
|
id: outcomeId,
|
|
8526
8631
|
venue,
|
|
8527
8632
|
label: label2,
|
|
8633
|
+
lineLabel: sportsMarketType === "total" ? fallbackLineLabel != null ? fallbackLineLabel : lineDisplayParts.lineLabel : (_l = lineDisplayParts.lineLabel) != null ? _l : fallbackLineLabel,
|
|
8528
8634
|
probability: probabilityByLabel.get(label2),
|
|
8529
|
-
tone: resolveOutcomeTone(label2, index)
|
|
8635
|
+
tone: resolveOutcomeTone(label2, index),
|
|
8636
|
+
variant
|
|
8530
8637
|
};
|
|
8531
8638
|
});
|
|
8532
8639
|
};
|
|
@@ -8534,10 +8641,9 @@ var resolveSubtitle = ({
|
|
|
8534
8641
|
venueMarkets,
|
|
8535
8642
|
volume,
|
|
8536
8643
|
formatCompactCurrency,
|
|
8537
|
-
labels
|
|
8538
|
-
tradableVenues
|
|
8644
|
+
labels
|
|
8539
8645
|
}) => {
|
|
8540
|
-
const { venueCount } = getVenueSummary(venueMarkets
|
|
8646
|
+
const { venueCount } = getVenueSummary(venueMarkets);
|
|
8541
8647
|
const parts = [
|
|
8542
8648
|
`${venueCount} ${venueCount === 1 ? labels.marketDetails.meta.venueSingular : labels.marketDetails.meta.venuePlural}`
|
|
8543
8649
|
];
|
|
@@ -8556,19 +8662,19 @@ var resolveOtherTabRows = (market, labels) => {
|
|
|
8556
8662
|
if (market.creationDate) {
|
|
8557
8663
|
rows.push({
|
|
8558
8664
|
label: labels.marketDetails.meta.created,
|
|
8559
|
-
value: (0,
|
|
8665
|
+
value: (0, import_dayjs4.default)(market.creationDate).format("MMM D, YYYY")
|
|
8560
8666
|
});
|
|
8561
8667
|
}
|
|
8562
8668
|
if (market.startDate) {
|
|
8563
8669
|
rows.push({
|
|
8564
8670
|
label: labels.marketDetails.meta.opens,
|
|
8565
|
-
value: (0,
|
|
8671
|
+
value: (0, import_dayjs4.default)(market.startDate).format("MMM D, YYYY")
|
|
8566
8672
|
});
|
|
8567
8673
|
}
|
|
8568
8674
|
if (market.endDate) {
|
|
8569
8675
|
rows.push({
|
|
8570
8676
|
label: labels.marketDetails.meta.closes,
|
|
8571
|
-
value: (0,
|
|
8677
|
+
value: (0, import_dayjs4.default)(market.endDate).format("MMM D, YYYY")
|
|
8572
8678
|
});
|
|
8573
8679
|
}
|
|
8574
8680
|
if (rows.length === 1) {
|
|
@@ -8585,8 +8691,7 @@ var buildMarketDetailsModel = ({
|
|
|
8585
8691
|
title: title2,
|
|
8586
8692
|
image,
|
|
8587
8693
|
formatCompactCurrency,
|
|
8588
|
-
labels
|
|
8589
|
-
tradableVenues
|
|
8694
|
+
labels
|
|
8590
8695
|
}) => {
|
|
8591
8696
|
var _a, _b, _c, _d;
|
|
8592
8697
|
const market = resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
@@ -8601,8 +8706,7 @@ var buildMarketDetailsModel = ({
|
|
|
8601
8706
|
venueMarkets: market.venueMarkets,
|
|
8602
8707
|
volume: resolvedVolume,
|
|
8603
8708
|
formatCompactCurrency,
|
|
8604
|
-
labels
|
|
8605
|
-
tradableVenues
|
|
8709
|
+
labels
|
|
8606
8710
|
});
|
|
8607
8711
|
const outcomeLabels = resolveDisplayOutcomeLabels(
|
|
8608
8712
|
resolveMarketDetailsOutcomeLabels(market.venueMarkets).map((outcome) => outcome.label)
|
|
@@ -9653,7 +9757,7 @@ var import_react14 = require("react");
|
|
|
9653
9757
|
|
|
9654
9758
|
// src/trading/utils.ts
|
|
9655
9759
|
var import_hooks37 = require("@agg-build/hooks");
|
|
9656
|
-
var
|
|
9760
|
+
var import_dayjs5 = __toESM(require("dayjs"));
|
|
9657
9761
|
var defaultLabels = (0, import_hooks37.resolveAggUiLabels)("en-US");
|
|
9658
9762
|
var defaultSettlementSectionLabel = defaultLabels.trading.settlementSection;
|
|
9659
9763
|
var defaultTradingDisclaimer = defaultLabels.trading.disclaimer;
|
|
@@ -9695,7 +9799,6 @@ var normalizeSettlementForCompare = (input) => {
|
|
|
9695
9799
|
};
|
|
9696
9800
|
var dedupeSettlementSources = (sources) => {
|
|
9697
9801
|
const order = ["eventDescription", "marketDescription", "primaryRules"];
|
|
9698
|
-
const seen = /* @__PURE__ */ new Set();
|
|
9699
9802
|
const result = [];
|
|
9700
9803
|
for (const key of order) {
|
|
9701
9804
|
const value = sources[key];
|
|
@@ -9704,11 +9807,13 @@ var dedupeSettlementSources = (sources) => {
|
|
|
9704
9807
|
if (!trimmed) continue;
|
|
9705
9808
|
const fingerprint = normalizeSettlementForCompare(trimmed);
|
|
9706
9809
|
if (!fingerprint) continue;
|
|
9707
|
-
if (
|
|
9708
|
-
|
|
9709
|
-
|
|
9810
|
+
if (result.some((block) => block.fingerprint.includes(fingerprint))) continue;
|
|
9811
|
+
for (let i = result.length - 1; i >= 0; i -= 1) {
|
|
9812
|
+
if (fingerprint.includes(result[i].fingerprint)) result.splice(i, 1);
|
|
9813
|
+
}
|
|
9814
|
+
result.push({ key, content: trimmed, fingerprint });
|
|
9710
9815
|
}
|
|
9711
|
-
return result;
|
|
9816
|
+
return result.map(({ key, content }) => ({ key, content }));
|
|
9712
9817
|
};
|
|
9713
9818
|
|
|
9714
9819
|
// src/trading/settlement/settlement-text-renderer.tsx
|
|
@@ -10504,11 +10609,20 @@ var EventListItemDetailsContent = ({
|
|
|
10504
10609
|
if (typeof resolvedVolume !== "number") return "";
|
|
10505
10610
|
return `${config.formatting.formatCompactCurrency(resolvedVolume)} ${labels.eventItemDetails.volumeSuffix}`;
|
|
10506
10611
|
}, [config, event.volume, labels.eventItemDetails.volumeSuffix, venueMarkets]);
|
|
10612
|
+
const resolvedTitle = (0, import_react16.useMemo)(() => {
|
|
10613
|
+
return formatEventTitleWithDateSuffix({
|
|
10614
|
+
title: event.title,
|
|
10615
|
+
categories: event.categories,
|
|
10616
|
+
structureType: event.structureType,
|
|
10617
|
+
gameStartTime: event.gameStartTime,
|
|
10618
|
+
endDate: event.endDate
|
|
10619
|
+
});
|
|
10620
|
+
}, [event.categories, event.gameStartTime, event.endDate, event.structureType, event.title]);
|
|
10507
10621
|
return /* @__PURE__ */ (0, import_jsx_runtime125.jsxs)(
|
|
10508
10622
|
Card,
|
|
10509
10623
|
{
|
|
10510
10624
|
className: cn("group/agg-event-details", detailsBaseCardClassName, classNames == null ? void 0 : classNames.root),
|
|
10511
|
-
"aria-label": ariaLabel != null ? ariaLabel :
|
|
10625
|
+
"aria-label": ariaLabel != null ? ariaLabel : resolvedTitle,
|
|
10512
10626
|
onClick: () => {
|
|
10513
10627
|
onClick == null ? void 0 : onClick(event);
|
|
10514
10628
|
},
|
|
@@ -10543,7 +10657,7 @@ var EventListItemDetailsContent = ({
|
|
|
10543
10657
|
"truncate text-wrap wrap-break-word line-clamp-2",
|
|
10544
10658
|
classNames == null ? void 0 : classNames.title
|
|
10545
10659
|
),
|
|
10546
|
-
children:
|
|
10660
|
+
children: resolvedTitle
|
|
10547
10661
|
}
|
|
10548
10662
|
),
|
|
10549
10663
|
venueMarkets.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime125.jsx)(
|
|
@@ -10765,8 +10879,8 @@ var EventListItemDetails = (props) => {
|
|
|
10765
10879
|
EventListItemDetails.displayName = "EventListItemDetails";
|
|
10766
10880
|
|
|
10767
10881
|
// src/events/market-details/index.tsx
|
|
10768
|
-
var
|
|
10769
|
-
var
|
|
10882
|
+
var import_hooks43 = require("@agg-build/hooks");
|
|
10883
|
+
var import_react20 = require("react");
|
|
10770
10884
|
|
|
10771
10885
|
// src/events/orderbook/index.tsx
|
|
10772
10886
|
var import_hooks41 = require("@agg-build/hooks");
|
|
@@ -11241,37 +11355,71 @@ var Orderbook = ({
|
|
|
11241
11355
|
};
|
|
11242
11356
|
Orderbook.displayName = "Orderbook";
|
|
11243
11357
|
|
|
11244
|
-
// src/events/shared/
|
|
11358
|
+
// src/events/shared/select-best-outcome.ts
|
|
11245
11359
|
var normalizeOutcomeLabel3 = (label2) => {
|
|
11246
11360
|
return typeof label2 === "string" ? label2.trim().toLowerCase() : "";
|
|
11247
11361
|
};
|
|
11248
|
-
var
|
|
11249
|
-
|
|
11250
|
-
|
|
11251
|
-
|
|
11252
|
-
|
|
11253
|
-
|
|
11254
|
-
|
|
11255
|
-
|
|
11256
|
-
|
|
11257
|
-
|
|
11258
|
-
|
|
11259
|
-
|
|
11260
|
-
|
|
11261
|
-
|
|
11362
|
+
var selectBestOutcomeCandidate = (args) => {
|
|
11363
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
11364
|
+
const { outcomeId, selection } = args;
|
|
11365
|
+
if (!outcomeId) return void 0;
|
|
11366
|
+
const resolveVenueMarketId = (venue) => {
|
|
11367
|
+
var _a2, _b2;
|
|
11368
|
+
return venue ? (_b2 = (_a2 = args.venueMarketIdByVenue) == null ? void 0 : _a2.get(venue)) != null ? _b2 : void 0 : void 0;
|
|
11369
|
+
};
|
|
11370
|
+
const make = (price, venue, source, updatedAt) => ({
|
|
11371
|
+
price,
|
|
11372
|
+
venue: venue != null ? venue : void 0,
|
|
11373
|
+
venueMarketId: resolveVenueMarketId(venue != null ? venue : void 0),
|
|
11374
|
+
outcomeId,
|
|
11375
|
+
source,
|
|
11376
|
+
updatedAt: updatedAt != null ? updatedAt : void 0
|
|
11377
|
+
});
|
|
11378
|
+
if (selection === "buy" || selection === "sell") {
|
|
11379
|
+
const wsSidePrice = selection === "buy" ? (_a = args.live) == null ? void 0 : _a.bestAsk : (_b = args.live) == null ? void 0 : _b.bestBid;
|
|
11380
|
+
const wsSideVenue = selection === "buy" ? (_c = args.live) == null ? void 0 : _c.bestAskVenue : (_d = args.live) == null ? void 0 : _d.bestBidVenue;
|
|
11381
|
+
if (wsSidePrice != null) {
|
|
11382
|
+
return make(wsSidePrice, wsSideVenue, "ws", (_e = args.live) == null ? void 0 : _e.updatedAt);
|
|
11383
|
+
}
|
|
11384
|
+
const restSidePrice = selection === "buy" ? (_f = args.restBest) == null ? void 0 : _f.bestAsk : (_g = args.restBest) == null ? void 0 : _g.bestBid;
|
|
11385
|
+
const restSideVenue = selection === "buy" ? (_h = args.restBestVenues) == null ? void 0 : _h.bestAskVenue : (_i = args.restBestVenues) == null ? void 0 : _i.bestBidVenue;
|
|
11386
|
+
if (restSidePrice != null) {
|
|
11387
|
+
return make(restSidePrice, restSideVenue, "rest-best", void 0);
|
|
11388
|
+
}
|
|
11389
|
+
}
|
|
11390
|
+
if (((_j = args.live) == null ? void 0 : _j.midpoint) != null) {
|
|
11391
|
+
return make(args.live.midpoint, args.live.midpointVenue, "ws", args.live.updatedAt);
|
|
11262
11392
|
}
|
|
11263
|
-
if (normalizeOutcomeLabel3(outcomeLabel) === "yes" && bestMidpointVenue) {
|
|
11264
|
-
return bestMidpointVenue;
|
|
11393
|
+
if (normalizeOutcomeLabel3(args.outcomeLabel) === "yes" && args.bestMidpoint != null && args.bestMidpointVenue) {
|
|
11394
|
+
return make(args.bestMidpoint, args.bestMidpointVenue, "rest-midpoint", void 0);
|
|
11265
11395
|
}
|
|
11266
|
-
|
|
11267
|
-
|
|
11396
|
+
if (args.restMidpoint != null) {
|
|
11397
|
+
return make(args.restMidpoint, args.restMidpointVenue, "rest-midpoint", void 0);
|
|
11398
|
+
}
|
|
11399
|
+
if (args.staticPrice != null) {
|
|
11400
|
+
return make(args.staticPrice, args.staticVenue, "static", void 0);
|
|
11401
|
+
}
|
|
11402
|
+
return void 0;
|
|
11403
|
+
};
|
|
11404
|
+
var buildVenueMarketIdByVenue = (venueMarkets) => {
|
|
11405
|
+
var _a;
|
|
11406
|
+
const map = /* @__PURE__ */ new Map();
|
|
11407
|
+
if (!(venueMarkets == null ? void 0 : venueMarkets.length)) return map;
|
|
11408
|
+
const visit = (vm) => {
|
|
11409
|
+
if (vm.venue && vm.id && !map.has(vm.venue)) map.set(vm.venue, vm.id);
|
|
11410
|
+
};
|
|
11411
|
+
for (const vm of venueMarkets) {
|
|
11412
|
+
visit(vm);
|
|
11413
|
+
for (const sibling of (_a = vm.matchedVenueMarkets) != null ? _a : []) visit(sibling);
|
|
11414
|
+
}
|
|
11415
|
+
return map;
|
|
11268
11416
|
};
|
|
11269
11417
|
|
|
11270
11418
|
// src/events/shared/event-trading-state.utils.ts
|
|
11271
|
-
var
|
|
11419
|
+
var import_dayjs6 = __toESM(require("dayjs"));
|
|
11272
11420
|
var formatTradingStateDate = (value) => {
|
|
11273
|
-
if (!(0,
|
|
11274
|
-
return (0,
|
|
11421
|
+
if (!(0, import_dayjs6.default)(value).isValid()) return value;
|
|
11422
|
+
return (0, import_dayjs6.default)(value).format("MMM D, YYYY");
|
|
11275
11423
|
};
|
|
11276
11424
|
var resolveTradingStateTimestampLabel = (labels, state) => {
|
|
11277
11425
|
if (state.kind === "resolved" && state.resolvesAt) {
|
|
@@ -11375,14 +11523,17 @@ var marketDetailsOutcomeButtonToneClasses = {
|
|
|
11375
11523
|
};
|
|
11376
11524
|
var getMarketDetailsOutcomeButtonClassNames = ({
|
|
11377
11525
|
enableAnimations,
|
|
11526
|
+
enforceFixedWidth,
|
|
11378
11527
|
isSelected,
|
|
11379
|
-
tone
|
|
11528
|
+
tone,
|
|
11529
|
+
variant
|
|
11380
11530
|
}) => {
|
|
11381
11531
|
const toneClasses = marketDetailsOutcomeButtonToneClasses[tone];
|
|
11532
|
+
const widthClassName = variant === "line" ? "w-[200px]" : variant === "outcome" ? "w-[160px]" : "w-[140px]";
|
|
11382
11533
|
return {
|
|
11383
11534
|
root: cn(
|
|
11384
|
-
"w-[140px]",
|
|
11385
|
-
"flex h-9 shrink-0 cursor-pointer select-none items-center justify-center gap-2 rounded-agg-full border px-
|
|
11535
|
+
enforceFixedWidth ? widthClassName : "w-[140px]",
|
|
11536
|
+
"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",
|
|
11386
11537
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-0 focus-visible:ring-offset-agg-secondary",
|
|
11387
11538
|
"disabled:cursor-not-allowed disabled:opacity-60",
|
|
11388
11539
|
getMotionClassName(
|
|
@@ -11398,6 +11549,7 @@ var getMarketDetailsOutcomeButtonClassNames = ({
|
|
|
11398
11549
|
var MarketDetailsOutcomeButton = ({
|
|
11399
11550
|
ariaControls,
|
|
11400
11551
|
enableAnimations,
|
|
11552
|
+
enforceFixedWidth,
|
|
11401
11553
|
isSelected,
|
|
11402
11554
|
item,
|
|
11403
11555
|
onSelect
|
|
@@ -11405,10 +11557,14 @@ var MarketDetailsOutcomeButton = ({
|
|
|
11405
11557
|
var _a;
|
|
11406
11558
|
const classNames = getMarketDetailsOutcomeButtonClassNames({
|
|
11407
11559
|
enableAnimations,
|
|
11560
|
+
enforceFixedWidth,
|
|
11408
11561
|
isSelected,
|
|
11409
|
-
tone: item.tone
|
|
11562
|
+
tone: item.tone,
|
|
11563
|
+
variant: item.variant
|
|
11410
11564
|
});
|
|
11411
|
-
|
|
11565
|
+
const itemLabel = (_a = item.title) != null ? _a : item.label;
|
|
11566
|
+
const isLineVariant = item.variant === "line";
|
|
11567
|
+
return /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11412
11568
|
"button",
|
|
11413
11569
|
{
|
|
11414
11570
|
type: "button",
|
|
@@ -11418,181 +11574,517 @@ var MarketDetailsOutcomeButton = ({
|
|
|
11418
11574
|
"aria-controls": ariaControls,
|
|
11419
11575
|
"aria-selected": isSelected,
|
|
11420
11576
|
tabIndex: isSelected ? 0 : -1,
|
|
11421
|
-
className: cn(
|
|
11577
|
+
className: cn(
|
|
11578
|
+
classNames.root,
|
|
11579
|
+
"overflow-hidden",
|
|
11580
|
+
enforceFixedWidth ? "flex-none" : "flex-1 md:flex-auto"
|
|
11581
|
+
),
|
|
11422
11582
|
onClick: () => onSelect(item.label),
|
|
11423
|
-
children: [
|
|
11583
|
+
children: isLineVariant ? /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "flex min-w-0 max-w-full items-center justify-center gap-1.5 overflow-hidden", children: [
|
|
11424
11584
|
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(VenueLogo, { venue: item.venue, size: "small" }),
|
|
11425
|
-
/* @__PURE__ */ (0, import_jsx_runtime128.
|
|
11426
|
-
|
|
11427
|
-
|
|
11428
|
-
|
|
11429
|
-
|
|
11430
|
-
|
|
11431
|
-
|
|
11432
|
-
|
|
11433
|
-
|
|
11434
|
-
|
|
11435
|
-
|
|
11436
|
-
|
|
11437
|
-
|
|
11438
|
-
|
|
11439
|
-
|
|
11440
|
-
|
|
11441
|
-
|
|
11442
|
-
|
|
11443
|
-
|
|
11444
|
-
|
|
11445
|
-
|
|
11585
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11586
|
+
Typography,
|
|
11587
|
+
{
|
|
11588
|
+
as: "span",
|
|
11589
|
+
variant: isSelected ? "body-strong" : "body",
|
|
11590
|
+
className: cn("min-w-0 truncate whitespace-nowrap text-center", classNames.text),
|
|
11591
|
+
children: itemLabel
|
|
11592
|
+
}
|
|
11593
|
+
),
|
|
11594
|
+
item.lineLabel ? /* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11595
|
+
Typography,
|
|
11596
|
+
{
|
|
11597
|
+
as: "span",
|
|
11598
|
+
variant: isSelected ? "body-strong" : "body",
|
|
11599
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
11600
|
+
children: item.lineLabel
|
|
11601
|
+
}
|
|
11602
|
+
) : null,
|
|
11603
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11604
|
+
Typography,
|
|
11605
|
+
{
|
|
11606
|
+
as: "span",
|
|
11607
|
+
variant: isSelected ? "body-strong" : "body",
|
|
11608
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
11609
|
+
children: formatProbabilityCents(item.probability)
|
|
11610
|
+
}
|
|
11611
|
+
)
|
|
11612
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime128.jsxs)("div", { className: "inline-flex max-w-full items-center justify-center gap-1.5", children: [
|
|
11613
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(VenueLogo, { venue: item.venue, size: "small" }),
|
|
11614
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11615
|
+
Typography,
|
|
11616
|
+
{
|
|
11617
|
+
as: "span",
|
|
11618
|
+
variant: isSelected ? "body-strong" : "body",
|
|
11619
|
+
className: cn("truncate whitespace-nowrap text-center", classNames.text),
|
|
11620
|
+
children: itemLabel
|
|
11621
|
+
}
|
|
11622
|
+
),
|
|
11623
|
+
/* @__PURE__ */ (0, import_jsx_runtime128.jsx)(
|
|
11624
|
+
Typography,
|
|
11625
|
+
{
|
|
11626
|
+
as: "span",
|
|
11627
|
+
variant: isSelected ? "body-strong" : "body",
|
|
11628
|
+
className: cn("shrink-0 whitespace-nowrap", classNames.text),
|
|
11629
|
+
children: formatProbabilityCents(item.probability)
|
|
11630
|
+
}
|
|
11631
|
+
)
|
|
11632
|
+
] })
|
|
11446
11633
|
}
|
|
11447
11634
|
);
|
|
11448
11635
|
};
|
|
11449
11636
|
MarketDetailsOutcomeButton.displayName = "MarketDetailsOutcomeButton";
|
|
11450
11637
|
|
|
11451
|
-
// src/events/market-details/
|
|
11638
|
+
// src/events/market-details/market-details-graph-panel.tsx
|
|
11639
|
+
var import_hooks42 = require("@agg-build/hooks");
|
|
11640
|
+
var import_react19 = require("react");
|
|
11452
11641
|
var import_jsx_runtime129 = require("react/jsx-runtime");
|
|
11453
|
-
var
|
|
11454
|
-
ariaLabel,
|
|
11455
|
-
classNames
|
|
11456
|
-
}) => {
|
|
11457
|
-
const labels = (0, import_hooks42.useLabels)();
|
|
11458
|
-
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11459
|
-
Card,
|
|
11460
|
-
{
|
|
11461
|
-
className: cn(
|
|
11462
|
-
"group/agg-market-card agg-market-card-unavailable",
|
|
11463
|
-
marketDetailsBaseCardClassName,
|
|
11464
|
-
classNames == null ? void 0 : classNames.root
|
|
11465
|
-
),
|
|
11466
|
-
role: "status",
|
|
11467
|
-
"aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.unavailableAria,
|
|
11468
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex flex-col gap-1 p-5", children: [
|
|
11469
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(Typography, { variant: "body-large-strong", children: labels.marketDetails.unavailableTitle }),
|
|
11470
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.unavailableDescription })
|
|
11471
|
-
] })
|
|
11472
|
-
}
|
|
11473
|
-
);
|
|
11474
|
-
};
|
|
11475
|
-
var MarketDetailsNotFoundState = ({
|
|
11476
|
-
ariaLabel: _ariaLabel,
|
|
11477
|
-
classNames: _classNames
|
|
11478
|
-
}) => {
|
|
11479
|
-
const labels = (0, import_hooks42.useLabels)();
|
|
11480
|
-
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11481
|
-
StateMessage,
|
|
11482
|
-
{
|
|
11483
|
-
title: labels.marketDetails.notFoundTitle,
|
|
11484
|
-
description: labels.marketDetails.notFoundDescription,
|
|
11485
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(SearchEmptyIcon, {}),
|
|
11486
|
-
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
11487
|
-
}
|
|
11488
|
-
);
|
|
11489
|
-
};
|
|
11490
|
-
var MarketDetailsContent = ({
|
|
11642
|
+
var MarketDetailsGraphPanel = ({
|
|
11491
11643
|
venueMarkets,
|
|
11492
|
-
|
|
11493
|
-
|
|
11494
|
-
|
|
11495
|
-
|
|
11496
|
-
|
|
11497
|
-
|
|
11498
|
-
|
|
11499
|
-
|
|
11500
|
-
ariaLabel,
|
|
11501
|
-
classNames,
|
|
11502
|
-
otherContent,
|
|
11503
|
-
onOutcomeSelect,
|
|
11644
|
+
selectedOutcomeLabel,
|
|
11645
|
+
selectedOutcomeId,
|
|
11646
|
+
livePrices,
|
|
11647
|
+
wsLivePrices,
|
|
11648
|
+
headerOutcomeItems,
|
|
11649
|
+
isResolvedMarket,
|
|
11650
|
+
isOutcomeSelectionLocked,
|
|
11651
|
+
volume,
|
|
11504
11652
|
live,
|
|
11505
|
-
|
|
11506
|
-
midpointsFallbackVenues,
|
|
11507
|
-
suppressOutcomeFallbackSelection,
|
|
11508
|
-
midpointsResult
|
|
11653
|
+
classNames
|
|
11509
11654
|
}) => {
|
|
11510
|
-
var _a, _b, _c
|
|
11655
|
+
var _a, _b, _c;
|
|
11511
11656
|
const config = (0, import_hooks42.useSdkUiConfig)();
|
|
11512
11657
|
const {
|
|
11513
|
-
|
|
11514
|
-
formatting: { formatPercent },
|
|
11658
|
+
formatting: { formatPercent, formatCompactCurrency },
|
|
11515
11659
|
general: { theme }
|
|
11516
11660
|
} = config;
|
|
11517
11661
|
const isDarkTheme = theme === "dark";
|
|
11518
11662
|
const labels = (0, import_hooks42.useLabels)();
|
|
11519
|
-
const
|
|
11520
|
-
const
|
|
11521
|
-
const
|
|
11522
|
-
const
|
|
11523
|
-
const
|
|
11524
|
-
const
|
|
11525
|
-
|
|
11526
|
-
|
|
11527
|
-
const
|
|
11528
|
-
|
|
11529
|
-
|
|
11530
|
-
|
|
11531
|
-
|
|
11532
|
-
|
|
11533
|
-
|
|
11534
|
-
|
|
11535
|
-
|
|
11536
|
-
venueByOutcomeId: /* @__PURE__ */ new Map(),
|
|
11537
|
-
bestPrices: /* @__PURE__ */ new Map(),
|
|
11538
|
-
bestPriceVenuesByOutcomeId: /* @__PURE__ */ new Map(),
|
|
11539
|
-
isLoading: false,
|
|
11540
|
-
bestMidpoint: void 0,
|
|
11541
|
-
bestMidpointVenue: void 0
|
|
11542
|
-
};
|
|
11543
|
-
const clusterMidpoints = (_b = clusterMidpointResult.bestMidpointsByOutcomeId) != null ? _b : clusterMidpointResult.prices;
|
|
11544
|
-
const clusterBestMidpointsByOutcomeId = clusterMidpoints;
|
|
11545
|
-
const clusterVenueByOutcomeId = clusterMidpointResult.venueByOutcomeId;
|
|
11546
|
-
const clusterBestMidpoint = clusterMidpointResult.bestMidpoint;
|
|
11547
|
-
const clusterBestMidpointVenue = clusterMidpointResult.bestMidpointVenue;
|
|
11548
|
-
const clusterBestPricesRest = clusterMidpointResult.bestPrices;
|
|
11549
|
-
const clusterBestPrices = (0, import_react19.useMemo)(
|
|
11550
|
-
() => (0, import_hooks42.mergeBestPricesPreferringLive)(clusterBestPricesRest, wsBestPrices),
|
|
11551
|
-
[clusterBestPricesRest, wsBestPrices]
|
|
11552
|
-
);
|
|
11553
|
-
const clusterBestPriceVenuesByOutcomeId = clusterMidpointResult.bestPriceVenuesByOutcomeId;
|
|
11554
|
-
const clusterMidpointMarkets = (0, import_react19.useMemo)(() => {
|
|
11555
|
-
var _a2;
|
|
11556
|
-
if (!resolvedMarket) return [];
|
|
11557
|
-
return (_a2 = resolvedMarket.venueMarkets) != null ? _a2 : [];
|
|
11558
|
-
}, [resolvedMarket]);
|
|
11559
|
-
const tradableVenues = (0, import_react19.useMemo)(() => {
|
|
11560
|
-
var _a2;
|
|
11561
|
-
if (clusterMidpointMarkets.length === 0) return null;
|
|
11562
|
-
if (clusterMidpoints.size === 0) return null;
|
|
11563
|
-
const set = /* @__PURE__ */ new Set();
|
|
11564
|
-
for (const market of clusterMidpointMarkets) {
|
|
11565
|
-
for (const outcome of (_a2 = market.venueMarketOutcomes) != null ? _a2 : []) {
|
|
11566
|
-
if (clusterMidpoints.has(outcome.id)) {
|
|
11567
|
-
set.add(market.venue);
|
|
11568
|
-
break;
|
|
11569
|
-
}
|
|
11570
|
-
}
|
|
11571
|
-
}
|
|
11572
|
-
return set;
|
|
11573
|
-
}, [clusterMidpointMarkets, clusterMidpoints]);
|
|
11574
|
-
const model = (0, import_react19.useMemo)(() => {
|
|
11575
|
-
return buildMarketDetailsModel({
|
|
11576
|
-
venueMarkets,
|
|
11577
|
-
marketId,
|
|
11578
|
-
title: title2,
|
|
11579
|
-
image,
|
|
11580
|
-
formatCompactCurrency: config.formatting.formatCompactCurrency,
|
|
11581
|
-
labels,
|
|
11582
|
-
tradableVenues
|
|
11663
|
+
const selectedTimeRange = config.chart.selectedChartTimeRange;
|
|
11664
|
+
const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
|
|
11665
|
+
const [chartRangeOverride, setChartRangeOverride] = (0, import_react19.useState)(null);
|
|
11666
|
+
const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
|
|
11667
|
+
const [selectedChartType, setSelectedChartType] = (0, import_react19.useState)("line");
|
|
11668
|
+
const [selectedGraphVenue, setSelectedGraphVenue] = (0, import_react19.useState)(null);
|
|
11669
|
+
const [chartOutcomeLabel, setChartOutcomeLabel] = (0, import_react19.useState)(selectedOutcomeLabel);
|
|
11670
|
+
const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
|
|
11671
|
+
const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
|
|
11672
|
+
const chartOutcomesByVenue = (0, import_react19.useMemo)(() => {
|
|
11673
|
+
return resolveChartVenueOutcomes({
|
|
11674
|
+
eligibleVenueOutcomes: collectEligibleVenueOutcomes({
|
|
11675
|
+
venueMarkets,
|
|
11676
|
+
selectedOutcomeLabel: resolvedChartOutcomeLabel,
|
|
11677
|
+
selectedOutcomeId: chartSelectedOutcomeId
|
|
11678
|
+
}),
|
|
11679
|
+
livePrices
|
|
11583
11680
|
});
|
|
11584
|
-
}, [
|
|
11585
|
-
|
|
11586
|
-
|
|
11587
|
-
|
|
11588
|
-
|
|
11589
|
-
|
|
11590
|
-
|
|
11591
|
-
|
|
11592
|
-
|
|
11593
|
-
|
|
11594
|
-
|
|
11595
|
-
|
|
11681
|
+
}, [livePrices, venueMarkets, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
|
|
11682
|
+
const rollingWindow = (0, import_hooks42.useRollingChartWindow)({ range: effectiveChartTimeRange });
|
|
11683
|
+
const chartPrimaryOutcomeId = (_b = (_a = chartOutcomesByVenue[0]) == null ? void 0 : _a.outcome.id) != null ? _b : null;
|
|
11684
|
+
const chartVenueOutcomeIds = (0, import_react19.useMemo)(() => {
|
|
11685
|
+
return chartOutcomesByVenue.map((item) => item.outcome.id);
|
|
11686
|
+
}, [chartOutcomesByVenue]);
|
|
11687
|
+
const {
|
|
11688
|
+
data: marketChartData,
|
|
11689
|
+
isLoading: isMarketChartLoading,
|
|
11690
|
+
error: marketChartError,
|
|
11691
|
+
refetch: refetchMarketChart
|
|
11692
|
+
} = (0, import_hooks42.useMarketChart)({
|
|
11693
|
+
marketId: chartPrimaryOutcomeId,
|
|
11694
|
+
venueMarketIds: chartVenueOutcomeIds,
|
|
11695
|
+
interval: rollingWindow.interval,
|
|
11696
|
+
startTs: rollingWindow.startTs * 1e3,
|
|
11697
|
+
endTs: rollingWindow.endTs * 1e3,
|
|
11698
|
+
// The panel only mounts when the chart is actually visible, so enable as
|
|
11699
|
+
// soon as we have an outcome to chart.
|
|
11700
|
+
enabled: !!chartPrimaryOutcomeId,
|
|
11701
|
+
live,
|
|
11702
|
+
refetchIntervalMs: rollingWindow.refetchIntervalMs,
|
|
11703
|
+
// Stable cache key per user-selected range so tab/page revisits hit cache
|
|
11704
|
+
// instead of refetching on every bucket-boundary rollover.
|
|
11705
|
+
rangeKey: rollingWindow.range
|
|
11706
|
+
});
|
|
11707
|
+
const hasAutoFallenBackRangeRef = (0, import_react19.useRef)(false);
|
|
11708
|
+
(0, import_react19.useEffect)(() => {
|
|
11709
|
+
hasAutoFallenBackRangeRef.current = false;
|
|
11710
|
+
setChartRangeOverride(null);
|
|
11711
|
+
}, [chartPrimaryOutcomeId]);
|
|
11712
|
+
(0, import_react19.useEffect)(() => {
|
|
11713
|
+
if (!shouldAutoFallbackToAllRange({
|
|
11714
|
+
chartData: marketChartData,
|
|
11715
|
+
isLoading: isMarketChartLoading,
|
|
11716
|
+
error: marketChartError,
|
|
11717
|
+
currentRange: effectiveChartTimeRange,
|
|
11718
|
+
hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
|
|
11719
|
+
domainStartTs: rollingWindow.startTs
|
|
11720
|
+
})) {
|
|
11721
|
+
return;
|
|
11722
|
+
}
|
|
11723
|
+
hasAutoFallenBackRangeRef.current = true;
|
|
11724
|
+
setChartRangeOverride("ALL");
|
|
11725
|
+
}, [
|
|
11726
|
+
marketChartData,
|
|
11727
|
+
isMarketChartLoading,
|
|
11728
|
+
marketChartError,
|
|
11729
|
+
effectiveChartTimeRange,
|
|
11730
|
+
rollingWindow.startTs
|
|
11731
|
+
]);
|
|
11732
|
+
const chartAvailableOutcomesByVenue = (0, import_react19.useMemo)(() => {
|
|
11733
|
+
return filterChartVenueOutcomesByRenderableVenues({
|
|
11734
|
+
chartData: marketChartData,
|
|
11735
|
+
venueOutcomes: chartOutcomesByVenue
|
|
11736
|
+
});
|
|
11737
|
+
}, [chartOutcomesByVenue, marketChartData]);
|
|
11738
|
+
const graphSeries = (0, import_react19.useMemo)(() => {
|
|
11739
|
+
var _a2, _b2, _c2, _d;
|
|
11740
|
+
const baseColor = resolveSeriesColor(
|
|
11741
|
+
(_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",
|
|
11742
|
+
0,
|
|
11743
|
+
isDarkTheme
|
|
11744
|
+
);
|
|
11745
|
+
const domainStartTs = rollingWindow.startTs;
|
|
11746
|
+
return resolveMarketChartDisplaySeries({
|
|
11747
|
+
chartData: marketChartData,
|
|
11748
|
+
selectedVenue: selectedGraphVenue,
|
|
11749
|
+
transformProbability: (value) => value
|
|
11750
|
+
}).map((seriesItem) => {
|
|
11751
|
+
return {
|
|
11752
|
+
id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
|
|
11753
|
+
venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
|
|
11754
|
+
color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
|
|
11755
|
+
// Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
|
|
11756
|
+
// bars don't bleed in across a range shrink or long mount.
|
|
11757
|
+
points: seriesItem.points.filter((point) => point.time >= domainStartTs)
|
|
11758
|
+
};
|
|
11759
|
+
});
|
|
11760
|
+
}, [
|
|
11761
|
+
isDarkTheme,
|
|
11762
|
+
chartPrimaryOutcomeId,
|
|
11763
|
+
marketChartData,
|
|
11764
|
+
rollingWindow.startTs,
|
|
11765
|
+
selectedGraphVenue,
|
|
11766
|
+
resolvedChartOutcomeLabel,
|
|
11767
|
+
chartAvailableOutcomesByVenue,
|
|
11768
|
+
chartOutcomesByVenue
|
|
11769
|
+
]);
|
|
11770
|
+
const graphLiveState = (0, import_react19.useMemo)(() => {
|
|
11771
|
+
return resolveMarketChartLiveState({
|
|
11772
|
+
chartData: marketChartData,
|
|
11773
|
+
selectedVenue: selectedGraphVenue,
|
|
11774
|
+
transformProbability: (value) => value
|
|
11775
|
+
});
|
|
11776
|
+
}, [marketChartData, selectedGraphVenue]);
|
|
11777
|
+
const hasChartError = !!marketChartError;
|
|
11778
|
+
(0, import_react19.useEffect)(() => {
|
|
11779
|
+
if (!selectedGraphVenue) {
|
|
11780
|
+
return;
|
|
11781
|
+
}
|
|
11782
|
+
if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
|
|
11783
|
+
return;
|
|
11784
|
+
}
|
|
11785
|
+
setSelectedGraphVenue(null);
|
|
11786
|
+
}, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
|
|
11787
|
+
const handleGraphVenueToggle = (venue) => {
|
|
11788
|
+
setSelectedGraphVenue((currentVenue) => {
|
|
11789
|
+
if (currentVenue === venue) return null;
|
|
11790
|
+
return venue;
|
|
11791
|
+
});
|
|
11792
|
+
};
|
|
11793
|
+
const handleRetryMarketChart = () => {
|
|
11794
|
+
void refetchMarketChart();
|
|
11795
|
+
};
|
|
11796
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: cn("agg-price-chart flex flex-col gap-5 p-5", classNames == null ? void 0 : classNames.graph), children: [
|
|
11797
|
+
hasChartError ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11798
|
+
StateMessage,
|
|
11799
|
+
{
|
|
11800
|
+
title: labels.marketDetails.chartUnavailableTitle,
|
|
11801
|
+
description: labels.marketDetails.chartUnavailableDescription,
|
|
11802
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(WarningIcon, {}),
|
|
11803
|
+
onAction: handleRetryMarketChart,
|
|
11804
|
+
classNames: { root: "min-h-[248px] px-5 py-10 md:min-h-[272px]" }
|
|
11805
|
+
}
|
|
11806
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11807
|
+
LineChart,
|
|
11808
|
+
{
|
|
11809
|
+
series: graphSeries,
|
|
11810
|
+
height: 260,
|
|
11811
|
+
isLoading: isMarketChartLoading,
|
|
11812
|
+
chartType: selectedChartType,
|
|
11813
|
+
liveCandle: selectedChartType === "candlestick" ? (_c = graphLiveState.liveCandle) != null ? _c : void 0 : void 0,
|
|
11814
|
+
lineValue: graphLiveState.lineValue,
|
|
11815
|
+
classNames: { root: "agg-chart-region w-full" },
|
|
11816
|
+
showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
|
|
11817
|
+
renderSeriesControls: () => {
|
|
11818
|
+
var _a2, _b2, _c2, _d;
|
|
11819
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
|
|
11820
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
|
|
11821
|
+
var _a3;
|
|
11822
|
+
const probability = formatProbabilityPercent(
|
|
11823
|
+
(_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
|
|
11824
|
+
formatPercent
|
|
11825
|
+
);
|
|
11826
|
+
const isActiveVenue = selectedGraphVenue === item.venue;
|
|
11827
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
11828
|
+
"button",
|
|
11829
|
+
{
|
|
11830
|
+
type: "button",
|
|
11831
|
+
"aria-label": `${item.venue} ${probability}`,
|
|
11832
|
+
"aria-pressed": isActiveVenue,
|
|
11833
|
+
className: cn(
|
|
11834
|
+
"agg-market-venue",
|
|
11835
|
+
"cursor-pointer",
|
|
11836
|
+
"inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
|
|
11837
|
+
"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",
|
|
11838
|
+
isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
|
|
11839
|
+
),
|
|
11840
|
+
onClick: (e) => {
|
|
11841
|
+
e.preventDefault();
|
|
11842
|
+
e.stopPropagation();
|
|
11843
|
+
handleGraphVenueToggle(item.venue);
|
|
11844
|
+
},
|
|
11845
|
+
children: [
|
|
11846
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(VenueLogo, { venue: item.venue, size: "small" }),
|
|
11847
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
|
|
11848
|
+
]
|
|
11849
|
+
},
|
|
11850
|
+
`${item.market.id}-${item.outcome.id}`
|
|
11851
|
+
);
|
|
11852
|
+
}) }),
|
|
11853
|
+
!isOutcomeSelectionLocked ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11854
|
+
SwitchButton,
|
|
11855
|
+
{
|
|
11856
|
+
ariaLabel: labels.marketDetails.outcomeSelectorAria,
|
|
11857
|
+
className: "agg-outcome-switch w-full shrink-0 md:w-fit",
|
|
11858
|
+
value: (_d = (_c2 = (_a2 = headerOutcomeItems.find(
|
|
11859
|
+
(outcome) => outcome.label === resolvedChartOutcomeLabel
|
|
11860
|
+
)) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d : "",
|
|
11861
|
+
onValueChange: (outcomeId) => {
|
|
11862
|
+
const outcome = headerOutcomeItems.find(
|
|
11863
|
+
(headerOutcomeItem) => headerOutcomeItem.id === outcomeId
|
|
11864
|
+
);
|
|
11865
|
+
if (!outcome) return;
|
|
11866
|
+
setChartOutcomeLabel(outcome.label);
|
|
11867
|
+
},
|
|
11868
|
+
options: headerOutcomeItems.map((outcome) => {
|
|
11869
|
+
var _a3, _b3;
|
|
11870
|
+
const price = outcome.probability;
|
|
11871
|
+
return {
|
|
11872
|
+
value: outcome.id,
|
|
11873
|
+
label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
|
|
11874
|
+
ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
|
|
11875
|
+
};
|
|
11876
|
+
})
|
|
11877
|
+
}
|
|
11878
|
+
) : null
|
|
11879
|
+
] });
|
|
11880
|
+
}
|
|
11881
|
+
}
|
|
11882
|
+
),
|
|
11883
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
11884
|
+
"div",
|
|
11885
|
+
{
|
|
11886
|
+
className: cn(
|
|
11887
|
+
"agg-chart-footer",
|
|
11888
|
+
"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",
|
|
11889
|
+
classNames == null ? void 0 : classNames.footer
|
|
11890
|
+
),
|
|
11891
|
+
children: [
|
|
11892
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { children: typeof volume !== "number" ? labels.marketDetails.volumeUnavailable : volume > 0 ? `${formatCompactCurrency(volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
|
|
11893
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
|
|
11894
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11895
|
+
ChartTypeSwitch,
|
|
11896
|
+
{
|
|
11897
|
+
className: "agg-chart-type-switch shrink-0",
|
|
11898
|
+
value: selectedChartType,
|
|
11899
|
+
onValueChange: setSelectedChartType
|
|
11900
|
+
}
|
|
11901
|
+
),
|
|
11902
|
+
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { "aria-hidden": "true", className: "hidden h-4 w-px bg-agg-separator md:block" }),
|
|
11903
|
+
import_hooks42.CHART_TIME_RANGES.map((timeRange) => {
|
|
11904
|
+
const isActive = effectiveChartTimeRange === timeRange;
|
|
11905
|
+
const isDisabled = isResolvedMarket && timeRange !== "ALL";
|
|
11906
|
+
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
11907
|
+
"button",
|
|
11908
|
+
{
|
|
11909
|
+
type: "button",
|
|
11910
|
+
disabled: isDisabled,
|
|
11911
|
+
className: cn(
|
|
11912
|
+
"agg-chart-time-range-trigger",
|
|
11913
|
+
"cursor-pointer text-agg-sm leading-agg-5",
|
|
11914
|
+
isDisabled && "cursor-not-allowed opacity-50",
|
|
11915
|
+
isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
|
|
11916
|
+
),
|
|
11917
|
+
"aria-pressed": isActive,
|
|
11918
|
+
"aria-disabled": isDisabled,
|
|
11919
|
+
onClick: (e) => {
|
|
11920
|
+
e.preventDefault();
|
|
11921
|
+
e.stopPropagation();
|
|
11922
|
+
if (isDisabled) return;
|
|
11923
|
+
setChartRangeOverride(null);
|
|
11924
|
+
setSelectedTimeRange(timeRange);
|
|
11925
|
+
},
|
|
11926
|
+
children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
|
|
11927
|
+
},
|
|
11928
|
+
timeRange
|
|
11929
|
+
);
|
|
11930
|
+
})
|
|
11931
|
+
] })
|
|
11932
|
+
]
|
|
11933
|
+
}
|
|
11934
|
+
)
|
|
11935
|
+
] });
|
|
11936
|
+
};
|
|
11937
|
+
MarketDetailsGraphPanel.displayName = "MarketDetailsGraphPanel";
|
|
11938
|
+
|
|
11939
|
+
// src/events/market-details/index.tsx
|
|
11940
|
+
var import_jsx_runtime130 = require("react/jsx-runtime");
|
|
11941
|
+
var MarketDetailsUnavailableState = ({
|
|
11942
|
+
marketId,
|
|
11943
|
+
ariaLabel,
|
|
11944
|
+
classNames
|
|
11945
|
+
}) => {
|
|
11946
|
+
const labels = (0, import_hooks43.useLabels)();
|
|
11947
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
11948
|
+
Card,
|
|
11949
|
+
{
|
|
11950
|
+
"data-market-id": marketId || void 0,
|
|
11951
|
+
className: cn(
|
|
11952
|
+
"group/agg-market-card agg-market-card-unavailable",
|
|
11953
|
+
marketDetailsBaseCardClassName,
|
|
11954
|
+
classNames == null ? void 0 : classNames.root
|
|
11955
|
+
),
|
|
11956
|
+
role: "status",
|
|
11957
|
+
"aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.unavailableAria,
|
|
11958
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex flex-col gap-1 p-5", children: [
|
|
11959
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "body-large-strong", children: labels.marketDetails.unavailableTitle }),
|
|
11960
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "label", className: "text-agg-muted-foreground", children: labels.marketDetails.unavailableDescription })
|
|
11961
|
+
] })
|
|
11962
|
+
}
|
|
11963
|
+
);
|
|
11964
|
+
};
|
|
11965
|
+
var MarketDetailsNotFoundState = ({
|
|
11966
|
+
marketId,
|
|
11967
|
+
ariaLabel: _ariaLabel,
|
|
11968
|
+
classNames: _classNames
|
|
11969
|
+
}) => {
|
|
11970
|
+
const labels = (0, import_hooks43.useLabels)();
|
|
11971
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
11972
|
+
StateMessage,
|
|
11973
|
+
{
|
|
11974
|
+
"data-market-id": marketId || void 0,
|
|
11975
|
+
title: labels.marketDetails.notFoundTitle,
|
|
11976
|
+
description: labels.marketDetails.notFoundDescription,
|
|
11977
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(SearchEmptyIcon, {}),
|
|
11978
|
+
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
11979
|
+
}
|
|
11980
|
+
);
|
|
11981
|
+
};
|
|
11982
|
+
var MarketDetailsContent = ({
|
|
11983
|
+
venueMarkets,
|
|
11984
|
+
marketId,
|
|
11985
|
+
title: title2,
|
|
11986
|
+
image,
|
|
11987
|
+
isOpened: controlledIsOpened = marketDetailsDefaultIsOpened,
|
|
11988
|
+
onOpenChange,
|
|
11989
|
+
defaultTab,
|
|
11990
|
+
defaultOutcomeLabel,
|
|
11991
|
+
orderBookDepth = orderBookRowLimitDefault,
|
|
11992
|
+
ariaLabel,
|
|
11993
|
+
classNames,
|
|
11994
|
+
otherContent,
|
|
11995
|
+
headerAccessory,
|
|
11996
|
+
compactHeader = false,
|
|
11997
|
+
subtitleOverride,
|
|
11998
|
+
headerOutcomeVariant,
|
|
11999
|
+
headerOutcomeItemsOverride,
|
|
12000
|
+
onOutcomeSelect,
|
|
12001
|
+
live,
|
|
12002
|
+
midpointsFallback,
|
|
12003
|
+
midpointsFallbackVenues,
|
|
12004
|
+
suppressOutcomeFallbackSelection,
|
|
12005
|
+
midpointsResult
|
|
12006
|
+
}) => {
|
|
12007
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
12008
|
+
const config = (0, import_hooks43.useSdkUiConfig)();
|
|
12009
|
+
const {
|
|
12010
|
+
features: { enableAnimations },
|
|
12011
|
+
formatting: { formatPercent }
|
|
12012
|
+
} = config;
|
|
12013
|
+
const labels = (0, import_hooks43.useLabels)();
|
|
12014
|
+
const tradingContext = (0, import_hooks43.useEventTradingContext)();
|
|
12015
|
+
const detailsContentId = (0, import_react20.useId)();
|
|
12016
|
+
const tradeSide = (_a = tradingContext == null ? void 0 : tradingContext.tradeSide) != null ? _a : "buy";
|
|
12017
|
+
const resolvedMarket = (0, import_react20.useMemo)(() => {
|
|
12018
|
+
return resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
12019
|
+
}, [venueMarkets, marketId]);
|
|
12020
|
+
const clusterVenueMarkets = resolvedMarket == null ? void 0 : resolvedMarket.venueMarkets;
|
|
12021
|
+
const wsLivePrices = (0, import_hooks43.useLiveOutcomePrices)(clusterVenueMarkets);
|
|
12022
|
+
const wsBestPrices = (0, import_hooks43.useLiveBestPrices)(clusterVenueMarkets);
|
|
12023
|
+
const wsBestCandidates = (0, import_hooks43.useLiveBestPriceCandidates)(clusterVenueMarkets);
|
|
12024
|
+
const scopedResolvedMarket = (0, import_react20.useMemo)(() => {
|
|
12025
|
+
var _a2, _b2;
|
|
12026
|
+
if (!resolvedMarket) return null;
|
|
12027
|
+
return (_b2 = (_a2 = resolvedMarket.venueMarkets.find((venueMarket) => venueMarket.id === resolvedMarket.id)) != null ? _a2 : resolvedMarket.venueMarkets[0]) != null ? _b2 : null;
|
|
12028
|
+
}, [resolvedMarket]);
|
|
12029
|
+
const isResolvedMarket = (0, import_hooks43.resolveMarketTradingState)(scopedResolvedMarket).kind === "resolved";
|
|
12030
|
+
(0, import_hooks43.useEventOrderbookData)(
|
|
12031
|
+
isResolvedMarket ? [] : resolvedMarket == null ? void 0 : resolvedMarket.venueMarkets,
|
|
12032
|
+
(_b = scopedResolvedMarket == null ? void 0 : scopedResolvedMarket.id) != null ? _b : null
|
|
12033
|
+
);
|
|
12034
|
+
const clusterMidpointResult = midpointsResult != null ? midpointsResult : {
|
|
12035
|
+
prices: /* @__PURE__ */ new Map(),
|
|
12036
|
+
bestMidpointsByOutcomeId: /* @__PURE__ */ new Map(),
|
|
12037
|
+
venueByOutcomeId: /* @__PURE__ */ new Map(),
|
|
12038
|
+
bestPrices: /* @__PURE__ */ new Map(),
|
|
12039
|
+
bestPriceVenuesByOutcomeId: /* @__PURE__ */ new Map(),
|
|
12040
|
+
isLoading: false,
|
|
12041
|
+
bestMidpoint: void 0,
|
|
12042
|
+
bestMidpointVenue: void 0
|
|
12043
|
+
};
|
|
12044
|
+
const clusterMidpoints = (_c = clusterMidpointResult.bestMidpointsByOutcomeId) != null ? _c : clusterMidpointResult.prices;
|
|
12045
|
+
const clusterBestMidpointsByOutcomeId = clusterMidpoints;
|
|
12046
|
+
const clusterVenueByOutcomeId = clusterMidpointResult.venueByOutcomeId;
|
|
12047
|
+
const clusterBestMidpoint = clusterMidpointResult.bestMidpoint;
|
|
12048
|
+
const clusterBestMidpointVenue = clusterMidpointResult.bestMidpointVenue;
|
|
12049
|
+
const clusterBestPricesRest = clusterMidpointResult.bestPrices;
|
|
12050
|
+
const clusterBestPrices = (0, import_react20.useMemo)(
|
|
12051
|
+
() => (0, import_hooks43.mergeBestPricesPreferringLive)(clusterBestPricesRest, wsBestPrices),
|
|
12052
|
+
[clusterBestPricesRest, wsBestPrices]
|
|
12053
|
+
);
|
|
12054
|
+
const clusterBestPriceVenuesByOutcomeId = clusterMidpointResult.bestPriceVenuesByOutcomeId;
|
|
12055
|
+
const clusterMidpointMarkets = (0, import_react20.useMemo)(() => {
|
|
12056
|
+
var _a2;
|
|
12057
|
+
if (!resolvedMarket) return [];
|
|
12058
|
+
return (_a2 = resolvedMarket.venueMarkets) != null ? _a2 : [];
|
|
12059
|
+
}, [resolvedMarket]);
|
|
12060
|
+
const tradableVenues = (0, import_react20.useMemo)(() => {
|
|
12061
|
+
var _a2;
|
|
12062
|
+
if (clusterMidpointMarkets.length === 0) return null;
|
|
12063
|
+
const set = /* @__PURE__ */ new Set();
|
|
12064
|
+
for (const market of clusterMidpointMarkets) {
|
|
12065
|
+
for (const outcome of (_a2 = market.venueMarketOutcomes) != null ? _a2 : []) {
|
|
12066
|
+
if (clusterMidpoints.has(outcome.id)) {
|
|
12067
|
+
set.add(market.venue);
|
|
12068
|
+
break;
|
|
12069
|
+
}
|
|
12070
|
+
}
|
|
12071
|
+
}
|
|
12072
|
+
if (set.size === 0) return null;
|
|
12073
|
+
return set;
|
|
12074
|
+
}, [clusterMidpointMarkets, clusterMidpoints]);
|
|
12075
|
+
const model = (0, import_react20.useMemo)(() => {
|
|
12076
|
+
return buildMarketDetailsModel({
|
|
12077
|
+
venueMarkets,
|
|
12078
|
+
marketId,
|
|
12079
|
+
title: title2,
|
|
12080
|
+
image,
|
|
12081
|
+
formatCompactCurrency: config.formatting.formatCompactCurrency,
|
|
12082
|
+
labels
|
|
12083
|
+
});
|
|
12084
|
+
}, [config.formatting.formatCompactCurrency, venueMarkets, image, labels, marketId, title2]);
|
|
12085
|
+
const livePrices = (0, import_react20.useMemo)(() => {
|
|
12086
|
+
const merged = /* @__PURE__ */ new Map();
|
|
12087
|
+
if (midpointsFallback == null ? void 0 : midpointsFallback.size) {
|
|
11596
12088
|
for (const [outcomeId, price] of midpointsFallback) {
|
|
11597
12089
|
merged.set(outcomeId, price);
|
|
11598
12090
|
}
|
|
@@ -11605,37 +12097,32 @@ var MarketDetailsContent = ({
|
|
|
11605
12097
|
for (const [k, v] of wsLivePrices) merged.set(k, v);
|
|
11606
12098
|
return merged;
|
|
11607
12099
|
}, [clusterMidpoints, midpointsFallback, wsLivePrices]);
|
|
11608
|
-
const scopedMarketForCard = (0,
|
|
12100
|
+
const scopedMarketForCard = (0, import_react20.useMemo)(() => {
|
|
11609
12101
|
var _a2;
|
|
11610
12102
|
if (!model) return null;
|
|
11611
12103
|
return (_a2 = model.market.venueMarkets.find((venueMarket) => venueMarket.id === model.market.id)) != null ? _a2 : model.primaryVenueMarket;
|
|
11612
12104
|
}, [model]);
|
|
11613
|
-
const marketTradingState = (0,
|
|
11614
|
-
return (0,
|
|
12105
|
+
const marketTradingState = (0, import_react20.useMemo)(() => {
|
|
12106
|
+
return (0, import_hooks43.resolveMarketTradingState)(scopedMarketForCard);
|
|
11615
12107
|
}, [scopedMarketForCard]);
|
|
11616
12108
|
const isOutcomeSelectionLocked = marketTradingState.isTradingDisabled;
|
|
11617
12109
|
const isUpcomingMarket = marketTradingState.kind === "unopened";
|
|
11618
12110
|
const marketStatePresentation = resolveTradingStatePresentation(labels, marketTradingState);
|
|
11619
|
-
const marketDetailsTabs = (0,
|
|
12111
|
+
const marketDetailsTabs = (0, import_react20.useMemo)(() => {
|
|
11620
12112
|
return getMarketDetailsTabs(labels);
|
|
11621
12113
|
}, [labels]);
|
|
11622
|
-
const [selectedTab, setSelectedTab] = (0,
|
|
12114
|
+
const [selectedTab, setSelectedTab] = (0, import_react20.useState)(
|
|
11623
12115
|
() => resolveInitialTab(defaultTab)
|
|
11624
12116
|
);
|
|
11625
|
-
const [isOpened, setIsOpened] = (0,
|
|
11626
|
-
(0,
|
|
12117
|
+
const [isOpened, setIsOpened] = (0, import_react20.useState)(controlledIsOpened);
|
|
12118
|
+
(0, import_react20.useEffect)(() => {
|
|
11627
12119
|
setSelectedTab(resolveInitialTab(defaultTab));
|
|
11628
12120
|
}, [defaultTab]);
|
|
11629
|
-
(0,
|
|
12121
|
+
(0, import_react20.useEffect)(() => {
|
|
11630
12122
|
setIsOpened(controlledIsOpened);
|
|
11631
12123
|
}, [controlledIsOpened]);
|
|
11632
|
-
const selectedTimeRange = config.chart.selectedChartTimeRange;
|
|
11633
|
-
const setSelectedTimeRange = config.chart.setSelectedChartTimeRange;
|
|
11634
12124
|
const effectiveSelectedTab = isResolvedMarket ? "graph" : selectedTab;
|
|
11635
|
-
const
|
|
11636
|
-
const effectiveChartTimeRange = isResolvedMarket ? "ALL" : chartRangeOverride != null ? chartRangeOverride : selectedTimeRange;
|
|
11637
|
-
const [selectedChartType, setSelectedChartType] = (0, import_react19.useState)("line");
|
|
11638
|
-
const scopedSelectedOutcomeState = (0, import_react19.useMemo)(() => {
|
|
12125
|
+
const scopedSelectedOutcomeState = (0, import_react20.useMemo)(() => {
|
|
11639
12126
|
if (!model) {
|
|
11640
12127
|
return {
|
|
11641
12128
|
outcomeId: null,
|
|
@@ -11655,17 +12142,9 @@ var MarketDetailsContent = ({
|
|
|
11655
12142
|
tradingContext == null ? void 0 : tradingContext.selectedOutcomeId
|
|
11656
12143
|
]);
|
|
11657
12144
|
const selectedOutcomeId = scopedSelectedOutcomeState.outcomeId;
|
|
11658
|
-
const selectedOutcomeLabel = (
|
|
12145
|
+
const selectedOutcomeLabel = (_d = scopedSelectedOutcomeState.outcomeLabel) != null ? _d : null;
|
|
11659
12146
|
const selectOutcome = tradingContext == null ? void 0 : tradingContext.selectOutcome;
|
|
11660
|
-
|
|
11661
|
-
const [chartOutcomeLabel, setChartOutcomeLabel] = (0, import_react19.useState)(selectedOutcomeLabel);
|
|
11662
|
-
(0, import_react19.useEffect)(() => {
|
|
11663
|
-
if (!isOpened) return;
|
|
11664
|
-
if (selectedOutcomeLabel) {
|
|
11665
|
-
setChartOutcomeLabel(selectedOutcomeLabel);
|
|
11666
|
-
}
|
|
11667
|
-
}, [isOpened]);
|
|
11668
|
-
(0, import_react19.useEffect)(() => {
|
|
12147
|
+
(0, import_react20.useEffect)(() => {
|
|
11669
12148
|
var _a2;
|
|
11670
12149
|
if (!isOpened || !model) return;
|
|
11671
12150
|
if (isOutcomeSelectionLocked) return;
|
|
@@ -11689,31 +12168,38 @@ var MarketDetailsContent = ({
|
|
|
11689
12168
|
tradingContext == null ? void 0 : tradingContext.selectedMarketId,
|
|
11690
12169
|
selectOutcome
|
|
11691
12170
|
]);
|
|
11692
|
-
const
|
|
12171
|
+
const venueMarketIdByVenue = (0, import_react20.useMemo)(
|
|
12172
|
+
() => buildVenueMarketIdByVenue(model == null ? void 0 : model.market.venueMarkets),
|
|
12173
|
+
[model]
|
|
12174
|
+
);
|
|
12175
|
+
const headerOutcomeItems = (0, import_react20.useMemo)(() => {
|
|
11693
12176
|
if (!model) return [];
|
|
11694
|
-
|
|
12177
|
+
if (headerOutcomeItemsOverride) return headerOutcomeItemsOverride;
|
|
12178
|
+
const items = resolveHeaderOutcomeItems(
|
|
12179
|
+
model.market.venueMarkets,
|
|
12180
|
+
scopedMarketForCard,
|
|
12181
|
+
headerOutcomeVariant
|
|
12182
|
+
);
|
|
11695
12183
|
return items.map((item) => {
|
|
11696
12184
|
var _a2;
|
|
11697
12185
|
const fallbackPrice = midpointsFallback == null ? void 0 : midpointsFallback.get(item.id);
|
|
11698
|
-
const
|
|
12186
|
+
const candidate = selectBestOutcomeCandidate({
|
|
11699
12187
|
outcomeId: item.id,
|
|
11700
12188
|
outcomeLabel: item.label,
|
|
11701
12189
|
selection: tradeSide,
|
|
11702
|
-
|
|
11703
|
-
|
|
11704
|
-
|
|
11705
|
-
|
|
11706
|
-
|
|
11707
|
-
const outcomeBestPrice = getDisplayOutcomePrice({
|
|
11708
|
-
outcomeId: item.id,
|
|
11709
|
-
outcomeLabel: item.label,
|
|
11710
|
-
selection: tradeSide,
|
|
11711
|
-
bestPrices: clusterBestPrices,
|
|
12190
|
+
live: wsBestCandidates.get(item.id),
|
|
12191
|
+
restBest: clusterBestPricesRest.get(item.id),
|
|
12192
|
+
restBestVenues: clusterBestPriceVenuesByOutcomeId.get(item.id),
|
|
12193
|
+
restMidpoint: clusterBestMidpointsByOutcomeId.get(item.id),
|
|
12194
|
+
restMidpointVenue: clusterVenueByOutcomeId.get(item.id),
|
|
11712
12195
|
bestMidpoint: clusterBestMidpoint,
|
|
11713
|
-
|
|
11714
|
-
|
|
11715
|
-
|
|
12196
|
+
bestMidpointVenue: clusterBestMidpointVenue,
|
|
12197
|
+
staticPrice: fallbackPrice,
|
|
12198
|
+
staticVenue: midpointsFallbackVenues == null ? void 0 : midpointsFallbackVenues.get(item.id),
|
|
12199
|
+
venueMarketIdByVenue
|
|
11716
12200
|
});
|
|
12201
|
+
const bestVenue = candidate == null ? void 0 : candidate.venue;
|
|
12202
|
+
const outcomeBestPrice = candidate == null ? void 0 : candidate.price;
|
|
11717
12203
|
if (isResolvedMarket) {
|
|
11718
12204
|
const isWinningOutcome = item.id === ((_a2 = marketTradingState.winningOutcome) == null ? void 0 : _a2.id);
|
|
11719
12205
|
return __spreadValues(__spreadProps(__spreadValues({}, item), {
|
|
@@ -11731,19 +12217,22 @@ var MarketDetailsContent = ({
|
|
|
11731
12217
|
clusterBestMidpoint,
|
|
11732
12218
|
clusterBestMidpointVenue,
|
|
11733
12219
|
clusterBestMidpointsByOutcomeId,
|
|
11734
|
-
|
|
12220
|
+
clusterBestPricesRest,
|
|
11735
12221
|
clusterBestPriceVenuesByOutcomeId,
|
|
12222
|
+
headerOutcomeItemsOverride,
|
|
11736
12223
|
model,
|
|
11737
12224
|
scopedMarketForCard,
|
|
12225
|
+
headerOutcomeVariant,
|
|
11738
12226
|
clusterVenueByOutcomeId,
|
|
11739
12227
|
isResolvedMarket,
|
|
11740
|
-
(
|
|
12228
|
+
(_e = marketTradingState.winningOutcome) == null ? void 0 : _e.id,
|
|
11741
12229
|
midpointsFallback,
|
|
11742
12230
|
midpointsFallbackVenues,
|
|
11743
12231
|
tradeSide,
|
|
11744
|
-
|
|
12232
|
+
venueMarketIdByVenue,
|
|
12233
|
+
wsBestCandidates
|
|
11745
12234
|
]);
|
|
11746
|
-
const headlineProbability = (0,
|
|
12235
|
+
const headlineProbability = (0, import_react20.useMemo)(() => {
|
|
11747
12236
|
var _a2, _b2, _c2, _d2;
|
|
11748
12237
|
if (!model || !scopedMarketForCard) return void 0;
|
|
11749
12238
|
if (isResolvedMarket) {
|
|
@@ -11768,7 +12257,7 @@ var MarketDetailsContent = ({
|
|
|
11768
12257
|
fallbackPrice: (_c2 = midpointsFallback == null ? void 0 : midpointsFallback.get(displayOutcome.id)) != null ? _c2 : displayOutcome.price
|
|
11769
12258
|
});
|
|
11770
12259
|
if (referencePrice != null) return referencePrice;
|
|
11771
|
-
return (_d2 = (0,
|
|
12260
|
+
return (_d2 = (0, import_hooks43.findLivePriceById)(wsLivePrices, displayOutcome.id)) != null ? _d2 : displayOutcome.price;
|
|
11772
12261
|
}, [
|
|
11773
12262
|
clusterBestMidpoint,
|
|
11774
12263
|
clusterBestMidpointsByOutcomeId,
|
|
@@ -11779,7 +12268,7 @@ var MarketDetailsContent = ({
|
|
|
11779
12268
|
midpointsFallback,
|
|
11780
12269
|
wsLivePrices
|
|
11781
12270
|
]);
|
|
11782
|
-
const selectedOutcomesByVenue = (0,
|
|
12271
|
+
const selectedOutcomesByVenue = (0, import_react20.useMemo)(() => {
|
|
11783
12272
|
if (!model) return [];
|
|
11784
12273
|
return collectEligibleVenueOutcomes({
|
|
11785
12274
|
venueMarkets: model.market.venueMarkets,
|
|
@@ -11791,74 +12280,10 @@ var MarketDetailsContent = ({
|
|
|
11791
12280
|
selectedOutcomeId
|
|
11792
12281
|
});
|
|
11793
12282
|
}, [model, selectedOutcomeLabel, selectedOutcomeId]);
|
|
11794
|
-
const resolvedChartOutcomeLabel = chartOutcomeLabel != null ? chartOutcomeLabel : selectedOutcomeLabel;
|
|
11795
|
-
const chartSelectedOutcomeId = selectedOutcomeId && resolvedChartOutcomeLabel === selectedOutcomeLabel ? selectedOutcomeId : null;
|
|
11796
|
-
const chartOutcomesByVenue = (0, import_react19.useMemo)(() => {
|
|
11797
|
-
if (!model) return [];
|
|
11798
|
-
return resolveChartVenueOutcomes({
|
|
11799
|
-
eligibleVenueOutcomes: collectEligibleVenueOutcomes({
|
|
11800
|
-
venueMarkets: model.market.venueMarkets,
|
|
11801
|
-
selectedOutcomeLabel: resolvedChartOutcomeLabel,
|
|
11802
|
-
selectedOutcomeId: chartSelectedOutcomeId
|
|
11803
|
-
}),
|
|
11804
|
-
livePrices
|
|
11805
|
-
});
|
|
11806
|
-
}, [livePrices, model, resolvedChartOutcomeLabel, chartSelectedOutcomeId]);
|
|
11807
|
-
const chartEnabled = isOpened && effectiveSelectedTab === "graph";
|
|
11808
12283
|
const orderBookEnabled = isOpened && effectiveSelectedTab === "order-book" && !marketTradingState.isTradingDisabled;
|
|
11809
|
-
const
|
|
11810
|
-
const
|
|
11811
|
-
const
|
|
11812
|
-
const chartPrimaryOutcomeId = (_j = (_i = chartOutcomesByVenue[0]) == null ? void 0 : _i.outcome.id) != null ? _j : null;
|
|
11813
|
-
const chartVenueOutcomeIds = (0, import_react19.useMemo)(() => {
|
|
11814
|
-
return chartOutcomesByVenue.map((item) => item.outcome.id);
|
|
11815
|
-
}, [chartOutcomesByVenue]);
|
|
11816
|
-
const {
|
|
11817
|
-
data: marketChartData,
|
|
11818
|
-
isLoading: isMarketChartLoading,
|
|
11819
|
-
error: marketChartError,
|
|
11820
|
-
refetch: refetchMarketChart
|
|
11821
|
-
} = (0, import_hooks42.useMarketChart)({
|
|
11822
|
-
marketId: chartPrimaryOutcomeId,
|
|
11823
|
-
venueMarketIds: chartVenueOutcomeIds,
|
|
11824
|
-
interval: rollingWindow.interval,
|
|
11825
|
-
startTs: rollingWindow.startTs * 1e3,
|
|
11826
|
-
endTs: rollingWindow.endTs * 1e3,
|
|
11827
|
-
enabled: chartEnabled && !!chartPrimaryOutcomeId,
|
|
11828
|
-
live,
|
|
11829
|
-
refetchIntervalMs: rollingWindow.refetchIntervalMs,
|
|
11830
|
-
// Stable cache key per user-selected range so tab/page revisits hit cache
|
|
11831
|
-
// instead of refetching on every bucket-boundary rollover.
|
|
11832
|
-
rangeKey: rollingWindow.range
|
|
11833
|
-
});
|
|
11834
|
-
const hasAutoFallenBackRangeRef = (0, import_react19.useRef)(false);
|
|
11835
|
-
(0, import_react19.useEffect)(() => {
|
|
11836
|
-
hasAutoFallenBackRangeRef.current = false;
|
|
11837
|
-
setChartRangeOverride(null);
|
|
11838
|
-
}, [chartPrimaryOutcomeId]);
|
|
11839
|
-
(0, import_react19.useEffect)(() => {
|
|
11840
|
-
if (!shouldAutoFallbackToAllRange({
|
|
11841
|
-
chartData: marketChartData,
|
|
11842
|
-
isLoading: isMarketChartLoading,
|
|
11843
|
-
error: marketChartError,
|
|
11844
|
-
currentRange: effectiveChartTimeRange,
|
|
11845
|
-
hasAlreadyFallenBack: hasAutoFallenBackRangeRef.current,
|
|
11846
|
-
// Ignore stale bars outside the rolling window — see comment on the
|
|
11847
|
-
// matching effect in event-list-item-details.
|
|
11848
|
-
domainStartTs: rollingWindow.startTs
|
|
11849
|
-
})) {
|
|
11850
|
-
return;
|
|
11851
|
-
}
|
|
11852
|
-
hasAutoFallenBackRangeRef.current = true;
|
|
11853
|
-
setChartRangeOverride("ALL");
|
|
11854
|
-
}, [
|
|
11855
|
-
marketChartData,
|
|
11856
|
-
isMarketChartLoading,
|
|
11857
|
-
marketChartError,
|
|
11858
|
-
effectiveChartTimeRange,
|
|
11859
|
-
rollingWindow.startTs
|
|
11860
|
-
]);
|
|
11861
|
-
const marketOrderbookResult = (0, import_hooks42.useMarketOrderbook)({
|
|
12284
|
+
const primaryVenueMarketId = (_g = (_f = selectedOutcomesByVenue[0]) == null ? void 0 : _f.market.id) != null ? _g : null;
|
|
12285
|
+
const primaryOutcomeId = (_i = (_h = selectedOutcomesByVenue[0]) == null ? void 0 : _h.outcome.id) != null ? _i : null;
|
|
12286
|
+
const marketOrderbookResult = (0, import_hooks43.useMarketOrderbook)({
|
|
11862
12287
|
marketId: primaryVenueMarketId,
|
|
11863
12288
|
enabled: orderBookEnabled && !!primaryVenueMarketId,
|
|
11864
12289
|
venueOutcomes: selectedOutcomesByVenue.map((item) => ({
|
|
@@ -11867,14 +12292,14 @@ var MarketDetailsContent = ({
|
|
|
11867
12292
|
})),
|
|
11868
12293
|
live
|
|
11869
12294
|
});
|
|
11870
|
-
const marketOrderbookDataById = (0,
|
|
12295
|
+
const marketOrderbookDataById = (0, import_react20.useMemo)(() => {
|
|
11871
12296
|
var _a2;
|
|
11872
12297
|
return (_a2 = marketOrderbookResult.dataById) != null ? _a2 : {};
|
|
11873
12298
|
}, [marketOrderbookResult]);
|
|
11874
12299
|
const isOrderBookLoading = marketOrderbookResult.isLoading;
|
|
11875
12300
|
const orderBookError = marketOrderbookResult.error;
|
|
11876
12301
|
const refetchOrderBook = marketOrderbookResult.refetch;
|
|
11877
|
-
const aggregatedOrderbookRows = (0,
|
|
12302
|
+
const aggregatedOrderbookRows = (0, import_react20.useMemo)(() => {
|
|
11878
12303
|
return mergeVenueOutcomeOrderbooks({
|
|
11879
12304
|
eligibleOutcomes: selectedOutcomesByVenue,
|
|
11880
12305
|
orderbooksByOutcomeId: marketOrderbookDataById
|
|
@@ -11882,7 +12307,7 @@ var MarketDetailsContent = ({
|
|
|
11882
12307
|
}, [marketOrderbookDataById, selectedOutcomesByVenue]);
|
|
11883
12308
|
const askRows = aggregatedOrderbookRows.askRows;
|
|
11884
12309
|
const bidRows = aggregatedOrderbookRows.bidRows;
|
|
11885
|
-
const unifiedEntries = (0,
|
|
12310
|
+
const unifiedEntries = (0, import_react20.useMemo)(() => {
|
|
11886
12311
|
return resolveUnifiedOrderBookEntries({
|
|
11887
12312
|
askRows,
|
|
11888
12313
|
bidRows,
|
|
@@ -11890,7 +12315,7 @@ var MarketDetailsContent = ({
|
|
|
11890
12315
|
spread: aggregatedOrderbookRows.spread
|
|
11891
12316
|
});
|
|
11892
12317
|
}, [aggregatedOrderbookRows.midpoint, aggregatedOrderbookRows.spread, askRows, bidRows]);
|
|
11893
|
-
const orderbookSnapshotKey = (0,
|
|
12318
|
+
const orderbookSnapshotKey = (0, import_react20.useMemo)(() => {
|
|
11894
12319
|
if (selectedOutcomesByVenue.length === 0) return null;
|
|
11895
12320
|
return selectedOutcomesByVenue.map((item) => {
|
|
11896
12321
|
var _a2, _b2;
|
|
@@ -11898,52 +12323,7 @@ var MarketDetailsContent = ({
|
|
|
11898
12323
|
return `${item.outcomeId}:${snapshotVersion}`;
|
|
11899
12324
|
}).join("|");
|
|
11900
12325
|
}, [marketOrderbookDataById, selectedOutcomesByVenue]);
|
|
11901
|
-
const
|
|
11902
|
-
return filterChartVenueOutcomesByRenderableVenues({
|
|
11903
|
-
chartData: marketChartData,
|
|
11904
|
-
venueOutcomes: chartOutcomesByVenue
|
|
11905
|
-
});
|
|
11906
|
-
}, [chartOutcomesByVenue, marketChartData]);
|
|
11907
|
-
const graphSeries = (0, import_react19.useMemo)(() => {
|
|
11908
|
-
var _a2, _b2, _c2, _d2;
|
|
11909
|
-
const baseColor = resolveSeriesColor(
|
|
11910
|
-
(_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",
|
|
11911
|
-
0,
|
|
11912
|
-
isDarkTheme
|
|
11913
|
-
);
|
|
11914
|
-
const domainStartTs = rollingWindow.startTs;
|
|
11915
|
-
return resolveMarketChartDisplaySeries({
|
|
11916
|
-
chartData: marketChartData,
|
|
11917
|
-
selectedVenue: selectedGraphVenue,
|
|
11918
|
-
transformProbability: (value) => value
|
|
11919
|
-
}).map((seriesItem) => {
|
|
11920
|
-
return {
|
|
11921
|
-
id: `${resolvedChartOutcomeLabel != null ? resolvedChartOutcomeLabel : "graph"}-${seriesItem.venue}-${chartPrimaryOutcomeId != null ? chartPrimaryOutcomeId : "chart"}`,
|
|
11922
|
-
venue: selectedGraphVenue != null ? selectedGraphVenue : seriesItem.venue,
|
|
11923
|
-
color: seriesItem.venue === "aggregate" ? baseColor : resolveSeriesColor(seriesItem.venue, 0, isDarkTheme),
|
|
11924
|
-
// Constrain to the rolling [nowSec - rangeSeconds, …] domain so stale
|
|
11925
|
-
// bars don't bleed in across a range shrink or long mount.
|
|
11926
|
-
points: seriesItem.points.filter((point) => point.time >= domainStartTs)
|
|
11927
|
-
};
|
|
11928
|
-
});
|
|
11929
|
-
}, [
|
|
11930
|
-
isDarkTheme,
|
|
11931
|
-
chartPrimaryOutcomeId,
|
|
11932
|
-
marketChartData,
|
|
11933
|
-
rollingWindow.startTs,
|
|
11934
|
-
selectedGraphVenue,
|
|
11935
|
-
resolvedChartOutcomeLabel,
|
|
11936
|
-
chartAvailableOutcomesByVenue,
|
|
11937
|
-
chartOutcomesByVenue
|
|
11938
|
-
]);
|
|
11939
|
-
const graphLiveState = (0, import_react19.useMemo)(() => {
|
|
11940
|
-
return resolveMarketChartLiveState({
|
|
11941
|
-
chartData: marketChartData,
|
|
11942
|
-
selectedVenue: selectedGraphVenue,
|
|
11943
|
-
transformProbability: (value) => value
|
|
11944
|
-
});
|
|
11945
|
-
}, [marketChartData, selectedGraphVenue]);
|
|
11946
|
-
const otherRows = (0, import_react19.useMemo)(() => {
|
|
12326
|
+
const otherRows = (0, import_react20.useMemo)(() => {
|
|
11947
12327
|
if (!model) return [];
|
|
11948
12328
|
return resolveOtherTabRows(model.market, labels);
|
|
11949
12329
|
}, [labels, model]);
|
|
@@ -11953,7 +12333,6 @@ var MarketDetailsContent = ({
|
|
|
11953
12333
|
const isSnapshotUnavailableError = typeof orderBookError === "object" && orderBookError != null && "message" in orderBookError && typeof orderBookError.message === "string" && /^snapshot unavailable for\s+\S+/i.test(orderBookError.message);
|
|
11954
12334
|
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;
|
|
11955
12335
|
const hasNoOrderBook = isOrderBookNotFound && !isMarketResolved || !isOrderBookLoading && !hasOrderBookError && (selectedOutcomesByVenue.length === 0 || aggregatedOrderbookRows.hasNoOrderBook);
|
|
11956
|
-
const hasChartError = !!marketChartError;
|
|
11957
12336
|
const selectHeaderOutcome = ({
|
|
11958
12337
|
item,
|
|
11959
12338
|
shouldNotifyOutcomeSelect = false
|
|
@@ -11961,7 +12340,7 @@ var MarketDetailsContent = ({
|
|
|
11961
12340
|
var _a2, _b2;
|
|
11962
12341
|
if (isOutcomeSelectionLocked) return;
|
|
11963
12342
|
if (item == null ? void 0 : item.id) {
|
|
11964
|
-
const targetMarket = (_a2 =
|
|
12343
|
+
const targetMarket = (_a2 = venueMarkets.find(
|
|
11965
12344
|
(venueMarket) => venueMarket.venueMarketOutcomes.some((outcome) => outcome.id === item.id)
|
|
11966
12345
|
)) != null ? _a2 : null;
|
|
11967
12346
|
if ((targetMarket == null ? void 0 : targetMarket.id) && targetMarket.id !== (tradingContext == null ? void 0 : tradingContext.selectedMarketId)) {
|
|
@@ -12003,23 +12382,14 @@ var MarketDetailsContent = ({
|
|
|
12003
12382
|
if (!marketId) return;
|
|
12004
12383
|
onOpenChange == null ? void 0 : onOpenChange(marketId);
|
|
12005
12384
|
};
|
|
12006
|
-
const handleGraphVenueToggle = (venue) => {
|
|
12007
|
-
setSelectedGraphVenue((currentVenue) => {
|
|
12008
|
-
if (currentVenue === venue) return null;
|
|
12009
|
-
return venue;
|
|
12010
|
-
});
|
|
12011
|
-
};
|
|
12012
12385
|
const handleRetryOrderBook = () => {
|
|
12013
12386
|
void refetchOrderBook();
|
|
12014
12387
|
};
|
|
12015
|
-
const handleRetryMarketChart = () => {
|
|
12016
|
-
void refetchMarketChart();
|
|
12017
|
-
};
|
|
12018
12388
|
const orderbookState = marketTradingState.isTradingDisabled ? {
|
|
12019
12389
|
kind: "disabled",
|
|
12020
12390
|
title: marketStatePresentation.title,
|
|
12021
12391
|
description: marketStatePresentation.description,
|
|
12022
|
-
icon: /* @__PURE__ */ (0,
|
|
12392
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Icon, { name: marketStatePresentation.iconName, className: "h-5 w-5", "aria-hidden": "true" })
|
|
12023
12393
|
} : isOrderBookLoading ? { kind: "loading" } : hasOrderBookError ? {
|
|
12024
12394
|
kind: "error",
|
|
12025
12395
|
title: labels.marketDetails.orderBookUnavailableTitle,
|
|
@@ -12034,22 +12404,27 @@ var MarketDetailsContent = ({
|
|
|
12034
12404
|
title: labels.marketDetails.orderBookEmptyTitle,
|
|
12035
12405
|
description: labels.marketDetails.orderBookEmptyDescription
|
|
12036
12406
|
} : { kind: "data" };
|
|
12037
|
-
(0, import_react19.useEffect)(() => {
|
|
12038
|
-
if (!selectedGraphVenue) {
|
|
12039
|
-
return;
|
|
12040
|
-
}
|
|
12041
|
-
if (chartAvailableOutcomesByVenue.some((item) => item.venue === selectedGraphVenue)) {
|
|
12042
|
-
return;
|
|
12043
|
-
}
|
|
12044
|
-
setSelectedGraphVenue(null);
|
|
12045
|
-
}, [selectedGraphVenue, chartAvailableOutcomesByVenue]);
|
|
12046
12407
|
if (marketId && !resolvedMarket) {
|
|
12047
|
-
return /* @__PURE__ */ (0,
|
|
12408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12409
|
+
MarketDetailsNotFoundState,
|
|
12410
|
+
{
|
|
12411
|
+
marketId,
|
|
12412
|
+
ariaLabel,
|
|
12413
|
+
classNames
|
|
12414
|
+
}
|
|
12415
|
+
);
|
|
12048
12416
|
}
|
|
12049
12417
|
if (!model) {
|
|
12050
|
-
return /* @__PURE__ */ (0,
|
|
12418
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12419
|
+
MarketDetailsUnavailableState,
|
|
12420
|
+
{
|
|
12421
|
+
marketId,
|
|
12422
|
+
ariaLabel,
|
|
12423
|
+
classNames
|
|
12424
|
+
}
|
|
12425
|
+
);
|
|
12051
12426
|
}
|
|
12052
|
-
return /* @__PURE__ */ (0,
|
|
12427
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12053
12428
|
Card,
|
|
12054
12429
|
{
|
|
12055
12430
|
className: cn(
|
|
@@ -12060,9 +12435,10 @@ var MarketDetailsContent = ({
|
|
|
12060
12435
|
classNames == null ? void 0 : classNames.root
|
|
12061
12436
|
),
|
|
12062
12437
|
children: [
|
|
12063
|
-
/* @__PURE__ */ (0,
|
|
12438
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12064
12439
|
"div",
|
|
12065
12440
|
{
|
|
12441
|
+
"data-market-id": marketId || void 0,
|
|
12066
12442
|
className: cn(
|
|
12067
12443
|
"agg-market-card-header",
|
|
12068
12444
|
"flex flex-col items-stretch gap-3 px-5 py-3 md:flex-row md:flex-nowrap md:items-center md:justify-between",
|
|
@@ -12070,7 +12446,7 @@ var MarketDetailsContent = ({
|
|
|
12070
12446
|
classNames == null ? void 0 : classNames.header
|
|
12071
12447
|
),
|
|
12072
12448
|
children: [
|
|
12073
|
-
/* @__PURE__ */ (0,
|
|
12449
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12074
12450
|
"button",
|
|
12075
12451
|
{
|
|
12076
12452
|
className: cn(
|
|
@@ -12084,17 +12460,17 @@ var MarketDetailsContent = ({
|
|
|
12084
12460
|
"aria-controls": detailsContentId,
|
|
12085
12461
|
"aria-label": isOpened ? labels.marketDetails.toggleCloseDetailsAria(model.title) : labels.marketDetails.toggleOpenDetailsAria(model.title),
|
|
12086
12462
|
children: [
|
|
12087
|
-
/* @__PURE__ */ (0,
|
|
12088
|
-
/* @__PURE__ */ (0,
|
|
12463
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "agg-market-summary flex min-w-24 flex-1 items-center gap-3 md:gap-4", children: [
|
|
12464
|
+
!compactHeader ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12089
12465
|
RemoteImage,
|
|
12090
12466
|
{
|
|
12091
|
-
src: (0,
|
|
12467
|
+
src: (0, import_hooks43.optimizedImageUrl)(model.image, 60),
|
|
12092
12468
|
alt: "",
|
|
12093
12469
|
className: "agg-market-image size-12 rounded-agg-lg object-cover md:size-[60px]"
|
|
12094
12470
|
}
|
|
12095
|
-
),
|
|
12096
|
-
/* @__PURE__ */ (0,
|
|
12097
|
-
/* @__PURE__ */ (0,
|
|
12471
|
+
) : null,
|
|
12472
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "flex min-w-24 flex-col", children: [
|
|
12473
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Tooltip, { content: model.title, side: "top", children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "min-w-0", children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12098
12474
|
Typography,
|
|
12099
12475
|
{
|
|
12100
12476
|
as: "h3",
|
|
@@ -12103,16 +12479,16 @@ var MarketDetailsContent = ({
|
|
|
12103
12479
|
children: model.title
|
|
12104
12480
|
}
|
|
12105
12481
|
) }) }),
|
|
12106
|
-
/* @__PURE__ */ (0,
|
|
12482
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12107
12483
|
Typography,
|
|
12108
12484
|
{
|
|
12109
12485
|
variant: "label",
|
|
12110
12486
|
className: "agg-market-meta truncate text-agg-muted-foreground",
|
|
12111
|
-
children: model.subtitle
|
|
12487
|
+
children: subtitleOverride != null ? subtitleOverride : model.subtitle
|
|
12112
12488
|
}
|
|
12113
12489
|
) }),
|
|
12114
|
-
marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */ (0,
|
|
12115
|
-
/* @__PURE__ */ (0,
|
|
12490
|
+
marketTradingState.isTradingDisabled && marketTradingState.kind !== "resolved" && !isUpcomingMarket ? /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "mt-2 flex flex-wrap items-center gap-2 justify-center md:justify-start", children: [
|
|
12491
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12116
12492
|
"span",
|
|
12117
12493
|
{
|
|
12118
12494
|
className: cn(
|
|
@@ -12120,7 +12496,7 @@ var MarketDetailsContent = ({
|
|
|
12120
12496
|
resolveTradingStateBadgeClassName(marketTradingState.kind)
|
|
12121
12497
|
),
|
|
12122
12498
|
children: [
|
|
12123
|
-
/* @__PURE__ */ (0,
|
|
12499
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12124
12500
|
Icon,
|
|
12125
12501
|
{
|
|
12126
12502
|
name: marketStatePresentation.iconName,
|
|
@@ -12128,20 +12504,20 @@ var MarketDetailsContent = ({
|
|
|
12128
12504
|
className: "h-3.5 w-3.5"
|
|
12129
12505
|
}
|
|
12130
12506
|
),
|
|
12131
|
-
/* @__PURE__ */ (0,
|
|
12507
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { children: marketStatePresentation.badgeLabel })
|
|
12132
12508
|
]
|
|
12133
12509
|
}
|
|
12134
12510
|
),
|
|
12135
|
-
marketStatePresentation.timestampLabel ? /* @__PURE__ */ (0,
|
|
12136
|
-
marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */ (0,
|
|
12511
|
+
marketStatePresentation.timestampLabel ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.timestampLabel }) : null,
|
|
12512
|
+
marketStatePresentation.winningOutcomeLabel ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "label", className: "text-agg-muted-foreground", children: marketStatePresentation.winningOutcomeLabel }) : null
|
|
12137
12513
|
] }) : null
|
|
12138
12514
|
] })
|
|
12139
12515
|
] }),
|
|
12140
|
-
/* @__PURE__ */ (0,
|
|
12516
|
+
!compactHeader ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { as: "div", variant: "heading", className: "agg-market-headline shrink-0", children: formatProbabilityPercent(headlineProbability, formatPercent) }) : null
|
|
12141
12517
|
]
|
|
12142
12518
|
}
|
|
12143
12519
|
),
|
|
12144
|
-
marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */ (0,
|
|
12520
|
+
marketTradingState.kind === "resolved" && marketTradingState.winningOutcome ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12145
12521
|
"span",
|
|
12146
12522
|
{
|
|
12147
12523
|
className: cn(
|
|
@@ -12154,7 +12530,7 @@ var MarketDetailsContent = ({
|
|
|
12154
12530
|
"border-transparent bg-agg-secondary-hover"
|
|
12155
12531
|
),
|
|
12156
12532
|
children: [
|
|
12157
|
-
/* @__PURE__ */ (0,
|
|
12533
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12158
12534
|
Icon,
|
|
12159
12535
|
{
|
|
12160
12536
|
name: marketTradingState.winningOutcome.label.trim().toLowerCase() === "yes" ? "check-circle" : "cross-circle",
|
|
@@ -12165,10 +12541,10 @@ var MarketDetailsContent = ({
|
|
|
12165
12541
|
)
|
|
12166
12542
|
}
|
|
12167
12543
|
),
|
|
12168
|
-
/* @__PURE__ */ (0,
|
|
12544
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "body", children: labels.eventMarketPage.resolvedOutcome(marketTradingState.winningOutcome.label) })
|
|
12169
12545
|
]
|
|
12170
12546
|
}
|
|
12171
|
-
) }) : isUpcomingMarket ? /* @__PURE__ */ (0,
|
|
12547
|
+
) }) : isUpcomingMarket ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "agg-outcomes flex w-full items-center justify-end md:w-auto md:shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12172
12548
|
"span",
|
|
12173
12549
|
{
|
|
12174
12550
|
className: cn(
|
|
@@ -12177,7 +12553,7 @@ var MarketDetailsContent = ({
|
|
|
12177
12553
|
resolveTradingStateBadgeClassName(marketTradingState.kind)
|
|
12178
12554
|
),
|
|
12179
12555
|
children: [
|
|
12180
|
-
/* @__PURE__ */ (0,
|
|
12556
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12181
12557
|
Icon,
|
|
12182
12558
|
{
|
|
12183
12559
|
name: marketStatePresentation.iconName,
|
|
@@ -12186,10 +12562,10 @@ var MarketDetailsContent = ({
|
|
|
12186
12562
|
"aria-hidden": "true"
|
|
12187
12563
|
}
|
|
12188
12564
|
),
|
|
12189
|
-
/* @__PURE__ */ (0,
|
|
12565
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("span", { children: marketStatePresentation.badgeLabel })
|
|
12190
12566
|
]
|
|
12191
12567
|
}
|
|
12192
|
-
) }) : /* @__PURE__ */ (0,
|
|
12568
|
+
) }) : /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12193
12569
|
"div",
|
|
12194
12570
|
{
|
|
12195
12571
|
className: "agg-outcomes flex w-full flex-wrap gap-2 md:w-auto md:shrink-0 md:flex-nowrap",
|
|
@@ -12198,9 +12574,10 @@ var MarketDetailsContent = ({
|
|
|
12198
12574
|
onKeyDown: (eventToHandle) => handleOutcomeKeyDown(eventToHandle),
|
|
12199
12575
|
children: headerOutcomeItems.map((item) => {
|
|
12200
12576
|
const isActiveOutcome = item.id === selectedOutcomeId;
|
|
12201
|
-
return /* @__PURE__ */ (0,
|
|
12577
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12202
12578
|
MarketDetailsOutcomeButton,
|
|
12203
12579
|
{
|
|
12580
|
+
enforceFixedWidth: headerOutcomeVariant != null,
|
|
12204
12581
|
item,
|
|
12205
12582
|
isSelected: isActiveOutcome,
|
|
12206
12583
|
enableAnimations: config.features.enableAnimations,
|
|
@@ -12224,7 +12601,8 @@ var MarketDetailsContent = ({
|
|
|
12224
12601
|
]
|
|
12225
12602
|
}
|
|
12226
12603
|
),
|
|
12227
|
-
/* @__PURE__ */ (0,
|
|
12604
|
+
headerAccessory ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "agg-market-card-accessory border-t border-agg-separator", children: headerAccessory }) : null,
|
|
12605
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12228
12606
|
"div",
|
|
12229
12607
|
{
|
|
12230
12608
|
id: detailsContentId,
|
|
@@ -12238,9 +12616,9 @@ var MarketDetailsContent = ({
|
|
|
12238
12616
|
isOpened ? "grid-rows-[1fr] opacity-100" : "pointer-events-none grid-rows-[0fr] opacity-0"
|
|
12239
12617
|
),
|
|
12240
12618
|
"aria-hidden": !isOpened,
|
|
12241
|
-
children: /* @__PURE__ */ (0,
|
|
12242
|
-
/* @__PURE__ */ (0,
|
|
12243
|
-
/* @__PURE__ */ (0,
|
|
12619
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: "min-h-0", children: [
|
|
12620
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "h-px w-full bg-agg-separator" }),
|
|
12621
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12244
12622
|
"div",
|
|
12245
12623
|
{
|
|
12246
12624
|
className: cn(
|
|
@@ -12254,8 +12632,8 @@ var MarketDetailsContent = ({
|
|
|
12254
12632
|
) : "translate-y-5 opacity-0"
|
|
12255
12633
|
),
|
|
12256
12634
|
children: [
|
|
12257
|
-
!isResolvedMarket ? /* @__PURE__ */ (0,
|
|
12258
|
-
/* @__PURE__ */ (0,
|
|
12635
|
+
!isResolvedMarket ? /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment, { children: [
|
|
12636
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: cn("block", classNames == null ? void 0 : classNames.tabs), children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12259
12637
|
Tabs,
|
|
12260
12638
|
{
|
|
12261
12639
|
ariaLabel: labels.marketDetails.tabsAria,
|
|
@@ -12266,10 +12644,10 @@ var MarketDetailsContent = ({
|
|
|
12266
12644
|
className: "agg-market-tabs w-full px-5"
|
|
12267
12645
|
}
|
|
12268
12646
|
) }),
|
|
12269
|
-
/* @__PURE__ */ (0,
|
|
12647
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "h-px w-full bg-agg-separator" })
|
|
12270
12648
|
] }) : null,
|
|
12271
|
-
/* @__PURE__ */ (0,
|
|
12272
|
-
effectiveSelectedTab === "order-book" ? /* @__PURE__ */ (0,
|
|
12649
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: cn("agg-market-card-body p-0", classNames == null ? void 0 : classNames.content), children: [
|
|
12650
|
+
effectiveSelectedTab === "order-book" ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12273
12651
|
OrderbookWithStates,
|
|
12274
12652
|
{
|
|
12275
12653
|
state: orderbookState,
|
|
@@ -12295,159 +12673,29 @@ var MarketDetailsContent = ({
|
|
|
12295
12673
|
wrapperClassName: classNames == null ? void 0 : classNames.orderBook
|
|
12296
12674
|
}
|
|
12297
12675
|
) : null,
|
|
12298
|
-
effectiveSelectedTab === "graph" ? /* @__PURE__ */ (0,
|
|
12299
|
-
|
|
12300
|
-
|
|
12301
|
-
|
|
12302
|
-
|
|
12303
|
-
|
|
12304
|
-
|
|
12305
|
-
|
|
12306
|
-
|
|
12307
|
-
|
|
12308
|
-
|
|
12309
|
-
|
|
12310
|
-
|
|
12311
|
-
|
|
12312
|
-
|
|
12313
|
-
|
|
12314
|
-
|
|
12315
|
-
liveCandle: selectedChartType === "candlestick" ? (_k = graphLiveState.liveCandle) != null ? _k : void 0 : void 0,
|
|
12316
|
-
lineValue: graphLiveState.lineValue,
|
|
12317
|
-
classNames: { root: "agg-chart-region w-full" },
|
|
12318
|
-
showSeriesControls: chartAvailableOutcomesByVenue.length > 0 || headerOutcomeItems.length > 0,
|
|
12319
|
-
renderSeriesControls: () => {
|
|
12320
|
-
var _a2, _b2, _c2, _d2;
|
|
12321
|
-
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "agg-chart-toolbar w-full flex flex-col gap-4 md:flex-row md:items-center md:justify-between", children: [
|
|
12322
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "agg-market-venues flex flex-wrap gap-2", children: chartAvailableOutcomesByVenue.map((item) => {
|
|
12323
|
-
var _a3;
|
|
12324
|
-
const probability = formatProbabilityPercent(
|
|
12325
|
-
(_a3 = wsLivePrices.get(item.outcome.id)) != null ? _a3 : item.outcome.price,
|
|
12326
|
-
formatPercent
|
|
12327
|
-
);
|
|
12328
|
-
const isActiveVenue = selectedGraphVenue === item.venue;
|
|
12329
|
-
return /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
12330
|
-
"button",
|
|
12331
|
-
{
|
|
12332
|
-
type: "button",
|
|
12333
|
-
"aria-label": `${item.venue} ${probability}`,
|
|
12334
|
-
"aria-pressed": isActiveVenue,
|
|
12335
|
-
className: cn(
|
|
12336
|
-
"agg-market-venue",
|
|
12337
|
-
"cursor-pointer",
|
|
12338
|
-
"inline-flex items-center gap-2 rounded-agg-full border px-4 py-2",
|
|
12339
|
-
"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",
|
|
12340
|
-
isActiveVenue ? "border-agg-primary bg-agg-secondary" : "border-transparent bg-agg-secondary-hover"
|
|
12341
|
-
),
|
|
12342
|
-
onClick: (e) => {
|
|
12343
|
-
e.preventDefault();
|
|
12344
|
-
e.stopPropagation();
|
|
12345
|
-
handleGraphVenueToggle(item.venue);
|
|
12346
|
-
},
|
|
12347
|
-
children: [
|
|
12348
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(VenueLogo, { venue: item.venue, size: "small" }),
|
|
12349
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { className: "text-agg-base leading-agg-6 text-agg-foreground", children: probability })
|
|
12350
|
-
]
|
|
12351
|
-
},
|
|
12352
|
-
`${item.market.id}-${item.outcome.id}`
|
|
12353
|
-
);
|
|
12354
|
-
}) }),
|
|
12355
|
-
!isOutcomeSelectionLocked ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12356
|
-
SwitchButton,
|
|
12357
|
-
{
|
|
12358
|
-
ariaLabel: labels.marketDetails.outcomeSelectorAria,
|
|
12359
|
-
className: "agg-outcome-switch w-full shrink-0 md:w-fit",
|
|
12360
|
-
value: (_d2 = (_c2 = (_a2 = headerOutcomeItems.find(
|
|
12361
|
-
(outcome) => outcome.label === resolvedChartOutcomeLabel
|
|
12362
|
-
)) == null ? void 0 : _a2.id) != null ? _c2 : (_b2 = headerOutcomeItems[0]) == null ? void 0 : _b2.id) != null ? _d2 : "",
|
|
12363
|
-
onValueChange: (outcomeId) => {
|
|
12364
|
-
const outcome = headerOutcomeItems.find(
|
|
12365
|
-
(headerOutcomeItem) => headerOutcomeItem.id === outcomeId
|
|
12366
|
-
);
|
|
12367
|
-
if (!outcome) return;
|
|
12368
|
-
setChartOutcomeLabel(outcome.label);
|
|
12369
|
-
},
|
|
12370
|
-
options: headerOutcomeItems.map((outcome) => {
|
|
12371
|
-
var _a3, _b3;
|
|
12372
|
-
const price = outcome.probability;
|
|
12373
|
-
return {
|
|
12374
|
-
value: outcome.id,
|
|
12375
|
-
label: `${(_a3 = outcome == null ? void 0 : outcome.title) != null ? _a3 : outcome.label} ${formatProbabilityCents(price)}`,
|
|
12376
|
-
ariaLabel: `${(_b3 = outcome == null ? void 0 : outcome.title) != null ? _b3 : outcome.label} ${formatProbabilityCents(price)}`
|
|
12377
|
-
};
|
|
12378
|
-
})
|
|
12379
|
-
}
|
|
12380
|
-
) : null
|
|
12381
|
-
] });
|
|
12382
|
-
}
|
|
12383
|
-
}
|
|
12384
|
-
),
|
|
12385
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
12386
|
-
"div",
|
|
12387
|
-
{
|
|
12388
|
-
className: cn(
|
|
12389
|
-
"agg-chart-footer",
|
|
12390
|
-
"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",
|
|
12391
|
-
classNames == null ? void 0 : classNames.footer
|
|
12392
|
-
),
|
|
12393
|
-
children: [
|
|
12394
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)("span", { children: typeof model.market.volume !== "number" ? labels.marketDetails.volumeUnavailable : model.market.volume > 0 ? `${config.formatting.formatCompactCurrency(model.market.volume)} ${labels.marketDetails.meta.volumeSuffix}` : "" }),
|
|
12395
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsxs)("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
|
|
12396
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12397
|
-
ChartTypeSwitch,
|
|
12398
|
-
{
|
|
12399
|
-
className: "agg-chart-type-switch shrink-0",
|
|
12400
|
-
value: selectedChartType,
|
|
12401
|
-
onValueChange: setSelectedChartType
|
|
12402
|
-
}
|
|
12403
|
-
),
|
|
12404
|
-
/* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12405
|
-
"span",
|
|
12406
|
-
{
|
|
12407
|
-
"aria-hidden": "true",
|
|
12408
|
-
className: "hidden h-4 w-px bg-agg-separator md:block"
|
|
12409
|
-
}
|
|
12410
|
-
),
|
|
12411
|
-
import_hooks42.CHART_TIME_RANGES.map((timeRange) => {
|
|
12412
|
-
const isActive = effectiveChartTimeRange === timeRange;
|
|
12413
|
-
const isDisabled = isResolvedMarket && timeRange !== "ALL";
|
|
12414
|
-
return /* @__PURE__ */ (0, import_jsx_runtime129.jsx)(
|
|
12415
|
-
"button",
|
|
12416
|
-
{
|
|
12417
|
-
type: "button",
|
|
12418
|
-
disabled: isDisabled,
|
|
12419
|
-
className: cn(
|
|
12420
|
-
"agg-chart-time-range-trigger",
|
|
12421
|
-
"cursor-pointer text-agg-sm leading-agg-5",
|
|
12422
|
-
isDisabled && "cursor-not-allowed opacity-50",
|
|
12423
|
-
isActive ? "font-agg-bold text-agg-foreground" : "font-agg-normal text-agg-muted-foreground"
|
|
12424
|
-
),
|
|
12425
|
-
"aria-pressed": isActive,
|
|
12426
|
-
"aria-disabled": isDisabled,
|
|
12427
|
-
onClick: (e) => {
|
|
12428
|
-
e.preventDefault();
|
|
12429
|
-
e.stopPropagation();
|
|
12430
|
-
if (isDisabled) return;
|
|
12431
|
-
setChartRangeOverride(null);
|
|
12432
|
-
setSelectedTimeRange(timeRange);
|
|
12433
|
-
},
|
|
12434
|
-
children: timeRange === "ALL" ? labels.eventItemDetails.allTimeRange : timeRange
|
|
12435
|
-
},
|
|
12436
|
-
timeRange
|
|
12437
|
-
);
|
|
12438
|
-
})
|
|
12439
|
-
] })
|
|
12440
|
-
]
|
|
12441
|
-
}
|
|
12442
|
-
)
|
|
12443
|
-
] }) : null,
|
|
12444
|
-
effectiveSelectedTab === "other" ? /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ (0, import_jsx_runtime129.jsx)("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime129.jsxs)(
|
|
12676
|
+
isOpened && effectiveSelectedTab === "graph" ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12677
|
+
MarketDetailsGraphPanel,
|
|
12678
|
+
{
|
|
12679
|
+
venueMarkets: model.market.venueMarkets,
|
|
12680
|
+
selectedOutcomeLabel,
|
|
12681
|
+
selectedOutcomeId,
|
|
12682
|
+
livePrices,
|
|
12683
|
+
wsLivePrices,
|
|
12684
|
+
headerOutcomeItems,
|
|
12685
|
+
isResolvedMarket,
|
|
12686
|
+
isOutcomeSelectionLocked,
|
|
12687
|
+
volume: model.market.volume,
|
|
12688
|
+
live,
|
|
12689
|
+
classNames: { graph: classNames == null ? void 0 : classNames.graph, footer: classNames == null ? void 0 : classNames.footer }
|
|
12690
|
+
}
|
|
12691
|
+
) : null,
|
|
12692
|
+
effectiveSelectedTab === "other" ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "agg-market-meta flex flex-col gap-4", children: otherContent != null ? otherContent : /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { className: "agg-market-meta-list grid grid-cols-1 gap-3", children: otherRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)(
|
|
12445
12693
|
"div",
|
|
12446
12694
|
{
|
|
12447
12695
|
className: "agg-market-meta-row flex items-center justify-between rounded-agg-xl bg-agg-secondary-hover px-4 py-3",
|
|
12448
12696
|
children: [
|
|
12449
|
-
/* @__PURE__ */ (0,
|
|
12450
|
-
/* @__PURE__ */ (0,
|
|
12697
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "label", className: "text-agg-muted-foreground", children: row.label }),
|
|
12698
|
+
/* @__PURE__ */ (0, import_jsx_runtime130.jsx)(Typography, { variant: "body", className: "text-right", children: row.value })
|
|
12451
12699
|
]
|
|
12452
12700
|
},
|
|
12453
12701
|
row.label
|
|
@@ -12465,9 +12713,9 @@ var MarketDetailsContent = ({
|
|
|
12465
12713
|
};
|
|
12466
12714
|
var MarketDetails = (_a) => {
|
|
12467
12715
|
var _b = _a, { isOpened } = _b, props = __objRest(_b, ["isOpened"]);
|
|
12468
|
-
const labels = (0,
|
|
12716
|
+
const labels = (0, import_hooks43.useLabels)();
|
|
12469
12717
|
if (props.isLoading) {
|
|
12470
|
-
return /* @__PURE__ */ (0,
|
|
12718
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12471
12719
|
Skeleton,
|
|
12472
12720
|
{
|
|
12473
12721
|
view: "market-details-minified",
|
|
@@ -12477,7 +12725,7 @@ var MarketDetails = (_a) => {
|
|
|
12477
12725
|
);
|
|
12478
12726
|
}
|
|
12479
12727
|
if ("venueMarkets" in props && props.venueMarkets) {
|
|
12480
|
-
return /* @__PURE__ */ (0,
|
|
12728
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12481
12729
|
MarketDetailsContent,
|
|
12482
12730
|
__spreadProps(__spreadValues({}, props), {
|
|
12483
12731
|
isOpened,
|
|
@@ -12489,7 +12737,7 @@ var MarketDetails = (_a) => {
|
|
|
12489
12737
|
);
|
|
12490
12738
|
}
|
|
12491
12739
|
const { classNames: fallbackClassNames } = props;
|
|
12492
|
-
return /* @__PURE__ */ (0,
|
|
12740
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(MarketDetailsUnavailableState, { classNames: fallbackClassNames });
|
|
12493
12741
|
};
|
|
12494
12742
|
MarketDetails.displayName = "MarketDetails";
|
|
12495
12743
|
var AFFIRMATIVE_WINNER_LABELS = /* @__PURE__ */ new Set(["yes", "up", "buy", "long", "true"]);
|
|
@@ -12520,13 +12768,13 @@ var resolveIsResolvedEvent = (sourceMarkets, eventTradingState) => {
|
|
|
12520
12768
|
return eventTradingState.kind === "resolved";
|
|
12521
12769
|
}
|
|
12522
12770
|
if (sourceMarkets.length === 0) return false;
|
|
12523
|
-
return sourceMarkets.every((market) => (0,
|
|
12771
|
+
return sourceMarkets.every((market) => (0, import_hooks43.resolveMarketTradingState)(market).kind === "resolved");
|
|
12524
12772
|
};
|
|
12525
12773
|
var resolveResolvedWinnerMarketId = (sourceMarkets, eventTradingState) => {
|
|
12526
12774
|
var _a, _b, _c, _d, _e;
|
|
12527
12775
|
const preferredMarket = (_a = eventTradingState == null ? void 0 : eventTradingState.primaryMarket) != null ? _a : null;
|
|
12528
12776
|
if (preferredMarket && sourceMarkets.some((market) => market.id === preferredMarket.id)) {
|
|
12529
|
-
if ((0,
|
|
12777
|
+
if ((0, import_hooks43.resolveMarketTradingState)(preferredMarket).kind === "resolved") {
|
|
12530
12778
|
return preferredMarket.id;
|
|
12531
12779
|
}
|
|
12532
12780
|
}
|
|
@@ -12546,24 +12794,25 @@ var MarketDetailsList = ({
|
|
|
12546
12794
|
midpointsResult
|
|
12547
12795
|
}) => {
|
|
12548
12796
|
var _a, _b;
|
|
12549
|
-
const labels = (0,
|
|
12550
|
-
const tradingContext = (0,
|
|
12797
|
+
const labels = (0, import_hooks43.useLabels)();
|
|
12798
|
+
const tradingContext = (0, import_hooks43.useEventTradingContext)();
|
|
12551
12799
|
const selectedMarketId = (_a = tradingContext == null ? void 0 : tradingContext.selectedMarketId) != null ? _a : null;
|
|
12552
|
-
const [expandedMarketId, setExpandedMarketId] = (0,
|
|
12553
|
-
const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] = (0,
|
|
12800
|
+
const [expandedMarketId, setExpandedMarketId] = (0, import_react20.useState)(null);
|
|
12801
|
+
const [areResolvedMarketsVisible, setAreResolvedMarketsVisible] = (0, import_react20.useState)(false);
|
|
12554
12802
|
const resolvedEventId = eventId || "";
|
|
12555
12803
|
const {
|
|
12556
12804
|
markets: rawMarkets,
|
|
12557
12805
|
isLoading,
|
|
12558
12806
|
error
|
|
12559
|
-
} = (0,
|
|
12807
|
+
} = (0, import_hooks43.useVenueMarkets)({
|
|
12560
12808
|
venueEventId: resolvedEventId,
|
|
12561
12809
|
enabled: !providedMarkets && !!resolvedEventId,
|
|
12562
|
-
status:
|
|
12563
|
-
sortBy:
|
|
12564
|
-
|
|
12810
|
+
status: import_hooks43.MarketStatus.open
|
|
12811
|
+
// No explicit sortBy: event-scoped /venue-markets sorts by the event's
|
|
12812
|
+
// type-aware order (structureOrderBy), matching the home-card top-3 and the
|
|
12813
|
+
// markets-under-an-event ordering. Passing sortBy here would override it.
|
|
12565
12814
|
});
|
|
12566
|
-
const sourceMarkets = (0,
|
|
12815
|
+
const sourceMarkets = (0, import_react20.useMemo)(() => {
|
|
12567
12816
|
var _a2;
|
|
12568
12817
|
if ((_a2 = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _a2.length) {
|
|
12569
12818
|
return eventTradingState.marketStates.map((item) => item.market);
|
|
@@ -12571,10 +12820,10 @@ var MarketDetailsList = ({
|
|
|
12571
12820
|
if (providedMarkets) return providedMarkets;
|
|
12572
12821
|
return rawMarkets;
|
|
12573
12822
|
}, [eventTradingState == null ? void 0 : eventTradingState.marketStates, providedMarkets, rawMarkets]);
|
|
12574
|
-
const isResolvedEvent = (0,
|
|
12823
|
+
const isResolvedEvent = (0, import_react20.useMemo)(() => {
|
|
12575
12824
|
return resolveIsResolvedEvent(sourceMarkets, eventTradingState);
|
|
12576
12825
|
}, [eventTradingState, sourceMarkets]);
|
|
12577
|
-
const groupedMarkets = (0,
|
|
12826
|
+
const groupedMarkets = (0, import_react20.useMemo)(() => {
|
|
12578
12827
|
if (sourceMarkets.length === 0) {
|
|
12579
12828
|
return {
|
|
12580
12829
|
primary: [],
|
|
@@ -12596,7 +12845,7 @@ var MarketDetailsList = ({
|
|
|
12596
12845
|
const resolved = [];
|
|
12597
12846
|
const closed = [];
|
|
12598
12847
|
sourceMarkets.forEach((market) => {
|
|
12599
|
-
const marketStateKind = (0,
|
|
12848
|
+
const marketStateKind = (0, import_hooks43.resolveMarketTradingState)(market).kind;
|
|
12600
12849
|
if (marketStateKind === "resolved") {
|
|
12601
12850
|
resolved.push(market);
|
|
12602
12851
|
return;
|
|
@@ -12614,21 +12863,21 @@ var MarketDetailsList = ({
|
|
|
12614
12863
|
return { primary, upcoming, resolved, closed };
|
|
12615
12864
|
}, [eventTradingState, isResolvedEvent, sourceMarkets]);
|
|
12616
12865
|
const shouldShowResolvedToggle = !isResolvedEvent && groupedMarkets.resolved.length > 0;
|
|
12617
|
-
const visibleResolvedMarkets = (0,
|
|
12866
|
+
const visibleResolvedMarkets = (0, import_react20.useMemo)(() => {
|
|
12618
12867
|
if (isResolvedEvent || areResolvedMarketsVisible) return groupedMarkets.resolved;
|
|
12619
12868
|
return [];
|
|
12620
12869
|
}, [areResolvedMarketsVisible, groupedMarkets.resolved, isResolvedEvent]);
|
|
12621
|
-
const displayedMarkets = (0,
|
|
12870
|
+
const displayedMarkets = (0, import_react20.useMemo)(() => {
|
|
12622
12871
|
return [...groupedMarkets.primary, ...visibleResolvedMarkets];
|
|
12623
12872
|
}, [groupedMarkets.primary, visibleResolvedMarkets]);
|
|
12624
12873
|
const hasPrefetchedMarkets = !!providedMarkets || !!((_b = eventTradingState == null ? void 0 : eventTradingState.marketStates) == null ? void 0 : _b.length);
|
|
12625
|
-
const midpointEligibleMarkets = (0,
|
|
12874
|
+
const midpointEligibleMarkets = (0, import_react20.useMemo)(() => {
|
|
12626
12875
|
return displayedMarkets.filter(
|
|
12627
|
-
(market) => (0,
|
|
12876
|
+
(market) => (0, import_hooks43.resolveMarketTradingState)(market).kind !== "resolved"
|
|
12628
12877
|
);
|
|
12629
12878
|
}, [displayedMarkets]);
|
|
12630
|
-
const { prices: midpointsFallback, venueByOutcomeId: midpointsFallbackVenues } = (0,
|
|
12631
|
-
(0,
|
|
12879
|
+
const { prices: midpointsFallback, venueByOutcomeId: midpointsFallbackVenues } = (0, import_hooks43.useViewportMidpoints)(midpointEligibleMarkets);
|
|
12880
|
+
(0, import_react20.useEffect)(() => {
|
|
12632
12881
|
if (isResolvedEvent) {
|
|
12633
12882
|
setAreResolvedMarketsVisible(false);
|
|
12634
12883
|
return;
|
|
@@ -12637,7 +12886,7 @@ var MarketDetailsList = ({
|
|
|
12637
12886
|
setAreResolvedMarketsVisible(false);
|
|
12638
12887
|
}
|
|
12639
12888
|
}, [groupedMarkets.resolved.length, isResolvedEvent]);
|
|
12640
|
-
(0,
|
|
12889
|
+
(0, import_react20.useEffect)(() => {
|
|
12641
12890
|
if (displayedMarkets.length === 0) return;
|
|
12642
12891
|
if (selectedMarketId && displayedMarkets.some((market) => market.id === selectedMarketId)) {
|
|
12643
12892
|
return;
|
|
@@ -12646,7 +12895,7 @@ var MarketDetailsList = ({
|
|
|
12646
12895
|
return;
|
|
12647
12896
|
}
|
|
12648
12897
|
const fallbackSelectableMarket = displayedMarkets.find(
|
|
12649
|
-
(market) => !(0,
|
|
12898
|
+
(market) => !(0, import_hooks43.resolveMarketTradingState)(market).isTradingDisabled
|
|
12650
12899
|
);
|
|
12651
12900
|
if (!fallbackSelectableMarket) {
|
|
12652
12901
|
return;
|
|
@@ -12654,7 +12903,7 @@ var MarketDetailsList = ({
|
|
|
12654
12903
|
if (!autoSelectFallbackMarket) return;
|
|
12655
12904
|
tradingContext == null ? void 0 : tradingContext.selectMarket(fallbackSelectableMarket.id, fallbackSelectableMarket);
|
|
12656
12905
|
}, [autoSelectFallbackMarket, displayedMarkets, selectedMarketId, sourceMarkets, tradingContext]);
|
|
12657
|
-
(0,
|
|
12906
|
+
(0, import_react20.useEffect)(() => {
|
|
12658
12907
|
if (!expandedMarketId) return;
|
|
12659
12908
|
if (displayedMarkets.some((market) => market.id === expandedMarketId)) return;
|
|
12660
12909
|
setExpandedMarketId(null);
|
|
@@ -12668,11 +12917,11 @@ var MarketDetailsList = ({
|
|
|
12668
12917
|
setExpandedMarketId(marketId);
|
|
12669
12918
|
onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(marketId);
|
|
12670
12919
|
if (marketId === selectedMarketId) return;
|
|
12671
|
-
if ((0,
|
|
12920
|
+
if ((0, import_hooks43.resolveMarketTradingState)(market).isTradingDisabled) return;
|
|
12672
12921
|
tradingContext == null ? void 0 : tradingContext.selectMarket(market.id, market);
|
|
12673
12922
|
};
|
|
12674
12923
|
if (!hasPrefetchedMarkets && isLoading) {
|
|
12675
|
-
return /* @__PURE__ */ (0,
|
|
12924
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12676
12925
|
Skeleton,
|
|
12677
12926
|
{
|
|
12678
12927
|
view: "market-details-minified",
|
|
@@ -12682,29 +12931,29 @@ var MarketDetailsList = ({
|
|
|
12682
12931
|
);
|
|
12683
12932
|
}
|
|
12684
12933
|
if (!hasPrefetchedMarkets && error) {
|
|
12685
|
-
return /* @__PURE__ */ (0,
|
|
12934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12686
12935
|
StateMessage,
|
|
12687
12936
|
{
|
|
12688
12937
|
title: labels.marketDetails.unavailableTitle,
|
|
12689
12938
|
description: labels.marketDetails.unavailableDescription,
|
|
12690
|
-
icon: /* @__PURE__ */ (0,
|
|
12939
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(SearchEmptyIcon, {}),
|
|
12691
12940
|
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
12692
12941
|
}
|
|
12693
12942
|
);
|
|
12694
12943
|
}
|
|
12695
12944
|
if (displayedMarkets.length === 0 && !shouldShowResolvedToggle) {
|
|
12696
12945
|
const hasSourceMarkets = sourceMarkets.length > 0;
|
|
12697
|
-
return /* @__PURE__ */ (0,
|
|
12946
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12698
12947
|
StateMessage,
|
|
12699
12948
|
{
|
|
12700
12949
|
title: hasSourceMarkets ? isResolvedEvent ? labels.markets.emptyResolved : labels.markets.emptyNoOpen : labels.marketDetails.notFoundTitle,
|
|
12701
12950
|
description: hasSourceMarkets ? void 0 : labels.marketDetails.notFoundDescription,
|
|
12702
|
-
icon: /* @__PURE__ */ (0,
|
|
12951
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(SearchEmptyIcon, {}),
|
|
12703
12952
|
classNames: { root: "min-h-[280px] md:min-h-[320px]" }
|
|
12704
12953
|
}
|
|
12705
12954
|
);
|
|
12706
12955
|
}
|
|
12707
|
-
const renderMarketCard = (market) => /* @__PURE__ */ (0,
|
|
12956
|
+
const renderMarketCard = (market) => /* @__PURE__ */ (0, import_jsx_runtime130.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12708
12957
|
MarketDetails,
|
|
12709
12958
|
{
|
|
12710
12959
|
marketId: market.id,
|
|
@@ -12731,9 +12980,9 @@ var MarketDetailsList = ({
|
|
|
12731
12980
|
midpointsResult
|
|
12732
12981
|
}
|
|
12733
12982
|
) }, market.id);
|
|
12734
|
-
return /* @__PURE__ */ (0,
|
|
12983
|
+
return /* @__PURE__ */ (0, import_jsx_runtime130.jsxs)("div", { className: cn("agg-market-list flex flex-col gap-3", classNames == null ? void 0 : classNames.root), children: [
|
|
12735
12984
|
groupedMarkets.primary.map((market) => renderMarketCard(market)),
|
|
12736
|
-
shouldShowResolvedToggle ? /* @__PURE__ */ (0,
|
|
12985
|
+
shouldShowResolvedToggle ? /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12737
12986
|
Button,
|
|
12738
12987
|
{
|
|
12739
12988
|
variant: "tertiary",
|
|
@@ -12743,7 +12992,7 @@ var MarketDetailsList = ({
|
|
|
12743
12992
|
setAreResolvedMarketsVisible((isVisible) => !isVisible);
|
|
12744
12993
|
},
|
|
12745
12994
|
"aria-expanded": areResolvedMarketsVisible,
|
|
12746
|
-
suffix: /* @__PURE__ */ (0,
|
|
12995
|
+
suffix: /* @__PURE__ */ (0, import_jsx_runtime130.jsx)(
|
|
12747
12996
|
Icon,
|
|
12748
12997
|
{
|
|
12749
12998
|
name: areResolvedMarketsVisible ? "chevron-up" : "chevron-down",
|
|
@@ -12761,14 +13010,14 @@ var MarketDetailsList = ({
|
|
|
12761
13010
|
MarketDetailsList.displayName = "MarketDetailsList";
|
|
12762
13011
|
|
|
12763
13012
|
// src/events/list/index.tsx
|
|
12764
|
-
var
|
|
13013
|
+
var import_hooks45 = require("@agg-build/hooks");
|
|
12765
13014
|
var import_sdk14 = require("@agg-build/sdk");
|
|
12766
13015
|
var Dialog2 = __toESM(require("@radix-ui/react-dialog"));
|
|
12767
|
-
var
|
|
13016
|
+
var import_react23 = require("react");
|
|
12768
13017
|
|
|
12769
13018
|
// src/events/list/category-sidebar.tsx
|
|
12770
|
-
var
|
|
12771
|
-
var
|
|
13019
|
+
var import_react21 = require("react");
|
|
13020
|
+
var import_jsx_runtime131 = require("react/jsx-runtime");
|
|
12772
13021
|
var rowBase = cn(
|
|
12773
13022
|
"flex min-h-11 w-full items-center gap-3 rounded-[6px] px-3 py-3",
|
|
12774
13023
|
"text-left text-agg-sm font-agg-normal leading-agg-5",
|
|
@@ -12790,7 +13039,7 @@ var CategorySidebar = ({
|
|
|
12790
13039
|
onToggleCategory
|
|
12791
13040
|
}) => {
|
|
12792
13041
|
const isDrilledIn = categoryPath.length > 0;
|
|
12793
|
-
const sortedBaseChildren = (0,
|
|
13042
|
+
const sortedBaseChildren = (0, import_react21.useMemo)(() => {
|
|
12794
13043
|
var _a;
|
|
12795
13044
|
if (!baseCategoryId) return [];
|
|
12796
13045
|
const children = [...(_a = childrenByParentId.get(baseCategoryId)) != null ? _a : []];
|
|
@@ -12810,7 +13059,7 @@ var CategorySidebar = ({
|
|
|
12810
13059
|
}) => {
|
|
12811
13060
|
var _a, _b;
|
|
12812
13061
|
const hasKnownChildren = ((_b = (_a = childrenByParentId.get(entry.id)) == null ? void 0 : _a.length) != null ? _b : 0) > 0;
|
|
12813
|
-
return /* @__PURE__ */ (0,
|
|
13062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12814
13063
|
"button",
|
|
12815
13064
|
{
|
|
12816
13065
|
type: "button",
|
|
@@ -12818,8 +13067,8 @@ var CategorySidebar = ({
|
|
|
12818
13067
|
className: isSelected ? selectedRowClassName : idleRowClassName,
|
|
12819
13068
|
onClick,
|
|
12820
13069
|
children: [
|
|
12821
|
-
/* @__PURE__ */ (0,
|
|
12822
|
-
hasKnownChildren ? /* @__PURE__ */ (0,
|
|
13070
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "min-w-0 flex-1 truncate first-letter:uppercase", children: entry.label }),
|
|
13071
|
+
hasKnownChildren ? /* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12823
13072
|
Icon,
|
|
12824
13073
|
{
|
|
12825
13074
|
name: isExpanded ? "chevron-up" : "chevron-down",
|
|
@@ -12827,7 +13076,7 @@ var CategorySidebar = ({
|
|
|
12827
13076
|
color: "currentColor",
|
|
12828
13077
|
className: "shrink-0 text-agg-muted-foreground"
|
|
12829
13078
|
}
|
|
12830
|
-
) : /* @__PURE__ */ (0,
|
|
13079
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "shrink-0 text-agg-muted-foreground", children: entry.eventCount })
|
|
12831
13080
|
]
|
|
12832
13081
|
},
|
|
12833
13082
|
entry.id
|
|
@@ -12845,27 +13094,27 @@ var CategorySidebar = ({
|
|
|
12845
13094
|
const hasKnownChildren = childCategories.length > 0;
|
|
12846
13095
|
const isExpanded = ((_d = categoryPath[depth]) == null ? void 0 : _d.id) === category.id && !collapsedCategoryIds.has(category.id);
|
|
12847
13096
|
const isSelected = ((_e = categoryPath[depth]) == null ? void 0 : _e.id) === category.id && categoryPath.length === depth + 1;
|
|
12848
|
-
return /* @__PURE__ */ (0,
|
|
13097
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { className: "flex w-full flex-col", children: [
|
|
12849
13098
|
renderRow({
|
|
12850
13099
|
entry,
|
|
12851
13100
|
isExpanded,
|
|
12852
13101
|
isSelected,
|
|
12853
13102
|
onClick: () => onToggleCategory({ entry, depth, hasKnownChildren, isExpanded, isSelected })
|
|
12854
13103
|
}),
|
|
12855
|
-
/* @__PURE__ */ (0,
|
|
13104
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)(
|
|
12856
13105
|
"div",
|
|
12857
13106
|
{
|
|
12858
13107
|
className: cn(
|
|
12859
13108
|
"grid transition-[grid-template-rows] duration-150 ease-in-out motion-reduce:transition-none",
|
|
12860
13109
|
isExpanded ? "grid-rows-[1fr]" : "grid-rows-[0fr]"
|
|
12861
13110
|
),
|
|
12862
|
-
children: /* @__PURE__ */ (0,
|
|
13111
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime131.jsx)("div", { className: "flex w-full flex-col gap-1 pl-4 pt-1", children: childCategories.map((child) => renderBranch(child, depth + 1)) }) })
|
|
12863
13112
|
}
|
|
12864
13113
|
)
|
|
12865
13114
|
] }, category.id);
|
|
12866
13115
|
};
|
|
12867
|
-
return /* @__PURE__ */ (0,
|
|
12868
|
-
/* @__PURE__ */ (0,
|
|
13116
|
+
return /* @__PURE__ */ (0, import_jsx_runtime131.jsxs)("div", { className: "flex w-full flex-col gap-1", children: [
|
|
13117
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsxs)(
|
|
12869
13118
|
"button",
|
|
12870
13119
|
{
|
|
12871
13120
|
type: "button",
|
|
@@ -12873,8 +13122,8 @@ var CategorySidebar = ({
|
|
|
12873
13122
|
className: !isDrilledIn ? selectedRowClassName : idleRowClassName,
|
|
12874
13123
|
onClick: onSelectAll,
|
|
12875
13124
|
children: [
|
|
12876
|
-
/* @__PURE__ */ (0,
|
|
12877
|
-
/* @__PURE__ */ (0,
|
|
13125
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "min-w-0 flex-1 truncate", children: labels.subcategoriesAll }),
|
|
13126
|
+
/* @__PURE__ */ (0, import_jsx_runtime131.jsx)("span", { className: "shrink-0 text-agg-muted-foreground", children: totalEventCount })
|
|
12878
13127
|
]
|
|
12879
13128
|
}
|
|
12880
13129
|
),
|
|
@@ -12884,8 +13133,8 @@ var CategorySidebar = ({
|
|
|
12884
13133
|
CategorySidebar.displayName = "CategorySidebar";
|
|
12885
13134
|
|
|
12886
13135
|
// src/events/list/event-list-tabs.tsx
|
|
12887
|
-
var
|
|
12888
|
-
var
|
|
13136
|
+
var import_hooks44 = require("@agg-build/hooks");
|
|
13137
|
+
var import_react22 = require("react");
|
|
12889
13138
|
|
|
12890
13139
|
// src/events/list/event-list.constants.ts
|
|
12891
13140
|
var import_sdk13 = require("@agg-build/sdk");
|
|
@@ -12952,16 +13201,16 @@ var getDefaultEventListTabs = (labels) => {
|
|
|
12952
13201
|
};
|
|
12953
13202
|
|
|
12954
13203
|
// src/events/list/event-list-tabs.tsx
|
|
12955
|
-
var
|
|
13204
|
+
var import_jsx_runtime132 = require("react/jsx-runtime");
|
|
12956
13205
|
var renderTabIcon = (tab, isActive) => {
|
|
12957
13206
|
if (tab.iconName === "warning-filled") {
|
|
12958
|
-
return /* @__PURE__ */ (0,
|
|
13207
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(Icon, { name: "warning-filled", size: "small", color: "currentColor" });
|
|
12959
13208
|
}
|
|
12960
13209
|
if (tab.venueLogo) {
|
|
12961
|
-
return /* @__PURE__ */ (0,
|
|
13210
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(VenueLogo, { venue: tab.venueLogo, size: "small" });
|
|
12962
13211
|
}
|
|
12963
13212
|
if (!tab.iconName) return null;
|
|
12964
|
-
return /* @__PURE__ */ (0,
|
|
13213
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
12965
13214
|
Icon,
|
|
12966
13215
|
{
|
|
12967
13216
|
name: tab.iconName,
|
|
@@ -12971,14 +13220,14 @@ var renderTabIcon = (tab, isActive) => {
|
|
|
12971
13220
|
);
|
|
12972
13221
|
};
|
|
12973
13222
|
var useEventListTabs = (tabs) => {
|
|
12974
|
-
const labels = (0,
|
|
12975
|
-
const { disabledVenues } = (0,
|
|
12976
|
-
const { isLocationBlocked } = (0,
|
|
12977
|
-
return (0,
|
|
13223
|
+
const labels = (0, import_hooks44.useLabels)();
|
|
13224
|
+
const { disabledVenues } = (0, import_hooks44.useAppConfig)();
|
|
13225
|
+
const { isLocationBlocked } = (0, import_hooks44.useGeoBlock)();
|
|
13226
|
+
return (0, import_react22.useMemo)(() => {
|
|
12978
13227
|
const baseTabs = tabs != null ? tabs : getDefaultEventListTabs(labels);
|
|
12979
13228
|
return baseTabs.flatMap((tab) => {
|
|
12980
13229
|
if (!tab.venueLogo) return [tab];
|
|
12981
|
-
const availabilityState = (0,
|
|
13230
|
+
const availabilityState = (0, import_hooks44.getVenueAvailabilityState)({
|
|
12982
13231
|
venueId: tab.venueLogo,
|
|
12983
13232
|
disabledVenues,
|
|
12984
13233
|
isLocationBlocked
|
|
@@ -13003,13 +13252,13 @@ var EventListTabs = ({
|
|
|
13003
13252
|
overflowBehavior
|
|
13004
13253
|
}) => {
|
|
13005
13254
|
const resolvedTabs = useEventListTabs(tabs);
|
|
13006
|
-
(0,
|
|
13255
|
+
(0, import_react22.useEffect)(() => {
|
|
13007
13256
|
const fallbackTab = resolvedTabs.find((tab) => !tab.disabled);
|
|
13008
13257
|
if (!fallbackTab) return;
|
|
13009
13258
|
if (resolvedTabs.some((tab) => tab.value === activeTab && !tab.disabled)) return;
|
|
13010
13259
|
onTabChange(fallbackTab.value);
|
|
13011
13260
|
}, [activeTab, onTabChange, resolvedTabs]);
|
|
13012
|
-
const items = (0,
|
|
13261
|
+
const items = (0, import_react22.useMemo)(() => {
|
|
13013
13262
|
return resolvedTabs.map((tab) => {
|
|
13014
13263
|
const isActive = tab.value === activeTab;
|
|
13015
13264
|
return {
|
|
@@ -13021,7 +13270,7 @@ var EventListTabs = ({
|
|
|
13021
13270
|
};
|
|
13022
13271
|
});
|
|
13023
13272
|
}, [activeTab, resolvedTabs]);
|
|
13024
|
-
return /* @__PURE__ */ (0,
|
|
13273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime132.jsx)(
|
|
13025
13274
|
Tabs,
|
|
13026
13275
|
{
|
|
13027
13276
|
ariaLabel,
|
|
@@ -13036,7 +13285,7 @@ var EventListTabs = ({
|
|
|
13036
13285
|
EventListTabs.displayName = "EventListTabs";
|
|
13037
13286
|
|
|
13038
13287
|
// src/events/list/index.tsx
|
|
13039
|
-
var
|
|
13288
|
+
var import_jsx_runtime133 = require("react/jsx-runtime");
|
|
13040
13289
|
var SORT_ICON_BY_VALUE = {
|
|
13041
13290
|
volume24hr: "sort-volume-24hr",
|
|
13042
13291
|
topArbitrage: "sort-top-arbitrage",
|
|
@@ -13074,45 +13323,45 @@ var EventList = ({
|
|
|
13074
13323
|
stateRef
|
|
13075
13324
|
}) => {
|
|
13076
13325
|
var _a, _b, _c, _d, _e;
|
|
13077
|
-
const labels = (0,
|
|
13078
|
-
const { disabledVenues } = (0,
|
|
13326
|
+
const labels = (0, import_hooks45.useLabels)();
|
|
13327
|
+
const { disabledVenues } = (0, import_hooks45.useAppConfig)();
|
|
13079
13328
|
const {
|
|
13080
|
-
features: { enableVenueEventDiscoveryFilters }
|
|
13081
|
-
} = (0,
|
|
13329
|
+
features: { enableVenueEventDiscoveryFilters, showSportsMarkets }
|
|
13330
|
+
} = (0, import_hooks45.useSdkUiConfig)();
|
|
13082
13331
|
const isDiscoveryFiltersEnabled = enableVenueEventDiscoveryFilters && !search;
|
|
13083
13332
|
const resolvedTabs = useEventListTabs();
|
|
13084
|
-
const visibleVenues = (0,
|
|
13085
|
-
() => disabledVenues.length === 0 ? void 0 : (0,
|
|
13333
|
+
const visibleVenues = (0, import_react23.useMemo)(
|
|
13334
|
+
() => disabledVenues.length === 0 ? void 0 : (0, import_hooks45.getVisibleVenueIdsByConfig)(import_sdk14.VENUES, disabledVenues),
|
|
13086
13335
|
[disabledVenues]
|
|
13087
13336
|
);
|
|
13088
|
-
const [activeTabValue, setActiveTabValue] = (0,
|
|
13337
|
+
const [activeTabValue, setActiveTabValue] = (0, import_react23.useState)(
|
|
13089
13338
|
(_b = initialVenueTab != null ? initialVenueTab : (_a = resolvedTabs[0]) == null ? void 0 : _a.value) != null ? _b : "matched"
|
|
13090
13339
|
);
|
|
13091
|
-
const [selectedSort, setSelectedSort] = (0,
|
|
13092
|
-
const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] = (0,
|
|
13093
|
-
const [categoryPath, setCategoryPath] = (0,
|
|
13094
|
-
const [collapsedCategoryIds, setCollapsedCategoryIds] = (0,
|
|
13095
|
-
const sortItems = (0,
|
|
13340
|
+
const [selectedSort, setSelectedSort] = (0, import_react23.useState)("volume24hr");
|
|
13341
|
+
const [isSubcategoriesModalOpen, setIsSubcategoriesModalOpen] = (0, import_react23.useState)(false);
|
|
13342
|
+
const [categoryPath, setCategoryPath] = (0, import_react23.useState)([]);
|
|
13343
|
+
const [collapsedCategoryIds, setCollapsedCategoryIds] = (0, import_react23.useState)(() => /* @__PURE__ */ new Set());
|
|
13344
|
+
const sortItems = (0, import_react23.useMemo)(() => {
|
|
13096
13345
|
return [
|
|
13097
13346
|
{
|
|
13098
13347
|
value: "volume24hr",
|
|
13099
13348
|
label: labels.eventList.sortBy24hVolume,
|
|
13100
|
-
icon: /* @__PURE__ */ (0,
|
|
13349
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: SORT_ICON_BY_VALUE.volume24hr, size: "small", color: "currentColor" })
|
|
13101
13350
|
},
|
|
13102
13351
|
{
|
|
13103
13352
|
value: "topArbitrage",
|
|
13104
13353
|
label: labels.eventList.sortByTopArbitrage,
|
|
13105
|
-
icon: /* @__PURE__ */ (0,
|
|
13354
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: SORT_ICON_BY_VALUE.topArbitrage, size: "small", color: "currentColor" })
|
|
13106
13355
|
},
|
|
13107
13356
|
{
|
|
13108
13357
|
value: "volume",
|
|
13109
13358
|
label: labels.eventList.sortByTotalVolume,
|
|
13110
|
-
icon: /* @__PURE__ */ (0,
|
|
13359
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: SORT_ICON_BY_VALUE.volume, size: "small", color: "currentColor" })
|
|
13111
13360
|
},
|
|
13112
13361
|
{
|
|
13113
13362
|
value: "endDate",
|
|
13114
13363
|
label: labels.eventList.sortByEndingSoon,
|
|
13115
|
-
icon: /* @__PURE__ */ (0,
|
|
13364
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: SORT_ICON_BY_VALUE.endDate, size: "small", color: "currentColor" })
|
|
13116
13365
|
}
|
|
13117
13366
|
];
|
|
13118
13367
|
}, [
|
|
@@ -13122,20 +13371,20 @@ var EventList = ({
|
|
|
13122
13371
|
labels.eventList.sortByTotalVolume
|
|
13123
13372
|
]);
|
|
13124
13373
|
const baseCategoryId = (_c = categoryIds == null ? void 0 : categoryIds[0]) != null ? _c : null;
|
|
13125
|
-
(0,
|
|
13374
|
+
(0, import_react23.useEffect)(() => {
|
|
13126
13375
|
if (!isDiscoveryFiltersEnabled) return;
|
|
13127
13376
|
setCategoryPath([]);
|
|
13128
13377
|
setCollapsedCategoryIds(/* @__PURE__ */ new Set());
|
|
13129
13378
|
}, [baseCategoryId, isDiscoveryFiltersEnabled]);
|
|
13130
|
-
const { categories: topLevelCategories } = (0,
|
|
13379
|
+
const { categories: topLevelCategories } = (0, import_hooks45.useCategories)({
|
|
13131
13380
|
queryKeyScope: "event-list-top-categories",
|
|
13132
13381
|
enabled: isDiscoveryFiltersEnabled,
|
|
13133
13382
|
limit: 100
|
|
13134
13383
|
});
|
|
13135
|
-
const sortedTopLevelCategories = (0,
|
|
13384
|
+
const sortedTopLevelCategories = (0, import_react23.useMemo)(() => {
|
|
13136
13385
|
return sortCategoriesForNavigation(topLevelCategories);
|
|
13137
13386
|
}, [topLevelCategories]);
|
|
13138
|
-
const baseCategoryChildPrefetchIds = (0,
|
|
13387
|
+
const baseCategoryChildPrefetchIds = (0, import_react23.useMemo)(() => {
|
|
13139
13388
|
return Array.from(
|
|
13140
13389
|
/* @__PURE__ */ new Set([
|
|
13141
13390
|
...sortedTopLevelCategories.map((category) => category.id),
|
|
@@ -13143,13 +13392,13 @@ var EventList = ({
|
|
|
13143
13392
|
])
|
|
13144
13393
|
);
|
|
13145
13394
|
}, [categoryPath, sortedTopLevelCategories]);
|
|
13146
|
-
const { childrenByParentId: baseChildrenByParentId } = (0,
|
|
13395
|
+
const { childrenByParentId: baseChildrenByParentId } = (0, import_hooks45.useCategoryChildren)({
|
|
13147
13396
|
queryKeyScope: "event-list-category-children",
|
|
13148
13397
|
enabled: isDiscoveryFiltersEnabled,
|
|
13149
13398
|
parentIds: baseCategoryChildPrefetchIds,
|
|
13150
13399
|
limit: 100
|
|
13151
13400
|
});
|
|
13152
|
-
const visibleChildPrefetchIds = (0,
|
|
13401
|
+
const visibleChildPrefetchIds = (0, import_react23.useMemo)(() => {
|
|
13153
13402
|
var _a2, _b2;
|
|
13154
13403
|
const ids = /* @__PURE__ */ new Set();
|
|
13155
13404
|
if (baseCategoryId) {
|
|
@@ -13164,13 +13413,13 @@ var EventList = ({
|
|
|
13164
13413
|
}
|
|
13165
13414
|
return Array.from(ids);
|
|
13166
13415
|
}, [baseCategoryId, baseChildrenByParentId, categoryPath]);
|
|
13167
|
-
const { childrenByParentId: visibleChildrenByParentId } = (0,
|
|
13416
|
+
const { childrenByParentId: visibleChildrenByParentId } = (0, import_hooks45.useCategoryChildren)({
|
|
13168
13417
|
queryKeyScope: "event-list-category-children",
|
|
13169
13418
|
enabled: isDiscoveryFiltersEnabled,
|
|
13170
13419
|
parentIds: visibleChildPrefetchIds,
|
|
13171
13420
|
limit: 100
|
|
13172
13421
|
});
|
|
13173
|
-
const visibleGrandchildPrefetchIds = (0,
|
|
13422
|
+
const visibleGrandchildPrefetchIds = (0, import_react23.useMemo)(() => {
|
|
13174
13423
|
var _a2;
|
|
13175
13424
|
const ids = /* @__PURE__ */ new Set();
|
|
13176
13425
|
for (const expandedCategory of categoryPath) {
|
|
@@ -13180,13 +13429,13 @@ var EventList = ({
|
|
|
13180
13429
|
}
|
|
13181
13430
|
return Array.from(ids);
|
|
13182
13431
|
}, [categoryPath, visibleChildrenByParentId]);
|
|
13183
|
-
const { childrenByParentId: visibleGrandchildrenByParentId } = (0,
|
|
13432
|
+
const { childrenByParentId: visibleGrandchildrenByParentId } = (0, import_hooks45.useCategoryChildren)({
|
|
13184
13433
|
queryKeyScope: "event-list-category-children",
|
|
13185
13434
|
enabled: isDiscoveryFiltersEnabled,
|
|
13186
13435
|
parentIds: visibleGrandchildPrefetchIds,
|
|
13187
13436
|
limit: 100
|
|
13188
13437
|
});
|
|
13189
|
-
const childrenByParentId = (0,
|
|
13438
|
+
const childrenByParentId = (0, import_react23.useMemo)(() => {
|
|
13190
13439
|
return new Map([
|
|
13191
13440
|
...baseChildrenByParentId,
|
|
13192
13441
|
...visibleChildrenByParentId,
|
|
@@ -13194,33 +13443,33 @@ var EventList = ({
|
|
|
13194
13443
|
]);
|
|
13195
13444
|
}, [baseChildrenByParentId, visibleChildrenByParentId, visibleGrandchildrenByParentId]);
|
|
13196
13445
|
const shouldRenderSubcategoryFilters = isDiscoveryFiltersEnabled && baseCategoryId !== null && (((_e = (_d = childrenByParentId.get(baseCategoryId)) == null ? void 0 : _d.length) != null ? _e : 0) > 0 || categoryPath.length > 0);
|
|
13197
|
-
const baseCategoryEventCount = (0,
|
|
13446
|
+
const baseCategoryEventCount = (0, import_react23.useMemo)(() => {
|
|
13198
13447
|
var _a2, _b2;
|
|
13199
13448
|
return (_b2 = (_a2 = sortedTopLevelCategories.find((c) => c.id === baseCategoryId)) == null ? void 0 : _a2.eventCount) != null ? _b2 : 0;
|
|
13200
13449
|
}, [baseCategoryId, sortedTopLevelCategories]);
|
|
13201
|
-
const resolvedCategoryIds = (0,
|
|
13450
|
+
const resolvedCategoryIds = (0, import_react23.useMemo)(() => {
|
|
13202
13451
|
if (!isDiscoveryFiltersEnabled) return categoryIds;
|
|
13203
13452
|
return resolveCategoryIdsFromPath(categoryPath, baseCategoryId ? [baseCategoryId] : void 0);
|
|
13204
13453
|
}, [baseCategoryId, categoryIds, categoryPath, isDiscoveryFiltersEnabled]);
|
|
13205
|
-
const sortQueryParams = (0,
|
|
13454
|
+
const sortQueryParams = (0, import_react23.useMemo)(() => {
|
|
13206
13455
|
return resolveSortQueryParams(selectedSort);
|
|
13207
13456
|
}, [selectedSort]);
|
|
13208
|
-
const activeTab = (0,
|
|
13457
|
+
const activeTab = (0, import_react23.useMemo)(() => {
|
|
13209
13458
|
return resolvedTabs.find((tab) => tab.value === activeTabValue);
|
|
13210
13459
|
}, [activeTabValue, resolvedTabs]);
|
|
13211
|
-
const venues = (0,
|
|
13460
|
+
const venues = (0, import_react23.useMemo)(() => {
|
|
13212
13461
|
return resolveTabVenus(activeTab, visibleVenues);
|
|
13213
13462
|
}, [activeTab, visibleVenues]);
|
|
13214
|
-
const matchStatus = (0,
|
|
13463
|
+
const matchStatus = (0, import_react23.useMemo)(() => {
|
|
13215
13464
|
return activeTabValue === "matched" ? activeTab == null ? void 0 : activeTab.matchStatus : void 0;
|
|
13216
13465
|
}, [activeTabValue, activeTab]);
|
|
13217
|
-
const resolvedMaxVisibleItems = (0,
|
|
13466
|
+
const resolvedMaxVisibleItems = (0, import_react23.useMemo)(() => {
|
|
13218
13467
|
if (!Number.isFinite(maxVisibleItems)) return void 0;
|
|
13219
13468
|
return Math.max(1, Math.floor(maxVisibleItems));
|
|
13220
13469
|
}, [maxVisibleItems]);
|
|
13221
13470
|
const requestLimit = resolvedMaxVisibleItems != null ? resolvedMaxVisibleItems : limit;
|
|
13222
13471
|
const shouldPaginate = resolvedMaxVisibleItems == null;
|
|
13223
|
-
const endDateFrom = (0,
|
|
13472
|
+
const endDateFrom = (0, import_react23.useMemo)(() => {
|
|
13224
13473
|
if (search) return void 0;
|
|
13225
13474
|
const BUCKET_MINUTES = 5;
|
|
13226
13475
|
const bucket = /* @__PURE__ */ new Date();
|
|
@@ -13236,34 +13485,38 @@ var EventList = ({
|
|
|
13236
13485
|
isFetchingNextPage,
|
|
13237
13486
|
isPlaceholderData,
|
|
13238
13487
|
loadedPageCount
|
|
13239
|
-
} = (0,
|
|
13488
|
+
} = (0, import_hooks45.useVenueEvents)({
|
|
13240
13489
|
queryKeyScope: "event-list",
|
|
13241
13490
|
venues,
|
|
13242
13491
|
search,
|
|
13243
13492
|
categoryIds: resolvedCategoryIds,
|
|
13244
13493
|
matchStatus,
|
|
13245
13494
|
limit: requestLimit,
|
|
13246
|
-
status: [
|
|
13495
|
+
status: [import_hooks45.MarketStatus.open],
|
|
13247
13496
|
sortBy: sortQueryParams.sortBy,
|
|
13248
13497
|
sortDir: sortQueryParams.sortDir,
|
|
13249
13498
|
endDateFrom,
|
|
13499
|
+
// Fold same-venue companion events into one tile per game when the sports
|
|
13500
|
+
// markets experience is enabled (the sports event-detail view loads the
|
|
13501
|
+
// folded companions via aggKey). Gated on the same flag as that view.
|
|
13502
|
+
grouped: showSportsMarkets,
|
|
13250
13503
|
initialPages: initialLoadedPageCount
|
|
13251
13504
|
});
|
|
13252
|
-
(0,
|
|
13505
|
+
(0, import_react23.useEffect)(() => {
|
|
13253
13506
|
if (stateRef) {
|
|
13254
13507
|
stateRef.current = { venueTab: activeTabValue, loadedPageCount };
|
|
13255
13508
|
}
|
|
13256
13509
|
}, [stateRef, activeTabValue, loadedPageCount]);
|
|
13257
|
-
const filteredEvents = (0,
|
|
13510
|
+
const filteredEvents = (0, import_react23.useMemo)(() => {
|
|
13258
13511
|
return filterEventsByTabValue(events, activeTabValue);
|
|
13259
13512
|
}, [events, activeTabValue]);
|
|
13260
|
-
const groupedEvents = (0,
|
|
13513
|
+
const groupedEvents = (0, import_react23.useMemo)(() => {
|
|
13261
13514
|
return splitEventsByLifecycle(filteredEvents);
|
|
13262
13515
|
}, [filteredEvents]);
|
|
13263
|
-
const orderedEvents = (0,
|
|
13516
|
+
const orderedEvents = (0, import_react23.useMemo)(() => {
|
|
13264
13517
|
return groupedEvents.open;
|
|
13265
13518
|
}, [groupedEvents.open]);
|
|
13266
|
-
const tileEvents = (0,
|
|
13519
|
+
const tileEvents = (0, import_react23.useMemo)(() => {
|
|
13267
13520
|
const normalizedEvents = orderedEvents.map((event) => mapEventToEventListItemEvent(event)).filter((event) => event != null);
|
|
13268
13521
|
if (resolvedMaxVisibleItems == null) return normalizedEvents;
|
|
13269
13522
|
return normalizedEvents.slice(0, resolvedMaxVisibleItems);
|
|
@@ -13271,8 +13524,8 @@ var EventList = ({
|
|
|
13271
13524
|
const shouldRenderLoadingState = isLoading && !isPlaceholderData && tileEvents.length === 0;
|
|
13272
13525
|
const shouldRenderEmptyState = !isLoading && !isError && tileEvents.length === 0;
|
|
13273
13526
|
const shouldRenderPaginationLoadingItems = shouldPaginate && hasNextPage;
|
|
13274
|
-
const loadMoreRef = (0,
|
|
13275
|
-
(0,
|
|
13527
|
+
const loadMoreRef = (0, import_react23.useRef)(null);
|
|
13528
|
+
(0, import_react23.useEffect)(() => {
|
|
13276
13529
|
if (!shouldPaginate) return;
|
|
13277
13530
|
if (!hasNextPage) return;
|
|
13278
13531
|
if (typeof IntersectionObserver === "undefined") return;
|
|
@@ -13323,7 +13576,7 @@ var EventList = ({
|
|
|
13323
13576
|
onCategoryRootChange == null ? void 0 : onCategoryRootChange(baseCategoryId != null ? baseCategoryId : void 0);
|
|
13324
13577
|
};
|
|
13325
13578
|
if (shouldRenderLoadingState) {
|
|
13326
|
-
return /* @__PURE__ */ (0,
|
|
13579
|
+
return /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13327
13580
|
Skeleton,
|
|
13328
13581
|
{
|
|
13329
13582
|
view: "event-list",
|
|
@@ -13332,8 +13585,8 @@ var EventList = ({
|
|
|
13332
13585
|
}
|
|
13333
13586
|
);
|
|
13334
13587
|
}
|
|
13335
|
-
return /* @__PURE__ */ (0,
|
|
13336
|
-
/* @__PURE__ */ (0,
|
|
13588
|
+
return /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("section", { className: "agg-event-list flex w-full flex-col gap-2 md:gap-5 t", children: [
|
|
13589
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
|
|
13337
13590
|
"header",
|
|
13338
13591
|
{
|
|
13339
13592
|
className: cn(
|
|
@@ -13342,9 +13595,9 @@ var EventList = ({
|
|
|
13342
13595
|
"gap-2 sm:flex-row sm:items-center sm:gap-4"
|
|
13343
13596
|
),
|
|
13344
13597
|
children: [
|
|
13345
|
-
/* @__PURE__ */ (0,
|
|
13346
|
-
/* @__PURE__ */ (0,
|
|
13347
|
-
/* @__PURE__ */ (0,
|
|
13598
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "agg-event-list-title min-w-32", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Typography, { as: "h2", variant: "title", className: "truncate first-letter:uppercase", children: title2 }) }),
|
|
13599
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "hidden min-w-0 max-w-full items-center gap-3 md:flex", children: [
|
|
13600
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13348
13601
|
EventListTabs,
|
|
13349
13602
|
{
|
|
13350
13603
|
ariaLabel: labels.eventList.tabsAria(title2),
|
|
@@ -13354,7 +13607,7 @@ var EventList = ({
|
|
|
13354
13607
|
overflowBehavior: "scroll"
|
|
13355
13608
|
}
|
|
13356
13609
|
),
|
|
13357
|
-
/* @__PURE__ */ (0,
|
|
13610
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13358
13611
|
Select,
|
|
13359
13612
|
{
|
|
13360
13613
|
ariaLabel: labels.eventList.sortByLabel,
|
|
@@ -13370,8 +13623,8 @@ var EventList = ({
|
|
|
13370
13623
|
]
|
|
13371
13624
|
}
|
|
13372
13625
|
),
|
|
13373
|
-
/* @__PURE__ */ (0,
|
|
13374
|
-
/* @__PURE__ */ (0,
|
|
13626
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "flex w-full gap-2 md:hidden mb-3", children: [
|
|
13627
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13375
13628
|
EventListTabs,
|
|
13376
13629
|
{
|
|
13377
13630
|
ariaLabel: labels.eventList.tabsAria(title2),
|
|
@@ -13381,7 +13634,7 @@ var EventList = ({
|
|
|
13381
13634
|
overflowBehavior: "select"
|
|
13382
13635
|
}
|
|
13383
13636
|
),
|
|
13384
|
-
/* @__PURE__ */ (0,
|
|
13637
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13385
13638
|
Select,
|
|
13386
13639
|
{
|
|
13387
13640
|
ariaLabel: labels.eventList.sortByLabel,
|
|
@@ -13392,23 +13645,23 @@ var EventList = ({
|
|
|
13392
13645
|
contentClassName: "rounded-[12px] py-2 shadow-[0_8px_16px_rgba(0,0,0,0.1)]"
|
|
13393
13646
|
}
|
|
13394
13647
|
),
|
|
13395
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0,
|
|
13648
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13396
13649
|
"button",
|
|
13397
13650
|
{
|
|
13398
13651
|
type: "button",
|
|
13399
13652
|
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",
|
|
13400
13653
|
"aria-label": labels.eventList.subcategoriesOpenAria,
|
|
13401
13654
|
onClick: () => setIsSubcategoriesModalOpen(true),
|
|
13402
|
-
children: /* @__PURE__ */ (0,
|
|
13655
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: "apps", size: "small", color: "currentColor" })
|
|
13403
13656
|
}
|
|
13404
13657
|
) : null
|
|
13405
13658
|
] }),
|
|
13406
|
-
/* @__PURE__ */ (0,
|
|
13659
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
|
|
13407
13660
|
"div",
|
|
13408
13661
|
{
|
|
13409
13662
|
className: cn("flex w-full gap-6", shouldRenderSubcategoryFilters ? "md:items-start" : ""),
|
|
13410
13663
|
children: [
|
|
13411
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0,
|
|
13664
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("aside", { className: "hidden w-[200px] shrink-0 md:block self-start sticky top-4", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("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__ */ (0, import_jsx_runtime133.jsx)(
|
|
13412
13665
|
CategorySidebar,
|
|
13413
13666
|
{
|
|
13414
13667
|
baseCategoryId,
|
|
@@ -13421,7 +13674,7 @@ var EventList = ({
|
|
|
13421
13674
|
onToggleCategory: handleToggleSubcategory
|
|
13422
13675
|
}
|
|
13423
13676
|
) }) }) : null,
|
|
13424
|
-
/* @__PURE__ */ (0,
|
|
13677
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)(
|
|
13425
13678
|
"div",
|
|
13426
13679
|
{
|
|
13427
13680
|
className: cn(
|
|
@@ -13432,7 +13685,7 @@ var EventList = ({
|
|
|
13432
13685
|
gridClassName
|
|
13433
13686
|
),
|
|
13434
13687
|
children: [
|
|
13435
|
-
tileEvents.map((event) => /* @__PURE__ */ (0,
|
|
13688
|
+
tileEvents.map((event) => /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13436
13689
|
EventListItem,
|
|
13437
13690
|
{
|
|
13438
13691
|
event,
|
|
@@ -13443,11 +13696,11 @@ var EventList = ({
|
|
|
13443
13696
|
onMarketClick,
|
|
13444
13697
|
getMarketHref,
|
|
13445
13698
|
href: getEventHref == null ? void 0 : getEventHref(event),
|
|
13446
|
-
marketStatus:
|
|
13699
|
+
marketStatus: import_hooks45.MarketStatus.open
|
|
13447
13700
|
},
|
|
13448
13701
|
event.id
|
|
13449
13702
|
)),
|
|
13450
|
-
shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ (0,
|
|
13703
|
+
shouldRenderPaginationLoadingItems ? Array.from({ length: 6 }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13451
13704
|
EventListItem,
|
|
13452
13705
|
{
|
|
13453
13706
|
isLoading: true,
|
|
@@ -13457,20 +13710,20 @@ var EventList = ({
|
|
|
13457
13710
|
},
|
|
13458
13711
|
`loading-${index}`
|
|
13459
13712
|
)) : null,
|
|
13460
|
-
shouldRenderEmptyState ? /* @__PURE__ */ (0,
|
|
13713
|
+
shouldRenderEmptyState ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "col-span-full w-full", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13461
13714
|
StateMessage,
|
|
13462
13715
|
{
|
|
13463
13716
|
title: labels.eventList.emptyTitle,
|
|
13464
13717
|
description: labels.eventList.emptyDescription,
|
|
13465
|
-
icon: /* @__PURE__ */ (0,
|
|
13718
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: "search-empty" })
|
|
13466
13719
|
}
|
|
13467
13720
|
) }) : null,
|
|
13468
|
-
isError ? /* @__PURE__ */ (0,
|
|
13721
|
+
isError ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "col-span-full w-full", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13469
13722
|
StateMessage,
|
|
13470
13723
|
{
|
|
13471
13724
|
title: labels.eventList.errorTitle,
|
|
13472
13725
|
description: labels.eventList.errorDescription,
|
|
13473
|
-
icon: /* @__PURE__ */ (0,
|
|
13726
|
+
icon: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Icon, { name: "warning" })
|
|
13474
13727
|
}
|
|
13475
13728
|
) }) : null
|
|
13476
13729
|
]
|
|
@@ -13479,7 +13732,7 @@ var EventList = ({
|
|
|
13479
13732
|
]
|
|
13480
13733
|
}
|
|
13481
13734
|
),
|
|
13482
|
-
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0,
|
|
13735
|
+
shouldRenderSubcategoryFilters ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Modal, { open: isSubcategoriesModalOpen, onOpenChange: setIsSubcategoriesModalOpen, children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13483
13736
|
Modal.Container,
|
|
13484
13737
|
{
|
|
13485
13738
|
classNames: {
|
|
@@ -13488,20 +13741,20 @@ var EventList = ({
|
|
|
13488
13741
|
content: "items-end p-0 pointer-events-none",
|
|
13489
13742
|
container: "w-full max-w-none border-0 bg-transparent shadow-none"
|
|
13490
13743
|
},
|
|
13491
|
-
children: /* @__PURE__ */ (0,
|
|
13492
|
-
/* @__PURE__ */ (0,
|
|
13493
|
-
/* @__PURE__ */ (0,
|
|
13494
|
-
/* @__PURE__ */ (0,
|
|
13495
|
-
/* @__PURE__ */ (0,
|
|
13744
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "pointer-events-auto w-full rounded-t-[12px] border border-agg-separator bg-agg-secondary", children: [
|
|
13745
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "flex justify-center pb-1 pt-3", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "h-1 w-10 rounded-full bg-agg-muted-foreground/30" }) }),
|
|
13746
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsxs)("div", { className: "flex items-center justify-between px-4 pb-2 pt-1", children: [
|
|
13747
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(Dialog2.Title, { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children: labels.eventList.subcategoriesLabel }),
|
|
13748
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13496
13749
|
Dialog2.Close,
|
|
13497
13750
|
{
|
|
13498
13751
|
className: "flex cursor-pointer items-center justify-center rounded-full p-1 text-agg-muted-foreground hover:bg-agg-secondary-hover",
|
|
13499
13752
|
"aria-label": labels.common.close,
|
|
13500
|
-
children: /* @__PURE__ */ (0,
|
|
13753
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(CloseIcon, { className: "h-5 w-5" })
|
|
13501
13754
|
}
|
|
13502
13755
|
)
|
|
13503
13756
|
] }),
|
|
13504
|
-
/* @__PURE__ */ (0,
|
|
13757
|
+
/* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { className: "flex flex-col gap-1 px-4 pb-4", children: /* @__PURE__ */ (0, import_jsx_runtime133.jsx)(
|
|
13505
13758
|
CategorySidebar,
|
|
13506
13759
|
{
|
|
13507
13760
|
baseCategoryId,
|
|
@@ -13517,7 +13770,7 @@ var EventList = ({
|
|
|
13517
13770
|
] })
|
|
13518
13771
|
}
|
|
13519
13772
|
) }) : null,
|
|
13520
|
-
shouldPaginate && hasNextPage ? /* @__PURE__ */ (0,
|
|
13773
|
+
shouldPaginate && hasNextPage ? /* @__PURE__ */ (0, import_jsx_runtime133.jsx)("div", { ref: loadMoreRef, className: "agg-event-list-sentinel h-px w-full", "aria-hidden": true }) : null
|
|
13521
13774
|
] });
|
|
13522
13775
|
};
|
|
13523
13776
|
EventList.displayName = "EventList";
|
|
@@ -13537,6 +13790,7 @@ EventList.displayName = "EventList";
|
|
|
13537
13790
|
formatProbabilityCents,
|
|
13538
13791
|
mergeVenueOutcomeOrderbooks,
|
|
13539
13792
|
orderbookRowLimitDefault,
|
|
13793
|
+
resolveEventDetailsSyncKey,
|
|
13540
13794
|
resolveOrderBookRows,
|
|
13541
13795
|
resolveUnifiedOrderBookEntries,
|
|
13542
13796
|
useCenterOrderbookSpread
|