@agg-build/ui 2.7.2 → 2.8.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 (42) hide show
  1. package/dist/{chunk-7R2SMMAG.mjs → chunk-2QCNDFNC.mjs} +193 -103
  2. package/dist/{chunk-EDQ64EKO.mjs → chunk-AKLGQ6AB.mjs} +254 -53
  3. package/dist/{chunk-FMYYPNZZ.mjs → chunk-KO6VTRV6.mjs} +101 -27
  4. package/dist/{chunk-AHQA3B7D.mjs → chunk-KX3TQ7WC.mjs} +1 -1
  5. package/dist/{chunk-EKUH3265.mjs → chunk-MKU5Q6PN.mjs} +51 -13
  6. package/dist/{chunk-O27JUYCF.mjs → chunk-R5S2QOYL.mjs} +495 -289
  7. package/dist/{chunk-JQKJDSTW.mjs → chunk-VR5ZRDQT.mjs} +3 -2
  8. package/dist/events.js +198 -91
  9. package/dist/events.mjs +3 -3
  10. package/dist/index.js +1350 -751
  11. package/dist/index.mjs +7 -7
  12. package/dist/modals.js +941 -418
  13. package/dist/modals.mjs +3 -3
  14. package/dist/pages.js +1008 -609
  15. package/dist/pages.mjs +6 -6
  16. package/dist/primitives.js +94 -26
  17. package/dist/primitives.mjs +1 -1
  18. package/dist/styles.css +1 -1
  19. package/dist/tailwind.css +1 -1
  20. package/dist/trading.js +1403 -902
  21. package/dist/trading.mjs +4 -4
  22. package/dist/types/events/orderbook/orderbook.utils.d.mts +1 -1
  23. package/dist/types/events/orderbook/orderbook.utils.d.ts +1 -1
  24. package/dist/types/pages/user-profile/components/open-order-row.d.mts +1 -0
  25. package/dist/types/pages/user-profile/components/open-order-row.d.ts +1 -0
  26. package/dist/types/pages/user-profile/position-view-model.d.mts +15 -4
  27. package/dist/types/pages/user-profile/position-view-model.d.ts +15 -4
  28. package/dist/types/primitives/select/index.d.mts +1 -1
  29. package/dist/types/primitives/select/index.d.ts +1 -1
  30. package/dist/types/primitives/select/select.types.d.mts +8 -0
  31. package/dist/types/primitives/select/select.types.d.ts +8 -0
  32. package/dist/types/profile/profile-modal.constants.d.mts +2 -1
  33. package/dist/types/profile/profile-modal.constants.d.ts +2 -1
  34. package/dist/types/profile/tabs/balance-management-tab.d.mts +3 -0
  35. package/dist/types/profile/tabs/balance-management-tab.d.ts +3 -0
  36. package/dist/types/trading/place-order/index.place-order.constants.d.mts +2 -1
  37. package/dist/types/trading/place-order/index.place-order.constants.d.ts +2 -1
  38. package/dist/types/trading/place-order/index.place-order.types.d.mts +6 -0
  39. package/dist/types/trading/place-order/index.place-order.types.d.ts +6 -0
  40. package/dist/types/trading/place-order/index.place-order.utils.d.mts +10 -2
  41. package/dist/types/trading/place-order/index.place-order.utils.d.ts +10 -2
  42. package/package.json +2 -2
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  ConnectKalshiModal,
4
4
  dispatchAggDepositNotification
5
- } from "./chunk-AHQA3B7D.mjs";
5
+ } from "./chunk-KX3TQ7WC.mjs";
6
6
  import {
7
7
  BoltIcon,
8
8
  Button,
@@ -12,6 +12,7 @@ import {
12
12
  CloseIcon,
13
13
  CopyButton,
14
14
  CreditCardIcon,
15
+ CurrencyInput,
15
16
  ExternalLinkIcon,
16
17
  Icon,
17
18
  LoadingIcon,
@@ -35,7 +36,7 @@ import {
35
36
  shortenAddress,
36
37
  useOptionalToast,
37
38
  venueLogoLabels
38
- } from "./chunk-FMYYPNZZ.mjs";
39
+ } from "./chunk-KO6VTRV6.mjs";
39
40
 
40
41
  // src/deposit/index.tsx
41
42
  import { useAggAuthState, useAggUiConfig, useDepositAddresses, useLabels as useLabels11 } from "@agg-build/hooks";
@@ -2482,22 +2483,28 @@ var WithdrawModal = (props) => {
2482
2483
  WithdrawModal.displayName = "WithdrawModal";
2483
2484
 
2484
2485
  // src/profile/index.tsx
2485
- import { useState as useState4, useEffect as useEffect5, useCallback as useCallback3, useMemo as useMemo3 } from "react";
2486
- import { useAggClient, useAggAuthState as useAggAuthState2, useVenueKeyStatus } from "@agg-build/hooks";
2486
+ import { useState as useState5, useEffect as useEffect6, useCallback as useCallback3, useMemo as useMemo4 } from "react";
2487
+ import { useAggClient, useAggAuthState as useAggAuthState2, useAggLabels as useAggLabels2, useVenueKeyStatus } from "@agg-build/hooks";
2487
2488
  import { Venue } from "@agg-build/sdk";
2488
2489
 
2489
2490
  // src/profile/profile-modal.constants.ts
2490
2491
  var PROFILE_TAB_KEYS = {
2491
2492
  PROFILE_ACCOUNTS: "profile-accounts",
2492
- TRADING_ACCESS: "trading-access"
2493
+ TRADING_ACCESS: "trading-access",
2494
+ BALANCE_MANAGEMENT: "balance-management"
2493
2495
  };
2494
- var PROFILE_TAB_ITEMS = [
2496
+ var getProfileTabItems = (balanceManagementLabel) => [
2495
2497
  {
2496
2498
  value: PROFILE_TAB_KEYS.PROFILE_ACCOUNTS,
2497
2499
  label: "Profile & accounts",
2498
2500
  icon: "profile-about-tab"
2499
2501
  },
2500
- { value: PROFILE_TAB_KEYS.TRADING_ACCESS, label: "Trading access", icon: "shield-trust" }
2502
+ { value: PROFILE_TAB_KEYS.TRADING_ACCESS, label: "Trading access", icon: "shield-trust" },
2503
+ {
2504
+ value: PROFILE_TAB_KEYS.BALANCE_MANAGEMENT,
2505
+ label: balanceManagementLabel,
2506
+ icon: "bolt"
2507
+ }
2501
2508
  ];
2502
2509
 
2503
2510
  // src/profile/tabs/about-tab.tsx
@@ -2909,8 +2916,187 @@ var TradingAccessTab = ({
2909
2916
  };
2910
2917
  TradingAccessTab.displayName = "TradingAccessTab";
2911
2918
 
2912
- // src/profile/index.tsx
2919
+ // src/profile/tabs/balance-management-tab.tsx
2920
+ import { useEffect as useEffect5, useMemo as useMemo3, useState as useState4 } from "react";
2921
+ import { useAggLabels, useBalanceRefillPolicies } from "@agg-build/hooks";
2913
2922
  import { jsx as jsx20, jsxs as jsxs20 } from "react/jsx-runtime";
2923
+ var CHAIN_IDS_BY_NETWORK = {
2924
+ mainnet: 1,
2925
+ bnb: 56,
2926
+ polygon: 137,
2927
+ base: 8453,
2928
+ arbitrum: 42161,
2929
+ solana: 792703809,
2930
+ hyperliquid: 1337
2931
+ };
2932
+ var NETWORK_BY_CHAIN_ID = Object.fromEntries(
2933
+ Object.entries(CHAIN_IDS_BY_NETWORK).map(([network, chainId]) => [chainId, network])
2934
+ );
2935
+ var networkItems = SUPPORTED_NETWORKS.filter(
2936
+ (network) => network.value in CHAIN_IDS_BY_NETWORK
2937
+ ).map((network) => ({
2938
+ value: network.value,
2939
+ label: network.label,
2940
+ iconUrl: network.iconUrl
2941
+ }));
2942
+ var dollarsToRaw = (amount) => String(Math.round(amount * 1e6));
2943
+ var rawToDollars = (amount) => Number(amount) / 1e6;
2944
+ var BalanceManagementTab = ({ enabled }) => {
2945
+ const labels = useAggLabels().balanceRefill;
2946
+ const { policies, isLoading, isError, createPolicy, updatePolicy } = useBalanceRefillPolicies({
2947
+ enabled
2948
+ });
2949
+ const policy = policies[0];
2950
+ const [network, setNetwork] = useState4("polygon");
2951
+ const [minimum, setMinimum] = useState4(100);
2952
+ const [refillAmount, setRefillAmount] = useState4(50);
2953
+ const [dailyCap, setDailyCap] = useState4(200);
2954
+ const [maximumFee, setMaximumFee] = useState4(2);
2955
+ const [feedback, setFeedback] = useState4(null);
2956
+ useEffect5(() => {
2957
+ var _a;
2958
+ if (!policy) return;
2959
+ setNetwork((_a = NETWORK_BY_CHAIN_ID[policy.targetChainId]) != null ? _a : "polygon");
2960
+ setMinimum(rawToDollars(policy.minimumRaw));
2961
+ setRefillAmount(rawToDollars(policy.refillAmountRaw));
2962
+ setDailyCap(rawToDollars(policy.dailyCapRaw));
2963
+ setMaximumFee(rawToDollars(policy.maxFeeRaw));
2964
+ }, [policy]);
2965
+ const validationError = useMemo3(() => {
2966
+ if (minimum <= 0 || refillAmount <= 0 || dailyCap <= 0 || maximumFee <= 0) {
2967
+ return labels.saveError;
2968
+ }
2969
+ if (dailyCap < Math.max(minimum, refillAmount) + maximumFee) {
2970
+ return labels.saveError;
2971
+ }
2972
+ return null;
2973
+ }, [dailyCap, labels.saveError, maximumFee, minimum, refillAmount]);
2974
+ const isPending = createPolicy.isPending || updatePolicy.isPending;
2975
+ const handleSave = () => __async(null, null, function* () {
2976
+ if (validationError) {
2977
+ setFeedback(validationError);
2978
+ return;
2979
+ }
2980
+ setFeedback(null);
2981
+ const params = {
2982
+ minimumRaw: dollarsToRaw(minimum),
2983
+ refillAmountRaw: dollarsToRaw(refillAmount),
2984
+ dailyCapRaw: dollarsToRaw(dailyCap),
2985
+ maxFeeRaw: dollarsToRaw(maximumFee)
2986
+ };
2987
+ try {
2988
+ if (policy) {
2989
+ yield updatePolicy.mutateAsync({ policyId: policy.id, params });
2990
+ } else {
2991
+ yield createPolicy.mutateAsync(__spreadProps(__spreadValues({}, params), {
2992
+ targetChainId: CHAIN_IDS_BY_NETWORK[network],
2993
+ targetTokenSymbol: "USDC"
2994
+ }));
2995
+ }
2996
+ setFeedback(labels.saved);
2997
+ } catch (e) {
2998
+ setFeedback(labels.saveError);
2999
+ }
3000
+ });
3001
+ const handleStatus = () => __async(null, null, function* () {
3002
+ if (!policy) return;
3003
+ try {
3004
+ yield updatePolicy.mutateAsync({
3005
+ policyId: policy.id,
3006
+ params: { status: policy.status === "enabled" ? "paused" : "enabled" }
3007
+ });
3008
+ setFeedback(labels.saved);
3009
+ } catch (e) {
3010
+ setFeedback(labels.saveError);
3011
+ }
3012
+ });
3013
+ if (isLoading)
3014
+ return /* @__PURE__ */ jsx20("p", { className: "text-agg-sm text-agg-secondary-foreground", children: labels.loading });
3015
+ if (isError)
3016
+ return /* @__PURE__ */ jsx20("p", { role: "alert", className: "text-agg-sm text-agg-error", children: labels.loadError });
3017
+ const latestAttempt = policy == null ? void 0 : policy.latestAttempt;
3018
+ return /* @__PURE__ */ jsxs20("section", { className: "agg-balance-management-tab flex flex-col gap-6", children: [
3019
+ /* @__PURE__ */ jsxs20("div", { className: "flex flex-col gap-2", children: [
3020
+ /* @__PURE__ */ jsx20("h2", { className: "text-agg-lg font-agg-semibold text-agg-foreground", children: labels.title }),
3021
+ /* @__PURE__ */ jsx20("p", { className: "text-agg-sm text-agg-secondary-foreground", children: labels.description })
3022
+ ] }),
3023
+ /* @__PURE__ */ jsxs20("div", { className: "rounded-agg-lg border border-agg-separator p-5 flex flex-col gap-5", children: [
3024
+ /* @__PURE__ */ jsxs20("label", { className: "flex flex-col gap-2 text-agg-sm text-agg-foreground", children: [
3025
+ /* @__PURE__ */ jsx20("span", { children: labels.networkLabel }),
3026
+ /* @__PURE__ */ jsx20(
3027
+ Select,
3028
+ {
3029
+ items: networkItems,
3030
+ value: network,
3031
+ onChange: (value) => setNetwork(value),
3032
+ ariaLabel: labels.networkLabel,
3033
+ disabled: Boolean(policy)
3034
+ }
3035
+ )
3036
+ ] }),
3037
+ /* @__PURE__ */ jsx20("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
3038
+ [labels.minimumLabel, minimum, setMinimum],
3039
+ [labels.refillAmountLabel, refillAmount, setRefillAmount],
3040
+ [labels.dailyCapLabel, dailyCap, setDailyCap],
3041
+ [labels.maximumFeeLabel, maximumFee, setMaximumFee]
3042
+ ].map(([label, value, onChange]) => /* @__PURE__ */ jsxs20(
3043
+ "label",
3044
+ {
3045
+ className: "flex flex-col gap-2 rounded-agg-md bg-agg-secondary px-4 py-3 text-agg-sm text-agg-foreground",
3046
+ children: [
3047
+ /* @__PURE__ */ jsx20("span", { children: label }),
3048
+ /* @__PURE__ */ jsx20(
3049
+ CurrencyInput,
3050
+ {
3051
+ value,
3052
+ onChange,
3053
+ min: 0.01,
3054
+ decimalPlaces: 2,
3055
+ ariaLabel: label,
3056
+ classNames: { input: "w-full text-agg-base font-agg-semibold" }
3057
+ }
3058
+ )
3059
+ ]
3060
+ },
3061
+ label
3062
+ )) }),
3063
+ /* @__PURE__ */ jsx20("p", { className: "text-agg-xs text-agg-secondary-foreground", children: labels.consent }),
3064
+ policy ? /* @__PURE__ */ jsx20("p", { className: "text-agg-sm text-agg-secondary-foreground", children: policy.status === "enabled" ? labels.activeLabel : labels.pausedLabel }) : null,
3065
+ latestAttempt ? /* @__PURE__ */ jsxs20("p", { className: "text-agg-sm text-agg-secondary-foreground", children: [
3066
+ labels.lastRefill,
3067
+ ": ",
3068
+ labels.statuses[latestAttempt.status]
3069
+ ] }) : null,
3070
+ feedback ? /* @__PURE__ */ jsx20("p", { role: feedback === labels.saveError ? "alert" : "status", className: "text-agg-sm", children: feedback }) : null,
3071
+ /* @__PURE__ */ jsxs20("div", { className: "flex flex-wrap gap-3", children: [
3072
+ /* @__PURE__ */ jsx20(
3073
+ Button,
3074
+ {
3075
+ variant: "primary",
3076
+ size: "large",
3077
+ isLoading: isPending,
3078
+ disabled: Boolean(validationError),
3079
+ onClick: () => void handleSave(),
3080
+ children: policy ? labels.saveAction : labels.enableAction
3081
+ }
3082
+ ),
3083
+ policy ? /* @__PURE__ */ jsx20(
3084
+ Button,
3085
+ {
3086
+ variant: "secondary",
3087
+ size: "large",
3088
+ isLoading: isPending,
3089
+ onClick: () => void handleStatus(),
3090
+ children: policy.status === "enabled" ? labels.pauseAction : labels.resumeAction
3091
+ }
3092
+ ) : null
3093
+ ] })
3094
+ ] })
3095
+ ] });
3096
+ };
3097
+
3098
+ // src/profile/index.tsx
3099
+ import { jsx as jsx21, jsxs as jsxs21 } from "react/jsx-runtime";
2914
3100
  var ProfileModal = ({
2915
3101
  open,
2916
3102
  onOpenChange,
@@ -2935,25 +3121,30 @@ var ProfileModal = ({
2935
3121
  }) => {
2936
3122
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
2937
3123
  const client = useAggClient();
3124
+ const labels = useAggLabels2();
2938
3125
  const { user } = useAggAuthState2();
2939
3126
  const toastCtx = useOptionalToast();
2940
- const [activeTab, setActiveTab] = useState4(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
3127
+ const [activeTab, setActiveTab] = useState5(PROFILE_TAB_KEYS.PROFILE_ACCOUNTS);
3128
+ const profileTabItems = useMemo4(
3129
+ () => getProfileTabItems(labels.balanceRefill.tabLabel),
3130
+ [labels.balanceRefill.tabLabel]
3131
+ );
2941
3132
  const resolvedInitialUsername = (_a = username != null ? username : user == null ? void 0 : user.username) != null ? _a : "";
2942
- const [draftUsername, setDraftUsername] = useState4(resolvedInitialUsername);
2943
- const [draftAvatarFile, setDraftAvatarFile] = useState4();
2944
- const [draftAvatarPreview, setDraftAvatarPreview] = useState4();
2945
- const [isSaving, setIsSaving] = useState4(false);
2946
- const [avatarTypeError, setAvatarTypeError] = useState4(null);
2947
- const [isConnectKalshiModalOpen, setIsConnectKalshiModalOpen] = useState4(false);
3133
+ const [draftUsername, setDraftUsername] = useState5(resolvedInitialUsername);
3134
+ const [draftAvatarFile, setDraftAvatarFile] = useState5();
3135
+ const [draftAvatarPreview, setDraftAvatarPreview] = useState5();
3136
+ const [isSaving, setIsSaving] = useState5(false);
3137
+ const [avatarTypeError, setAvatarTypeError] = useState5(null);
3138
+ const [isConnectKalshiModalOpen, setIsConnectKalshiModalOpen] = useState5(false);
2948
3139
  const { data: kalshiStatus, refetch: refetchKalshiStatus } = useVenueKeyStatus(
2949
3140
  Venue.kalshi,
2950
3141
  open
2951
3142
  );
2952
- useEffect5(() => {
3143
+ useEffect6(() => {
2953
3144
  var _a2;
2954
3145
  setDraftUsername((_a2 = username != null ? username : user == null ? void 0 : user.username) != null ? _a2 : "");
2955
3146
  }, [username, user == null ? void 0 : user.username]);
2956
- useEffect5(() => {
3147
+ useEffect6(() => {
2957
3148
  if (open) return;
2958
3149
  setIsConnectKalshiModalOpen(false);
2959
3150
  }, [open]);
@@ -3077,7 +3268,7 @@ var ProfileModal = ({
3077
3268
  yield refetchKalshiStatus();
3078
3269
  onDisconnectExchange == null ? void 0 : onDisconnectExchange(Venue.kalshi);
3079
3270
  }), [client, onDisconnectExchange, refetchKalshiStatus]);
3080
- const resolvedVenueAccounts = useMemo3(() => {
3271
+ const resolvedVenueAccounts = useMemo4(() => {
3081
3272
  var _a2;
3082
3273
  const nonKalshiAccounts = (_a2 = user == null ? void 0 : user.venueAccounts) == null ? void 0 : _a2.filter((account) => account.venue !== "kalshi");
3083
3274
  if (!kalshiStatus) return user == null ? void 0 : user.venueAccounts;
@@ -3246,7 +3437,7 @@ var ProfileModal = ({
3246
3437
  }),
3247
3438
  [client, onDisconnectWallet, surfaceError]
3248
3439
  );
3249
- const providerActionMap = useMemo3(
3440
+ const providerActionMap = useMemo4(
3250
3441
  () => ({
3251
3442
  twitter: {
3252
3443
  connect: () => {
@@ -3288,7 +3479,7 @@ var ProfileModal = ({
3288
3479
  handleDisconnectTwitter
3289
3480
  ]
3290
3481
  );
3291
- const resolvedWallets = useMemo3(() => {
3482
+ const resolvedWallets = useMemo4(() => {
3292
3483
  var _a2, _b2;
3293
3484
  if (wallets) return wallets;
3294
3485
  const walletAccounts = (_b2 = (_a2 = user == null ? void 0 : user.accounts) == null ? void 0 : _a2.filter((account) => {
@@ -3307,8 +3498,8 @@ var ProfileModal = ({
3307
3498
  };
3308
3499
  });
3309
3500
  }, [user == null ? void 0 : user.accounts, wallets]);
3310
- return /* @__PURE__ */ jsxs20(Modal, { open: open && !isConnectKalshiModalOpen, onOpenChange: handleOpenChange, children: [
3311
- /* @__PURE__ */ jsxs20(
3501
+ return /* @__PURE__ */ jsxs21(Modal, { open: open && !isConnectKalshiModalOpen, onOpenChange: handleOpenChange, children: [
3502
+ /* @__PURE__ */ jsxs21(
3312
3503
  Modal.Container,
3313
3504
  {
3314
3505
  maxWidth: "800px",
@@ -3317,24 +3508,24 @@ var ProfileModal = ({
3317
3508
  container: cn("agg-profile-modal", "min-h-[37.5rem]")
3318
3509
  },
3319
3510
  children: [
3320
- /* @__PURE__ */ jsx20(Modal.Header, { title: "Edit Profile", classNames: { root: "agg-profile-modal-header" } }),
3321
- /* @__PURE__ */ jsx20("div", { className: "agg-profile-tabs sm:hidden w-full", children: /* @__PURE__ */ jsx20(
3511
+ /* @__PURE__ */ jsx21(Modal.Header, { title: "Edit Profile", classNames: { root: "agg-profile-modal-header" } }),
3512
+ /* @__PURE__ */ jsx21("div", { className: "agg-profile-tabs sm:hidden w-full", children: /* @__PURE__ */ jsx21(
3322
3513
  Tabs,
3323
3514
  {
3324
3515
  className: "w-full [&>div]:w-full",
3325
3516
  variant: "underline",
3326
3517
  classNames: { tabList: "w-full" },
3327
- items: PROFILE_TAB_ITEMS.map((tab) => ({
3518
+ items: profileTabItems.map((tab) => ({
3328
3519
  value: tab.value,
3329
3520
  label: tab.label,
3330
- icon: /* @__PURE__ */ jsx20(Icon, { name: tab.icon, size: "small" })
3521
+ icon: /* @__PURE__ */ jsx21(Icon, { name: tab.icon, size: "small" })
3331
3522
  })),
3332
3523
  value: activeTab,
3333
3524
  onChange: (val) => setActiveTab(val)
3334
3525
  }
3335
3526
  ) }),
3336
- /* @__PURE__ */ jsx20(Modal.Body, { classNames: { root: cn("agg-profile-modal-body", "overflow-x-visible") }, children: /* @__PURE__ */ jsxs20("div", { className: "agg-profile-layout flex flex-col sm:flex-row sm:gap-10", children: [
3337
- /* @__PURE__ */ jsx20("div", { className: "shrink-0", children: /* @__PURE__ */ jsx20(
3527
+ /* @__PURE__ */ jsx21(Modal.Body, { classNames: { root: cn("agg-profile-modal-body", "overflow-x-visible") }, children: /* @__PURE__ */ jsxs21("div", { className: "agg-profile-layout flex flex-col sm:flex-row sm:gap-10", children: [
3528
+ /* @__PURE__ */ jsx21("div", { className: "shrink-0", children: /* @__PURE__ */ jsx21(
3338
3529
  "nav",
3339
3530
  {
3340
3531
  className: cn(
@@ -3348,9 +3539,9 @@ var ProfileModal = ({
3348
3539
  ),
3349
3540
  role: "tablist",
3350
3541
  "aria-label": "Profile sections",
3351
- children: PROFILE_TAB_ITEMS.map((tab) => {
3542
+ children: profileTabItems.map((tab) => {
3352
3543
  const isActive = activeTab === tab.value;
3353
- return /* @__PURE__ */ jsxs20(
3544
+ return /* @__PURE__ */ jsxs21(
3354
3545
  "button",
3355
3546
  {
3356
3547
  type: "button",
@@ -3366,9 +3557,9 @@ var ProfileModal = ({
3366
3557
  isActive ? "font-agg-normal text-agg-foreground bg-agg-secondary-hover" : "font-agg-normal text-agg-foreground"
3367
3558
  ),
3368
3559
  children: [
3369
- isActive ? /* @__PURE__ */ jsx20("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-agg-primary" }) : null,
3370
- /* @__PURE__ */ jsx20(Icon, { name: tab.icon, size: "small", color: "currentColor" }),
3371
- /* @__PURE__ */ jsx20("span", { className: "shrink-0 whitespace-nowrap", children: tab.label })
3560
+ isActive ? /* @__PURE__ */ jsx21("div", { className: "absolute left-0 top-0 bottom-0 w-1 bg-agg-primary" }) : null,
3561
+ /* @__PURE__ */ jsx21(Icon, { name: tab.icon, size: "small", color: "currentColor" }),
3562
+ /* @__PURE__ */ jsx21("span", { className: "shrink-0 whitespace-nowrap", children: tab.label })
3372
3563
  ]
3373
3564
  },
3374
3565
  tab.value
@@ -3376,9 +3567,9 @@ var ProfileModal = ({
3376
3567
  })
3377
3568
  }
3378
3569
  ) }),
3379
- /* @__PURE__ */ jsxs20("div", { className: "agg-profile-content min-w-0 flex-1", children: [
3380
- activeTab === PROFILE_TAB_KEYS.PROFILE_ACCOUNTS ? /* @__PURE__ */ jsxs20("div", { className: "agg-profile-accounts-tab flex flex-col gap-8", children: [
3381
- /* @__PURE__ */ jsx20(
3570
+ /* @__PURE__ */ jsxs21("div", { className: "agg-profile-content min-w-0 flex-1", children: [
3571
+ activeTab === PROFILE_TAB_KEYS.PROFILE_ACCOUNTS ? /* @__PURE__ */ jsxs21("div", { className: "agg-profile-accounts-tab flex flex-col gap-8", children: [
3572
+ /* @__PURE__ */ jsx21(
3382
3573
  AboutTab,
3383
3574
  {
3384
3575
  username: username != null ? username : user == null ? void 0 : user.username,
@@ -3392,7 +3583,7 @@ var ProfileModal = ({
3392
3583
  avatarError: avatarTypeError
3393
3584
  }
3394
3585
  ),
3395
- /* @__PURE__ */ jsx20(
3586
+ /* @__PURE__ */ jsx21(
3396
3587
  AccountsWalletsTab,
3397
3588
  {
3398
3589
  socialAccounts: resolvedSocialAccounts,
@@ -3411,7 +3602,7 @@ var ProfileModal = ({
3411
3602
  }
3412
3603
  )
3413
3604
  ] }) : null,
3414
- activeTab === PROFILE_TAB_KEYS.TRADING_ACCESS ? /* @__PURE__ */ jsx20(
3605
+ activeTab === PROFILE_TAB_KEYS.TRADING_ACCESS ? /* @__PURE__ */ jsx21(
3415
3606
  TradingAccessTab,
3416
3607
  {
3417
3608
  venueAccounts: resolvedVenueAccounts,
@@ -3419,12 +3610,22 @@ var ProfileModal = ({
3419
3610
  onDisconnectKalshi: handleDisconnectKalshi,
3420
3611
  onKycError
3421
3612
  }
3422
- ) : null
3613
+ ) : null,
3614
+ activeTab === PROFILE_TAB_KEYS.BALANCE_MANAGEMENT ? /* @__PURE__ */ jsx21(BalanceManagementTab, { enabled: open }) : null
3423
3615
  ] })
3424
3616
  ] }) }),
3425
- /* @__PURE__ */ jsxs20(Modal.Footer, { classNames: { root: "agg-profile-modal-footer" }, children: [
3426
- /* @__PURE__ */ jsx20(Button, { variant: "secondary", size: "large", onClick: handleCancel, className: "min-w-[120px]", children: "Cancel" }),
3427
- /* @__PURE__ */ jsx20(
3617
+ activeTab === PROFILE_TAB_KEYS.BALANCE_MANAGEMENT ? null : /* @__PURE__ */ jsxs21(Modal.Footer, { classNames: { root: "agg-profile-modal-footer" }, children: [
3618
+ /* @__PURE__ */ jsx21(
3619
+ Button,
3620
+ {
3621
+ variant: "secondary",
3622
+ size: "large",
3623
+ onClick: handleCancel,
3624
+ className: "min-w-[120px]",
3625
+ children: "Cancel"
3626
+ }
3627
+ ),
3628
+ /* @__PURE__ */ jsx21(
3428
3629
  Button,
3429
3630
  {
3430
3631
  variant: "primary",
@@ -3439,7 +3640,7 @@ var ProfileModal = ({
3439
3640
  ]
3440
3641
  }
3441
3642
  ),
3442
- /* @__PURE__ */ jsx20(
3643
+ /* @__PURE__ */ jsx21(
3443
3644
  ConnectKalshiModal,
3444
3645
  {
3445
3646
  open: open && isConnectKalshiModalOpen,
@@ -3454,7 +3655,7 @@ ProfileModal.displayName = "ProfileModal";
3454
3655
  // src/geo-block-modal/index.tsx
3455
3656
  import { useLabels as useLabels17 } from "@agg-build/hooks";
3456
3657
  import { useCallback as useCallback4 } from "react";
3457
- import { jsx as jsx21, jsxs as jsxs21 } from "react/jsx-runtime";
3658
+ import { jsx as jsx22, jsxs as jsxs22 } from "react/jsx-runtime";
3458
3659
  var GeoBlockModal = ({
3459
3660
  open,
3460
3661
  onOpenChange,
@@ -3466,19 +3667,19 @@ var GeoBlockModal = ({
3466
3667
  onConfirm == null ? void 0 : onConfirm();
3467
3668
  onOpenChange(false);
3468
3669
  }, [onConfirm, onOpenChange]);
3469
- return /* @__PURE__ */ jsx21(
3670
+ return /* @__PURE__ */ jsx22(
3470
3671
  Modal,
3471
3672
  {
3472
3673
  open,
3473
3674
  onOpenChange,
3474
3675
  "aria-label": labels.trading.geoBlockModalAriaLabel,
3475
- children: /* @__PURE__ */ jsxs21(
3676
+ children: /* @__PURE__ */ jsxs22(
3476
3677
  Modal.Container,
3477
3678
  {
3478
3679
  maxWidth: "480px",
3479
3680
  classNames: { container: cn("!rounded-agg-2xl", classNames == null ? void 0 : classNames.container) },
3480
3681
  children: [
3481
- /* @__PURE__ */ jsx21(
3682
+ /* @__PURE__ */ jsx22(
3482
3683
  Modal.Header,
3483
3684
  {
3484
3685
  title: "",
@@ -3490,19 +3691,19 @@ var GeoBlockModal = ({
3490
3691
  }
3491
3692
  }
3492
3693
  ),
3493
- /* @__PURE__ */ jsx21(Modal.Body, { classNames: { root: cn("!px-10 !pt-0 !pb-12", classNames == null ? void 0 : classNames.body) }, children: /* @__PURE__ */ jsxs21("div", { className: "flex flex-col items-center gap-8", children: [
3494
- /* @__PURE__ */ jsx21(
3694
+ /* @__PURE__ */ jsx22(Modal.Body, { classNames: { root: cn("!px-10 !pt-0 !pb-12", classNames == null ? void 0 : classNames.body) }, children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-8", children: [
3695
+ /* @__PURE__ */ jsx22(
3495
3696
  Icon,
3496
3697
  {
3497
3698
  name: "internet-security",
3498
3699
  className: "h-[60px] w-[60px] text-agg-muted-foreground"
3499
3700
  }
3500
3701
  ),
3501
- /* @__PURE__ */ jsxs21("div", { className: "flex flex-col items-center gap-3 text-center", children: [
3502
- /* @__PURE__ */ jsx21("h2", { className: "text-agg-2xl font-agg-bold leading-agg-8 text-agg-foreground", children: labels.trading.geoBlockModalTitle }),
3503
- /* @__PURE__ */ jsx21("p", { className: "text-agg-base font-agg-normal leading-agg-6 text-agg-foreground", children: labels.trading.geoBlockModalDescription })
3702
+ /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-3 text-center", children: [
3703
+ /* @__PURE__ */ jsx22("h2", { className: "text-agg-2xl font-agg-bold leading-agg-8 text-agg-foreground", children: labels.trading.geoBlockModalTitle }),
3704
+ /* @__PURE__ */ jsx22("p", { className: "text-agg-base font-agg-normal leading-agg-6 text-agg-foreground", children: labels.trading.geoBlockModalDescription })
3504
3705
  ] }),
3505
- /* @__PURE__ */ jsx21(
3706
+ /* @__PURE__ */ jsx22(
3506
3707
  Button,
3507
3708
  {
3508
3709
  variant: "secondary",