@agg-build/ui 4.26.1 → 4.27.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 (552) hide show
  1. package/dist/event-trading-state.utils-B3my25Re.mjs +789 -0
  2. package/dist/event-trading-state.utils-s4DEc4iA.js +921 -0
  3. package/dist/events.js +23 -17658
  4. package/dist/events.mjs +3 -50
  5. package/dist/index.js +811 -47152
  6. package/dist/index.mjs +584 -1204
  7. package/dist/list-D8v2SmY1.js +6989 -0
  8. package/dist/list-DD7roCVl.mjs +6838 -0
  9. package/dist/manage-betdex-account-modal-21ZVLsz0.js +2390 -0
  10. package/dist/manage-betdex-account-modal-D2vKHird.mjs +2294 -0
  11. package/dist/modals-BReGwJzz.mjs +2993 -0
  12. package/dist/modals-CSexQO1C.js +3077 -0
  13. package/dist/modals.js +24 -11810
  14. package/dist/modals.mjs +3 -49
  15. package/dist/pages-Bx4YBWDl.mjs +7850 -0
  16. package/dist/pages-CwGkaBjY.js +7959 -0
  17. package/dist/pages.js +25 -42391
  18. package/dist/pages.mjs +3 -57
  19. package/dist/primitives-CqxNeV7H.js +9930 -0
  20. package/dist/primitives-Dz5aF8ma.mjs +8928 -0
  21. package/dist/primitives.js +102 -11079
  22. package/dist/primitives.mjs +1 -204
  23. package/dist/trading-CDkNdjGx.mjs +7086 -0
  24. package/dist/trading-CXsZFd3l.js +7217 -0
  25. package/dist/trading.js +39 -18215
  26. package/dist/trading.mjs +3 -68
  27. package/dist/types/agg-provider.d.mts +1 -1
  28. package/dist/types/agg-provider.d.ts +1 -1
  29. package/dist/types/auth/connect-button-view/index.d.mts +4 -5
  30. package/dist/types/auth/connect-button-view/index.d.ts +4 -5
  31. package/dist/types/deposit/components/DepositQRCode.d.mts +2 -2
  32. package/dist/types/deposit/components/DepositQRCode.d.ts +2 -2
  33. package/dist/types/deposit/index.d.mts +4 -4
  34. package/dist/types/deposit/index.d.ts +4 -4
  35. package/dist/types/deposit/steps/card-deposit.d.mts +1 -1
  36. package/dist/types/deposit/steps/card-deposit.d.ts +1 -1
  37. package/dist/types/deposit/steps/card-payment-pending.d.mts +1 -1
  38. package/dist/types/deposit/steps/card-payment-pending.d.ts +1 -1
  39. package/dist/types/deposit/steps/card-provider.d.mts +1 -1
  40. package/dist/types/deposit/steps/card-provider.d.ts +1 -1
  41. package/dist/types/deposit/steps/card-purchase-success.d.mts +1 -1
  42. package/dist/types/deposit/steps/card-purchase-success.d.ts +1 -1
  43. package/dist/types/deposit/steps/card-widget.d.mts +1 -1
  44. package/dist/types/deposit/steps/card-widget.d.ts +1 -1
  45. package/dist/types/deposit/steps/crypto-transfer.d.mts +1 -1
  46. package/dist/types/deposit/steps/crypto-transfer.d.ts +1 -1
  47. package/dist/types/deposit/steps/deposit-method.d.mts +2 -1
  48. package/dist/types/deposit/steps/deposit-method.d.ts +2 -1
  49. package/dist/types/deposit/steps/venue-selection.d.mts +1 -1
  50. package/dist/types/deposit/steps/venue-selection.d.ts +1 -1
  51. package/dist/types/deposit/steps/wallet-form.d.mts +1 -1
  52. package/dist/types/deposit/steps/wallet-form.d.ts +1 -1
  53. package/dist/types/deposit/steps/wallet-processing.d.mts +1 -1
  54. package/dist/types/deposit/steps/wallet-processing.d.ts +1 -1
  55. package/dist/types/deposit/steps/wallet-success.d.mts +1 -1
  56. package/dist/types/deposit/steps/wallet-success.d.ts +1 -1
  57. package/dist/types/events/item/event-list-item.utils.d.mts +1 -1
  58. package/dist/types/events/item/event-list-item.utils.d.ts +1 -1
  59. package/dist/types/events/item/index.d.mts +8 -8
  60. package/dist/types/events/item/index.d.ts +8 -8
  61. package/dist/types/events/item-details/event-list-item-details-market-selector.d.mts +1 -1
  62. package/dist/types/events/item-details/event-list-item-details-market-selector.d.ts +1 -1
  63. package/dist/types/events/item-details/event-markets-chart.d.mts +1 -1
  64. package/dist/types/events/item-details/event-markets-chart.d.ts +1 -1
  65. package/dist/types/events/item-details/event-markets-chart.utils.d.mts +1 -1
  66. package/dist/types/events/item-details/event-markets-chart.utils.d.ts +1 -1
  67. package/dist/types/events/item-details/index.d.mts +4 -4
  68. package/dist/types/events/item-details/index.d.ts +4 -4
  69. package/dist/types/events/item-details/settlement-summary.d.mts +4 -4
  70. package/dist/types/events/item-details/settlement-summary.d.ts +4 -4
  71. package/dist/types/events/list/category-sidebar.d.mts +4 -4
  72. package/dist/types/events/list/category-sidebar.d.ts +4 -4
  73. package/dist/types/events/list/event-list-tabs.d.mts +4 -8
  74. package/dist/types/events/list/event-list-tabs.d.ts +4 -8
  75. package/dist/types/events/list/event-list-venue-strip.d.mts +4 -11
  76. package/dist/types/events/list/event-list-venue-strip.d.ts +4 -11
  77. package/dist/types/events/list/index.d.mts +4 -4
  78. package/dist/types/events/list/index.d.ts +4 -4
  79. package/dist/types/events/market-details/index.d.mts +8 -8
  80. package/dist/types/events/market-details/index.d.ts +8 -8
  81. package/dist/types/events/market-details/market-details-graph-panel.d.mts +4 -14
  82. package/dist/types/events/market-details/market-details-graph-panel.d.ts +4 -14
  83. package/dist/types/events/market-details/market-details-outcome-button.d.mts +4 -4
  84. package/dist/types/events/market-details/market-details-outcome-button.d.ts +4 -4
  85. package/dist/types/events/market-details/orderbook-aggregation.d.mts +3 -1
  86. package/dist/types/events/market-details/orderbook-aggregation.d.ts +3 -1
  87. package/dist/types/events/market-details/use-visible-market-streams.d.mts +1 -1
  88. package/dist/types/events/market-details/use-visible-market-streams.d.ts +1 -1
  89. package/dist/types/events/orderbook/index.d.mts +4 -4
  90. package/dist/types/events/orderbook/index.d.ts +4 -4
  91. package/dist/types/events/orderbook/orderbook-with-states.d.mts +4 -4
  92. package/dist/types/events/orderbook/orderbook-with-states.d.ts +4 -4
  93. package/dist/types/events/shared/chart-source-caption.d.mts +1 -1
  94. package/dist/types/events/shared/chart-source-caption.d.ts +1 -1
  95. package/dist/types/events/shared/sports-live-score.d.mts +4 -4
  96. package/dist/types/events/shared/sports-live-score.d.ts +4 -4
  97. package/dist/types/events/shared/use-chart-orderbook.d.mts +3 -3
  98. package/dist/types/events/shared/use-chart-orderbook.d.ts +3 -3
  99. package/dist/types/geo-block-banner/index.d.mts +4 -4
  100. package/dist/types/geo-block-banner/index.d.ts +4 -4
  101. package/dist/types/geo-block-modal/index.d.mts +4 -4
  102. package/dist/types/geo-block-modal/index.d.ts +4 -4
  103. package/dist/types/kyc/shared-kyc-modal.d.mts +4 -4
  104. package/dist/types/kyc/shared-kyc-modal.d.ts +4 -4
  105. package/dist/types/notifications/agg-notification-events-provider.d.mts +1 -1
  106. package/dist/types/notifications/agg-notification-events-provider.d.ts +1 -1
  107. package/dist/types/notifications/agg-toast-provider.d.mts +1 -1
  108. package/dist/types/notifications/agg-toast-provider.d.ts +1 -1
  109. package/dist/types/onboarding/index.d.mts +4 -4
  110. package/dist/types/onboarding/index.d.ts +4 -4
  111. package/dist/types/onboarding/steps/connect-accounts.d.mts +4 -4
  112. package/dist/types/onboarding/steps/connect-accounts.d.ts +4 -4
  113. package/dist/types/onboarding/steps/connect-kalshi-modal.d.mts +4 -4
  114. package/dist/types/onboarding/steps/connect-kalshi-modal.d.ts +4 -4
  115. package/dist/types/onboarding/steps/connect-novig-modal.d.mts +1 -1
  116. package/dist/types/onboarding/steps/connect-novig-modal.d.ts +1 -1
  117. package/dist/types/onboarding/steps/connect-onchain-modal.d.mts +4 -4
  118. package/dist/types/onboarding/steps/connect-onchain-modal.d.ts +4 -4
  119. package/dist/types/onboarding/steps/connect-prophetx-modal.d.mts +1 -1
  120. package/dist/types/onboarding/steps/connect-prophetx-modal.d.ts +1 -1
  121. package/dist/types/onboarding/steps/how-it-works.d.mts +4 -4
  122. package/dist/types/onboarding/steps/how-it-works.d.ts +4 -4
  123. package/dist/types/onboarding/steps/profile-setup.d.mts +4 -4
  124. package/dist/types/onboarding/steps/profile-setup.d.ts +4 -4
  125. package/dist/types/pages/event-market/event-market.shared.d.mts +4 -4
  126. package/dist/types/pages/event-market/event-market.shared.d.ts +4 -4
  127. package/dist/types/pages/event-market/event-market.types.d.mts +2 -0
  128. package/dist/types/pages/event-market/event-market.types.d.ts +2 -0
  129. package/dist/types/pages/event-market/event-open-orders.d.mts +8 -27
  130. package/dist/types/pages/event-market/event-open-orders.d.ts +8 -27
  131. package/dist/types/pages/event-market/index.d.mts +6 -6
  132. package/dist/types/pages/event-market/index.d.ts +6 -6
  133. package/dist/types/pages/event-market/sports-event-market-page.d.mts +6 -6
  134. package/dist/types/pages/event-market/sports-event-market-page.d.ts +6 -6
  135. package/dist/types/pages/event-market/sports-line-rail.d.mts +2 -1
  136. package/dist/types/pages/event-market/sports-line-rail.d.ts +2 -1
  137. package/dist/types/pages/event-market/sports-market-card.d.mts +4 -4
  138. package/dist/types/pages/event-market/sports-market-card.d.ts +4 -4
  139. package/dist/types/pages/event-market/sports-markets.d.mts +4 -4
  140. package/dist/types/pages/event-market/sports-markets.d.ts +4 -4
  141. package/dist/types/pages/home/index.d.mts +6 -6
  142. package/dist/types/pages/home/index.d.ts +6 -6
  143. package/dist/types/pages/leaderboard/components/leaderboard-header-row.d.mts +1 -1
  144. package/dist/types/pages/leaderboard/components/leaderboard-header-row.d.ts +1 -1
  145. package/dist/types/pages/leaderboard/components/leaderboard-row.d.mts +1 -1
  146. package/dist/types/pages/leaderboard/components/leaderboard-row.d.ts +1 -1
  147. package/dist/types/pages/leaderboard/components/leaderboard-skeleton.d.mts +1 -1
  148. package/dist/types/pages/leaderboard/components/leaderboard-skeleton.d.ts +1 -1
  149. package/dist/types/pages/leaderboard/components/segmented-control.d.mts +1 -1
  150. package/dist/types/pages/leaderboard/components/segmented-control.d.ts +1 -1
  151. package/dist/types/pages/leaderboard/index.d.mts +1 -1
  152. package/dist/types/pages/leaderboard/index.d.ts +1 -1
  153. package/dist/types/pages/user-profile/components/activity-row.d.mts +4 -4
  154. package/dist/types/pages/user-profile/components/activity-row.d.ts +4 -4
  155. package/dist/types/pages/user-profile/components/available-balance-card.d.mts +4 -4
  156. package/dist/types/pages/user-profile/components/available-balance-card.d.ts +4 -4
  157. package/dist/types/pages/user-profile/components/balance-display.d.mts +4 -4
  158. package/dist/types/pages/user-profile/components/balance-display.d.ts +4 -4
  159. package/dist/types/pages/user-profile/components/balances-card.d.mts +4 -4
  160. package/dist/types/pages/user-profile/components/balances-card.d.ts +4 -4
  161. package/dist/types/pages/user-profile/components/betdex-account-activity.d.mts +1 -1
  162. package/dist/types/pages/user-profile/components/betdex-account-activity.d.ts +1 -1
  163. package/dist/types/pages/user-profile/components/betdex-account-card.d.mts +1 -1
  164. package/dist/types/pages/user-profile/components/betdex-account-card.d.ts +1 -1
  165. package/dist/types/pages/user-profile/components/betdex-account-transfers.d.mts +1 -1
  166. package/dist/types/pages/user-profile/components/betdex-account-transfers.d.ts +1 -1
  167. package/dist/types/pages/user-profile/components/betdex-wallet-deposit.d.mts +1 -1
  168. package/dist/types/pages/user-profile/components/betdex-wallet-deposit.d.ts +1 -1
  169. package/dist/types/pages/user-profile/components/claim-activity-breakdown-modal.d.mts +1 -1
  170. package/dist/types/pages/user-profile/components/claim-activity-breakdown-modal.d.ts +1 -1
  171. package/dist/types/pages/user-profile/components/empty-state.d.mts +4 -4
  172. package/dist/types/pages/user-profile/components/empty-state.d.ts +4 -4
  173. package/dist/types/pages/user-profile/components/manage-balances-modal.d.mts +4 -4
  174. package/dist/types/pages/user-profile/components/manage-balances-modal.d.ts +4 -4
  175. package/dist/types/pages/user-profile/components/open-order-row.d.mts +4 -4
  176. package/dist/types/pages/user-profile/components/open-order-row.d.ts +4 -4
  177. package/dist/types/pages/user-profile/components/position-row.d.mts +4 -4
  178. package/dist/types/pages/user-profile/components/position-row.d.ts +4 -4
  179. package/dist/types/pages/user-profile/components/positions-activity.d.mts +4 -4
  180. package/dist/types/pages/user-profile/components/positions-activity.d.ts +4 -4
  181. package/dist/types/pages/user-profile/components/positions-value-card.d.mts +4 -4
  182. package/dist/types/pages/user-profile/components/positions-value-card.d.ts +4 -4
  183. package/dist/types/pages/user-profile/components/user-info-card.d.mts +4 -4
  184. package/dist/types/pages/user-profile/components/user-info-card.d.ts +4 -4
  185. package/dist/types/pages/user-profile/index.d.mts +6 -6
  186. package/dist/types/pages/user-profile/index.d.ts +6 -6
  187. package/dist/types/paper-trading/paper-onboarding-modal.d.mts +4 -14
  188. package/dist/types/paper-trading/paper-onboarding-modal.d.ts +4 -14
  189. package/dist/types/paper-trading/paper-trading-badge.d.mts +4 -16
  190. package/dist/types/paper-trading/paper-trading-badge.d.ts +4 -16
  191. package/dist/types/paper-trading/paper-trading-onboarding.d.mts +4 -12
  192. package/dist/types/paper-trading/paper-trading-onboarding.d.ts +4 -12
  193. package/dist/types/primitives/agg-logo/agg-logo.utils.d.mts +1 -1
  194. package/dist/types/primitives/agg-logo/agg-logo.utils.d.ts +1 -1
  195. package/dist/types/primitives/agg-logo/index.d.mts +4 -5
  196. package/dist/types/primitives/agg-logo/index.d.ts +4 -5
  197. package/dist/types/primitives/autocomplete-select/index.d.mts +4 -5
  198. package/dist/types/primitives/autocomplete-select/index.d.ts +4 -5
  199. package/dist/types/primitives/badge/index.d.mts +1 -1
  200. package/dist/types/primitives/badge/index.d.ts +1 -1
  201. package/dist/types/primitives/button/button.types.d.mts +2 -2
  202. package/dist/types/primitives/button/button.types.d.ts +2 -2
  203. package/dist/types/primitives/button/index.d.mts +4 -5
  204. package/dist/types/primitives/button/index.d.ts +4 -5
  205. package/dist/types/primitives/calendar/index.d.mts +4 -4
  206. package/dist/types/primitives/calendar/index.d.ts +4 -4
  207. package/dist/types/primitives/card/index.d.mts +4 -5
  208. package/dist/types/primitives/card/index.d.ts +4 -5
  209. package/dist/types/primitives/chart/chart-type-switch.d.mts +4 -5
  210. package/dist/types/primitives/chart/chart-type-switch.d.ts +4 -5
  211. package/dist/types/primitives/chart/index.d.mts +4 -5
  212. package/dist/types/primitives/chart/index.d.ts +4 -5
  213. package/dist/types/primitives/chart/probability-chart.d.mts +2 -2
  214. package/dist/types/primitives/chart/probability-chart.d.ts +2 -2
  215. package/dist/types/primitives/chart/probability-live-tail.d.mts +1 -1
  216. package/dist/types/primitives/chart/probability-live-tail.d.ts +1 -1
  217. package/dist/types/primitives/conditional-wrapper.d.mts +6 -7
  218. package/dist/types/primitives/conditional-wrapper.d.ts +6 -7
  219. package/dist/types/primitives/copy-button/index.d.mts +4 -5
  220. package/dist/types/primitives/copy-button/index.d.ts +4 -5
  221. package/dist/types/primitives/currency-input/index.d.mts +4 -5
  222. package/dist/types/primitives/currency-input/index.d.ts +4 -5
  223. package/dist/types/primitives/footer/agg-build-logo.d.mts +12 -15
  224. package/dist/types/primitives/footer/agg-build-logo.d.ts +12 -15
  225. package/dist/types/primitives/footer/index.d.mts +4 -6
  226. package/dist/types/primitives/footer/index.d.ts +4 -6
  227. package/dist/types/primitives/header/index.d.mts +4 -6
  228. package/dist/types/primitives/header/index.d.ts +4 -6
  229. package/dist/types/primitives/icon/index.d.mts +4 -5
  230. package/dist/types/primitives/icon/index.d.ts +4 -5
  231. package/dist/types/primitives/icon/registry.d.mts +180 -351
  232. package/dist/types/primitives/icon/registry.d.ts +180 -351
  233. package/dist/types/primitives/icon/svg/activity-chart.d.mts +4 -4
  234. package/dist/types/primitives/icon/svg/activity-chart.d.ts +4 -4
  235. package/dist/types/primitives/icon/svg/activity.d.mts +4 -4
  236. package/dist/types/primitives/icon/svg/activity.d.ts +4 -4
  237. package/dist/types/primitives/icon/svg/apple.d.mts +4 -4
  238. package/dist/types/primitives/icon/svg/apple.d.ts +4 -4
  239. package/dist/types/primitives/icon/svg/apps.d.mts +4 -4
  240. package/dist/types/primitives/icon/svg/apps.d.ts +4 -4
  241. package/dist/types/primitives/icon/svg/arbitrum.d.mts +4 -4
  242. package/dist/types/primitives/icon/svg/arbitrum.d.ts +4 -4
  243. package/dist/types/primitives/icon/svg/arrow-right.d.mts +4 -4
  244. package/dist/types/primitives/icon/svg/arrow-right.d.ts +4 -4
  245. package/dist/types/primitives/icon/svg/arrow-trend-up.d.mts +4 -4
  246. package/dist/types/primitives/icon/svg/arrow-trend-up.d.ts +4 -4
  247. package/dist/types/primitives/icon/svg/arrows-to-dot.d.mts +4 -4
  248. package/dist/types/primitives/icon/svg/arrows-to-dot.d.ts +4 -4
  249. package/dist/types/primitives/icon/svg/badge-check-thin.d.mts +4 -4
  250. package/dist/types/primitives/icon/svg/badge-check-thin.d.ts +4 -4
  251. package/dist/types/primitives/icon/svg/bank.d.mts +4 -4
  252. package/dist/types/primitives/icon/svg/bank.d.ts +4 -4
  253. package/dist/types/primitives/icon/svg/base.d.mts +4 -4
  254. package/dist/types/primitives/icon/svg/base.d.ts +4 -4
  255. package/dist/types/primitives/icon/svg/best-prices.d.mts +4 -4
  256. package/dist/types/primitives/icon/svg/best-prices.d.ts +4 -4
  257. package/dist/types/primitives/icon/svg/bnb.d.mts +4 -4
  258. package/dist/types/primitives/icon/svg/bnb.d.ts +4 -4
  259. package/dist/types/primitives/icon/svg/bolt.d.mts +4 -4
  260. package/dist/types/primitives/icon/svg/bolt.d.ts +4 -4
  261. package/dist/types/primitives/icon/svg/calendar.d.mts +1 -1
  262. package/dist/types/primitives/icon/svg/calendar.d.ts +1 -1
  263. package/dist/types/primitives/icon/svg/chart-candlestick.d.mts +4 -4
  264. package/dist/types/primitives/icon/svg/chart-candlestick.d.ts +4 -4
  265. package/dist/types/primitives/icon/svg/chart-line.d.mts +4 -4
  266. package/dist/types/primitives/icon/svg/chart-line.d.ts +4 -4
  267. package/dist/types/primitives/icon/svg/check-badge.d.mts +4 -4
  268. package/dist/types/primitives/icon/svg/check-badge.d.ts +4 -4
  269. package/dist/types/primitives/icon/svg/check-circle.d.mts +4 -4
  270. package/dist/types/primitives/icon/svg/check-circle.d.ts +4 -4
  271. package/dist/types/primitives/icon/svg/chevron-down-thin.d.mts +4 -5
  272. package/dist/types/primitives/icon/svg/chevron-down-thin.d.ts +4 -5
  273. package/dist/types/primitives/icon/svg/chevron-down.d.mts +4 -4
  274. package/dist/types/primitives/icon/svg/chevron-down.d.ts +4 -4
  275. package/dist/types/primitives/icon/svg/chevron-left.d.mts +4 -4
  276. package/dist/types/primitives/icon/svg/chevron-left.d.ts +4 -4
  277. package/dist/types/primitives/icon/svg/chevron-right.d.mts +4 -4
  278. package/dist/types/primitives/icon/svg/chevron-right.d.ts +4 -4
  279. package/dist/types/primitives/icon/svg/chevron-up.d.mts +4 -4
  280. package/dist/types/primitives/icon/svg/chevron-up.d.ts +4 -4
  281. package/dist/types/primitives/icon/svg/circle-overlap.d.mts +4 -4
  282. package/dist/types/primitives/icon/svg/circle-overlap.d.ts +4 -4
  283. package/dist/types/primitives/icon/svg/circle-xmark.d.mts +4 -4
  284. package/dist/types/primitives/icon/svg/circle-xmark.d.ts +4 -4
  285. package/dist/types/primitives/icon/svg/close.d.mts +4 -4
  286. package/dist/types/primitives/icon/svg/close.d.ts +4 -4
  287. package/dist/types/primitives/icon/svg/copy.d.mts +4 -4
  288. package/dist/types/primitives/icon/svg/copy.d.ts +4 -4
  289. package/dist/types/primitives/icon/svg/create-account.d.mts +4 -4
  290. package/dist/types/primitives/icon/svg/create-account.d.ts +4 -4
  291. package/dist/types/primitives/icon/svg/credit-card.d.mts +4 -4
  292. package/dist/types/primitives/icon/svg/credit-card.d.ts +4 -4
  293. package/dist/types/primitives/icon/svg/cross-circle.d.mts +4 -4
  294. package/dist/types/primitives/icon/svg/cross-circle.d.ts +4 -4
  295. package/dist/types/primitives/icon/svg/disconnect.d.mts +4 -4
  296. package/dist/types/primitives/icon/svg/disconnect.d.ts +4 -4
  297. package/dist/types/primitives/icon/svg/discord.d.mts +4 -4
  298. package/dist/types/primitives/icon/svg/discord.d.ts +4 -4
  299. package/dist/types/primitives/icon/svg/document.d.mts +4 -4
  300. package/dist/types/primitives/icon/svg/document.d.ts +4 -4
  301. package/dist/types/primitives/icon/svg/dots-horizontal.d.mts +4 -4
  302. package/dist/types/primitives/icon/svg/dots-horizontal.d.ts +4 -4
  303. package/dist/types/primitives/icon/svg/download.d.mts +4 -4
  304. package/dist/types/primitives/icon/svg/download.d.ts +4 -4
  305. package/dist/types/primitives/icon/svg/email.d.mts +4 -4
  306. package/dist/types/primitives/icon/svg/email.d.ts +4 -4
  307. package/dist/types/primitives/icon/svg/error-filled.d.mts +4 -4
  308. package/dist/types/primitives/icon/svg/error-filled.d.ts +4 -4
  309. package/dist/types/primitives/icon/svg/ethereum.d.mts +4 -4
  310. package/dist/types/primitives/icon/svg/ethereum.d.ts +4 -4
  311. package/dist/types/primitives/icon/svg/external-link.d.mts +4 -4
  312. package/dist/types/primitives/icon/svg/external-link.d.ts +4 -4
  313. package/dist/types/primitives/icon/svg/gift-bonus.d.mts +4 -4
  314. package/dist/types/primitives/icon/svg/gift-bonus.d.ts +4 -4
  315. package/dist/types/primitives/icon/svg/google.d.mts +4 -4
  316. package/dist/types/primitives/icon/svg/google.d.ts +4 -4
  317. package/dist/types/primitives/icon/svg/hourglass-start.d.mts +4 -4
  318. package/dist/types/primitives/icon/svg/hourglass-start.d.ts +4 -4
  319. package/dist/types/primitives/icon/svg/image.d.mts +4 -4
  320. package/dist/types/primitives/icon/svg/image.d.ts +4 -4
  321. package/dist/types/primitives/icon/svg/info.d.mts +4 -4
  322. package/dist/types/primitives/icon/svg/info.d.ts +4 -4
  323. package/dist/types/primitives/icon/svg/internet-security.d.mts +4 -4
  324. package/dist/types/primitives/icon/svg/internet-security.d.ts +4 -4
  325. package/dist/types/primitives/icon/svg/link-accounts.d.mts +4 -4
  326. package/dist/types/primitives/icon/svg/link-accounts.d.ts +4 -4
  327. package/dist/types/primitives/icon/svg/lock.d.mts +4 -4
  328. package/dist/types/primitives/icon/svg/lock.d.ts +4 -4
  329. package/dist/types/primitives/icon/svg/minus.d.mts +1 -1
  330. package/dist/types/primitives/icon/svg/minus.d.ts +1 -1
  331. package/dist/types/primitives/icon/svg/paper-buying-power.d.mts +4 -10
  332. package/dist/types/primitives/icon/svg/paper-buying-power.d.ts +4 -10
  333. package/dist/types/primitives/icon/svg/paper-earnings.d.mts +4 -10
  334. package/dist/types/primitives/icon/svg/paper-earnings.d.ts +4 -10
  335. package/dist/types/primitives/icon/svg/paper-mode.d.mts +4 -4
  336. package/dist/types/primitives/icon/svg/paper-mode.d.ts +4 -4
  337. package/dist/types/primitives/icon/svg/paper-onboarding-funds.d.mts +4 -11
  338. package/dist/types/primitives/icon/svg/paper-onboarding-funds.d.ts +4 -11
  339. package/dist/types/primitives/icon/svg/paper-onboarding-markets.d.mts +4 -11
  340. package/dist/types/primitives/icon/svg/paper-onboarding-markets.d.ts +4 -11
  341. package/dist/types/primitives/icon/svg/paper-onboarding-performance.d.mts +4 -11
  342. package/dist/types/primitives/icon/svg/paper-onboarding-performance.d.ts +4 -11
  343. package/dist/types/primitives/icon/svg/paper-plane.d.mts +4 -4
  344. package/dist/types/primitives/icon/svg/paper-plane.d.ts +4 -4
  345. package/dist/types/primitives/icon/svg/pencil.d.mts +4 -4
  346. package/dist/types/primitives/icon/svg/pencil.d.ts +4 -4
  347. package/dist/types/primitives/icon/svg/play-square.d.mts +4 -4
  348. package/dist/types/primitives/icon/svg/play-square.d.ts +4 -4
  349. package/dist/types/primitives/icon/svg/plus.d.mts +1 -1
  350. package/dist/types/primitives/icon/svg/plus.d.ts +1 -1
  351. package/dist/types/primitives/icon/svg/polygon.d.mts +4 -4
  352. package/dist/types/primitives/icon/svg/polygon.d.ts +4 -4
  353. package/dist/types/primitives/icon/svg/profile-about-tab.d.mts +4 -5
  354. package/dist/types/primitives/icon/svg/profile-about-tab.d.ts +4 -5
  355. package/dist/types/primitives/icon/svg/profile-accounts-wallets-tab.d.mts +4 -5
  356. package/dist/types/primitives/icon/svg/profile-accounts-wallets-tab.d.ts +4 -5
  357. package/dist/types/primitives/icon/svg/profile.d.mts +4 -4
  358. package/dist/types/primitives/icon/svg/profile.d.ts +4 -4
  359. package/dist/types/primitives/icon/svg/quotes-warning.d.mts +4 -5
  360. package/dist/types/primitives/icon/svg/quotes-warning.d.ts +4 -5
  361. package/dist/types/primitives/icon/svg/recenter.d.mts +4 -4
  362. package/dist/types/primitives/icon/svg/recenter.d.ts +4 -4
  363. package/dist/types/primitives/icon/svg/revenue-alt.d.mts +4 -4
  364. package/dist/types/primitives/icon/svg/revenue-alt.d.ts +4 -4
  365. package/dist/types/primitives/icon/svg/search.d.mts +4 -4
  366. package/dist/types/primitives/icon/svg/search.d.ts +4 -4
  367. package/dist/types/primitives/icon/svg/shield-trust.d.mts +4 -4
  368. package/dist/types/primitives/icon/svg/shield-trust.d.ts +4 -4
  369. package/dist/types/primitives/icon/svg/solana.d.mts +4 -4
  370. package/dist/types/primitives/icon/svg/solana.d.ts +4 -4
  371. package/dist/types/primitives/icon/svg/sort-end-date.d.mts +4 -4
  372. package/dist/types/primitives/icon/svg/sort-end-date.d.ts +4 -4
  373. package/dist/types/primitives/icon/svg/sort-top-arbitrage.d.mts +4 -4
  374. package/dist/types/primitives/icon/svg/sort-top-arbitrage.d.ts +4 -4
  375. package/dist/types/primitives/icon/svg/sort-volume-24hr.d.mts +4 -4
  376. package/dist/types/primitives/icon/svg/sort-volume-24hr.d.ts +4 -4
  377. package/dist/types/primitives/icon/svg/sort-volume.d.mts +4 -4
  378. package/dist/types/primitives/icon/svg/sort-volume.d.ts +4 -4
  379. package/dist/types/primitives/icon/svg/sparkles-filled.d.mts +4 -4
  380. package/dist/types/primitives/icon/svg/sparkles-filled.d.ts +4 -4
  381. package/dist/types/primitives/icon/svg/spinner.d.mts +4 -4
  382. package/dist/types/primitives/icon/svg/spinner.d.ts +4 -4
  383. package/dist/types/primitives/icon/svg/stay-in-control.d.mts +4 -4
  384. package/dist/types/primitives/icon/svg/stay-in-control.d.ts +4 -4
  385. package/dist/types/primitives/icon/svg/success-check.d.mts +4 -4
  386. package/dist/types/primitives/icon/svg/success-check.d.ts +4 -4
  387. package/dist/types/primitives/icon/svg/telegram.d.mts +4 -4
  388. package/dist/types/primitives/icon/svg/telegram.d.ts +4 -4
  389. package/dist/types/primitives/icon/svg/triangle-down.d.mts +4 -4
  390. package/dist/types/primitives/icon/svg/triangle-down.d.ts +4 -4
  391. package/dist/types/primitives/icon/svg/triangle-up-filled.d.mts +4 -4
  392. package/dist/types/primitives/icon/svg/triangle-up-filled.d.ts +4 -4
  393. package/dist/types/primitives/icon/svg/triangle-up.d.mts +4 -4
  394. package/dist/types/primitives/icon/svg/triangle-up.d.ts +4 -4
  395. package/dist/types/primitives/icon/svg/twitter.d.mts +4 -4
  396. package/dist/types/primitives/icon/svg/twitter.d.ts +4 -4
  397. package/dist/types/primitives/icon/svg/upload.d.mts +4 -4
  398. package/dist/types/primitives/icon/svg/upload.d.ts +4 -4
  399. package/dist/types/primitives/icon/svg/usdc.d.mts +4 -4
  400. package/dist/types/primitives/icon/svg/usdc.d.ts +4 -4
  401. package/dist/types/primitives/icon/svg/user-trust.d.mts +4 -4
  402. package/dist/types/primitives/icon/svg/user-trust.d.ts +4 -4
  403. package/dist/types/primitives/icon/svg/wallet-avatar.d.mts +1 -1
  404. package/dist/types/primitives/icon/svg/wallet-avatar.d.ts +1 -1
  405. package/dist/types/primitives/icon/svg/wallet-filled.d.mts +4 -4
  406. package/dist/types/primitives/icon/svg/wallet-filled.d.ts +4 -4
  407. package/dist/types/primitives/icon/svg/wallet.d.mts +4 -4
  408. package/dist/types/primitives/icon/svg/wallet.d.ts +4 -4
  409. package/dist/types/primitives/icon/svg/warning-filled.d.mts +4 -4
  410. package/dist/types/primitives/icon/svg/warning-filled.d.ts +4 -4
  411. package/dist/types/primitives/icon/svg/warning.d.mts +4 -4
  412. package/dist/types/primitives/icon/svg/warning.d.ts +4 -4
  413. package/dist/types/primitives/inline-alert/index.d.mts +4 -5
  414. package/dist/types/primitives/inline-alert/index.d.ts +4 -5
  415. package/dist/types/primitives/loading-icon/index.d.mts +4 -5
  416. package/dist/types/primitives/loading-icon/index.d.ts +4 -5
  417. package/dist/types/primitives/modal/index.d.mts +12 -9
  418. package/dist/types/primitives/modal/index.d.ts +12 -9
  419. package/dist/types/primitives/number-value.d.mts +4 -4
  420. package/dist/types/primitives/number-value.d.ts +4 -4
  421. package/dist/types/primitives/remote-image/index.d.mts +4 -5
  422. package/dist/types/primitives/remote-image/index.d.ts +4 -5
  423. package/dist/types/primitives/search/index.d.mts +4 -5
  424. package/dist/types/primitives/search/index.d.ts +4 -5
  425. package/dist/types/primitives/search/search-empty-icon.d.mts +4 -4
  426. package/dist/types/primitives/search/search-empty-icon.d.ts +4 -4
  427. package/dist/types/primitives/select/index.d.mts +4 -5
  428. package/dist/types/primitives/select/index.d.ts +4 -5
  429. package/dist/types/primitives/skeleton/index.d.mts +4 -5
  430. package/dist/types/primitives/skeleton/index.d.ts +4 -5
  431. package/dist/types/primitives/skeleton/skeleton-block.d.mts +4 -4
  432. package/dist/types/primitives/skeleton/skeleton-block.d.ts +4 -4
  433. package/dist/types/primitives/skeleton/views/event-list-item-details-skeleton-view.d.mts +4 -4
  434. package/dist/types/primitives/skeleton/views/event-list-item-details-skeleton-view.d.ts +4 -4
  435. package/dist/types/primitives/skeleton/views/event-list-item-skeleton-view.d.mts +4 -10
  436. package/dist/types/primitives/skeleton/views/event-list-item-skeleton-view.d.ts +4 -10
  437. package/dist/types/primitives/skeleton/views/event-list-skeleton-view.d.mts +4 -4
  438. package/dist/types/primitives/skeleton/views/event-list-skeleton-view.d.ts +4 -4
  439. package/dist/types/primitives/skeleton/views/market-details-skeleton-view.d.mts +5 -5
  440. package/dist/types/primitives/skeleton/views/market-details-skeleton-view.d.ts +5 -5
  441. package/dist/types/primitives/skeleton/views/place-order-skeleton-view.d.mts +8 -8
  442. package/dist/types/primitives/skeleton/views/place-order-skeleton-view.d.ts +8 -8
  443. package/dist/types/primitives/skeleton/views/search-skeleton-view.d.mts +4 -4
  444. package/dist/types/primitives/skeleton/views/search-skeleton-view.d.ts +4 -4
  445. package/dist/types/primitives/skeleton/views/settlement-skeleton-view.d.mts +4 -4
  446. package/dist/types/primitives/skeleton/views/settlement-skeleton-view.d.ts +4 -4
  447. package/dist/types/primitives/skeleton/views/user-profile-overview-skeleton-view.d.mts +4 -4
  448. package/dist/types/primitives/skeleton/views/user-profile-overview-skeleton-view.d.ts +4 -4
  449. package/dist/types/primitives/skeleton/views/user-profile-positions-activity-skeleton-view.d.mts +4 -4
  450. package/dist/types/primitives/skeleton/views/user-profile-positions-activity-skeleton-view.d.ts +4 -4
  451. package/dist/types/primitives/state-message/index.d.mts +4 -5
  452. package/dist/types/primitives/state-message/index.d.ts +4 -5
  453. package/dist/types/primitives/switch-button/index.d.mts +4 -5
  454. package/dist/types/primitives/switch-button/index.d.ts +4 -5
  455. package/dist/types/primitives/tabs/index.d.mts +4 -5
  456. package/dist/types/primitives/tabs/index.d.ts +4 -5
  457. package/dist/types/primitives/toast/index.d.mts +1 -1
  458. package/dist/types/primitives/toast/index.d.ts +1 -1
  459. package/dist/types/primitives/tooltip/index.d.mts +4 -5
  460. package/dist/types/primitives/tooltip/index.d.ts +4 -5
  461. package/dist/types/primitives/typography/index.d.mts +4 -5
  462. package/dist/types/primitives/typography/index.d.ts +4 -5
  463. package/dist/types/primitives/typography/typography.types.d.mts +1 -1
  464. package/dist/types/primitives/typography/typography.types.d.ts +1 -1
  465. package/dist/types/primitives/venue-logo/index.d.mts +4 -5
  466. package/dist/types/primitives/venue-logo/index.d.ts +4 -5
  467. package/dist/types/primitives/venue-logo/svg/default-venue.d.mts +1 -1
  468. package/dist/types/primitives/venue-logo/svg/default-venue.d.ts +1 -1
  469. package/dist/types/primitives/venue-logo/svg/logo-betdex.d.mts +1 -1
  470. package/dist/types/primitives/venue-logo/svg/logo-betdex.d.ts +1 -1
  471. package/dist/types/primitives/venue-logo/svg/logo-hyperliquid.d.mts +4 -4
  472. package/dist/types/primitives/venue-logo/svg/logo-hyperliquid.d.ts +4 -4
  473. package/dist/types/primitives/venue-logo/svg/logo-kalshi.d.mts +4 -4
  474. package/dist/types/primitives/venue-logo/svg/logo-kalshi.d.ts +4 -4
  475. package/dist/types/primitives/venue-logo/svg/logo-limitless.d.mts +4 -4
  476. package/dist/types/primitives/venue-logo/svg/logo-limitless.d.ts +4 -4
  477. package/dist/types/primitives/venue-logo/svg/logo-myriad.d.mts +4 -4
  478. package/dist/types/primitives/venue-logo/svg/logo-myriad.d.ts +4 -4
  479. package/dist/types/primitives/venue-logo/svg/logo-novig.d.mts +4 -23
  480. package/dist/types/primitives/venue-logo/svg/logo-novig.d.ts +4 -23
  481. package/dist/types/primitives/venue-logo/svg/logo-opinion.d.mts +4 -4
  482. package/dist/types/primitives/venue-logo/svg/logo-opinion.d.ts +4 -4
  483. package/dist/types/primitives/venue-logo/svg/logo-polymarket.d.mts +4 -4
  484. package/dist/types/primitives/venue-logo/svg/logo-polymarket.d.ts +4 -4
  485. package/dist/types/primitives/venue-logo/svg/logo-pred.d.mts +4 -5
  486. package/dist/types/primitives/venue-logo/svg/logo-pred.d.ts +4 -5
  487. package/dist/types/primitives/venue-logo/svg/logo-predict.d.mts +4 -4
  488. package/dist/types/primitives/venue-logo/svg/logo-predict.d.ts +4 -4
  489. package/dist/types/primitives/venue-logo/svg/logo-probable.d.mts +4 -4
  490. package/dist/types/primitives/venue-logo/svg/logo-probable.d.ts +4 -4
  491. package/dist/types/primitives/venue-logo/svg/logo-prophetx.d.mts +4 -26
  492. package/dist/types/primitives/venue-logo/svg/logo-prophetx.d.ts +4 -26
  493. package/dist/types/primitives/venue-logo/svg/logo-tiprun.d.mts +4 -5
  494. package/dist/types/primitives/venue-logo/svg/logo-tiprun.d.ts +4 -5
  495. package/dist/types/primitives/venue-logo/venue-logo.constants.d.mts +1 -1
  496. package/dist/types/primitives/venue-logo/venue-logo.constants.d.ts +1 -1
  497. package/dist/types/profile/index.d.mts +4 -4
  498. package/dist/types/profile/index.d.ts +4 -4
  499. package/dist/types/profile/tabs/about-tab.d.mts +4 -4
  500. package/dist/types/profile/tabs/about-tab.d.ts +4 -4
  501. package/dist/types/profile/tabs/accounts-wallets-tab.d.mts +4 -4
  502. package/dist/types/profile/tabs/accounts-wallets-tab.d.ts +4 -4
  503. package/dist/types/profile/tabs/trading-access-tab.d.mts +4 -4
  504. package/dist/types/profile/tabs/trading-access-tab.d.ts +4 -4
  505. package/dist/types/shared/default-avatar.d.mts +4 -4
  506. package/dist/types/shared/default-avatar.d.ts +4 -4
  507. package/dist/types/shared/open-orders.d.mts +1 -1
  508. package/dist/types/shared/open-orders.d.ts +1 -1
  509. package/dist/types/shared/react-inert.d.mts +1 -0
  510. package/dist/types/shared/react-inert.d.ts +1 -0
  511. package/dist/types/shared/transfer-fee-summary.d.mts +1 -1
  512. package/dist/types/shared/transfer-fee-summary.d.ts +1 -1
  513. package/dist/types/trading/fund-kalshi-modal.d.mts +4 -4
  514. package/dist/types/trading/fund-kalshi-modal.d.ts +4 -4
  515. package/dist/types/trading/manage-betdex-account-modal.d.mts +1 -1
  516. package/dist/types/trading/manage-betdex-account-modal.d.ts +1 -1
  517. package/dist/types/trading/place-order/index.d.mts +4 -4
  518. package/dist/types/trading/place-order/index.d.ts +4 -4
  519. package/dist/types/trading/place-order/index.place-order.execution-view.d.mts +6 -6
  520. package/dist/types/trading/place-order/index.place-order.execution-view.d.ts +6 -6
  521. package/dist/types/trading/place-order/index.place-order.failure.d.mts +4 -4
  522. package/dist/types/trading/place-order/index.place-order.failure.d.ts +4 -4
  523. package/dist/types/trading/place-order/index.place-order.success.d.mts +4 -4
  524. package/dist/types/trading/place-order/index.place-order.success.d.ts +4 -4
  525. package/dist/types/trading/settlement/index.d.mts +4 -4
  526. package/dist/types/trading/settlement/index.d.ts +4 -4
  527. package/dist/types/trading/settlement/settlement-details.d.mts +4 -4
  528. package/dist/types/trading/settlement/settlement-details.d.ts +4 -4
  529. package/dist/types/trading/settlement/settlement-text-renderer.d.mts +4 -4
  530. package/dist/types/trading/settlement/settlement-text-renderer.d.ts +4 -4
  531. package/dist/types/withdraw/index.d.mts +4 -4
  532. package/dist/types/withdraw/index.d.ts +4 -4
  533. package/dist/types/withdraw/steps/withdraw-amount.d.mts +1 -1
  534. package/dist/types/withdraw/steps/withdraw-amount.d.ts +1 -1
  535. package/dist/types/withdraw/steps/withdraw-method.d.mts +1 -1
  536. package/dist/types/withdraw/steps/withdraw-method.d.ts +1 -1
  537. package/dist/types/withdraw/steps/withdraw-provider.d.mts +1 -1
  538. package/dist/types/withdraw/steps/withdraw-provider.d.ts +1 -1
  539. package/dist/types/withdraw/steps/withdraw-success.d.mts +2 -2
  540. package/dist/types/withdraw/steps/withdraw-success.d.ts +2 -2
  541. package/package.json +9 -8
  542. package/dist/chunk-6CZNJSRL.mjs +0 -3551
  543. package/dist/chunk-7G2GTWAS.mjs +0 -5189
  544. package/dist/chunk-7ORC3TUJ.mjs +0 -2883
  545. package/dist/chunk-EJXA32MG.mjs +0 -2377
  546. package/dist/chunk-JH4B3ZHQ.mjs +0 -1
  547. package/dist/chunk-KN7JN7F5.mjs +0 -8303
  548. package/dist/chunk-PN5HEBFC.mjs +0 -5789
  549. package/dist/chunk-W2LCFCW3.mjs +0 -2879
  550. package/dist/chunk-WOCZ4TVT.mjs +0 -1645
  551. package/dist/chunk-XZVGHKMW.mjs +0 -11426
  552. package/dist/event-market-A276CAYG.mjs +0 -21
@@ -1,2879 +0,0 @@
1
- "use client";
2
- import {
3
- ConnectKalshiModal,
4
- DEFAULT_CURRENCY_OPTIONS,
5
- ManageBetdexAccountModal,
6
- TransferFeeSummary,
7
- dispatchAggDepositNotification,
8
- mapNetworksToOptions,
9
- mergeSelectOptionsUnique,
10
- withNetworkIcons,
11
- withTokenIcons
12
- } from "./chunk-7ORC3TUJ.mjs";
13
- import {
14
- BoltIcon,
15
- Button,
16
- CheckCircleIcon,
17
- ChevronLeftIcon,
18
- ChevronRightIcon,
19
- CloseIcon,
20
- CopyButton,
21
- CreditCardIcon,
22
- ExternalLinkIcon,
23
- Icon,
24
- LoadingIcon,
25
- Modal,
26
- RemoteImage,
27
- Select,
28
- SuccessCheckIcon,
29
- Tabs,
30
- Tooltip,
31
- UsdcIcon,
32
- VenueLogo,
33
- WalletIcon,
34
- WarningIcon,
35
- __async,
36
- __spreadProps,
37
- __spreadValues,
38
- cn,
39
- formatCompactUsd,
40
- formatTokenAmount,
41
- formatUsd,
42
- shortenAddress,
43
- useOptionalToast,
44
- venueLogoLabels
45
- } from "./chunk-XZVGHKMW.mjs";
46
-
47
- // src/deposit/index.tsx
48
- import { useAggAuthState, useAggUiConfig, useDepositAddresses, useLabels as useLabels10 } from "@agg-build/hooks";
49
- import { SVM_CHAIN_IDS, useDepositFlow } from "@agg-build/hooks/deposit";
50
- import { useCallback, useEffect as useEffect3, useMemo, useRef, useState as useState2 } from "react";
51
-
52
- // src/deposit/deposit-modal.constants.ts
53
- var BASE_URL = "https://assets.snagsolutions.io";
54
- var CARD_NETWORK_OPTIONS = [
55
- {
56
- value: "ethereum",
57
- label: "Ethereum",
58
- iconUrl: `${BASE_URL}/public/prediction-markets/logos/ETH.svg`
59
- },
60
- {
61
- value: "arbitrum",
62
- label: "Arbitrum",
63
- iconUrl: `${BASE_URL}/public/prediction-markets/logos/Arbitrum.svg`
64
- },
65
- { value: "base", label: "Base", iconUrl: `${BASE_URL}/public/prediction-markets/logos/Base.svg` },
66
- {
67
- value: "solana",
68
- label: "Solana",
69
- iconUrl: `${BASE_URL}/public/prediction-markets/logos/Solana.svg`
70
- },
71
- {
72
- value: "polygon",
73
- label: "Polygon",
74
- iconUrl: `${BASE_URL}/public/prediction-markets/logos/Polygon.svg`
75
- }
76
- ];
77
- var NETWORK_TO_CURRENCY_CODE = {
78
- ethereum: "USDC",
79
- arbitrum: "USDC_ARBITRUM",
80
- base: "USDC_BASE",
81
- solana: "USDC_SOLANA",
82
- polygon: "USDC_POLYGON"
83
- };
84
-
85
- // src/deposit/steps/card-deposit.tsx
86
- import { useLabels } from "@agg-build/hooks";
87
- import { useEffect, useState } from "react";
88
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
89
- var CardDepositStep = ({
90
- amount,
91
- currency,
92
- // tokenOptions,
93
- networkOptions,
94
- // selectedToken,
95
- selectedNetwork,
96
- minAmount,
97
- onBack,
98
- onAmountChange,
99
- onCurrencyChange,
100
- // onTokenChange,
101
- onNetworkChange,
102
- onContinue
103
- }) => {
104
- const labels = useLabels();
105
- const [localAmount, setLocalAmount] = useState(amount);
106
- useEffect(() => {
107
- setLocalAmount(amount);
108
- }, [amount]);
109
- const numericAmount = Number(localAmount) || 0;
110
- const hasInput = localAmount.length > 0;
111
- const isBelowMin = minAmount != null && hasInput && numericAmount < minAmount;
112
- const isValid = numericAmount > 0 && !isBelowMin;
113
- const formattedMin = minAmount != null ? `$${minAmount}` : void 0;
114
- return /* @__PURE__ */ jsxs(Fragment, { children: [
115
- /* @__PURE__ */ jsx(
116
- Modal.Header,
117
- {
118
- title: labels.deposit.cardFlow.title,
119
- hideBorder: true,
120
- leftElement: /* @__PURE__ */ jsx(
121
- "button",
122
- {
123
- type: "button",
124
- className: "mr-2 flex items-center justify-center text-agg-foreground transition-colors hover:cursor-pointer hover:text-agg-foreground/80",
125
- onClick: onBack,
126
- "aria-label": "Go back",
127
- children: /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "h-6 w-6" })
128
- }
129
- )
130
- }
131
- ),
132
- /* @__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-5", children: [
133
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
134
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col gap-2", children: [
135
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
136
- /* @__PURE__ */ jsx("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.cardFlow.amountLabel }),
137
- formattedMin ? /* @__PURE__ */ jsx("p", { className: "agg-type-label text-agg-foreground", children: labels.deposit.cardFlow.minRequired(formattedMin) }) : null
138
- ] }),
139
- /* @__PURE__ */ jsxs("div", { className: "flex gap-3 items-center", children: [
140
- /* @__PURE__ */ jsxs(
141
- "div",
142
- {
143
- className: cn(
144
- "flex h-10 flex-1 items-center gap-2 rounded-agg-sm border bg-agg-secondary px-3",
145
- isBelowMin ? "border-agg-primary border-2" : "border-agg-separator"
146
- ),
147
- children: [
148
- /* @__PURE__ */ jsx(
149
- "input",
150
- {
151
- type: "text",
152
- inputMode: "decimal",
153
- "aria-label": labels.deposit.cardFlow.amountLabel,
154
- className: "agg-type-body w-full bg-transparent text-agg-foreground outline-none",
155
- placeholder: "0.00",
156
- value: localAmount,
157
- onChange: (event) => {
158
- const next = event.target.value;
159
- setLocalAmount(next);
160
- onAmountChange(next);
161
- }
162
- }
163
- ),
164
- /* @__PURE__ */ jsx("span", { className: "agg-type-body text-agg-muted-foreground", children: "$" })
165
- ]
166
- }
167
- ),
168
- /* @__PURE__ */ jsx("div", { className: "w-[100px]", children: /* @__PURE__ */ jsx(
169
- Select,
170
- {
171
- items: [{ value: currency, label: currency }],
172
- value: currency,
173
- onChange: onCurrencyChange,
174
- ariaLabel: labels.deposit.cardFlow.currencyLabel,
175
- triggerClassName: "rounded-agg-sm"
176
- }
177
- ) })
178
- ] })
179
- ] }),
180
- isBelowMin && formattedMin ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", role: "alert", "aria-live": "assertive", children: [
181
- /* @__PURE__ */ jsx(
182
- Icon,
183
- {
184
- name: "warning",
185
- className: "!h-3.5 !w-3.5 shrink-0 text-agg-error",
186
- "aria-hidden": "true"
187
- }
188
- ),
189
- /* @__PURE__ */ jsx("p", { className: "agg-type-label text-agg-error", children: labels.deposit.cardFlow.minAmountError(formattedMin) })
190
- ] }) : null
191
- ] }),
192
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
193
- /* @__PURE__ */ jsx("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.cardFlow.networkLabel }),
194
- /* @__PURE__ */ jsx(
195
- Select,
196
- {
197
- items: networkOptions,
198
- value: selectedNetwork,
199
- onChange: onNetworkChange,
200
- ariaLabel: labels.deposit.cardFlow.networkLabel,
201
- triggerClassName: "rounded-agg-sm"
202
- }
203
- )
204
- ] }),
205
- /* @__PURE__ */ jsx(
206
- Button,
207
- {
208
- variant: "secondary",
209
- size: "large",
210
- className: "w-full",
211
- disabled: !isValid,
212
- onClick: () => onContinue(numericAmount),
213
- children: labels.deposit.cardFlow.getQuotes
214
- }
215
- )
216
- ] }) })
217
- ] });
218
- };
219
-
220
- // src/deposit/steps/card-payment-pending.tsx
221
- import { useLabels as useLabels2 } from "@agg-build/hooks";
222
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
223
- var CardPaymentPendingStep = ({
224
- providerName,
225
- walletAddress,
226
- onClose,
227
- onViewActivity,
228
- onChooseAnotherProvider
229
- }) => {
230
- const labels = useLabels2();
231
- return /* @__PURE__ */ jsx2("div", { className: "relative", children: /* @__PURE__ */ jsxs2(Modal.Body, { classNames: { root: "px-5 py-8 sm:px-8 sm:py-10" }, children: [
232
- /* @__PURE__ */ jsx2(
233
- "button",
234
- {
235
- type: "button",
236
- className: "absolute right-8 top-7 flex items-center justify-center text-agg-foreground transition-colors cursor-pointer hover:text-agg-foreground/80",
237
- onClick: onClose,
238
- "aria-label": labels.common.close,
239
- children: /* @__PURE__ */ jsx2(CloseIcon, { className: "h-6 w-6" })
240
- }
241
- ),
242
- /* @__PURE__ */ jsxs2("div", { className: "flex flex-col items-center gap-8", children: [
243
- /* @__PURE__ */ jsx2("div", { className: "flex h-[60px] w-[60px] items-center justify-center text-agg-muted-foreground", children: /* @__PURE__ */ jsx2(ExternalLinkIcon, { className: "h-[60px] w-[60px]" }) }),
244
- /* @__PURE__ */ jsxs2("div", { className: "flex flex-col items-center gap-3 text-center", children: [
245
- /* @__PURE__ */ jsx2("h3", { className: "text-agg-2xl leading-agg-8 font-agg-bold text-agg-foreground", children: labels.deposit.cardFlow.pendingTitle(providerName) }),
246
- /* @__PURE__ */ jsx2("p", { className: "agg-type-body text-agg-foreground", children: labels.deposit.cardFlow.pendingDescription })
247
- ] }),
248
- walletAddress ? /* @__PURE__ */ jsxs2("div", { className: "flex w-full flex-col items-center gap-3 rounded-agg-md bg-agg-secondary-hover p-5", children: [
249
- /* @__PURE__ */ jsx2("p", { className: "agg-type-label text-agg-foreground w-full", children: labels.deposit.cardFlow.pendingWalletAddressHelp }),
250
- /* @__PURE__ */ jsxs2("div", { className: "flex w-full h-10 items-center gap-2 rounded border border-agg-separator bg-agg-secondary px-3 py-[10px]", children: [
251
- /* @__PURE__ */ jsx2("p", { className: "agg-type-body flex-1 min-w-0 truncate text-agg-foreground", children: walletAddress }),
252
- /* @__PURE__ */ jsx2(
253
- CopyButton,
254
- {
255
- value: walletAddress,
256
- "aria-label": labels.deposit.cardFlow.pendingCopyAddress,
257
- className: "text-agg-muted-foreground hover:text-agg-foreground"
258
- }
259
- )
260
- ] })
261
- ] }) : null,
262
- /* @__PURE__ */ jsxs2("div", { className: "flex items-start justify-center gap-3", children: [
263
- /* @__PURE__ */ jsx2(Button, { variant: "secondary", size: "large", className: "w-[120px]", onClick: onClose, children: labels.common.close }),
264
- /* @__PURE__ */ jsx2(Button, { variant: "primary", size: "large", onClick: onViewActivity, children: labels.deposit.cardFlow.viewActivity })
265
- ] }),
266
- /* @__PURE__ */ jsx2(
267
- "button",
268
- {
269
- type: "button",
270
- className: "agg-type-body font-agg-bold text-agg-primary transition-colors cursor-pointer hover:text-agg-primary/80",
271
- onClick: onChooseAnotherProvider,
272
- children: labels.deposit.cardFlow.chooseAnotherProvider
273
- }
274
- )
275
- ] })
276
- ] }) });
277
- };
278
-
279
- // src/deposit/steps/card-provider.tsx
280
- import { useLabels as useLabels3 } from "@agg-build/hooks";
281
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
282
- var CardProviderItem = ({ provider, onSelect }) => {
283
- const labels = useLabels3();
284
- const badgeText = provider.badge === "best" ? labels.deposit.cardFlow.providerBadges.best : provider.badge === "low-kyc" ? labels.deposit.cardFlow.providerBadges.lowKyc : void 0;
285
- return /* @__PURE__ */ jsx3(
286
- "button",
287
- {
288
- type: "button",
289
- className: "w-full rounded-xl border border-agg-separator px-4 py-3 text-left bg-agg-secondary hover:bg-agg-secondary-hover transition-colors cursor-pointer",
290
- onClick: () => onSelect(provider.id),
291
- children: /* @__PURE__ */ jsxs3("div", { className: "flex items-center justify-between gap-4", children: [
292
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
293
- /* @__PURE__ */ jsx3("p", { className: "text-agg-base leading-agg-6 font-agg-bold text-agg-foreground", children: provider.name }),
294
- badgeText ? /* @__PURE__ */ jsx3(
295
- "span",
296
- {
297
- className: `rounded border px-2 py-[2px] text-[10px] leading-[14px] font-agg-bold uppercase ${provider.badge === "best" ? "border-agg-primary/50 text-agg-primary bg-agg-secondary" : "border-agg-separator text-agg-foreground bg-agg-secondary"}`,
298
- children: badgeText
299
- }
300
- ) : null
301
- ] }),
302
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-4", children: [
303
- /* @__PURE__ */ jsxs3("div", { className: "text-right", children: [
304
- /* @__PURE__ */ jsx3("p", { className: "agg-type-body text-agg-foreground", children: provider.quote }),
305
- /* @__PURE__ */ jsxs3("p", { className: "agg-type-label text-agg-muted-foreground", children: [
306
- labels.deposit.cardFlow.feeLabel,
307
- " ",
308
- provider.fee
309
- ] })
310
- ] }),
311
- /* @__PURE__ */ jsx3(ChevronRightIcon, { className: "h-5 w-5 text-agg-muted-foreground" })
312
- ] })
313
- ] })
314
- }
315
- );
316
- };
317
- var CardProviderStep = ({
318
- token,
319
- amount,
320
- currency,
321
- providers,
322
- isLoading,
323
- error,
324
- sessionError,
325
- onBack,
326
- onSelectProvider,
327
- onRetry
328
- }) => {
329
- const labels = useLabels3();
330
- return /* @__PURE__ */ jsxs3(Fragment2, { children: [
331
- /* @__PURE__ */ jsx3(
332
- Modal.Header,
333
- {
334
- title: labels.deposit.cardFlow.selectProviderTitle,
335
- hideBorder: true,
336
- leftElement: /* @__PURE__ */ jsx3(
337
- "button",
338
- {
339
- type: "button",
340
- className: "mr-2 flex items-center justify-center text-agg-foreground transition-colors hover:cursor-pointer hover:text-agg-foreground/80",
341
- onClick: onBack,
342
- "aria-label": labels.deposit.back,
343
- children: /* @__PURE__ */ jsx3(ChevronLeftIcon, { className: "h-6 w-6" })
344
- }
345
- )
346
- }
347
- ),
348
- /* @__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-4", children: [
349
- /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-1.5", children: [
350
- /* @__PURE__ */ jsx3(UsdcIcon, { className: "h-4 w-4 shrink-0" }),
351
- /* @__PURE__ */ jsx3("span", { className: "agg-type-body font-agg-bold text-agg-foreground", children: token }),
352
- /* @__PURE__ */ jsxs3("span", { className: "agg-type-body text-agg-foreground", children: [
353
- "$",
354
- amount,
355
- " ",
356
- currency
357
- ] })
358
- ] }),
359
- isLoading ? /* @__PURE__ */ jsxs3("div", { className: "flex min-h-[200px] flex-col items-center justify-center gap-3", children: [
360
- /* @__PURE__ */ jsx3(LoadingIcon, { variant: "prominent" }),
361
- /* @__PURE__ */ jsx3("p", { className: "agg-type-body text-agg-foreground", children: labels.deposit.cardFlow.loadingQuotes })
362
- ] }) : error ? /* @__PURE__ */ jsxs3("div", { className: "flex min-h-[200px] flex-col items-center justify-center gap-6 px-2 text-center", children: [
363
- /* @__PURE__ */ jsx3(
364
- Icon,
365
- {
366
- name: "quotes-warning",
367
- size: "large",
368
- className: "!h-9 !w-9 shrink-0 text-agg-muted-foreground",
369
- color: "currentColor"
370
- }
371
- ),
372
- /* @__PURE__ */ jsxs3("div", { className: "flex max-w-[320px] flex-col gap-2", children: [
373
- /* @__PURE__ */ jsx3("p", { className: "text-agg-base leading-agg-6 font-agg-bold text-agg-foreground", children: labels.deposit.cardFlow.errorLoadingQuotesTitle }),
374
- /* @__PURE__ */ jsx3("p", { className: "agg-type-body text-agg-muted-foreground", children: labels.deposit.cardFlow.errorLoadingQuotesDescription })
375
- ] }),
376
- onRetry ? /* @__PURE__ */ jsx3(Button, { variant: "secondary", size: "medium", onClick: onRetry, children: labels.deposit.cardFlow.retry }) : null
377
- ] }) : providers.length === 0 ? /* @__PURE__ */ jsx3("div", { className: "flex min-h-[200px] items-center justify-center", children: /* @__PURE__ */ jsx3("p", { className: "agg-type-body text-agg-muted-foreground", children: labels.deposit.cardFlow.noQuotes }) }) : /* @__PURE__ */ jsxs3("div", { className: "flex flex-col gap-4", children: [
378
- providers.map((provider) => /* @__PURE__ */ jsx3(
379
- CardProviderItem,
380
- {
381
- provider,
382
- onSelect: onSelectProvider
383
- },
384
- provider.id
385
- )),
386
- sessionError ? /* @__PURE__ */ jsx3("p", { className: "agg-type-label text-agg-error text-center", children: sessionError }) : null
387
- ] })
388
- ] }) })
389
- ] });
390
- };
391
-
392
- // src/deposit/steps/card-purchase-success.tsx
393
- import { useLabels as useLabels4 } from "@agg-build/hooks";
394
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
395
- var SummaryRow = ({ label, value }) => /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-between border-b border-agg-separator py-2 last:border-b-0", children: [
396
- /* @__PURE__ */ jsx4("p", { className: "text-[12px] leading-4 font-agg-bold uppercase text-agg-muted-foreground", children: label }),
397
- /* @__PURE__ */ jsx4("p", { className: "agg-type-label text-agg-foreground", children: value })
398
- ] });
399
- var CardPurchaseSuccessStep = ({
400
- summary,
401
- onDone,
402
- onClose
403
- }) => {
404
- const labels = useLabels4();
405
- return /* @__PURE__ */ jsx4("div", { className: "relative", children: /* @__PURE__ */ jsxs4(Modal.Body, { classNames: { root: "px-5 py-8 sm:px-8 sm:py-10" }, children: [
406
- /* @__PURE__ */ jsx4(
407
- "button",
408
- {
409
- type: "button",
410
- className: "absolute right-8 top-7 flex items-center justify-center text-agg-foreground transition-colors hover:text-agg-foreground/80",
411
- onClick: onClose,
412
- "aria-label": labels.common.close,
413
- children: /* @__PURE__ */ jsx4(CloseIcon, { className: "h-6 w-6" })
414
- }
415
- ),
416
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-col items-center gap-8", children: [
417
- /* @__PURE__ */ jsx4("div", { className: "flex h-[60px] w-[60px] items-center justify-center rounded-full bg-agg-success/15", children: /* @__PURE__ */ jsx4(SuccessCheckIcon, { className: "h-6 w-6 text-agg-success" }) }),
418
- /* @__PURE__ */ jsxs4("div", { className: "flex flex-col items-center gap-3 text-center", children: [
419
- /* @__PURE__ */ jsx4("h3", { className: "text-agg-2xl leading-agg-8 font-agg-bold text-agg-foreground", children: labels.deposit.cardFlow.successTitle }),
420
- /* @__PURE__ */ jsx4("p", { className: "agg-type-body text-agg-foreground", children: labels.deposit.cardFlow.successDescription })
421
- ] }),
422
- /* @__PURE__ */ jsxs4("div", { className: "w-full rounded-lg border border-agg-separator bg-agg-secondary px-3 py-1", children: [
423
- /* @__PURE__ */ jsx4(
424
- SummaryRow,
425
- {
426
- label: labels.deposit.summary.amountReceived,
427
- value: summary.amountReceived
428
- }
429
- ),
430
- /* @__PURE__ */ jsx4(SummaryRow, { label: labels.deposit.summary.network, value: summary.network }),
431
- /* @__PURE__ */ jsx4(SummaryRow, { label: labels.deposit.cardFlow.summary.fees, value: summary.fees })
432
- ] }),
433
- /* @__PURE__ */ jsx4(Button, { variant: "secondary", size: "large", className: "w-[120px]", onClick: onDone, children: labels.deposit.done })
434
- ] })
435
- ] }) });
436
- };
437
-
438
- // src/deposit/steps/crypto-transfer.tsx
439
- import { useLabels as useLabels5, useWithdrawEstimate } from "@agg-build/hooks";
440
-
441
- // src/deposit/components/DepositQRCode.tsx
442
- import { QRCodeSVG } from "qrcode.react";
443
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
444
- function DepositQRCode({
445
- depositAddress,
446
- networkLogoUrl,
447
- networkLogo,
448
- size = 160
449
- }) {
450
- const logoOverlay = networkLogo ? /* @__PURE__ */ jsx5(
451
- "div",
452
- {
453
- className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-sm",
454
- style: { width: 32, height: 32, backgroundColor: "#FFFFFF", padding: 2 },
455
- children: networkLogo
456
- }
457
- ) : networkLogoUrl ? /* @__PURE__ */ jsx5(
458
- "img",
459
- {
460
- src: networkLogoUrl,
461
- alt: "",
462
- className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-sm",
463
- width: 32,
464
- height: 32,
465
- style: { backgroundColor: "#FFFFFF", padding: 2 }
466
- }
467
- ) : null;
468
- return /* @__PURE__ */ jsx5(
469
- "div",
470
- {
471
- className: "inline-flex items-center justify-center rounded-xl border",
472
- style: {
473
- padding: 16,
474
- borderColor: "#E5E7EB",
475
- backgroundColor: "#FFFFFF"
476
- },
477
- children: /* @__PURE__ */ jsxs5("div", { className: "relative", style: { width: size, height: size }, children: [
478
- /* @__PURE__ */ jsx5(QRCodeSVG, { value: depositAddress, size, level: "H" }),
479
- logoOverlay
480
- ] })
481
- }
482
- );
483
- }
484
- DepositQRCode.displayName = "DepositQRCode";
485
-
486
- // src/deposit/steps/crypto-transfer.tsx
487
- import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
488
- var CryptoAddressLoadingState = () => {
489
- const labels = useLabels5();
490
- const sendCryptoLabels = labels.deposit.sendCrypto;
491
- return /* @__PURE__ */ jsxs6(
492
- "div",
493
- {
494
- className: "flex w-full flex-col items-center justify-center gap-6 py-10 text-center text-agg-foreground",
495
- role: "status",
496
- "aria-live": "polite",
497
- children: [
498
- /* @__PURE__ */ jsx6(
499
- "span",
500
- {
501
- className: "h-9 w-9 animate-spin rounded-full border-2 border-agg-primary/25 border-t-agg-primary",
502
- "aria-hidden": "true"
503
- }
504
- ),
505
- /* @__PURE__ */ jsxs6("div", { className: "flex w-full flex-col items-center gap-2", children: [
506
- /* @__PURE__ */ jsx6("p", { className: "text-agg-base font-agg-bold leading-agg-6", children: sendCryptoLabels.addressLoadingTitle }),
507
- /* @__PURE__ */ jsx6("p", { className: "max-w-[300px] text-agg-sm leading-agg-5", children: sendCryptoLabels.addressLoadingDescription })
508
- ] })
509
- ]
510
- }
511
- );
512
- };
513
- var getEstimateAmountFromMinDeposit = (minDeposit) => {
514
- const numericMinDeposit = minDeposit.replace(/[^0-9.]/g, "");
515
- return numericMinDeposit || "1";
516
- };
517
- var CryptoTransferStep = ({
518
- tokenOptions,
519
- networkOptions,
520
- selectedToken,
521
- selectedNetwork,
522
- depositAddress,
523
- minDeposit,
524
- eta,
525
- isLoadingAddress,
526
- addressError,
527
- onBack,
528
- onTokenChange,
529
- onNetworkChange,
530
- onCopyAddress,
531
- onDone
532
- }) => {
533
- var _a;
534
- const labels = useLabels5();
535
- const selectedNetworkOption = networkOptions.find((n) => n.value === selectedNetwork);
536
- const networkLogoUrl = (_a = selectedNetworkOption == null ? void 0 : selectedNetworkOption.iconUrl) != null ? _a : "";
537
- const networkLogo = selectedNetworkOption == null ? void 0 : selectedNetworkOption.icon;
538
- const transferFeeEstimate = useWithdrawEstimate({
539
- amount: getEstimateAmountFromMinDeposit(minDeposit),
540
- selectedToken,
541
- selectedNetwork
542
- });
543
- return /* @__PURE__ */ jsxs6(Fragment3, { children: [
544
- /* @__PURE__ */ jsx6(
545
- Modal.Header,
546
- {
547
- title: labels.deposit.sendCrypto.title,
548
- hideBorder: true,
549
- leftElement: /* @__PURE__ */ jsx6(
550
- "button",
551
- {
552
- type: "button",
553
- className: "mr-2 flex items-center justify-center text-agg-foreground transition-colors hover:cursor-pointer hover:text-agg-foreground/80",
554
- onClick: onBack,
555
- "aria-label": "Go back",
556
- children: /* @__PURE__ */ jsx6(ChevronLeftIcon, { className: "h-6 w-6" })
557
- }
558
- )
559
- }
560
- ),
561
- /* @__PURE__ */ jsx6(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-7", children: [
562
- /* @__PURE__ */ jsx6("div", { className: "flex flex-col gap-5", children: /* @__PURE__ */ jsxs6("div", { className: "flex gap-5", children: [
563
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
564
- /* @__PURE__ */ jsx6("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.sendCrypto.tokenLabel }),
565
- /* @__PURE__ */ jsx6(
566
- Select,
567
- {
568
- items: tokenOptions,
569
- value: selectedToken,
570
- onChange: onTokenChange,
571
- ariaLabel: labels.deposit.sendCrypto.tokenLabel
572
- }
573
- )
574
- ] }),
575
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
576
- /* @__PURE__ */ jsx6("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.sendCrypto.networkLabel }),
577
- /* @__PURE__ */ jsx6(
578
- Select,
579
- {
580
- items: networkOptions,
581
- value: selectedNetwork,
582
- onChange: onNetworkChange,
583
- ariaLabel: labels.deposit.sendCrypto.networkLabel
584
- }
585
- )
586
- ] })
587
- ] }) }),
588
- /* @__PURE__ */ jsx6("div", { className: "mx-auto", children: isLoadingAddress ? /* @__PURE__ */ jsx6(CryptoAddressLoadingState, {}) : addressError ? /* @__PURE__ */ jsx6("div", { className: "flex h-[192px] w-[192px] items-center justify-center rounded-xl border border-agg-separator bg-agg-secondary", children: /* @__PURE__ */ jsx6("p", { className: "agg-type-label text-center text-agg-error px-3", children: addressError }) }) : /* @__PURE__ */ jsx6(
589
- DepositQRCode,
590
- {
591
- depositAddress,
592
- networkLogoUrl,
593
- networkLogo
594
- }
595
- ) }),
596
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-col gap-3", children: [
597
- /* @__PURE__ */ jsx6("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.sendCrypto.depositAddressLabel }),
598
- /* @__PURE__ */ jsxs6("div", { className: "flex items-center gap-2 rounded border border-agg-separator bg-agg-secondary h-10 px-3", children: [
599
- isLoadingAddress ? /* @__PURE__ */ jsx6("div", { className: "h-4 flex-1 animate-pulse rounded bg-agg-muted-foreground/20" }) : /* @__PURE__ */ jsx6("p", { className: "agg-type-body flex-1 min-w-0 truncate text-agg-foreground", children: depositAddress }),
600
- /* @__PURE__ */ jsx6(
601
- CopyButton,
602
- {
603
- value: depositAddress,
604
- label: labels.deposit.sendCrypto.copy,
605
- copiedLabel: labels.deposit.sendCrypto.copied,
606
- disabled: isLoadingAddress || !!addressError || !depositAddress,
607
- onCopy: onCopyAddress,
608
- className: "text-agg-primary hover:text-agg-primary/80"
609
- }
610
- )
611
- ] }),
612
- /* @__PURE__ */ jsx6(
613
- TransferFeeSummary,
614
- {
615
- estimate: transferFeeEstimate,
616
- view: "deposit",
617
- minDeposit,
618
- eta
619
- }
620
- )
621
- ] }),
622
- /* @__PURE__ */ jsxs6("div", { className: "flex items-start gap-3 rounded-lg bg-agg-secondary-hover p-3", children: [
623
- /* @__PURE__ */ jsx6(WarningIcon, { className: "h-4 w-4 text-agg-muted-foreground mt-0.5" }),
624
- /* @__PURE__ */ jsx6("p", { className: "text-agg-xs leading-agg-4 text-agg-foreground", children: labels.deposit.sendCrypto.warning })
625
- ] }),
626
- /* @__PURE__ */ jsx6(
627
- Button,
628
- {
629
- variant: "secondary",
630
- size: "large",
631
- className: "w-[120px] self-center",
632
- onClick: onDone,
633
- children: labels.deposit.done
634
- }
635
- )
636
- ] }) })
637
- ] });
638
- };
639
-
640
- // src/deposit/steps/deposit-method.tsx
641
- import { useLabels as useLabels6 } from "@agg-build/hooks";
642
- import { Fragment as Fragment4, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
643
- var DepositMethodCard = ({
644
- icon,
645
- title,
646
- description,
647
- value,
648
- highlighted = false,
649
- disabled = false,
650
- onContinue
651
- }) => /* @__PURE__ */ jsxs7(
652
- "div",
653
- {
654
- className: cn(
655
- "flex items-center gap-3 sm:gap-4",
656
- "rounded-xl border border-agg-separator",
657
- "p-3 sm:p-4",
658
- "transition-colors",
659
- disabled ? "opacity-50 cursor-not-allowed pointer-events-none" : "cursor-pointer hover:bg-agg-secondary-hover",
660
- highlighted ? "" : ""
661
- ),
662
- role: "button",
663
- tabIndex: disabled ? -1 : 0,
664
- "aria-disabled": disabled || void 0,
665
- onClick: disabled ? void 0 : onContinue,
666
- onKeyDown: disabled ? void 0 : (e) => {
667
- if (e.key === "Enter" || e.key === " ") {
668
- e.preventDefault();
669
- onContinue();
670
- }
671
- },
672
- children: [
673
- /* @__PURE__ */ jsx7("div", { className: "shrink-0 flex items-center justify-center h-10 w-10 rounded-lg bg-agg-secondary-hover", children: icon }),
674
- /* @__PURE__ */ jsxs7("div", { className: "flex-1 min-w-0", children: [
675
- /* @__PURE__ */ jsx7("p", { className: "agg-type-body-strong text-agg-foreground", children: title }),
676
- /* @__PURE__ */ jsx7("p", { className: "agg-type-label text-agg-muted-foreground", children: description })
677
- ] }),
678
- value ? /* @__PURE__ */ jsx7("p", { className: "agg-type-label text-agg-muted-foreground", children: value }) : null,
679
- /* @__PURE__ */ jsx7("div", { className: "shrink-0 text-agg-muted-foreground", children: /* @__PURE__ */ jsx7(ChevronRightIcon, { className: "h-5 w-5" }) })
680
- ]
681
- }
682
- );
683
- var DepositMethodStep = ({
684
- balance,
685
- walletLabel,
686
- walletBalance,
687
- walletToken,
688
- isWalletBalanceLoading = false,
689
- showWalletMethod = true,
690
- highlightedMethod,
691
- depositAddressesReady = true,
692
- onSelectMethod
693
- }) => {
694
- const labels = useLabels6();
695
- return /* @__PURE__ */ jsxs7(Fragment4, { children: [
696
- /* @__PURE__ */ jsx7(Modal.Header, { title: labels.deposit.title, hideBorder: true }),
697
- /* @__PURE__ */ jsx7(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-5", children: [
698
- /* @__PURE__ */ jsxs7("p", { className: "agg-type-body text-agg-foreground", children: [
699
- labels.deposit.balancePrefix,
700
- " ",
701
- formatCompactUsd(balance)
702
- ] }),
703
- /* @__PURE__ */ jsxs7("div", { className: "flex flex-col gap-4", children: [
704
- showWalletMethod ? /* @__PURE__ */ jsx7(
705
- DepositMethodCard,
706
- {
707
- icon: /* @__PURE__ */ jsx7(WalletIcon, { className: "h-6 w-6 text-agg-muted-foreground" }),
708
- title: labels.deposit.methods.walletTitle(walletLabel),
709
- description: labels.deposit.methods.walletDescription,
710
- value: isWalletBalanceLoading ? /* @__PURE__ */ jsx7(LoadingIcon, { size: "small" }) : formatTokenAmount(walletBalance, walletToken),
711
- highlighted: highlightedMethod === "wallet",
712
- disabled: !depositAddressesReady,
713
- onContinue: () => onSelectMethod("wallet")
714
- }
715
- ) : null,
716
- /* @__PURE__ */ jsx7(
717
- DepositMethodCard,
718
- {
719
- icon: /* @__PURE__ */ jsx7(BoltIcon, { className: "h-6 w-6 text-agg-muted-foreground" }),
720
- title: labels.deposit.methods.cryptoTitle,
721
- description: labels.deposit.methods.cryptoDescription,
722
- highlighted: highlightedMethod === "crypto",
723
- disabled: !depositAddressesReady,
724
- onContinue: () => onSelectMethod("crypto")
725
- }
726
- ),
727
- /* @__PURE__ */ jsx7(
728
- DepositMethodCard,
729
- {
730
- icon: /* @__PURE__ */ jsx7(CreditCardIcon, { className: "h-6 w-6 text-agg-muted-foreground" }),
731
- title: labels.deposit.methods.cardTitle,
732
- description: labels.deposit.methods.cardDescription,
733
- highlighted: highlightedMethod === "card",
734
- onContinue: () => onSelectMethod("card")
735
- }
736
- )
737
- ] })
738
- ] }) })
739
- ] });
740
- };
741
-
742
- // src/deposit/steps/wallet-form.tsx
743
- import { useLabels as useLabels7 } from "@agg-build/hooks";
744
- import { Fragment as Fragment5, jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
745
- var WalletFormStep = ({
746
- walletLabel,
747
- walletBalance,
748
- isBalanceLoading = false,
749
- tokenOptions,
750
- networkOptions,
751
- selectedToken,
752
- selectedNetwork,
753
- amount,
754
- isSubmitting = false,
755
- formErrorMessage,
756
- formErrorTone = "error",
757
- estimatedReceive,
758
- feeEstimate,
759
- eta,
760
- onBack,
761
- onTokenChange,
762
- onNetworkChange,
763
- onAmountChange,
764
- onMax,
765
- onConfirm
766
- }) => {
767
- const labels = useLabels7();
768
- const isConfirmEnabled = !isSubmitting && !isBalanceLoading && Number(amount) > 0 && Number(amount) <= walletBalance;
769
- return /* @__PURE__ */ jsxs8(Fragment5, { children: [
770
- /* @__PURE__ */ jsx8(
771
- Modal.Header,
772
- {
773
- title: labels.deposit.walletFlow.title,
774
- hideBorder: true,
775
- leftElement: /* @__PURE__ */ jsx8(
776
- "button",
777
- {
778
- type: "button",
779
- className: "mr-2 flex items-center justify-center text-agg-foreground transition-colors hover:cursor-pointer hover:text-agg-foreground/80",
780
- onClick: onBack,
781
- "aria-label": "Go back",
782
- children: /* @__PURE__ */ jsx8(ChevronLeftIcon, { className: "h-6 w-6" })
783
- }
784
- )
785
- }
786
- ),
787
- /* @__PURE__ */ jsx8(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-7", children: [
788
- /* @__PURE__ */ jsxs8("div", { className: "flex items-center justify-between", children: [
789
- /* @__PURE__ */ jsx8("p", { className: "agg-type-label text-agg-foreground", children: walletLabel }),
790
- /* @__PURE__ */ jsxs8("p", { className: "agg-type-label text-agg-muted-foreground", children: [
791
- labels.deposit.balanceLabel,
792
- " ",
793
- isBalanceLoading ? /* @__PURE__ */ jsx8(LoadingIcon, { size: "small" }) : formatTokenAmount(walletBalance, selectedToken)
794
- ] })
795
- ] }),
796
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-5", children: [
797
- /* @__PURE__ */ jsxs8("div", { className: "flex gap-5", children: [
798
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
799
- /* @__PURE__ */ jsx8("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.walletFlow.tokenLabel }),
800
- /* @__PURE__ */ jsx8(
801
- Select,
802
- {
803
- items: tokenOptions,
804
- value: selectedToken,
805
- onChange: onTokenChange,
806
- ariaLabel: labels.deposit.walletFlow.tokenLabel
807
- }
808
- )
809
- ] }),
810
- networkOptions.length >= 1 ? /* @__PURE__ */ jsxs8("div", { className: "flex flex-1 flex-col gap-2 min-w-0", children: [
811
- /* @__PURE__ */ jsx8("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.walletFlow.networkLabel }),
812
- /* @__PURE__ */ jsx8(
813
- Select,
814
- {
815
- items: networkOptions,
816
- value: selectedNetwork,
817
- onChange: onNetworkChange,
818
- ariaLabel: labels.deposit.walletFlow.networkLabel
819
- }
820
- )
821
- ] }) : null
822
- ] }),
823
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-col gap-2", children: [
824
- /* @__PURE__ */ jsx8("p", { className: "agg-type-label-strong text-agg-foreground", children: labels.deposit.walletFlow.amountLabel }),
825
- /* @__PURE__ */ jsxs8(
826
- "div",
827
- {
828
- className: cn(
829
- "flex items-center gap-2",
830
- "rounded border border-agg-separator bg-agg-secondary",
831
- "h-10 px-3"
832
- ),
833
- children: [
834
- /* @__PURE__ */ jsx8(
835
- "input",
836
- {
837
- type: "text",
838
- inputMode: "decimal",
839
- "aria-label": labels.deposit.walletFlow.amountLabel,
840
- className: "agg-type-body w-full bg-transparent outline-none text-agg-foreground",
841
- placeholder: "0.00",
842
- value: amount,
843
- onChange: (event) => onAmountChange(event.target.value)
844
- }
845
- ),
846
- /* @__PURE__ */ jsx8(
847
- "button",
848
- {
849
- type: "button",
850
- className: "shrink-0 text-agg-sm font-agg-bold leading-agg-5 text-agg-primary transition-colors hover:text-agg-primary/80 cursor-pointer",
851
- onClick: onMax,
852
- "aria-label": labels.deposit.walletFlow.max,
853
- children: labels.deposit.walletFlow.max
854
- }
855
- )
856
- ]
857
- }
858
- )
859
- ] }),
860
- estimatedReceive && feeEstimate && eta ? /* @__PURE__ */ jsx8("p", { className: "agg-type-label text-agg-foreground", children: `\u2248 ${estimatedReceive} \xB7 ${labels.deposit.walletFlow.feePrefix} ${feeEstimate} \xB7 ${eta}` }) : null,
861
- formErrorMessage ? /* @__PURE__ */ jsxs8(
862
- "div",
863
- {
864
- className: cn(
865
- "flex items-start gap-2",
866
- formErrorTone === "warning" ? "text-agg-warning" : "text-agg-error"
867
- ),
868
- children: [
869
- /* @__PURE__ */ jsx8(WarningIcon, { className: "mt-0.5 h-4 w-4 shrink-0" }),
870
- /* @__PURE__ */ jsx8("p", { className: "agg-type-label", children: formErrorMessage })
871
- ]
872
- }
873
- ) : null
874
- ] }),
875
- /* @__PURE__ */ jsx8(
876
- Button,
877
- {
878
- variant: isConfirmEnabled ? "primary" : "secondary",
879
- size: "large",
880
- className: "w-full",
881
- disabled: !isConfirmEnabled,
882
- isLoading: isSubmitting,
883
- "aria-label": labels.deposit.walletFlow.confirm,
884
- onClick: onConfirm,
885
- children: labels.deposit.walletFlow.confirm
886
- }
887
- )
888
- ] }) })
889
- ] });
890
- };
891
-
892
- // src/deposit/steps/wallet-processing.tsx
893
- import { useLabels as useLabels8 } from "@agg-build/hooks";
894
- import { useEffect as useEffect2 } from "react";
895
- import { Fragment as Fragment6, jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
896
- var WalletProcessingStep = ({
897
- steps,
898
- errorMessage,
899
- onComplete
900
- }) => {
901
- const labels = useLabels8();
902
- useEffect2(() => {
903
- const allDone = steps.length > 0 && steps.every((s) => s.status === "complete");
904
- if (allDone) {
905
- onComplete();
906
- }
907
- }, [steps, onComplete]);
908
- return /* @__PURE__ */ jsxs9(Fragment6, { children: [
909
- /* @__PURE__ */ jsx9(Modal.Header, { title: labels.deposit.processingTitle, hideBorder: true }),
910
- /* @__PURE__ */ jsx9(Modal.Body, { classNames: { root: "px-5 pt-0 pb-6 sm:px-8 sm:pt-0 sm:pb-8" }, children: /* @__PURE__ */ jsxs9("div", { className: "flex flex-col gap-5", children: [
911
- steps.map((step) => {
912
- const isComplete = step.status === "complete";
913
- const isActive = step.status === "active";
914
- return /* @__PURE__ */ jsxs9("div", { className: "flex items-center gap-3", children: [
915
- isComplete ? /* @__PURE__ */ jsx9(CheckCircleIcon, { className: "h-4 w-4 text-agg-primary" }) : /* @__PURE__ */ jsx9(
916
- "span",
917
- {
918
- className: [
919
- "inline-block h-4 w-4 rounded-full border",
920
- isActive ? "border-2 border-agg-primary border-r-transparent animate-spin" : "",
921
- !isActive ? "border-agg-separator" : ""
922
- ].join(" ")
923
- }
924
- ),
925
- /* @__PURE__ */ jsx9(
926
- "p",
927
- {
928
- className: isComplete || isActive ? "agg-type-body text-agg-foreground" : "agg-type-body text-agg-muted-foreground",
929
- children: step.label
930
- }
931
- )
932
- ] }, step.id);
933
- }),
934
- errorMessage ? /* @__PURE__ */ jsx9("p", { className: "agg-type-body text-agg-destructive", children: errorMessage }) : null
935
- ] }) })
936
- ] });
937
- };
938
-
939
- // src/deposit/steps/wallet-success.tsx
940
- import { useLabels as useLabels9 } from "@agg-build/hooks";
941
- import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
942
- var SummaryRow2 = ({ label, value }) => /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between border-b border-agg-separator py-2 last:border-b-0", children: [
943
- /* @__PURE__ */ jsx10("p", { className: "text-[12px] leading-4 font-agg-bold uppercase text-agg-muted-foreground", children: label }),
944
- /* @__PURE__ */ jsx10("p", { className: "agg-type-label text-agg-foreground", children: value })
945
- ] });
946
- var WalletSuccessStep = ({
947
- summary,
948
- onDone,
949
- onClose
950
- }) => {
951
- const labels = useLabels9();
952
- return /* @__PURE__ */ jsx10("div", { className: "relative", children: /* @__PURE__ */ jsxs10(Modal.Body, { classNames: { root: "px-5 py-8 sm:px-8 sm:py-10" }, children: [
953
- /* @__PURE__ */ jsx10(
954
- "button",
955
- {
956
- type: "button",
957
- className: "absolute right-8 top-7 flex items-center justify-center text-agg-foreground transition-colors hover:text-agg-foreground/80",
958
- onClick: onClose,
959
- "aria-label": labels.common.close,
960
- children: /* @__PURE__ */ jsx10(CloseIcon, { className: "h-6 w-6" })
961
- }
962
- ),
963
- /* @__PURE__ */ jsxs10("div", { className: "flex flex-col items-center gap-8", children: [
964
- /* @__PURE__ */ jsx10("div", { className: "flex h-[60px] w-[60px] items-center justify-center rounded-full bg-agg-success/15", children: /* @__PURE__ */ jsx10(SuccessCheckIcon, { className: "h-6 w-6 text-agg-success" }) }),
965
- /* @__PURE__ */ jsxs10("div", { className: "flex flex-col items-center gap-3 text-center", children: [
966
- /* @__PURE__ */ jsx10("h3", { className: "text-agg-2xl leading-agg-8 font-agg-bold text-agg-foreground", children: labels.deposit.successTitle }),
967
- /* @__PURE__ */ jsx10("p", { className: "agg-type-body text-agg-foreground", children: labels.deposit.successDescription })
968
- ] }),
969
- /* @__PURE__ */ jsxs10("div", { className: "w-full rounded-lg border border-agg-separator bg-agg-secondary px-3 py-1", children: [
970
- /* @__PURE__ */ jsx10(
971
- SummaryRow2,
972
- {
973
- label: labels.deposit.summary.amountReceived,
974
- value: summary.amountReceived
975
- }
976
- ),
977
- /* @__PURE__ */ jsx10(SummaryRow2, { label: labels.deposit.summary.network, value: summary.network }),
978
- /* @__PURE__ */ jsx10(SummaryRow2, { label: labels.deposit.summary.fromWallet, value: summary.fromWallet }),
979
- /* @__PURE__ */ jsx10(SummaryRow2, { label: labels.deposit.summary.gasFee, value: summary.gasFee })
980
- ] }),
981
- /* @__PURE__ */ jsx10(Button, { variant: "secondary", size: "large", className: "w-[120px]", onClick: onDone, children: labels.deposit.done })
982
- ] })
983
- ] }) });
984
- };
985
-
986
- // src/deposit/index.tsx
987
- import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
988
- var PENDING_CARD_SESSION_KEY = "agg-pending-card-session";
989
- var DEFAULT_WALLET_CHAIN_ID = "1";
990
- var DEFAULT_WALLET_TOKEN = "USDC";
991
- function savePendingCardSession(data) {
992
- try {
993
- localStorage.setItem(PENDING_CARD_SESSION_KEY, JSON.stringify(data));
994
- } catch (e) {
995
- }
996
- }
997
- function clearPendingCardSession() {
998
- try {
999
- localStorage.removeItem(PENDING_CARD_SESSION_KEY);
1000
- } catch (e) {
1001
- }
1002
- }
1003
- function getPendingCardSession() {
1004
- try {
1005
- const raw = localStorage.getItem(PENDING_CARD_SESSION_KEY);
1006
- if (!raw) return null;
1007
- return JSON.parse(raw);
1008
- } catch (e) {
1009
- return null;
1010
- }
1011
- }
1012
- function getDefaultProcessingSteps(transactionStatus, labels) {
1013
- var _a;
1014
- const defaultSteps = [
1015
- { id: "submitting", label: labels.submitting, status: "active" },
1016
- { id: "confirming", label: labels.confirming, status: "pending" }
1017
- ];
1018
- const activeByStatus = {
1019
- submitting: 0,
1020
- submitted: 1,
1021
- confirming: 1,
1022
- error: 1
1023
- };
1024
- if (transactionStatus === "settled") {
1025
- return defaultSteps.map((step) => __spreadProps(__spreadValues({}, step), { status: "complete" }));
1026
- }
1027
- const activeIndex = (_a = activeByStatus[transactionStatus != null ? transactionStatus : "submitted"]) != null ? _a : 0;
1028
- return defaultSteps.map((step, index) => __spreadProps(__spreadValues({}, step), {
1029
- status: index < activeIndex ? "complete" : index === activeIndex ? "active" : "pending"
1030
- }));
1031
- }
1032
- function isControlledDepositModalProps(props) {
1033
- return "walletFlow" in props;
1034
- }
1035
- function DepositModalSelfDriven({ open, onOpenChange }) {
1036
- const depositProps = useDepositFlow({ open, onOpenChange });
1037
- return /* @__PURE__ */ jsx11(DepositModalControlled, __spreadValues({}, depositProps));
1038
- }
1039
- function DepositModalControlled({
1040
- open,
1041
- onOpenChange,
1042
- onSelectDepositMethod,
1043
- onContinueCardDeposit,
1044
- onDoneCryptoTransfer,
1045
- walletFlow,
1046
- onWalletAmountChange,
1047
- onWalletMax,
1048
- onConfirmWalletDeposit,
1049
- onCancelWalletDeposit,
1050
- onDoneWalletDeposit,
1051
- onWalletNetworkChange,
1052
- onWalletTokenChange,
1053
- initialWalletChainId,
1054
- connectedWalletKind,
1055
- sendCryptoConfig,
1056
- onDoneSendCrypto,
1057
- cardFlow,
1058
- onCardAmountChange,
1059
- onCardCurrencyChange,
1060
- onCardTokenChange,
1061
- onCardNetworkChange,
1062
- onSelectCardProvider,
1063
- onDoneCardPurchase,
1064
- onViewActivity,
1065
- cardRedirectUrl,
1066
- onGetCardQuotes,
1067
- onCreateCardSession,
1068
- pendingCardPurchaseSummary
1069
- }) {
1070
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
1071
- const { isWeb3User } = useAggAuthState();
1072
- const { walletActions } = useAggUiConfig();
1073
- const labels = useLabels10();
1074
- const defaultMethod = isWeb3User ? "wallet" : "crypto";
1075
- const [step, setStep] = useState2(
1076
- () => pendingCardPurchaseSummary ? "card-success" : "method"
1077
- );
1078
- const [highlightedMethod, setHighlightedMethod] = useState2(defaultMethod);
1079
- const walletSubmitInFlightRef = useRef(false);
1080
- const walletDepositAttemptIdRef = useRef(0);
1081
- const notifiedWalletDepositStatusesRef = useRef(/* @__PURE__ */ new Set());
1082
- const [isWalletSubmitting, setIsWalletSubmitting] = useState2(false);
1083
- const [cardProviders, setCardProviders] = useState2([]);
1084
- const [quotesLoading, setQuotesLoading] = useState2(false);
1085
- const [quotesError, setQuotesError] = useState2(null);
1086
- const [sessionError, setSessionError] = useState2(null);
1087
- const [pendingProviderName, setPendingProviderName] = useState2("");
1088
- const [pendingProviderWalletAddress, setPendingProviderWalletAddress] = useState2("");
1089
- useEffect3(() => {
1090
- if (pendingCardPurchaseSummary) {
1091
- clearPendingCardSession();
1092
- setStep("card-success");
1093
- }
1094
- }, [pendingCardPurchaseSummary]);
1095
- const [walletChainId, setWalletChainId] = useState2("");
1096
- const [walletToken, setWalletToken] = useState2("");
1097
- const [sendChainId, setSendChainId] = useState2("");
1098
- const [sendToken, setSendToken] = useState2("");
1099
- const {
1100
- isReady,
1101
- isTimedOut,
1102
- error: addrError,
1103
- supportedChains,
1104
- getAddress
1105
- } = useDepositAddresses({ enabled: open });
1106
- const fallbackNetworkOptions = useMemo(() => mapNetworksToOptions(), []);
1107
- const networkOptions = useMemo(() => {
1108
- if (!(supportedChains == null ? void 0 : supportedChains.length)) return fallbackNetworkOptions;
1109
- return withNetworkIcons(
1110
- supportedChains.map((c) => ({ value: String(c.chainId), label: c.name }))
1111
- );
1112
- }, [supportedChains, fallbackNetworkOptions]);
1113
- const walletNetworkOptions = useMemo(() => {
1114
- if (!(supportedChains == null ? void 0 : supportedChains.length) || !connectedWalletKind) return networkOptions;
1115
- const filtered = supportedChains.filter(
1116
- (c) => connectedWalletKind === "solana" ? SVM_CHAIN_IDS.has(c.chainId) : !SVM_CHAIN_IDS.has(c.chainId)
1117
- );
1118
- if (filtered.length === 0) return networkOptions;
1119
- return withNetworkIcons(filtered.map((c) => ({ value: String(c.chainId), label: c.name })));
1120
- }, [supportedChains, networkOptions, connectedWalletKind]);
1121
- const walletTokenOptions = useMemo(() => {
1122
- const chain = supportedChains == null ? void 0 : supportedChains.find((c) => String(c.chainId) === walletChainId);
1123
- if (!chain) return withTokenIcons(DEFAULT_CURRENCY_OPTIONS);
1124
- return withTokenIcons(chain.tokens.map((t) => ({ value: t.symbol, label: t.symbol })));
1125
- }, [supportedChains, walletChainId]);
1126
- const sendTokenOptions = useMemo(() => {
1127
- const chain = supportedChains == null ? void 0 : supportedChains.find((c) => String(c.chainId) === sendChainId);
1128
- if (!chain) return withTokenIcons(DEFAULT_CURRENCY_OPTIONS);
1129
- return withTokenIcons(chain.tokens.map((t) => ({ value: t.symbol, label: t.symbol })));
1130
- }, [supportedChains, sendChainId]);
1131
- useEffect3(() => {
1132
- if (walletNetworkOptions.length > 0) {
1133
- if (!walletChainId || !walletNetworkOptions.some((o) => o.value === walletChainId)) {
1134
- const ethereumMainnetOption = walletNetworkOptions.find(
1135
- (option) => option.value === DEFAULT_WALLET_CHAIN_ID || option.value === "mainnet" || option.label.toLowerCase() === "ethereum"
1136
- );
1137
- const preferred = ethereumMainnetOption ? ethereumMainnetOption.value : initialWalletChainId && walletNetworkOptions.some((option) => option.value === initialWalletChainId) ? initialWalletChainId : walletNetworkOptions[0].value;
1138
- setWalletChainId(preferred);
1139
- }
1140
- }
1141
- }, [walletNetworkOptions, walletChainId, initialWalletChainId]);
1142
- useEffect3(() => {
1143
- if (networkOptions.length > 0) {
1144
- if (!sendChainId || !networkOptions.some((o) => o.value === sendChainId)) {
1145
- setSendChainId(networkOptions[0].value);
1146
- }
1147
- }
1148
- }, [networkOptions, sendChainId]);
1149
- useEffect3(() => {
1150
- var _a2, _b2;
1151
- if (walletTokenOptions.length > 0) {
1152
- const preferredToken = (_b2 = (_a2 = walletTokenOptions.find((option) => option.value === DEFAULT_WALLET_TOKEN)) == null ? void 0 : _a2.value) != null ? _b2 : walletTokenOptions[0].value;
1153
- setWalletToken(preferredToken);
1154
- }
1155
- }, [walletTokenOptions]);
1156
- useEffect3(() => {
1157
- var _a2, _b2;
1158
- setSendToken((_b2 = (_a2 = sendTokenOptions == null ? void 0 : sendTokenOptions[0]) == null ? void 0 : _a2.value) != null ? _b2 : "");
1159
- }, [sendTokenOptions]);
1160
- useEffect3(() => {
1161
- if (walletChainId) {
1162
- onWalletNetworkChange == null ? void 0 : onWalletNetworkChange(walletChainId);
1163
- }
1164
- }, [walletChainId, onWalletNetworkChange]);
1165
- useEffect3(() => {
1166
- if (walletToken) {
1167
- onWalletTokenChange == null ? void 0 : onWalletTokenChange(walletToken);
1168
- }
1169
- }, [walletToken, onWalletTokenChange]);
1170
- const sendChainIdNum = sendChainId ? Number(sendChainId) : void 0;
1171
- const depositAddress = (_a = getAddress(sendChainIdNum)) != null ? _a : "";
1172
- const isLoadingAddress = open && !isReady && !isTimedOut && !addrError;
1173
- const addressError = isTimedOut && !isReady ? "Address generation timed out. Please try again." : addrError && !isReady ? "Failed to load deposit address." : void 0;
1174
- const usesTransactionStatus = walletFlow.transactionStatus !== void 0;
1175
- const processingStatus = isWalletSubmitting ? "submitting" : walletFlow.transactionStatus;
1176
- const processingSteps = usesTransactionStatus ? (_b = walletFlow.processingSteps) != null ? _b : getDefaultProcessingSteps(processingStatus, labels.deposit.processingSteps) : (_c = walletFlow.processingSteps) != null ? _c : getDefaultProcessingSteps(processingStatus, labels.deposit.processingSteps);
1177
- const selectedNetworkLabel = (_e = (_d = networkOptions.find((n) => n.value === walletChainId)) == null ? void 0 : _d.label) != null ? _e : "";
1178
- const resolvedSuccessSummary = __spreadValues({
1179
- amountReceived: `+${walletFlow.amount} ${walletToken}`,
1180
- network: selectedNetworkLabel,
1181
- fromWallet: walletFlow.walletLabel,
1182
- gasFee: ""
1183
- }, walletFlow.successSummary);
1184
- const handleWalletDepositNotification = useCallback(
1185
- (status, errorMessage) => {
1186
- if (notifiedWalletDepositStatusesRef.current.has(status)) return;
1187
- notifiedWalletDepositStatusesRef.current.add(status);
1188
- dispatchAggDepositNotification({
1189
- id: `wallet-${walletDepositAttemptIdRef.current}`,
1190
- status,
1191
- amount: walletFlow.amount,
1192
- tokenSymbol: walletToken || DEFAULT_WALLET_TOKEN,
1193
- errorMessage
1194
- });
1195
- },
1196
- [walletFlow.amount, walletToken]
1197
- );
1198
- useEffect3(() => {
1199
- if (step === "wallet-processing" && !isWalletSubmitting && walletFlow.transactionStatus === "settled") {
1200
- handleWalletDepositNotification("completed");
1201
- setStep("wallet-success");
1202
- }
1203
- }, [handleWalletDepositNotification, isWalletSubmitting, step, walletFlow.transactionStatus]);
1204
- useEffect3(() => {
1205
- if (!onCancelWalletDeposit) return;
1206
- if (step === "wallet-processing" && !isWalletSubmitting && walletFlow.transactionStatus === "error") {
1207
- walletSubmitInFlightRef.current = false;
1208
- handleWalletDepositNotification("failed", walletFlow.transactionErrorMessage);
1209
- onCancelWalletDeposit();
1210
- setStep("wallet-form");
1211
- }
1212
- }, [
1213
- handleWalletDepositNotification,
1214
- isWalletSubmitting,
1215
- onCancelWalletDeposit,
1216
- step,
1217
- walletFlow.transactionErrorMessage,
1218
- walletFlow.transactionStatus
1219
- ]);
1220
- const cardTokenOptions = withTokenIcons(
1221
- mergeSelectOptionsUnique(cardFlow == null ? void 0 : cardFlow.tokenOptions, DEFAULT_CURRENCY_OPTIONS)
1222
- );
1223
- const cardNetworkOptions = withNetworkIcons(
1224
- mergeSelectOptionsUnique(cardFlow == null ? void 0 : cardFlow.networkOptions, CARD_NETWORK_OPTIONS)
1225
- );
1226
- const handleSelectMethod = (method) => {
1227
- if (method === "wallet" && !isWeb3User) return;
1228
- if (!isReady && (method === "wallet" || method === "crypto")) return;
1229
- setHighlightedMethod(method);
1230
- onSelectDepositMethod == null ? void 0 : onSelectDepositMethod(method);
1231
- if (method === "wallet") {
1232
- setStep("wallet-form");
1233
- return;
1234
- }
1235
- if (method === "card") {
1236
- setStep("card-deposit");
1237
- } else if (method === "crypto") {
1238
- setStep("crypto-transfer");
1239
- }
1240
- };
1241
- const handleContinueCardDeposit = (amount) => __async(null, null, function* () {
1242
- var _a2, _b2, _c2, _d2, _e2;
1243
- onContinueCardDeposit == null ? void 0 : onContinueCardDeposit(amount);
1244
- setStep("card-provider");
1245
- if (onGetCardQuotes) {
1246
- setQuotesLoading(true);
1247
- setQuotesError(null);
1248
- setCardProviders([]);
1249
- try {
1250
- const providers = yield onGetCardQuotes({
1251
- sourceAmount: String(amount),
1252
- sourceCurrencyCode: (_a2 = cardFlow == null ? void 0 : cardFlow.currency) != null ? _a2 : "USD",
1253
- destinationCurrencyCode: (_d2 = (_c2 = NETWORK_TO_CURRENCY_CODE[(_b2 = cardFlow == null ? void 0 : cardFlow.selectedNetwork) != null ? _b2 : ""]) != null ? _c2 : cardFlow == null ? void 0 : cardFlow.selectedNetwork) != null ? _d2 : ""
1254
- });
1255
- setCardProviders(providers);
1256
- } catch (err) {
1257
- setQuotesError(err instanceof Error ? err.message : "Failed to load quotes");
1258
- } finally {
1259
- setQuotesLoading(false);
1260
- }
1261
- } else {
1262
- setCardProviders((_e2 = cardFlow == null ? void 0 : cardFlow.providers) != null ? _e2 : []);
1263
- }
1264
- });
1265
- const handleRetryQuotes = () => {
1266
- const amount = Number(cardFlow == null ? void 0 : cardFlow.amount) || 0;
1267
- if (amount > 0) {
1268
- handleContinueCardDeposit(amount);
1269
- }
1270
- };
1271
- const handleSelectProvider = (providerId) => __async(null, null, function* () {
1272
- var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j, _k, _l, _m;
1273
- onSelectCardProvider == null ? void 0 : onSelectCardProvider(providerId);
1274
- if (onCreateCardSession) {
1275
- setSessionError(null);
1276
- try {
1277
- const networkVal = (_a2 = cardFlow == null ? void 0 : cardFlow.selectedNetwork) != null ? _a2 : "";
1278
- const numericId = Number(networkVal);
1279
- const cardChainId = Number.isFinite(numericId) && numericId > 0 ? numericId : (_b2 = supportedChains == null ? void 0 : supportedChains.find((c) => c.name.toLowerCase() === networkVal.toLowerCase())) == null ? void 0 : _b2.chainId;
1280
- const depositAddr = (_c2 = getAddress(cardChainId)) != null ? _c2 : "";
1281
- const session = yield onCreateCardSession({
1282
- serviceProvider: providerId,
1283
- sourceAmount: (_d2 = cardFlow == null ? void 0 : cardFlow.amount) != null ? _d2 : "",
1284
- sourceCurrencyCode: (_e2 = cardFlow == null ? void 0 : cardFlow.currency) != null ? _e2 : "USD",
1285
- destinationCurrencyCode: (_f2 = NETWORK_TO_CURRENCY_CODE[networkVal]) != null ? _f2 : networkVal,
1286
- walletAddress: depositAddr,
1287
- redirectUrl: cardRedirectUrl
1288
- });
1289
- const selectedProvider = cardProviders.find((p) => p.id === providerId);
1290
- const networkLabel = (_j = (_i2 = (_h2 = (_g2 = cardFlow == null ? void 0 : cardFlow.networkOptions) == null ? void 0 : _g2.find((o) => o.value === (cardFlow == null ? void 0 : cardFlow.selectedNetwork))) == null ? void 0 : _h2.label) != null ? _i2 : cardFlow == null ? void 0 : cardFlow.selectedNetwork) != null ? _j : "";
1291
- savePendingCardSession({
1292
- sessionId: session.id,
1293
- summary: {
1294
- amountReceived: (_k = selectedProvider == null ? void 0 : selectedProvider.quote) != null ? _k : "",
1295
- network: networkLabel,
1296
- fees: (_l = selectedProvider == null ? void 0 : selectedProvider.fee) != null ? _l : ""
1297
- }
1298
- });
1299
- window.open(session.widgetUrl, "_blank", "noopener,noreferrer");
1300
- setPendingProviderName((_m = selectedProvider == null ? void 0 : selectedProvider.name) != null ? _m : providerId);
1301
- setPendingProviderWalletAddress(depositAddr);
1302
- setStep("card-payment-pending");
1303
- } catch (err) {
1304
- setSessionError(err instanceof Error ? err.message : "Failed to create session");
1305
- }
1306
- }
1307
- });
1308
- const handleViewActivity = () => {
1309
- onViewActivity == null ? void 0 : onViewActivity();
1310
- if (typeof window !== "undefined") {
1311
- window.location.href = "/profile?tab=activity";
1312
- }
1313
- };
1314
- const handleChooseAnotherProvider = () => {
1315
- setCardProviders([]);
1316
- setQuotesError(null);
1317
- setSessionError(null);
1318
- setPendingProviderName("");
1319
- setPendingProviderWalletAddress("");
1320
- setStep("card-deposit");
1321
- };
1322
- const handleDoneCryptoTransfer = () => {
1323
- onDoneCryptoTransfer == null ? void 0 : onDoneCryptoTransfer();
1324
- onDoneSendCrypto == null ? void 0 : onDoneSendCrypto();
1325
- };
1326
- const handleDoneWalletDeposit = () => {
1327
- handleOpenChange(false);
1328
- onDoneWalletDeposit == null ? void 0 : onDoneWalletDeposit();
1329
- };
1330
- const handleDoneCardPurchase = () => {
1331
- handleOpenChange(false);
1332
- onDoneCardPurchase == null ? void 0 : onDoneCardPurchase();
1333
- };
1334
- const handleOpenChange = (isOpen) => {
1335
- if (!isOpen) {
1336
- setStep("method");
1337
- setHighlightedMethod(defaultMethod);
1338
- setWalletChainId("");
1339
- setWalletToken("");
1340
- setSendChainId("");
1341
- setSendToken("");
1342
- walletSubmitInFlightRef.current = false;
1343
- walletDepositAttemptIdRef.current = 0;
1344
- notifiedWalletDepositStatusesRef.current = /* @__PURE__ */ new Set();
1345
- setIsWalletSubmitting(false);
1346
- setCardProviders([]);
1347
- setQuotesLoading(false);
1348
- setQuotesError(null);
1349
- setSessionError(null);
1350
- setPendingProviderName("");
1351
- setPendingProviderWalletAddress("");
1352
- clearPendingCardSession();
1353
- }
1354
- onOpenChange(isOpen);
1355
- };
1356
- const depositModalMaxWidth = step === "method" ? "600px" : "480px";
1357
- return /* @__PURE__ */ jsx11(Modal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs11(Modal.Container, { maxWidth: depositModalMaxWidth, "aria-label": "Deposit", children: [
1358
- step === "method" ? /* @__PURE__ */ jsx11(
1359
- DepositMethodStep,
1360
- {
1361
- balance: walletFlow.balance,
1362
- walletLabel: walletFlow.walletLabel,
1363
- walletBalance: walletFlow.walletBalance,
1364
- walletToken,
1365
- isWalletBalanceLoading: walletFlow.isWalletBalanceLoading,
1366
- showWalletMethod: isWeb3User,
1367
- highlightedMethod,
1368
- depositAddressesReady: isReady,
1369
- onSelectMethod: handleSelectMethod
1370
- }
1371
- ) : null,
1372
- step === "wallet-form" ? /* @__PURE__ */ jsx11(
1373
- WalletFormStep,
1374
- {
1375
- walletLabel: walletFlow.walletLabel,
1376
- walletBalance: walletFlow.walletBalance,
1377
- isBalanceLoading: walletFlow.isWalletBalanceLoading,
1378
- tokenOptions: walletTokenOptions,
1379
- networkOptions: walletNetworkOptions,
1380
- selectedToken: walletToken,
1381
- selectedNetwork: walletChainId,
1382
- amount: walletFlow.amount,
1383
- formErrorMessage: walletFlow.formErrorMessage,
1384
- formErrorTone: walletFlow.formErrorTone,
1385
- estimatedReceive: walletFlow.estimatedReceive,
1386
- feeEstimate: walletFlow.feeEstimate,
1387
- eta: walletFlow.eta,
1388
- isSubmitting: isWalletSubmitting,
1389
- onBack: () => setStep("method"),
1390
- onTokenChange: setWalletToken,
1391
- onNetworkChange: (id) => {
1392
- setWalletChainId(id);
1393
- setWalletToken("");
1394
- },
1395
- onAmountChange: onWalletAmountChange,
1396
- onMax: onWalletMax,
1397
- onConfirm: () => __async(null, null, function* () {
1398
- var _a2, _b2;
1399
- if (walletSubmitInFlightRef.current) return;
1400
- walletSubmitInFlightRef.current = true;
1401
- walletDepositAttemptIdRef.current += 1;
1402
- notifiedWalletDepositStatusesRef.current = /* @__PURE__ */ new Set();
1403
- setIsWalletSubmitting(true);
1404
- setStep("wallet-processing");
1405
- const walletChainIdNum = walletChainId ? Number(walletChainId) : void 0;
1406
- const address = (_a2 = getAddress(walletChainIdNum)) != null ? _a2 : "";
1407
- try {
1408
- if (walletActions == null ? void 0 : walletActions.sendToken) {
1409
- const chain = supportedChains == null ? void 0 : supportedChains.find((c) => String(c.chainId) === walletChainId);
1410
- const tokenMeta = chain == null ? void 0 : chain.tokens.find((t) => t.symbol === walletToken);
1411
- yield walletActions.sendToken({
1412
- chainId: walletChainIdNum != null ? walletChainIdNum : 0,
1413
- token: {
1414
- symbol: walletToken,
1415
- address: tokenMeta == null ? void 0 : tokenMeta.address,
1416
- decimals: (_b2 = tokenMeta == null ? void 0 : tokenMeta.decimals) != null ? _b2 : 6
1417
- },
1418
- to: address,
1419
- amount: walletFlow.amount
1420
- });
1421
- } else {
1422
- yield onConfirmWalletDeposit == null ? void 0 : onConfirmWalletDeposit({
1423
- address,
1424
- amount: walletFlow.amount,
1425
- chainId: walletChainIdNum != null ? walletChainIdNum : 0,
1426
- token: walletToken
1427
- });
1428
- }
1429
- } catch (e) {
1430
- walletSubmitInFlightRef.current = false;
1431
- setStep("wallet-form");
1432
- } finally {
1433
- setIsWalletSubmitting(false);
1434
- }
1435
- })
1436
- }
1437
- ) : null,
1438
- step === "wallet-processing" ? /* @__PURE__ */ jsx11(
1439
- WalletProcessingStep,
1440
- {
1441
- steps: processingSteps,
1442
- errorMessage: walletFlow.transactionStatus === "error" ? (_f = walletFlow.transactionErrorMessage) != null ? _f : "Something went wrong with the transaction." : void 0,
1443
- onComplete: () => setStep("wallet-success")
1444
- }
1445
- ) : null,
1446
- step === "wallet-success" ? /* @__PURE__ */ jsx11(
1447
- WalletSuccessStep,
1448
- {
1449
- summary: resolvedSuccessSummary,
1450
- onDone: handleDoneWalletDeposit,
1451
- onClose: () => handleOpenChange(false)
1452
- }
1453
- ) : null,
1454
- step === "card-deposit" && cardFlow ? /* @__PURE__ */ jsx11(
1455
- CardDepositStep,
1456
- {
1457
- amount: cardFlow.amount,
1458
- currency: cardFlow.currency,
1459
- tokenOptions: cardTokenOptions,
1460
- networkOptions: cardNetworkOptions,
1461
- selectedToken: cardFlow.selectedToken,
1462
- selectedNetwork: cardFlow.selectedNetwork,
1463
- minAmount: cardFlow.minAmount,
1464
- onBack: () => setStep("method"),
1465
- onAmountChange: onCardAmountChange != null ? onCardAmountChange : ignoreCardChange,
1466
- onCurrencyChange: onCardCurrencyChange != null ? onCardCurrencyChange : ignoreCardChange,
1467
- onTokenChange: onCardTokenChange != null ? onCardTokenChange : ignoreCardChange,
1468
- onNetworkChange: onCardNetworkChange != null ? onCardNetworkChange : ignoreCardChange,
1469
- onContinue: handleContinueCardDeposit
1470
- }
1471
- ) : null,
1472
- step === "card-provider" && cardFlow ? /* @__PURE__ */ jsx11(
1473
- CardProviderStep,
1474
- {
1475
- amount: cardFlow.amount,
1476
- currency: cardFlow.currency,
1477
- token: cardFlow.selectedToken,
1478
- providers: cardProviders,
1479
- isLoading: quotesLoading,
1480
- error: quotesError,
1481
- sessionError,
1482
- onBack: () => setStep("card-deposit"),
1483
- onSelectProvider: handleSelectProvider,
1484
- onRetry: handleRetryQuotes
1485
- }
1486
- ) : null,
1487
- step === "card-payment-pending" ? /* @__PURE__ */ jsx11(
1488
- CardPaymentPendingStep,
1489
- {
1490
- providerName: pendingProviderName,
1491
- walletAddress: pendingProviderWalletAddress || void 0,
1492
- onClose: () => handleOpenChange(false),
1493
- onViewActivity: handleViewActivity,
1494
- onChooseAnotherProvider: handleChooseAnotherProvider
1495
- }
1496
- ) : null,
1497
- step === "card-success" ? /* @__PURE__ */ jsx11(
1498
- CardPurchaseSuccessStep,
1499
- {
1500
- summary: (_g = pendingCardPurchaseSummary != null ? pendingCardPurchaseSummary : cardFlow == null ? void 0 : cardFlow.purchaseSummary) != null ? _g : {
1501
- amountReceived: "",
1502
- network: "",
1503
- fees: ""
1504
- },
1505
- onClose: () => handleOpenChange(false),
1506
- onDone: handleDoneCardPurchase
1507
- }
1508
- ) : null,
1509
- step === "crypto-transfer" ? /* @__PURE__ */ jsx11(
1510
- CryptoTransferStep,
1511
- {
1512
- tokenOptions: sendTokenOptions,
1513
- networkOptions,
1514
- selectedToken: sendToken,
1515
- selectedNetwork: sendChainId,
1516
- depositAddress,
1517
- minDeposit: (_h = sendCryptoConfig == null ? void 0 : sendCryptoConfig.minDeposit) != null ? _h : "$1",
1518
- eta: (_i = sendCryptoConfig == null ? void 0 : sendCryptoConfig.eta) != null ? _i : "~30s",
1519
- isLoadingAddress,
1520
- addressError,
1521
- onBack: () => setStep("method"),
1522
- onTokenChange: setSendToken,
1523
- onNetworkChange: (id) => {
1524
- setSendChainId(id);
1525
- if (id !== sendChainId) {
1526
- setSendToken("");
1527
- }
1528
- },
1529
- onDone: handleDoneCryptoTransfer
1530
- }
1531
- ) : null
1532
- ] }) });
1533
- }
1534
- var ignoreCardChange = (_value) => {
1535
- };
1536
- var DepositModal = (props) => {
1537
- if (!isControlledDepositModalProps(props)) {
1538
- return /* @__PURE__ */ jsx11(DepositModalSelfDriven, __spreadValues({}, props));
1539
- }
1540
- return /* @__PURE__ */ jsx11(DepositModalControlled, __spreadValues({}, props));
1541
- };
1542
- DepositModal.displayName = "DepositModal";
1543
-
1544
- // src/paper-trading/paper-trading-badge.tsx
1545
- import { useLabels as useLabels11, useResolvedExecutionMode } from "@agg-build/hooks";
1546
- import { jsx as jsx12 } from "react/jsx-runtime";
1547
- var PaperTradingBadge = ({
1548
- placement = "chip",
1549
- isAuthenticated = false,
1550
- forceVisible = false,
1551
- label,
1552
- showWhenAuthenticated = false,
1553
- classNames
1554
- }) => {
1555
- const labels = useLabels11();
1556
- const { isPaperMode, isResolving } = useResolvedExecutionMode();
1557
- if (!forceVisible && (isResolving || !isPaperMode)) return null;
1558
- if (placement === "brand" && isAuthenticated && !forceVisible && !showWhenAuthenticated) {
1559
- return null;
1560
- }
1561
- const placementClassName = {
1562
- brand: "inline-flex md:hidden",
1563
- chip: "inline-flex",
1564
- signedOut: "hidden md:inline-flex"
1565
- }[placement];
1566
- return /* @__PURE__ */ jsx12(
1567
- Tooltip,
1568
- {
1569
- content: labels.paperTrading.badgeTooltip,
1570
- side: "bottom",
1571
- sideOffset: 3,
1572
- size: "small",
1573
- classNames: {
1574
- content: cn(
1575
- // Figma node 4772:31068: 253px wide, 12/8 padding, 12px/16px text,
1576
- // centred — which lands the copy on exactly two lines. The `!`
1577
- // suffixes are required because `cn` is a plain join, not
1578
- // tailwind-merge, so conflicting utilities from tooltipSizeClasses
1579
- // would otherwise win on stylesheet order rather than call order.
1580
- "max-w-[253px]! px-3! py-2! text-agg-xs! leading-agg-4! text-center",
1581
- classNames == null ? void 0 : classNames.tooltip
1582
- )
1583
- },
1584
- children: /* @__PURE__ */ jsx12(
1585
- "span",
1586
- {
1587
- className: cn("agg-paper-trading-badge items-center", placementClassName, classNames == null ? void 0 : classNames.root),
1588
- "data-testid": "agg-paper-trading-badge",
1589
- "data-placement": placement,
1590
- children: /* @__PURE__ */ jsx12(
1591
- "span",
1592
- {
1593
- className: cn(
1594
- "inline-flex items-center justify-center rounded-full",
1595
- "px-3 py-1",
1596
- // Mobile pins an explicit 24px (Figma 4772:34209); from md the
1597
- // height falls out of padding + line-height at 22px, matching the
1598
- // in-chip pill (4772:31077).
1599
- "h-6 md:h-auto",
1600
- "bg-agg-primary/10 text-agg-primary",
1601
- "text-[10px] leading-[14px] font-agg-bold uppercase whitespace-nowrap",
1602
- classNames == null ? void 0 : classNames.pill
1603
- ),
1604
- children: label != null ? label : labels.paperTrading.badge
1605
- }
1606
- )
1607
- }
1608
- )
1609
- }
1610
- );
1611
- };
1612
- PaperTradingBadge.displayName = "PaperTradingBadge";
1613
-
1614
- // src/paper-trading/paper-trading-onboarding.tsx
1615
- import { useAppConfig, usePaperOnboarding } from "@agg-build/hooks";
1616
-
1617
- // src/paper-trading/paper-onboarding-modal.tsx
1618
- import { useCallback as useCallback2, useMemo as useMemo2, useState as useState3 } from "react";
1619
- import { useLabels as useLabels12 } from "@agg-build/hooks";
1620
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1621
- var PaperOnboardingModal = ({
1622
- open,
1623
- onDismiss,
1624
- startingBalanceLabel,
1625
- classNames
1626
- }) => {
1627
- const labels = useLabels12();
1628
- const copy = labels.paperTrading.onboarding;
1629
- const [stepIndex, setStepIndex] = useState3(0);
1630
- const steps = useMemo2(
1631
- () => [
1632
- {
1633
- key: "realMarkets",
1634
- icon: "paper-onboarding-markets",
1635
- title: copy.realMarkets.title,
1636
- body: copy.realMarkets.body
1637
- },
1638
- {
1639
- key: "zeroRisk",
1640
- icon: "paper-onboarding-funds",
1641
- title: copy.zeroRisk.title,
1642
- body: copy.zeroRisk.body({ amount: startingBalanceLabel })
1643
- },
1644
- {
1645
- key: "readyToTrade",
1646
- icon: "paper-onboarding-performance",
1647
- title: copy.readyToTrade.title,
1648
- body: copy.readyToTrade.body
1649
- }
1650
- ],
1651
- [copy, startingBalanceLabel]
1652
- );
1653
- const total = steps.length;
1654
- const isFirst = stepIndex === 0;
1655
- const isLast = stepIndex === total - 1;
1656
- const step = steps[stepIndex];
1657
- const handleBack = useCallback2(() => {
1658
- setStepIndex((current) => Math.max(0, current - 1));
1659
- }, []);
1660
- const handleNext = useCallback2(() => {
1661
- if (isLast) {
1662
- onDismiss();
1663
- return;
1664
- }
1665
- setStepIndex((current) => Math.min(total - 1, current + 1));
1666
- }, [isLast, onDismiss, total]);
1667
- const handleOpenChange = useCallback2(
1668
- (next) => {
1669
- if (next) return;
1670
- setStepIndex(0);
1671
- onDismiss();
1672
- },
1673
- [onDismiss]
1674
- );
1675
- return /* @__PURE__ */ jsx13(Modal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsx13(
1676
- Modal.Container,
1677
- {
1678
- maxWidth: "480px",
1679
- "aria-label": step.title,
1680
- classNames: {
1681
- overlay: classNames == null ? void 0 : classNames.overlay,
1682
- // Figma 4772:33889 keeps this as a centred, inset card on mobile
1683
- // (352px inside a 400px frame) rather than the modal default of a
1684
- // full-bleed bottom sheet. 24px inset matches the frame's margins.
1685
- center: "items-center! p-6!",
1686
- // Figma 4772:31183 is ONE 480px surface with a 12px radius. The
1687
- // container already supplies the border, background and width, so
1688
- // the inner element must not draw a second bordered card inside it
1689
- // — that rendered as a double outline and shrank the card to 478px.
1690
- // Only the radius needs overriding, from the container's default 16.
1691
- container: cn("rounded-agg-xl! md:rounded-agg-xl!", classNames == null ? void 0 : classNames.card)
1692
- },
1693
- children: /* @__PURE__ */ jsxs12("div", { className: cn("agg-paper-onboarding", "flex w-full flex-col gap-5 p-6"), children: [
1694
- /* @__PURE__ */ jsxs12("div", { className: "flex w-full items-start justify-center gap-5", children: [
1695
- /* @__PURE__ */ jsx13(
1696
- "div",
1697
- {
1698
- className: cn(
1699
- "flex size-11 shrink-0 items-center justify-center overflow-hidden",
1700
- "rounded-agg-lg bg-agg-primary/10 text-agg-primary",
1701
- classNames == null ? void 0 : classNames.icon
1702
- ),
1703
- children: /* @__PURE__ */ jsx13(Icon, { name: step.icon, className: "!h-6 !w-6", "aria-hidden": "true" })
1704
- }
1705
- ),
1706
- /* @__PURE__ */ jsxs12("div", { className: "flex min-w-0 flex-1 flex-col gap-2 break-words", children: [
1707
- /* @__PURE__ */ jsxs12("div", { className: "flex flex-col gap-1", children: [
1708
- /* @__PURE__ */ jsx13(
1709
- "p",
1710
- {
1711
- className: cn(
1712
- // Figma node 4772:31190: 10px / 14px bold uppercase.
1713
- // NOT `agg-type-label-caps`, which is 14px / 20px.
1714
- "text-agg-2xs leading-agg-14 font-agg-bold uppercase",
1715
- "text-agg-muted-foreground",
1716
- classNames == null ? void 0 : classNames.eyebrow
1717
- ),
1718
- children: copy.stepEyebrow({ current: stepIndex + 1, total })
1719
- }
1720
- ),
1721
- /* @__PURE__ */ jsx13(
1722
- "p",
1723
- {
1724
- className: cn(
1725
- "text-agg-base leading-agg-6 font-agg-bold text-agg-foreground",
1726
- classNames == null ? void 0 : classNames.title
1727
- ),
1728
- children: step.title
1729
- }
1730
- )
1731
- ] }),
1732
- /* @__PURE__ */ jsx13("p", { className: cn("text-agg-sm leading-agg-5 text-agg-foreground", classNames == null ? void 0 : classNames.body), children: step.body })
1733
- ] })
1734
- ] }),
1735
- /* @__PURE__ */ jsxs12("div", { className: cn("flex w-full items-center justify-between", classNames == null ? void 0 : classNames.footer), children: [
1736
- /* @__PURE__ */ jsx13("div", { className: cn("flex items-center gap-1", classNames == null ? void 0 : classNames.dots), "aria-hidden": "true", children: steps.map((dotStep, index) => /* @__PURE__ */ jsx13(
1737
- "span",
1738
- {
1739
- className: cn(
1740
- "rounded-full transition-all",
1741
- index === stepIndex ? "h-1 w-4 bg-agg-primary" : "size-1 bg-agg-separator"
1742
- )
1743
- },
1744
- dotStep.key
1745
- )) }),
1746
- /* @__PURE__ */ jsxs12("div", { className: "flex items-start gap-3", children: [
1747
- /* @__PURE__ */ jsx13(
1748
- Button,
1749
- {
1750
- variant: "secondary",
1751
- size: "small",
1752
- onClick: isFirst ? onDismiss : handleBack,
1753
- className: "w-20 rounded-full",
1754
- children: isFirst ? copy.skip : copy.back
1755
- }
1756
- ),
1757
- /* @__PURE__ */ jsx13(
1758
- Button,
1759
- {
1760
- variant: "primary",
1761
- size: "small",
1762
- onClick: handleNext,
1763
- className: "w-[120px] rounded-full",
1764
- children: isLast ? copy.done : copy.next
1765
- }
1766
- )
1767
- ] })
1768
- ] })
1769
- ] })
1770
- }
1771
- ) });
1772
- };
1773
- PaperOnboardingModal.displayName = "PaperOnboardingModal";
1774
-
1775
- // src/paper-trading/paper-trading-onboarding.tsx
1776
- import { jsx as jsx14 } from "react/jsx-runtime";
1777
- var FALLBACK_STARTING_BALANCE = 1e4;
1778
- var PaperTradingOnboarding = ({
1779
- classNames
1780
- }) => {
1781
- const { isOpen, dismiss } = usePaperOnboarding();
1782
- const { paperStartingBalance } = useAppConfig();
1783
- if (!isOpen) return null;
1784
- return /* @__PURE__ */ jsx14(
1785
- PaperOnboardingModal,
1786
- {
1787
- open: true,
1788
- onDismiss: dismiss,
1789
- startingBalanceLabel: formatUsd(paperStartingBalance != null ? paperStartingBalance : FALLBACK_STARTING_BALANCE, {
1790
- maximumFractionDigits: 0
1791
- }),
1792
- classNames
1793
- }
1794
- );
1795
- };
1796
- PaperTradingOnboarding.displayName = "PaperTradingOnboarding";
1797
-
1798
- // src/profile/index.tsx
1799
- import { useState as useState4, useEffect as useEffect4, useCallback as useCallback4, useMemo as useMemo4 } from "react";
1800
- import { useAggClient, useAggAuthState as useAggAuthState2, useVenueKeyStatus } from "@agg-build/hooks";
1801
- import { Venue } from "@agg-build/sdk";
1802
-
1803
- // src/profile/profile-modal.constants.ts
1804
- var PROFILE_TAB_KEYS = {
1805
- PROFILE_ACCOUNTS: "profile-accounts",
1806
- TRADING_ACCESS: "trading-access"
1807
- };
1808
- var getProfileTabItems = () => [
1809
- {
1810
- value: PROFILE_TAB_KEYS.PROFILE_ACCOUNTS,
1811
- label: "Profile & accounts",
1812
- icon: "profile-about-tab"
1813
- },
1814
- { value: PROFILE_TAB_KEYS.TRADING_ACCESS, label: "Trading access", icon: "shield-trust" }
1815
- ];
1816
-
1817
- // src/profile/tabs/about-tab.tsx
1818
- import { useCallback as useCallback3, useRef as useRef2 } from "react";
1819
- import { useLabels as useLabels13 } from "@agg-build/hooks";
1820
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
1821
- var AboutTab = ({
1822
- avatarPreview,
1823
- onDeleteProfile: _onDeleteProfile,
1824
- draftUsername,
1825
- onDraftUsernameChange,
1826
- onDraftAvatarChange,
1827
- draftAvatarPreview,
1828
- avatarError: _avatarError
1829
- }) => {
1830
- const labels = useLabels13();
1831
- const fileInputRef = useRef2(null);
1832
- const handleAvatarClick = useCallback3(() => {
1833
- var _a;
1834
- (_a = fileInputRef.current) == null ? void 0 : _a.click();
1835
- }, []);
1836
- const handleFileChange = useCallback3(
1837
- (e) => {
1838
- var _a;
1839
- const file = (_a = e.target.files) == null ? void 0 : _a[0];
1840
- if (!file) return;
1841
- const reader = new FileReader();
1842
- reader.onload = (event) => {
1843
- var _a2;
1844
- onDraftAvatarChange(file, (_a2 = event.target) == null ? void 0 : _a2.result);
1845
- };
1846
- reader.readAsDataURL(file);
1847
- },
1848
- [onDraftAvatarChange]
1849
- );
1850
- const resolvedPreview = draftAvatarPreview != null ? draftAvatarPreview : avatarPreview;
1851
- const hasAvatarPreview = Boolean(resolvedPreview);
1852
- return /* @__PURE__ */ jsx15("div", { className: "agg-profile-about flex flex-col gap-8", children: /* @__PURE__ */ jsxs13("div", { className: "agg-profile-avatar-section flex w-full items-center gap-6", children: [
1853
- /* @__PURE__ */ jsxs13(
1854
- "button",
1855
- {
1856
- type: "button",
1857
- onClick: handleAvatarClick,
1858
- className: cn(
1859
- "agg-profile-avatar-trigger",
1860
- "group relative flex items-center justify-center self-start",
1861
- "h-[80px] w-[80px]",
1862
- "rounded-agg-full",
1863
- "bg-agg-secondary-hover",
1864
- !hasAvatarPreview && "hover:bg-agg-tertiary",
1865
- "transition-colors cursor-pointer",
1866
- "overflow-hidden"
1867
- ),
1868
- "aria-label": labels.onboarding.profileSetup.uploadProfilePictureAria,
1869
- children: [
1870
- !hasAvatarPreview ? /* @__PURE__ */ jsx15(
1871
- "svg",
1872
- {
1873
- "aria-hidden": true,
1874
- viewBox: "0 0 80 80",
1875
- className: "pointer-events-none absolute inset-0 h-full w-full text-agg-separator group-hover:text-agg-muted-foreground",
1876
- children: /* @__PURE__ */ jsx15(
1877
- "circle",
1878
- {
1879
- cx: "40",
1880
- cy: "40",
1881
- r: "39.5",
1882
- fill: "none",
1883
- stroke: "currentColor",
1884
- strokeWidth: "1",
1885
- strokeDasharray: "8 8"
1886
- }
1887
- )
1888
- }
1889
- ) : null,
1890
- resolvedPreview ? /* @__PURE__ */ jsx15(
1891
- RemoteImage,
1892
- {
1893
- src: resolvedPreview,
1894
- alt: labels.onboarding.profileSetup.profilePreviewAlt,
1895
- className: "h-full w-full object-cover"
1896
- }
1897
- ) : /* @__PURE__ */ jsx15(Icon, { name: "profile", className: "h-7 w-7 text-agg-muted-foreground" })
1898
- ]
1899
- }
1900
- ),
1901
- /* @__PURE__ */ jsx15(
1902
- "input",
1903
- {
1904
- ref: fileInputRef,
1905
- type: "file",
1906
- accept: "image/*",
1907
- onChange: handleFileChange,
1908
- className: "hidden",
1909
- "aria-hidden": "true"
1910
- }
1911
- ),
1912
- /* @__PURE__ */ jsxs13("div", { className: "agg-form-section flex min-w-0 flex-1 flex-col gap-2", children: [
1913
- /* @__PURE__ */ jsx15(
1914
- "label",
1915
- {
1916
- htmlFor: "profile-username",
1917
- className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground",
1918
- children: "Username"
1919
- }
1920
- ),
1921
- /* @__PURE__ */ jsx15(
1922
- "input",
1923
- {
1924
- id: "profile-username",
1925
- type: "text",
1926
- placeholder: "e.g. CryptoJohn",
1927
- value: draftUsername,
1928
- onChange: (e) => onDraftUsernameChange(e.target.value),
1929
- className: cn(
1930
- "h-10 w-full px-3 py-2.5",
1931
- "rounded-agg-sm",
1932
- "border border-agg-separator",
1933
- "bg-agg-secondary text-agg-foreground",
1934
- "placeholder:text-agg-muted-foreground",
1935
- "outline-none",
1936
- "focus:border-agg-primary focus:ring-1 focus:ring-agg-primary",
1937
- "transition-colors",
1938
- "text-agg-sm sm:text-agg-base"
1939
- )
1940
- }
1941
- )
1942
- ] })
1943
- ] }) });
1944
- };
1945
- AboutTab.displayName = "AboutTab";
1946
-
1947
- // src/profile/tabs/accounts-wallets-tab.tsx
1948
- import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
1949
- var SectionTitle = ({ children }) => /* @__PURE__ */ jsx16("h3", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children });
1950
- var AccountRow = ({ children, className }) => /* @__PURE__ */ jsx16(
1951
- "div",
1952
- {
1953
- className: cn(
1954
- "flex h-12 items-center justify-between",
1955
- "rounded-agg-lg border border-agg-separator bg-agg-secondary",
1956
- "px-5",
1957
- className
1958
- ),
1959
- children
1960
- }
1961
- );
1962
- var AccountIdentity = ({
1963
- icon,
1964
- label,
1965
- iconClassName
1966
- }) => /* @__PURE__ */ jsxs14("div", { className: "flex min-w-0 items-center gap-3", children: [
1967
- /* @__PURE__ */ jsx16("span", { className: cn("flex h-5 w-5 shrink-0 items-center justify-center", iconClassName), children: /* @__PURE__ */ jsx16(Icon, { name: icon, size: "small", color: "currentColor" }) }),
1968
- /* @__PURE__ */ jsx16("span", { className: "truncate text-agg-base font-agg-normal leading-6 text-agg-foreground", children: label })
1969
- ] });
1970
- var ConnectTextButton = ({ onClick }) => /* @__PURE__ */ jsx16(
1971
- "button",
1972
- {
1973
- type: "button",
1974
- onClick,
1975
- className: "shrink-0 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-primary whitespace-nowrap",
1976
- children: "Connect"
1977
- }
1978
- );
1979
- var DisconnectTextButton = ({ onClick }) => /* @__PURE__ */ jsx16(
1980
- "button",
1981
- {
1982
- type: "button",
1983
- onClick,
1984
- className: "shrink-0 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-muted-foreground whitespace-nowrap",
1985
- children: "Disconnect"
1986
- }
1987
- );
1988
- var VerifiedBadge = () => /* @__PURE__ */ jsx16(Icon, { name: "check-badge", size: "small", color: "var(--agg-color-primary, #536dfe)" });
1989
- var getWalletIconName = (wallet) => {
1990
- const chain = wallet.chain.toLowerCase();
1991
- if (chain === "solana" || chain === "svm") {
1992
- return "solana";
1993
- }
1994
- return "ethereum";
1995
- };
1996
- var ConnectedAccountRow = ({
1997
- icon,
1998
- label,
1999
- connectedLabel,
2000
- connected,
2001
- iconClassName,
2002
- onConnect,
2003
- onDisconnect
2004
- }) => {
2005
- const displayLabel = connected ? connectedLabel != null ? connectedLabel : label : label;
2006
- return /* @__PURE__ */ jsxs14(AccountRow, { className: "agg-social-account-row gap-4", children: [
2007
- /* @__PURE__ */ jsxs14("div", { className: "flex min-w-0 items-center gap-3", children: [
2008
- /* @__PURE__ */ jsx16(AccountIdentity, { icon, label: displayLabel, iconClassName }),
2009
- connected ? /* @__PURE__ */ jsx16(VerifiedBadge, {}) : null
2010
- ] }),
2011
- connected ? /* @__PURE__ */ jsx16(DisconnectTextButton, { onClick: onDisconnect }) : /* @__PURE__ */ jsx16(ConnectTextButton, { onClick: onConnect })
2012
- ] });
2013
- };
2014
- var AccountsWalletsTab = ({
2015
- socialAccounts,
2016
- email,
2017
- wallets = [],
2018
- onConnectTwitter,
2019
- onDisconnectTwitter,
2020
- onConnectGoogle,
2021
- onDisconnectGoogle,
2022
- onConnectApple,
2023
- onDisconnectApple,
2024
- onConnectEmail
2025
- }) => {
2026
- const twitter = socialAccounts == null ? void 0 : socialAccounts.twitter;
2027
- const google = socialAccounts == null ? void 0 : socialAccounts.google;
2028
- const apple = socialAccounts == null ? void 0 : socialAccounts.apple;
2029
- const hasEmail = Boolean(email);
2030
- return /* @__PURE__ */ jsxs14("div", { className: "agg-accounts-wallets-tab flex flex-col gap-6", children: [
2031
- /* @__PURE__ */ jsxs14("div", { className: "agg-social-accounts-section flex flex-col gap-3", children: [
2032
- /* @__PURE__ */ jsx16(SectionTitle, { children: "Connected accounts" }),
2033
- /* @__PURE__ */ jsxs14("div", { className: "agg-social-accounts-list flex flex-col gap-4", children: [
2034
- /* @__PURE__ */ jsx16(
2035
- ConnectedAccountRow,
2036
- {
2037
- icon: "google",
2038
- iconClassName: "text-agg-foreground",
2039
- label: "Google",
2040
- connected: google == null ? void 0 : google.connected,
2041
- connectedLabel: google == null ? void 0 : google.handle,
2042
- onConnect: onConnectGoogle,
2043
- onDisconnect: onDisconnectGoogle
2044
- }
2045
- ),
2046
- /* @__PURE__ */ jsx16(
2047
- ConnectedAccountRow,
2048
- {
2049
- icon: "apple",
2050
- iconClassName: "text-agg-foreground",
2051
- label: "Apple",
2052
- connected: apple == null ? void 0 : apple.connected,
2053
- connectedLabel: apple == null ? void 0 : apple.handle,
2054
- onConnect: onConnectApple,
2055
- onDisconnect: onDisconnectApple
2056
- }
2057
- ),
2058
- /* @__PURE__ */ jsx16(
2059
- ConnectedAccountRow,
2060
- {
2061
- icon: "twitter",
2062
- iconClassName: "text-agg-foreground",
2063
- label: "X (Twitter)",
2064
- connected: twitter == null ? void 0 : twitter.connected,
2065
- connectedLabel: twitter == null ? void 0 : twitter.handle,
2066
- onConnect: onConnectTwitter,
2067
- onDisconnect: onDisconnectTwitter
2068
- }
2069
- ),
2070
- /* @__PURE__ */ jsx16(
2071
- ConnectedAccountRow,
2072
- {
2073
- icon: "email",
2074
- iconClassName: "text-agg-foreground",
2075
- label: "Email address",
2076
- connected: hasEmail,
2077
- connectedLabel: email != null ? email : void 0,
2078
- onConnect: onConnectEmail
2079
- }
2080
- )
2081
- ] })
2082
- ] }),
2083
- wallets.length > 0 ? /* @__PURE__ */ jsxs14("div", { className: "agg-wallets-section flex flex-col gap-3", children: [
2084
- /* @__PURE__ */ jsx16(SectionTitle, { children: "Wallets" }),
2085
- /* @__PURE__ */ jsx16("div", { className: "flex flex-col gap-2", children: wallets.map((wallet) => {
2086
- var _a;
2087
- return /* @__PURE__ */ jsx16(AccountRow, { className: "gap-4", children: /* @__PURE__ */ jsxs14("div", { className: "flex min-w-0 items-center gap-3", children: [
2088
- /* @__PURE__ */ jsx16(
2089
- AccountIdentity,
2090
- {
2091
- icon: getWalletIconName(wallet),
2092
- iconClassName: "text-agg-foreground",
2093
- label: (_a = wallet.displayAddress) != null ? _a : wallet.address
2094
- }
2095
- ),
2096
- /* @__PURE__ */ jsx16(VerifiedBadge, {})
2097
- ] }) }, `${wallet.chain}:${wallet.address}`);
2098
- }) })
2099
- ] }) : null
2100
- ] });
2101
- };
2102
- AccountsWalletsTab.displayName = "AccountsWalletsTab";
2103
-
2104
- // src/profile/tabs/trading-access-tab.tsx
2105
- import {
2106
- getVenueAvailabilityState,
2107
- getVisibleVenuesByConfig,
2108
- useAppConfig as useAppConfig2,
2109
- useGeoBlock,
2110
- useLabels as useLabels14
2111
- } from "@agg-build/hooks";
2112
- import { useMemo as useMemo3 } from "react";
2113
- import { jsx as jsx17, jsxs as jsxs15 } from "react/jsx-runtime";
2114
- var TRADING_ACCESS_VENUES = [
2115
- "kalshi",
2116
- "betdex",
2117
- "tiprun",
2118
- "polymarket",
2119
- "opinion",
2120
- "probable",
2121
- "limitless",
2122
- "predict",
2123
- "myriad",
2124
- "hyperliquid",
2125
- "novig",
2126
- "prophetx",
2127
- "pred"
2128
- ];
2129
- var TRADING_ACCESS_VENUE_ITEMS = TRADING_ACCESS_VENUES.map((id) => ({ id }));
2130
- var SectionTitle2 = ({ children }) => /* @__PURE__ */ jsx17("h3", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children });
2131
- var AccessRow = ({ children }) => /* @__PURE__ */ jsx17(
2132
- "div",
2133
- {
2134
- className: cn(
2135
- "flex h-12 items-center justify-between gap-4",
2136
- "rounded-agg-lg border border-agg-separator bg-agg-secondary",
2137
- "px-5"
2138
- ),
2139
- children
2140
- }
2141
- );
2142
- var AvailableStatus = () => {
2143
- const labels = useLabels14();
2144
- return /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
2145
- /* @__PURE__ */ jsx17(Icon, { name: "check-badge", size: "small", className: "text-agg-primary" }),
2146
- /* @__PURE__ */ jsx17("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-foreground whitespace-nowrap", children: labels.trading.tradingAccessAvailable })
2147
- ] });
2148
- };
2149
- var GeoblockedStatus = () => {
2150
- const labels = useLabels14();
2151
- return /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2 text-agg-muted-foreground", children: [
2152
- /* @__PURE__ */ jsx17(Icon, { name: "warning-filled", size: "small", color: "currentColor" }),
2153
- /* @__PURE__ */ jsx17("span", { className: "text-agg-sm font-agg-normal leading-agg-5 whitespace-nowrap", children: labels.trading.venueUnavailableInRegion })
2154
- ] });
2155
- };
2156
- var TradingAccessTab = ({
2157
- venueAccounts,
2158
- onConnectKalshi,
2159
- onDisconnectKalshi,
2160
- onConfigureBetdex
2161
- }) => {
2162
- var _a;
2163
- const labels = useLabels14();
2164
- const { disabledVenues, isLoading: isAppConfigLoading } = useAppConfig2();
2165
- const { isLocationBlocked } = useGeoBlock();
2166
- const hasBetdexAccount = (_a = venueAccounts == null ? void 0 : venueAccounts.some((account) => account.venue === "betdex")) != null ? _a : false;
2167
- const visibleVenues = useMemo3(() => {
2168
- const visible = getVisibleVenuesByConfig(TRADING_ACCESS_VENUE_ITEMS, disabledVenues);
2169
- return TRADING_ACCESS_VENUE_ITEMS.filter(
2170
- (item) => visible.includes(item) || item.id === "betdex" && hasBetdexAccount
2171
- );
2172
- }, [disabledVenues, hasBetdexAccount]);
2173
- return /* @__PURE__ */ jsxs15("div", { className: "agg-trading-access-section flex flex-col gap-4", children: [
2174
- /* @__PURE__ */ jsx17(SectionTitle2, { children: labels.trading.tradingAccessVenues }),
2175
- /* @__PURE__ */ jsx17("div", { className: "flex flex-col gap-3", children: visibleVenues.map(({ id: venue }) => {
2176
- var _a2;
2177
- const venueAccount = venueAccounts == null ? void 0 : venueAccounts.find((account) => account.venue === venue);
2178
- const isKalshi = venue === "kalshi";
2179
- const isBetdex = venue === "betdex";
2180
- const canManageBetdex = isBetdex && hasBetdexAccount && !isAppConfigLoading;
2181
- const isConnected = (venueAccount == null ? void 0 : venueAccount.status) === "active";
2182
- const availabilityState = getVenueAvailabilityState({
2183
- venueId: venue,
2184
- disabledVenues,
2185
- isConfigLoading: (isKalshi || isBetdex) && isAppConfigLoading,
2186
- isLocationBlocked
2187
- });
2188
- const displayName = (_a2 = venueLogoLabels[venue]) != null ? _a2 : venue;
2189
- if (availabilityState === "hidden" && !canManageBetdex) return null;
2190
- return /* @__PURE__ */ jsxs15(AccessRow, { children: [
2191
- /* @__PURE__ */ jsxs15("div", { className: "flex min-w-0 items-center gap-3", children: [
2192
- /* @__PURE__ */ jsx17(VenueLogo, { venue, size: "small" }),
2193
- /* @__PURE__ */ jsx17("span", { className: "truncate text-agg-base font-agg-normal leading-6 text-agg-foreground", children: displayName })
2194
- ] }),
2195
- isBetdex && (availabilityState === "available" || canManageBetdex) ? /* @__PURE__ */ jsx17(
2196
- "button",
2197
- {
2198
- type: "button",
2199
- onClick: onConfigureBetdex,
2200
- disabled: !onConfigureBetdex,
2201
- "aria-label": labels.trading.manageBetdexAccount,
2202
- className: "min-h-11 shrink-0 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-primary whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary disabled:cursor-not-allowed disabled:opacity-60",
2203
- children: labels.trading.configureBetdexAccount
2204
- }
2205
- ) : availabilityState === "geoblocked" ? /* @__PURE__ */ jsx17(GeoblockedStatus, {}) : isKalshi && !isConnected ? /* @__PURE__ */ jsx17(
2206
- "button",
2207
- {
2208
- type: "button",
2209
- onClick: onConnectKalshi,
2210
- disabled: !onConnectKalshi,
2211
- className: "shrink-0 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-primary whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary disabled:cursor-not-allowed disabled:opacity-60",
2212
- children: labels.trading.tradingAccessAddKalshiAccount
2213
- }
2214
- ) : isKalshi ? /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-4", children: [
2215
- /* @__PURE__ */ jsx17(AvailableStatus, {}),
2216
- onDisconnectKalshi ? /* @__PURE__ */ jsx17(
2217
- "button",
2218
- {
2219
- type: "button",
2220
- onClick: onDisconnectKalshi,
2221
- className: "min-h-11 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-agg-primary",
2222
- children: labels.auth.disconnect
2223
- }
2224
- ) : null
2225
- ] }) : /* @__PURE__ */ jsx17(AvailableStatus, {})
2226
- ] }, venue);
2227
- }) })
2228
- ] });
2229
- };
2230
- TradingAccessTab.displayName = "TradingAccessTab";
2231
-
2232
- // src/profile/index.tsx
2233
- import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
2234
- var ProfileModal = ({
2235
- open,
2236
- onOpenChange,
2237
- username,
2238
- avatarPreview,
2239
- onSave,
2240
- onDeleteProfile,
2241
- socialAccounts,
2242
- wallets,
2243
- email,
2244
- onConnectTwitter,
2245
- onDisconnectTwitter,
2246
- onConnectGoogle,
2247
- onDisconnectGoogle,
2248
- onConnectApple,
2249
- onDisconnectApple,
2250
- onDisconnectWallet,
2251
- onConnectEmail,
2252
- onKycError,
2253
- onConnectKalshi,
2254
- onDisconnectExchange
2255
- }) => {
2256
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
2257
- const client = useAggClient();
2258
- const { user } = useAggAuthState2();
2259
- const toastCtx = useOptionalToast();
2260
- const [activeTab, setActiveTab] = useState4(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
2261
- const profileTabItems = useMemo4(() => getProfileTabItems(), []);
2262
- const resolvedInitialUsername = (_a = username != null ? username : user == null ? void 0 : user.username) != null ? _a : "";
2263
- const [draftUsername, setDraftUsername] = useState4(resolvedInitialUsername);
2264
- const [draftAvatarFile, setDraftAvatarFile] = useState4();
2265
- const [draftAvatarPreview, setDraftAvatarPreview] = useState4();
2266
- const [isSaving, setIsSaving] = useState4(false);
2267
- const [avatarTypeError, setAvatarTypeError] = useState4(null);
2268
- const [isConnectKalshiModalOpen, setIsConnectKalshiModalOpen] = useState4(false);
2269
- const [betdexAccountUserId, setBetdexAccountUserId] = useState4(null);
2270
- const isBetdexAccountModalOpen = !!(user == null ? void 0 : user.id) && betdexAccountUserId === user.id;
2271
- const { data: kalshiStatus, refetch: refetchKalshiStatus } = useVenueKeyStatus(
2272
- Venue.kalshi,
2273
- open
2274
- );
2275
- useEffect4(() => {
2276
- var _a2;
2277
- setDraftUsername((_a2 = username != null ? username : user == null ? void 0 : user.username) != null ? _a2 : "");
2278
- }, [username, user == null ? void 0 : user.username]);
2279
- useEffect4(() => {
2280
- if (open) return;
2281
- setIsConnectKalshiModalOpen(false);
2282
- setBetdexAccountUserId(null);
2283
- }, [open]);
2284
- useEffect4(() => setBetdexAccountUserId(null), [user == null ? void 0 : user.id]);
2285
- const handleOpenChange = useCallback4(
2286
- (isOpen) => {
2287
- var _a2;
2288
- if (!isOpen) {
2289
- setActiveTab(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
2290
- setIsSaving(false);
2291
- setDraftUsername((_a2 = username != null ? username : user == null ? void 0 : user.username) != null ? _a2 : "");
2292
- setDraftAvatarFile(void 0);
2293
- setDraftAvatarPreview(void 0);
2294
- setAvatarTypeError(null);
2295
- }
2296
- onOpenChange(isOpen);
2297
- },
2298
- [
2299
- onOpenChange,
2300
- username,
2301
- user == null ? void 0 : user.username,
2302
- setActiveTab,
2303
- setIsSaving,
2304
- setDraftUsername,
2305
- setDraftAvatarFile,
2306
- setDraftAvatarPreview
2307
- ]
2308
- );
2309
- const handleDraftAvatarChange = useCallback4(
2310
- (file, preview) => {
2311
- const ACCEPTED_AVATAR_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp"];
2312
- if (file && !ACCEPTED_AVATAR_TYPES.includes(file.type)) {
2313
- setAvatarTypeError("Unsupported format. Please use JPEG, PNG, GIF, or WebP.");
2314
- return;
2315
- }
2316
- setAvatarTypeError(null);
2317
- setDraftAvatarFile(file);
2318
- setDraftAvatarPreview(preview);
2319
- },
2320
- []
2321
- );
2322
- const originalUsername = (_b = username != null ? username : user == null ? void 0 : user.username) != null ? _b : "";
2323
- const hasChanges = draftUsername !== originalUsername || draftAvatarFile !== void 0;
2324
- const handleSave = useCallback4(() => __async(null, null, function* () {
2325
- var _a2, _b2, _c2;
2326
- setIsSaving(true);
2327
- try {
2328
- const normalizedUsername = draftUsername.trim();
2329
- if (normalizedUsername !== originalUsername) {
2330
- yield client.updateUser({ username: normalizedUsername || void 0 });
2331
- }
2332
- let avatarCdnUrl;
2333
- if (draftAvatarFile) {
2334
- const { uploadUrl, cdnUrl } = yield client.createAvatarUploadUrl(draftAvatarFile.type);
2335
- const uploadResponse = yield fetch(uploadUrl, {
2336
- method: "PUT",
2337
- headers: {
2338
- "Content-Type": draftAvatarFile.type
2339
- },
2340
- body: draftAvatarFile
2341
- });
2342
- if (!uploadResponse.ok) {
2343
- throw new Error(`Avatar upload failed (${uploadResponse.status})`);
2344
- }
2345
- avatarCdnUrl = cdnUrl || void 0;
2346
- yield new Promise((resolve) => setTimeout(resolve, 5e3));
2347
- yield client.updateUser({ confirmAvatar: true });
2348
- }
2349
- const profile = yield client.getCurrentUser();
2350
- const resolvedAvatarPreview = (_b2 = (_a2 = profile == null ? void 0 : profile.avatarUrl) != null ? _a2 : avatarCdnUrl) != null ? _b2 : draftAvatarPreview;
2351
- onSave({
2352
- username: normalizedUsername || void 0,
2353
- avatarFile: draftAvatarFile,
2354
- avatarPreview: resolvedAvatarPreview
2355
- });
2356
- onOpenChange(false);
2357
- } catch (err) {
2358
- const apiError = err;
2359
- const fieldErrors = ((_c2 = apiError.errors) != null ? _c2 : []).map((e) => e == null ? void 0 : e.message).filter((m) => typeof m === "string" && m.length > 0);
2360
- const toastMessage = fieldErrors.length > 0 ? fieldErrors.join("\n") : apiError.message || "Failed to save profile. Please try again.";
2361
- if (toastCtx) {
2362
- toastCtx.toast(toastMessage, { tone: "error", title: "Could not save profile" });
2363
- } else if (typeof console !== "undefined") {
2364
- console.error("[ProfileModal] save failed:", toastMessage);
2365
- }
2366
- } finally {
2367
- setIsSaving(false);
2368
- }
2369
- }), [
2370
- client,
2371
- draftAvatarFile,
2372
- draftAvatarPreview,
2373
- draftUsername,
2374
- onOpenChange,
2375
- onSave,
2376
- originalUsername,
2377
- toastCtx
2378
- ]);
2379
- const handleCancel = useCallback4(() => {
2380
- handleOpenChange(false);
2381
- }, [handleOpenChange]);
2382
- const handleVerifyKalshi = useCallback4(
2383
- (credentials) => __async(null, null, function* () {
2384
- if (onConnectKalshi) {
2385
- yield onConnectKalshi(credentials);
2386
- } else {
2387
- yield client.upsertVenueKey({
2388
- venue: Venue.kalshi,
2389
- credentials: {
2390
- keyId: credentials.apiKeyId,
2391
- privateKey: credentials.privateKey
2392
- }
2393
- });
2394
- }
2395
- yield refetchKalshiStatus();
2396
- yield client.getCurrentUser();
2397
- }),
2398
- [client, onConnectKalshi, refetchKalshiStatus]
2399
- );
2400
- const handleDisconnectKalshi = useCallback4(() => __async(null, null, function* () {
2401
- yield client.deleteVenueKey(Venue.kalshi);
2402
- yield refetchKalshiStatus();
2403
- onDisconnectExchange == null ? void 0 : onDisconnectExchange(Venue.kalshi);
2404
- }), [client, onDisconnectExchange, refetchKalshiStatus]);
2405
- const resolvedVenueAccounts = useMemo4(() => {
2406
- var _a2;
2407
- const nonKalshiAccounts = (_a2 = user == null ? void 0 : user.venueAccounts) == null ? void 0 : _a2.filter((account) => account.venue !== "kalshi");
2408
- if (!kalshiStatus) return user == null ? void 0 : user.venueAccounts;
2409
- if (!(kalshiStatus == null ? void 0 : kalshiStatus.connected)) return nonKalshiAccounts;
2410
- return [
2411
- ...nonKalshiAccounts != null ? nonKalshiAccounts : [],
2412
- {
2413
- id: "kalshi-venue-key",
2414
- venue: Venue.kalshi,
2415
- status: "active",
2416
- kycStatus: kalshiStatus.kycStatus
2417
- }
2418
- ];
2419
- }, [kalshiStatus, user == null ? void 0 : user.venueAccounts]);
2420
- const isAccountConnected = (providers) => {
2421
- var _a2, _b2, _c2;
2422
- const normalizedProviders = providers.map((provider) => provider.toLowerCase());
2423
- const fromAccounts = (_b2 = (_a2 = user == null ? void 0 : user.accounts) == null ? void 0 : _a2.some(
2424
- (account) => normalizedProviders.includes(String(account.provider).toLowerCase())
2425
- )) != null ? _b2 : false;
2426
- const legacyIdentities = user == null ? void 0 : user.identities;
2427
- const fromLegacy = (_c2 = legacyIdentities == null ? void 0 : legacyIdentities.some(
2428
- (identity) => {
2429
- var _a3;
2430
- return normalizedProviders.includes(String((_a3 = identity.provider) != null ? _a3 : "").toLowerCase());
2431
- }
2432
- )) != null ? _c2 : false;
2433
- return fromAccounts || fromLegacy;
2434
- };
2435
- const resolvedSocialAccounts = socialAccounts != null ? socialAccounts : {
2436
- twitter: {
2437
- connected: isAccountConnected(["twitter"])
2438
- },
2439
- google: {
2440
- connected: isAccountConnected(["google"])
2441
- },
2442
- apple: {
2443
- connected: isAccountConnected(["apple"])
2444
- }
2445
- };
2446
- const resolvedEmail = (_h = (_g = email != null ? email : (_d = (_c = user == null ? void 0 : user.accounts) == null ? void 0 : _c.find(
2447
- (account) => String(account.provider).toLowerCase() === "email"
2448
- )) == null ? void 0 : _d.providerAccountId) != null ? _g : (_f = (_e = user == null ? void 0 : user.identities) == null ? void 0 : _e.find((identity) => {
2449
- var _a2;
2450
- return String((_a2 = identity.provider) != null ? _a2 : "").toLowerCase() === "email";
2451
- })) == null ? void 0 : _f.providerAccountId) != null ? _h : null;
2452
- const resolveRedirectUrl = () => {
2453
- if (typeof window === "undefined") return "http://localhost";
2454
- return `${window.location.origin}${window.location.pathname}${window.location.search}`;
2455
- };
2456
- const navigateTopWindow = (url) => {
2457
- var _a2;
2458
- if (typeof window === "undefined") return;
2459
- ((_a2 = window.top) != null ? _a2 : window).location.assign(url);
2460
- };
2461
- const surfaceError = useCallback4(
2462
- (err, title) => {
2463
- const message = (err == null ? void 0 : err.message) || "Something went wrong. Please try again.";
2464
- if (toastCtx) {
2465
- toastCtx.toast(message, { tone: "error", title });
2466
- } else {
2467
- console.error(`[ProfileModal] ${title}:`, message);
2468
- }
2469
- },
2470
- [toastCtx]
2471
- );
2472
- const handleConnectTwitter = useCallback4(() => __async(null, null, function* () {
2473
- try {
2474
- const result = yield client.linkAccount({
2475
- provider: "twitter",
2476
- redirectUrl: resolveRedirectUrl()
2477
- });
2478
- onConnectTwitter == null ? void 0 : onConnectTwitter();
2479
- if (result.type === "redirect") {
2480
- navigateTopWindow(result.url);
2481
- }
2482
- } catch (err) {
2483
- surfaceError(err, "Could not connect X (Twitter)");
2484
- }
2485
- }), [client, onConnectTwitter, surfaceError]);
2486
- const handleConnectGoogle = useCallback4(() => __async(null, null, function* () {
2487
- try {
2488
- const result = yield client.linkAccount({
2489
- provider: "google",
2490
- redirectUrl: resolveRedirectUrl()
2491
- });
2492
- onConnectGoogle == null ? void 0 : onConnectGoogle();
2493
- if (result.type === "redirect") {
2494
- navigateTopWindow(result.url);
2495
- }
2496
- } catch (err) {
2497
- surfaceError(err, "Could not connect Google");
2498
- }
2499
- }), [client, onConnectGoogle, surfaceError]);
2500
- const handleConnectApple = useCallback4(() => __async(null, null, function* () {
2501
- try {
2502
- const result = yield client.linkAccount({
2503
- provider: "apple",
2504
- redirectUrl: resolveRedirectUrl()
2505
- });
2506
- onConnectApple == null ? void 0 : onConnectApple();
2507
- if (result.type === "redirect") {
2508
- navigateTopWindow(result.url);
2509
- }
2510
- } catch (err) {
2511
- surfaceError(err, "Could not connect Apple");
2512
- }
2513
- }), [client, onConnectApple, surfaceError]);
2514
- const handleDisconnectTwitter = useCallback4(() => __async(null, null, function* () {
2515
- try {
2516
- yield client.disconnectAccount("twitter");
2517
- yield client.getCurrentUser();
2518
- onDisconnectTwitter == null ? void 0 : onDisconnectTwitter();
2519
- } catch (err) {
2520
- surfaceError(err, "Could not disconnect X (Twitter)");
2521
- }
2522
- }), [client, onDisconnectTwitter, surfaceError]);
2523
- const handleDisconnectGoogle = useCallback4(() => __async(null, null, function* () {
2524
- try {
2525
- yield client.disconnectAccount("google");
2526
- yield client.getCurrentUser();
2527
- onDisconnectGoogle == null ? void 0 : onDisconnectGoogle();
2528
- } catch (err) {
2529
- surfaceError(err, "Could not disconnect Google");
2530
- }
2531
- }), [client, onDisconnectGoogle, surfaceError]);
2532
- const handleDisconnectApple = useCallback4(() => __async(null, null, function* () {
2533
- try {
2534
- yield client.disconnectAccount("apple");
2535
- yield client.getCurrentUser();
2536
- onDisconnectApple == null ? void 0 : onDisconnectApple();
2537
- } catch (err) {
2538
- surfaceError(err, "Could not disconnect Apple");
2539
- }
2540
- }), [client, onDisconnectApple, surfaceError]);
2541
- const handleConnectEmail = useCallback4(() => __async(null, null, function* () {
2542
- var _a2;
2543
- const typedEmail = typeof window !== "undefined" ? (_a2 = window.prompt("Enter your email to receive a magic link")) == null ? void 0 : _a2.trim() : void 0;
2544
- if (!typedEmail) return;
2545
- try {
2546
- yield client.linkAccount({
2547
- provider: "email",
2548
- email: typedEmail,
2549
- redirectUrl: resolveRedirectUrl()
2550
- });
2551
- onConnectEmail == null ? void 0 : onConnectEmail();
2552
- toastCtx == null ? void 0 : toastCtx.toast(`We sent a link to ${typedEmail} to connect your email.`, {
2553
- tone: "success",
2554
- title: "Check your inbox"
2555
- });
2556
- } catch (err) {
2557
- surfaceError(err, "Could not connect email");
2558
- }
2559
- }), [client, onConnectEmail, surfaceError, toastCtx]);
2560
- const handleDisconnectWallet = useCallback4(
2561
- (wallet) => __async(null, null, function* () {
2562
- const normalizedChain = wallet.chain.toLowerCase();
2563
- const provider = normalizedChain === "solana" || normalizedChain === "svm" ? "solana_wallet" : "wallet";
2564
- try {
2565
- yield client.disconnectAccount(provider);
2566
- yield client.getCurrentUser();
2567
- onDisconnectWallet == null ? void 0 : onDisconnectWallet(wallet);
2568
- } catch (err) {
2569
- surfaceError(err, "Could not disconnect wallet");
2570
- }
2571
- }),
2572
- [client, onDisconnectWallet, surfaceError]
2573
- );
2574
- const providerActionMap = useMemo4(
2575
- () => ({
2576
- twitter: {
2577
- connect: () => {
2578
- void handleConnectTwitter();
2579
- },
2580
- disconnect: () => {
2581
- void handleDisconnectTwitter();
2582
- }
2583
- },
2584
- google: {
2585
- connect: () => {
2586
- void handleConnectGoogle();
2587
- },
2588
- disconnect: () => {
2589
- void handleDisconnectGoogle();
2590
- }
2591
- },
2592
- apple: {
2593
- connect: () => {
2594
- void handleConnectApple();
2595
- },
2596
- disconnect: () => {
2597
- void handleDisconnectApple();
2598
- }
2599
- },
2600
- email: {
2601
- connect: () => {
2602
- void handleConnectEmail();
2603
- }
2604
- }
2605
- }),
2606
- [
2607
- handleConnectApple,
2608
- handleConnectEmail,
2609
- handleConnectGoogle,
2610
- handleConnectTwitter,
2611
- handleDisconnectApple,
2612
- handleDisconnectGoogle,
2613
- handleDisconnectTwitter
2614
- ]
2615
- );
2616
- const resolvedWallets = useMemo4(() => {
2617
- var _a2, _b2;
2618
- if (wallets) return wallets;
2619
- const walletAccounts = (_b2 = (_a2 = user == null ? void 0 : user.accounts) == null ? void 0 : _a2.filter((account) => {
2620
- var _a3;
2621
- const provider = (_a3 = account.provider) == null ? void 0 : _a3.toLowerCase();
2622
- return provider === "wallet" || provider === "solana_wallet";
2623
- })) != null ? _b2 : [];
2624
- return walletAccounts.filter((account) => Boolean(account.providerAccountId)).map((account) => {
2625
- var _a3, _b3;
2626
- const chain = ((_a3 = account.provider) == null ? void 0 : _a3.toLowerCase()) === "solana_wallet" ? "solana" : "evm";
2627
- const address = account.providerAccountId;
2628
- return {
2629
- chain,
2630
- address,
2631
- displayAddress: (_b3 = shortenAddress(address, { chain })) != null ? _b3 : address
2632
- };
2633
- });
2634
- }, [user == null ? void 0 : user.accounts, wallets]);
2635
- return /* @__PURE__ */ jsxs16(
2636
- Modal,
2637
- {
2638
- open: open && !isConnectKalshiModalOpen && !isBetdexAccountModalOpen,
2639
- onOpenChange: handleOpenChange,
2640
- children: [
2641
- /* @__PURE__ */ jsxs16(
2642
- Modal.Container,
2643
- {
2644
- maxWidth: "800px",
2645
- "aria-label": "Edit Profile",
2646
- classNames: {
2647
- container: cn("agg-profile-modal", "min-h-[37.5rem]")
2648
- },
2649
- children: [
2650
- /* @__PURE__ */ jsx18(Modal.Header, { title: "Edit Profile", classNames: { root: "agg-profile-modal-header" } }),
2651
- /* @__PURE__ */ jsx18("div", { className: "agg-profile-tabs sm:hidden w-full", children: /* @__PURE__ */ jsx18(
2652
- Tabs,
2653
- {
2654
- className: "w-full [&>div]:w-full",
2655
- variant: "underline",
2656
- classNames: { tabList: "w-full" },
2657
- items: profileTabItems.map((tab) => ({
2658
- value: tab.value,
2659
- label: tab.label,
2660
- icon: /* @__PURE__ */ jsx18(Icon, { name: tab.icon, size: "small" })
2661
- })),
2662
- value: activeTab,
2663
- onChange: (val) => setActiveTab(val)
2664
- }
2665
- ) }),
2666
- /* @__PURE__ */ jsx18(Modal.Body, { classNames: { root: cn("agg-profile-modal-body", "overflow-x-visible") }, children: /* @__PURE__ */ jsxs16("div", { className: "agg-profile-layout flex flex-col sm:flex-row sm:gap-10", children: [
2667
- /* @__PURE__ */ jsx18("div", { className: "shrink-0", children: /* @__PURE__ */ jsx18(
2668
- "nav",
2669
- {
2670
- className: cn(
2671
- "agg-profile-sidebar",
2672
- "hidden sm:sticky sm:top-0 sm:self-start sm:flex sm:flex-col",
2673
- "w-[240px]",
2674
- "overflow-hidden rounded-agg-lg",
2675
- "border border-agg-separator",
2676
- "bg-agg-secondary",
2677
- "py-3"
2678
- ),
2679
- role: "tablist",
2680
- "aria-label": "Profile sections",
2681
- children: profileTabItems.map((tab) => {
2682
- const isActive = activeTab === tab.value;
2683
- return /* @__PURE__ */ jsxs16(
2684
- "button",
2685
- {
2686
- type: "button",
2687
- role: "tab",
2688
- "aria-selected": isActive,
2689
- onClick: () => setActiveTab(tab.value),
2690
- className: cn(
2691
- "agg-profile-tab-trigger",
2692
- "relative flex items-center gap-3",
2693
- "h-[49px] px-6 py-4",
2694
- "text-agg-sm leading-agg-5 font-agg-sans",
2695
- "transition-colors cursor-pointer",
2696
- isActive ? "font-agg-normal text-agg-foreground bg-agg-secondary-hover" : "font-agg-normal text-agg-foreground"
2697
- ),
2698
- children: [
2699
- isActive ? /* @__PURE__ */ jsx18("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-agg-primary" }) : null,
2700
- /* @__PURE__ */ jsx18(Icon, { name: tab.icon, size: "small", color: "currentColor" }),
2701
- /* @__PURE__ */ jsx18("span", { className: "shrink-0 whitespace-nowrap", children: tab.label })
2702
- ]
2703
- },
2704
- tab.value
2705
- );
2706
- })
2707
- }
2708
- ) }),
2709
- /* @__PURE__ */ jsxs16("div", { className: "agg-profile-content min-w-0 flex-1", children: [
2710
- activeTab === PROFILE_TAB_KEYS.PROFILE_ACCOUNTS ? /* @__PURE__ */ jsxs16("div", { className: "agg-profile-accounts-tab flex flex-col gap-8", children: [
2711
- /* @__PURE__ */ jsx18(
2712
- AboutTab,
2713
- {
2714
- username: username != null ? username : user == null ? void 0 : user.username,
2715
- avatarPreview: (_i = user == null ? void 0 : user.avatarUrl) != null ? _i : avatarPreview,
2716
- onDeleteProfile,
2717
- draftUsername,
2718
- onDraftUsernameChange: setDraftUsername,
2719
- draftAvatarFile,
2720
- onDraftAvatarChange: handleDraftAvatarChange,
2721
- draftAvatarPreview,
2722
- avatarError: avatarTypeError
2723
- }
2724
- ),
2725
- /* @__PURE__ */ jsx18(
2726
- AccountsWalletsTab,
2727
- {
2728
- socialAccounts: resolvedSocialAccounts,
2729
- wallets: resolvedWallets,
2730
- email: resolvedEmail,
2731
- onConnectTwitter: providerActionMap.twitter.connect,
2732
- onDisconnectTwitter: providerActionMap.twitter.disconnect,
2733
- onConnectGoogle: providerActionMap.google.connect,
2734
- onDisconnectGoogle: providerActionMap.google.disconnect,
2735
- onConnectApple: providerActionMap.apple.connect,
2736
- onDisconnectApple: providerActionMap.apple.disconnect,
2737
- onDisconnectWallet: (wallet) => {
2738
- void handleDisconnectWallet(wallet);
2739
- },
2740
- onConnectEmail: providerActionMap.email.connect
2741
- }
2742
- )
2743
- ] }) : null,
2744
- activeTab === PROFILE_TAB_KEYS.TRADING_ACCESS ? /* @__PURE__ */ jsx18(
2745
- TradingAccessTab,
2746
- {
2747
- venueAccounts: resolvedVenueAccounts,
2748
- onConnectKalshi: () => setIsConnectKalshiModalOpen(true),
2749
- onConfigureBetdex: (user == null ? void 0 : user.id) ? () => setBetdexAccountUserId(user.id) : void 0,
2750
- onDisconnectKalshi: handleDisconnectKalshi,
2751
- onKycError
2752
- }
2753
- ) : null
2754
- ] })
2755
- ] }) }),
2756
- /* @__PURE__ */ jsxs16(Modal.Footer, { classNames: { root: "agg-profile-modal-footer" }, children: [
2757
- /* @__PURE__ */ jsx18(Button, { variant: "secondary", size: "large", onClick: handleCancel, className: "min-w-[120px]", children: "Cancel" }),
2758
- /* @__PURE__ */ jsx18(
2759
- Button,
2760
- {
2761
- variant: "primary",
2762
- size: "large",
2763
- disabled: !hasChanges,
2764
- isLoading: isSaving,
2765
- onClick: handleSave,
2766
- children: "Save changes"
2767
- }
2768
- )
2769
- ] })
2770
- ]
2771
- }
2772
- ),
2773
- /* @__PURE__ */ jsx18(
2774
- ManageBetdexAccountModal,
2775
- {
2776
- userId: user == null ? void 0 : user.id,
2777
- open: open && isBetdexAccountModalOpen,
2778
- onOpenChange: (isOpen) => {
2779
- var _a2;
2780
- return setBetdexAccountUserId(isOpen ? (_a2 = user == null ? void 0 : user.id) != null ? _a2 : null : null);
2781
- }
2782
- },
2783
- (_j = user == null ? void 0 : user.id) != null ? _j : "signed-out"
2784
- ),
2785
- /* @__PURE__ */ jsx18(
2786
- ConnectKalshiModal,
2787
- {
2788
- open: open && isConnectKalshiModalOpen,
2789
- onOpenChange: setIsConnectKalshiModalOpen,
2790
- onVerify: handleVerifyKalshi
2791
- }
2792
- )
2793
- ]
2794
- }
2795
- );
2796
- };
2797
- ProfileModal.displayName = "ProfileModal";
2798
-
2799
- // src/geo-block-modal/index.tsx
2800
- import { useLabels as useLabels15 } from "@agg-build/hooks";
2801
- import { useCallback as useCallback5 } from "react";
2802
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
2803
- var GeoBlockModal = ({
2804
- open,
2805
- onOpenChange,
2806
- onConfirm,
2807
- classNames
2808
- }) => {
2809
- const labels = useLabels15();
2810
- const handleConfirm = useCallback5(() => {
2811
- onConfirm == null ? void 0 : onConfirm();
2812
- onOpenChange(false);
2813
- }, [onConfirm, onOpenChange]);
2814
- return /* @__PURE__ */ jsx19(
2815
- Modal,
2816
- {
2817
- open,
2818
- onOpenChange,
2819
- "aria-label": labels.trading.geoBlockModalAriaLabel,
2820
- children: /* @__PURE__ */ jsxs17(
2821
- Modal.Container,
2822
- {
2823
- maxWidth: "480px",
2824
- classNames: { container: cn("!rounded-agg-2xl", classNames == null ? void 0 : classNames.container) },
2825
- children: [
2826
- /* @__PURE__ */ jsx19(
2827
- Modal.Header,
2828
- {
2829
- title: "",
2830
- hideBorder: true,
2831
- classNames: {
2832
- root: "min-h-0! h-12!",
2833
- container: "p-0! sm:p-0!",
2834
- close: "absolute top-8 right-8"
2835
- }
2836
- }
2837
- ),
2838
- /* @__PURE__ */ jsx19(Modal.Body, { classNames: { root: cn("!px-10 !pt-0 !pb-12", classNames == null ? void 0 : classNames.body) }, children: /* @__PURE__ */ jsxs17("div", { className: "flex flex-col items-center gap-8", children: [
2839
- /* @__PURE__ */ jsx19(
2840
- Icon,
2841
- {
2842
- name: "internet-security",
2843
- className: "h-[60px] w-[60px] text-agg-muted-foreground"
2844
- }
2845
- ),
2846
- /* @__PURE__ */ jsxs17("div", { className: "flex flex-col items-center gap-3 text-center", children: [
2847
- /* @__PURE__ */ jsx19("h2", { className: "text-agg-2xl font-agg-bold leading-agg-8 text-agg-foreground", children: labels.trading.geoBlockModalTitle }),
2848
- /* @__PURE__ */ jsx19("p", { className: "text-agg-base font-agg-normal leading-agg-6 text-agg-foreground", children: labels.trading.geoBlockModalDescription })
2849
- ] }),
2850
- /* @__PURE__ */ jsx19(
2851
- Button,
2852
- {
2853
- variant: "secondary",
2854
- size: "large",
2855
- className: "h-10 min-w-[140px] px-6",
2856
- onClick: handleConfirm,
2857
- children: labels.trading.geoBlockModalConfirm
2858
- }
2859
- )
2860
- ] }) })
2861
- ]
2862
- }
2863
- )
2864
- }
2865
- );
2866
- };
2867
- GeoBlockModal.displayName = "GeoBlockModal";
2868
-
2869
- export {
2870
- PaperTradingBadge,
2871
- CARD_NETWORK_OPTIONS,
2872
- clearPendingCardSession,
2873
- getPendingCardSession,
2874
- DepositModal,
2875
- PaperOnboardingModal,
2876
- PaperTradingOnboarding,
2877
- ProfileModal,
2878
- GeoBlockModal
2879
- };