@agg-market/ui 6.0.0 → 8.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.
Files changed (89) hide show
  1. package/README.md +17 -2
  2. package/dist/{chunk-G6YKGVQR.mjs → chunk-JE4MV5RL.mjs} +18 -60
  3. package/dist/{chunk-2ICOSP7N.mjs → chunk-KRCRD4AJ.mjs} +11 -14
  4. package/dist/{chunk-5ZKPBMRK.mjs → chunk-SBLIHCN2.mjs} +21 -24
  5. package/dist/{chunk-LMOJKJOY.mjs → chunk-TLFRGJ5B.mjs} +334 -217
  6. package/dist/chunk-WKY3IN52.mjs +4907 -0
  7. package/dist/events.js +3364 -2660
  8. package/dist/events.mjs +2 -5
  9. package/dist/index.js +2693 -1764
  10. package/dist/index.mjs +610 -38
  11. package/dist/modals.js +1356 -815
  12. package/dist/modals.mjs +2 -4
  13. package/dist/pages.js +3023 -2248
  14. package/dist/pages.mjs +4 -7
  15. package/dist/primitives.js +1072 -355
  16. package/dist/primitives.mjs +38 -30
  17. package/dist/styles.css +1 -1
  18. package/dist/tailwind.css +1 -1
  19. package/dist/trading.js +1153 -558
  20. package/dist/trading.mjs +2 -4
  21. package/dist/types/auth/connect-button-view/connect-button-view.constants.d.mts +31 -0
  22. package/dist/types/auth/connect-button-view/connect-button-view.constants.d.ts +31 -0
  23. package/dist/types/auth/connect-button-view/connect-button-view.types.d.mts +83 -0
  24. package/dist/types/auth/connect-button-view/connect-button-view.types.d.ts +83 -0
  25. package/dist/types/auth/connect-button-view/index.d.mts +7 -0
  26. package/dist/types/auth/connect-button-view/index.d.ts +7 -0
  27. package/dist/types/auth/index.d.mts +1 -1
  28. package/dist/types/auth/index.d.ts +1 -1
  29. package/dist/types/index.d.mts +1 -1
  30. package/dist/types/index.d.ts +1 -1
  31. package/dist/types/primitives/chart/chart-type-switch.d.mts +10 -0
  32. package/dist/types/primitives/chart/chart-type-switch.d.ts +10 -0
  33. package/dist/types/primitives/chart/index.d.mts +7 -1
  34. package/dist/types/primitives/chart/index.d.ts +7 -1
  35. package/dist/types/primitives/icon/index.d.mts +9 -1
  36. package/dist/types/primitives/icon/index.d.ts +9 -1
  37. package/dist/types/primitives/icon/registry.d.mts +32 -0
  38. package/dist/types/primitives/icon/registry.d.ts +32 -0
  39. package/dist/types/primitives/icon/svg/apple.d.mts +5 -0
  40. package/dist/types/primitives/icon/svg/apple.d.ts +5 -0
  41. package/dist/types/primitives/icon/svg/chart-candlestick.d.mts +5 -0
  42. package/dist/types/primitives/icon/svg/chart-candlestick.d.ts +5 -0
  43. package/dist/types/primitives/icon/svg/chart-line.d.mts +5 -0
  44. package/dist/types/primitives/icon/svg/chart-line.d.ts +5 -0
  45. package/dist/types/primitives/icon/svg/error-filled.d.mts +5 -0
  46. package/dist/types/primitives/icon/svg/error-filled.d.ts +5 -0
  47. package/dist/types/primitives/icon/svg/ethereum.d.mts +5 -0
  48. package/dist/types/primitives/icon/svg/ethereum.d.ts +5 -0
  49. package/dist/types/primitives/icon/svg/google.d.mts +5 -0
  50. package/dist/types/primitives/icon/svg/google.d.ts +5 -0
  51. package/dist/types/primitives/icon/svg/image.d.mts +5 -0
  52. package/dist/types/primitives/icon/svg/image.d.ts +5 -0
  53. package/dist/types/primitives/icon/svg/solana.d.mts +5 -0
  54. package/dist/types/primitives/icon/svg/solana.d.ts +5 -0
  55. package/dist/types/primitives/index.d.mts +2 -0
  56. package/dist/types/primitives/index.d.ts +2 -0
  57. package/dist/types/primitives/inline-alert/index.d.mts +16 -0
  58. package/dist/types/primitives/inline-alert/index.d.ts +16 -0
  59. package/dist/types/primitives/remote-image/index.d.mts +6 -0
  60. package/dist/types/primitives/remote-image/index.d.ts +6 -0
  61. package/dist/types/primitives/remote-image/remote-image.constants.d.mts +4 -0
  62. package/dist/types/primitives/remote-image/remote-image.constants.d.ts +4 -0
  63. package/dist/types/primitives/remote-image/remote-image.types.d.mts +16 -0
  64. package/dist/types/primitives/remote-image/remote-image.types.d.ts +16 -0
  65. package/dist/types/primitives/venue-logo/svg/logo-limitless.d.mts +5 -0
  66. package/dist/types/primitives/venue-logo/svg/logo-limitless.d.ts +5 -0
  67. package/dist/types/primitives/venue-logo/venue-logo.types.d.mts +1 -1
  68. package/dist/types/primitives/venue-logo/venue-logo.types.d.ts +1 -1
  69. package/dist/types/trading/types.d.mts +26 -26
  70. package/dist/types/trading/types.d.ts +26 -26
  71. package/package.json +3 -15
  72. package/dist/auth.d.mts +0 -1
  73. package/dist/auth.d.ts +0 -1
  74. package/dist/auth.js +0 -2290
  75. package/dist/auth.mjs +0 -8
  76. package/dist/chunk-ADGL6RFX.mjs +0 -214
  77. package/dist/chunk-CN7GI2RJ.mjs +0 -585
  78. package/dist/chunk-HI4EEDN5.mjs +0 -1880
  79. package/dist/chunk-INRG3D4M.mjs +0 -450
  80. package/dist/chunk-JE3Z52FD.mjs +0 -345
  81. package/dist/chunk-MHCHR65A.mjs +0 -165
  82. package/dist/chunk-PASXFYKQ.mjs +0 -81
  83. package/dist/chunk-UBBOLLOS.mjs +0 -999
  84. package/dist/types/auth/connect-button/connect-button.constants.d.mts +0 -10
  85. package/dist/types/auth/connect-button/connect-button.constants.d.ts +0 -10
  86. package/dist/types/auth/connect-button/connect-button.types.d.mts +0 -33
  87. package/dist/types/auth/connect-button/connect-button.types.d.ts +0 -33
  88. package/dist/types/auth/connect-button/index.d.mts +0 -7
  89. package/dist/types/auth/connect-button/index.d.ts +0 -7
@@ -1,999 +0,0 @@
1
- import {
2
- Select
3
- } from "./chunk-MHCHR65A.mjs";
4
- import {
5
- __objRest,
6
- __spreadProps,
7
- __spreadValues,
8
- cn,
9
- getMotionClassName,
10
- getScrollBehavior
11
- } from "./chunk-HI4EEDN5.mjs";
12
-
13
- // src/primitives/card/index.tsx
14
- import { useSdkUiConfig } from "@agg-market/hooks";
15
- import { jsx } from "react/jsx-runtime";
16
- var Card = (_a) => {
17
- var _b = _a, { className, onClick } = _b, props = __objRest(_b, ["className", "onClick"]);
18
- const { enableAnimations } = useSdkUiConfig();
19
- return /* @__PURE__ */ jsx(
20
- "div",
21
- __spreadValues(__spreadValues({
22
- className: cn(
23
- "group/agg-card",
24
- "flex w-full flex-col font-agg-sans",
25
- "rounded-agg-xl border border-agg-separator",
26
- "bg-agg-secondary text-agg-foreground shadow-agg-card",
27
- getMotionClassName(
28
- enableAnimations,
29
- "transition-shadow hover:shadow-agg-card-hover duration-300 ease-in-out"
30
- ),
31
- className
32
- )
33
- }, onClick ? { onClick } : {}), props)
34
- );
35
- };
36
- Card.displayName = "Card";
37
-
38
- // src/primitives/skeleton/skeleton.types.ts
39
- var skeletonViews = {
40
- eventListItem: "event-list-item",
41
- eventListItemDetails: "event-list-item-details",
42
- marketDetailsMinified: "market-details-minified",
43
- marketDetailsDetailed: "market-details-detailed",
44
- eventList: "event-list",
45
- settlement: "settlement",
46
- placeOrder: "place-order"
47
- };
48
-
49
- // src/primitives/skeleton/views/event-list-skeleton-view.tsx
50
- import { useLabels as useLabels2 } from "@agg-market/hooks";
51
-
52
- // src/primitives/skeleton/skeleton-block.tsx
53
- import { useSdkUiConfig as useSdkUiConfig2 } from "@agg-market/hooks";
54
- import { jsx as jsx2 } from "react/jsx-runtime";
55
- var SkeletonBlock = ({ className }) => {
56
- const { enableAnimations } = useSdkUiConfig2();
57
- return /* @__PURE__ */ jsx2(
58
- "div",
59
- {
60
- "aria-hidden": true,
61
- className: cn(
62
- "bg-agg-separator",
63
- getMotionClassName(enableAnimations, "animate-pulse"),
64
- className
65
- )
66
- }
67
- );
68
- };
69
- SkeletonBlock.displayName = "SkeletonBlock";
70
-
71
- // src/primitives/skeleton/views/event-list-item-skeleton-view.tsx
72
- import { useLabels } from "@agg-market/hooks";
73
-
74
- // src/events/item/event-list-item.constants.ts
75
- var baseCardClassName = "gap-3 overflow-hidden p-5 w-full";
76
-
77
- // src/primitives/skeleton/views/event-list-item-skeleton-view.tsx
78
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
79
- var EventListItemSkeletonView = ({
80
- className,
81
- ariaLabel,
82
- isStandalone = false
83
- }) => {
84
- const labels = useLabels();
85
- const outcomeTitleWidths = ["w-40", "w-[200px]"];
86
- return /* @__PURE__ */ jsxs(
87
- Card,
88
- {
89
- className: cn("group/agg-skeleton", baseCardClassName, className),
90
- role: isStandalone ? "status" : void 0,
91
- "aria-label": isStandalone ? ariaLabel != null ? ariaLabel : labels.eventItem.loading : void 0,
92
- "aria-busy": isStandalone || void 0,
93
- "aria-hidden": isStandalone ? void 0 : true,
94
- children: [
95
- /* @__PURE__ */ jsxs("div", { className: "flex h-14 w-full items-center gap-3 justify-stretch", children: [
96
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "size-10! rounded-agg-lg" }),
97
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "h-6 w-fit flex-1 rounded-agg-sm" })
98
- ] }),
99
- /* @__PURE__ */ jsx3("div", { className: "flex flex-col gap-3", children: outcomeTitleWidths.map((outcomeTitleWidth, index) => /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [
100
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: cn("h-5 rounded-agg-sm", outcomeTitleWidth) }),
101
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "h-9 w-[100px] rounded-agg-full" })
102
- ] }, index)) }),
103
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-5 text-agg-muted-foreground", children: [
104
- /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
105
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "h-5 w-[100px] rounded-agg-sm" }),
106
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
107
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "size-[14px] rounded-agg-sm" }),
108
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "size-[14px] rounded-agg-sm" })
109
- ] })
110
- ] }),
111
- /* @__PURE__ */ jsx3(SkeletonBlock, { className: "h-5 w-[60px] rounded-agg-sm" })
112
- ] })
113
- ]
114
- }
115
- );
116
- };
117
- EventListItemSkeletonView.displayName = "EventListItemSkeletonView";
118
-
119
- // src/primitives/skeleton/views/event-list-skeleton-view.tsx
120
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
121
- var EventListSkeletonView = ({ className, ariaLabel }) => {
122
- const labels = useLabels2();
123
- return /* @__PURE__ */ jsxs2(
124
- "section",
125
- {
126
- className: cn("group/agg-skeleton", "flex w-full flex-col gap-5", className),
127
- role: "status",
128
- "aria-label": ariaLabel != null ? ariaLabel : labels.eventList.loading("events"),
129
- "aria-busy": true,
130
- children: [
131
- /* @__PURE__ */ jsxs2("header", { className: "flex w-full flex-col items-start justify-between gap-3 md:flex-row md:flex-nowrap md:items-center md:gap-5", children: [
132
- /* @__PURE__ */ jsx4(SkeletonBlock, { className: "h-7 w-[120px] rounded-agg-md" }),
133
- /* @__PURE__ */ jsx4(SkeletonBlock, { className: "h-8 w-full rounded-agg-md md:w-[400px]" })
134
- ] }),
135
- /* @__PURE__ */ jsx4("div", { className: "grid grid-cols-1 gap-5 md:grid-cols-3", children: Array.from({ length: 3 }).map((_, index) => /* @__PURE__ */ jsx4(
136
- EventListItemSkeletonView,
137
- {
138
- isStandalone: false,
139
- className: "w-full min-w-0 max-w-none"
140
- },
141
- index
142
- )) })
143
- ]
144
- }
145
- );
146
- };
147
- EventListSkeletonView.displayName = "EventListSkeletonView";
148
-
149
- // src/primitives/skeleton/views/event-list-item-details-skeleton-view.tsx
150
- import { useLabels as useLabels3 } from "@agg-market/hooks";
151
-
152
- // src/events/item-details/event-list-item-details.constants.ts
153
- var detailsBaseCardClassName = "w-full overflow-hidden gap-6 p-5 md:gap-8 md:p-10";
154
- var eventListItemDetailsTimeRanges = [
155
- "1H",
156
- "6H",
157
- "1D",
158
- "1W",
159
- "1M",
160
- "ALL"
161
- ];
162
- var lineColorByVenue = {
163
- polymarket: "#2e5cff",
164
- kalshi: "#00d295",
165
- probable: "#f05923",
166
- opinion: "#020205"
167
- };
168
- var fallbackLineColors = ["#2e5cff", "#00d295", "#f05923", "#020205"];
169
-
170
- // src/primitives/skeleton/views/event-list-item-details-skeleton-view.tsx
171
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
172
- var EventListItemDetailsSkeletonView = ({
173
- className,
174
- ariaLabel
175
- }) => {
176
- const labels = useLabels3();
177
- return /* @__PURE__ */ jsxs3(
178
- Card,
179
- {
180
- className: cn("group/agg-skeleton", detailsBaseCardClassName, className),
181
- role: "status",
182
- "aria-label": ariaLabel != null ? ariaLabel : labels.eventItemDetails.loading,
183
- "aria-busy": true,
184
- children: [
185
- /* @__PURE__ */ jsxs3("div", { className: "flex h-14 w-full items-center gap-3 justify-stretch", children: [
186
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "size-10! rounded-agg-lg" }),
187
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-6 w-fit flex-1 rounded-agg-sm" })
188
- ] }),
189
- /* @__PURE__ */ jsxs3("div", { className: "flex w-full flex-col gap-4 md:gap-6", children: [
190
- /* @__PURE__ */ jsxs3("div", { className: "flex w-full flex-col gap-3 md:flex-row md:items-center md:justify-between", children: [
191
- /* @__PURE__ */ jsxs3("div", { className: "flex max-w-full gap-2 overflow-hidden", children: [
192
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-9 w-[100px] rounded-agg-full" }),
193
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-9 w-[100px] rounded-agg-full" }),
194
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-9 w-[100px] rounded-agg-full" })
195
- ] }),
196
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-9 w-full max-w-[221px] rounded-agg-full md:w-[221px]" })
197
- ] }),
198
- /* @__PURE__ */ jsxs3("div", { className: "flex w-full flex-col gap-3", children: [
199
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-[220px] w-full rounded-agg-xl md:h-[240px]" }),
200
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between", children: [
201
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-5 w-[59px] rounded-agg-sm" }),
202
- /* @__PURE__ */ jsx5(SkeletonBlock, { className: "h-5 w-40 rounded-agg-sm" })
203
- ] })
204
- ] })
205
- ] })
206
- ]
207
- }
208
- );
209
- };
210
- EventListItemDetailsSkeletonView.displayName = "EventListItemDetailsSkeletonView";
211
-
212
- // src/primitives/skeleton/views/market-details-skeleton-view.tsx
213
- import { useLabels as useLabels4 } from "@agg-market/hooks";
214
-
215
- // src/events/market-details/market-details.constants.ts
216
- var marketDetailsBaseCardClassName = "w-full overflow-hidden rounded-agg-lg border border-agg-separator bg-agg-secondary text-agg-foreground shadow-none hover:shadow-none";
217
- var getMarketDetailsTabs = (labels) => {
218
- return [
219
- { value: "order-book", label: labels.marketDetails.tabs.orderBook },
220
- { value: "graph", label: labels.marketDetails.tabs.graph }
221
- ];
222
- };
223
- var marketDetailsDefaultIsOpened = false;
224
- var orderBookRowLimitDefault = 4;
225
-
226
- // src/primitives/skeleton/views/market-details-skeleton-view.tsx
227
- import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
228
- var orderBookAskBarWidths = [
229
- "w-[52px] md:w-[240px]",
230
- "w-[48px] md:w-[200px]",
231
- "w-[40px] md:w-[120px]",
232
- "w-[36px] md:w-[60px]"
233
- ];
234
- var orderBookBidBarWidths = [
235
- "w-[36px] md:w-[60px]",
236
- "w-[40px] md:w-[120px]",
237
- "w-[48px] md:w-[200px]",
238
- "w-[52px] md:w-[240px]"
239
- ];
240
- var MarketDetailsHeaderSkeleton = () => {
241
- return /* @__PURE__ */ jsxs4("div", { className: "flex flex-wrap items-center justify-between gap-3 px-4 py-3 md:px-5", children: [
242
- /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 items-center gap-3 md:min-w-52 md:gap-4", children: [
243
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "size-12 rounded-agg-lg md:size-[60px]" }),
244
- /* @__PURE__ */ jsxs4("div", { className: "flex min-w-0 flex-col gap-2", children: [
245
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-6 w-[132px] rounded-agg-sm" }),
246
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-4 w-[141px] rounded-agg-sm" })
247
- ] })
248
- ] }),
249
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-9 w-[60px] rounded-agg-md" }),
250
- /* @__PURE__ */ jsxs4("div", { className: "flex w-full gap-2 md:w-auto", children: [
251
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-9 w-full rounded-agg-full md:w-[135px]" }),
252
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-9 w-full rounded-agg-full md:w-[131px]" })
253
- ] })
254
- ] });
255
- };
256
- var MarketDetailsTabsSkeleton = () => {
257
- return /* @__PURE__ */ jsxs4("div", { className: "flex h-14 items-end px-4 md:px-5", children: [
258
- /* @__PURE__ */ jsxs4("div", { className: "flex h-full flex-col items-end justify-end rounded-t-agg-lg", children: [
259
- /* @__PURE__ */ jsx6("div", { className: "px-4 py-3", children: /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-6 w-20 rounded-agg-sm" }) }),
260
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-[3px] w-full rounded-t-agg-sm" })
261
- ] }),
262
- /* @__PURE__ */ jsxs4("div", { className: "flex h-full flex-col justify-center", children: [
263
- /* @__PURE__ */ jsx6("div", { className: "px-4 py-3", children: /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-6 w-12 rounded-agg-sm" }) }),
264
- /* @__PURE__ */ jsx6("div", { className: "h-[3px] w-full" })
265
- ] })
266
- ] });
267
- };
268
- var MarketDetailsOrderBookRows = ({
269
- side,
270
- barWidths
271
- }) => {
272
- return /* @__PURE__ */ jsx6("div", { className: "flex flex-col gap-2", children: barWidths.map((barWidthClassName, index) => /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-2", children: [
273
- /* @__PURE__ */ jsxs4("div", { className: "grid grid-cols-[52px_1fr_1fr_52px] items-center gap-2 md:grid-cols-[88px_1fr_1fr_minmax(120px,220px)] md:gap-6", children: [
274
- /* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-1 md:gap-3", children: [
275
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "size-4 rounded-agg-sm" }),
276
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-5 w-[60px] rounded-agg-sm" })
277
- ] }),
278
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-5 rounded-agg-sm" }),
279
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-5 rounded-agg-sm" }),
280
- /* @__PURE__ */ jsx6("div", { className: "flex justify-end", children: /* @__PURE__ */ jsx6(SkeletonBlock, { className: cn("h-2 rounded-agg-full", barWidthClassName) }) })
281
- ] }),
282
- index < barWidths.length - 1 ? /* @__PURE__ */ jsx6("div", { className: "h-px w-full bg-agg-separator" }) : null
283
- ] }, `${side}-row-${index}`)) });
284
- };
285
- var MarketDetailsOderbookSkeleton = ({
286
- className
287
- }) => {
288
- return /* @__PURE__ */ jsxs4("div", { className: cn("flex flex-col gap-5", className), children: [
289
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-2", children: [
290
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-4 w-10 rounded-agg-sm" }),
291
- /* @__PURE__ */ jsx6(MarketDetailsOrderBookRows, { side: "ask", barWidths: orderBookAskBarWidths })
292
- ] }),
293
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-2", children: [
294
- /* @__PURE__ */ jsx6(SkeletonBlock, { className: "h-4 w-10 rounded-agg-sm" }),
295
- /* @__PURE__ */ jsx6(MarketDetailsOrderBookRows, { side: "bid", barWidths: orderBookBidBarWidths })
296
- ] })
297
- ] });
298
- };
299
- var MarketDetailsSkeletonView = ({
300
- className,
301
- ariaLabel,
302
- isDetailed
303
- }) => {
304
- const labels = useLabels4();
305
- return /* @__PURE__ */ jsxs4(
306
- Card,
307
- {
308
- className: cn("group/agg-skeleton", marketDetailsBaseCardClassName, className),
309
- role: "status",
310
- "aria-label": ariaLabel != null ? ariaLabel : labels.marketDetails.loading,
311
- "aria-busy": true,
312
- children: [
313
- /* @__PURE__ */ jsx6(MarketDetailsHeaderSkeleton, {}),
314
- isDetailed ? /* @__PURE__ */ jsxs4(Fragment, { children: [
315
- /* @__PURE__ */ jsx6("div", { className: "h-px w-full bg-agg-separator" }),
316
- /* @__PURE__ */ jsx6(MarketDetailsTabsSkeleton, {}),
317
- /* @__PURE__ */ jsx6("div", { className: "h-px w-full bg-agg-separator" }),
318
- /* @__PURE__ */ jsx6(MarketDetailsOderbookSkeleton, { className: "p-5" })
319
- ] }) : null
320
- ]
321
- }
322
- );
323
- };
324
- MarketDetailsSkeletonView.displayName = "MarketDetailsSkeletonView";
325
-
326
- // src/primitives/skeleton/views/place-order-skeleton-view.tsx
327
- import { jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
328
- var placeOrderCardClassName = "overflow-hidden rounded-agg-xl border border-agg-border bg-agg-secondary shadow-none hover:shadow-none";
329
- var TabsSkeletonBar = () => {
330
- return /* @__PURE__ */ jsxs5("div", { className: "flex w-full items-end border-b border-agg-border", children: [
331
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col rounded-t-agg-lg", children: [
332
- /* @__PURE__ */ jsx7("div", { className: "px-5 py-2", children: /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-6 w-10 rounded-agg-sm" }) }),
333
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-[3px] w-full rounded-t-agg-sm" })
334
- ] }),
335
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col", children: [
336
- /* @__PURE__ */ jsx7("div", { className: "px-5 py-2", children: /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-6 w-10 rounded-agg-sm" }) }),
337
- /* @__PURE__ */ jsx7("div", { className: "h-[3px] w-full" })
338
- ] })
339
- ] });
340
- };
341
- var ContentBody = () => {
342
- return /* @__PURE__ */ jsxs5("div", { className: cn("flex flex-col gap-6 p-5"), children: [
343
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-2", children: [
344
- /* @__PURE__ */ jsxs5("div", { className: "flex min-w-0 items-center gap-3", children: [
345
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "size-12 shrink-0 rounded-agg-lg" }),
346
- /* @__PURE__ */ jsxs5("div", { className: "flex min-w-0 flex-1 flex-col gap-2", children: [
347
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-4 w-[92%] max-w-[240px] rounded-agg-sm" }),
348
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-4 w-[64%] max-w-[160px] rounded-agg-sm" })
349
- ] })
350
- ] }),
351
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-6 w-[92px] rounded-agg-sm" }),
352
- /* @__PURE__ */ jsx7(TabsSkeletonBar, {})
353
- ] }),
354
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-4", children: [
355
- /* @__PURE__ */ jsxs5("div", { className: "flex w-full gap-2", children: [
356
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-11 flex-1 rounded-agg-full" }),
357
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-11 flex-1 rounded-agg-full" })
358
- ] }),
359
- /* @__PURE__ */ jsxs5("div", { className: "flex items-center justify-between gap-4", children: [
360
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-2", children: [
361
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-5 w-[63px] rounded-agg-sm" }),
362
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-4 w-[118px] rounded-agg-sm" })
363
- ] }),
364
- /* @__PURE__ */ jsx7("p", { className: cn("text-agg-3xl font-agg-bold leading-agg-9 text-agg-separator"), children: "$0" })
365
- ] })
366
- ] }),
367
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-12 w-full rounded-agg-full" }),
368
- /* @__PURE__ */ jsx7(SkeletonBlock, { className: "h-4 w-full max-w-[240px] self-center rounded-agg-sm" })
369
- ] });
370
- };
371
- var PlaceOrderSkeletonView = ({
372
- className,
373
- ariaLabel
374
- }) => {
375
- return /* @__PURE__ */ jsx7(
376
- "div",
377
- {
378
- className: cn("group/agg-skeleton", "w-full", className),
379
- role: "status",
380
- "aria-label": ariaLabel != null ? ariaLabel : "Loading place order",
381
- "aria-busy": true,
382
- children: /* @__PURE__ */ jsx7("div", { className: "flex w-full items-end justify-center", children: /* @__PURE__ */ jsx7(Card, { className: cn(placeOrderCardClassName, "w-full"), children: /* @__PURE__ */ jsx7(ContentBody, {}) }) })
383
- }
384
- );
385
- };
386
- PlaceOrderSkeletonView.displayName = "PlaceOrderSkeletonView";
387
-
388
- // src/primitives/skeleton/views/settlement-skeleton-view.tsx
389
- import { useLabels as useLabels5 } from "@agg-market/hooks";
390
- import { jsx as jsx8, jsxs as jsxs6 } from "react/jsx-runtime";
391
- var SettlementSkeletonView = ({
392
- className,
393
- ariaLabel
394
- }) => {
395
- const labels = useLabels5();
396
- return /* @__PURE__ */ jsxs6(
397
- Card,
398
- {
399
- className: cn(
400
- "group/agg-skeleton",
401
- "flex flex-col w-full gap-5 rounded-agg-xl border border-agg-separator bg-agg-secondary p-5 shadow-none hover:shadow-none",
402
- className
403
- ),
404
- role: "status",
405
- "aria-label": ariaLabel != null ? ariaLabel : labels.trading.settlementLoading,
406
- "aria-busy": true,
407
- children: [
408
- /* @__PURE__ */ jsxs6("div", { className: "flex w-full items-center justify-between gap-4", children: [
409
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-4 w-[81px] rounded-agg-sm" }),
410
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-5 w-full max-w-[240px] rounded-agg-sm" })
411
- ] }),
412
- /* @__PURE__ */ jsxs6("div", { className: "flex w-full flex-col gap-3", children: [
413
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-5 w-[200px] rounded-agg-sm" }),
414
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-2", children: [
415
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-4 w-full max-w-[320px] rounded-agg-sm" }),
416
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-4 w-full max-w-[280px] rounded-agg-sm" })
417
- ] })
418
- ] }),
419
- /* @__PURE__ */ jsx8("div", { className: "h-px w-full bg-agg-separator" }),
420
- /* @__PURE__ */ jsxs6("div", { className: "flex w-full flex-col gap-3", children: [
421
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
422
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "size-4 rounded-agg-sm" }),
423
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-5 w-[100px] rounded-agg-sm" })
424
- ] }),
425
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2", children: [
426
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "size-4 rounded-agg-sm" }),
427
- /* @__PURE__ */ jsx8(SkeletonBlock, { className: "h-5 w-[60px] rounded-agg-sm" })
428
- ] })
429
- ] })
430
- ]
431
- }
432
- );
433
- };
434
- SettlementSkeletonView.displayName = "SettlementSkeletonView";
435
-
436
- // src/primitives/skeleton/index.tsx
437
- import { jsx as jsx9 } from "react/jsx-runtime";
438
- var Skeleton = ({ view, className, ariaLabel }) => {
439
- if (view === skeletonViews.eventListItem) {
440
- return /* @__PURE__ */ jsx9(EventListItemSkeletonView, { className, ariaLabel, isStandalone: true });
441
- }
442
- if (view === skeletonViews.eventListItemDetails) {
443
- return /* @__PURE__ */ jsx9(EventListItemDetailsSkeletonView, { className, ariaLabel });
444
- }
445
- if (view === skeletonViews.marketDetailsMinified) {
446
- return /* @__PURE__ */ jsx9(MarketDetailsSkeletonView, { className, ariaLabel, isDetailed: false });
447
- }
448
- if (view === skeletonViews.marketDetailsDetailed) {
449
- return /* @__PURE__ */ jsx9(MarketDetailsSkeletonView, { className, ariaLabel, isDetailed: true });
450
- }
451
- if (view === skeletonViews.settlement) {
452
- return /* @__PURE__ */ jsx9(SettlementSkeletonView, { className, ariaLabel });
453
- }
454
- if (view === skeletonViews.placeOrder) {
455
- return /* @__PURE__ */ jsx9(PlaceOrderSkeletonView, { className, ariaLabel });
456
- }
457
- return /* @__PURE__ */ jsx9(EventListSkeletonView, { className, ariaLabel });
458
- };
459
- Skeleton.displayName = "Skeleton";
460
-
461
- // src/primitives/tabs/index.tsx
462
- import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
463
- import { useLabels as useLabels6, useSdkUiConfig as useSdkUiConfig3 } from "@agg-market/hooks";
464
-
465
- // src/primitives/tabs/tabs.utils.ts
466
- var findNextEnabledIndex = (items, startIndex, direction) => {
467
- var _a;
468
- if (items.length === 0)
469
- return -1;
470
- for (let step = 1; step <= items.length; step += 1) {
471
- const nextIndex = (startIndex + direction * step + items.length) % items.length;
472
- if (!((_a = items[nextIndex]) == null ? void 0 : _a.disabled))
473
- return nextIndex;
474
- }
475
- return -1;
476
- };
477
- var findEdgeEnabledIndex = (items, direction) => {
478
- var _a;
479
- if (direction === 1) {
480
- return items.findIndex((item) => !item.disabled);
481
- }
482
- for (let index = items.length - 1; index >= 0; index -= 1) {
483
- if (!((_a = items[index]) == null ? void 0 : _a.disabled))
484
- return index;
485
- }
486
- return -1;
487
- };
488
-
489
- // src/primitives/tabs/index.tsx
490
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
491
- var mobileTabsMediaQuery = "(max-width: 512px)";
492
- var getTabButtonClassName = ({
493
- enableAnimations,
494
- isBarVariant,
495
- isActive,
496
- isDisabled,
497
- size
498
- }) => {
499
- const isSmall = size === "s";
500
- return cn(
501
- "cursor-pointer disabled:cursor-not-allowed",
502
- "relative inline-flex h-full shrink-0 items-center justify-center gap-2 font-agg-sans",
503
- isBarVariant ? "hover:text-agg-foreground hover:bg-agg-secondary-hover" : "hover:text-agg-foreground hover:font-bold",
504
- getMotionClassName(
505
- enableAnimations,
506
- "transition-[colors] duration-300 ease-in-out motion-reduce:transition-none"
507
- ),
508
- isBarVariant ? cn(
509
- "min-w-20 overflow-hidden border-r border-agg-separator last:border-r-0",
510
- isSmall ? "px-3 text-agg-sm leading-agg-5" : "px-4 text-agg-base leading-agg-6"
511
- ) : cn(isSmall ? "px-4 text-agg-sm leading-agg-5" : "px-5 text-agg-base leading-agg-6"),
512
- isBarVariant && isActive && "font-agg-bold text-agg-primary",
513
- isBarVariant && !isActive && "font-agg-normal text-agg-foreground",
514
- !isBarVariant && isActive && "font-agg-bold text-agg-primary",
515
- !isBarVariant && !isActive && "font-agg-normal text-agg-foreground",
516
- isDisabled && "cursor-not-allowed opacity-60"
517
- );
518
- };
519
- var Tabs = ({
520
- items,
521
- value,
522
- onChange,
523
- variant = "bar",
524
- size = "m",
525
- overflowBehavior,
526
- ariaLabel,
527
- className,
528
- classNames
529
- }) => {
530
- const labels = useLabels6();
531
- const { enableAnimations } = useSdkUiConfig3();
532
- const buttonRefs = useRef([]);
533
- const dragStateRef = useRef({
534
- isPointerDown: false,
535
- isDragging: false,
536
- pointerId: null,
537
- startClientX: 0,
538
- startClientY: 0,
539
- startScrollLeft: 0
540
- });
541
- const suppressClickRef = useRef(false);
542
- const resolvedAriaLabel = ariaLabel != null ? ariaLabel : labels.common.tabsAria;
543
- const [isMobileViewport, setIsMobileViewport] = useState(false);
544
- const [isDraggingTabs, setIsDraggingTabs] = useState(false);
545
- const [activeUnderlineStyle, setActiveUnderlineStyle] = useState({
546
- transform: "translateX(0px)",
547
- width: 0,
548
- opacity: 0
549
- });
550
- const [scrollAffordanceState, setScrollAffordanceState] = useState({
551
- showStart: false,
552
- showEnd: false
553
- });
554
- const tabListRef = useRef(null);
555
- const isBarVariant = variant === "bar";
556
- const resolvedOverflowBehavior = useMemo(() => {
557
- if (overflowBehavior)
558
- return overflowBehavior;
559
- if (!isBarVariant)
560
- return "scroll";
561
- return isMobileViewport ? "select" : "scroll";
562
- }, [isBarVariant, isMobileViewport, overflowBehavior]);
563
- const shouldUseOverflowScroll = resolvedOverflowBehavior === "scroll";
564
- const shouldUseOverflowSelect = resolvedOverflowBehavior === "select";
565
- useEffect(() => {
566
- if (typeof window === "undefined")
567
- return;
568
- const mediaQueryList = window.matchMedia(mobileTabsMediaQuery);
569
- const handleMediaQueryChange = (event) => {
570
- setIsMobileViewport(event.matches);
571
- };
572
- handleMediaQueryChange(mediaQueryList);
573
- if (typeof mediaQueryList.addEventListener === "function") {
574
- mediaQueryList.addEventListener("change", handleMediaQueryChange);
575
- return () => {
576
- mediaQueryList.removeEventListener("change", handleMediaQueryChange);
577
- };
578
- }
579
- mediaQueryList.addListener(handleMediaQueryChange);
580
- return () => {
581
- mediaQueryList.removeListener(handleMediaQueryChange);
582
- };
583
- }, []);
584
- const updateScrollAffordances = useCallback(() => {
585
- if (!shouldUseOverflowScroll) {
586
- setScrollAffordanceState({
587
- showStart: false,
588
- showEnd: false
589
- });
590
- return;
591
- }
592
- const tabListElement = tabListRef.current;
593
- if (!tabListElement)
594
- return;
595
- const maxScrollLeft = tabListElement.scrollWidth - tabListElement.clientWidth;
596
- setScrollAffordanceState({
597
- showStart: tabListElement.scrollLeft > 4,
598
- showEnd: maxScrollLeft - tabListElement.scrollLeft > 4
599
- });
600
- }, [shouldUseOverflowScroll]);
601
- const renderedItems = items;
602
- const selectItems = useMemo(() => {
603
- return items.map((item) => ({
604
- value: item.value,
605
- label: item.label,
606
- disabled: item.disabled
607
- }));
608
- }, [items]);
609
- const isSelectDisabled = !items.some((item) => !item.disabled);
610
- const handleSelect = (nextValue) => {
611
- if (nextValue === value)
612
- return;
613
- onChange(nextValue);
614
- };
615
- const handleMoveFocus = (index) => {
616
- var _a;
617
- if (index < 0)
618
- return;
619
- const nextItem = renderedItems[index];
620
- if (!nextItem)
621
- return;
622
- handleSelect(nextItem.value);
623
- (_a = buttonRefs.current[index]) == null ? void 0 : _a.focus();
624
- };
625
- const handleKeyDown = (event, index) => {
626
- switch (event == null ? void 0 : event.key) {
627
- case "ArrowRight": {
628
- event == null ? void 0 : event.preventDefault();
629
- handleMoveFocus(findNextEnabledIndex(renderedItems, index, 1));
630
- return;
631
- }
632
- case "ArrowLeft": {
633
- event == null ? void 0 : event.preventDefault();
634
- handleMoveFocus(findNextEnabledIndex(renderedItems, index, -1));
635
- return;
636
- }
637
- case "Home": {
638
- event == null ? void 0 : event.preventDefault();
639
- handleMoveFocus(findEdgeEnabledIndex(renderedItems, 1));
640
- return;
641
- }
642
- case "End": {
643
- event == null ? void 0 : event.preventDefault();
644
- handleMoveFocus(findEdgeEnabledIndex(renderedItems, -1));
645
- return;
646
- }
647
- default:
648
- return;
649
- }
650
- };
651
- const tabListClassName = cn(
652
- "inline-flex items-stretch bg-agg-secondary",
653
- shouldUseOverflowScroll ? cn(
654
- "overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
655
- getMotionClassName(enableAnimations, "scroll-smooth")
656
- ) : "overflow-x-auto",
657
- isBarVariant ? "h-8 rounded-agg-sm border border-agg-separator" : "h-12 border-b border-agg-separator -mb-[1px]",
658
- shouldUseOverflowScroll && "select-none",
659
- shouldUseOverflowScroll && !isBarVariant && "snap-x snap-mandatory",
660
- shouldUseOverflowScroll && (isDraggingTabs ? "cursor-grabbing" : "cursor-grab")
661
- );
662
- const handleTabListWheel = (event) => {
663
- if (!shouldUseOverflowScroll)
664
- return;
665
- const tabListElement = event.currentTarget;
666
- if (tabListElement.scrollWidth <= tabListElement.clientWidth)
667
- return;
668
- if (Math.abs(event.deltaX) > Math.abs(event.deltaY))
669
- return;
670
- event.preventDefault();
671
- tabListElement.scrollLeft += event.deltaY;
672
- };
673
- const handleTabListPointerDown = (event) => {
674
- if (!shouldUseOverflowScroll)
675
- return;
676
- if (event.pointerType !== "mouse")
677
- return;
678
- if (event.button !== 0)
679
- return;
680
- const tabListElement = tabListRef.current;
681
- if (!tabListElement)
682
- return;
683
- if (tabListElement.scrollWidth <= tabListElement.clientWidth)
684
- return;
685
- dragStateRef.current = {
686
- isPointerDown: true,
687
- isDragging: false,
688
- pointerId: event.pointerId,
689
- startClientX: event.clientX,
690
- startClientY: event.clientY,
691
- startScrollLeft: tabListElement.scrollLeft
692
- };
693
- };
694
- const handleTabListPointerMove = (event) => {
695
- if (!shouldUseOverflowScroll)
696
- return;
697
- const dragState = dragStateRef.current;
698
- const tabListElement = tabListRef.current;
699
- if (!dragState.isPointerDown)
700
- return;
701
- if (dragState.pointerId !== event.pointerId)
702
- return;
703
- if (!tabListElement)
704
- return;
705
- const deltaX = event.clientX - dragState.startClientX;
706
- const deltaY = event.clientY - dragState.startClientY;
707
- const horizontalDistance = Math.abs(deltaX);
708
- const verticalDistance = Math.abs(deltaY);
709
- const hasExceededDragThreshold = horizontalDistance > 10 && horizontalDistance > verticalDistance;
710
- if (hasExceededDragThreshold && !dragState.isDragging) {
711
- dragState.isDragging = true;
712
- setIsDraggingTabs(true);
713
- tabListElement.setPointerCapture(event.pointerId);
714
- }
715
- if (!dragState.isDragging)
716
- return;
717
- event.preventDefault();
718
- tabListElement.scrollLeft = dragState.startScrollLeft - deltaX;
719
- };
720
- const handleEndTabListDrag = (event) => {
721
- const dragState = dragStateRef.current;
722
- const tabListElement = tabListRef.current;
723
- if (!dragState.isPointerDown)
724
- return;
725
- if (dragState.pointerId !== event.pointerId)
726
- return;
727
- if (tabListElement == null ? void 0 : tabListElement.hasPointerCapture(event.pointerId)) {
728
- tabListElement.releasePointerCapture(event.pointerId);
729
- }
730
- if (dragState.isDragging) {
731
- suppressClickRef.current = true;
732
- window.setTimeout(() => {
733
- suppressClickRef.current = false;
734
- }, 0);
735
- }
736
- dragStateRef.current = {
737
- isPointerDown: false,
738
- isDragging: false,
739
- pointerId: null,
740
- startClientX: 0,
741
- startClientY: 0,
742
- startScrollLeft: 0
743
- };
744
- setIsDraggingTabs(false);
745
- };
746
- const handleTabListClickCapture = (event) => {
747
- if (!suppressClickRef.current)
748
- return;
749
- event == null ? void 0 : event.preventDefault();
750
- event == null ? void 0 : event.stopPropagation();
751
- suppressClickRef.current = false;
752
- };
753
- const updateActiveUnderline = useCallback(() => {
754
- if (isBarVariant) {
755
- setActiveUnderlineStyle({
756
- transform: "translateX(0px)",
757
- width: 0,
758
- opacity: 0
759
- });
760
- return;
761
- }
762
- const activeIndex = renderedItems.findIndex((item) => item.value === value);
763
- const activeButton = activeIndex >= 0 ? buttonRefs.current[activeIndex] : null;
764
- if (!activeButton || !tabListRef.current) {
765
- setActiveUnderlineStyle((currentStyle) => __spreadProps(__spreadValues({}, currentStyle), {
766
- opacity: 0
767
- }));
768
- return;
769
- }
770
- setActiveUnderlineStyle({
771
- transform: `translateX(${activeButton.offsetLeft}px)`,
772
- width: activeButton.offsetWidth,
773
- opacity: 1
774
- });
775
- }, [isBarVariant, renderedItems, value]);
776
- useLayoutEffect(() => {
777
- updateActiveUnderline();
778
- }, [updateActiveUnderline]);
779
- useEffect(() => {
780
- if (isBarVariant || !shouldUseOverflowScroll)
781
- return;
782
- const tabListElement = tabListRef.current;
783
- if (!tabListElement)
784
- return;
785
- const handleScroll = () => {
786
- updateActiveUnderline();
787
- updateScrollAffordances();
788
- };
789
- tabListElement.addEventListener("scroll", handleScroll, { passive: true });
790
- updateScrollAffordances();
791
- return () => {
792
- tabListElement.removeEventListener("scroll", handleScroll);
793
- };
794
- }, [isBarVariant, shouldUseOverflowScroll, updateActiveUnderline, updateScrollAffordances]);
795
- useEffect(() => {
796
- if (!shouldUseOverflowScroll)
797
- return;
798
- updateScrollAffordances();
799
- }, [renderedItems, shouldUseOverflowScroll, updateScrollAffordances, value]);
800
- useEffect(() => {
801
- if (isBarVariant && !shouldUseOverflowScroll)
802
- return;
803
- if (typeof ResizeObserver === "undefined")
804
- return;
805
- const tabListElement = tabListRef.current;
806
- if (!tabListElement)
807
- return;
808
- const resizeObserver = new ResizeObserver(() => {
809
- updateActiveUnderline();
810
- updateScrollAffordances();
811
- });
812
- resizeObserver.observe(tabListElement);
813
- return () => {
814
- resizeObserver.disconnect();
815
- };
816
- }, [isBarVariant, shouldUseOverflowScroll, updateActiveUnderline, updateScrollAffordances]);
817
- useEffect(() => {
818
- if (!shouldUseOverflowScroll)
819
- return;
820
- const tabListElement = tabListRef.current;
821
- if (!tabListElement)
822
- return;
823
- const activeIndex = renderedItems.findIndex((item) => item.value === value);
824
- const activeButton = activeIndex >= 0 ? buttonRefs.current[activeIndex] : null;
825
- if (!activeButton)
826
- return;
827
- if (tabListElement.scrollWidth - tabListElement.clientWidth <= 1)
828
- return;
829
- const currentScrollLeft = tabListElement.scrollLeft;
830
- const currentScrollRight = currentScrollLeft + tabListElement.clientWidth;
831
- const activeButtonLeft = activeButton.offsetLeft;
832
- const activeButtonRight = activeButtonLeft + activeButton.offsetWidth;
833
- let nextScrollLeft = currentScrollLeft;
834
- if (activeButtonLeft < currentScrollLeft) {
835
- nextScrollLeft = activeButtonLeft;
836
- } else if (activeButtonRight > currentScrollRight) {
837
- nextScrollLeft = activeButtonRight - tabListElement.clientWidth;
838
- }
839
- if (Math.abs(nextScrollLeft - currentScrollLeft) < 1)
840
- return;
841
- tabListElement.scrollTo({
842
- left: Math.max(0, nextScrollLeft),
843
- behavior: getScrollBehavior(enableAnimations)
844
- });
845
- }, [enableAnimations, renderedItems, shouldUseOverflowScroll, value]);
846
- if (shouldUseOverflowSelect) {
847
- return /* @__PURE__ */ jsx10("div", { className: cn("w-full", className, classNames == null ? void 0 : classNames.root), children: /* @__PURE__ */ jsx10(
848
- Select,
849
- {
850
- ariaLabel,
851
- className: "w-full",
852
- disabled: isSelectDisabled,
853
- items: selectItems,
854
- onChange: handleSelect,
855
- value
856
- }
857
- ) });
858
- }
859
- return /* @__PURE__ */ jsxs7(
860
- "div",
861
- {
862
- className: cn(
863
- "group/agg-tabs",
864
- "relative max-w-full items-stretch font-agg-sans bg-agg-secondary",
865
- "inline-flex",
866
- className,
867
- classNames == null ? void 0 : classNames.root
868
- ),
869
- children: [
870
- /* @__PURE__ */ jsxs7(
871
- "div",
872
- {
873
- ref: tabListRef,
874
- role: "tablist",
875
- "aria-label": resolvedAriaLabel,
876
- className: cn("relative", tabListClassName, classNames == null ? void 0 : classNames.tabList),
877
- onClickCapture: handleTabListClickCapture,
878
- onPointerCancel: handleEndTabListDrag,
879
- onPointerDown: handleTabListPointerDown,
880
- onPointerMove: handleTabListPointerMove,
881
- onPointerUp: handleEndTabListDrag,
882
- onWheel: handleTabListWheel,
883
- children: [
884
- renderedItems.map((item, index) => {
885
- const isActive = item.value === value;
886
- return /* @__PURE__ */ jsxs7(
887
- "button",
888
- {
889
- ref: (buttonElement) => {
890
- buttonRefs.current[index] = buttonElement;
891
- },
892
- type: "button",
893
- role: "tab",
894
- tabIndex: isActive ? 0 : -1,
895
- "aria-selected": isActive,
896
- "aria-label": item.label,
897
- disabled: item.disabled,
898
- onClick: (e) => {
899
- e.preventDefault();
900
- e.stopPropagation();
901
- handleSelect(item.value);
902
- },
903
- onKeyDown: (event) => handleKeyDown(event, index),
904
- className: cn(
905
- getTabButtonClassName({
906
- enableAnimations,
907
- isBarVariant,
908
- isActive,
909
- isDisabled: !!item.disabled,
910
- size
911
- }),
912
- shouldUseOverflowScroll && !isBarVariant && "snap-start"
913
- ),
914
- children: [
915
- isBarVariant ? /* @__PURE__ */ jsx10(Fragment2, { children: /* @__PURE__ */ jsx10(
916
- "span",
917
- {
918
- "aria-hidden": true,
919
- className: cn(
920
- "pointer-events-none absolute inset-px origin-bottom rounded-[2px] bg-agg-secondary-hover",
921
- getMotionClassName(
922
- enableAnimations,
923
- "transition-[transform,opacity] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] motion-reduce:transition-none"
924
- ),
925
- isActive ? "scale-y-100 opacity-100" : "scale-y-0 opacity-0"
926
- )
927
- }
928
- ) }) : null,
929
- item.icon ? /* @__PURE__ */ jsx10("span", { className: "relative z-10 inline-flex shrink-0 items-center justify-center", children: item.icon }) : null,
930
- /* @__PURE__ */ jsx10("span", { className: "relative z-10 truncate whitespace-nowrap [&::first-letter]:uppercase", children: item.label })
931
- ]
932
- },
933
- item.value
934
- );
935
- }),
936
- !isBarVariant ? /* @__PURE__ */ jsx10(
937
- "span",
938
- {
939
- "aria-hidden": true,
940
- className: cn(
941
- "pointer-events-none absolute bottom-0 left-0 rounded-t-agg-sm bg-agg-primary",
942
- getMotionClassName(
943
- enableAnimations,
944
- "transition-[transform,width,opacity] duration-300 ease-in-out"
945
- ),
946
- "h-[3px]"
947
- ),
948
- style: activeUnderlineStyle
949
- }
950
- ) : null
951
- ]
952
- }
953
- ),
954
- shouldUseOverflowScroll && !isBarVariant ? /* @__PURE__ */ jsxs7(Fragment2, { children: [
955
- /* @__PURE__ */ jsx10(
956
- "span",
957
- {
958
- "aria-hidden": true,
959
- className: cn(
960
- "pointer-events-none absolute top-0 bottom-0 left-8 z-10 w-12 md:w-18 bg-linear-to-r from-agg-secondary via-agg-secondary to-transparent",
961
- getMotionClassName(enableAnimations, "transition-opacity duration-200"),
962
- scrollAffordanceState.showStart ? "opacity-100" : "opacity-0"
963
- )
964
- }
965
- ),
966
- /* @__PURE__ */ jsx10(
967
- "span",
968
- {
969
- "aria-hidden": true,
970
- className: cn(
971
- "pointer-events-none absolute top-0 right-8 bottom-0 z-10 w-12 md:w-18 bg-linear-to-l from-agg-secondary via-agg-secondary to-transparent",
972
- getMotionClassName(enableAnimations, "transition-opacity duration-200"),
973
- scrollAffordanceState.showEnd ? "opacity-100" : "opacity-0"
974
- )
975
- }
976
- )
977
- ] }) : null
978
- ]
979
- }
980
- );
981
- };
982
- Tabs.displayName = "Tabs";
983
-
984
- export {
985
- Card,
986
- baseCardClassName,
987
- detailsBaseCardClassName,
988
- eventListItemDetailsTimeRanges,
989
- lineColorByVenue,
990
- fallbackLineColors,
991
- marketDetailsBaseCardClassName,
992
- getMarketDetailsTabs,
993
- marketDetailsDefaultIsOpened,
994
- orderBookRowLimitDefault,
995
- MarketDetailsOderbookSkeleton,
996
- skeletonViews,
997
- Skeleton,
998
- Tabs
999
- };