@agg-market/ui 10.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/chunk-AKR2ZSBQ.mjs +1645 -0
- package/dist/{chunk-55YYUTBK.mjs → chunk-TA74OXPL.mjs} +206 -118
- package/dist/{chunk-5G4T5R2H.mjs → chunk-VMJGQKKU.mjs} +29 -47
- package/dist/{chunk-GYOCLZGH.mjs → chunk-VOYSFL6U.mjs} +227 -401
- package/dist/{chunk-XP7DREIX.mjs → chunk-XUML4ZJQ.mjs} +1626 -791
- package/dist/events.js +1451 -1306
- package/dist/events.mjs +2 -2
- package/dist/index.js +4293 -3202
- package/dist/index.mjs +20 -8
- package/dist/modals.js +1045 -872
- package/dist/modals.mjs +2 -2
- package/dist/pages.js +3488 -2226
- package/dist/pages.mjs +4 -4
- package/dist/primitives.js +1593 -765
- package/dist/primitives.mjs +11 -1
- package/dist/styles.css +2 -2
- package/dist/tailwind.css +2 -2
- package/dist/trading.js +864 -676
- package/dist/trading.mjs +2 -2
- package/dist/types/events/list/event-list.types.d.mts +1 -1
- package/dist/types/events/list/event-list.types.d.ts +1 -1
- package/dist/types/events/market-details/index.d.mts +2 -2
- package/dist/types/events/market-details/index.d.ts +2 -2
- package/dist/types/events/market-details/market-details.types.d.mts +1 -5
- package/dist/types/events/market-details/market-details.types.d.ts +1 -5
- package/dist/types/pages/home/index.d.mts +1 -1
- package/dist/types/pages/home/index.d.ts +1 -1
- package/dist/types/pages/user-profile/components/available-balance-card.d.mts +17 -0
- package/dist/types/pages/user-profile/components/available-balance-card.d.ts +17 -0
- package/dist/types/pages/user-profile/components/balance-display.d.mts +3 -5
- package/dist/types/pages/user-profile/components/balance-display.d.ts +3 -5
- package/dist/types/pages/user-profile/components/positions-activity.d.mts +11 -1
- package/dist/types/pages/user-profile/components/positions-activity.d.ts +11 -1
- package/dist/types/pages/user-profile/components/positions-value-card.d.mts +10 -0
- package/dist/types/pages/user-profile/components/positions-value-card.d.ts +10 -0
- package/dist/types/pages/user-profile/components/user-info-card.d.mts +3 -1
- package/dist/types/pages/user-profile/components/user-info-card.d.ts +3 -1
- package/dist/types/pages/user-profile/index.d.mts +2 -2
- package/dist/types/pages/user-profile/index.d.ts +2 -2
- package/dist/types/pages/user-profile/user-profile.constants.d.mts +1 -2
- package/dist/types/pages/user-profile/user-profile.constants.d.ts +1 -2
- package/dist/types/pages/user-profile/user-profile.types.d.mts +29 -16
- package/dist/types/pages/user-profile/user-profile.types.d.ts +29 -16
- package/dist/types/primitives/agg-logo/index.d.mts +6 -0
- package/dist/types/primitives/agg-logo/index.d.ts +6 -0
- package/dist/types/primitives/header/agg-logo.d.mts +2 -0
- package/dist/types/primitives/header/agg-logo.d.ts +2 -0
- package/dist/types/primitives/header/header.constants.d.mts +3 -0
- package/dist/types/primitives/header/header.constants.d.ts +3 -0
- package/dist/types/primitives/header/header.types.d.mts +28 -0
- package/dist/types/primitives/header/header.types.d.ts +28 -0
- package/dist/types/primitives/header/index.d.mts +7 -0
- package/dist/types/primitives/header/index.d.ts +7 -0
- package/dist/types/primitives/icon/index.d.mts +3 -1
- package/dist/types/primitives/icon/index.d.ts +3 -1
- package/dist/types/primitives/icon/registry.d.mts +8 -0
- package/dist/types/primitives/icon/registry.d.ts +8 -0
- package/dist/types/primitives/icon/svg/bnb.d.mts +5 -0
- package/dist/types/primitives/icon/svg/bnb.d.ts +5 -0
- package/dist/types/primitives/icon/svg/polygon.d.mts +5 -0
- package/dist/types/primitives/icon/svg/polygon.d.ts +5 -0
- package/dist/types/primitives/index.d.mts +3 -0
- package/dist/types/primitives/index.d.ts +3 -0
- package/dist/types/primitives/search/index.d.mts +1 -1
- package/dist/types/primitives/search/index.d.ts +1 -1
- package/dist/types/primitives/search/search.types.d.mts +9 -59
- package/dist/types/primitives/search/search.types.d.ts +9 -59
- package/dist/types/primitives/search/search.utils.d.mts +4 -0
- package/dist/types/primitives/search/search.utils.d.ts +4 -0
- package/dist/types/primitives/skeleton/skeleton.types.d.mts +3 -0
- package/dist/types/primitives/skeleton/skeleton.types.d.ts +3 -0
- package/dist/types/primitives/skeleton/views/search-skeleton-view.d.mts +5 -0
- package/dist/types/primitives/skeleton/views/search-skeleton-view.d.ts +5 -0
- package/dist/types/primitives/skeleton/views/user-profile-overview-skeleton-view.d.mts +5 -0
- package/dist/types/primitives/skeleton/views/user-profile-overview-skeleton-view.d.ts +5 -0
- package/dist/types/primitives/skeleton/views/user-profile-positions-activity-skeleton-view.d.mts +5 -0
- package/dist/types/primitives/skeleton/views/user-profile-positions-activity-skeleton-view.d.ts +5 -0
- package/dist/types/primitives/tooltip/index.d.mts +6 -0
- package/dist/types/primitives/tooltip/index.d.ts +6 -0
- package/dist/types/primitives/tooltip/tooltip.constants.d.mts +2 -0
- package/dist/types/primitives/tooltip/tooltip.constants.d.ts +2 -0
- package/dist/types/primitives/tooltip/tooltip.types.d.mts +27 -0
- package/dist/types/primitives/tooltip/tooltip.types.d.ts +27 -0
- package/dist/types/profile/tabs/about-tab.d.mts +1 -1
- package/dist/types/profile/tabs/about-tab.d.ts +1 -1
- package/dist/types/profile/tabs/accounts-wallets-tab.d.mts +1 -1
- package/dist/types/profile/tabs/accounts-wallets-tab.d.ts +1 -1
- package/dist/types/trading/types.d.mts +2 -2
- package/dist/types/trading/types.d.ts +2 -2
- package/package.json +4 -3
- package/dist/chunk-RYQSVETG.mjs +0 -1246
|
@@ -20,14 +20,24 @@ import {
|
|
|
20
20
|
detailsBaseCardClassName,
|
|
21
21
|
eventListItemDetailsTimeRanges,
|
|
22
22
|
fallbackLineColors,
|
|
23
|
+
formatCountLabel,
|
|
23
24
|
getMarketDetailsTabs,
|
|
24
25
|
getMotionClassName,
|
|
26
|
+
getVenueSummary,
|
|
25
27
|
lineColorByVenue,
|
|
26
28
|
marketDetailsBaseCardClassName,
|
|
27
29
|
marketDetailsDefaultIsOpened,
|
|
30
|
+
normalizeProbability,
|
|
28
31
|
orderBookRowLimitDefault,
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
resolveEventListItemEvent,
|
|
33
|
+
resolveOutcomeTitle,
|
|
34
|
+
resolveTileImage,
|
|
35
|
+
resolveTileTitle,
|
|
36
|
+
resolveVenueLabel,
|
|
37
|
+
resolveVisibleOutcomes,
|
|
38
|
+
selectPrimaryVenueMarket,
|
|
39
|
+
sortOutcomes
|
|
40
|
+
} from "./chunk-XUML4ZJQ.mjs";
|
|
31
41
|
|
|
32
42
|
// src/events/item/index.tsx
|
|
33
43
|
import dayjs from "dayjs";
|
|
@@ -40,8 +50,7 @@ import {
|
|
|
40
50
|
|
|
41
51
|
// src/shared/query-error.ts
|
|
42
52
|
var getErrorStatus = (error) => {
|
|
43
|
-
if (!error || typeof error !== "object")
|
|
44
|
-
return null;
|
|
53
|
+
if (!error || typeof error !== "object") return null;
|
|
45
54
|
const status = error.status;
|
|
46
55
|
return typeof status === "number" ? status : null;
|
|
47
56
|
};
|
|
@@ -49,142 +58,6 @@ var isErrorWithStatus = (error, status) => {
|
|
|
49
58
|
return getErrorStatus(error) === status;
|
|
50
59
|
};
|
|
51
60
|
|
|
52
|
-
// src/events/item/event-list-item.utils.ts
|
|
53
|
-
var resolveEventListItemEvent = (fetchedEvent) => {
|
|
54
|
-
if (!fetchedEvent)
|
|
55
|
-
return void 0;
|
|
56
|
-
if (!fetchedEvent.venueMarkets || fetchedEvent.venueMarkets.length === 0)
|
|
57
|
-
return void 0;
|
|
58
|
-
return fetchedEvent;
|
|
59
|
-
};
|
|
60
|
-
var normalizeProbability = (value) => {
|
|
61
|
-
if (typeof value !== "number" || !Number.isFinite(value))
|
|
62
|
-
return void 0;
|
|
63
|
-
if (value < 0)
|
|
64
|
-
return 0;
|
|
65
|
-
if (value > 1)
|
|
66
|
-
return 1;
|
|
67
|
-
return value;
|
|
68
|
-
};
|
|
69
|
-
var hasDateLabel = (outcome) => {
|
|
70
|
-
return !!toDate(outcome.label);
|
|
71
|
-
};
|
|
72
|
-
var sortOutcomes = (outcomes) => {
|
|
73
|
-
if (outcomes.length <= 1)
|
|
74
|
-
return outcomes;
|
|
75
|
-
const now = Date.now();
|
|
76
|
-
if (outcomes.some(hasDateLabel)) {
|
|
77
|
-
return [...outcomes].sort((a, b) => {
|
|
78
|
-
var _a, _b, _c, _d;
|
|
79
|
-
const aDate = (_b = (_a = toDate(a.label)) == null ? void 0 : _a.getTime()) != null ? _b : 0;
|
|
80
|
-
const bDate = (_d = (_c = toDate(b.label)) == null ? void 0 : _c.getTime()) != null ? _d : 0;
|
|
81
|
-
return Math.abs(aDate - now) - Math.abs(bDate - now);
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
return [...outcomes].sort((a, b) => {
|
|
85
|
-
var _a, _b;
|
|
86
|
-
const aPrice = (_a = normalizeProbability(a.price)) != null ? _a : 0;
|
|
87
|
-
const bPrice = (_b = normalizeProbability(b.price)) != null ? _b : 0;
|
|
88
|
-
return bPrice - aPrice;
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
var compareVisibleOutcomeRows = (left, right) => {
|
|
92
|
-
var _a, _b;
|
|
93
|
-
const leftDate = toDate(resolveOutcomeTitle(left.outcome));
|
|
94
|
-
const rightDate = toDate(resolveOutcomeTitle(right.outcome));
|
|
95
|
-
if (leftDate && rightDate) {
|
|
96
|
-
return leftDate.getTime() - rightDate.getTime();
|
|
97
|
-
}
|
|
98
|
-
const leftProbability = (_a = normalizeProbability(left.outcome.price)) != null ? _a : -1;
|
|
99
|
-
const rightProbability = (_b = normalizeProbability(right.outcome.price)) != null ? _b : -1;
|
|
100
|
-
return rightProbability - leftProbability;
|
|
101
|
-
};
|
|
102
|
-
var shouldReplaceVisibleOutcome = (current, next) => {
|
|
103
|
-
var _a, _b;
|
|
104
|
-
const currentVolume = typeof current.market.volume === "number" ? current.market.volume : -1;
|
|
105
|
-
const nextVolume = typeof next.market.volume === "number" ? next.market.volume : -1;
|
|
106
|
-
if (currentVolume !== nextVolume) {
|
|
107
|
-
return nextVolume > currentVolume;
|
|
108
|
-
}
|
|
109
|
-
const currentProbability = (_a = normalizeProbability(current.outcome.price)) != null ? _a : -1;
|
|
110
|
-
const nextProbability = (_b = normalizeProbability(next.outcome.price)) != null ? _b : -1;
|
|
111
|
-
return nextProbability > currentProbability;
|
|
112
|
-
};
|
|
113
|
-
var resolveVisibleOutcomes = (venueMarkets, maxOutcomes) => {
|
|
114
|
-
const visibleOutcomesByLabel = /* @__PURE__ */ new Map();
|
|
115
|
-
venueMarkets.forEach((market) => {
|
|
116
|
-
sortOutcomes(market.venueMarketOutcomes).forEach((outcome) => {
|
|
117
|
-
const title = resolveOutcomeTitle(outcome);
|
|
118
|
-
const normalizedTitle = title.trim().toLowerCase();
|
|
119
|
-
const nextVisibleOutcome = {
|
|
120
|
-
venue: market.venue,
|
|
121
|
-
market,
|
|
122
|
-
outcome,
|
|
123
|
-
title
|
|
124
|
-
};
|
|
125
|
-
const currentVisibleOutcome = visibleOutcomesByLabel.get(normalizedTitle);
|
|
126
|
-
if (!currentVisibleOutcome || shouldReplaceVisibleOutcome(currentVisibleOutcome, nextVisibleOutcome)) {
|
|
127
|
-
visibleOutcomesByLabel.set(normalizedTitle, nextVisibleOutcome);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
return [...visibleOutcomesByLabel.values()].sort(compareVisibleOutcomeRows).slice(0, Math.max(1, maxOutcomes));
|
|
132
|
-
};
|
|
133
|
-
var resolveOutcomeTitle = (outcome) => {
|
|
134
|
-
if (outcome.title && outcome.title.trim())
|
|
135
|
-
return outcome.title;
|
|
136
|
-
return outcome.label;
|
|
137
|
-
};
|
|
138
|
-
var selectPrimaryVenueMarket = (venueMarkets) => {
|
|
139
|
-
if (venueMarkets.length === 0)
|
|
140
|
-
return void 0;
|
|
141
|
-
if (venueMarkets.length === 1)
|
|
142
|
-
return venueMarkets[0];
|
|
143
|
-
return [...venueMarkets].sort((a, b) => {
|
|
144
|
-
const aVolume = typeof a.volume === "number" ? a.volume : -1;
|
|
145
|
-
const bVolume = typeof b.volume === "number" ? b.volume : -1;
|
|
146
|
-
return bVolume - aVolume;
|
|
147
|
-
})[0];
|
|
148
|
-
};
|
|
149
|
-
var resolveTileTitle = (event, primaryVenueMarket, titleOverride) => {
|
|
150
|
-
if (typeof titleOverride === "string" && titleOverride.trim()) {
|
|
151
|
-
return titleOverride;
|
|
152
|
-
}
|
|
153
|
-
if (typeof (primaryVenueMarket == null ? void 0 : primaryVenueMarket.question) === "string" && primaryVenueMarket.question.trim()) {
|
|
154
|
-
return primaryVenueMarket.question;
|
|
155
|
-
}
|
|
156
|
-
return event.title;
|
|
157
|
-
};
|
|
158
|
-
var resolveTileImage = (event, primaryVenueMarket, imageOverride) => {
|
|
159
|
-
if (typeof imageOverride === "string" && imageOverride.trim()) {
|
|
160
|
-
return imageOverride;
|
|
161
|
-
}
|
|
162
|
-
if (typeof (primaryVenueMarket == null ? void 0 : primaryVenueMarket.image) === "string" && primaryVenueMarket.image.trim()) {
|
|
163
|
-
return primaryVenueMarket.image;
|
|
164
|
-
}
|
|
165
|
-
if (typeof event.image === "string" && event.image.trim()) {
|
|
166
|
-
return event.image;
|
|
167
|
-
}
|
|
168
|
-
return void 0;
|
|
169
|
-
};
|
|
170
|
-
var formatCountLabel = (count, singular, plural) => {
|
|
171
|
-
return `${count} ${count === 1 ? singular : plural}`;
|
|
172
|
-
};
|
|
173
|
-
var getVenueSummary = (venueMarkets) => {
|
|
174
|
-
const uniqueVenues = Array.from(new Set(venueMarkets.map((market) => market.venue)));
|
|
175
|
-
return {
|
|
176
|
-
marketCount: venueMarkets.length,
|
|
177
|
-
venueCount: uniqueVenues.length,
|
|
178
|
-
singleVenue: uniqueVenues.length === 1 ? uniqueVenues[0] : void 0
|
|
179
|
-
};
|
|
180
|
-
};
|
|
181
|
-
var resolveVenueLabel = (venue, venueInfo, labels) => {
|
|
182
|
-
var _a, _b;
|
|
183
|
-
if (!venue)
|
|
184
|
-
return labels.eventItem.venueSingular;
|
|
185
|
-
return (_b = (_a = venueInfo == null ? void 0 : venueInfo[venue]) == null ? void 0 : _a.label) != null ? _b : labels.venues[venue];
|
|
186
|
-
};
|
|
187
|
-
|
|
188
61
|
// src/events/item/index.tsx
|
|
189
62
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
190
63
|
var EventListItemLoadingState = ({
|
|
@@ -255,8 +128,7 @@ var EventListItemContent = ({
|
|
|
255
128
|
return selectPrimaryVenueMarket(allVenueMarkets);
|
|
256
129
|
}, [allVenueMarkets]);
|
|
257
130
|
const visibleOutcomes = useMemo(() => {
|
|
258
|
-
if (allVenueMarkets.length === 0)
|
|
259
|
-
return [];
|
|
131
|
+
if (allVenueMarkets.length === 0) return [];
|
|
260
132
|
return resolveVisibleOutcomes(allVenueMarkets, maxOutcomes);
|
|
261
133
|
}, [allVenueMarkets, maxOutcomes]);
|
|
262
134
|
const resolvedTitle = resolveTileTitle(event, primaryVenueMarket, title);
|
|
@@ -267,22 +139,19 @@ var EventListItemContent = ({
|
|
|
267
139
|
return Array.from(new Set(allVenueMarkets.map((market) => market.venue))).slice(0, 4);
|
|
268
140
|
}, [allVenueMarkets]);
|
|
269
141
|
const resolvedVolume = typeof event.volume === "number" ? event.volume : (_a = primaryVenueMarket == null ? void 0 : primaryVenueMarket.volume) != null ? _a : void 0;
|
|
270
|
-
const volumeLabel = typeof resolvedVolume === "number" ? `${config.formatCompactCurrency(resolvedVolume)} ${labels.eventItem.volumeSuffix}` : "";
|
|
142
|
+
const volumeLabel = typeof resolvedVolume === "number" ? `${config.formatting.formatCompactCurrency(resolvedVolume)} ${labels.eventItem.volumeSuffix}` : "";
|
|
271
143
|
const handleKeyDown = (eventToHandle) => {
|
|
272
|
-
if (!onClick)
|
|
273
|
-
return;
|
|
144
|
+
if (!onClick) return;
|
|
274
145
|
if ((eventToHandle == null ? void 0 : eventToHandle.key) === "Enter" || (eventToHandle == null ? void 0 : eventToHandle.key) === " ") {
|
|
275
146
|
eventToHandle == null ? void 0 : eventToHandle.preventDefault();
|
|
276
147
|
onClick == null ? void 0 : onClick(event);
|
|
277
148
|
}
|
|
278
149
|
};
|
|
279
150
|
const renderArbitrage = (value) => {
|
|
280
|
-
if (value == null)
|
|
281
|
-
|
|
282
|
-
if (Math.abs(value) < config.arbitrageThreshold)
|
|
283
|
-
return null;
|
|
151
|
+
if (value == null) return null;
|
|
152
|
+
if (Math.abs(value) < config.market.arbitrageThreshold) return null;
|
|
284
153
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1", "text-agg-success"), children: [
|
|
285
|
-
/* @__PURE__ */ jsx(Typography, { variant: "label-strong", className: "text-agg-success", children: config.formatPercent(value) }),
|
|
154
|
+
/* @__PURE__ */ jsx(Typography, { variant: "label-strong", className: "text-agg-success", children: config.formatting.formatPercent(value) }),
|
|
286
155
|
/* @__PURE__ */ jsx(
|
|
287
156
|
Icon,
|
|
288
157
|
{
|
|
@@ -353,7 +222,7 @@ var EventListItemContent = ({
|
|
|
353
222
|
showBadge ? /* @__PURE__ */ jsx(
|
|
354
223
|
Badge,
|
|
355
224
|
{
|
|
356
|
-
text: config.formatPercent(probability),
|
|
225
|
+
text: config.formatting.formatPercent(probability),
|
|
357
226
|
prefix: /* @__PURE__ */ jsx(VenueLogo, { venue: visibleOutcome.venue, size: "small" }),
|
|
358
227
|
size: "large",
|
|
359
228
|
classNames: {
|
|
@@ -566,13 +435,11 @@ var normalizeLabel = (value) => {
|
|
|
566
435
|
return value.trim().toLowerCase();
|
|
567
436
|
};
|
|
568
437
|
var isDateLikeLabel = (value) => {
|
|
569
|
-
if (!value.trim())
|
|
570
|
-
return false;
|
|
438
|
+
if (!value.trim()) return false;
|
|
571
439
|
return dayjs2(value).isValid();
|
|
572
440
|
};
|
|
573
441
|
var getDefaultSelectedTimeRange = (value, fallback = "1D") => {
|
|
574
|
-
if (!value)
|
|
575
|
-
return fallback;
|
|
442
|
+
if (!value) return fallback;
|
|
576
443
|
return value;
|
|
577
444
|
};
|
|
578
445
|
var getTimeWindowByRange = (range) => {
|
|
@@ -645,8 +512,7 @@ var resolveOutcomesByVenue = (venueMarkets, selectedOutcomeLabel) => {
|
|
|
645
512
|
const matchedOutcome = sortOutcomes(market.venueMarketOutcomes).find((outcome) => {
|
|
646
513
|
return matchOutcomeByLabel(outcome, selectedOutcomeLabel);
|
|
647
514
|
});
|
|
648
|
-
if (!matchedOutcome)
|
|
649
|
-
return null;
|
|
515
|
+
if (!matchedOutcome) return null;
|
|
650
516
|
return {
|
|
651
517
|
venue: market.venue,
|
|
652
518
|
market,
|
|
@@ -657,13 +523,11 @@ var resolveOutcomesByVenue = (venueMarkets, selectedOutcomeLabel) => {
|
|
|
657
523
|
var resolveSeriesColor = (venue, index) => {
|
|
658
524
|
var _a;
|
|
659
525
|
const colorFromVenue = lineColorByVenue[venue];
|
|
660
|
-
if (colorFromVenue)
|
|
661
|
-
return colorFromVenue;
|
|
526
|
+
if (colorFromVenue) return colorFromVenue;
|
|
662
527
|
return (_a = fallbackLineColors[index % fallbackLineColors.length]) != null ? _a : "#2e5cff";
|
|
663
528
|
};
|
|
664
529
|
var toNonEmptyString = (value) => {
|
|
665
|
-
if (typeof value !== "string")
|
|
666
|
-
return void 0;
|
|
530
|
+
if (typeof value !== "string") return void 0;
|
|
667
531
|
const trimmedValue = value.trim();
|
|
668
532
|
return trimmedValue ? trimmedValue : void 0;
|
|
669
533
|
};
|
|
@@ -678,8 +542,7 @@ var resolveCanonicalMarketId = (venueMarkets, fallbackMarketId) => {
|
|
|
678
542
|
return (_a = toNonEmptyString(fallbackMarketId)) != null ? _a : uniqueMarketIds[0];
|
|
679
543
|
};
|
|
680
544
|
var toChartDisplayValue = (value, transformProbability) => {
|
|
681
|
-
if (value == null || !Number.isFinite(value))
|
|
682
|
-
return void 0;
|
|
545
|
+
if (value == null || !Number.isFinite(value)) return void 0;
|
|
683
546
|
return transformProbability(value) * 100;
|
|
684
547
|
};
|
|
685
548
|
var marketChartCandleToLineChartPoint = (candle, transformProbability) => {
|
|
@@ -713,8 +576,7 @@ var resolveMarketChartVenueSeries = ({
|
|
|
713
576
|
chartData,
|
|
714
577
|
transformProbability
|
|
715
578
|
}) => {
|
|
716
|
-
if (!chartData)
|
|
717
|
-
return [];
|
|
579
|
+
if (!chartData) return [];
|
|
718
580
|
return Object.entries(chartData.venues).map(([venue, venueData]) => ({
|
|
719
581
|
venue,
|
|
720
582
|
points: venueData.candles.map(
|
|
@@ -805,16 +667,13 @@ var EventListItemDetailsNotFoundState = ({
|
|
|
805
667
|
};
|
|
806
668
|
var probabilityModeOrder = ["yes", "no"];
|
|
807
669
|
var clampProbability = (value) => {
|
|
808
|
-
if (value < 0)
|
|
809
|
-
|
|
810
|
-
if (value > 1)
|
|
811
|
-
return 1;
|
|
670
|
+
if (value < 0) return 0;
|
|
671
|
+
if (value > 1) return 1;
|
|
812
672
|
return value;
|
|
813
673
|
};
|
|
814
674
|
var resolveAverageProbability = (values) => {
|
|
815
675
|
const validValues = values.filter((value) => value != null);
|
|
816
|
-
if (validValues.length === 0)
|
|
817
|
-
return void 0;
|
|
676
|
+
if (validValues.length === 0) return void 0;
|
|
818
677
|
return validValues.reduce((sum, value) => sum + value, 0) / validValues.length;
|
|
819
678
|
};
|
|
820
679
|
var EventListItemDetailsGraphSection = ({
|
|
@@ -833,7 +692,9 @@ var EventListItemDetailsGraphSection = ({
|
|
|
833
692
|
}) => {
|
|
834
693
|
var _a, _b;
|
|
835
694
|
const labels = useLabels3();
|
|
836
|
-
const {
|
|
695
|
+
const {
|
|
696
|
+
features: { enableLiveUpdates }
|
|
697
|
+
} = useSdkUiConfig2();
|
|
837
698
|
const [selectedVenue, setSelectedVenue] = useState(null);
|
|
838
699
|
const [activeProbabilityMode, setActiveProbabilityMode] = useState("yes");
|
|
839
700
|
const probabilityModeConfigs = useMemo3(() => {
|
|
@@ -949,8 +810,7 @@ var EventListItemDetailsGraphSection = ({
|
|
|
949
810
|
lineStyle: "solid"
|
|
950
811
|
};
|
|
951
812
|
});
|
|
952
|
-
if (!selectedVenue)
|
|
953
|
-
return series;
|
|
813
|
+
if (!selectedVenue) return series;
|
|
954
814
|
return series.filter((seriesItem) => seriesItem.venue === selectedVenue);
|
|
955
815
|
}, [
|
|
956
816
|
activeCanonicalMarketId,
|
|
@@ -999,8 +859,7 @@ var EventListItemDetailsGraphSection = ({
|
|
|
999
859
|
};
|
|
1000
860
|
const handleVenueToggle = (venue) => {
|
|
1001
861
|
setSelectedVenue((currentSelectedVenue) => {
|
|
1002
|
-
if (currentSelectedVenue === venue)
|
|
1003
|
-
return null;
|
|
862
|
+
if (currentSelectedVenue === venue) return null;
|
|
1004
863
|
return venue;
|
|
1005
864
|
});
|
|
1006
865
|
};
|
|
@@ -1135,8 +994,7 @@ var EventListItemDetailsContent = ({
|
|
|
1135
994
|
return selectPrimaryVenueMarket(venueMarkets);
|
|
1136
995
|
}, [venueMarkets]);
|
|
1137
996
|
const filteredVenueMarkets = useMemo3(() => {
|
|
1138
|
-
if (!selectedMarket)
|
|
1139
|
-
return venueMarkets;
|
|
997
|
+
if (!selectedMarket) return venueMarkets;
|
|
1140
998
|
return venueMarkets.filter(
|
|
1141
999
|
(vm) => vm.question === (selectedMarket == null ? void 0 : selectedMarket.question)
|
|
1142
1000
|
);
|
|
@@ -1147,7 +1005,7 @@ var EventListItemDetailsContent = ({
|
|
|
1147
1005
|
const [selectedOutcomeLabel, setSelectedOutcomeLabel] = useState(() => {
|
|
1148
1006
|
return resolveDefaultOutcomeLabel(outcomeLabels);
|
|
1149
1007
|
});
|
|
1150
|
-
const configTimeRange = config.defaultChartTimeRange;
|
|
1008
|
+
const configTimeRange = config.chart.defaultChartTimeRange;
|
|
1151
1009
|
const [selectedTimeRange, setSelectedTimeRange] = useState(() => {
|
|
1152
1010
|
return getDefaultSelectedTimeRange(defaultTimeRange, configTimeRange);
|
|
1153
1011
|
});
|
|
@@ -1170,8 +1028,7 @@ var EventListItemDetailsContent = ({
|
|
|
1170
1028
|
);
|
|
1171
1029
|
}, [outcomeLabels, filteredVenueMarkets]);
|
|
1172
1030
|
const mainOutcomeLabel = useMemo3(() => {
|
|
1173
|
-
if (outcomeLabels.length === 0)
|
|
1174
|
-
return void 0;
|
|
1031
|
+
if (outcomeLabels.length === 0) return void 0;
|
|
1175
1032
|
return [...outcomeLabels].sort((left, right) => {
|
|
1176
1033
|
var _a2, _b;
|
|
1177
1034
|
const leftProbability = (_a2 = probabilityByLabel.get(left)) != null ? _a2 : -1;
|
|
@@ -1214,9 +1071,8 @@ var EventListItemDetailsContent = ({
|
|
|
1214
1071
|
const volumeLabel = useMemo3(() => {
|
|
1215
1072
|
var _a2;
|
|
1216
1073
|
const resolvedVolume = typeof event.volume === "number" ? event.volume : (_a2 = primaryVenueMarket == null ? void 0 : primaryVenueMarket.volume) != null ? _a2 : void 0;
|
|
1217
|
-
if (typeof resolvedVolume !== "number")
|
|
1218
|
-
|
|
1219
|
-
return `${config.formatCompactCurrency(resolvedVolume)} ${labels.eventItemDetails.volumeSuffix}`;
|
|
1074
|
+
if (typeof resolvedVolume !== "number") return "";
|
|
1075
|
+
return `${config.formatting.formatCompactCurrency(resolvedVolume)} ${labels.eventItemDetails.volumeSuffix}`;
|
|
1220
1076
|
}, [config, event.volume, labels.eventItemDetails.volumeSuffix, primaryVenueMarket == null ? void 0 : primaryVenueMarket.volume]);
|
|
1221
1077
|
if (!primaryVenueMarket || !selectedOutcomeLabel) {
|
|
1222
1078
|
return /* @__PURE__ */ jsx3(
|
|
@@ -1332,7 +1188,7 @@ var EventListItemDetailsContent = ({
|
|
|
1332
1188
|
isDateOutcomeMarket,
|
|
1333
1189
|
classNames,
|
|
1334
1190
|
venueInfo,
|
|
1335
|
-
formatPercent: config.formatPercent,
|
|
1191
|
+
formatPercent: config.formatting.formatPercent,
|
|
1336
1192
|
selectedTimeRange,
|
|
1337
1193
|
selectedChartType
|
|
1338
1194
|
}
|
|
@@ -1495,14 +1351,12 @@ var hasBinaryLabels = (labels) => {
|
|
|
1495
1351
|
};
|
|
1496
1352
|
var resolveInitialTab = (defaultTab) => {
|
|
1497
1353
|
const parsedTab = MarketDetailsTabSchema.safeParse(defaultTab);
|
|
1498
|
-
if (parsedTab.success)
|
|
1499
|
-
return parsedTab.data;
|
|
1354
|
+
if (parsedTab.success) return parsedTab.data;
|
|
1500
1355
|
return "order-book";
|
|
1501
1356
|
};
|
|
1502
1357
|
var resolveMarketFromVenueMarkets = (venueMarkets, marketId) => {
|
|
1503
1358
|
var _a, _b;
|
|
1504
|
-
if (!venueMarkets || venueMarkets.length === 0)
|
|
1505
|
-
return void 0;
|
|
1359
|
+
if (!venueMarkets || venueMarkets.length === 0) return void 0;
|
|
1506
1360
|
if (!marketId) {
|
|
1507
1361
|
const primary = selectPrimaryVenueMarket(venueMarkets);
|
|
1508
1362
|
const totalVolume2 = venueMarkets.reduce((sum, vm) => {
|
|
@@ -1522,8 +1376,7 @@ var resolveMarketFromVenueMarkets = (venueMarkets, marketId) => {
|
|
|
1522
1376
|
const matchedVenueMarket = venueMarkets.find(
|
|
1523
1377
|
(vm) => vm.id === marketId || vm.externalIdentifier === marketId
|
|
1524
1378
|
);
|
|
1525
|
-
if (!matchedVenueMarket)
|
|
1526
|
-
return void 0;
|
|
1379
|
+
if (!matchedVenueMarket) return void 0;
|
|
1527
1380
|
const siblingVenueMarkets = venueMarkets.filter(
|
|
1528
1381
|
(vm) => vm.question === matchedVenueMarket.question
|
|
1529
1382
|
);
|
|
@@ -1542,22 +1395,33 @@ var resolveMarketFromVenueMarkets = (venueMarkets, marketId) => {
|
|
|
1542
1395
|
};
|
|
1543
1396
|
};
|
|
1544
1397
|
var resolveDisplayOutcomeLabels = (labels) => {
|
|
1545
|
-
if (!hasBinaryLabels(labels))
|
|
1546
|
-
return labels;
|
|
1398
|
+
if (!hasBinaryLabels(labels)) return labels;
|
|
1547
1399
|
return ["Yes", "No"].filter(
|
|
1548
1400
|
(label) => labels.some((value) => normalizeLabel2(value) === normalizeLabel2(label))
|
|
1549
1401
|
);
|
|
1550
1402
|
};
|
|
1403
|
+
var resolveMarketDetailsOutcomeLabels = (venueMarkets) => {
|
|
1404
|
+
var _a;
|
|
1405
|
+
const primaryMarket = selectPrimaryVenueMarket(venueMarkets);
|
|
1406
|
+
const initialLabels = ((_a = primaryMarket == null ? void 0 : primaryMarket.venueMarketOutcomes) != null ? _a : []).map((outcome) => outcome.label.trim()).filter(Boolean);
|
|
1407
|
+
const labels = new Set(initialLabels);
|
|
1408
|
+
venueMarkets.forEach((market) => {
|
|
1409
|
+
sortOutcomes(market.venueMarketOutcomes).forEach((outcome) => {
|
|
1410
|
+
const label = outcome.label.trim();
|
|
1411
|
+
if (!label) return;
|
|
1412
|
+
labels.add(label);
|
|
1413
|
+
});
|
|
1414
|
+
});
|
|
1415
|
+
return [...labels];
|
|
1416
|
+
};
|
|
1551
1417
|
var resolveInitialOutcomeLabel = (labels, defaultOutcomeLabel) => {
|
|
1552
1418
|
var _a;
|
|
1553
|
-
if (labels.length === 0)
|
|
1554
|
-
return void 0;
|
|
1419
|
+
if (labels.length === 0) return void 0;
|
|
1555
1420
|
if (defaultOutcomeLabel) {
|
|
1556
1421
|
const matchedLabel = labels.find(
|
|
1557
1422
|
(label) => normalizeLabel2(label) === normalizeLabel2(defaultOutcomeLabel)
|
|
1558
1423
|
);
|
|
1559
|
-
if (matchedLabel)
|
|
1560
|
-
return matchedLabel;
|
|
1424
|
+
if (matchedLabel) return matchedLabel;
|
|
1561
1425
|
}
|
|
1562
1426
|
if (hasBinaryLabels(labels)) {
|
|
1563
1427
|
return (_a = labels.find((label) => normalizeLabel2(label) === "yes")) != null ? _a : labels[0];
|
|
@@ -1578,13 +1442,11 @@ var resolveAverageProbabilityByLabel = (venueMarkets, labels) => {
|
|
|
1578
1442
|
);
|
|
1579
1443
|
};
|
|
1580
1444
|
var formatProbabilityPercent = (value) => {
|
|
1581
|
-
if (value == null)
|
|
1582
|
-
return "-";
|
|
1445
|
+
if (value == null) return "-";
|
|
1583
1446
|
return `${Math.round(value * 100)}%`;
|
|
1584
1447
|
};
|
|
1585
1448
|
var formatProbabilityCents = (value) => {
|
|
1586
|
-
if (value == null)
|
|
1587
|
-
return "-";
|
|
1449
|
+
if (value == null) return "-";
|
|
1588
1450
|
const cents = (value * 100).toFixed(1).replace(/\.0$/, "");
|
|
1589
1451
|
return `${cents}\xA2`;
|
|
1590
1452
|
};
|
|
@@ -1599,7 +1461,7 @@ var resolveOutcomeTone = (label, index) => {
|
|
|
1599
1461
|
return index === 0 ? "positive" : "negative";
|
|
1600
1462
|
};
|
|
1601
1463
|
var resolveHeaderOutcomeItems = (venueMarkets, defaultOutcomeLabel) => {
|
|
1602
|
-
const labels = resolveDisplayOutcomeLabels(
|
|
1464
|
+
const labels = resolveDisplayOutcomeLabels(resolveMarketDetailsOutcomeLabels(venueMarkets));
|
|
1603
1465
|
const probabilityByLabel = resolveAverageProbabilityByLabel(venueMarkets, labels);
|
|
1604
1466
|
return labels.slice(0, 2).map((label, index) => {
|
|
1605
1467
|
var _a;
|
|
@@ -1631,16 +1493,14 @@ var resolveOrderBookRows = ({
|
|
|
1631
1493
|
data,
|
|
1632
1494
|
side
|
|
1633
1495
|
}) => {
|
|
1634
|
-
if (!(data == null ? void 0 : data.length))
|
|
1635
|
-
return [];
|
|
1496
|
+
if (!(data == null ? void 0 : data.length)) return [];
|
|
1636
1497
|
const tone = side === "asks" ? "negative" : "positive";
|
|
1637
1498
|
const rows = data.flatMap((result) => {
|
|
1638
1499
|
var _a;
|
|
1639
1500
|
return ((_a = result.orderbook[side]) != null ? _a : []).flatMap(
|
|
1640
1501
|
(level, index) => {
|
|
1641
1502
|
const parsedLevel = OrderBookLevelSchema.safeParse(level);
|
|
1642
|
-
if (!parsedLevel.success)
|
|
1643
|
-
return [];
|
|
1503
|
+
if (!parsedLevel.success) return [];
|
|
1644
1504
|
const parsedRow = OrderBookRowSchema.safeParse({
|
|
1645
1505
|
id: `${result.market.id}-${side}-${index}-${parsedLevel.data.price}`,
|
|
1646
1506
|
venue: result.market.venue,
|
|
@@ -1649,15 +1509,13 @@ var resolveOrderBookRows = ({
|
|
|
1649
1509
|
total: parsedLevel.data.price * parsedLevel.data.size,
|
|
1650
1510
|
tone
|
|
1651
1511
|
});
|
|
1652
|
-
if (!parsedRow.success)
|
|
1653
|
-
return [];
|
|
1512
|
+
if (!parsedRow.success) return [];
|
|
1654
1513
|
return [parsedRow.data];
|
|
1655
1514
|
}
|
|
1656
1515
|
);
|
|
1657
1516
|
});
|
|
1658
1517
|
const sortedRows = [...rows].sort((left, right) => {
|
|
1659
|
-
if (side === "asks")
|
|
1660
|
-
return left.price - right.price;
|
|
1518
|
+
if (side === "asks") return left.price - right.price;
|
|
1661
1519
|
return right.price - left.price;
|
|
1662
1520
|
});
|
|
1663
1521
|
const maxTotal = sortedRows.reduce((currentMax, row) => Math.max(currentMax, row.total), 0) || 1;
|
|
@@ -1708,11 +1566,9 @@ var buildMarketDetailsModel = ({
|
|
|
1708
1566
|
}) => {
|
|
1709
1567
|
var _a, _b;
|
|
1710
1568
|
const market = resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
1711
|
-
if (!market)
|
|
1712
|
-
return void 0;
|
|
1569
|
+
if (!market) return void 0;
|
|
1713
1570
|
const primaryVenueMarket = selectPrimaryVenueMarket(market.venueMarkets);
|
|
1714
|
-
if (!primaryVenueMarket)
|
|
1715
|
-
return void 0;
|
|
1571
|
+
if (!primaryVenueMarket) return void 0;
|
|
1716
1572
|
const resolvedTitle = (title == null ? void 0 : title.trim()) || primaryVenueMarket.question || market.question;
|
|
1717
1573
|
const resolvedImage = (_a = typeof image === "string" && image.trim() ? image : void 0) != null ? _a : typeof primaryVenueMarket.image === "string" && primaryVenueMarket.image.trim() ? primaryVenueMarket.image : void 0;
|
|
1718
1574
|
const resolvedVolume = typeof market.volume === "number" ? market.volume : (_b = primaryVenueMarket.volume) != null ? _b : void 0;
|
|
@@ -1722,7 +1578,9 @@ var buildMarketDetailsModel = ({
|
|
|
1722
1578
|
formatCompactCurrency,
|
|
1723
1579
|
labels
|
|
1724
1580
|
});
|
|
1725
|
-
const outcomeLabels = resolveDisplayOutcomeLabels(
|
|
1581
|
+
const outcomeLabels = resolveDisplayOutcomeLabels(
|
|
1582
|
+
resolveMarketDetailsOutcomeLabels(market.venueMarkets)
|
|
1583
|
+
);
|
|
1726
1584
|
const probabilityByLabel = resolveAverageProbabilityByLabel(market.venueMarkets, outcomeLabels);
|
|
1727
1585
|
return {
|
|
1728
1586
|
market,
|
|
@@ -1852,7 +1710,7 @@ var getOutcomeButtonClassName = ({
|
|
|
1852
1710
|
const defaultStateClassName = isPositive ? "border-[#18c15c]/50 bg-[#18c15c]/5 text-agg-foreground hover:bg-[#18c15c]/10" : "border-[#e5455f]/50 bg-[#e5455f]/5 text-agg-foreground hover:bg-[#e5455f]/10";
|
|
1853
1711
|
const activeStateClassName = isPositive ? "border-transparent bg-[#18c15c] text-agg-on-primary" : "border-transparent bg-[#e5455f] text-agg-on-primary";
|
|
1854
1712
|
return cn(
|
|
1855
|
-
"h-auto
|
|
1713
|
+
"h-auto flex-1 rounded-agg-full border px-4 py-1.5 text-agg-base leading-agg-6 shadow-none md:flex-none md:min-w-[168px]",
|
|
1856
1714
|
getMotionClassName(enableAnimations, "transition-all duration-300 ease-in-out"),
|
|
1857
1715
|
isActive ? activeStateClassName : defaultStateClassName,
|
|
1858
1716
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary focus-visible:ring-offset-2 focus-visible:ring-offset-agg-secondary-hover",
|
|
@@ -1865,7 +1723,7 @@ var MarketDetailsContent = ({
|
|
|
1865
1723
|
marketId,
|
|
1866
1724
|
title,
|
|
1867
1725
|
image,
|
|
1868
|
-
isOpened:
|
|
1726
|
+
isOpened: controlledIsOpened = marketDetailsDefaultIsOpened,
|
|
1869
1727
|
onOpenChange,
|
|
1870
1728
|
defaultTab,
|
|
1871
1729
|
defaultOutcomeLabel,
|
|
@@ -1885,10 +1743,10 @@ var MarketDetailsContent = ({
|
|
|
1885
1743
|
marketId,
|
|
1886
1744
|
title,
|
|
1887
1745
|
image,
|
|
1888
|
-
formatCompactCurrency: config.formatCompactCurrency,
|
|
1746
|
+
formatCompactCurrency: config.formatting.formatCompactCurrency,
|
|
1889
1747
|
labels
|
|
1890
1748
|
});
|
|
1891
|
-
}, [config.formatCompactCurrency, venueMarkets, image, labels, marketId, title]);
|
|
1749
|
+
}, [config.formatting.formatCompactCurrency, venueMarkets, image, labels, marketId, title]);
|
|
1892
1750
|
const resolvedMarket = useMemo4(() => {
|
|
1893
1751
|
return resolveMarketFromVenueMarkets(venueMarkets, marketId);
|
|
1894
1752
|
}, [venueMarkets, marketId]);
|
|
@@ -1898,11 +1756,14 @@ var MarketDetailsContent = ({
|
|
|
1898
1756
|
const [selectedTab, setSelectedTab] = useState2(
|
|
1899
1757
|
() => resolveInitialTab(defaultTab)
|
|
1900
1758
|
);
|
|
1901
|
-
const [isOpened, setIsOpened] = useState2(
|
|
1759
|
+
const [isOpened, setIsOpened] = useState2(controlledIsOpened);
|
|
1902
1760
|
useEffect2(() => {
|
|
1903
1761
|
setSelectedTab(resolveInitialTab(defaultTab));
|
|
1904
1762
|
}, [defaultTab]);
|
|
1905
|
-
|
|
1763
|
+
useEffect2(() => {
|
|
1764
|
+
setIsOpened(controlledIsOpened);
|
|
1765
|
+
}, [controlledIsOpened]);
|
|
1766
|
+
const resolvedDefaultTimeRange = (_a = defaultTimeRange != null ? defaultTimeRange : config.chart.defaultChartTimeRange) != null ? _a : "1D";
|
|
1906
1767
|
const [selectedTimeRange, setSelectedTimeRange] = useState2(resolvedDefaultTimeRange);
|
|
1907
1768
|
const [selectedChartType, setSelectedChartType] = useState2("line");
|
|
1908
1769
|
useEffect2(() => {
|
|
@@ -1922,13 +1783,11 @@ var MarketDetailsContent = ({
|
|
|
1922
1783
|
);
|
|
1923
1784
|
}, [defaultOutcomeLabel, model == null ? void 0 : model.outcomeLabels]);
|
|
1924
1785
|
const headerOutcomeItems = useMemo4(() => {
|
|
1925
|
-
if (!model)
|
|
1926
|
-
return [];
|
|
1786
|
+
if (!model) return [];
|
|
1927
1787
|
return resolveHeaderOutcomeItems(model.market.venueMarkets, selectedOutcomeLabel);
|
|
1928
1788
|
}, [model, selectedOutcomeLabel]);
|
|
1929
1789
|
const headlineProbability = useMemo4(() => {
|
|
1930
|
-
if (!model || !selectedOutcomeLabel)
|
|
1931
|
-
return void 0;
|
|
1790
|
+
if (!model || !selectedOutcomeLabel) return void 0;
|
|
1932
1791
|
return model.probabilityByLabel.get(selectedOutcomeLabel);
|
|
1933
1792
|
}, [model, selectedOutcomeLabel]);
|
|
1934
1793
|
const outcomesByLabel = useMemo4(() => {
|
|
@@ -1946,8 +1805,7 @@ var MarketDetailsContent = ({
|
|
|
1946
1805
|
}, [headerOutcomeItems, model]);
|
|
1947
1806
|
const selectedOutcomesByVenue = useMemo4(() => {
|
|
1948
1807
|
var _a2;
|
|
1949
|
-
if (!selectedOutcomeLabel)
|
|
1950
|
-
return [];
|
|
1808
|
+
if (!selectedOutcomeLabel) return [];
|
|
1951
1809
|
return (_a2 = outcomesByLabel.get(selectedOutcomeLabel)) != null ? _a2 : [];
|
|
1952
1810
|
}, [outcomesByLabel, selectedOutcomeLabel]);
|
|
1953
1811
|
const chartEnabled = isOpened && selectedTab === "graph";
|
|
@@ -1986,12 +1844,10 @@ var MarketDetailsContent = ({
|
|
|
1986
1844
|
}))
|
|
1987
1845
|
});
|
|
1988
1846
|
const orderBookData = useMemo4(() => {
|
|
1989
|
-
if (!marketOrderbookData)
|
|
1990
|
-
return void 0;
|
|
1847
|
+
if (!marketOrderbookData) return void 0;
|
|
1991
1848
|
const results = selectedOutcomesByVenue.flatMap(({ market, outcome }) => {
|
|
1992
1849
|
const venueOrderbook = marketOrderbookData.venueOrderbooks[market.venue];
|
|
1993
|
-
if (!venueOrderbook)
|
|
1994
|
-
return [];
|
|
1850
|
+
if (!venueOrderbook) return [];
|
|
1995
1851
|
return [
|
|
1996
1852
|
{
|
|
1997
1853
|
market,
|
|
@@ -2037,8 +1893,7 @@ var MarketDetailsContent = ({
|
|
|
2037
1893
|
points: seriesItem.points
|
|
2038
1894
|
};
|
|
2039
1895
|
});
|
|
2040
|
-
if (!selectedGraphVenue)
|
|
2041
|
-
return seriesForOutcomeLabel;
|
|
1896
|
+
if (!selectedGraphVenue) return seriesForOutcomeLabel;
|
|
2042
1897
|
return seriesForOutcomeLabel.filter((seriesItem) => seriesItem.venue === selectedGraphVenue);
|
|
2043
1898
|
}, [
|
|
2044
1899
|
primaryVenueMarketId,
|
|
@@ -2055,8 +1910,7 @@ var MarketDetailsContent = ({
|
|
|
2055
1910
|
});
|
|
2056
1911
|
}, [marketChartData, selectedGraphVenue]);
|
|
2057
1912
|
const otherRows = useMemo4(() => {
|
|
2058
|
-
if (!model)
|
|
2059
|
-
return [];
|
|
1913
|
+
if (!model) return [];
|
|
2060
1914
|
return resolveOtherTabRows(model.market, labels);
|
|
2061
1915
|
}, [labels, model]);
|
|
2062
1916
|
const isOrderBookNotFound = orderBookError && typeof orderBookError === "object" && "status" in orderBookError && orderBookError.status === 404;
|
|
@@ -2068,8 +1922,7 @@ var MarketDetailsContent = ({
|
|
|
2068
1922
|
if ((eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowLeft" && (eventToHandle == null ? void 0 : eventToHandle.key) !== "ArrowRight") {
|
|
2069
1923
|
return;
|
|
2070
1924
|
}
|
|
2071
|
-
if (headerOutcomeItems.length <= 1)
|
|
2072
|
-
return;
|
|
1925
|
+
if (headerOutcomeItems.length <= 1) return;
|
|
2073
1926
|
const activeIndex = headerOutcomeItems.findIndex((item) => {
|
|
2074
1927
|
return item.label === selectedOutcomeLabel;
|
|
2075
1928
|
});
|
|
@@ -2078,21 +1931,17 @@ var MarketDetailsContent = ({
|
|
|
2078
1931
|
setSelectedOutcomeLabel((_a2 = headerOutcomeItems[nextIndex]) == null ? void 0 : _a2.label);
|
|
2079
1932
|
};
|
|
2080
1933
|
const handleToggleExpanded = (event) => {
|
|
1934
|
+
if (!marketId) return;
|
|
2081
1935
|
if (event && "key" in event && (event == null ? void 0 : event.key) !== "Enter" && (event == null ? void 0 : event.key) !== " ") {
|
|
2082
1936
|
return;
|
|
2083
1937
|
}
|
|
2084
1938
|
event == null ? void 0 : event.preventDefault();
|
|
2085
1939
|
event == null ? void 0 : event.stopPropagation();
|
|
2086
|
-
|
|
2087
|
-
const next = !prev;
|
|
2088
|
-
onOpenChange == null ? void 0 : onOpenChange(next);
|
|
2089
|
-
return next;
|
|
2090
|
-
});
|
|
1940
|
+
onOpenChange == null ? void 0 : onOpenChange(marketId);
|
|
2091
1941
|
};
|
|
2092
1942
|
const handleGraphVenueToggle = (venue) => {
|
|
2093
1943
|
setSelectedGraphVenue((currentVenue) => {
|
|
2094
|
-
if (currentVenue === venue)
|
|
2095
|
-
return null;
|
|
1944
|
+
if (currentVenue === venue) return null;
|
|
2096
1945
|
return venue;
|
|
2097
1946
|
});
|
|
2098
1947
|
};
|
|
@@ -2131,7 +1980,7 @@ var MarketDetailsContent = ({
|
|
|
2131
1980
|
{
|
|
2132
1981
|
className: cn(
|
|
2133
1982
|
"cursor-pointer disabled:cursor-default",
|
|
2134
|
-
"flex flex-
|
|
1983
|
+
"flex flex-nowrap flex-row items-center justify-between gap-3 px-5 py-4",
|
|
2135
1984
|
isOpened && "pb-3",
|
|
2136
1985
|
classNames == null ? void 0 : classNames.header
|
|
2137
1986
|
),
|
|
@@ -2143,7 +1992,7 @@ var MarketDetailsContent = ({
|
|
|
2143
1992
|
onClick: handleToggleExpanded,
|
|
2144
1993
|
onKeyDown: handleToggleExpanded,
|
|
2145
1994
|
children: [
|
|
2146
|
-
/* @__PURE__ */ jsxs3("div", { className: "flex min-w-
|
|
1995
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex min-w-0 flex-1 items-center gap-3 md:gap-4", children: [
|
|
2147
1996
|
model.image ? /* @__PURE__ */ jsx4(
|
|
2148
1997
|
RemoteImage,
|
|
2149
1998
|
{
|
|
@@ -2157,62 +2006,64 @@ var MarketDetailsContent = ({
|
|
|
2157
2006
|
/* @__PURE__ */ jsx4("div", { className: "flex items-center gap-3", children: /* @__PURE__ */ jsx4(Typography, { variant: "label", className: "truncate text-agg-muted-foreground", children: model.subtitle }) })
|
|
2158
2007
|
] })
|
|
2159
2008
|
] }),
|
|
2160
|
-
/* @__PURE__ */
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
e
|
|
2186
|
-
|
|
2187
|
-
|
|
2009
|
+
/* @__PURE__ */ jsxs3("div", { className: "flex shrink-0 items-center gap-3", children: [
|
|
2010
|
+
/* @__PURE__ */ jsx4(Typography, { as: "div", variant: "heading", className: "shrink-0", children: formatProbabilityPercent(headlineProbability) }),
|
|
2011
|
+
/* @__PURE__ */ jsx4(
|
|
2012
|
+
"div",
|
|
2013
|
+
{
|
|
2014
|
+
className: "flex shrink-0 gap-2",
|
|
2015
|
+
role: "tablist",
|
|
2016
|
+
"aria-label": labels.marketDetails.marketOutcomesAria,
|
|
2017
|
+
tabIndex: 0,
|
|
2018
|
+
onKeyDown: (e) => handleOutcomeKeyDown(e),
|
|
2019
|
+
children: headerOutcomeItems.map((item) => {
|
|
2020
|
+
const isPositive = item.tone === "positive";
|
|
2021
|
+
const isActiveOutcome = item.label === selectedOutcomeLabel;
|
|
2022
|
+
return /* @__PURE__ */ jsx4(
|
|
2023
|
+
"button",
|
|
2024
|
+
{
|
|
2025
|
+
type: "button",
|
|
2026
|
+
role: "tab",
|
|
2027
|
+
"aria-selected": isActiveOutcome,
|
|
2028
|
+
tabIndex: isActiveOutcome ? 0 : -1,
|
|
2029
|
+
className: getOutcomeButtonClassName({
|
|
2030
|
+
enableAnimations: config.features.enableAnimations,
|
|
2031
|
+
isPositive,
|
|
2032
|
+
isActive: isActiveOutcome
|
|
2033
|
+
}),
|
|
2034
|
+
onClick: (e) => {
|
|
2035
|
+
e.preventDefault();
|
|
2036
|
+
e.stopPropagation();
|
|
2037
|
+
setSelectedOutcomeLabel(item.label);
|
|
2038
|
+
},
|
|
2039
|
+
children: /* @__PURE__ */ jsxs3("span", { className: "inline-flex items-center gap-2", children: [
|
|
2040
|
+
/* @__PURE__ */ jsx4(
|
|
2041
|
+
VenueLogo,
|
|
2042
|
+
{
|
|
2043
|
+
venue: item.venue,
|
|
2044
|
+
size: "small",
|
|
2045
|
+
color: isActiveOutcome ? "var(--agg-color-on-primary)" : void 0
|
|
2046
|
+
}
|
|
2047
|
+
),
|
|
2048
|
+
/* @__PURE__ */ jsx4(
|
|
2049
|
+
Typography,
|
|
2050
|
+
{
|
|
2051
|
+
variant: isActiveOutcome ? "body-strong" : "body",
|
|
2052
|
+
className: cn(
|
|
2053
|
+
"text-agg-base leading-agg-6",
|
|
2054
|
+
isActiveOutcome ? "text-agg-on-primary" : "text-agg-foreground"
|
|
2055
|
+
),
|
|
2056
|
+
children: `${item.label} ${formatProbabilityCents(item.probability)}`
|
|
2057
|
+
}
|
|
2058
|
+
)
|
|
2059
|
+
] })
|
|
2188
2060
|
},
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
color: isActiveOutcome ? "var(--agg-color-on-primary)" : void 0
|
|
2196
|
-
}
|
|
2197
|
-
),
|
|
2198
|
-
/* @__PURE__ */ jsx4(
|
|
2199
|
-
Typography,
|
|
2200
|
-
{
|
|
2201
|
-
variant: isActiveOutcome ? "body-strong" : "body",
|
|
2202
|
-
className: cn(
|
|
2203
|
-
"text-agg-base leading-agg-6",
|
|
2204
|
-
isActiveOutcome ? "text-agg-on-primary" : "text-agg-foreground"
|
|
2205
|
-
),
|
|
2206
|
-
children: `${item.label} ${formatProbabilityCents(item.probability)}`
|
|
2207
|
-
}
|
|
2208
|
-
)
|
|
2209
|
-
] })
|
|
2210
|
-
},
|
|
2211
|
-
item.label
|
|
2212
|
-
);
|
|
2213
|
-
})
|
|
2214
|
-
}
|
|
2215
|
-
)
|
|
2061
|
+
item.label
|
|
2062
|
+
);
|
|
2063
|
+
})
|
|
2064
|
+
}
|
|
2065
|
+
)
|
|
2066
|
+
] })
|
|
2216
2067
|
]
|
|
2217
2068
|
}
|
|
2218
2069
|
),
|
|
@@ -2222,7 +2073,10 @@ var MarketDetailsContent = ({
|
|
|
2222
2073
|
id: detailsContentId,
|
|
2223
2074
|
className: cn(
|
|
2224
2075
|
"grid overflow-hidden",
|
|
2225
|
-
getMotionClassName(
|
|
2076
|
+
getMotionClassName(
|
|
2077
|
+
config.features.enableAnimations,
|
|
2078
|
+
"transition-all duration-500 ease-in-out"
|
|
2079
|
+
),
|
|
2226
2080
|
isOpened ? "grid-rows-[1fr] opacity-100" : "pointer-events-none grid-rows-[0fr] opacity-0"
|
|
2227
2081
|
),
|
|
2228
2082
|
"aria-hidden": !isOpened,
|
|
@@ -2233,12 +2087,12 @@ var MarketDetailsContent = ({
|
|
|
2233
2087
|
{
|
|
2234
2088
|
className: cn(
|
|
2235
2089
|
getMotionClassName(
|
|
2236
|
-
config.enableAnimations,
|
|
2090
|
+
config.features.enableAnimations,
|
|
2237
2091
|
"transition-all duration-500 ease-in-out"
|
|
2238
2092
|
),
|
|
2239
2093
|
isOpened ? cn(
|
|
2240
2094
|
"translate-y-0 opacity-100",
|
|
2241
|
-
getMotionClassName(config.enableAnimations, "delay-100")
|
|
2095
|
+
getMotionClassName(config.features.enableAnimations, "delay-100")
|
|
2242
2096
|
) : "translate-y-5 opacity-0"
|
|
2243
2097
|
),
|
|
2244
2098
|
children: [
|
|
@@ -2280,8 +2134,8 @@ var MarketDetailsContent = ({
|
|
|
2280
2134
|
{
|
|
2281
2135
|
rows: askRows,
|
|
2282
2136
|
title: labels.marketDetails.asks,
|
|
2283
|
-
formatNumber: config.formatNumber,
|
|
2284
|
-
formatCurrency: config.formatCurrency,
|
|
2137
|
+
formatNumber: config.formatting.formatNumber,
|
|
2138
|
+
formatCurrency: config.formatting.formatCurrency,
|
|
2285
2139
|
visibleRows: orderBookDepth
|
|
2286
2140
|
}
|
|
2287
2141
|
),
|
|
@@ -2290,8 +2144,8 @@ var MarketDetailsContent = ({
|
|
|
2290
2144
|
{
|
|
2291
2145
|
rows: bidRows,
|
|
2292
2146
|
title: labels.marketDetails.bids,
|
|
2293
|
-
formatNumber: config.formatNumber,
|
|
2294
|
-
formatCurrency: config.formatCurrency,
|
|
2147
|
+
formatNumber: config.formatting.formatNumber,
|
|
2148
|
+
formatCurrency: config.formatting.formatCurrency,
|
|
2295
2149
|
visibleRows: orderBookDepth
|
|
2296
2150
|
}
|
|
2297
2151
|
)
|
|
@@ -2374,7 +2228,7 @@ var MarketDetailsContent = ({
|
|
|
2374
2228
|
classNames == null ? void 0 : classNames.footer
|
|
2375
2229
|
),
|
|
2376
2230
|
children: [
|
|
2377
|
-
/* @__PURE__ */ jsx4("span", { children: typeof model.market.volume === "number" ? `${config.formatCompactCurrency(model.market.volume)} ${labels.marketDetails.meta.volumeSuffix}` : labels.marketDetails.volumeUnavailable }),
|
|
2231
|
+
/* @__PURE__ */ jsx4("span", { children: typeof model.market.volume === "number" ? `${config.formatting.formatCompactCurrency(model.market.volume)} ${labels.marketDetails.meta.volumeSuffix}` : labels.marketDetails.volumeUnavailable }),
|
|
2378
2232
|
/* @__PURE__ */ jsxs3("div", { className: "flex flex-wrap items-center gap-3 md:gap-4", children: [
|
|
2379
2233
|
/* @__PURE__ */ jsx4(
|
|
2380
2234
|
ChartTypeSwitch,
|
|
@@ -2439,29 +2293,13 @@ var MarketDetailsContent = ({
|
|
|
2439
2293
|
}
|
|
2440
2294
|
);
|
|
2441
2295
|
};
|
|
2442
|
-
var MarketDetails = (
|
|
2443
|
-
var _a;
|
|
2444
|
-
const [uncontrolledIsOpened, setUncontrolledIsOpened] = useState2(
|
|
2445
|
-
(_a = props.defaultIsOpened) != null ? _a : marketDetailsDefaultIsOpened
|
|
2446
|
-
);
|
|
2447
|
-
useEffect2(() => {
|
|
2448
|
-
if (typeof props.isOpened !== "boolean")
|
|
2449
|
-
return;
|
|
2450
|
-
setUncontrolledIsOpened(props.isOpened);
|
|
2451
|
-
}, [props.isOpened]);
|
|
2452
|
-
const resolvedIsOpened = typeof props.isOpened === "boolean" ? props.isOpened : uncontrolledIsOpened;
|
|
2453
|
-
const handleOpenChange = (nextIsOpened) => {
|
|
2454
|
-
var _a2;
|
|
2455
|
-
if (typeof props.isOpened !== "boolean") {
|
|
2456
|
-
setUncontrolledIsOpened(nextIsOpened);
|
|
2457
|
-
}
|
|
2458
|
-
(_a2 = props.onOpenChange) == null ? void 0 : _a2.call(props, nextIsOpened);
|
|
2459
|
-
};
|
|
2296
|
+
var MarketDetails = (_a) => {
|
|
2297
|
+
var _b = _a, { isOpened } = _b, props = __objRest(_b, ["isOpened"]);
|
|
2460
2298
|
if (props.isLoading) {
|
|
2461
2299
|
return /* @__PURE__ */ jsx4(
|
|
2462
2300
|
MarketDetailsLoadingState,
|
|
2463
2301
|
{
|
|
2464
|
-
isOpened
|
|
2302
|
+
isOpened,
|
|
2465
2303
|
ariaLabel: props.ariaLabel,
|
|
2466
2304
|
classNames: props.classNames
|
|
2467
2305
|
}
|
|
@@ -2471,8 +2309,8 @@ var MarketDetails = (props) => {
|
|
|
2471
2309
|
return /* @__PURE__ */ jsx4(
|
|
2472
2310
|
MarketDetailsContent,
|
|
2473
2311
|
__spreadProps(__spreadValues({}, props), {
|
|
2474
|
-
isOpened
|
|
2475
|
-
onOpenChange:
|
|
2312
|
+
isOpened,
|
|
2313
|
+
onOpenChange: props.onOpenChange,
|
|
2476
2314
|
venueMarkets: props.venueMarkets
|
|
2477
2315
|
})
|
|
2478
2316
|
);
|
|
@@ -2481,21 +2319,13 @@ var MarketDetails = (props) => {
|
|
|
2481
2319
|
return /* @__PURE__ */ jsx4(MarketDetailsUnavailableState, { ariaLabel: fallbackAriaLabel, classNames: fallbackClassNames });
|
|
2482
2320
|
};
|
|
2483
2321
|
MarketDetails.displayName = "MarketDetails";
|
|
2484
|
-
var resolveInitialExpandedId = (markets
|
|
2322
|
+
var resolveInitialExpandedId = (markets) => {
|
|
2485
2323
|
var _a, _b;
|
|
2486
|
-
if (!markets.length)
|
|
2487
|
-
return null;
|
|
2488
|
-
if (defaultId) {
|
|
2489
|
-
const match = markets.find((m) => m.id === defaultId);
|
|
2490
|
-
if (match)
|
|
2491
|
-
return match.id;
|
|
2492
|
-
}
|
|
2324
|
+
if (!markets.length) return null;
|
|
2493
2325
|
return (_b = (_a = markets[0]) == null ? void 0 : _a.id) != null ? _b : null;
|
|
2494
2326
|
};
|
|
2495
2327
|
var MarketDetailsList = ({
|
|
2496
2328
|
eventId,
|
|
2497
|
-
expandedMarketId,
|
|
2498
|
-
defaultExpandedMarketId,
|
|
2499
2329
|
onExpandedMarketChange,
|
|
2500
2330
|
defaultTab,
|
|
2501
2331
|
defaultTimeRange,
|
|
@@ -2508,30 +2338,23 @@ var MarketDetailsList = ({
|
|
|
2508
2338
|
venueEventId: resolvedEventId,
|
|
2509
2339
|
enabled: !!resolvedEventId
|
|
2510
2340
|
});
|
|
2511
|
-
const [
|
|
2512
|
-
() => resolveInitialExpandedId(markets
|
|
2341
|
+
const [expandedMarketId, setExpandedMarketId] = useState2(
|
|
2342
|
+
() => resolveInitialExpandedId(markets)
|
|
2513
2343
|
);
|
|
2514
2344
|
useEffect2(() => {
|
|
2515
|
-
|
|
2516
|
-
return;
|
|
2517
|
-
|
|
2518
|
-
if (current && markets.some((m) => m.id === current))
|
|
2519
|
-
return current;
|
|
2520
|
-
return resolveInitialExpandedId(markets, defaultExpandedMarketId);
|
|
2345
|
+
setExpandedMarketId((current) => {
|
|
2346
|
+
if (current && markets.some((m) => m.id === current)) return current;
|
|
2347
|
+
return resolveInitialExpandedId(markets);
|
|
2521
2348
|
});
|
|
2522
|
-
}, [
|
|
2523
|
-
|
|
2524
|
-
if (
|
|
2349
|
+
}, [markets]);
|
|
2350
|
+
const handleToggle = (marketId) => {
|
|
2351
|
+
if (marketId === expandedMarketId) {
|
|
2352
|
+
onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(null);
|
|
2353
|
+
setExpandedMarketId(null);
|
|
2525
2354
|
return;
|
|
2526
|
-
setInternalExpandedId(expandedMarketId);
|
|
2527
|
-
}, [expandedMarketId]);
|
|
2528
|
-
const resolvedExpandedId = typeof expandedMarketId === "undefined" ? internalExpandedId : expandedMarketId;
|
|
2529
|
-
const handleToggle = (marketId, isOpened) => {
|
|
2530
|
-
const next = isOpened ? marketId : null;
|
|
2531
|
-
if (typeof expandedMarketId === "undefined") {
|
|
2532
|
-
setInternalExpandedId(next);
|
|
2533
2355
|
}
|
|
2534
|
-
onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(
|
|
2356
|
+
onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(marketId);
|
|
2357
|
+
setExpandedMarketId(marketId);
|
|
2535
2358
|
};
|
|
2536
2359
|
if (isLoading) {
|
|
2537
2360
|
return /* @__PURE__ */ jsxs3("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.root), "aria-label": ariaLabel, children: [
|
|
@@ -2564,9 +2387,12 @@ var MarketDetailsList = ({
|
|
|
2564
2387
|
return /* @__PURE__ */ jsx4("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.root), "aria-label": ariaLabel, children: markets.map((market) => /* @__PURE__ */ jsx4(
|
|
2565
2388
|
MarketDetails,
|
|
2566
2389
|
{
|
|
2390
|
+
marketId: market.id,
|
|
2567
2391
|
venueMarkets: [market],
|
|
2568
|
-
isOpened:
|
|
2569
|
-
onOpenChange: (
|
|
2392
|
+
isOpened: expandedMarketId === market.id,
|
|
2393
|
+
onOpenChange: (marketId) => {
|
|
2394
|
+
handleToggle(marketId);
|
|
2395
|
+
},
|
|
2570
2396
|
defaultTab,
|
|
2571
2397
|
defaultTimeRange,
|
|
2572
2398
|
ariaLabel: market.question,
|
|
@@ -2584,8 +2410,12 @@ import { useVenueEvents, useLabels as useLabels5 } from "@agg-market/hooks";
|
|
|
2584
2410
|
// src/events/list/event-list.constants.ts
|
|
2585
2411
|
var POLYMARKET_VENUE = "polymarket";
|
|
2586
2412
|
var KALSHI_VENUE = "kalshi";
|
|
2413
|
+
var OPINION_VENUE = "opinion";
|
|
2414
|
+
var PROBABLE_VENUE = "probable";
|
|
2587
2415
|
var POLYMARKET_VENUE_LOGO = "polymarket";
|
|
2588
2416
|
var KALSHI_VENUE_LOGO = "kalshi";
|
|
2417
|
+
var OPINION_VENUE_LOGO = "opinion";
|
|
2418
|
+
var PROBABLE_VENUE_LOGO = "probable";
|
|
2589
2419
|
var getDefaultEventListTabs = (labels) => {
|
|
2590
2420
|
return [
|
|
2591
2421
|
{
|
|
@@ -2604,25 +2434,34 @@ var getDefaultEventListTabs = (labels) => {
|
|
|
2604
2434
|
label: labels.venues.kalshi,
|
|
2605
2435
|
venueLogo: KALSHI_VENUE_LOGO,
|
|
2606
2436
|
venues: [KALSHI_VENUE]
|
|
2437
|
+
},
|
|
2438
|
+
{
|
|
2439
|
+
value: "opinion",
|
|
2440
|
+
label: labels.venues.opinion,
|
|
2441
|
+
venueLogo: OPINION_VENUE_LOGO,
|
|
2442
|
+
venues: [OPINION_VENUE]
|
|
2443
|
+
},
|
|
2444
|
+
{
|
|
2445
|
+
value: "probable",
|
|
2446
|
+
label: labels.venues.probable,
|
|
2447
|
+
venueLogo: PROBABLE_VENUE_LOGO,
|
|
2448
|
+
venues: [PROBABLE_VENUE]
|
|
2607
2449
|
}
|
|
2608
2450
|
];
|
|
2609
2451
|
};
|
|
2610
2452
|
|
|
2611
2453
|
// src/events/list/event-list.utils.ts
|
|
2612
2454
|
var mapEventToEventListItemEvent = (event) => {
|
|
2613
|
-
if (!event.venueMarkets || event.venueMarkets.length === 0)
|
|
2614
|
-
return null;
|
|
2455
|
+
if (!event.venueMarkets || event.venueMarkets.length === 0) return null;
|
|
2615
2456
|
return event;
|
|
2616
2457
|
};
|
|
2617
2458
|
var filterEventsByTabValue = (events, _tabValue) => {
|
|
2618
2459
|
return events;
|
|
2619
2460
|
};
|
|
2620
2461
|
var resolveTabVenus = (tab) => {
|
|
2621
|
-
if (!tab)
|
|
2622
|
-
|
|
2623
|
-
if (tab.
|
|
2624
|
-
return tab.venues;
|
|
2625
|
-
if (tab.value === "polymarket" || tab.value === "kalshi") {
|
|
2462
|
+
if (!tab) return void 0;
|
|
2463
|
+
if (tab.venues && tab.venues.length > 0) return tab.venues;
|
|
2464
|
+
if (tab.value === "polymarket" || tab.value === "kalshi" || tab.value === "opinion" || tab.value === "probable") {
|
|
2626
2465
|
return [tab.value];
|
|
2627
2466
|
}
|
|
2628
2467
|
return void 0;
|
|
@@ -2634,8 +2473,7 @@ var renderTabIcon = (tab, isActive) => {
|
|
|
2634
2473
|
if (tab.venueLogo) {
|
|
2635
2474
|
return /* @__PURE__ */ jsx5(VenueLogo, { venue: tab.venueLogo, size: "small" });
|
|
2636
2475
|
}
|
|
2637
|
-
if (!tab.iconName)
|
|
2638
|
-
return null;
|
|
2476
|
+
if (!tab.iconName) return null;
|
|
2639
2477
|
return /* @__PURE__ */ jsx5(
|
|
2640
2478
|
Icon,
|
|
2641
2479
|
{
|
|
@@ -2651,18 +2489,15 @@ var TAB_ICON_AND_GAP_WIDTH = 24;
|
|
|
2651
2489
|
var TAB_OUTER_BORDER_WIDTH = 2;
|
|
2652
2490
|
var TAB_INNER_BORDER_WIDTH = 1;
|
|
2653
2491
|
var measureTabLabelWidth = (label) => {
|
|
2654
|
-
if (typeof document === "undefined")
|
|
2655
|
-
return label.length * 9;
|
|
2492
|
+
if (typeof document === "undefined") return label.length * 9;
|
|
2656
2493
|
const canvas = document.createElement("canvas");
|
|
2657
2494
|
const context = canvas.getContext("2d");
|
|
2658
|
-
if (!context)
|
|
2659
|
-
return label.length * 9;
|
|
2495
|
+
if (!context) return label.length * 9;
|
|
2660
2496
|
context.font = "700 16px Inter";
|
|
2661
2497
|
return context.measureText(label).width;
|
|
2662
2498
|
};
|
|
2663
2499
|
var estimateTabsWidth = (items) => {
|
|
2664
|
-
if (items.length === 0)
|
|
2665
|
-
return 0;
|
|
2500
|
+
if (items.length === 0) return 0;
|
|
2666
2501
|
const tabsWidth = items.reduce((sum, item) => {
|
|
2667
2502
|
const textWidth = Math.ceil(measureTabLabelWidth(item.label));
|
|
2668
2503
|
const iconWidth = item.icon ? TAB_ICON_AND_GAP_WIDTH : 0;
|
|
@@ -2696,13 +2531,13 @@ var EventList = ({
|
|
|
2696
2531
|
return resolveTabVenus(activeTab);
|
|
2697
2532
|
}, [activeTab]);
|
|
2698
2533
|
const resolvedMaxVisibleItems = useMemo5(() => {
|
|
2699
|
-
if (!Number.isFinite(maxVisibleItems))
|
|
2700
|
-
return void 0;
|
|
2534
|
+
if (!Number.isFinite(maxVisibleItems)) return void 0;
|
|
2701
2535
|
return Math.max(1, Math.floor(maxVisibleItems));
|
|
2702
2536
|
}, [maxVisibleItems]);
|
|
2703
2537
|
const requestLimit = resolvedMaxVisibleItems != null ? resolvedMaxVisibleItems : limit;
|
|
2704
2538
|
const shouldPaginate = resolvedMaxVisibleItems == null;
|
|
2705
2539
|
const { events, isLoading, isError, fetchNextPage, hasNextPage, isFetchingNextPage } = useVenueEvents({
|
|
2540
|
+
queryKeyScope: "event-list",
|
|
2706
2541
|
venues,
|
|
2707
2542
|
search,
|
|
2708
2543
|
categoryIds,
|
|
@@ -2713,8 +2548,7 @@ var EventList = ({
|
|
|
2713
2548
|
}, [events, activeTabValue]);
|
|
2714
2549
|
const tileEvents = useMemo5(() => {
|
|
2715
2550
|
const normalizedEvents = filteredEvents.map((event) => mapEventToEventListItemEvent(event)).filter((event) => event != null);
|
|
2716
|
-
if (resolvedMaxVisibleItems == null)
|
|
2717
|
-
return normalizedEvents;
|
|
2551
|
+
if (resolvedMaxVisibleItems == null) return normalizedEvents;
|
|
2718
2552
|
return normalizedEvents.slice(0, resolvedMaxVisibleItems);
|
|
2719
2553
|
}, [filteredEvents, resolvedMaxVisibleItems]);
|
|
2720
2554
|
const tabsItems = useMemo5(() => {
|
|
@@ -2731,12 +2565,10 @@ var EventList = ({
|
|
|
2731
2565
|
const headerRef = useRef(null);
|
|
2732
2566
|
const titleRef = useRef(null);
|
|
2733
2567
|
const updateTabsOverflowBehavior = useCallback(() => {
|
|
2734
|
-
if (typeof window === "undefined")
|
|
2735
|
-
return;
|
|
2568
|
+
if (typeof window === "undefined") return;
|
|
2736
2569
|
const headerElement = headerRef.current;
|
|
2737
2570
|
const titleElement = titleRef.current;
|
|
2738
|
-
if (!headerElement || !titleElement)
|
|
2739
|
-
return;
|
|
2571
|
+
if (!headerElement || !titleElement) return;
|
|
2740
2572
|
const isDesktop = window.matchMedia("(min-width: 768px)").matches;
|
|
2741
2573
|
if (!isDesktop) {
|
|
2742
2574
|
setShouldUseSelectOverflow(false);
|
|
@@ -2753,12 +2585,10 @@ var EventList = ({
|
|
|
2753
2585
|
updateTabsOverflowBehavior();
|
|
2754
2586
|
}, [updateTabsOverflowBehavior]);
|
|
2755
2587
|
useEffect3(() => {
|
|
2756
|
-
if (typeof ResizeObserver === "undefined")
|
|
2757
|
-
return;
|
|
2588
|
+
if (typeof ResizeObserver === "undefined") return;
|
|
2758
2589
|
const headerElement = headerRef.current;
|
|
2759
2590
|
const titleElement = titleRef.current;
|
|
2760
|
-
if (!headerElement || !titleElement)
|
|
2761
|
-
return;
|
|
2591
|
+
if (!headerElement || !titleElement) return;
|
|
2762
2592
|
const resizeObserver = new ResizeObserver(() => {
|
|
2763
2593
|
updateTabsOverflowBehavior();
|
|
2764
2594
|
});
|
|
@@ -2773,20 +2603,15 @@ var EventList = ({
|
|
|
2773
2603
|
const shouldRenderLoadingState = isLoading && tileEvents.length === 0;
|
|
2774
2604
|
const loadMoreRef = useRef(null);
|
|
2775
2605
|
useEffect3(() => {
|
|
2776
|
-
if (!shouldPaginate)
|
|
2777
|
-
|
|
2778
|
-
if (!hasNextPage)
|
|
2779
|
-
return;
|
|
2606
|
+
if (!shouldPaginate) return;
|
|
2607
|
+
if (!hasNextPage) return;
|
|
2780
2608
|
const target = loadMoreRef.current;
|
|
2781
|
-
if (!target)
|
|
2782
|
-
return;
|
|
2609
|
+
if (!target) return;
|
|
2783
2610
|
const observer = new IntersectionObserver(
|
|
2784
2611
|
(entries) => {
|
|
2785
2612
|
const entry = entries[0];
|
|
2786
|
-
if (!(entry == null ? void 0 : entry.isIntersecting))
|
|
2787
|
-
|
|
2788
|
-
if (isLoading || isFetchingNextPage || !hasNextPage)
|
|
2789
|
-
return;
|
|
2613
|
+
if (!(entry == null ? void 0 : entry.isIntersecting)) return;
|
|
2614
|
+
if (isLoading || isFetchingNextPage || !hasNextPage) return;
|
|
2790
2615
|
void fetchNextPage();
|
|
2791
2616
|
},
|
|
2792
2617
|
{
|
|
@@ -2850,13 +2675,12 @@ var EventList = ({
|
|
|
2850
2675
|
},
|
|
2851
2676
|
`loading-${index}`
|
|
2852
2677
|
)),
|
|
2853
|
-
!isLoading && !isError && (tileEvents == null ? void 0 : tileEvents.length) === 0 ? /* @__PURE__ */ jsx5(Card, { className: "col-span-full overflow-hidden shadow-none hover:shadow-none", children: /* @__PURE__ */ jsx5(
|
|
2678
|
+
!isLoading && !isError && (tileEvents == null ? void 0 : tileEvents.length) === 0 ? /* @__PURE__ */ jsx5(Card, { className: "col-span-full overflow-hidden shadow-none hover:shadow-none p-0! border-none! bg-transparent!", children: /* @__PURE__ */ jsx5(
|
|
2854
2679
|
StateMessage,
|
|
2855
2680
|
{
|
|
2856
2681
|
ariaLabel: labels.eventList.emptyAria,
|
|
2857
2682
|
title: labels.eventList.emptyTitle,
|
|
2858
|
-
description: labels.eventList.emptyDescription
|
|
2859
|
-
className: "min-h-[320px]"
|
|
2683
|
+
description: labels.eventList.emptyDescription
|
|
2860
2684
|
}
|
|
2861
2685
|
) }) : null,
|
|
2862
2686
|
isError ? /* @__PURE__ */ jsx5(
|
|
@@ -2879,5 +2703,7 @@ export {
|
|
|
2879
2703
|
EventListItemDetails,
|
|
2880
2704
|
MarketDetails,
|
|
2881
2705
|
MarketDetailsList,
|
|
2706
|
+
getDefaultEventListTabs,
|
|
2707
|
+
resolveTabVenus,
|
|
2882
2708
|
EventList
|
|
2883
2709
|
};
|