@rhinestone/deposit-modal 0.1.30 → 0.1.32

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 (36) hide show
  1. package/dist/{DepositModalReown-OHTRNISJ.mjs → DepositModalReown-SZPCCNPH.mjs} +9 -5
  2. package/dist/{DepositModalReown-ZD3ROLZG.cjs → DepositModalReown-XUAEWIW7.cjs} +12 -8
  3. package/dist/{WithdrawModalReown-SVZQKH2X.cjs → WithdrawModalReown-53FDOZG2.cjs} +12 -8
  4. package/dist/{WithdrawModalReown-IJAMIPSY.mjs → WithdrawModalReown-YGGV7BL2.mjs} +9 -5
  5. package/dist/{chunk-6VJ2ZTNQ.cjs → chunk-52FVEYTL.cjs} +6 -0
  6. package/dist/{chunk-VL47TLTE.mjs → chunk-C6I5TFSL.mjs} +13 -8
  7. package/dist/{chunk-CIAKCO7G.mjs → chunk-DLFUXLAM.mjs} +67 -34
  8. package/dist/{chunk-LBEP3A2Z.mjs → chunk-K2JJKFTV.mjs} +8 -2
  9. package/dist/{chunk-BOKLFGNS.mjs → chunk-MKKJ7ZE2.mjs} +148 -167
  10. package/dist/{chunk-WDDONQLV.cjs → chunk-NYEWO4NW.cjs} +265 -284
  11. package/dist/{chunk-S76PY7GZ.mjs → chunk-RR25E5DZ.mjs} +35 -15
  12. package/dist/{chunk-WB3ZJJBH.cjs → chunk-S4UBVD3H.cjs} +14 -9
  13. package/dist/{chunk-K4YSUWIT.cjs → chunk-SQDXU7ML.cjs} +91 -71
  14. package/dist/{chunk-KIRDZLOS.cjs → chunk-YIHOACM3.cjs} +91 -58
  15. package/dist/constants.cjs +2 -2
  16. package/dist/constants.mjs +1 -1
  17. package/dist/deposit.cjs +4 -4
  18. package/dist/deposit.d.cts +2 -2
  19. package/dist/deposit.d.ts +2 -2
  20. package/dist/deposit.mjs +3 -3
  21. package/dist/index.cjs +5 -5
  22. package/dist/index.d.cts +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.mjs +4 -4
  25. package/dist/reown.cjs +5 -5
  26. package/dist/reown.d.cts +1 -1
  27. package/dist/reown.d.ts +1 -1
  28. package/dist/reown.mjs +4 -4
  29. package/dist/styles.css +8 -5
  30. package/dist/{types-CgXyx46m.d.ts → types-Bp2n2RQ3.d.ts} +4 -1
  31. package/dist/{types-BwaQ7jK5.d.cts → types-CIaQPR6F.d.cts} +4 -1
  32. package/dist/withdraw.cjs +4 -4
  33. package/dist/withdraw.d.cts +2 -2
  34. package/dist/withdraw.d.ts +2 -2
  35. package/dist/withdraw.mjs +3 -3
  36. package/package.json +1 -1
@@ -21,7 +21,7 @@ import {
21
21
  portfolioToAssets,
22
22
  saveSessionOwnerToStorage,
23
23
  tokenFormatter
24
- } from "./chunk-CIAKCO7G.mjs";
24
+ } from "./chunk-DLFUXLAM.mjs";
25
25
  import {
26
26
  DEFAULT_BACKEND_URL,
27
27
  DEFAULT_SIGNER_ADDRESS,
@@ -35,12 +35,13 @@ import {
35
35
  getTargetTokenSymbolsForChain,
36
36
  getTokenAddress,
37
37
  getTokenIcon,
38
- getTokenSymbol
39
- } from "./chunk-VL47TLTE.mjs";
38
+ getTokenSymbol,
39
+ isStablecoinSymbol
40
+ } from "./chunk-C6I5TFSL.mjs";
40
41
 
41
42
  // src/DepositModal.tsx
42
43
  import {
43
- useMemo as useMemo7,
44
+ useMemo as useMemo6,
44
45
  useEffect as useEffect7,
45
46
  useRef as useRef5,
46
47
  useState as useState8,
@@ -50,7 +51,7 @@ import {
50
51
  } from "react";
51
52
 
52
53
  // src/DepositFlow.tsx
53
- import { useState as useState7, useCallback as useCallback3, useMemo as useMemo6, useEffect as useEffect6, useRef as useRef4 } from "react";
54
+ import { useState as useState7, useCallback as useCallback3, useMemo as useMemo5, useEffect as useEffect6, useRef as useRef4 } from "react";
54
55
 
55
56
  // src/components/steps/SetupStep.tsx
56
57
  import { useState, useEffect, useRef, useCallback } from "react";
@@ -249,7 +250,8 @@ function AssetSelectStep({
249
250
  defaultSourceToken,
250
251
  service,
251
252
  onContinue,
252
- onTotalBalanceComputed
253
+ onTotalBalanceComputed,
254
+ onAssetsLoaded
253
255
  }) {
254
256
  const [assets, setAssets] = useState2([]);
255
257
  const [selectedAssetId, setSelectedAssetId] = useState2(null);
@@ -316,7 +318,8 @@ function AssetSelectStep({
316
318
  0
317
319
  );
318
320
  onTotalBalanceComputed?.(total);
319
- }, [assets, onTotalBalanceComputed]);
321
+ if (assets.length > 0) onAssetsLoaded?.(assets);
322
+ }, [assets, onTotalBalanceComputed, onAssetsLoaded]);
320
323
  const rows = useMemo(() => {
321
324
  return assets.filter((a) => {
322
325
  try {
@@ -533,6 +536,8 @@ function AmountStep({
533
536
  const chainMismatch = Boolean(
534
537
  walletClient?.chain?.id && walletClient.chain.id !== asset.chainId
535
538
  );
539
+ const targetSymbol = getTokenSymbol(targetToken, targetChain);
540
+ const isSourceStablecoin = isStablecoinSymbol(asset.symbol);
536
541
  const tokenPriceUsd = useMemo2(() => {
537
542
  if (tokenPriceUsdOverride !== void 0 && tokenPriceUsdOverride > 0)
538
543
  return tokenPriceUsdOverride;
@@ -592,15 +597,10 @@ function AmountStep({
592
597
  if (defaultAmount && !amount) {
593
598
  const parsed = Number(defaultAmount);
594
599
  if (Number.isFinite(parsed) && parsed > 0) {
595
- if (hasPricing) {
596
- const usdValue = parsed * tokenPriceUsd;
597
- setAmount(usdValue.toFixed(2));
598
- } else {
599
- setAmount(parsed.toString());
600
- }
600
+ setAmount(parsed.toString());
601
601
  }
602
602
  }
603
- }, [defaultAmount, tokenPriceUsd, hasPricing, amount]);
603
+ }, [defaultAmount, amount]);
604
604
  const balanceUsd = useMemo2(() => {
605
605
  if (balance === null || tokenPriceUsd === null) return null;
606
606
  try {
@@ -625,36 +625,24 @@ function AmountStep({
625
625
  return "...";
626
626
  }
627
627
  }, [balance, asset.decimals]);
628
- const tokenAmount = useMemo2(() => {
629
- if (!amount) return null;
630
- if (hasPricing) {
631
- const usd = Number(amount);
632
- if (!Number.isFinite(usd) || usd <= 0) return null;
633
- return usd / tokenPriceUsd;
634
- }
635
- const val = Number(amount);
636
- return Number.isFinite(val) && val > 0 ? val : null;
637
- }, [amount, tokenPriceUsd, hasPricing]);
638
- const formattedTokenAmount = useMemo2(() => {
639
- if (tokenAmount === null) return "0.00";
640
- return tokenFormatter.format(tokenAmount);
641
- }, [tokenAmount]);
642
- const targetSymbol = getTokenSymbol(targetToken, targetChain);
643
628
  const handlePresetClick = (percentage) => {
644
629
  if (balance === null) return;
645
- if (hasPricing && balanceUsd !== null) {
646
- const value = balanceUsd * percentage / 100;
647
- setAmount(value.toFixed(2));
648
- } else {
649
- try {
650
- const balanceUnits = Number(formatUnits2(balance, asset.decimals));
651
- if (Number.isFinite(balanceUnits)) {
652
- const value = balanceUnits * percentage / 100;
653
- setAmount(value.toString());
654
- }
655
- } catch {
656
- return;
630
+ try {
631
+ const balanceUnits = Number(formatUnits2(balance, asset.decimals));
632
+ if (!Number.isFinite(balanceUnits)) return;
633
+ let value;
634
+ if (isSourceStablecoin || !hasPricing) {
635
+ value = balanceUnits * percentage / 100;
636
+ } else {
637
+ value = (balanceUsd ?? 0) * percentage / 100;
657
638
  }
639
+ const maxDecimals = 3;
640
+ const factor = 10 ** maxDecimals;
641
+ const truncated = Math.floor(value * factor) / factor;
642
+ const formatted = truncated.toFixed(maxDecimals).replace(/\.?0+$/, "");
643
+ setAmount(formatted);
644
+ } catch {
645
+ return;
658
646
  }
659
647
  if (error) setError(null);
660
648
  };
@@ -664,24 +652,28 @@ function AmountStep({
664
652
  setError("Please enter a valid amount");
665
653
  return;
666
654
  }
667
- let tokenAmountStr;
655
+ let sourceAmount;
656
+ if (isSourceStablecoin || !hasPricing) {
657
+ sourceAmount = numericAmount;
658
+ } else {
659
+ sourceAmount = numericAmount / tokenPriceUsd;
660
+ }
668
661
  if (hasPricing) {
669
- if (uiConfig?.maxDepositUsd && numericAmount > uiConfig.maxDepositUsd) {
662
+ const usdValue = numericAmount;
663
+ if (uiConfig?.maxDepositUsd && usdValue > uiConfig.maxDepositUsd) {
670
664
  setError(
671
665
  `Maximum deposit is ${currencyFormatter.format(uiConfig.maxDepositUsd)}`
672
666
  );
673
667
  return;
674
668
  }
675
- if (uiConfig?.minDepositUsd && numericAmount < uiConfig.minDepositUsd) {
669
+ if (uiConfig?.minDepositUsd && usdValue < uiConfig.minDepositUsd) {
676
670
  setError(
677
671
  `Minimum deposit is ${currencyFormatter.format(uiConfig.minDepositUsd)}`
678
672
  );
679
673
  return;
680
674
  }
681
- tokenAmountStr = (numericAmount / tokenPriceUsd).toString();
682
- } else {
683
- tokenAmountStr = numericAmount.toString();
684
675
  }
676
+ const tokenAmountStr = sourceAmount.toString();
685
677
  let amountInUnits;
686
678
  try {
687
679
  amountInUnits = parseUnits(tokenAmountStr, asset.decimals);
@@ -690,11 +682,11 @@ function AmountStep({
690
682
  return;
691
683
  }
692
684
  if (balance !== null && amountInUnits > balance) {
693
- amountInUnits = balance;
694
- tokenAmountStr = formatUnits2(balance, asset.decimals);
685
+ setError("Insufficient balance");
686
+ return;
695
687
  }
696
688
  setError(null);
697
- onContinue(tokenAmountStr, balance ?? void 0);
689
+ onContinue(tokenAmountStr, amount, balance ?? void 0);
698
690
  };
699
691
  const handleSwitch = async () => {
700
692
  if (!asset.chainId || !switchChain) return;
@@ -711,7 +703,7 @@ function AmountStep({
711
703
  return /* @__PURE__ */ jsxs3("div", { className: "rs-step", children: [
712
704
  /* @__PURE__ */ jsxs3("div", { className: "rs-step-body", style: { paddingTop: 0 }, children: [
713
705
  /* @__PURE__ */ jsxs3("div", { className: "rs-amount-display", children: [
714
- /* @__PURE__ */ jsx3("div", { className: "rs-amount-input-wrapper", children: hasPricing ? /* @__PURE__ */ jsx3(
706
+ /* @__PURE__ */ jsx3("div", { className: "rs-amount-input-wrapper", children: /* @__PURE__ */ jsx3(
715
707
  "input",
716
708
  {
717
709
  type: "text",
@@ -728,30 +720,8 @@ function AmountStep({
728
720
  },
729
721
  autoFocus: true
730
722
  }
731
- ) : /* @__PURE__ */ jsx3(
732
- "input",
733
- {
734
- type: "text",
735
- inputMode: "decimal",
736
- className: "rs-amount-input-large",
737
- placeholder: `0.00 ${asset.symbol}`,
738
- value: amount,
739
- onChange: (e) => {
740
- const raw = e.target.value.replace(/[^0-9.]/g, "");
741
- const parts = raw.split(".");
742
- if (parts.length > 2) return;
743
- setAmount(raw);
744
- if (error) setError(null);
745
- },
746
- autoFocus: true
747
- }
748
723
  ) }),
749
- hasPricing ? /* @__PURE__ */ jsxs3("div", { className: "rs-amount-token-value", children: [
750
- formattedTokenAmount,
751
- " ",
752
- asset.symbol
753
- ] }) : /* @__PURE__ */ jsx3("div", { className: "rs-amount-token-value", style: { color: "var(--rs-muted-foreground)" }, children: "Price unavailable" }),
754
- /* @__PURE__ */ jsx3("div", { className: "rs-amount-available", children: /* @__PURE__ */ jsxs3("span", { className: "rs-amount-available-value", children: [
724
+ !isSourceStablecoin && /* @__PURE__ */ jsx3("div", { className: "rs-amount-available", children: /* @__PURE__ */ jsxs3("span", { className: "rs-amount-available-value", children: [
755
725
  formattedBalance,
756
726
  " ",
757
727
  asset.symbol,
@@ -895,22 +865,13 @@ function AmountStep({
895
865
  }
896
866
  )
897
867
  ] }),
898
- chainMismatch && /* @__PURE__ */ jsxs3("div", { className: "rs-chain-switch", style: { marginTop: 16 }, children: [
868
+ chainMismatch && !isSwitching && /* @__PURE__ */ jsxs3("div", { className: "rs-chain-switch", style: { marginTop: 16 }, children: [
899
869
  /* @__PURE__ */ jsxs3("div", { className: "rs-chain-switch-text", children: [
900
870
  "Switch your wallet to ",
901
871
  getChainName(asset.chainId),
902
872
  " to continue."
903
873
  ] }),
904
- switchChain && /* @__PURE__ */ jsx3(
905
- Button,
906
- {
907
- variant: "outline",
908
- size: "small",
909
- loading: isSwitching,
910
- onClick: handleSwitch,
911
- children: "Switch"
912
- }
913
- )
874
+ switchChain && /* @__PURE__ */ jsx3(Button, { variant: "outline", size: "small", onClick: handleSwitch, children: "Switch" })
914
875
  ] }),
915
876
  error && /* @__PURE__ */ jsxs3("div", { className: "rs-amount-error", children: [
916
877
  /* @__PURE__ */ jsx3(
@@ -948,10 +909,9 @@ function AmountStep({
948
909
  }
949
910
 
950
911
  // src/components/steps/ConfirmStep.tsx
951
- import { useMemo as useMemo3, useState as useState4 } from "react";
952
- import { erc20Abi as erc20Abi2, formatUnits as formatUnits3, parseUnits as parseUnits2 } from "viem";
912
+ import { useState as useState4 } from "react";
913
+ import { erc20Abi as erc20Abi2, parseUnits as parseUnits2 } from "viem";
953
914
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
954
- var STABLECOIN_SYMBOLS = /* @__PURE__ */ new Set(["USDC", "USDT", "DAI"]);
955
915
  function ConfirmStep({
956
916
  walletClient,
957
917
  address,
@@ -959,6 +919,8 @@ function ConfirmStep({
959
919
  recipient,
960
920
  asset,
961
921
  amount,
922
+ targetAmount,
923
+ targetTokenPriceUsd,
962
924
  balance,
963
925
  targetChain,
964
926
  targetToken,
@@ -973,51 +935,17 @@ function ConfirmStep({
973
935
  const chainMismatch = walletClient?.chain?.id && walletClient.chain.id !== asset.chainId;
974
936
  const sameRoute = targetChain === asset.chainId && targetToken.toLowerCase() === asset.token.toLowerCase();
975
937
  const targetSymbol = sameRoute ? asset.symbol : getTokenSymbol(targetToken, targetChain);
976
- const formattedAmount = amount && !Number.isNaN(Number(amount)) ? Number(amount).toLocaleString("en-US", { maximumFractionDigits: 6 }) : "0";
977
- const tokenPriceUsd = useMemo3(() => {
978
- if (asset.balanceUsd === void 0 || !asset.balance) return null;
979
- try {
980
- const balanceUnits = Number(
981
- formatUnits3(BigInt(asset.balance), asset.decimals)
982
- );
983
- if (!Number.isFinite(balanceUnits) || balanceUnits <= 0) return null;
984
- return asset.balanceUsd / balanceUnits;
985
- } catch {
986
- return null;
987
- }
988
- }, [asset.balanceUsd, asset.balance, asset.decimals]);
989
- const amountUsd = useMemo3(() => {
990
- if (!amount || tokenPriceUsd === null) return null;
991
- const parsed = Number(amount);
992
- if (!Number.isFinite(parsed) || parsed <= 0) return null;
993
- return parsed * tokenPriceUsd;
994
- }, [amount, tokenPriceUsd]);
995
- const targetTokenPriceUsd = useMemo3(() => {
996
- const targetSym = targetSymbol.toUpperCase();
997
- const sourceSym = asset.symbol.toUpperCase();
998
- if (STABLECOIN_SYMBOLS.has(targetSym)) return 1;
999
- if (targetSym === sourceSym && tokenPriceUsd !== null) return tokenPriceUsd;
1000
- return null;
1001
- }, [targetSymbol, asset.symbol, tokenPriceUsd]);
1002
- const receiveAmountUsd = useMemo3(() => {
1003
- if (amountUsd === null) return null;
1004
- return sameRoute ? amountUsd : amountUsd * 0.99;
1005
- }, [amountUsd, sameRoute]);
1006
- const receiveTokenAmount = useMemo3(() => {
1007
- if (sameRoute) {
1008
- const parsed = Number(amount);
1009
- return Number.isFinite(parsed) ? parsed : null;
938
+ const formattedSendAmount = amount && !Number.isNaN(Number(amount)) ? Number(amount).toLocaleString("en-US", { maximumFractionDigits: 6 }) : "0";
939
+ const formattedReceiveAmount = (() => {
940
+ if (sameRoute) return formattedSendAmount;
941
+ const dollarValue = Number(targetAmount);
942
+ if (!Number.isFinite(dollarValue) || dollarValue <= 0) return formattedSendAmount;
943
+ if (targetTokenPriceUsd !== null && targetTokenPriceUsd > 0) {
944
+ const tokenAmount = dollarValue / targetTokenPriceUsd;
945
+ return tokenAmount.toLocaleString("en-US", { maximumFractionDigits: 6 });
1010
946
  }
1011
- if (receiveAmountUsd === null || targetTokenPriceUsd === null || targetTokenPriceUsd === 0)
1012
- return null;
1013
- return receiveAmountUsd / targetTokenPriceUsd;
1014
- }, [sameRoute, amount, receiveAmountUsd, targetTokenPriceUsd]);
1015
- const formattedReceiveAmount = useMemo3(() => {
1016
- if (receiveTokenAmount === null) return `~ ${formattedAmount}`;
1017
- return receiveTokenAmount.toLocaleString("en-US", {
1018
- maximumFractionDigits: 6
1019
- });
1020
- }, [receiveTokenAmount, formattedAmount]);
947
+ return formattedSendAmount;
948
+ })();
1021
949
  const receiveAmount = sameRoute ? formattedReceiveAmount : `~ ${formattedReceiveAmount}`;
1022
950
  const handleConfirm = async () => {
1023
951
  if (!address || !walletClient) {
@@ -1106,7 +1034,7 @@ function ConfirmStep({
1106
1034
  {
1107
1035
  src: getChainIcon(asset.chainId),
1108
1036
  alt: "",
1109
- style: { width: 16, height: 16, borderRadius: "50%" }
1037
+ style: { width: 16, height: 16, borderRadius: 3 }
1110
1038
  }
1111
1039
  ),
1112
1040
  getChainName(asset.chainId)
@@ -1127,7 +1055,7 @@ function ConfirmStep({
1127
1055
  {
1128
1056
  src: getChainIcon(targetChain),
1129
1057
  alt: "",
1130
- style: { width: 16, height: 16, borderRadius: "50%" }
1058
+ style: { width: 16, height: 16, borderRadius: 3 }
1131
1059
  }
1132
1060
  ),
1133
1061
  getChainName(targetChain)
@@ -1157,7 +1085,7 @@ function ConfirmStep({
1157
1085
  style: { width: 16, height: 16, borderRadius: "50%" }
1158
1086
  }
1159
1087
  ),
1160
- formattedAmount,
1088
+ formattedSendAmount,
1161
1089
  " ",
1162
1090
  asset.symbol
1163
1091
  ]
@@ -1186,10 +1114,6 @@ function ConfirmStep({
1186
1114
  ]
1187
1115
  }
1188
1116
  )
1189
- ] }),
1190
- receiveAmountUsd !== null && /* @__PURE__ */ jsxs4("div", { className: "rs-card-row", children: [
1191
- /* @__PURE__ */ jsx4("span", { className: "rs-card-label", children: "Value" }),
1192
- /* @__PURE__ */ jsx4("span", { className: "rs-card-value", children: currencyFormatter.format(receiveAmountUsd) })
1193
1117
  ] })
1194
1118
  ] }),
1195
1119
  chainMismatch && /* @__PURE__ */ jsxs4("div", { className: "rs-chain-switch", children: [
@@ -1246,10 +1170,10 @@ function ConfirmStep({
1246
1170
  }
1247
1171
 
1248
1172
  // src/components/steps/DepositAddressStep.tsx
1249
- import { useState as useState6, useEffect as useEffect5, useCallback as useCallback2, useRef as useRef3, useMemo as useMemo5 } from "react";
1173
+ import { useState as useState6, useEffect as useEffect5, useCallback as useCallback2, useRef as useRef3, useMemo as useMemo4 } from "react";
1250
1174
 
1251
1175
  // src/components/ui/QRCode.tsx
1252
- import { useEffect as useEffect4, useMemo as useMemo4, useState as useState5 } from "react";
1176
+ import { useEffect as useEffect4, useMemo as useMemo3, useState as useState5 } from "react";
1253
1177
  import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1254
1178
  function QRCode({ value, size = 200, iconSrc, className }) {
1255
1179
  const [createQrCode, setCreateQrCode] = useState5(null);
@@ -1268,7 +1192,7 @@ function QRCode({ value, size = 200, iconSrc, className }) {
1268
1192
  mounted = false;
1269
1193
  };
1270
1194
  }, []);
1271
- const svgContent = useMemo4(() => {
1195
+ const svgContent = useMemo3(() => {
1272
1196
  if (!createQrCode) {
1273
1197
  return null;
1274
1198
  }
@@ -1386,11 +1310,11 @@ function DepositAddressStep({
1386
1310
  onDepositDetected,
1387
1311
  onError
1388
1312
  }) {
1389
- const supportedChainIds = useMemo5(() => getSupportedChainIds(), []);
1313
+ const supportedChainIds = useMemo4(() => getSupportedChainIds(), []);
1390
1314
  const BASE_CHAIN_ID = 8453;
1391
1315
  const defaultChainId = supportedChainIds.includes(BASE_CHAIN_ID) ? BASE_CHAIN_ID : supportedChainIds[0];
1392
1316
  const [sourceChainId, setSourceChainId] = useState6(defaultChainId);
1393
- const tokensForChain = useMemo5(
1317
+ const tokensForChain = useMemo4(
1394
1318
  () => getTargetTokenSymbolsForChain(sourceChainId),
1395
1319
  [sourceChainId]
1396
1320
  );
@@ -1686,6 +1610,7 @@ function DepositFlow({
1686
1610
  waitForFinalTx = true,
1687
1611
  reownWallet,
1688
1612
  onConnect,
1613
+ onDisconnect,
1689
1614
  onRequestConnect,
1690
1615
  connectButtonLabel,
1691
1616
  uiConfig,
@@ -1704,13 +1629,30 @@ function DepositFlow({
1704
1629
  const [totalBalanceUsd, setTotalBalanceUsd] = useState7(0);
1705
1630
  const [isConnectSelectionConfirmed, setIsConnectSelectionConfirmed] = useState7(false);
1706
1631
  const [selectedConnectAddress, setSelectedConnectAddress] = useState7(null);
1707
- const dappSwitchChain = useMemo6(() => {
1632
+ const portfolioAssetsRef = useRef4([]);
1633
+ const handleAssetsLoaded = useCallback3((assets) => {
1634
+ portfolioAssetsRef.current = assets;
1635
+ }, []);
1636
+ const getTokenPriceUsd = useCallback3((symbol) => {
1637
+ const sym = symbol.toLowerCase();
1638
+ for (const asset of portfolioAssetsRef.current) {
1639
+ if (asset.symbol.toLowerCase() === sym && asset.balanceUsd && asset.balance) {
1640
+ try {
1641
+ const balanceUnits = Number(asset.balance) / 10 ** asset.decimals;
1642
+ if (balanceUnits > 0) return asset.balanceUsd / balanceUnits;
1643
+ } catch {
1644
+ }
1645
+ }
1646
+ }
1647
+ return null;
1648
+ }, []);
1649
+ const dappSwitchChain = useMemo5(() => {
1708
1650
  if (!dappWalletClient?.switchChain) return void 0;
1709
1651
  return async (chainId) => {
1710
1652
  await dappWalletClient.switchChain?.({ id: chainId });
1711
1653
  };
1712
1654
  }, [dappWalletClient]);
1713
- const walletOptions = useMemo6(() => {
1655
+ const walletOptions = useMemo5(() => {
1714
1656
  const options = [];
1715
1657
  const seen = /* @__PURE__ */ new Set();
1716
1658
  if (dappWalletClient?.account && dappAddress) {
@@ -1725,7 +1667,8 @@ function DepositFlow({
1725
1667
  options.push({
1726
1668
  address: reownWallet.address,
1727
1669
  label: "External Wallet",
1728
- kind: "external"
1670
+ kind: "external",
1671
+ icon: reownWallet.icon
1729
1672
  });
1730
1673
  }
1731
1674
  return options;
@@ -1733,12 +1676,13 @@ function DepositFlow({
1733
1676
  dappWalletClient,
1734
1677
  dappAddress,
1735
1678
  reownWallet?.address,
1736
- reownWallet?.isConnected
1679
+ reownWallet?.isConnected,
1680
+ reownWallet?.icon
1737
1681
  ]);
1738
1682
  const canAutoLock = dappWalletClient?.account && dappAddress && !reownWallet;
1739
1683
  const hasWalletOptions = walletOptions.length > 0;
1740
1684
  const showConnectStep = !canAutoLock && !isConnectSelectionConfirmed;
1741
- const signerContext = useMemo6(() => {
1685
+ const signerContext = useMemo5(() => {
1742
1686
  if (flowMode === "deposit-address") {
1743
1687
  if (!dappAddress) return null;
1744
1688
  return {
@@ -1807,6 +1751,7 @@ function DepositFlow({
1807
1751
  }, []);
1808
1752
  const handleBackFromSelectAsset = useCallback3(() => {
1809
1753
  if (hasWalletOptions || reownWallet) {
1754
+ hasNavigatedBackRef.current = true;
1810
1755
  setIsConnectSelectionConfirmed(false);
1811
1756
  }
1812
1757
  }, [hasWalletOptions, reownWallet]);
@@ -1814,6 +1759,7 @@ function DepositFlow({
1814
1759
  setFlowMode(null);
1815
1760
  setStep({ type: "setup" });
1816
1761
  if (hasWalletOptions || reownWallet) {
1762
+ hasNavigatedBackRef.current = true;
1817
1763
  setIsConnectSelectionConfirmed(false);
1818
1764
  }
1819
1765
  }, [hasWalletOptions, reownWallet]);
@@ -1823,8 +1769,7 @@ function DepositFlow({
1823
1769
  return {
1824
1770
  type: "amount",
1825
1771
  smartAccount: prev.smartAccount,
1826
- asset: prev.asset,
1827
- amount: prev.amount
1772
+ asset: prev.asset
1828
1773
  };
1829
1774
  });
1830
1775
  }, []);
@@ -1897,7 +1842,10 @@ function DepositFlow({
1897
1842
  [defaultAmount]
1898
1843
  );
1899
1844
  const handleAmountContinue = useCallback3(
1900
- (amount, balance) => {
1845
+ (amount, targetAmount, balance) => {
1846
+ const targetSym = getTokenSymbol(targetToken, targetChain);
1847
+ const isTargetStable = isStablecoinSymbol(targetSym);
1848
+ const targetTokenPriceUsd = isTargetStable ? 1 : getTokenPriceUsd(targetSym);
1901
1849
  setStep((prev) => {
1902
1850
  if (prev.type !== "amount") return prev;
1903
1851
  return {
@@ -1905,11 +1853,13 @@ function DepositFlow({
1905
1853
  smartAccount: prev.smartAccount,
1906
1854
  asset: prev.asset,
1907
1855
  amount,
1856
+ targetAmount,
1857
+ targetTokenPriceUsd,
1908
1858
  balance
1909
1859
  };
1910
1860
  });
1911
1861
  },
1912
- []
1862
+ [targetToken, targetChain, getTokenPriceUsd]
1913
1863
  );
1914
1864
  const handleDepositSubmitted = useCallback3(
1915
1865
  (txHash, chainId, amount, token) => {
@@ -1955,20 +1905,47 @@ function DepositFlow({
1955
1905
  const handleTotalBalanceComputed = useCallback3((total) => {
1956
1906
  setTotalBalanceUsd(total);
1957
1907
  }, []);
1958
- const selectedConnectAddressEffective = useMemo6(() => {
1908
+ const selectedConnectAddressEffective = useMemo5(() => {
1959
1909
  if (selectedConnectAddress) return selectedConnectAddress;
1960
1910
  if (walletOptions.length === 1) {
1961
1911
  return walletOptions[0].address;
1962
1912
  }
1963
1913
  return null;
1964
1914
  }, [selectedConnectAddress, walletOptions]);
1965
- const walletOptionsKey = useMemo6(
1915
+ const walletOptionsKey = useMemo5(
1966
1916
  () => walletOptions.map((option) => option.address.toLowerCase()).join(","),
1967
1917
  [walletOptions]
1968
1918
  );
1919
+ const hasNavigatedBackRef = useRef4(false);
1969
1920
  useEffect6(() => {
1970
1921
  setIsConnectSelectionConfirmed(false);
1971
- }, [walletOptionsKey, selectedConnectAddressEffective]);
1922
+ }, [walletOptionsKey]);
1923
+ useEffect6(() => {
1924
+ if (hasNavigatedBackRef.current || isConnectSelectionConfirmed || flowMode) {
1925
+ return;
1926
+ }
1927
+ if (hasWalletOptions) {
1928
+ const address = selectedConnectAddressEffective;
1929
+ if (address) {
1930
+ setSelectedConnectAddress(address);
1931
+ handleSelectProvider();
1932
+ setIsConnectSelectionConfirmed(true);
1933
+ return;
1934
+ }
1935
+ }
1936
+ if (!hasWalletOptions && dappAddress) {
1937
+ handleSelectTransferCrypto();
1938
+ setIsConnectSelectionConfirmed(true);
1939
+ }
1940
+ }, [
1941
+ hasWalletOptions,
1942
+ isConnectSelectionConfirmed,
1943
+ flowMode,
1944
+ selectedConnectAddressEffective,
1945
+ dappAddress,
1946
+ handleSelectProvider,
1947
+ handleSelectTransferCrypto
1948
+ ]);
1972
1949
  if (showConnectStep) {
1973
1950
  return /* @__PURE__ */ jsx7("div", { className: "rs-modal-body", children: /* @__PURE__ */ jsx7(
1974
1951
  ConnectStep,
@@ -1982,6 +1959,7 @@ function DepositFlow({
1982
1959
  } : void 0,
1983
1960
  onRequestConnect,
1984
1961
  onConnect,
1962
+ onDisconnect,
1985
1963
  onContinue: () => {
1986
1964
  if (selectedConnectAddressEffective) {
1987
1965
  setSelectedConnectAddress(selectedConnectAddressEffective);
@@ -2029,7 +2007,6 @@ function DepositFlow({
2029
2007
  sourceChain: step.sourceChain,
2030
2008
  sourceToken: step.sourceToken,
2031
2009
  targetChain,
2032
- targetToken,
2033
2010
  amount: step.amount,
2034
2011
  waitForFinalTx,
2035
2012
  service,
@@ -2082,7 +2059,8 @@ function DepositFlow({
2082
2059
  defaultSourceToken,
2083
2060
  service,
2084
2061
  onContinue: handleAssetContinue,
2085
- onTotalBalanceComputed: handleTotalBalanceComputed
2062
+ onTotalBalanceComputed: handleTotalBalanceComputed,
2063
+ onAssetsLoaded: handleAssetsLoaded
2086
2064
  }
2087
2065
  ),
2088
2066
  step.type === "amount" && /* @__PURE__ */ jsx7(
@@ -2109,6 +2087,8 @@ function DepositFlow({
2109
2087
  recipient,
2110
2088
  asset: step.asset,
2111
2089
  amount: step.amount,
2090
+ targetAmount: step.targetAmount,
2091
+ targetTokenPriceUsd: step.targetTokenPriceUsd,
2112
2092
  balance: step.balance,
2113
2093
  targetChain,
2114
2094
  targetToken,
@@ -2126,7 +2106,6 @@ function DepositFlow({
2126
2106
  sourceChain: step.sourceChain,
2127
2107
  sourceToken: step.sourceToken,
2128
2108
  targetChain,
2129
- targetToken,
2130
2109
  amount: step.amount,
2131
2110
  waitForFinalTx,
2132
2111
  service,
@@ -2144,7 +2123,7 @@ function DepositFlow({
2144
2123
  // src/DepositModal.tsx
2145
2124
  import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
2146
2125
  var ReownDepositInner = lazy(
2147
- () => import("./DepositModalReown-OHTRNISJ.mjs").then((m) => ({ default: m.DepositModalReown }))
2126
+ () => import("./DepositModalReown-SZPCCNPH.mjs").then((m) => ({ default: m.DepositModalReown }))
2148
2127
  );
2149
2128
  function DepositModal(props) {
2150
2129
  const needsReown = !!props.reownAppId;
@@ -2174,6 +2153,7 @@ function DepositModalInner({
2174
2153
  waitForFinalTx = true,
2175
2154
  reownWallet,
2176
2155
  onConnect,
2156
+ onDisconnect,
2177
2157
  onRequestConnect,
2178
2158
  connectButtonLabel,
2179
2159
  theme,
@@ -2194,7 +2174,7 @@ function DepositModalInner({
2194
2174
  const backHandlerRef = useRef5(void 0);
2195
2175
  const targetChain = getChainId(targetChainProp);
2196
2176
  const sourceChain = sourceChainProp ? getChainId(sourceChainProp) : void 0;
2197
- const service = useMemo7(() => createDepositService(backendUrl), [backendUrl]);
2177
+ const service = useMemo6(() => createDepositService(backendUrl), [backendUrl]);
2198
2178
  useEffect7(() => {
2199
2179
  if (isOpen && modalRef.current) {
2200
2180
  applyTheme(modalRef.current, theme);
@@ -2219,8 +2199,8 @@ function DepositModalInner({
2219
2199
  },
2220
2200
  []
2221
2201
  );
2222
- const handleTotalBalanceChange = useCallback4((balance) => {
2223
- setTotalBalanceUsd(balance);
2202
+ const handleTotalBalanceChange = useCallback4((balance2) => {
2203
+ setTotalBalanceUsd(balance2);
2224
2204
  }, []);
2225
2205
  const handleBack = useCallback4(() => {
2226
2206
  backHandlerRef.current?.();
@@ -2228,7 +2208,7 @@ function DepositModalInner({
2228
2208
  const showLogo = uiConfig?.showLogo ?? false;
2229
2209
  const showStepper = uiConfig?.showStepper ?? false;
2230
2210
  const showBackButton = uiConfig?.showBackButton ?? true;
2231
- const balanceTitle = uiConfig?.balanceTitle;
2211
+ const balance = uiConfig?.balance;
2232
2212
  const logoUrl = branding?.logoUrl ?? "https://github.com/rhinestonewtf.png";
2233
2213
  const title = branding?.title ?? "Deposit";
2234
2214
  const canGoBack = currentStepIndex > 0 && currentStepIndex < 4 && backHandlerRef.current !== void 0;
@@ -2289,12 +2269,12 @@ function DepositModalInner({
2289
2269
  i
2290
2270
  )) })
2291
2271
  ] }),
2292
- balanceTitle && totalBalanceUsd !== null && /* @__PURE__ */ jsxs8("div", { className: "rs-modal-header-balance", children: [
2272
+ balance && /* @__PURE__ */ jsxs8("div", { className: "rs-modal-header-balance", children: [
2293
2273
  /* @__PURE__ */ jsxs8("span", { children: [
2294
- balanceTitle,
2274
+ balance.title,
2295
2275
  ":"
2296
2276
  ] }),
2297
- /* @__PURE__ */ jsx8("span", { className: "rs-modal-header-balance-value", children: currencyFormatter.format(totalBalanceUsd) })
2277
+ /* @__PURE__ */ jsx8("span", { className: "rs-modal-header-balance-value", children: balance.amount ?? (totalBalanceUsd !== null ? currencyFormatter.format(totalBalanceUsd) : null) })
2298
2278
  ] })
2299
2279
  ] }),
2300
2280
  /* @__PURE__ */ jsx8("div", { className: "rs-modal-header-nav-right", children: /* @__PURE__ */ jsx8(
@@ -2343,6 +2323,7 @@ function DepositModalInner({
2343
2323
  waitForFinalTx,
2344
2324
  reownWallet,
2345
2325
  onConnect,
2326
+ onDisconnect,
2346
2327
  onRequestConnect,
2347
2328
  connectButtonLabel,
2348
2329
  uiConfig,