@agg-build/ui 1.2.11 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +34 -1
  2. package/dist/{chunk-NWJHFGBZ.mjs → chunk-55ODXLOS.mjs} +1 -1
  3. package/dist/{chunk-3ZSNHGAB.mjs → chunk-5ALBEKAT.mjs} +842 -300
  4. package/dist/{chunk-YP75TIY6.mjs → chunk-6PQ6O6M5.mjs} +583 -186
  5. package/dist/{chunk-ENAGASVU.mjs → chunk-ONVP7YWS.mjs} +439 -339
  6. package/dist/{chunk-SJLHOAKK.mjs → chunk-QUZWA34R.mjs} +1256 -844
  7. package/dist/{chunk-54PCEK6G.mjs → chunk-UFC7L74C.mjs} +26 -27
  8. package/dist/{chunk-J7K2U44E.mjs → chunk-YWJIYEJV.mjs} +236 -121
  9. package/dist/events.js +2460 -1355
  10. package/dist/events.mjs +5 -3
  11. package/dist/index.js +5741 -3841
  12. package/dist/index.mjs +485 -106
  13. package/dist/modals.js +1399 -1093
  14. package/dist/modals.mjs +3 -3
  15. package/dist/pages.js +4039 -2687
  16. package/dist/pages.mjs +6 -6
  17. package/dist/primitives.js +1267 -895
  18. package/dist/primitives.mjs +3 -1
  19. package/dist/styles.css +1 -1
  20. package/dist/tailwind.css +1 -1
  21. package/dist/trading.js +1032 -695
  22. package/dist/trading.mjs +4 -4
  23. package/dist/types/agg-provider.d.mts +27 -0
  24. package/dist/types/agg-provider.d.ts +27 -0
  25. package/dist/types/events/item/event-list-item-v2.utils.d.mts +28 -0
  26. package/dist/types/events/item/event-list-item-v2.utils.d.ts +28 -0
  27. package/dist/types/events/item/event-list-item.constants.d.mts +1 -1
  28. package/dist/types/events/item/event-list-item.constants.d.ts +1 -1
  29. package/dist/types/events/item/index.d.mts +4 -0
  30. package/dist/types/events/item/index.d.ts +4 -0
  31. package/dist/types/events/list/event-list-tabs.d.mts +6 -1
  32. package/dist/types/events/list/event-list-tabs.d.ts +6 -1
  33. package/dist/types/events/list/event-list.types.d.mts +2 -0
  34. package/dist/types/events/list/event-list.types.d.ts +2 -0
  35. package/dist/types/events/list/event-list.utils.d.mts +19 -0
  36. package/dist/types/events/list/event-list.utils.d.ts +19 -0
  37. package/dist/types/events/list/index.d.mts +1 -1
  38. package/dist/types/events/list/index.d.ts +1 -1
  39. package/dist/types/index.d.mts +2 -0
  40. package/dist/types/index.d.ts +2 -0
  41. package/dist/types/notifications/agg-notification-events-provider.d.mts +35 -0
  42. package/dist/types/notifications/agg-notification-events-provider.d.ts +35 -0
  43. package/dist/types/notifications/agg-toast-provider.d.mts +27 -0
  44. package/dist/types/notifications/agg-toast-provider.d.ts +27 -0
  45. package/dist/types/notifications/deposit-notification-events.d.mts +10 -0
  46. package/dist/types/notifications/deposit-notification-events.d.ts +10 -0
  47. package/dist/types/notifications/index.d.mts +2 -0
  48. package/dist/types/notifications/index.d.ts +2 -0
  49. package/dist/types/pages/home/home.types.d.mts +1 -0
  50. package/dist/types/pages/home/home.types.d.ts +1 -0
  51. package/dist/types/pages/user-profile/user-profile.types.d.mts +30 -4
  52. package/dist/types/pages/user-profile/user-profile.types.d.ts +30 -4
  53. package/dist/types/primitives/button/button.types.d.mts +4 -0
  54. package/dist/types/primitives/button/button.types.d.ts +4 -0
  55. package/dist/types/primitives/button/index.d.mts +1 -1
  56. package/dist/types/primitives/button/index.d.ts +1 -1
  57. package/dist/types/primitives/icon/index.d.mts +2 -1
  58. package/dist/types/primitives/icon/index.d.ts +2 -1
  59. package/dist/types/primitives/icon/registry.d.mts +20 -0
  60. package/dist/types/primitives/icon/registry.d.ts +20 -0
  61. package/dist/types/primitives/icon/svg/gift-bonus.d.mts +5 -0
  62. package/dist/types/primitives/icon/svg/gift-bonus.d.ts +5 -0
  63. package/dist/types/primitives/icon/svg/sort-end-date.d.mts +5 -0
  64. package/dist/types/primitives/icon/svg/sort-end-date.d.ts +5 -0
  65. package/dist/types/primitives/icon/svg/sort-top-arbitrage.d.mts +5 -0
  66. package/dist/types/primitives/icon/svg/sort-top-arbitrage.d.ts +5 -0
  67. package/dist/types/primitives/icon/svg/sort-volume-24hr.d.mts +5 -0
  68. package/dist/types/primitives/icon/svg/sort-volume-24hr.d.ts +5 -0
  69. package/dist/types/primitives/icon/svg/sort-volume.d.mts +5 -0
  70. package/dist/types/primitives/icon/svg/sort-volume.d.ts +5 -0
  71. package/dist/types/primitives/search/search.types.d.mts +2 -1
  72. package/dist/types/primitives/search/search.types.d.ts +2 -1
  73. package/dist/types/primitives/select/index.d.mts +1 -1
  74. package/dist/types/primitives/select/index.d.ts +1 -1
  75. package/dist/types/primitives/select/select.types.d.mts +9 -0
  76. package/dist/types/primitives/select/select.types.d.ts +9 -0
  77. package/dist/types/primitives/skeleton/index.d.mts +1 -1
  78. package/dist/types/primitives/skeleton/index.d.ts +1 -1
  79. package/dist/types/primitives/skeleton/skeleton.types.d.mts +4 -0
  80. package/dist/types/primitives/skeleton/skeleton.types.d.ts +4 -0
  81. package/dist/types/primitives/skeleton/views/event-list-skeleton-view.d.mts +1 -1
  82. package/dist/types/primitives/skeleton/views/event-list-skeleton-view.d.ts +1 -1
  83. package/dist/types/primitives/toast/toast.types.d.mts +3 -0
  84. package/dist/types/primitives/toast/toast.types.d.ts +3 -0
  85. package/dist/types/profile/index.d.mts +1 -1
  86. package/dist/types/profile/index.d.ts +1 -1
  87. package/dist/types/profile/profile-modal.constants.d.mts +2 -2
  88. package/dist/types/profile/profile-modal.constants.d.ts +2 -2
  89. package/dist/types/profile/tabs/accounts-wallets-tab.d.mts +2 -17
  90. package/dist/types/profile/tabs/accounts-wallets-tab.d.ts +2 -17
  91. package/dist/types/profile/tabs/trading-access-tab.d.mts +15 -0
  92. package/dist/types/profile/tabs/trading-access-tab.d.ts +15 -0
  93. package/dist/types/trading/place-order/index.d.mts +1 -1
  94. package/dist/types/trading/place-order/index.d.ts +1 -1
  95. package/dist/types/trading/place-order/index.place-order.types.d.mts +4 -1
  96. package/dist/types/trading/place-order/index.place-order.types.d.ts +4 -1
  97. package/dist/types/trading/place-order/index.place-order.utils.d.mts +3 -1
  98. package/dist/types/trading/place-order/index.place-order.utils.d.ts +3 -1
  99. package/package.json +3 -3
@@ -38,12 +38,31 @@ import {
38
38
  shortenAddress,
39
39
  useOptionalToast,
40
40
  venueLogoLabels
41
- } from "./chunk-SJLHOAKK.mjs";
41
+ } from "./chunk-QUZWA34R.mjs";
42
42
 
43
43
  // src/deposit/index.tsx
44
44
  import { useAggAuthState, useAggUiConfig, useDepositAddresses, useLabels as useLabels11 } from "@agg-build/hooks";
45
45
  import { SVM_CHAIN_IDS, useDepositFlow } from "@agg-build/hooks/deposit";
46
- import { useEffect as useEffect3, useMemo, useRef, useState as useState2 } from "react";
46
+ import { useCallback, useEffect as useEffect3, useMemo, useRef, useState as useState2 } from "react";
47
+
48
+ // src/notifications/deposit-notification-events.ts
49
+ var AGG_DEPOSIT_NOTIFICATION_EVENT = "agg:deposit-notification";
50
+ var dispatchAggDepositNotification = (detail) => {
51
+ if (typeof window === "undefined") return;
52
+ window.dispatchEvent(new CustomEvent(AGG_DEPOSIT_NOTIFICATION_EVENT, { detail }));
53
+ };
54
+ var subscribeAggDepositNotification = (handler) => {
55
+ if (typeof window === "undefined") return () => {
56
+ };
57
+ const handleDepositNotification = (event) => {
58
+ if (!(event instanceof CustomEvent)) return;
59
+ handler(event.detail);
60
+ };
61
+ window.addEventListener(AGG_DEPOSIT_NOTIFICATION_EVENT, handleDepositNotification);
62
+ return () => {
63
+ window.removeEventListener(AGG_DEPOSIT_NOTIFICATION_EVENT, handleDepositNotification);
64
+ };
65
+ };
47
66
 
48
67
  // src/shared/constants.ts
49
68
  var USDC = {
@@ -1337,6 +1356,8 @@ function DepositModalControlled({
1337
1356
  );
1338
1357
  const [highlightedMethod, setHighlightedMethod] = useState2(defaultMethod);
1339
1358
  const walletSubmitInFlightRef = useRef(false);
1359
+ const walletDepositAttemptIdRef = useRef(0);
1360
+ const notifiedWalletDepositStatusesRef = useRef(/* @__PURE__ */ new Set());
1340
1361
  const [isWalletSubmitting, setIsWalletSubmitting] = useState2(false);
1341
1362
  const [cardProviders, setCardProviders] = useState2([]);
1342
1363
  const [quotesLoading, setQuotesLoading] = useState2(false);
@@ -1439,19 +1460,42 @@ function DepositModalControlled({
1439
1460
  fromWallet: walletFlow.walletLabel,
1440
1461
  gasFee: ""
1441
1462
  }, walletFlow.successSummary);
1463
+ const handleWalletDepositNotification = useCallback(
1464
+ (status, errorMessage) => {
1465
+ if (notifiedWalletDepositStatusesRef.current.has(status)) return;
1466
+ notifiedWalletDepositStatusesRef.current.add(status);
1467
+ dispatchAggDepositNotification({
1468
+ id: `wallet-${walletDepositAttemptIdRef.current}`,
1469
+ status,
1470
+ amount: walletFlow.amount,
1471
+ tokenSymbol: walletToken || DEFAULT_WALLET_TOKEN,
1472
+ errorMessage
1473
+ });
1474
+ },
1475
+ [walletFlow.amount, walletToken]
1476
+ );
1442
1477
  useEffect3(() => {
1443
1478
  if (step === "wallet-processing" && !isWalletSubmitting && walletFlow.transactionStatus === "settled") {
1479
+ handleWalletDepositNotification("completed");
1444
1480
  setStep("wallet-success");
1445
1481
  }
1446
- }, [isWalletSubmitting, step, walletFlow.transactionStatus]);
1482
+ }, [handleWalletDepositNotification, isWalletSubmitting, step, walletFlow.transactionStatus]);
1447
1483
  useEffect3(() => {
1448
1484
  if (!onCancelWalletDeposit) return;
1449
1485
  if (step === "wallet-processing" && !isWalletSubmitting && walletFlow.transactionStatus === "error") {
1450
1486
  walletSubmitInFlightRef.current = false;
1487
+ handleWalletDepositNotification("failed", walletFlow.transactionErrorMessage);
1451
1488
  onCancelWalletDeposit();
1452
1489
  setStep("wallet-form");
1453
1490
  }
1454
- }, [isWalletSubmitting, onCancelWalletDeposit, step, walletFlow.transactionStatus]);
1491
+ }, [
1492
+ handleWalletDepositNotification,
1493
+ isWalletSubmitting,
1494
+ onCancelWalletDeposit,
1495
+ step,
1496
+ walletFlow.transactionErrorMessage,
1497
+ walletFlow.transactionStatus
1498
+ ]);
1455
1499
  const cardTokenOptions = withTokenIcons(
1456
1500
  mergeSelectOptionsUnique(cardFlow == null ? void 0 : cardFlow.tokenOptions, DEFAULT_CURRENCY_OPTIONS)
1457
1501
  );
@@ -1575,6 +1619,8 @@ function DepositModalControlled({
1575
1619
  setSendChainId("");
1576
1620
  setSendToken("");
1577
1621
  walletSubmitInFlightRef.current = false;
1622
+ walletDepositAttemptIdRef.current = 0;
1623
+ notifiedWalletDepositStatusesRef.current = /* @__PURE__ */ new Set();
1578
1624
  setIsWalletSubmitting(false);
1579
1625
  setCardProviders([]);
1580
1626
  setQuotesLoading(false);
@@ -1631,6 +1677,8 @@ function DepositModalControlled({
1631
1677
  var _a2, _b2;
1632
1678
  if (walletSubmitInFlightRef.current) return;
1633
1679
  walletSubmitInFlightRef.current = true;
1680
+ walletDepositAttemptIdRef.current += 1;
1681
+ notifiedWalletDepositStatusesRef.current = /* @__PURE__ */ new Set();
1634
1682
  setIsWalletSubmitting(true);
1635
1683
  setStep("wallet-processing");
1636
1684
  const walletChainIdNum = walletChainId ? Number(walletChainId) : void 0;
@@ -2409,7 +2457,7 @@ var WithdrawModal = (props) => {
2409
2457
  WithdrawModal.displayName = "WithdrawModal";
2410
2458
 
2411
2459
  // src/onboarding/index.tsx
2412
- import { useCallback as useCallback5, useEffect as useEffect5, useState as useState8 } from "react";
2460
+ import { useCallback as useCallback6, useEffect as useEffect5, useState as useState8 } from "react";
2413
2461
  import { useLabels as useLabels20 } from "@agg-build/hooks";
2414
2462
  import * as Dialog3 from "@radix-ui/react-dialog";
2415
2463
 
@@ -2429,7 +2477,7 @@ var ONBOARDING_STEPS = {
2429
2477
  var ONCHAIN_VENUES = [Venue.polymarket, Venue.opinion, Venue.predict];
2430
2478
 
2431
2479
  // src/onboarding/steps/how-it-works.tsx
2432
- import { useCallback, useRef as useRef2, useState as useState4 } from "react";
2480
+ import { useCallback as useCallback2, useRef as useRef2, useState as useState4 } from "react";
2433
2481
  import { useLabels as useLabels15 } from "@agg-build/hooks";
2434
2482
  import { jsx as jsx17, jsxs as jsxs17 } from "react/jsx-runtime";
2435
2483
  var defaultIcons = {
@@ -2443,7 +2491,7 @@ var HowItWorksStep = ({ onContinue, icons }) => {
2443
2491
  const scrollRef = useRef2(null);
2444
2492
  const [showTopGradient, setShowTopGradient] = useState4(false);
2445
2493
  const [showBottomGradient, setShowBottomGradient] = useState4(true);
2446
- const handleScroll = useCallback(() => {
2494
+ const handleScroll = useCallback2(() => {
2447
2495
  const el = scrollRef.current;
2448
2496
  if (!el) return;
2449
2497
  setShowTopGradient(el.scrollTop > 0);
@@ -2512,7 +2560,7 @@ var HowItWorksStep = ({ onContinue, icons }) => {
2512
2560
  HowItWorksStep.displayName = "HowItWorksStep";
2513
2561
 
2514
2562
  // src/onboarding/steps/profile-setup.tsx
2515
- import { useCallback as useCallback2, useRef as useRef3, useState as useState5 } from "react";
2563
+ import { useCallback as useCallback3, useRef as useRef3, useState as useState5 } from "react";
2516
2564
  import { useLabels as useLabels16 } from "@agg-build/hooks";
2517
2565
  import { jsx as jsx18, jsxs as jsxs18 } from "react/jsx-runtime";
2518
2566
  var ProfileSetupStep = ({ onContinue }) => {
@@ -2521,11 +2569,11 @@ var ProfileSetupStep = ({ onContinue }) => {
2521
2569
  const [avatarFile, setAvatarFile] = useState5();
2522
2570
  const [avatarPreview, setAvatarPreview] = useState5();
2523
2571
  const fileInputRef = useRef3(null);
2524
- const handleAvatarClick = useCallback2(() => {
2572
+ const handleAvatarClick = useCallback3(() => {
2525
2573
  var _a;
2526
2574
  (_a = fileInputRef.current) == null ? void 0 : _a.click();
2527
2575
  }, []);
2528
- const handleFileChange = useCallback2((e) => {
2576
+ const handleFileChange = useCallback3((e) => {
2529
2577
  var _a;
2530
2578
  const file = (_a = e.target.files) == null ? void 0 : _a[0];
2531
2579
  if (!file) return;
@@ -2537,7 +2585,7 @@ var ProfileSetupStep = ({ onContinue }) => {
2537
2585
  };
2538
2586
  reader.readAsDataURL(file);
2539
2587
  }, []);
2540
- const handleContinue = useCallback2(() => {
2588
+ const handleContinue = useCallback3(() => {
2541
2589
  onContinue({
2542
2590
  username,
2543
2591
  avatarFile,
@@ -2779,7 +2827,7 @@ ConnectAccountsStep.displayName = "ConnectAccountsStep";
2779
2827
 
2780
2828
  // src/onboarding/steps/connect-kalshi-modal.tsx
2781
2829
  import { Venue as Venue3 } from "@agg-build/sdk";
2782
- import { useCallback as useCallback3, useState as useState6 } from "react";
2830
+ import { useCallback as useCallback4, useState as useState6 } from "react";
2783
2831
  import { useLabels as useLabels18 } from "@agg-build/hooks";
2784
2832
  import * as Dialog from "@radix-ui/react-dialog";
2785
2833
  import { jsx as jsx20, jsxs as jsxs20 } from "react/jsx-runtime";
@@ -2794,10 +2842,10 @@ var ConnectKalshiModal = ({
2794
2842
  const [verifying, setVerifying] = useState6(false);
2795
2843
  const [error, setError] = useState6();
2796
2844
  const canVerify = apiKeyId.trim().length > 0 && privateKey.trim().length > 0;
2797
- const handleCancel = useCallback3(() => {
2845
+ const handleCancel = useCallback4(() => {
2798
2846
  onOpenChange(false);
2799
2847
  }, [onOpenChange]);
2800
- const handleVerify = useCallback3(() => __async(null, null, function* () {
2848
+ const handleVerify = useCallback4(() => __async(null, null, function* () {
2801
2849
  if (!canVerify || verifying) return;
2802
2850
  setVerifying(true);
2803
2851
  setError(void 0);
@@ -2826,7 +2874,7 @@ var ConnectKalshiModal = ({
2826
2874
  privateKey,
2827
2875
  verifying
2828
2876
  ]);
2829
- const handleOpenChange = useCallback3(
2877
+ const handleOpenChange = useCallback4(
2830
2878
  (value) => {
2831
2879
  if (value) {
2832
2880
  setApiKeyId("");
@@ -3029,7 +3077,7 @@ var ConnectKalshiModal = ({
3029
3077
  ConnectKalshiModal.displayName = "ConnectKalshiModal";
3030
3078
 
3031
3079
  // src/onboarding/steps/connect-onchain-modal.tsx
3032
- import { useCallback as useCallback4, useState as useState7 } from "react";
3080
+ import { useCallback as useCallback5, useState as useState7 } from "react";
3033
3081
  import { useLabels as useLabels19 } from "@agg-build/hooks";
3034
3082
  import * as Dialog2 from "@radix-ui/react-dialog";
3035
3083
  import { jsx as jsx21, jsxs as jsxs21 } from "react/jsx-runtime";
@@ -3041,10 +3089,10 @@ var ConnectOnchainModal = ({
3041
3089
  const labels = useLabels19();
3042
3090
  const [connecting, setConnecting] = useState7(false);
3043
3091
  const [error, setError] = useState7();
3044
- const handleCancel = useCallback4(() => {
3092
+ const handleCancel = useCallback5(() => {
3045
3093
  onOpenChange(false);
3046
3094
  }, [onOpenChange]);
3047
- const handleConnect = useCallback4(() => __async(null, null, function* () {
3095
+ const handleConnect = useCallback5(() => __async(null, null, function* () {
3048
3096
  if (connecting) return;
3049
3097
  setConnecting(true);
3050
3098
  setError(void 0);
@@ -3059,7 +3107,7 @@ var ConnectOnchainModal = ({
3059
3107
  setConnecting(false);
3060
3108
  }
3061
3109
  }), [connecting, labels.onboarding.connectOnchainModal.fallbackError, onConnect, onOpenChange]);
3062
- const handleOpenChange = useCallback4(
3110
+ const handleOpenChange = useCallback5(
3063
3111
  (value) => {
3064
3112
  if (value) {
3065
3113
  setError(void 0);
@@ -3169,30 +3217,30 @@ var OnboardingModal = ({
3169
3217
  setOnchainConnected(false);
3170
3218
  }
3171
3219
  }, [open]);
3172
- const handleHowItWorksContinue = useCallback5(() => {
3220
+ const handleHowItWorksContinue = useCallback6(() => {
3173
3221
  setStep(ONBOARDING_STEPS.PROFILE_SETUP);
3174
3222
  }, []);
3175
- const handleProfileContinue = useCallback5(
3223
+ const handleProfileContinue = useCallback6(
3176
3224
  (data) => {
3177
3225
  onProfileSubmit == null ? void 0 : onProfileSubmit(data);
3178
3226
  setStep(ONBOARDING_STEPS.CONNECT_ACCOUNTS);
3179
3227
  },
3180
3228
  [onProfileSubmit]
3181
3229
  );
3182
- const handleConnectContinue = useCallback5(() => {
3230
+ const handleConnectContinue = useCallback6(() => {
3183
3231
  onComplete == null ? void 0 : onComplete();
3184
3232
  }, [onComplete]);
3185
- const handleOpenOnchainModal = useCallback5(() => {
3233
+ const handleOpenOnchainModal = useCallback6(() => {
3186
3234
  setOnchainModalOpen(true);
3187
3235
  }, []);
3188
- const handleOnchainConnect = useCallback5(() => __async(null, null, function* () {
3236
+ const handleOnchainConnect = useCallback6(() => __async(null, null, function* () {
3189
3237
  yield onConnectOnchain == null ? void 0 : onConnectOnchain();
3190
3238
  setOnchainConnected(true);
3191
3239
  }), [onConnectOnchain]);
3192
- const handleOpenKalshiModal = useCallback5(() => {
3240
+ const handleOpenKalshiModal = useCallback6(() => {
3193
3241
  setKalshiModalOpen(true);
3194
3242
  }, []);
3195
- const handleKalshiVerify = useCallback5(
3243
+ const handleKalshiVerify = useCallback6(
3196
3244
  (credentials) => __async(null, null, function* () {
3197
3245
  yield onConnectKalshi == null ? void 0 : onConnectKalshi(credentials);
3198
3246
  setKalshiConnected(true);
@@ -3246,26 +3294,25 @@ var OnboardingModal = ({
3246
3294
  OnboardingModal.displayName = "OnboardingModal";
3247
3295
 
3248
3296
  // src/profile/index.tsx
3249
- import { Venue as Venue4 } from "@agg-build/sdk";
3250
- import { useState as useState10, useEffect as useEffect7, useCallback as useCallback8, useMemo as useMemo2 } from "react";
3297
+ import { useState as useState10, useEffect as useEffect7, useCallback as useCallback9, useMemo as useMemo3 } from "react";
3251
3298
  import { useAggClient as useAggClient2, useAggAuthState as useAggAuthState2 } from "@agg-build/hooks";
3252
3299
 
3253
3300
  // src/profile/profile-modal.constants.ts
3254
3301
  var PROFILE_TAB_KEYS = {
3255
- ABOUT: "about",
3256
- ACCOUNTS_WALLETS: "accounts-wallets"
3302
+ PROFILE_ACCOUNTS: "profile-accounts",
3303
+ TRADING_ACCESS: "trading-access"
3257
3304
  };
3258
3305
  var PROFILE_TAB_ITEMS = [
3259
- { value: PROFILE_TAB_KEYS.ABOUT, label: "About", icon: "profile-about-tab" },
3260
3306
  {
3261
- value: PROFILE_TAB_KEYS.ACCOUNTS_WALLETS,
3262
- label: "Accounts & wallets",
3263
- icon: "profile-accounts-wallets-tab"
3264
- }
3307
+ value: PROFILE_TAB_KEYS.PROFILE_ACCOUNTS,
3308
+ label: "Profile & accounts",
3309
+ icon: "profile-about-tab"
3310
+ },
3311
+ { value: PROFILE_TAB_KEYS.TRADING_ACCESS, label: "Trading access", icon: "shield-trust" }
3265
3312
  ];
3266
3313
 
3267
3314
  // src/profile/tabs/about-tab.tsx
3268
- import { useCallback as useCallback6, useRef as useRef4 } from "react";
3315
+ import { useCallback as useCallback7, useRef as useRef4 } from "react";
3269
3316
  import { useLabels as useLabels21 } from "@agg-build/hooks";
3270
3317
  import { jsx as jsx23, jsxs as jsxs23 } from "react/jsx-runtime";
3271
3318
  var AboutTab = ({
@@ -3279,11 +3326,11 @@ var AboutTab = ({
3279
3326
  }) => {
3280
3327
  const labels = useLabels21();
3281
3328
  const fileInputRef = useRef4(null);
3282
- const handleAvatarClick = useCallback6(() => {
3329
+ const handleAvatarClick = useCallback7(() => {
3283
3330
  var _a;
3284
3331
  (_a = fileInputRef.current) == null ? void 0 : _a.click();
3285
3332
  }, []);
3286
- const handleFileChange = useCallback6(
3333
+ const handleFileChange = useCallback7(
3287
3334
  (e) => {
3288
3335
  var _a;
3289
3336
  const file = (_a = e.target.files) == null ? void 0 : _a[0];
@@ -3299,69 +3346,67 @@ var AboutTab = ({
3299
3346
  );
3300
3347
  const resolvedPreview = draftAvatarPreview != null ? draftAvatarPreview : avatarPreview;
3301
3348
  const hasAvatarPreview = Boolean(resolvedPreview);
3302
- return /* @__PURE__ */ jsxs23("div", { className: "agg-profile-about flex flex-col gap-8", children: [
3303
- /* @__PURE__ */ jsxs23("div", { className: "agg-profile-avatar-section flex w-full flex-col items-stretch sm:items-start", children: [
3304
- /* @__PURE__ */ jsxs23(
3305
- "button",
3306
- {
3307
- type: "button",
3308
- onClick: handleAvatarClick,
3309
- className: cn(
3310
- "agg-profile-avatar-trigger",
3311
- "group relative flex items-center justify-center self-start",
3312
- "h-[80px] w-[80px]",
3313
- "rounded-agg-full",
3314
- "bg-agg-secondary-hover",
3315
- !hasAvatarPreview && "hover:bg-agg-tertiary",
3316
- "transition-colors cursor-pointer",
3317
- "overflow-hidden"
3318
- ),
3319
- "aria-label": labels.onboarding.profileSetup.uploadProfilePictureAria,
3320
- children: [
3321
- !hasAvatarPreview ? /* @__PURE__ */ jsx23(
3322
- "svg",
3323
- {
3324
- "aria-hidden": true,
3325
- viewBox: "0 0 80 80",
3326
- className: "pointer-events-none absolute inset-0 h-full w-full text-agg-separator group-hover:text-agg-muted-foreground",
3327
- children: /* @__PURE__ */ jsx23(
3328
- "circle",
3329
- {
3330
- cx: "40",
3331
- cy: "40",
3332
- r: "39.5",
3333
- fill: "none",
3334
- stroke: "currentColor",
3335
- strokeWidth: "1",
3336
- strokeDasharray: "8 8"
3337
- }
3338
- )
3339
- }
3340
- ) : null,
3341
- resolvedPreview ? /* @__PURE__ */ jsx23(
3342
- RemoteImage,
3343
- {
3344
- src: resolvedPreview,
3345
- alt: labels.onboarding.profileSetup.profilePreviewAlt,
3346
- className: "h-full w-full object-cover"
3347
- }
3348
- ) : /* @__PURE__ */ jsx23(Icon, { name: "profile", className: "h-7 w-7 text-agg-muted-foreground" })
3349
- ]
3350
- }
3351
- ),
3352
- /* @__PURE__ */ jsx23(
3353
- "input",
3354
- {
3355
- ref: fileInputRef,
3356
- type: "file",
3357
- accept: "image/*",
3358
- onChange: handleFileChange,
3359
- className: "hidden",
3360
- "aria-hidden": "true"
3361
- }
3362
- )
3363
- ] }),
3364
- /* @__PURE__ */ jsxs23("div", { className: "agg-form-section flex flex-col gap-2", children: [
3349
+ return /* @__PURE__ */ jsx23("div", { className: "agg-profile-about flex flex-col gap-8", children: /* @__PURE__ */ jsxs23("div", { className: "agg-profile-avatar-section flex w-full items-center gap-6", children: [
3350
+ /* @__PURE__ */ jsxs23(
3351
+ "button",
3352
+ {
3353
+ type: "button",
3354
+ onClick: handleAvatarClick,
3355
+ className: cn(
3356
+ "agg-profile-avatar-trigger",
3357
+ "group relative flex items-center justify-center self-start",
3358
+ "h-[80px] w-[80px]",
3359
+ "rounded-agg-full",
3360
+ "bg-agg-secondary-hover",
3361
+ !hasAvatarPreview && "hover:bg-agg-tertiary",
3362
+ "transition-colors cursor-pointer",
3363
+ "overflow-hidden"
3364
+ ),
3365
+ "aria-label": labels.onboarding.profileSetup.uploadProfilePictureAria,
3366
+ children: [
3367
+ !hasAvatarPreview ? /* @__PURE__ */ jsx23(
3368
+ "svg",
3369
+ {
3370
+ "aria-hidden": true,
3371
+ viewBox: "0 0 80 80",
3372
+ className: "pointer-events-none absolute inset-0 h-full w-full text-agg-separator group-hover:text-agg-muted-foreground",
3373
+ children: /* @__PURE__ */ jsx23(
3374
+ "circle",
3375
+ {
3376
+ cx: "40",
3377
+ cy: "40",
3378
+ r: "39.5",
3379
+ fill: "none",
3380
+ stroke: "currentColor",
3381
+ strokeWidth: "1",
3382
+ strokeDasharray: "8 8"
3383
+ }
3384
+ )
3385
+ }
3386
+ ) : null,
3387
+ resolvedPreview ? /* @__PURE__ */ jsx23(
3388
+ RemoteImage,
3389
+ {
3390
+ src: resolvedPreview,
3391
+ alt: labels.onboarding.profileSetup.profilePreviewAlt,
3392
+ className: "h-full w-full object-cover"
3393
+ }
3394
+ ) : /* @__PURE__ */ jsx23(Icon, { name: "profile", className: "h-7 w-7 text-agg-muted-foreground" })
3395
+ ]
3396
+ }
3397
+ ),
3398
+ /* @__PURE__ */ jsx23(
3399
+ "input",
3400
+ {
3401
+ ref: fileInputRef,
3402
+ type: "file",
3403
+ accept: "image/*",
3404
+ onChange: handleFileChange,
3405
+ className: "hidden",
3406
+ "aria-hidden": "true"
3407
+ }
3408
+ ),
3409
+ /* @__PURE__ */ jsxs23("div", { className: "agg-form-section flex min-w-0 flex-1 flex-col gap-2", children: [
3365
3410
  /* @__PURE__ */ jsx23(
3366
3411
  "label",
3367
3412
  {
@@ -3379,7 +3424,7 @@ var AboutTab = ({
3379
3424
  value: draftUsername,
3380
3425
  onChange: (e) => onDraftUsernameChange(e.target.value),
3381
3426
  className: cn(
3382
- "w-full px-4 py-3",
3427
+ "h-10 w-full px-3 py-2.5",
3383
3428
  "rounded-agg-sm",
3384
3429
  "border border-agg-separator",
3385
3430
  "bg-agg-secondary text-agg-foreground",
@@ -3392,27 +3437,33 @@ var AboutTab = ({
3392
3437
  }
3393
3438
  )
3394
3439
  ] })
3395
- ] });
3440
+ ] }) });
3396
3441
  };
3397
3442
  AboutTab.displayName = "AboutTab";
3398
3443
 
3399
3444
  // src/profile/tabs/accounts-wallets-tab.tsx
3400
- import { useCallback as useCallback7, useEffect as useEffect6, useState as useState9 } from "react";
3401
- import { useAggClient, useDepositAddresses as useDepositAddresses2 } from "@agg-build/hooks";
3402
3445
  import { jsx as jsx24, jsxs as jsxs24 } from "react/jsx-runtime";
3403
3446
  var SectionTitle = ({ children }) => /* @__PURE__ */ jsx24("h3", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children });
3404
3447
  var AccountRow = ({ children, className }) => /* @__PURE__ */ jsx24(
3405
3448
  "div",
3406
3449
  {
3407
3450
  className: cn(
3408
- "flex items-center justify-between",
3451
+ "flex h-12 items-center justify-between",
3409
3452
  "rounded-agg-lg border border-agg-separator bg-agg-secondary",
3410
- "px-5 py-3",
3453
+ "px-5",
3411
3454
  className
3412
3455
  ),
3413
3456
  children
3414
3457
  }
3415
3458
  );
3459
+ var AccountIdentity = ({
3460
+ icon,
3461
+ label,
3462
+ iconClassName
3463
+ }) => /* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 items-center gap-3", children: [
3464
+ /* @__PURE__ */ jsx24("span", { className: cn("flex h-5 w-5 shrink-0 items-center justify-center", iconClassName), children: /* @__PURE__ */ jsx24(Icon, { name: icon, size: "small", color: "currentColor" }) }),
3465
+ /* @__PURE__ */ jsx24("span", { className: "truncate text-agg-base font-agg-normal leading-6 text-agg-foreground", children: label })
3466
+ ] });
3416
3467
  var ConnectTextButton = ({ onClick }) => /* @__PURE__ */ jsx24(
3417
3468
  "button",
3418
3469
  {
@@ -3431,8 +3482,159 @@ var DisconnectTextButton = ({ onClick }) => /* @__PURE__ */ jsx24(
3431
3482
  children: "Disconnect"
3432
3483
  }
3433
3484
  );
3434
- var TRADING_ACCESS_VENUES = ["kalshi", "polymarket", "opinion", "predict"];
3485
+ var VerifiedBadge = () => /* @__PURE__ */ jsx24(Icon, { name: "check-badge", size: "small", color: "var(--agg-color-primary, #536dfe)" });
3486
+ var getWalletIconName = (wallet) => {
3487
+ const chain = wallet.chain.toLowerCase();
3488
+ if (chain === "solana" || chain === "svm") {
3489
+ return "solana";
3490
+ }
3491
+ return "ethereum";
3492
+ };
3493
+ var ConnectedAccountRow = ({
3494
+ icon,
3495
+ label,
3496
+ connectedLabel,
3497
+ connected,
3498
+ iconClassName,
3499
+ onConnect,
3500
+ onDisconnect
3501
+ }) => {
3502
+ const displayLabel = connected ? connectedLabel != null ? connectedLabel : label : label;
3503
+ return /* @__PURE__ */ jsxs24(AccountRow, { className: "agg-social-account-row gap-4", children: [
3504
+ /* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 items-center gap-3", children: [
3505
+ /* @__PURE__ */ jsx24(AccountIdentity, { icon, label: displayLabel, iconClassName }),
3506
+ connected ? /* @__PURE__ */ jsx24(VerifiedBadge, {}) : null
3507
+ ] }),
3508
+ connected ? /* @__PURE__ */ jsx24(DisconnectTextButton, { onClick: onDisconnect }) : /* @__PURE__ */ jsx24(ConnectTextButton, { onClick: onConnect })
3509
+ ] });
3510
+ };
3511
+ var AccountsWalletsTab = ({
3512
+ socialAccounts,
3513
+ email,
3514
+ wallets = [],
3515
+ onConnectTwitter,
3516
+ onDisconnectTwitter,
3517
+ onConnectGoogle,
3518
+ onDisconnectGoogle,
3519
+ onConnectApple,
3520
+ onDisconnectApple,
3521
+ onConnectEmail
3522
+ }) => {
3523
+ const twitter = socialAccounts == null ? void 0 : socialAccounts.twitter;
3524
+ const google = socialAccounts == null ? void 0 : socialAccounts.google;
3525
+ const apple = socialAccounts == null ? void 0 : socialAccounts.apple;
3526
+ const hasEmail = Boolean(email);
3527
+ return /* @__PURE__ */ jsxs24("div", { className: "agg-accounts-wallets-tab flex flex-col gap-6", children: [
3528
+ /* @__PURE__ */ jsxs24("div", { className: "agg-social-accounts-section flex flex-col gap-3", children: [
3529
+ /* @__PURE__ */ jsx24(SectionTitle, { children: "Connected accounts" }),
3530
+ /* @__PURE__ */ jsxs24("div", { className: "agg-social-accounts-list flex flex-col gap-4", children: [
3531
+ /* @__PURE__ */ jsx24(
3532
+ ConnectedAccountRow,
3533
+ {
3534
+ icon: "google",
3535
+ iconClassName: "text-agg-foreground",
3536
+ label: "Google",
3537
+ connected: google == null ? void 0 : google.connected,
3538
+ connectedLabel: google == null ? void 0 : google.handle,
3539
+ onConnect: onConnectGoogle,
3540
+ onDisconnect: onDisconnectGoogle
3541
+ }
3542
+ ),
3543
+ /* @__PURE__ */ jsx24(
3544
+ ConnectedAccountRow,
3545
+ {
3546
+ icon: "apple",
3547
+ iconClassName: "text-agg-foreground",
3548
+ label: "Apple",
3549
+ connected: apple == null ? void 0 : apple.connected,
3550
+ connectedLabel: apple == null ? void 0 : apple.handle,
3551
+ onConnect: onConnectApple,
3552
+ onDisconnect: onDisconnectApple
3553
+ }
3554
+ ),
3555
+ /* @__PURE__ */ jsx24(
3556
+ ConnectedAccountRow,
3557
+ {
3558
+ icon: "twitter",
3559
+ iconClassName: "text-agg-foreground",
3560
+ label: "X (Twitter)",
3561
+ connected: twitter == null ? void 0 : twitter.connected,
3562
+ connectedLabel: twitter == null ? void 0 : twitter.handle,
3563
+ onConnect: onConnectTwitter,
3564
+ onDisconnect: onDisconnectTwitter
3565
+ }
3566
+ ),
3567
+ /* @__PURE__ */ jsx24(
3568
+ ConnectedAccountRow,
3569
+ {
3570
+ icon: "email",
3571
+ iconClassName: "text-agg-foreground",
3572
+ label: "Email address",
3573
+ connected: hasEmail,
3574
+ connectedLabel: email != null ? email : void 0,
3575
+ onConnect: onConnectEmail
3576
+ }
3577
+ )
3578
+ ] })
3579
+ ] }),
3580
+ /* @__PURE__ */ jsxs24("div", { className: "agg-wallets-section flex flex-col gap-3", children: [
3581
+ /* @__PURE__ */ jsx24(SectionTitle, { children: "Wallets" }),
3582
+ /* @__PURE__ */ jsx24("div", { className: "flex flex-col gap-2", children: wallets.length > 0 ? wallets.map((wallet) => {
3583
+ var _a;
3584
+ return /* @__PURE__ */ jsx24(AccountRow, { className: "gap-4", children: /* @__PURE__ */ jsxs24("div", { className: "flex min-w-0 items-center gap-3", children: [
3585
+ /* @__PURE__ */ jsx24(
3586
+ AccountIdentity,
3587
+ {
3588
+ icon: getWalletIconName(wallet),
3589
+ iconClassName: "text-agg-foreground",
3590
+ label: (_a = wallet.displayAddress) != null ? _a : wallet.address
3591
+ }
3592
+ ),
3593
+ /* @__PURE__ */ jsx24(VerifiedBadge, {})
3594
+ ] }) }, `${wallet.chain}:${wallet.address}`);
3595
+ }) : null })
3596
+ ] })
3597
+ ] });
3598
+ };
3599
+ AccountsWalletsTab.displayName = "AccountsWalletsTab";
3600
+
3601
+ // src/profile/tabs/trading-access-tab.tsx
3602
+ import {
3603
+ getVenueAvailabilityState,
3604
+ getVisibleVenuesByConfig,
3605
+ useAggClient,
3606
+ useAppConfig,
3607
+ useDepositAddresses as useDepositAddresses2,
3608
+ useGeoBlock,
3609
+ useLabels as useLabels22
3610
+ } from "@agg-build/hooks";
3611
+ import { useCallback as useCallback8, useEffect as useEffect6, useMemo as useMemo2, useState as useState9 } from "react";
3612
+ import { jsx as jsx25, jsxs as jsxs25 } from "react/jsx-runtime";
3613
+ var TRADING_ACCESS_VENUES = [
3614
+ "kalshi",
3615
+ "polymarket",
3616
+ "opinion",
3617
+ "probable",
3618
+ "limitless",
3619
+ "predict",
3620
+ "myriad",
3621
+ "hyperliquid"
3622
+ ];
3623
+ var TRADING_ACCESS_VENUE_ITEMS = TRADING_ACCESS_VENUES.map((id) => ({ id }));
3624
+ var SectionTitle2 = ({ children }) => /* @__PURE__ */ jsx25("h3", { className: "text-agg-sm font-agg-bold leading-agg-5 text-agg-foreground", children });
3625
+ var AccessRow = ({ children }) => /* @__PURE__ */ jsx25(
3626
+ "div",
3627
+ {
3628
+ className: cn(
3629
+ "flex h-12 items-center justify-between gap-4",
3630
+ "rounded-agg-lg border border-agg-separator bg-agg-secondary",
3631
+ "px-5"
3632
+ ),
3633
+ children
3634
+ }
3635
+ );
3435
3636
  var VerifyIdentityButton = ({ onError }) => {
3637
+ const labels = useLabels22();
3436
3638
  const client = useAggClient();
3437
3639
  const [isInitiating, setIsInitiating] = useState9(false);
3438
3640
  const [needsDepositAddress, setNeedsDepositAddress] = useState9(false);
@@ -3455,148 +3657,81 @@ var VerifyIdentityButton = ({ onError }) => {
3455
3657
  });
3456
3658
  }, [isReady, isInitiating, client, onError]);
3457
3659
  useEffect6(() => {
3458
- if (isTimedOut && isInitiating) {
3459
- setIsInitiating(false);
3460
- setNeedsDepositAddress(false);
3461
- onError == null ? void 0 : onError(new Error("Deposit address provisioning timed out"));
3462
- }
3660
+ if (!isTimedOut || !isInitiating) return;
3661
+ setIsInitiating(false);
3662
+ setNeedsDepositAddress(false);
3663
+ onError == null ? void 0 : onError(new Error("Deposit address provisioning timed out"));
3463
3664
  }, [isTimedOut, isInitiating, onError]);
3464
- const handleClick = useCallback7(() => {
3665
+ const handleClick = useCallback8(() => {
3465
3666
  setIsInitiating(true);
3466
3667
  setNeedsDepositAddress(true);
3467
3668
  }, []);
3468
- return /* @__PURE__ */ jsx24(
3669
+ return /* @__PURE__ */ jsx25(
3469
3670
  "button",
3470
3671
  {
3471
3672
  type: "button",
3472
3673
  disabled: isInitiating,
3473
3674
  onClick: handleClick,
3474
3675
  className: "shrink-0 cursor-pointer text-agg-sm font-agg-bold leading-agg-5 text-agg-primary whitespace-nowrap disabled:cursor-not-allowed disabled:opacity-60",
3475
- children: isInitiating ? /* @__PURE__ */ jsx24("span", { className: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : "Verify Identity"
3676
+ children: isInitiating ? /* @__PURE__ */ jsx25("span", { className: "inline-block h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : labels.trading.kycVerify
3476
3677
  }
3477
3678
  );
3478
3679
  };
3479
- var TradingAccessSection = ({
3680
+ var AvailableStatus = () => /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2", children: [
3681
+ /* @__PURE__ */ jsx25(Icon, { name: "check-badge", size: "small", color: "var(--agg-color-primary, #536dfe)" }),
3682
+ /* @__PURE__ */ jsx25("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-foreground whitespace-nowrap", children: "Available" })
3683
+ ] });
3684
+ var GeoblockedStatus = () => {
3685
+ const labels = useLabels22();
3686
+ return /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 text-agg-muted-foreground", children: [
3687
+ /* @__PURE__ */ jsx25(Icon, { name: "warning-filled", size: "small", color: "currentColor" }),
3688
+ /* @__PURE__ */ jsx25("span", { className: "text-agg-sm font-agg-normal leading-agg-5 whitespace-nowrap", children: labels.trading.venueUnavailableInRegion })
3689
+ ] });
3690
+ };
3691
+ var TradingAccessTab = ({
3480
3692
  venueAccounts,
3481
3693
  onKycError
3482
3694
  }) => {
3483
- return /* @__PURE__ */ jsxs24("div", { className: "agg-trading-access-section flex flex-col gap-3", children: [
3484
- /* @__PURE__ */ jsx24(SectionTitle, { children: "Trading access" }),
3485
- /* @__PURE__ */ jsx24("div", { className: "flex flex-col gap-2", children: TRADING_ACCESS_VENUES.map((venue) => {
3695
+ const labels = useLabels22();
3696
+ const { disabledVenues } = useAppConfig();
3697
+ const { isLocationBlocked } = useGeoBlock();
3698
+ const visibleVenues = useMemo2(
3699
+ () => getVisibleVenuesByConfig(TRADING_ACCESS_VENUE_ITEMS, disabledVenues),
3700
+ [disabledVenues]
3701
+ );
3702
+ return /* @__PURE__ */ jsxs25("div", { className: "agg-trading-access-section flex flex-col gap-4", children: [
3703
+ /* @__PURE__ */ jsx25(SectionTitle2, { children: "Venues" }),
3704
+ /* @__PURE__ */ jsx25("div", { className: "flex flex-col gap-3", children: visibleVenues.map(({ id: venue }) => {
3486
3705
  var _a;
3487
- const venueAccount = venueAccounts == null ? void 0 : venueAccounts.find((va) => va.venue === venue);
3706
+ const venueAccount = venueAccounts == null ? void 0 : venueAccounts.find((account) => account.venue === venue);
3488
3707
  const isKalshi = venue === "kalshi";
3489
3708
  const isVerified = (venueAccount == null ? void 0 : venueAccount.kycStatus) === "verified";
3709
+ const availabilityState = getVenueAvailabilityState({
3710
+ venueId: venue,
3711
+ disabledVenues,
3712
+ isLocationBlocked
3713
+ });
3490
3714
  const displayName = (_a = venueLogoLabels[venue]) != null ? _a : venue;
3491
- return /* @__PURE__ */ jsxs24(AccountRow, { children: [
3492
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3", children: [
3493
- /* @__PURE__ */ jsx24(VenueLogo, { venue, size: "small" }),
3494
- /* @__PURE__ */ jsx24("span", { className: "text-agg-base font-agg-normal leading-6 text-agg-foreground whitespace-nowrap", children: displayName })
3715
+ return /* @__PURE__ */ jsxs25(AccessRow, { children: [
3716
+ /* @__PURE__ */ jsxs25("div", { className: "flex min-w-0 items-center gap-3", children: [
3717
+ /* @__PURE__ */ jsx25(VenueLogo, { venue, size: "small" }),
3718
+ /* @__PURE__ */ jsx25("span", { className: "truncate text-agg-base font-agg-normal leading-6 text-agg-foreground", children: displayName })
3495
3719
  ] }),
3496
- isKalshi && !isVerified ? /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-4", children: [
3497
- /* @__PURE__ */ jsx24("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-muted-foreground whitespace-nowrap", children: "KYC required" }),
3498
- /* @__PURE__ */ jsx24(VerifyIdentityButton, { onError: onKycError })
3499
- ] }) : isKalshi && isVerified ? /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-4", children: [
3500
- /* @__PURE__ */ jsx24("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-muted-foreground whitespace-nowrap", children: "Verified" }),
3501
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
3502
- /* @__PURE__ */ jsx24(
3503
- Icon,
3504
- {
3505
- name: "check-badge",
3506
- size: "small",
3507
- color: "var(--agg-color-primary, #536dfe)"
3508
- }
3509
- ),
3510
- /* @__PURE__ */ jsx24("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-foreground whitespace-nowrap", children: "Available" })
3511
- ] })
3512
- ] }) : /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
3513
- /* @__PURE__ */ jsx24(Icon, { name: "check-badge", size: "small", color: "var(--agg-color-primary, #536dfe)" }),
3514
- /* @__PURE__ */ jsx24("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-foreground whitespace-nowrap", children: "Available" })
3515
- ] })
3720
+ availabilityState === "geoblocked" ? /* @__PURE__ */ jsx25(GeoblockedStatus, {}) : isKalshi && !isVerified ? /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-4", children: [
3721
+ /* @__PURE__ */ jsx25("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-muted-foreground whitespace-nowrap", children: labels.trading.kycRequired }),
3722
+ /* @__PURE__ */ jsx25(VerifyIdentityButton, { onError: onKycError })
3723
+ ] }) : isKalshi && isVerified ? /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-4", children: [
3724
+ /* @__PURE__ */ jsx25("span", { className: "text-agg-sm font-agg-normal leading-agg-5 text-agg-muted-foreground whitespace-nowrap", children: labels.trading.verified }),
3725
+ /* @__PURE__ */ jsx25(AvailableStatus, {})
3726
+ ] }) : /* @__PURE__ */ jsx25(AvailableStatus, {})
3516
3727
  ] }, venue);
3517
3728
  }) })
3518
3729
  ] });
3519
3730
  };
3520
- var AccountsWalletsTab = ({
3521
- exchanges: _exchanges,
3522
- socialAccounts,
3523
- email,
3524
- venueAccounts,
3525
- onKycError,
3526
- onDisconnectExchange: _onDisconnectExchange,
3527
- onConnectTwitter,
3528
- onDisconnectTwitter,
3529
- onConnectGoogle,
3530
- onDisconnectGoogle,
3531
- onConnectApple,
3532
- onDisconnectApple,
3533
- onConnectDiscord: _onConnectDiscord,
3534
- onDisconnectDiscord: _onDisconnectDiscord,
3535
- onConnectTelegram: _onConnectTelegram,
3536
- onDisconnectTelegram: _onDisconnectTelegram,
3537
- onConnectEmail
3538
- }) => {
3539
- const twitter = socialAccounts == null ? void 0 : socialAccounts.twitter;
3540
- const google = socialAccounts == null ? void 0 : socialAccounts.google;
3541
- const apple = socialAccounts == null ? void 0 : socialAccounts.apple;
3542
- return /* @__PURE__ */ jsxs24("div", { className: "agg-accounts-wallets-tab flex flex-col gap-8", children: [
3543
- /* @__PURE__ */ jsx24(TradingAccessSection, { venueAccounts, onKycError }),
3544
- /* @__PURE__ */ jsxs24("div", { className: "agg-social-accounts-section flex flex-col gap-3", children: [
3545
- /* @__PURE__ */ jsx24(SectionTitle, { children: "Social Accounts" }),
3546
- /* @__PURE__ */ jsxs24("div", { className: "agg-social-accounts-list flex flex-col gap-2", children: [
3547
- /* @__PURE__ */ jsxs24(AccountRow, { className: "agg-social-account-row", children: [
3548
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3", children: [
3549
- /* @__PURE__ */ jsx24("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-agg-foreground", children: /* @__PURE__ */ jsx24(Icon, { name: "google", size: "small", color: "currentColor" }) }),
3550
- /* @__PURE__ */ jsx24("span", { className: "text-agg-base font-agg-normal leading-6 text-agg-foreground whitespace-nowrap", children: "Google" })
3551
- ] }),
3552
- (google == null ? void 0 : google.connected) ? /* @__PURE__ */ jsx24(DisconnectTextButton, { onClick: onDisconnectGoogle }) : /* @__PURE__ */ jsx24(ConnectTextButton, { onClick: onConnectGoogle })
3553
- ] }),
3554
- /* @__PURE__ */ jsxs24(AccountRow, { className: "agg-social-account-row", children: [
3555
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3", children: [
3556
- /* @__PURE__ */ jsx24("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-agg-foreground", children: /* @__PURE__ */ jsx24(Icon, { name: "apple", size: "small", color: "currentColor" }) }),
3557
- /* @__PURE__ */ jsx24("span", { className: "text-agg-base font-agg-normal leading-6 text-agg-foreground whitespace-nowrap", children: "Apple" })
3558
- ] }),
3559
- (apple == null ? void 0 : apple.connected) ? /* @__PURE__ */ jsx24(DisconnectTextButton, { onClick: onDisconnectApple }) : /* @__PURE__ */ jsx24(ConnectTextButton, { onClick: onConnectApple })
3560
- ] }),
3561
- /* @__PURE__ */ jsxs24(AccountRow, { className: "agg-social-account-row", children: [
3562
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3", children: [
3563
- /* @__PURE__ */ jsx24("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-agg-foreground", children: /* @__PURE__ */ jsx24(Icon, { name: "twitter", size: "small", color: "currentColor" }) }),
3564
- /* @__PURE__ */ jsx24("span", { className: "text-agg-base font-agg-normal leading-6 text-agg-foreground whitespace-nowrap", children: "X (Twitter)" })
3565
- ] }),
3566
- (twitter == null ? void 0 : twitter.connected) ? /* @__PURE__ */ jsx24(DisconnectTextButton, { onClick: onDisconnectTwitter }) : /* @__PURE__ */ jsx24(ConnectTextButton, { onClick: onConnectTwitter })
3567
- ] })
3568
- ] })
3569
- ] }),
3570
- /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-3", children: [
3571
- /* @__PURE__ */ jsx24(SectionTitle, { children: "Email Address" }),
3572
- /* @__PURE__ */ jsxs24(
3573
- "button",
3574
- {
3575
- type: "button",
3576
- onClick: onConnectEmail,
3577
- className: cn(
3578
- "flex items-center justify-between",
3579
- "rounded-agg-lg border border-agg-separator bg-agg-secondary",
3580
- "px-5 py-3",
3581
- "cursor-pointer hover:bg-agg-secondary-hover"
3582
- ),
3583
- children: [
3584
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-3", children: [
3585
- /* @__PURE__ */ jsx24("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-agg-foreground", children: /* @__PURE__ */ jsx24(Icon, { name: "email", size: "small", color: "currentColor" }) }),
3586
- /* @__PURE__ */ jsx24("span", { className: "text-agg-base font-agg-normal leading-6 text-agg-foreground whitespace-nowrap", children: email != null ? email : "Connect email" })
3587
- ] }),
3588
- /* @__PURE__ */ jsx24(Icon, { name: "chevron-right", size: "small", color: "currentColor" })
3589
- ]
3590
- }
3591
- )
3592
- ] })
3593
- ] });
3594
- };
3595
- AccountsWalletsTab.displayName = "AccountsWalletsTab";
3731
+ TradingAccessTab.displayName = "TradingAccessTab";
3596
3732
 
3597
3733
  // src/profile/index.tsx
3598
- import { jsx as jsx25, jsxs as jsxs25 } from "react/jsx-runtime";
3599
- var EVM_WALLET_VENUES = [Venue4.polymarket, Venue4.predict, Venue4.opinion];
3734
+ import { jsx as jsx26, jsxs as jsxs26 } from "react/jsx-runtime";
3600
3735
  var ProfileModal = ({
3601
3736
  open,
3602
3737
  onOpenChange,
@@ -3604,21 +3739,15 @@ var ProfileModal = ({
3604
3739
  avatarPreview,
3605
3740
  onSave,
3606
3741
  onDeleteProfile,
3607
- exchanges,
3608
3742
  socialAccounts,
3609
3743
  wallets,
3610
3744
  email,
3611
- onDisconnectExchange: onDisconnectExchangeProp,
3612
3745
  onConnectTwitter,
3613
3746
  onDisconnectTwitter,
3614
3747
  onConnectGoogle,
3615
3748
  onDisconnectGoogle,
3616
3749
  onConnectApple,
3617
3750
  onDisconnectApple,
3618
- onConnectDiscord,
3619
- onDisconnectDiscord,
3620
- onConnectTelegram,
3621
- onDisconnectTelegram,
3622
3751
  onDisconnectWallet,
3623
3752
  onConnectEmail,
3624
3753
  onKycError
@@ -3627,7 +3756,7 @@ var ProfileModal = ({
3627
3756
  const client = useAggClient2();
3628
3757
  const { user, startAuth } = useAggAuthState2();
3629
3758
  const toastCtx = useOptionalToast();
3630
- const [activeTab, setActiveTab] = useState10(PROFILE_TAB_KEYS.ABOUT);
3759
+ const [activeTab, setActiveTab] = useState10(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
3631
3760
  const resolvedInitialUsername = (_a = username != null ? username : user == null ? void 0 : user.username) != null ? _a : "";
3632
3761
  const [draftUsername, setDraftUsername] = useState10(resolvedInitialUsername);
3633
3762
  const [draftAvatarFile, setDraftAvatarFile] = useState10();
@@ -3638,11 +3767,11 @@ var ProfileModal = ({
3638
3767
  var _a2;
3639
3768
  setDraftUsername((_a2 = username != null ? username : user == null ? void 0 : user.username) != null ? _a2 : "");
3640
3769
  }, [username, user == null ? void 0 : user.username]);
3641
- const handleOpenChange = useCallback8(
3770
+ const handleOpenChange = useCallback9(
3642
3771
  (isOpen) => {
3643
3772
  var _a2;
3644
3773
  if (!isOpen) {
3645
- setActiveTab(PROFILE_TAB_KEYS.ABOUT);
3774
+ setActiveTab(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
3646
3775
  setIsSaving(false);
3647
3776
  setDraftUsername((_a2 = username != null ? username : user == null ? void 0 : user.username) != null ? _a2 : "");
3648
3777
  setDraftAvatarFile(void 0);
@@ -3662,7 +3791,7 @@ var ProfileModal = ({
3662
3791
  setDraftAvatarPreview
3663
3792
  ]
3664
3793
  );
3665
- const handleDraftAvatarChange = useCallback8(
3794
+ const handleDraftAvatarChange = useCallback9(
3666
3795
  (file, preview) => {
3667
3796
  const ACCEPTED_AVATAR_TYPES = ["image/jpeg", "image/png", "image/gif", "image/webp"];
3668
3797
  if (file && !ACCEPTED_AVATAR_TYPES.includes(file.type)) {
@@ -3677,7 +3806,7 @@ var ProfileModal = ({
3677
3806
  );
3678
3807
  const originalUsername = (_b = username != null ? username : user == null ? void 0 : user.username) != null ? _b : "";
3679
3808
  const hasChanges = draftUsername !== originalUsername || draftAvatarFile !== void 0;
3680
- const handleSave = useCallback8(() => __async(null, null, function* () {
3809
+ const handleSave = useCallback9(() => __async(null, null, function* () {
3681
3810
  var _a2, _b2, _c2;
3682
3811
  setIsSaving(true);
3683
3812
  try {
@@ -3732,7 +3861,7 @@ var ProfileModal = ({
3732
3861
  originalUsername,
3733
3862
  toastCtx
3734
3863
  ]);
3735
- const handleCancel = useCallback8(() => {
3864
+ const handleCancel = useCallback9(() => {
3736
3865
  handleOpenChange(false);
3737
3866
  }, [handleOpenChange]);
3738
3867
  const isAccountConnected = (providers) => {
@@ -3776,7 +3905,7 @@ var ProfileModal = ({
3776
3905
  if (typeof window === "undefined") return;
3777
3906
  ((_a2 = window.top) != null ? _a2 : window).location.assign(url);
3778
3907
  };
3779
- const handleConnectTwitter = useCallback8(() => __async(null, null, function* () {
3908
+ const handleConnectTwitter = useCallback9(() => __async(null, null, function* () {
3780
3909
  const result = yield startAuth({
3781
3910
  provider: "twitter",
3782
3911
  redirectUrl: resolveRedirectUrl()
@@ -3786,7 +3915,7 @@ var ProfileModal = ({
3786
3915
  navigateTopWindow(result.url);
3787
3916
  }
3788
3917
  }), [onConnectTwitter, startAuth]);
3789
- const handleConnectGoogle = useCallback8(() => __async(null, null, function* () {
3918
+ const handleConnectGoogle = useCallback9(() => __async(null, null, function* () {
3790
3919
  const result = yield startAuth({
3791
3920
  provider: "google",
3792
3921
  redirectUrl: resolveRedirectUrl()
@@ -3796,7 +3925,7 @@ var ProfileModal = ({
3796
3925
  navigateTopWindow(result.url);
3797
3926
  }
3798
3927
  }), [onConnectGoogle, startAuth]);
3799
- const handleConnectApple = useCallback8(() => __async(null, null, function* () {
3928
+ const handleConnectApple = useCallback9(() => __async(null, null, function* () {
3800
3929
  const result = yield startAuth({
3801
3930
  provider: "apple",
3802
3931
  redirectUrl: resolveRedirectUrl()
@@ -3806,22 +3935,22 @@ var ProfileModal = ({
3806
3935
  navigateTopWindow(result.url);
3807
3936
  }
3808
3937
  }), [onConnectApple, startAuth]);
3809
- const handleDisconnectTwitter = useCallback8(() => __async(null, null, function* () {
3938
+ const handleDisconnectTwitter = useCallback9(() => __async(null, null, function* () {
3810
3939
  yield client.disconnectAccount("twitter");
3811
3940
  yield client.getCurrentUser();
3812
3941
  onDisconnectTwitter == null ? void 0 : onDisconnectTwitter();
3813
3942
  }), [client, onDisconnectTwitter]);
3814
- const handleDisconnectGoogle = useCallback8(() => __async(null, null, function* () {
3943
+ const handleDisconnectGoogle = useCallback9(() => __async(null, null, function* () {
3815
3944
  yield client.disconnectAccount("google");
3816
3945
  yield client.getCurrentUser();
3817
3946
  onDisconnectGoogle == null ? void 0 : onDisconnectGoogle();
3818
3947
  }), [client, onDisconnectGoogle]);
3819
- const handleDisconnectApple = useCallback8(() => __async(null, null, function* () {
3948
+ const handleDisconnectApple = useCallback9(() => __async(null, null, function* () {
3820
3949
  yield client.disconnectAccount("apple");
3821
3950
  yield client.getCurrentUser();
3822
3951
  onDisconnectApple == null ? void 0 : onDisconnectApple();
3823
3952
  }), [client, onDisconnectApple]);
3824
- const handleConnectEmail = useCallback8(() => __async(null, null, function* () {
3953
+ const handleConnectEmail = useCallback9(() => __async(null, null, function* () {
3825
3954
  var _a2;
3826
3955
  const typedEmail = typeof window !== "undefined" ? (_a2 = window.prompt("Enter your email to receive a magic link")) == null ? void 0 : _a2.trim() : void 0;
3827
3956
  if (!typedEmail) return;
@@ -3832,7 +3961,7 @@ var ProfileModal = ({
3832
3961
  });
3833
3962
  onConnectEmail == null ? void 0 : onConnectEmail();
3834
3963
  }), [onConnectEmail, startAuth]);
3835
- const handleDisconnectWallet = useCallback8(
3964
+ const handleDisconnectWallet = useCallback9(
3836
3965
  (wallet) => __async(null, null, function* () {
3837
3966
  const normalizedChain = wallet.chain.toLowerCase();
3838
3967
  const provider = normalizedChain === "solana" || normalizedChain === "svm" ? "solana_wallet" : "wallet";
@@ -3842,7 +3971,7 @@ var ProfileModal = ({
3842
3971
  }),
3843
3972
  [client, onDisconnectWallet]
3844
3973
  );
3845
- const providerActionMap = useMemo2(
3974
+ const providerActionMap = useMemo3(
3846
3975
  () => ({
3847
3976
  twitter: {
3848
3977
  connect: () => {
@@ -3884,7 +4013,7 @@ var ProfileModal = ({
3884
4013
  handleDisconnectTwitter
3885
4014
  ]
3886
4015
  );
3887
- const resolvedWallets = useMemo2(() => {
4016
+ const resolvedWallets = useMemo3(() => {
3888
4017
  var _a2, _b2;
3889
4018
  if (wallets) return wallets;
3890
4019
  return (_b2 = (_a2 = user == null ? void 0 : user.wallets) == null ? void 0 : _a2.map((wallet) => {
@@ -3896,30 +4025,7 @@ var ProfileModal = ({
3896
4025
  };
3897
4026
  })) != null ? _b2 : [];
3898
4027
  }, [user == null ? void 0 : user.wallets, wallets]);
3899
- const resolvedExchanges = useMemo2(() => {
3900
- var _a2, _b2;
3901
- if (exchanges !== void 0) return exchanges;
3902
- const walletAccount = (_a2 = user == null ? void 0 : user.accounts) == null ? void 0 : _a2.find(
3903
- (a) => a.provider.toLowerCase() === "wallet"
3904
- );
3905
- if (!walletAccount) return [];
3906
- const addr = walletAccount.providerAccountId;
3907
- const displayAddress = (_b2 = shortenAddress(addr)) != null ? _b2 : addr;
3908
- return EVM_WALLET_VENUES.map((venue) => ({ venue, displayAddress, verified: false }));
3909
- }, [exchanges, user == null ? void 0 : user.accounts]);
3910
- const handleDisconnectExchange = useCallback8(
3911
- (venue) => __async(null, null, function* () {
3912
- if (exchanges !== void 0) {
3913
- onDisconnectExchangeProp == null ? void 0 : onDisconnectExchangeProp(venue);
3914
- return;
3915
- }
3916
- yield client.disconnectAccount("wallet");
3917
- yield client.getCurrentUser();
3918
- onDisconnectExchangeProp == null ? void 0 : onDisconnectExchangeProp(venue);
3919
- }),
3920
- [client, exchanges, onDisconnectExchangeProp]
3921
- );
3922
- return /* @__PURE__ */ jsx25(Modal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs25(
4028
+ return /* @__PURE__ */ jsx26(Modal, { open, onOpenChange: handleOpenChange, children: /* @__PURE__ */ jsxs26(
3923
4029
  Modal.Container,
3924
4030
  {
3925
4031
  maxWidth: "800px",
@@ -3928,8 +4034,8 @@ var ProfileModal = ({
3928
4034
  container: cn("agg-profile-modal", "min-h-[37.5rem]")
3929
4035
  },
3930
4036
  children: [
3931
- /* @__PURE__ */ jsx25(Modal.Header, { title: "Edit Profile", classNames: { root: "agg-profile-modal-header" } }),
3932
- /* @__PURE__ */ jsx25("div", { className: "agg-profile-tabs sm:hidden w-full", children: /* @__PURE__ */ jsx25(
4037
+ /* @__PURE__ */ jsx26(Modal.Header, { title: "Edit Profile", classNames: { root: "agg-profile-modal-header" } }),
4038
+ /* @__PURE__ */ jsx26("div", { className: "agg-profile-tabs sm:hidden w-full", children: /* @__PURE__ */ jsx26(
3933
4039
  Tabs,
3934
4040
  {
3935
4041
  className: "w-full [&>div]:w-full",
@@ -3938,14 +4044,14 @@ var ProfileModal = ({
3938
4044
  items: PROFILE_TAB_ITEMS.map((tab) => ({
3939
4045
  value: tab.value,
3940
4046
  label: tab.label,
3941
- icon: /* @__PURE__ */ jsx25(Icon, { name: tab.icon, size: "small" })
4047
+ icon: /* @__PURE__ */ jsx26(Icon, { name: tab.icon, size: "small" })
3942
4048
  })),
3943
4049
  value: activeTab,
3944
4050
  onChange: (val) => setActiveTab(val)
3945
4051
  }
3946
4052
  ) }),
3947
- /* @__PURE__ */ jsx25(Modal.Body, { classNames: { root: cn("agg-profile-modal-body", "overflow-x-visible") }, children: /* @__PURE__ */ jsxs25("div", { className: "agg-profile-layout flex flex-col sm:flex-row sm:gap-10", children: [
3948
- /* @__PURE__ */ jsx25("div", { className: "shrink-0", children: /* @__PURE__ */ jsx25(
4053
+ /* @__PURE__ */ jsx26(Modal.Body, { classNames: { root: cn("agg-profile-modal-body", "overflow-x-visible") }, children: /* @__PURE__ */ jsxs26("div", { className: "agg-profile-layout flex flex-col sm:flex-row sm:gap-10", children: [
4054
+ /* @__PURE__ */ jsx26("div", { className: "shrink-0", children: /* @__PURE__ */ jsx26(
3949
4055
  "nav",
3950
4056
  {
3951
4057
  className: cn(
@@ -3961,7 +4067,7 @@ var ProfileModal = ({
3961
4067
  "aria-label": "Profile sections",
3962
4068
  children: PROFILE_TAB_ITEMS.map((tab) => {
3963
4069
  const isActive = activeTab === tab.value;
3964
- return /* @__PURE__ */ jsxs25(
4070
+ return /* @__PURE__ */ jsxs26(
3965
4071
  "button",
3966
4072
  {
3967
4073
  type: "button",
@@ -3977,9 +4083,9 @@ var ProfileModal = ({
3977
4083
  isActive ? "font-agg-normal text-agg-foreground bg-agg-secondary-hover" : "font-agg-normal text-agg-foreground"
3978
4084
  ),
3979
4085
  children: [
3980
- isActive ? /* @__PURE__ */ jsx25("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-agg-primary" }) : null,
3981
- /* @__PURE__ */ jsx25(Icon, { name: tab.icon, size: "small", color: "currentColor" }),
3982
- /* @__PURE__ */ jsx25("span", { className: "shrink-0 whitespace-nowrap", children: tab.label })
4086
+ isActive ? /* @__PURE__ */ jsx26("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-agg-primary" }) : null,
4087
+ /* @__PURE__ */ jsx26(Icon, { name: tab.icon, size: "small", color: "currentColor" }),
4088
+ /* @__PURE__ */ jsx26("span", { className: "shrink-0 whitespace-nowrap", children: tab.label })
3983
4089
  ]
3984
4090
  },
3985
4091
  tab.value
@@ -3987,54 +4093,47 @@ var ProfileModal = ({
3987
4093
  })
3988
4094
  }
3989
4095
  ) }),
3990
- /* @__PURE__ */ jsxs25("div", { className: "agg-profile-content min-w-0 flex-1", children: [
3991
- activeTab === PROFILE_TAB_KEYS.ABOUT ? /* @__PURE__ */ jsx25(
3992
- AboutTab,
3993
- {
3994
- username: username != null ? username : user == null ? void 0 : user.username,
3995
- avatarPreview: (_i = user == null ? void 0 : user.avatarUrl) != null ? _i : avatarPreview,
3996
- onDeleteProfile,
3997
- draftUsername,
3998
- onDraftUsernameChange: setDraftUsername,
3999
- draftAvatarFile,
4000
- onDraftAvatarChange: handleDraftAvatarChange,
4001
- draftAvatarPreview,
4002
- avatarError: avatarTypeError
4003
- }
4004
- ) : null,
4005
- activeTab === PROFILE_TAB_KEYS.ACCOUNTS_WALLETS ? /* @__PURE__ */ jsx25(
4006
- AccountsWalletsTab,
4007
- {
4008
- exchanges: resolvedExchanges,
4009
- venueAccounts: user == null ? void 0 : user.venueAccounts,
4010
- onKycError,
4011
- socialAccounts: resolvedSocialAccounts,
4012
- wallets: resolvedWallets,
4013
- email: resolvedEmail,
4014
- onDisconnectExchange: (venue) => {
4015
- void handleDisconnectExchange(venue);
4016
- },
4017
- onConnectTwitter: providerActionMap.twitter.connect,
4018
- onDisconnectTwitter: providerActionMap.twitter.disconnect,
4019
- onConnectGoogle: providerActionMap.google.connect,
4020
- onDisconnectGoogle: providerActionMap.google.disconnect,
4021
- onConnectApple: providerActionMap.apple.connect,
4022
- onDisconnectApple: providerActionMap.apple.disconnect,
4023
- onConnectDiscord,
4024
- onDisconnectDiscord,
4025
- onConnectTelegram,
4026
- onDisconnectTelegram,
4027
- onDisconnectWallet: (wallet) => {
4028
- void handleDisconnectWallet(wallet);
4029
- },
4030
- onConnectEmail: providerActionMap.email.connect
4031
- }
4032
- ) : null
4096
+ /* @__PURE__ */ jsxs26("div", { className: "agg-profile-content min-w-0 flex-1", children: [
4097
+ activeTab === PROFILE_TAB_KEYS.PROFILE_ACCOUNTS ? /* @__PURE__ */ jsxs26("div", { className: "agg-profile-accounts-tab flex flex-col gap-8", children: [
4098
+ /* @__PURE__ */ jsx26(
4099
+ AboutTab,
4100
+ {
4101
+ username: username != null ? username : user == null ? void 0 : user.username,
4102
+ avatarPreview: (_i = user == null ? void 0 : user.avatarUrl) != null ? _i : avatarPreview,
4103
+ onDeleteProfile,
4104
+ draftUsername,
4105
+ onDraftUsernameChange: setDraftUsername,
4106
+ draftAvatarFile,
4107
+ onDraftAvatarChange: handleDraftAvatarChange,
4108
+ draftAvatarPreview,
4109
+ avatarError: avatarTypeError
4110
+ }
4111
+ ),
4112
+ /* @__PURE__ */ jsx26(
4113
+ AccountsWalletsTab,
4114
+ {
4115
+ socialAccounts: resolvedSocialAccounts,
4116
+ wallets: resolvedWallets,
4117
+ email: resolvedEmail,
4118
+ onConnectTwitter: providerActionMap.twitter.connect,
4119
+ onDisconnectTwitter: providerActionMap.twitter.disconnect,
4120
+ onConnectGoogle: providerActionMap.google.connect,
4121
+ onDisconnectGoogle: providerActionMap.google.disconnect,
4122
+ onConnectApple: providerActionMap.apple.connect,
4123
+ onDisconnectApple: providerActionMap.apple.disconnect,
4124
+ onDisconnectWallet: (wallet) => {
4125
+ void handleDisconnectWallet(wallet);
4126
+ },
4127
+ onConnectEmail: providerActionMap.email.connect
4128
+ }
4129
+ )
4130
+ ] }) : null,
4131
+ activeTab === PROFILE_TAB_KEYS.TRADING_ACCESS ? /* @__PURE__ */ jsx26(TradingAccessTab, { venueAccounts: user == null ? void 0 : user.venueAccounts, onKycError }) : null
4033
4132
  ] })
4034
4133
  ] }) }),
4035
- /* @__PURE__ */ jsxs25(Modal.Footer, { classNames: { root: "agg-profile-modal-footer" }, children: [
4036
- /* @__PURE__ */ jsx25(Button, { variant: "secondary", size: "large", onClick: handleCancel, className: "min-w-[120px]", children: "Cancel" }),
4037
- /* @__PURE__ */ jsx25(
4134
+ /* @__PURE__ */ jsxs26(Modal.Footer, { classNames: { root: "agg-profile-modal-footer" }, children: [
4135
+ /* @__PURE__ */ jsx26(Button, { variant: "secondary", size: "large", onClick: handleCancel, className: "min-w-[120px]", children: "Cancel" }),
4136
+ /* @__PURE__ */ jsx26(
4038
4137
  Button,
4039
4138
  {
4040
4139
  variant: "primary",
@@ -4042,7 +4141,7 @@ var ProfileModal = ({
4042
4141
  disabled: !hasChanges,
4043
4142
  isLoading: isSaving,
4044
4143
  onClick: handleSave,
4045
- children: "Save Changes"
4144
+ children: "Save changes"
4046
4145
  }
4047
4146
  )
4048
4147
  ] })
@@ -4053,33 +4152,33 @@ var ProfileModal = ({
4053
4152
  ProfileModal.displayName = "ProfileModal";
4054
4153
 
4055
4154
  // src/geo-block-modal/index.tsx
4056
- import { useLabels as useLabels22 } from "@agg-build/hooks";
4057
- import { useCallback as useCallback9 } from "react";
4058
- import { jsx as jsx26, jsxs as jsxs26 } from "react/jsx-runtime";
4155
+ import { useLabels as useLabels23 } from "@agg-build/hooks";
4156
+ import { useCallback as useCallback10 } from "react";
4157
+ import { jsx as jsx27, jsxs as jsxs27 } from "react/jsx-runtime";
4059
4158
  var GeoBlockModal = ({
4060
4159
  open,
4061
4160
  onOpenChange,
4062
4161
  onConfirm,
4063
4162
  classNames
4064
4163
  }) => {
4065
- const labels = useLabels22();
4066
- const handleConfirm = useCallback9(() => {
4164
+ const labels = useLabels23();
4165
+ const handleConfirm = useCallback10(() => {
4067
4166
  onConfirm == null ? void 0 : onConfirm();
4068
4167
  onOpenChange(false);
4069
4168
  }, [onConfirm, onOpenChange]);
4070
- return /* @__PURE__ */ jsx26(
4169
+ return /* @__PURE__ */ jsx27(
4071
4170
  Modal,
4072
4171
  {
4073
4172
  open,
4074
4173
  onOpenChange,
4075
4174
  "aria-label": labels.trading.geoBlockModalAriaLabel,
4076
- children: /* @__PURE__ */ jsxs26(
4175
+ children: /* @__PURE__ */ jsxs27(
4077
4176
  Modal.Container,
4078
4177
  {
4079
4178
  maxWidth: "480px",
4080
4179
  classNames: { container: cn("!rounded-agg-2xl", classNames == null ? void 0 : classNames.container) },
4081
4180
  children: [
4082
- /* @__PURE__ */ jsx26(
4181
+ /* @__PURE__ */ jsx27(
4083
4182
  Modal.Header,
4084
4183
  {
4085
4184
  title: "",
@@ -4091,19 +4190,19 @@ var GeoBlockModal = ({
4091
4190
  }
4092
4191
  }
4093
4192
  ),
4094
- /* @__PURE__ */ jsx26(Modal.Body, { classNames: { root: cn("!px-10 !pt-0 !pb-12", classNames == null ? void 0 : classNames.body) }, children: /* @__PURE__ */ jsxs26("div", { className: "flex flex-col items-center gap-8", children: [
4095
- /* @__PURE__ */ jsx26(
4193
+ /* @__PURE__ */ jsx27(Modal.Body, { classNames: { root: cn("!px-10 !pt-0 !pb-12", classNames == null ? void 0 : classNames.body) }, children: /* @__PURE__ */ jsxs27("div", { className: "flex flex-col items-center gap-8", children: [
4194
+ /* @__PURE__ */ jsx27(
4096
4195
  Icon,
4097
4196
  {
4098
4197
  name: "internet-security",
4099
4198
  className: "h-[60px] w-[60px] text-agg-muted-foreground"
4100
4199
  }
4101
4200
  ),
4102
- /* @__PURE__ */ jsxs26("div", { className: "flex flex-col items-center gap-3 text-center", children: [
4103
- /* @__PURE__ */ jsx26("h2", { className: "text-agg-2xl font-agg-bold leading-agg-8 text-agg-foreground", children: labels.trading.geoBlockModalTitle }),
4104
- /* @__PURE__ */ jsx26("p", { className: "text-agg-base font-agg-normal leading-agg-6 text-agg-foreground", children: labels.trading.geoBlockModalDescription })
4201
+ /* @__PURE__ */ jsxs27("div", { className: "flex flex-col items-center gap-3 text-center", children: [
4202
+ /* @__PURE__ */ jsx27("h2", { className: "text-agg-2xl font-agg-bold leading-agg-8 text-agg-foreground", children: labels.trading.geoBlockModalTitle }),
4203
+ /* @__PURE__ */ jsx27("p", { className: "text-agg-base font-agg-normal leading-agg-6 text-agg-foreground", children: labels.trading.geoBlockModalDescription })
4105
4204
  ] }),
4106
- /* @__PURE__ */ jsx26(
4205
+ /* @__PURE__ */ jsx27(
4107
4206
  Button,
4108
4207
  {
4109
4208
  variant: "secondary",
@@ -4123,6 +4222,7 @@ var GeoBlockModal = ({
4123
4222
  GeoBlockModal.displayName = "GeoBlockModal";
4124
4223
 
4125
4224
  export {
4225
+ subscribeAggDepositNotification,
4126
4226
  CARD_NETWORK_OPTIONS,
4127
4227
  clearPendingCardSession,
4128
4228
  getPendingCardSession,