@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.
- package/dist/{DepositModalReown-OHTRNISJ.mjs → DepositModalReown-SZPCCNPH.mjs} +9 -5
- package/dist/{DepositModalReown-ZD3ROLZG.cjs → DepositModalReown-XUAEWIW7.cjs} +12 -8
- package/dist/{WithdrawModalReown-SVZQKH2X.cjs → WithdrawModalReown-53FDOZG2.cjs} +12 -8
- package/dist/{WithdrawModalReown-IJAMIPSY.mjs → WithdrawModalReown-YGGV7BL2.mjs} +9 -5
- package/dist/{chunk-6VJ2ZTNQ.cjs → chunk-52FVEYTL.cjs} +6 -0
- package/dist/{chunk-VL47TLTE.mjs → chunk-C6I5TFSL.mjs} +13 -8
- package/dist/{chunk-CIAKCO7G.mjs → chunk-DLFUXLAM.mjs} +67 -34
- package/dist/{chunk-LBEP3A2Z.mjs → chunk-K2JJKFTV.mjs} +8 -2
- package/dist/{chunk-BOKLFGNS.mjs → chunk-MKKJ7ZE2.mjs} +148 -167
- package/dist/{chunk-WDDONQLV.cjs → chunk-NYEWO4NW.cjs} +265 -284
- package/dist/{chunk-S76PY7GZ.mjs → chunk-RR25E5DZ.mjs} +35 -15
- package/dist/{chunk-WB3ZJJBH.cjs → chunk-S4UBVD3H.cjs} +14 -9
- package/dist/{chunk-K4YSUWIT.cjs → chunk-SQDXU7ML.cjs} +91 -71
- package/dist/{chunk-KIRDZLOS.cjs → chunk-YIHOACM3.cjs} +91 -58
- package/dist/constants.cjs +2 -2
- package/dist/constants.mjs +1 -1
- package/dist/deposit.cjs +4 -4
- package/dist/deposit.d.cts +2 -2
- package/dist/deposit.d.ts +2 -2
- package/dist/deposit.mjs +3 -3
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +4 -4
- package/dist/reown.cjs +5 -5
- package/dist/reown.d.cts +1 -1
- package/dist/reown.d.ts +1 -1
- package/dist/reown.mjs +4 -4
- package/dist/styles.css +8 -5
- package/dist/{types-CgXyx46m.d.ts → types-Bp2n2RQ3.d.ts} +4 -1
- package/dist/{types-BwaQ7jK5.d.cts → types-CIaQPR6F.d.cts} +4 -1
- package/dist/withdraw.cjs +4 -4
- package/dist/withdraw.d.cts +2 -2
- package/dist/withdraw.d.ts +2 -2
- package/dist/withdraw.mjs +3 -3
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
portfolioToAssets,
|
|
22
22
|
saveSessionOwnerToStorage,
|
|
23
23
|
tokenFormatter
|
|
24
|
-
} from "./chunk-
|
|
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
|
-
|
|
38
|
+
getTokenSymbol,
|
|
39
|
+
isStablecoinSymbol
|
|
40
|
+
} from "./chunk-C6I5TFSL.mjs";
|
|
40
41
|
|
|
41
42
|
// src/DepositModal.tsx
|
|
42
43
|
import {
|
|
43
|
-
useMemo as
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
646
|
-
const
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
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
|
|
655
|
+
let sourceAmount;
|
|
656
|
+
if (isSourceStablecoin || !hasPricing) {
|
|
657
|
+
sourceAmount = numericAmount;
|
|
658
|
+
} else {
|
|
659
|
+
sourceAmount = numericAmount / tokenPriceUsd;
|
|
660
|
+
}
|
|
668
661
|
if (hasPricing) {
|
|
669
|
-
|
|
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 &&
|
|
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
|
-
|
|
694
|
-
|
|
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:
|
|
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
|
-
|
|
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 {
|
|
952
|
-
import { erc20Abi as erc20Abi2,
|
|
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
|
|
977
|
-
const
|
|
978
|
-
if (
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
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
|
-
|
|
1012
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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-
|
|
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 =
|
|
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((
|
|
2223
|
-
setTotalBalanceUsd(
|
|
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
|
|
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
|
-
|
|
2272
|
+
balance && /* @__PURE__ */ jsxs8("div", { className: "rs-modal-header-balance", children: [
|
|
2293
2273
|
/* @__PURE__ */ jsxs8("span", { children: [
|
|
2294
|
-
|
|
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,
|