@agg-market/ui 0.0.1

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 (192) hide show
  1. package/dist/badge.d.mts +26 -0
  2. package/dist/badge.d.ts +26 -0
  3. package/dist/badge.js +70 -0
  4. package/dist/badge.mjs +9 -0
  5. package/dist/button.d.mts +20 -0
  6. package/dist/button.d.ts +20 -0
  7. package/dist/button.js +197 -0
  8. package/dist/button.mjs +8 -0
  9. package/dist/card.d.mts +8 -0
  10. package/dist/card.d.ts +8 -0
  11. package/dist/card.js +84 -0
  12. package/dist/card.mjs +7 -0
  13. package/dist/chart.d.mts +40 -0
  14. package/dist/chart.d.ts +40 -0
  15. package/dist/chart.js +418 -0
  16. package/dist/chart.mjs +8 -0
  17. package/dist/chunk-2PGUPOXY.mjs +285 -0
  18. package/dist/chunk-3DV3D2LH.mjs +155 -0
  19. package/dist/chunk-44UEI6KD.mjs +280 -0
  20. package/dist/chunk-4ADCXJE6.mjs +297 -0
  21. package/dist/chunk-4GSXVVSA.mjs +64 -0
  22. package/dist/chunk-4NK2FNAG.mjs +581 -0
  23. package/dist/chunk-4XWCYUV3.mjs +355 -0
  24. package/dist/chunk-5MN6ZNFA.mjs +355 -0
  25. package/dist/chunk-6RRBINER.mjs +50 -0
  26. package/dist/chunk-765JPQDG.mjs +280 -0
  27. package/dist/chunk-7CD7GIZC.mjs +850 -0
  28. package/dist/chunk-7XRKA6XF.mjs +462 -0
  29. package/dist/chunk-AOFP74IB.mjs +850 -0
  30. package/dist/chunk-BNDFQPHF.mjs +9 -0
  31. package/dist/chunk-C4OI72SM.mjs +14 -0
  32. package/dist/chunk-CB2MLGCJ.mjs +279 -0
  33. package/dist/chunk-CKTAVEW2.mjs +212 -0
  34. package/dist/chunk-DA6KZWSK.mjs +807 -0
  35. package/dist/chunk-DBD5GHHD.mjs +147 -0
  36. package/dist/chunk-DQ6XFBYJ.mjs +37 -0
  37. package/dist/chunk-FACIYUNK.mjs +217 -0
  38. package/dist/chunk-FUJQIYOF.mjs +37 -0
  39. package/dist/chunk-FZTAHWOS.mjs +82 -0
  40. package/dist/chunk-GC3QIIH7.mjs +112 -0
  41. package/dist/chunk-GPBLZGJ2.mjs +136 -0
  42. package/dist/chunk-H4LELROL.mjs +262 -0
  43. package/dist/chunk-H7P6DIX4.mjs +262 -0
  44. package/dist/chunk-H7YEBGYY.mjs +42 -0
  45. package/dist/chunk-HJOBAMDU.mjs +142 -0
  46. package/dist/chunk-IJG5I642.mjs +462 -0
  47. package/dist/chunk-IY2AA3OL.mjs +50 -0
  48. package/dist/chunk-J6L5BLKX.mjs +136 -0
  49. package/dist/chunk-J7OETCZ7.mjs +147 -0
  50. package/dist/chunk-JLLMIPIX.mjs +42 -0
  51. package/dist/chunk-KBRLFTJT.mjs +741 -0
  52. package/dist/chunk-KDBYDMYV.mjs +64 -0
  53. package/dist/chunk-L6E6Q4C4.mjs +217 -0
  54. package/dist/chunk-LY6474C4.mjs +297 -0
  55. package/dist/chunk-M23S2DVV.mjs +581 -0
  56. package/dist/chunk-MG243DSX.mjs +44 -0
  57. package/dist/chunk-MRHSN2B7.mjs +279 -0
  58. package/dist/chunk-MXWRCVRJ.mjs +285 -0
  59. package/dist/chunk-NFYS557L.mjs +481 -0
  60. package/dist/chunk-NNSY462N.mjs +212 -0
  61. package/dist/chunk-OUOIDPGX.mjs +25 -0
  62. package/dist/chunk-P5PFQX75.mjs +31 -0
  63. package/dist/chunk-P674XRDY.mjs +481 -0
  64. package/dist/chunk-PAQ542ER.mjs +170 -0
  65. package/dist/chunk-QE46DVJG.mjs +323 -0
  66. package/dist/chunk-QXFDXXDB.mjs +792 -0
  67. package/dist/chunk-R3DRVI4J.mjs +741 -0
  68. package/dist/chunk-TTOR7JCT.mjs +155 -0
  69. package/dist/chunk-V5WIYMKS.mjs +25 -0
  70. package/dist/chunk-VAZE267Q.mjs +82 -0
  71. package/dist/chunk-VLIJ7PQK.mjs +792 -0
  72. package/dist/chunk-VYNVBJK6.mjs +44 -0
  73. package/dist/chunk-WIWJ6DIE.mjs +323 -0
  74. package/dist/chunk-XDAEEJYR.mjs +142 -0
  75. package/dist/chunk-YUIZZ6XE.mjs +31 -0
  76. package/dist/connect-button.d.mts +40 -0
  77. package/dist/connect-button.d.ts +40 -0
  78. package/dist/connect-button.js +1815 -0
  79. package/dist/connect-button.mjs +14 -0
  80. package/dist/event-list-item-details.d.mts +11 -0
  81. package/dist/event-list-item-details.d.ts +11 -0
  82. package/dist/event-list-item-details.js +2140 -0
  83. package/dist/event-list-item-details.mjs +19 -0
  84. package/dist/event-list-item-details.types-CMbXOrT-.d.ts +53 -0
  85. package/dist/event-list-item-details.types-CxWr4Qn1.d.ts +53 -0
  86. package/dist/event-list-item-details.types-DRi99PZq.d.mts +53 -0
  87. package/dist/event-list-item-details.types-DekJKeMD.d.mts +53 -0
  88. package/dist/event-list-item.d.mts +10 -0
  89. package/dist/event-list-item.d.ts +10 -0
  90. package/dist/event-list-item.js +2097 -0
  91. package/dist/event-list-item.mjs +17 -0
  92. package/dist/event-list-item.types-B1490EQm.d.mts +46 -0
  93. package/dist/event-list-item.types-B1490EQm.d.ts +46 -0
  94. package/dist/event-list-item.types-Y6IeJ4e4.d.mts +46 -0
  95. package/dist/event-list-item.types-Y6IeJ4e4.d.ts +46 -0
  96. package/dist/event-list.d.mts +9 -0
  97. package/dist/event-list.d.ts +9 -0
  98. package/dist/event-list.js +3151 -0
  99. package/dist/event-list.mjs +20 -0
  100. package/dist/event-list.types-Bpp6Vn-t.d.mts +13 -0
  101. package/dist/event-list.types-Bpp6Vn-t.d.ts +13 -0
  102. package/dist/event-list.types-CkAAUqwW.d.mts +13 -0
  103. package/dist/event-list.types-CkAAUqwW.d.ts +13 -0
  104. package/dist/event-market-page.d.mts +52 -0
  105. package/dist/event-market-page.d.ts +52 -0
  106. package/dist/event-market-page.js +5369 -0
  107. package/dist/event-market-page.mjs +29 -0
  108. package/dist/hello-world.d.mts +8 -0
  109. package/dist/hello-world.d.ts +8 -0
  110. package/dist/hello-world.js +80 -0
  111. package/dist/hello-world.mjs +8 -0
  112. package/dist/home-page.d.mts +51 -0
  113. package/dist/home-page.d.ts +51 -0
  114. package/dist/home-page.js +3415 -0
  115. package/dist/home-page.mjs +21 -0
  116. package/dist/icon.d.mts +123 -0
  117. package/dist/icon.d.ts +123 -0
  118. package/dist/icon.js +922 -0
  119. package/dist/icon.mjs +57 -0
  120. package/dist/index.d.mts +70 -0
  121. package/dist/index.d.ts +70 -0
  122. package/dist/index.js +8184 -0
  123. package/dist/index.mjs +307 -0
  124. package/dist/loading-icon.d.mts +14 -0
  125. package/dist/loading-icon.d.ts +14 -0
  126. package/dist/loading-icon.js +115 -0
  127. package/dist/loading-icon.mjs +8 -0
  128. package/dist/market-details.d.mts +73 -0
  129. package/dist/market-details.d.ts +73 -0
  130. package/dist/market-details.js +3923 -0
  131. package/dist/market-details.mjs +22 -0
  132. package/dist/modal.d.mts +66 -0
  133. package/dist/modal.d.ts +66 -0
  134. package/dist/modal.js +317 -0
  135. package/dist/modal.mjs +9 -0
  136. package/dist/number-value.d.mts +14 -0
  137. package/dist/number-value.d.ts +14 -0
  138. package/dist/number-value.js +67 -0
  139. package/dist/number-value.mjs +7 -0
  140. package/dist/onboarding-modal.d.mts +88 -0
  141. package/dist/onboarding-modal.d.ts +88 -0
  142. package/dist/onboarding-modal.js +2242 -0
  143. package/dist/onboarding-modal.mjs +24 -0
  144. package/dist/place-order.d.mts +20 -0
  145. package/dist/place-order.d.ts +20 -0
  146. package/dist/place-order.js +2916 -0
  147. package/dist/place-order.mjs +18 -0
  148. package/dist/registry-CVn79H3I.d.mts +106 -0
  149. package/dist/registry-CVn79H3I.d.ts +106 -0
  150. package/dist/search.d.mts +69 -0
  151. package/dist/search.d.ts +69 -0
  152. package/dist/search.js +1465 -0
  153. package/dist/search.mjs +12 -0
  154. package/dist/select.d.mts +19 -0
  155. package/dist/select.d.ts +19 -0
  156. package/dist/select.js +920 -0
  157. package/dist/select.mjs +11 -0
  158. package/dist/settlement.d.mts +16 -0
  159. package/dist/settlement.d.ts +16 -0
  160. package/dist/settlement.js +1769 -0
  161. package/dist/settlement.mjs +15 -0
  162. package/dist/skeleton.d.mts +22 -0
  163. package/dist/skeleton.d.ts +22 -0
  164. package/dist/skeleton.js +523 -0
  165. package/dist/skeleton.mjs +10 -0
  166. package/dist/styles.css +2 -0
  167. package/dist/switch-button.d.mts +21 -0
  168. package/dist/switch-button.d.ts +21 -0
  169. package/dist/switch-button.js +184 -0
  170. package/dist/switch-button.mjs +7 -0
  171. package/dist/tabs.d.mts +27 -0
  172. package/dist/tabs.d.ts +27 -0
  173. package/dist/tabs.js +1708 -0
  174. package/dist/tabs.mjs +12 -0
  175. package/dist/tailwind.css +2 -0
  176. package/dist/types-8VUuQVZq.d.mts +387 -0
  177. package/dist/types-8VUuQVZq.d.ts +387 -0
  178. package/dist/types-CayJ8tWA.d.mts +3 -0
  179. package/dist/types-CayJ8tWA.d.ts +3 -0
  180. package/dist/typography.d.mts +16 -0
  181. package/dist/typography.d.ts +16 -0
  182. package/dist/typography.js +62 -0
  183. package/dist/typography.mjs +7 -0
  184. package/dist/venue-logo.d.mts +12 -0
  185. package/dist/venue-logo.d.ts +12 -0
  186. package/dist/venue-logo.js +350 -0
  187. package/dist/venue-logo.mjs +10 -0
  188. package/dist/venue-logo.types-4hmCg3D3.d.ts +17 -0
  189. package/dist/venue-logo.types-B1iPJgiD.d.mts +17 -0
  190. package/dist/venue-logo.types-Bg8eXtGp.d.ts +17 -0
  191. package/dist/venue-logo.types-QNDwiQ77.d.mts +17 -0
  192. package/package.json +195 -0
@@ -0,0 +1,285 @@
1
+ import {
2
+ Settlement
3
+ } from "./chunk-J7OETCZ7.mjs";
4
+ import {
5
+ PlaceOrder
6
+ } from "./chunk-5MN6ZNFA.mjs";
7
+ import {
8
+ EventListItemDetails
9
+ } from "./chunk-4NK2FNAG.mjs";
10
+ import {
11
+ MarketDetails
12
+ } from "./chunk-7CD7GIZC.mjs";
13
+ import {
14
+ Typography
15
+ } from "./chunk-DQ6XFBYJ.mjs";
16
+ import {
17
+ Card
18
+ } from "./chunk-YUIZZ6XE.mjs";
19
+ import {
20
+ __spreadProps,
21
+ __spreadValues,
22
+ cn
23
+ } from "./chunk-GC3QIIH7.mjs";
24
+
25
+ // src/pages/event-market/index.tsx
26
+ import { useEffect, useMemo, useState } from "react";
27
+ import { useEvent, useLabels } from "@agg-market/hooks";
28
+ import dayjs from "dayjs";
29
+ import { jsx, jsxs } from "react/jsx-runtime";
30
+ var getMarketDateValue = (market, fallbackIndex) => {
31
+ var _a, _b, _c;
32
+ const candidateDate = (_c = (_b = (_a = market.endDate) != null ? _a : market.startDate) != null ? _b : market.creationDate) != null ? _c : null;
33
+ if (!candidateDate)
34
+ return Number.MAX_SAFE_INTEGER - 1 + fallbackIndex;
35
+ const parsedDate = dayjs(candidateDate);
36
+ if (!parsedDate.isValid()) {
37
+ return Number.MAX_SAFE_INTEGER - 1 + fallbackIndex;
38
+ }
39
+ return parsedDate.valueOf();
40
+ };
41
+ var resolveHeroMarketId = (event, heroMarketId) => {
42
+ var _a, _b;
43
+ if (!((_a = event == null ? void 0 : event.markets) == null ? void 0 : _a.length))
44
+ return void 0;
45
+ if (heroMarketId) {
46
+ const matchingHeroMarket = event.markets.find((market) => market.id === heroMarketId);
47
+ if (matchingHeroMarket)
48
+ return matchingHeroMarket.id;
49
+ }
50
+ return (_b = event.markets[0]) == null ? void 0 : _b.id;
51
+ };
52
+ var buildHeroEvent = (event, heroMarketId) => {
53
+ if (!heroMarketId)
54
+ return void 0;
55
+ const heroMarket = event.markets.find((market) => market.id === heroMarketId);
56
+ if (!heroMarket)
57
+ return void 0;
58
+ return __spreadProps(__spreadValues({}, event), {
59
+ markets: [heroMarket]
60
+ });
61
+ };
62
+ var resolveDetailedMarkets = (event, heroMarketId) => {
63
+ return event.markets.filter((market) => market.id !== heroMarketId).map((market, index) => ({
64
+ market,
65
+ index
66
+ })).sort((leftItem, rightItem) => {
67
+ return getMarketDateValue(leftItem.market, leftItem.index) - getMarketDateValue(rightItem.market, rightItem.index);
68
+ }).map((item) => item.market);
69
+ };
70
+ var resolveInitialExpandedMarketId = (detailedMarkets, defaultExpandedMarketId) => {
71
+ var _a, _b;
72
+ if (!detailedMarkets.length)
73
+ return null;
74
+ if (defaultExpandedMarketId) {
75
+ const matchingMarket = detailedMarkets.find((market) => market.id === defaultExpandedMarketId);
76
+ if (matchingMarket)
77
+ return matchingMarket.id;
78
+ }
79
+ return (_b = (_a = detailedMarkets[0]) == null ? void 0 : _a.id) != null ? _b : null;
80
+ };
81
+ var EventMarketPageUnavailableState = ({
82
+ ariaLabel
83
+ }) => {
84
+ const labels = useLabels();
85
+ return /* @__PURE__ */ jsx(
86
+ Card,
87
+ {
88
+ className: "rounded-agg-xl border border-agg-separator bg-agg-secondary p-6 shadow-none hover:shadow-none",
89
+ role: "status",
90
+ "aria-label": ariaLabel != null ? ariaLabel : labels.eventMarketPage.unavailableAria,
91
+ children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
92
+ /* @__PURE__ */ jsx(Typography, { variant: "title", children: labels.eventMarketPage.unavailableTitle }),
93
+ /* @__PURE__ */ jsx(Typography, { variant: "meta", children: labels.eventMarketPage.unavailableDescription })
94
+ ] })
95
+ }
96
+ );
97
+ };
98
+ var EventMarketPageLoadingState = ({
99
+ placeOrder,
100
+ settlement,
101
+ classNames
102
+ }) => {
103
+ const labels = useLabels();
104
+ const fallbackSettlement = settlement != null ? settlement : {
105
+ sectionLabel: labels.trading.settlementSection,
106
+ question: labels.eventMarketPage.loadingSettlementQuestion,
107
+ differencesTitle: labels.eventMarketPage.loadingSettlementDifferencesTitle,
108
+ differences: [labels.eventMarketPage.loadingSettlementPlaceholder],
109
+ venues: [
110
+ {
111
+ venue: "polymarket",
112
+ description: labels.eventMarketPage.loadingSettlementPlaceholder
113
+ }
114
+ ]
115
+ };
116
+ return /* @__PURE__ */ jsx("section", { className: cn("w-full", classNames == null ? void 0 : classNames.root), children: /* @__PURE__ */ jsxs(
117
+ "div",
118
+ {
119
+ className: cn(
120
+ "mx-auto flex w-full max-w-[1200px] flex-col gap-6 px-3 py-3 md:px-6 md:py-6 lg:flex-row lg:items-start lg:gap-8",
121
+ classNames == null ? void 0 : classNames.content
122
+ ),
123
+ children: [
124
+ /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-1 flex-col gap-6", classNames == null ? void 0 : classNames.main), children: [
125
+ /* @__PURE__ */ jsx(
126
+ EventListItemDetails,
127
+ {
128
+ isLoading: true,
129
+ classNames: {
130
+ root: classNames == null ? void 0 : classNames.hero
131
+ }
132
+ }
133
+ ),
134
+ /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.markets), children: [
135
+ /* @__PURE__ */ jsx(MarketDetails, { isLoading: true, isOpened: true, classNames: { root: "w-full" } }),
136
+ /* @__PURE__ */ jsx(MarketDetails, { isLoading: true, isOpened: false, classNames: { root: "w-full" } }),
137
+ /* @__PURE__ */ jsx(MarketDetails, { isLoading: true, isOpened: false, classNames: { root: "w-full" } })
138
+ ] }),
139
+ /* @__PURE__ */ jsx("div", { className: "md:hidden", children: /* @__PURE__ */ jsx(Settlement, __spreadProps(__spreadValues({}, fallbackSettlement), { isLoading: true, className: classNames == null ? void 0 : classNames.settlement })) }),
140
+ /* @__PURE__ */ jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx(Settlement, __spreadProps(__spreadValues({}, fallbackSettlement), { isLoading: true, className: classNames == null ? void 0 : classNames.settlement })) }),
141
+ placeOrder ? /* @__PURE__ */ jsx("div", { className: "md:hidden", children: /* @__PURE__ */ jsx(PlaceOrder, __spreadProps(__spreadValues({}, placeOrder), { isLoading: true, className: classNames == null ? void 0 : classNames.mobileTrade })) }) : null
142
+ ] }),
143
+ placeOrder ? /* @__PURE__ */ jsx(
144
+ "aside",
145
+ {
146
+ className: cn(
147
+ "hidden w-full shrink-0 lg:sticky lg:top-6 lg:block lg:w-[343px]",
148
+ classNames == null ? void 0 : classNames.sidebar
149
+ ),
150
+ children: /* @__PURE__ */ jsx(PlaceOrder, __spreadProps(__spreadValues({}, placeOrder), { isLoading: true, className: classNames == null ? void 0 : classNames.trade }))
151
+ }
152
+ ) : null
153
+ ]
154
+ }
155
+ ) });
156
+ };
157
+ var EventMarketPageContent = ({
158
+ event,
159
+ heroMarketId,
160
+ defaultExpandedMarketId,
161
+ expandedMarketId,
162
+ onExpandedMarketChange,
163
+ heroDefaultTimeRange,
164
+ placeOrder,
165
+ settlement,
166
+ classNames,
167
+ ariaLabel
168
+ }) => {
169
+ const labels = useLabels();
170
+ const resolvedHeroMarketId = useMemo(() => {
171
+ return resolveHeroMarketId(event, heroMarketId);
172
+ }, [event, heroMarketId]);
173
+ const heroEvent = useMemo(() => {
174
+ return buildHeroEvent(event, resolvedHeroMarketId);
175
+ }, [event, resolvedHeroMarketId]);
176
+ const detailedMarkets = useMemo(() => {
177
+ return resolveDetailedMarkets(event, resolvedHeroMarketId);
178
+ }, [event, resolvedHeroMarketId]);
179
+ const [internalExpandedMarketId, setInternalExpandedMarketId] = useState(() => {
180
+ return resolveInitialExpandedMarketId(detailedMarkets, defaultExpandedMarketId);
181
+ });
182
+ useEffect(() => {
183
+ if (typeof expandedMarketId === "undefined")
184
+ return;
185
+ setInternalExpandedMarketId(expandedMarketId);
186
+ }, [expandedMarketId]);
187
+ useEffect(() => {
188
+ if (typeof expandedMarketId !== "undefined")
189
+ return;
190
+ setInternalExpandedMarketId((currentExpandedMarketId) => {
191
+ if (currentExpandedMarketId && detailedMarkets.some((market) => market.id === currentExpandedMarketId)) {
192
+ return currentExpandedMarketId;
193
+ }
194
+ return resolveInitialExpandedMarketId(detailedMarkets, defaultExpandedMarketId);
195
+ });
196
+ }, [defaultExpandedMarketId, detailedMarkets, expandedMarketId]);
197
+ const resolvedExpandedMarketId = typeof expandedMarketId === "undefined" ? internalExpandedMarketId : expandedMarketId;
198
+ const handleExpandedMarketChange = (marketId, isOpened) => {
199
+ const nextExpandedMarketId = isOpened ? marketId : null;
200
+ if (typeof expandedMarketId === "undefined") {
201
+ setInternalExpandedMarketId(nextExpandedMarketId);
202
+ }
203
+ onExpandedMarketChange == null ? void 0 : onExpandedMarketChange(nextExpandedMarketId);
204
+ };
205
+ if (!heroEvent || !event.markets.length) {
206
+ return /* @__PURE__ */ jsx(EventMarketPageUnavailableState, { ariaLabel });
207
+ }
208
+ return /* @__PURE__ */ jsx("section", { className: cn("w-full", classNames == null ? void 0 : classNames.root), "aria-label": ariaLabel != null ? ariaLabel : event.title, children: /* @__PURE__ */ jsxs(
209
+ "div",
210
+ {
211
+ className: cn(
212
+ "mx-auto flex w-full max-w-[1200px] flex-row gap-6 px-3 py-3 md:px-6 md:py-6 lg:flex-row lg:items-start lg:gap-8",
213
+ classNames == null ? void 0 : classNames.content
214
+ ),
215
+ children: [
216
+ /* @__PURE__ */ jsxs("div", { className: cn("flex min-w-0 flex-1 flex-col gap-6", classNames == null ? void 0 : classNames.main), children: [
217
+ /* @__PURE__ */ jsx(
218
+ EventListItemDetails,
219
+ {
220
+ event: heroEvent,
221
+ defaultTimeRange: heroDefaultTimeRange,
222
+ classNames: {
223
+ root: classNames == null ? void 0 : classNames.hero
224
+ }
225
+ }
226
+ ),
227
+ detailedMarkets.length > 0 ? /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-3", classNames == null ? void 0 : classNames.markets), children: detailedMarkets.map((market) => {
228
+ const isOpened = resolvedExpandedMarketId === market.id;
229
+ return /* @__PURE__ */ jsx(
230
+ MarketDetails,
231
+ {
232
+ event,
233
+ marketId: market.id,
234
+ isOpened,
235
+ defaultTab: "order-book",
236
+ ariaLabel: market.endDate && dayjs(market.endDate).isValid() ? labels.eventMarketPage.marketDetailsAriaByDate(
237
+ dayjs(market.endDate).format("MMM D, YYYY")
238
+ ) : labels.eventMarketPage.marketDetailsAriaByQuestion(market.question),
239
+ onOpenChange: (nextIsOpened) => handleExpandedMarketChange(market.id, nextIsOpened)
240
+ },
241
+ market.id
242
+ );
243
+ }) }) : null,
244
+ settlement ? /* @__PURE__ */ jsx("div", { className: "md:hidden", children: /* @__PURE__ */ jsx(Settlement, __spreadProps(__spreadValues({}, settlement), { className: classNames == null ? void 0 : classNames.settlement })) }) : null,
245
+ settlement ? /* @__PURE__ */ jsx("div", { className: "hidden md:block", children: /* @__PURE__ */ jsx(Settlement, __spreadProps(__spreadValues({}, settlement), { className: classNames == null ? void 0 : classNames.settlement })) }) : null
246
+ ] }),
247
+ placeOrder ? /* @__PURE__ */ jsx("aside", { className: cn("w-full lg:block lg:max-w-[360px]", classNames == null ? void 0 : classNames.sidebar), children: /* @__PURE__ */ jsx(PlaceOrder, __spreadProps(__spreadValues({}, placeOrder), { className: classNames == null ? void 0 : classNames.trade })) }) : null
248
+ ]
249
+ }
250
+ ) });
251
+ };
252
+ var EventMarketPage = (props) => {
253
+ const hasEventProp = "event" in props && !!props.event;
254
+ const { event: fetchedEvent, isLoading: isFetchingEvent } = useEvent(
255
+ hasEventProp ? void 0 : props.eventId,
256
+ {
257
+ enabled: !props.isLoading && !hasEventProp && !!props.eventId
258
+ }
259
+ );
260
+ if (props.isLoading) {
261
+ return /* @__PURE__ */ jsx(EventMarketPageLoadingState, { placeOrder: props.placeOrder, settlement: props.settlement });
262
+ }
263
+ if ("event" in props && props.event) {
264
+ return /* @__PURE__ */ jsx(EventMarketPageContent, __spreadProps(__spreadValues({}, props), { event: props.event }));
265
+ }
266
+ if (isFetchingEvent) {
267
+ return /* @__PURE__ */ jsx(
268
+ EventMarketPageLoadingState,
269
+ {
270
+ placeOrder: props.placeOrder,
271
+ settlement: props.settlement,
272
+ classNames: props.classNames
273
+ }
274
+ );
275
+ }
276
+ if (!fetchedEvent) {
277
+ return /* @__PURE__ */ jsx(EventMarketPageUnavailableState, { ariaLabel: props.ariaLabel });
278
+ }
279
+ return /* @__PURE__ */ jsx(EventMarketPageContent, __spreadProps(__spreadValues({}, props), { event: fetchedEvent }));
280
+ };
281
+ EventMarketPage.displayName = "EventMarketPage";
282
+
283
+ export {
284
+ EventMarketPage
285
+ };
@@ -0,0 +1,155 @@
1
+ import {
2
+ cn,
3
+ getMotionClassName
4
+ } from "./chunk-GC3QIIH7.mjs";
5
+
6
+ // src/primitives/switch-button/index.tsx
7
+ import { useEffect, useMemo, useState } from "react";
8
+ import { useSdkUiConfig } from "@agg/hooks";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ var resolveActiveIndex = (options, value) => {
11
+ const activeIndex = options.findIndex((option) => option.value === value);
12
+ if (activeIndex >= 0)
13
+ return activeIndex;
14
+ return 0;
15
+ };
16
+ var resolveNextEnabledIndex = (options, currentIndex, direction) => {
17
+ if (options.length <= 1)
18
+ return currentIndex;
19
+ const step = direction === "next" ? 1 : -1;
20
+ for (let offset = 1; offset <= options.length; offset += 1) {
21
+ const candidateIndex = (currentIndex + step * offset + options.length) % options.length;
22
+ const candidate = options[candidateIndex];
23
+ if (candidate && !candidate.disabled) {
24
+ return candidateIndex;
25
+ }
26
+ }
27
+ return currentIndex;
28
+ };
29
+ var SwitchButton = ({
30
+ options,
31
+ value,
32
+ onValueChange,
33
+ ariaLabel,
34
+ className
35
+ }) => {
36
+ const { enableAnimations } = useSdkUiConfig();
37
+ const activeIndex = useMemo(() => {
38
+ return resolveActiveIndex(options, value);
39
+ }, [options, value]);
40
+ const [isAnimating, setIsAnimating] = useState(false);
41
+ const [lastAnimatedIndex, setLastAnimatedIndex] = useState(activeIndex);
42
+ useEffect(() => {
43
+ if (lastAnimatedIndex === activeIndex) {
44
+ return;
45
+ }
46
+ setLastAnimatedIndex(activeIndex);
47
+ if (!enableAnimations) {
48
+ setIsAnimating(false);
49
+ return;
50
+ }
51
+ setIsAnimating(true);
52
+ const timeoutId = window.setTimeout(() => {
53
+ setIsAnimating(false);
54
+ }, 350);
55
+ return () => {
56
+ window.clearTimeout(timeoutId);
57
+ };
58
+ }, [activeIndex, enableAnimations, lastAnimatedIndex]);
59
+ if (options.length === 0) {
60
+ return null;
61
+ }
62
+ const handleKeyDown = (event, optionIndex) => {
63
+ if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") {
64
+ return;
65
+ }
66
+ event.preventDefault();
67
+ const nextOptionIndex = resolveNextEnabledIndex(
68
+ options,
69
+ optionIndex,
70
+ event.key === "ArrowRight" ? "next" : "previous"
71
+ );
72
+ const nextOption = options[nextOptionIndex];
73
+ if (!nextOption || nextOption.disabled) {
74
+ return;
75
+ }
76
+ onValueChange(nextOption.value);
77
+ };
78
+ return /* @__PURE__ */ jsx(
79
+ "div",
80
+ {
81
+ className: cn(
82
+ "inline-flex min-w-0 rounded-agg-full bg-agg-secondary-hover font-agg-sans",
83
+ className
84
+ ),
85
+ children: /* @__PURE__ */ jsxs(
86
+ "div",
87
+ {
88
+ className: "relative grid min-w-0 flex-1 items-center",
89
+ style: {
90
+ gridTemplateColumns: `repeat(${options.length}, minmax(0, 1fr))`
91
+ },
92
+ role: "tablist",
93
+ "aria-label": ariaLabel,
94
+ children: [
95
+ /* @__PURE__ */ jsx(
96
+ "span",
97
+ {
98
+ className: cn(
99
+ "pointer-events-none absolute inset-y-0 left-0 rounded-agg-full border-2 border-agg-primary bg-agg-secondary",
100
+ getMotionClassName(
101
+ enableAnimations,
102
+ "transition-transform duration-[450ms] ease-[cubic-bezier(0.77,0,0.175,1)]"
103
+ )
104
+ ),
105
+ style: {
106
+ width: `${100 / options.length}%`,
107
+ transform: `translateX(${activeIndex * 100}%) scaleX(${isAnimating ? 1.08 : 1})`
108
+ },
109
+ "aria-hidden": "true"
110
+ }
111
+ ),
112
+ options.map((option, optionIndex) => {
113
+ var _a;
114
+ const isActive = optionIndex === activeIndex;
115
+ return /* @__PURE__ */ jsx(
116
+ "button",
117
+ {
118
+ type: "button",
119
+ role: "tab",
120
+ "aria-selected": isActive,
121
+ "aria-label": (_a = option.ariaLabel) != null ? _a : void 0,
122
+ tabIndex: isActive ? 0 : -1,
123
+ disabled: option.disabled,
124
+ className: cn(
125
+ "relative z-10 min-w-0 rounded-agg-full px-5 py-1.5 font-agg-sans text-agg-base leading-agg-6 text-agg-foreground",
126
+ getMotionClassName(enableAnimations, "transition-colors duration-300"),
127
+ "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",
128
+ "disabled:cursor-not-allowed disabled:text-agg-muted-foreground",
129
+ isActive ? "font-agg-bold" : "font-agg-normal"
130
+ ),
131
+ onClick: () => {
132
+ if (option.disabled || isActive) {
133
+ return;
134
+ }
135
+ onValueChange(option.value);
136
+ },
137
+ onKeyDown: (event) => {
138
+ handleKeyDown(event, optionIndex);
139
+ },
140
+ children: option.label
141
+ },
142
+ option.value
143
+ );
144
+ })
145
+ ]
146
+ }
147
+ )
148
+ }
149
+ );
150
+ };
151
+ SwitchButton.displayName = "SwitchButton";
152
+
153
+ export {
154
+ SwitchButton
155
+ };