@agg-market/ui 0.0.3 → 0.0.4

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 (140) hide show
  1. package/dist/badge.d.mts +2 -2
  2. package/dist/badge.d.ts +2 -2
  3. package/dist/badge.mjs +2 -2
  4. package/dist/button.d.mts +2 -2
  5. package/dist/button.d.ts +2 -2
  6. package/dist/button.js +1 -0
  7. package/dist/button.mjs +3 -3
  8. package/dist/card.mjs +2 -2
  9. package/dist/chart.mjs +3 -3
  10. package/dist/{chunk-YUIZZ6XE.mjs → chunk-3O4U3E5I.mjs} +1 -1
  11. package/dist/{chunk-JLLMIPIX.mjs → chunk-4VUDTWH7.mjs} +1 -1
  12. package/dist/{chunk-MG243DSX.mjs → chunk-AEMAY3MR.mjs} +1 -1
  13. package/dist/{chunk-FYV3MDIL.mjs → chunk-BJNHDIDW.mjs} +4 -4
  14. package/dist/{chunk-LY6474C4.mjs → chunk-BLSHXIAH.mjs} +36 -71
  15. package/dist/{chunk-DQ6XFBYJ.mjs → chunk-DYEWXEEY.mjs} +1 -1
  16. package/dist/{chunk-OUOIDPGX.mjs → chunk-EXF4SESB.mjs} +1 -1
  17. package/dist/chunk-F236MLT6.mjs +1337 -0
  18. package/dist/{chunk-PAQ542ER.mjs → chunk-GHB3GOCW.mjs} +4 -2
  19. package/dist/{chunk-GC3QIIH7.mjs → chunk-GJ4U5NCE.mjs} +23 -1
  20. package/dist/chunk-HM3CGN32.mjs +669 -0
  21. package/dist/chunk-I4YUYVJJ.mjs +472 -0
  22. package/dist/{chunk-NFYS557L.mjs → chunk-JH5VMNDL.mjs} +3 -3
  23. package/dist/{chunk-TTOR7JCT.mjs → chunk-JRS2M5GY.mjs} +1 -1
  24. package/dist/{chunk-QXFDXXDB.mjs → chunk-LWTQD345.mjs} +3 -3
  25. package/dist/{chunk-QE46DVJG.mjs → chunk-MNSHWA6M.mjs} +3 -3
  26. package/dist/{chunk-JQ4FUHXE.mjs → chunk-MXBPDNMC.mjs} +7 -7
  27. package/dist/{chunk-VYNVBJK6.mjs → chunk-NDG43KGL.mjs} +1 -1
  28. package/dist/chunk-O2XH4A3G.mjs +654 -0
  29. package/dist/{chunk-KDBYDMYV.mjs → chunk-OBCHURW5.mjs} +1 -1
  30. package/dist/{chunk-FZTAHWOS.mjs → chunk-OGI343OV.mjs} +2 -2
  31. package/dist/{chunk-XDAEEJYR.mjs → chunk-P23GR7NX.mjs} +2 -2
  32. package/dist/{chunk-J6L5BLKX.mjs → chunk-PGSPYQOW.mjs} +2 -2
  33. package/dist/{chunk-J7OETCZ7.mjs → chunk-QFQHD2V6.mjs} +19 -20
  34. package/dist/chunk-RGZQHSNJ.mjs +845 -0
  35. package/dist/{chunk-7XRKA6XF.mjs → chunk-RXACBTON.mjs} +5 -5
  36. package/dist/{chunk-A4QJAOZW.mjs → chunk-USLTNDJA.mjs} +7 -7
  37. package/dist/{chunk-FACIYUNK.mjs → chunk-VC7LTPQD.mjs} +2 -2
  38. package/dist/{chunk-CKTAVEW2.mjs → chunk-VIP7HSOU.mjs} +2 -2
  39. package/dist/{chunk-5MN6ZNFA.mjs → chunk-VUDJ3PYM.mjs} +9 -9
  40. package/dist/{chunk-2NCBX6XI.mjs → chunk-W2DMBW4E.mjs} +8 -8
  41. package/dist/{chunk-764YUN2J.mjs → chunk-XELWY7SO.mjs} +150 -49
  42. package/dist/chunk-ZDF7QP4G.mjs +160 -0
  43. package/dist/{chunk-4NK2FNAG.mjs → chunk-ZHKMDK5M.mjs} +244 -112
  44. package/dist/{chunk-C4OI72SM.mjs → chunk-ZVBVGWSP.mjs} +1 -0
  45. package/dist/chunk-ZYREURXK.mjs +470 -0
  46. package/dist/connect-button.js +767 -292
  47. package/dist/connect-button.mjs +8 -8
  48. package/dist/deposit-modal.d.mts +34 -0
  49. package/dist/deposit-modal.d.ts +34 -0
  50. package/dist/deposit-modal.js +2787 -0
  51. package/dist/deposit-modal.mjs +15 -0
  52. package/dist/event-list-item-details.js +271 -173
  53. package/dist/event-list-item-details.mjs +13 -13
  54. package/dist/event-list-item.js +903 -426
  55. package/dist/event-list-item.mjs +11 -11
  56. package/dist/event-list.js +1104 -517
  57. package/dist/event-list.mjs +14 -14
  58. package/dist/event-market-page.d.mts +1 -1
  59. package/dist/event-market-page.d.ts +1 -1
  60. package/dist/event-market-page.js +1505 -681
  61. package/dist/event-market-page.mjs +23 -23
  62. package/dist/hello-world.mjs +3 -3
  63. package/dist/home-page.d.mts +1 -1
  64. package/dist/home-page.d.ts +1 -1
  65. package/dist/home-page.js +1120 -533
  66. package/dist/home-page.mjs +15 -15
  67. package/dist/icon.d.mts +74 -4
  68. package/dist/icon.d.ts +74 -4
  69. package/dist/icon.js +668 -123
  70. package/dist/icon.mjs +32 -4
  71. package/dist/index.d.mts +15 -7
  72. package/dist/index.d.ts +15 -7
  73. package/dist/index.js +5301 -2147
  74. package/dist/index.mjs +80 -32
  75. package/dist/loading-icon.d.mts +1 -1
  76. package/dist/loading-icon.d.ts +1 -1
  77. package/dist/loading-icon.js +1 -0
  78. package/dist/loading-icon.mjs +3 -3
  79. package/dist/market-details.d.mts +2 -2
  80. package/dist/market-details.d.ts +2 -2
  81. package/dist/market-details.js +1097 -411
  82. package/dist/market-details.mjs +16 -16
  83. package/dist/modal.mjs +3 -3
  84. package/dist/number-value.mjs +2 -2
  85. package/dist/onboarding-modal.js +1249 -672
  86. package/dist/onboarding-modal.mjs +8 -8
  87. package/dist/place-order.d.mts +1 -1
  88. package/dist/place-order.d.ts +1 -1
  89. package/dist/place-order.js +1091 -506
  90. package/dist/place-order.mjs +12 -12
  91. package/dist/profile-modal.d.mts +66 -0
  92. package/dist/profile-modal.d.ts +66 -0
  93. package/dist/profile-modal.js +2429 -0
  94. package/dist/profile-modal.mjs +14 -0
  95. package/dist/{registry-CVn79H3I.d.mts → registry-DfSCFAdC.d.mts} +72 -0
  96. package/dist/{registry-CVn79H3I.d.ts → registry-DfSCFAdC.d.ts} +72 -0
  97. package/dist/search.d.mts +2 -2
  98. package/dist/search.d.ts +2 -2
  99. package/dist/search.js +740 -265
  100. package/dist/search.mjs +6 -6
  101. package/dist/select.d.mts +2 -0
  102. package/dist/select.d.ts +2 -0
  103. package/dist/select.js +814 -187
  104. package/dist/select.mjs +5 -5
  105. package/dist/settlement.d.mts +1 -1
  106. package/dist/settlement.d.ts +1 -1
  107. package/dist/settlement.js +891 -417
  108. package/dist/settlement.mjs +9 -9
  109. package/dist/skeleton.js +1 -1
  110. package/dist/skeleton.mjs +3 -3
  111. package/dist/styles.css +1 -1
  112. package/dist/switch-button.mjs +2 -2
  113. package/dist/tabs.js +854 -227
  114. package/dist/tabs.mjs +6 -6
  115. package/dist/tailwind.css +1 -1
  116. package/dist/types-Bed6Q0EK.d.mts +3 -0
  117. package/dist/types-Bed6Q0EK.d.ts +3 -0
  118. package/dist/typography.mjs +2 -2
  119. package/dist/user-profile-page.d.mts +133 -0
  120. package/dist/user-profile-page.d.ts +133 -0
  121. package/dist/user-profile-page.js +3335 -0
  122. package/dist/user-profile-page.mjs +15 -0
  123. package/dist/venue-logo.d.mts +2 -2
  124. package/dist/venue-logo.d.ts +2 -2
  125. package/dist/venue-logo.js +28 -70
  126. package/dist/venue-logo.mjs +2 -2
  127. package/dist/{venue-logo.types-Bg8eXtGp.d.ts → venue-logo.types-BSAuY84j.d.ts} +1 -1
  128. package/dist/{venue-logo.types-B1iPJgiD.d.mts → venue-logo.types-DACqcTvY.d.mts} +1 -1
  129. package/dist/withdraw-modal.d.mts +36 -0
  130. package/dist/withdraw-modal.d.ts +36 -0
  131. package/dist/withdraw-modal.js +2442 -0
  132. package/dist/withdraw-modal.mjs +14 -0
  133. package/package.json +43 -3
  134. package/dist/chunk-DA6KZWSK.mjs +0 -807
  135. package/dist/chunk-IY2AA3OL.mjs +0 -50
  136. package/dist/chunk-R3DRVI4J.mjs +0 -741
  137. package/dist/types-CayJ8tWA.d.mts +0 -3
  138. package/dist/types-CayJ8tWA.d.ts +0 -3
  139. package/dist/{types-C5JigCSX.d.mts → types-DkGlbmXq.d.mts} +2 -2
  140. package/dist/{types-C5JigCSX.d.ts → types-DkGlbmXq.d.ts} +2 -2
@@ -0,0 +1,669 @@
1
+ import {
2
+ Modal
3
+ } from "./chunk-VIP7HSOU.mjs";
4
+ import {
5
+ Select
6
+ } from "./chunk-ZDF7QP4G.mjs";
7
+ import {
8
+ VenueLogo,
9
+ venueLogoLabels
10
+ } from "./chunk-BLSHXIAH.mjs";
11
+ import {
12
+ BoltIcon,
13
+ ChevronLeftIcon,
14
+ ChevronRightIcon,
15
+ CopyIcon,
16
+ CreditCardIcon,
17
+ ExternalLinkIcon,
18
+ WarningFilledIcon
19
+ } from "./chunk-F236MLT6.mjs";
20
+ import {
21
+ Button
22
+ } from "./chunk-PGSPYQOW.mjs";
23
+ import {
24
+ cn,
25
+ formatAmountDisplay,
26
+ formatCompactUsd
27
+ } from "./chunk-GJ4U5NCE.mjs";
28
+
29
+ // src/deposit/index.tsx
30
+ import { useState as useState3 } from "react";
31
+
32
+ // src/deposit/deposit-modal.constants.ts
33
+ var KALSHI_VENUE = "kalshi";
34
+ var KALSHI_DEPOSIT_URL_DEFAULT = "https://kalshi.com/account/deposit";
35
+
36
+ // src/deposit/steps/venue-selection.tsx
37
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
+ var VenueRow = ({ venue, onSelect }) => {
39
+ var _a;
40
+ const displayName = (_a = venueLogoLabels[venue.venue]) != null ? _a : venue.venue;
41
+ const hasShortfall = venue.shortfall != null && venue.shortfall > 0;
42
+ return /* @__PURE__ */ jsxs(
43
+ "div",
44
+ {
45
+ className: cn(
46
+ "flex items-center gap-3 sm:gap-4",
47
+ "rounded-xl border border-separator",
48
+ "p-3 sm:p-4",
49
+ "hover:bg-secondary-hover transition-colors cursor-pointer"
50
+ ),
51
+ role: "button",
52
+ tabIndex: 0,
53
+ onClick: () => onSelect(venue.venue),
54
+ onKeyDown: (e) => {
55
+ if (e.key === "Enter" || e.key === " ") {
56
+ e.preventDefault();
57
+ onSelect(venue.venue);
58
+ }
59
+ },
60
+ children: [
61
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", children: /* @__PURE__ */ jsx(VenueLogo, { venue: venue.venue, size: "xl", className: "rounded-lg" }) }),
62
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
63
+ /* @__PURE__ */ jsx("p", { className: "text-base font-bold text-foreground leading-6", children: displayName }),
64
+ /* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground leading-5", children: [
65
+ "Balance ",
66
+ formatCompactUsd(venue.balance)
67
+ ] })
68
+ ] }),
69
+ hasShortfall ? /* @__PURE__ */ jsxs("div", { className: "hidden sm:flex items-center gap-1.5 shrink-0", children: [
70
+ /* @__PURE__ */ jsx(WarningFilledIcon, { className: "h-4 w-4 text-warning" }),
71
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-bold text-warning whitespace-nowrap", children: [
72
+ "Short ",
73
+ formatCompactUsd(venue.shortfall)
74
+ ] })
75
+ ] }) : null,
76
+ /* @__PURE__ */ jsx("div", { className: "shrink-0", children: /* @__PURE__ */ jsx(
77
+ Button,
78
+ {
79
+ variant: "secondary",
80
+ size: "s",
81
+ suffix: /* @__PURE__ */ jsx(ChevronRightIcon, {}),
82
+ onClick: (e) => {
83
+ e.stopPropagation();
84
+ onSelect(venue.venue);
85
+ },
86
+ children: hasShortfall ? "Continue" : "Select"
87
+ }
88
+ ) })
89
+ ]
90
+ }
91
+ );
92
+ };
93
+ var VenueSelectionStep = ({
94
+ venues,
95
+ hasAnyShortfall,
96
+ onSelectVenue
97
+ }) => /* @__PURE__ */ jsxs(Fragment, { children: [
98
+ /* @__PURE__ */ jsx(Modal.Header, { title: "Deposit", hideBorder: true }),
99
+ /* @__PURE__ */ jsx(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
100
+ !hasAnyShortfall ? /* @__PURE__ */ jsx("p", { className: "text-base text-foreground leading-6", children: "Choose where to deposit funds:" }) : null,
101
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-3", children: venues.map((venue) => /* @__PURE__ */ jsx(VenueRow, { venue, onSelect: onSelectVenue }, venue.venue)) })
102
+ ] }) })
103
+ ] });
104
+
105
+ // src/deposit/steps/deposit-method.tsx
106
+ import { Fragment as Fragment2, jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
107
+ var DepositMethodCard = ({
108
+ icon,
109
+ title,
110
+ description,
111
+ onContinue
112
+ }) => /* @__PURE__ */ jsxs2(
113
+ "div",
114
+ {
115
+ className: cn(
116
+ "flex items-center gap-3 sm:gap-4",
117
+ "rounded-xl border border-separator",
118
+ "p-3 sm:p-4",
119
+ "hover:bg-secondary-hover transition-colors cursor-pointer"
120
+ ),
121
+ role: "button",
122
+ tabIndex: 0,
123
+ onClick: onContinue,
124
+ onKeyDown: (e) => {
125
+ if (e.key === "Enter" || e.key === " ") {
126
+ e.preventDefault();
127
+ onContinue();
128
+ }
129
+ },
130
+ children: [
131
+ /* @__PURE__ */ jsx2("div", { className: "shrink-0 flex items-center justify-center h-10 w-10 rounded-lg bg-secondary-hover", children: icon }),
132
+ /* @__PURE__ */ jsxs2("div", { className: "flex-1 min-w-0", children: [
133
+ /* @__PURE__ */ jsx2("p", { className: "text-base font-bold text-foreground leading-6", children: title }),
134
+ /* @__PURE__ */ jsx2("p", { className: "text-sm text-muted-foreground leading-5", children: description })
135
+ ] }),
136
+ /* @__PURE__ */ jsx2("div", { className: "shrink-0", children: /* @__PURE__ */ jsx2(
137
+ Button,
138
+ {
139
+ variant: "secondary",
140
+ size: "s",
141
+ suffix: /* @__PURE__ */ jsx2(ChevronRightIcon, {}),
142
+ onClick: (e) => {
143
+ e.stopPropagation();
144
+ onContinue();
145
+ },
146
+ children: "Continue"
147
+ }
148
+ ) })
149
+ ]
150
+ }
151
+ );
152
+ var DepositMethodStep = ({
153
+ venue,
154
+ onBack,
155
+ onSelectMethod
156
+ }) => {
157
+ var _a;
158
+ const displayName = (_a = venueLogoLabels[venue.venue]) != null ? _a : venue.venue;
159
+ return /* @__PURE__ */ jsxs2(Fragment2, { children: [
160
+ /* @__PURE__ */ jsx2(
161
+ Modal.Header,
162
+ {
163
+ title: `Deposit to ${displayName}`,
164
+ hideBorder: true,
165
+ leftElement: /* @__PURE__ */ jsx2(
166
+ "button",
167
+ {
168
+ type: "button",
169
+ className: "flex items-center justify-center text-foreground hover:text-foreground/80 transition-colors hover:cursor-pointer mr-2",
170
+ onClick: onBack,
171
+ "aria-label": "Go back",
172
+ children: /* @__PURE__ */ jsx2(ChevronLeftIcon, { className: "h-6 w-6" })
173
+ }
174
+ )
175
+ }
176
+ ),
177
+ /* @__PURE__ */ jsx2(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-4", children: [
178
+ /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
179
+ /* @__PURE__ */ jsx2(VenueLogo, { venue: venue.venue, size: "xs", className: "rounded-sm" }),
180
+ /* @__PURE__ */ jsxs2("p", { className: "text-sm text-muted-foreground leading-5", children: [
181
+ displayName,
182
+ " balance: ",
183
+ formatCompactUsd(venue.balance)
184
+ ] })
185
+ ] }),
186
+ /* @__PURE__ */ jsxs2("div", { className: "flex flex-col gap-3", children: [
187
+ /* @__PURE__ */ jsx2(
188
+ DepositMethodCard,
189
+ {
190
+ icon: /* @__PURE__ */ jsx2(BoltIcon, { className: "h-6 w-6 text-foreground" }),
191
+ title: "Transfer Crypto",
192
+ description: "Send USDC from your blockchain wallet.",
193
+ onContinue: () => onSelectMethod("crypto")
194
+ }
195
+ ),
196
+ /* @__PURE__ */ jsx2(
197
+ DepositMethodCard,
198
+ {
199
+ icon: /* @__PURE__ */ jsx2(CreditCardIcon, { className: "h-6 w-6 text-foreground" }),
200
+ title: "Deposit with Card",
201
+ description: "Buy USDC instantly with a debit or credit card.",
202
+ onContinue: () => onSelectMethod("card")
203
+ }
204
+ )
205
+ ] })
206
+ ] }) })
207
+ ] });
208
+ };
209
+
210
+ // src/deposit/steps/card-deposit.tsx
211
+ import { useCallback, useState } from "react";
212
+ import { Fragment as Fragment3, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
213
+ var CardDepositStep = ({
214
+ venue,
215
+ onBack,
216
+ onContinue
217
+ }) => {
218
+ var _a;
219
+ const [rawAmount, setRawAmount] = useState("");
220
+ const displayName = (_a = venueLogoLabels[venue.venue]) != null ? _a : venue.venue;
221
+ const numericAmount = Number(rawAmount) || 0;
222
+ const isValid = numericAmount > 0;
223
+ const handleAmountChange = useCallback((e) => {
224
+ const v = e.target.value.replace(/[^0-9.]/g, "");
225
+ const parts = v.split(".");
226
+ const sanitized = parts.length > 2 ? `${parts[0]}.${parts.slice(1).join("")}` : v;
227
+ setRawAmount(sanitized);
228
+ }, []);
229
+ return /* @__PURE__ */ jsxs3(Fragment3, { children: [
230
+ /* @__PURE__ */ jsx3(
231
+ Modal.Header,
232
+ {
233
+ title: `Deposit to ${displayName}`,
234
+ hideBorder: true,
235
+ leftElement: /* @__PURE__ */ jsx3(
236
+ "button",
237
+ {
238
+ type: "button",
239
+ className: "flex items-center justify-center text-foreground hover:text-foreground/80 transition-colors hover:cursor-pointer mr-2",
240
+ onClick: onBack,
241
+ "aria-label": "Go back",
242
+ children: /* @__PURE__ */ jsx3(ChevronLeftIcon, { className: "h-6 w-6" })
243
+ }
244
+ )
245
+ }
246
+ ),
247
+ /* @__PURE__ */ jsx3(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-6", children: [
248
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
249
+ /* @__PURE__ */ jsx3(VenueLogo, { venue: venue.venue, size: "xs", className: "rounded-sm" }),
250
+ /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground leading-5", children: [
251
+ displayName,
252
+ " balance: ",
253
+ formatCompactUsd(venue.balance)
254
+ ] })
255
+ ] }),
256
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-3", children: [
257
+ /* @__PURE__ */ jsx3("div", { className: "shrink-0", children: /* @__PURE__ */ jsx3(
258
+ Select,
259
+ {
260
+ items: [{ value: "USD", label: "USD" }],
261
+ value: "USD",
262
+ onChange: () => {
263
+ },
264
+ ariaLabel: "Currency",
265
+ className: "w-auto"
266
+ }
267
+ ) }),
268
+ /* @__PURE__ */ jsx3("div", { className: "flex-1 min-w-0", children: /* @__PURE__ */ jsxs3("div", { className: "flex items-baseline", children: [
269
+ /* @__PURE__ */ jsx3("span", { className: "text-3xl sm:text-4xl font-bold text-foreground leading-none", children: "$" }),
270
+ /* @__PURE__ */ jsx3(
271
+ "input",
272
+ {
273
+ type: "text",
274
+ inputMode: "decimal",
275
+ "aria-label": "Amount",
276
+ className: cn(
277
+ "w-full bg-transparent text-3xl sm:text-4xl font-bold leading-none outline-none",
278
+ isValid ? "text-foreground" : "text-muted-foreground"
279
+ ),
280
+ placeholder: "0",
281
+ value: rawAmount ? formatAmountDisplay(rawAmount) : "",
282
+ onChange: handleAmountChange
283
+ }
284
+ )
285
+ ] }) })
286
+ ] }),
287
+ /* @__PURE__ */ jsxs3(
288
+ "div",
289
+ {
290
+ className: cn(
291
+ "flex items-center gap-3",
292
+ "rounded-xl border border-separator",
293
+ "p-3 sm:p-4",
294
+ "hover:bg-secondary-hover transition-colors cursor-pointer"
295
+ ),
296
+ role: "button",
297
+ tabIndex: 0,
298
+ children: [
299
+ /* @__PURE__ */ jsxs3("div", { className: "flex-1 min-w-0", children: [
300
+ /* @__PURE__ */ jsx3("p", { className: "text-base font-bold text-foreground leading-6", children: "Provider" }),
301
+ /* @__PURE__ */ jsx3("p", { className: "text-sm text-muted-foreground leading-5", children: "Auto-picked for you" })
302
+ ] }),
303
+ /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2 shrink-0", children: [
304
+ /* @__PURE__ */ jsx3("span", { className: "text-sm font-bold text-foreground", children: "Swapped" }),
305
+ /* @__PURE__ */ jsx3(ChevronRightIcon, { className: "h-4 w-4 text-foreground" })
306
+ ] })
307
+ ]
308
+ }
309
+ ),
310
+ /* @__PURE__ */ jsx3(
311
+ Button,
312
+ {
313
+ variant: "primary",
314
+ size: "xl",
315
+ className: "w-full",
316
+ disabled: !isValid,
317
+ onClick: () => onContinue(numericAmount),
318
+ children: "Continue"
319
+ }
320
+ )
321
+ ] }) })
322
+ ] });
323
+ };
324
+
325
+ // src/deposit/steps/crypto-transfer.tsx
326
+ import { useCallback as useCallback2, useMemo, useState as useState2 } from "react";
327
+
328
+ // src/shared/constants.ts
329
+ var USDC = {
330
+ value: "USDC",
331
+ label: "USDC",
332
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/usdc.svg"
333
+ };
334
+ var SUPPORTED_NETWORKS = [
335
+ {
336
+ value: "base",
337
+ label: "Base",
338
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/chains/base/colored.svg",
339
+ tokens: [USDC]
340
+ },
341
+ {
342
+ value: "mainnet",
343
+ label: "Ethereum Mainnet",
344
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/chains/eth/colored.svg",
345
+ tokens: [USDC]
346
+ },
347
+ {
348
+ value: "polygon",
349
+ label: "Polygon Mainnet",
350
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/chains/polygon/colored.svg",
351
+ tokens: [USDC]
352
+ },
353
+ {
354
+ value: "solana",
355
+ label: "Solana",
356
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/chains/solana/dark.svg",
357
+ tokens: [USDC]
358
+ },
359
+ {
360
+ value: "zksync",
361
+ label: "zkSync Era",
362
+ iconUrl: "https://assets.snagsolutions.io/public/web/icons/chains/zksync/colored.svg",
363
+ tokens: [USDC]
364
+ }
365
+ ];
366
+ var getTokensForNetwork = (networkValue) => {
367
+ var _a;
368
+ const network = SUPPORTED_NETWORKS.find((n) => n.value === networkValue);
369
+ return (_a = network == null ? void 0 : network.tokens) != null ? _a : [];
370
+ };
371
+
372
+ // src/deposit/steps/crypto-transfer.tsx
373
+ import { Fragment as Fragment4, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
374
+ var CryptoTransferStep = ({
375
+ venue,
376
+ onBack,
377
+ onDone
378
+ }) => {
379
+ var _a, _b, _c, _d, _e;
380
+ const displayName = (_a = venueLogoLabels[venue.venue]) != null ? _a : venue.venue;
381
+ const defaultNetwork = (_c = (_b = SUPPORTED_NETWORKS[0]) == null ? void 0 : _b.value) != null ? _c : "";
382
+ const [selectedNetwork, setSelectedNetwork] = useState2(defaultNetwork);
383
+ const tokenItems = useMemo(() => {
384
+ const tokens = getTokensForNetwork(selectedNetwork);
385
+ return tokens.map((t) => ({
386
+ value: t.value,
387
+ label: t.label,
388
+ iconUrl: t.iconUrl
389
+ }));
390
+ }, [selectedNetwork]);
391
+ const [selectedToken, setSelectedToken] = useState2((_e = (_d = tokenItems[0]) == null ? void 0 : _d.value) != null ? _e : "");
392
+ const networkItems = useMemo(
393
+ () => SUPPORTED_NETWORKS.map((n) => ({
394
+ value: n.value,
395
+ label: n.label,
396
+ iconUrl: n.iconUrl
397
+ })),
398
+ []
399
+ );
400
+ const handleNetworkChange = useCallback2((networkValue) => {
401
+ var _a2, _b2;
402
+ setSelectedNetwork(networkValue);
403
+ const tokens = getTokensForNetwork(networkValue);
404
+ setSelectedToken((_b2 = (_a2 = tokens[0]) == null ? void 0 : _a2.value) != null ? _b2 : "");
405
+ }, []);
406
+ const depositAddress = "82nbtQamxV3KPZtyRMXjrQ4xwQJMRcXn2PYmpfQyq5UK";
407
+ const handleCopyAddress = useCallback2(() => {
408
+ void navigator.clipboard.writeText(depositAddress);
409
+ }, [depositAddress]);
410
+ return /* @__PURE__ */ jsxs4(Fragment4, { children: [
411
+ /* @__PURE__ */ jsx4(
412
+ Modal.Header,
413
+ {
414
+ title: `Deposit to ${displayName}`,
415
+ hideBorder: true,
416
+ leftElement: /* @__PURE__ */ jsx4(
417
+ "button",
418
+ {
419
+ type: "button",
420
+ className: "flex items-center justify-center text-foreground hover:text-foreground/80 transition-colors hover:cursor-pointer mr-2",
421
+ onClick: onBack,
422
+ "aria-label": "Go back",
423
+ children: /* @__PURE__ */ jsx4(ChevronLeftIcon, { className: "h-6 w-6" })
424
+ }
425
+ )
426
+ }
427
+ ),
428
+ /* @__PURE__ */ jsx4(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-7", children: [
429
+ /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-5", children: [
430
+ /* @__PURE__ */ jsxs4("div", { className: "flex gap-6", children: [
431
+ /* @__PURE__ */ jsxs4("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
432
+ /* @__PURE__ */ jsx4("p", { className: "text-sm font-bold text-foreground leading-5", children: "Supported token" }),
433
+ /* @__PURE__ */ jsx4(
434
+ Select,
435
+ {
436
+ items: tokenItems,
437
+ value: selectedToken,
438
+ onChange: setSelectedToken,
439
+ ariaLabel: "Supported token"
440
+ }
441
+ )
442
+ ] }),
443
+ /* @__PURE__ */ jsxs4("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
444
+ /* @__PURE__ */ jsx4("p", { className: "text-sm font-bold text-foreground leading-5", children: "Supported network" }),
445
+ /* @__PURE__ */ jsx4(
446
+ Select,
447
+ {
448
+ items: networkItems,
449
+ value: selectedNetwork,
450
+ onChange: handleNetworkChange,
451
+ ariaLabel: "Supported network"
452
+ }
453
+ )
454
+ ] })
455
+ ] }),
456
+ /* @__PURE__ */ jsxs4("div", { className: "flex flex-col gap-2", children: [
457
+ /* @__PURE__ */ jsx4("p", { className: "text-sm font-bold text-foreground leading-5", children: "Your deposit address" }),
458
+ /* @__PURE__ */ jsxs4(
459
+ "div",
460
+ {
461
+ className: cn(
462
+ "flex items-center gap-2",
463
+ "rounded border border-separator bg-secondary",
464
+ "h-10 px-3"
465
+ ),
466
+ children: [
467
+ /* @__PURE__ */ jsx4("p", { className: "flex-1 min-w-0 text-base text-foreground leading-6 truncate", children: depositAddress }),
468
+ /* @__PURE__ */ jsx4(
469
+ "button",
470
+ {
471
+ type: "button",
472
+ className: "shrink-0 text-muted-foreground hover:text-foreground transition-colors",
473
+ onClick: handleCopyAddress,
474
+ "aria-label": "Copy deposit address",
475
+ children: /* @__PURE__ */ jsx4(CopyIcon, { className: "h-4 w-4" })
476
+ }
477
+ )
478
+ ]
479
+ }
480
+ )
481
+ ] })
482
+ ] }),
483
+ /* @__PURE__ */ jsx4(Button, { variant: "secondary", size: "xl", className: "w-full", onClick: onDone, children: "Done" })
484
+ ] }) })
485
+ ] });
486
+ };
487
+
488
+ // src/deposit/steps/kalshi-deposit.tsx
489
+ import { Fragment as Fragment5, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
490
+ var KalshiStepCard = ({
491
+ step,
492
+ title,
493
+ description,
494
+ children
495
+ }) => /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-2 rounded-xl bg-secondary-hover p-4", children: [
496
+ /* @__PURE__ */ jsxs5("p", { className: "text-xs font-bold uppercase leading-4 text-muted-foreground", children: [
497
+ "Step ",
498
+ step
499
+ ] }),
500
+ /* @__PURE__ */ jsxs5("div", { className: "flex flex-col gap-1", children: [
501
+ /* @__PURE__ */ jsx5("p", { className: "text-sm font-bold text-foreground leading-5", children: title }),
502
+ /* @__PURE__ */ jsx5("p", { className: "text-sm text-foreground leading-5", children: description })
503
+ ] }),
504
+ children
505
+ ] });
506
+ var KalshiDepositStep = ({ depositUrl, onDone }) => /* @__PURE__ */ jsxs5(Fragment5, { children: [
507
+ /* @__PURE__ */ jsx5(Modal.Header, { title: "", hideBorder: true }),
508
+ /* @__PURE__ */ jsx5(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs5("div", { className: "flex flex-col items-center gap-8", children: [
509
+ /* @__PURE__ */ jsx5(
510
+ VenueLogo,
511
+ {
512
+ venue: "kalshi",
513
+ size: "xl",
514
+ className: "h-[60px] w-[60px] rounded-lg"
515
+ }
516
+ ),
517
+ /* @__PURE__ */ jsxs5("div", { className: "flex flex-col items-center gap-4 text-center", children: [
518
+ /* @__PURE__ */ jsx5("h2", { className: "text-2xl font-bold text-foreground leading-8", children: "Fund Your Kalshi Account" }),
519
+ /* @__PURE__ */ jsx5("p", { className: "text-base text-foreground leading-6", children: "To trade on Kalshi you'll need to add funds to your Kalshi balance first. You can do this on Kalshi's site." })
520
+ ] }),
521
+ /* @__PURE__ */ jsxs5("div", { className: "flex w-full flex-col gap-4", children: [
522
+ /* @__PURE__ */ jsx5(
523
+ KalshiStepCard,
524
+ {
525
+ step: 1,
526
+ title: "Open Kalshi Deposit Page",
527
+ description: "Sign in to your Kalshi account and go to Deposit (Add Funds) from your account menu.",
528
+ children: /* @__PURE__ */ jsx5("div", { className: "mt-1", children: /* @__PURE__ */ jsx5(
529
+ Button,
530
+ {
531
+ variant: "secondary",
532
+ size: "s",
533
+ suffix: /* @__PURE__ */ jsx5(ExternalLinkIcon, { className: "h-3.5 w-3.5" }),
534
+ onClick: () => {
535
+ window.open(depositUrl, "_blank", "noopener,noreferrer");
536
+ },
537
+ children: "Open Kalshi"
538
+ }
539
+ ) })
540
+ }
541
+ ),
542
+ /* @__PURE__ */ jsx5(
543
+ KalshiStepCard,
544
+ {
545
+ step: 2,
546
+ title: "Choose a Funding Method",
547
+ description: "Select a deposit method: Bank transfer (ACH), Debit card, Wire, or USDC (crypto)."
548
+ }
549
+ ),
550
+ /* @__PURE__ */ jsx5(
551
+ KalshiStepCard,
552
+ {
553
+ step: 3,
554
+ title: "Complete Your Deposit",
555
+ description: "Follow the on-screen instructions to confirm your deposit. Funds may arrive instantly (card/crypto) or within a few business days (ACH/wire)."
556
+ }
557
+ )
558
+ ] }),
559
+ /* @__PURE__ */ jsx5(Button, { variant: "secondary", size: "l", onClick: onDone, children: "Done" })
560
+ ] }) })
561
+ ] });
562
+
563
+ // src/deposit/index.tsx
564
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
565
+ var DepositModal = ({
566
+ open,
567
+ onOpenChange,
568
+ venues,
569
+ onSelectVenue,
570
+ onSelectDepositMethod,
571
+ onContinueCardDeposit,
572
+ onDoneCryptoTransfer,
573
+ onDoneKalshi,
574
+ kalshiDepositUrl = KALSHI_DEPOSIT_URL_DEFAULT
575
+ }) => {
576
+ const [step, setStep] = useState3("venues");
577
+ const [selectedVenue, setSelectedVenue] = useState3(null);
578
+ const hasAnyShortfall = venues.some((v) => v.shortfall != null && v.shortfall > 0);
579
+ const handleSelectVenue = (venueSlug) => {
580
+ onSelectVenue(venueSlug);
581
+ if (venueSlug === KALSHI_VENUE) {
582
+ setStep("kalshi");
583
+ return;
584
+ }
585
+ const venueData = venues.find((v) => v.venue === venueSlug);
586
+ if (venueData) {
587
+ setSelectedVenue(venueData);
588
+ setStep("method");
589
+ }
590
+ };
591
+ const handleBackToVenues = () => {
592
+ setStep("venues");
593
+ setSelectedVenue(null);
594
+ };
595
+ const handleBackToMethod = () => {
596
+ setStep("method");
597
+ };
598
+ const handleSelectMethod = (method) => {
599
+ if (!selectedVenue)
600
+ return;
601
+ if (method === "card") {
602
+ setStep("card-deposit");
603
+ } else {
604
+ setStep("crypto-transfer");
605
+ onSelectDepositMethod == null ? void 0 : onSelectDepositMethod(selectedVenue.venue, method);
606
+ }
607
+ };
608
+ const handleContinueCardDeposit = (amount) => {
609
+ if (selectedVenue) {
610
+ onContinueCardDeposit == null ? void 0 : onContinueCardDeposit(selectedVenue.venue, amount);
611
+ }
612
+ };
613
+ const handleDoneCryptoTransfer = () => {
614
+ if (selectedVenue) {
615
+ onDoneCryptoTransfer == null ? void 0 : onDoneCryptoTransfer(selectedVenue.venue);
616
+ }
617
+ };
618
+ const handleDoneKalshi = () => {
619
+ onDoneKalshi == null ? void 0 : onDoneKalshi();
620
+ onOpenChange(false);
621
+ };
622
+ const handleOpenChange = (isOpen) => {
623
+ if (!isOpen) {
624
+ setStep("venues");
625
+ setSelectedVenue(null);
626
+ }
627
+ onOpenChange(isOpen);
628
+ };
629
+ return /* @__PURE__ */ jsx6(Modal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs6(Modal.Container, { maxWidth: "600px", "aria-label": "Deposit", children: [
630
+ step === "venues" ? /* @__PURE__ */ jsx6(
631
+ VenueSelectionStep,
632
+ {
633
+ venues,
634
+ hasAnyShortfall,
635
+ onSelectVenue: handleSelectVenue
636
+ }
637
+ ) : null,
638
+ step === "method" && selectedVenue ? /* @__PURE__ */ jsx6(
639
+ DepositMethodStep,
640
+ {
641
+ venue: selectedVenue,
642
+ onBack: handleBackToVenues,
643
+ onSelectMethod: handleSelectMethod
644
+ }
645
+ ) : null,
646
+ step === "card-deposit" && selectedVenue ? /* @__PURE__ */ jsx6(
647
+ CardDepositStep,
648
+ {
649
+ venue: selectedVenue,
650
+ onBack: handleBackToMethod,
651
+ onContinue: handleContinueCardDeposit
652
+ }
653
+ ) : null,
654
+ step === "crypto-transfer" && selectedVenue ? /* @__PURE__ */ jsx6(
655
+ CryptoTransferStep,
656
+ {
657
+ venue: selectedVenue,
658
+ onBack: handleBackToMethod,
659
+ onDone: handleDoneCryptoTransfer
660
+ }
661
+ ) : null,
662
+ step === "kalshi" ? /* @__PURE__ */ jsx6(KalshiDepositStep, { depositUrl: kalshiDepositUrl, onDone: handleDoneKalshi }) : null
663
+ ] }) });
664
+ };
665
+ DepositModal.displayName = "DepositModal";
666
+
667
+ export {
668
+ DepositModal
669
+ };