@rhinestone/deposit-modal 0.1.29 → 0.1.30

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.
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  DepositModalInner
3
- } from "./chunk-XTTTHW3W.mjs";
3
+ } from "./chunk-BOKLFGNS.mjs";
4
4
  import {
5
5
  ReownWalletProvider,
6
6
  useReownWallet
7
7
  } from "./chunk-LBEP3A2Z.mjs";
8
- import "./chunk-N6T4TKXI.mjs";
9
- import "./chunk-CSQRKM4Y.mjs";
8
+ import "./chunk-CIAKCO7G.mjs";
9
+ import "./chunk-VL47TLTE.mjs";
10
10
 
11
11
  // src/DepositModalReown.tsx
12
12
  import { useCallback } from "react";
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunk5QJNOPNFcjs = require('./chunk-5QJNOPNF.cjs');
3
+ var _chunkWDDONQLVcjs = require('./chunk-WDDONQLV.cjs');
4
4
 
5
5
 
6
6
 
7
7
  var _chunk6VJ2ZTNQcjs = require('./chunk-6VJ2ZTNQ.cjs');
8
- require('./chunk-7ZCUANBT.cjs');
9
- require('./chunk-DLYVHOME.cjs');
8
+ require('./chunk-KIRDZLOS.cjs');
9
+ require('./chunk-WB3ZJJBH.cjs');
10
10
 
11
11
  // src/DepositModalReown.tsx
12
12
  var _react = require('react');
@@ -17,7 +17,7 @@ function DepositModalWithReown(props) {
17
17
  reown.openConnect();
18
18
  }, [reown.openConnect]);
19
19
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20
- _chunk5QJNOPNFcjs.DepositModalInner,
20
+ _chunkWDDONQLVcjs.DepositModalInner,
21
21
  {
22
22
  ...props,
23
23
  reownWallet: reown,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  WithdrawModalInner
3
- } from "./chunk-K6YG3I6O.mjs";
3
+ } from "./chunk-S76PY7GZ.mjs";
4
4
  import {
5
5
  ReownWalletProvider,
6
6
  useReownWallet
7
7
  } from "./chunk-LBEP3A2Z.mjs";
8
- import "./chunk-N6T4TKXI.mjs";
9
- import "./chunk-CSQRKM4Y.mjs";
8
+ import "./chunk-CIAKCO7G.mjs";
9
+ import "./chunk-VL47TLTE.mjs";
10
10
 
11
11
  // src/WithdrawModalReown.tsx
12
12
  import { useCallback } from "react";
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkCPIQJR47cjs = require('./chunk-CPIQJR47.cjs');
3
+ var _chunkK4YSUWITcjs = require('./chunk-K4YSUWIT.cjs');
4
4
 
5
5
 
6
6
 
7
7
  var _chunk6VJ2ZTNQcjs = require('./chunk-6VJ2ZTNQ.cjs');
8
- require('./chunk-7ZCUANBT.cjs');
9
- require('./chunk-DLYVHOME.cjs');
8
+ require('./chunk-KIRDZLOS.cjs');
9
+ require('./chunk-WB3ZJJBH.cjs');
10
10
 
11
11
  // src/WithdrawModalReown.tsx
12
12
  var _react = require('react');
@@ -17,7 +17,7 @@ function WithdrawModalWithReown(props) {
17
17
  reown.openConnect();
18
18
  }, [reown.openConnect]);
19
19
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
20
- _chunkCPIQJR47cjs.WithdrawModalInner,
20
+ _chunkK4YSUWITcjs.WithdrawModalInner,
21
21
  {
22
22
  ...props,
23
23
  reownWallet: reown,
@@ -21,7 +21,7 @@ import {
21
21
  portfolioToAssets,
22
22
  saveSessionOwnerToStorage,
23
23
  tokenFormatter
24
- } from "./chunk-N6T4TKXI.mjs";
24
+ } from "./chunk-CIAKCO7G.mjs";
25
25
  import {
26
26
  DEFAULT_BACKEND_URL,
27
27
  DEFAULT_SIGNER_ADDRESS,
@@ -32,11 +32,11 @@ import {
32
32
  getChainId,
33
33
  getChainName,
34
34
  getSupportedChainIds,
35
- getSupportedTokenSymbolsForChain,
35
+ getTargetTokenSymbolsForChain,
36
36
  getTokenAddress,
37
37
  getTokenIcon,
38
38
  getTokenSymbol
39
- } from "./chunk-CSQRKM4Y.mjs";
39
+ } from "./chunk-VL47TLTE.mjs";
40
40
 
41
41
  // src/DepositModal.tsx
42
42
  import {
@@ -446,7 +446,7 @@ function AssetSelectStep({
446
446
  ] })
447
447
  ] })
448
448
  ] }),
449
- /* @__PURE__ */ jsx2("div", { className: "rs-asset-balance", children: asset.balanceUsd !== void 0 ? currencyFormatter.format(asset.balanceUsd) : tokenAmount !== "--" ? `${tokenAmount} ${asset.symbol}` : "--" })
449
+ /* @__PURE__ */ jsx2("div", { className: "rs-asset-balance", children: asset.balanceUsd !== void 0 && asset.balanceUsd > 0 ? currencyFormatter.format(asset.balanceUsd) : tokenAmount !== "--" ? `${tokenAmount} ${asset.symbol}` : "--" })
450
450
  ]
451
451
  },
452
452
  asset.id
@@ -525,7 +525,7 @@ function AmountStep({
525
525
  onBalanceUsdChange,
526
526
  onContinue
527
527
  }) {
528
- const [amountUsd, setAmountUsd] = useState3("");
528
+ const [amount, setAmount] = useState3("");
529
529
  const [balance, setBalance] = useState3(null);
530
530
  const [error, setError] = useState3(null);
531
531
  const [isSwitching, setIsSwitching] = useState3(false);
@@ -534,18 +534,22 @@ function AmountStep({
534
534
  walletClient?.chain?.id && walletClient.chain.id !== asset.chainId
535
535
  );
536
536
  const tokenPriceUsd = useMemo2(() => {
537
- if (tokenPriceUsdOverride !== void 0) return tokenPriceUsdOverride;
538
- if (asset.balanceUsd === void 0 || !asset.balance) return null;
537
+ if (tokenPriceUsdOverride !== void 0 && tokenPriceUsdOverride > 0)
538
+ return tokenPriceUsdOverride;
539
+ if (asset.balanceUsd === void 0 || !asset.balanceUsd || !asset.balance)
540
+ return null;
539
541
  try {
540
542
  const balanceUnits = Number(
541
543
  formatUnits2(BigInt(asset.balance), asset.decimals)
542
544
  );
543
545
  if (!Number.isFinite(balanceUnits) || balanceUnits <= 0) return null;
544
- return asset.balanceUsd / balanceUnits;
546
+ const price = asset.balanceUsd / balanceUnits;
547
+ return price > 0 ? price : null;
545
548
  } catch {
546
549
  return null;
547
550
  }
548
551
  }, [tokenPriceUsdOverride, asset.balanceUsd, asset.balance, asset.decimals]);
552
+ const hasPricing = tokenPriceUsd !== null;
549
553
  useEffect3(() => {
550
554
  let active = true;
551
555
  async function fetchBalance() {
@@ -585,14 +589,18 @@ function AmountStep({
585
589
  }
586
590
  }, [chainMismatch, switchChain, asset.chainId]);
587
591
  useEffect3(() => {
588
- if (defaultAmount && tokenPriceUsd !== null && !amountUsd) {
592
+ if (defaultAmount && !amount) {
589
593
  const parsed = Number(defaultAmount);
590
594
  if (Number.isFinite(parsed) && parsed > 0) {
591
- const usdValue = parsed * tokenPriceUsd;
592
- setAmountUsd(usdValue.toFixed(2));
595
+ if (hasPricing) {
596
+ const usdValue = parsed * tokenPriceUsd;
597
+ setAmount(usdValue.toFixed(2));
598
+ } else {
599
+ setAmount(parsed.toString());
600
+ }
593
601
  }
594
602
  }
595
- }, [defaultAmount, tokenPriceUsd, amountUsd]);
603
+ }, [defaultAmount, tokenPriceUsd, hasPricing, amount]);
596
604
  const balanceUsd = useMemo2(() => {
597
605
  if (balance === null || tokenPriceUsd === null) return null;
598
606
  try {
@@ -604,8 +612,7 @@ function AmountStep({
604
612
  }
605
613
  }, [balance, tokenPriceUsd, asset.decimals]);
606
614
  useEffect3(() => {
607
- if (balanceUsd === null) return;
608
- onBalanceUsdChange?.(balanceUsd);
615
+ onBalanceUsdChange?.(balanceUsd ?? 0);
609
616
  }, [balanceUsd, onBalanceUsdChange]);
610
617
  const formattedBalance = useMemo2(() => {
611
618
  if (balance === null) return "...";
@@ -619,47 +626,62 @@ function AmountStep({
619
626
  }
620
627
  }, [balance, asset.decimals]);
621
628
  const tokenAmount = useMemo2(() => {
622
- if (!amountUsd || tokenPriceUsd === null || tokenPriceUsd === 0)
623
- return null;
624
- const usd = Number(amountUsd);
625
- if (!Number.isFinite(usd) || usd <= 0) return null;
626
- return usd / tokenPriceUsd;
627
- }, [amountUsd, tokenPriceUsd]);
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]);
628
638
  const formattedTokenAmount = useMemo2(() => {
629
639
  if (tokenAmount === null) return "0.00";
630
640
  return tokenFormatter.format(tokenAmount);
631
641
  }, [tokenAmount]);
632
642
  const targetSymbol = getTokenSymbol(targetToken, targetChain);
633
643
  const handlePresetClick = (percentage) => {
634
- if (balanceUsd === null) return;
635
- const value = balanceUsd * percentage / 100;
636
- setAmountUsd(value.toFixed(2));
644
+ 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;
657
+ }
658
+ }
637
659
  if (error) setError(null);
638
660
  };
639
661
  const handleContinue = () => {
640
- const usdValue = parseFloat(amountUsd);
641
- if (isNaN(usdValue) || usdValue <= 0) {
662
+ const numericAmount = parseFloat(amount);
663
+ if (isNaN(numericAmount) || numericAmount <= 0) {
642
664
  setError("Please enter a valid amount");
643
665
  return;
644
666
  }
645
- if (uiConfig?.maxDepositUsd && usdValue > uiConfig.maxDepositUsd) {
646
- setError(
647
- `Maximum deposit is ${currencyFormatter.format(uiConfig.maxDepositUsd)}`
648
- );
649
- return;
650
- }
651
- if (uiConfig?.minDepositUsd && usdValue < uiConfig.minDepositUsd) {
652
- setError(
653
- `Minimum deposit is ${currencyFormatter.format(uiConfig.minDepositUsd)}`
654
- );
655
- return;
656
- }
657
- if (tokenPriceUsd === null || tokenPriceUsd === 0) {
658
- setError("Unable to determine token price");
659
- return;
667
+ let tokenAmountStr;
668
+ if (hasPricing) {
669
+ if (uiConfig?.maxDepositUsd && numericAmount > uiConfig.maxDepositUsd) {
670
+ setError(
671
+ `Maximum deposit is ${currencyFormatter.format(uiConfig.maxDepositUsd)}`
672
+ );
673
+ return;
674
+ }
675
+ if (uiConfig?.minDepositUsd && numericAmount < uiConfig.minDepositUsd) {
676
+ setError(
677
+ `Minimum deposit is ${currencyFormatter.format(uiConfig.minDepositUsd)}`
678
+ );
679
+ return;
680
+ }
681
+ tokenAmountStr = (numericAmount / tokenPriceUsd).toString();
682
+ } else {
683
+ tokenAmountStr = numericAmount.toString();
660
684
  }
661
- const tokenAmountValue = usdValue / tokenPriceUsd;
662
- let tokenAmountStr = tokenAmountValue.toString();
663
685
  let amountInUnits;
664
686
  try {
665
687
  amountInUnits = parseUnits(tokenAmountStr, asset.decimals);
@@ -689,35 +711,52 @@ function AmountStep({
689
711
  return /* @__PURE__ */ jsxs3("div", { className: "rs-step", children: [
690
712
  /* @__PURE__ */ jsxs3("div", { className: "rs-step-body", style: { paddingTop: 0 }, children: [
691
713
  /* @__PURE__ */ jsxs3("div", { className: "rs-amount-display", children: [
692
- /* @__PURE__ */ jsx3("div", { className: "rs-amount-input-wrapper", children: /* @__PURE__ */ jsx3(
714
+ /* @__PURE__ */ jsx3("div", { className: "rs-amount-input-wrapper", children: hasPricing ? /* @__PURE__ */ jsx3(
693
715
  "input",
694
716
  {
695
717
  type: "text",
696
718
  inputMode: "decimal",
697
719
  className: "rs-amount-input-large",
698
720
  placeholder: "$0.00",
699
- value: amountUsd ? `$${amountUsd}` : "",
721
+ value: amount ? `$${amount}` : "",
722
+ onChange: (e) => {
723
+ const raw = e.target.value.replace(/[^0-9.]/g, "");
724
+ const parts = raw.split(".");
725
+ if (parts.length > 2) return;
726
+ setAmount(raw);
727
+ if (error) setError(null);
728
+ },
729
+ autoFocus: true
730
+ }
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,
700
739
  onChange: (e) => {
701
740
  const raw = e.target.value.replace(/[^0-9.]/g, "");
702
741
  const parts = raw.split(".");
703
742
  if (parts.length > 2) return;
704
- setAmountUsd(raw);
743
+ setAmount(raw);
705
744
  if (error) setError(null);
706
745
  },
707
746
  autoFocus: true
708
747
  }
709
748
  ) }),
710
- /* @__PURE__ */ jsxs3("div", { className: "rs-amount-token-value", children: [
749
+ hasPricing ? /* @__PURE__ */ jsxs3("div", { className: "rs-amount-token-value", children: [
711
750
  formattedTokenAmount,
712
751
  " ",
713
752
  asset.symbol
714
- ] }),
753
+ ] }) : /* @__PURE__ */ jsx3("div", { className: "rs-amount-token-value", style: { color: "var(--rs-muted-foreground)" }, children: "Price unavailable" }),
715
754
  /* @__PURE__ */ jsx3("div", { className: "rs-amount-available", children: /* @__PURE__ */ jsxs3("span", { className: "rs-amount-available-value", children: [
716
755
  formattedBalance,
717
756
  " ",
718
757
  asset.symbol,
719
758
  " available",
720
- balanceUsd !== null && /* @__PURE__ */ jsxs3("span", { style: { color: "var(--rs-muted-foreground)" }, children: [
759
+ hasPricing && balanceUsd !== null && /* @__PURE__ */ jsxs3("span", { style: { color: "var(--rs-muted-foreground)" }, children: [
721
760
  " ",
722
761
  "(",
723
762
  currencyFormatter.format(balanceUsd),
@@ -837,7 +876,7 @@ function AmountStep({
837
876
  type: "button",
838
877
  className: "rs-amount-preset-btn",
839
878
  onClick: () => handlePresetClick(pct),
840
- disabled: balanceUsd === null,
879
+ disabled: balance === null,
841
880
  children: [
842
881
  pct,
843
882
  "%"
@@ -851,7 +890,7 @@ function AmountStep({
851
890
  type: "button",
852
891
  className: "rs-amount-preset-btn",
853
892
  onClick: () => handlePresetClick(100),
854
- disabled: balanceUsd === null,
893
+ disabled: balance === null,
855
894
  children: "Max"
856
895
  }
857
896
  )
@@ -900,7 +939,7 @@ function AmountStep({
900
939
  {
901
940
  onClick: handleContinue,
902
941
  fullWidth: true,
903
- disabled: !amountUsd || chainMismatch,
942
+ disabled: !amount || chainMismatch,
904
943
  children: "Continue"
905
944
  }
906
945
  ) }),
@@ -1352,7 +1391,7 @@ function DepositAddressStep({
1352
1391
  const defaultChainId = supportedChainIds.includes(BASE_CHAIN_ID) ? BASE_CHAIN_ID : supportedChainIds[0];
1353
1392
  const [sourceChainId, setSourceChainId] = useState6(defaultChainId);
1354
1393
  const tokensForChain = useMemo5(
1355
- () => getSupportedTokenSymbolsForChain(sourceChainId),
1394
+ () => getTargetTokenSymbolsForChain(sourceChainId),
1356
1395
  [sourceChainId]
1357
1396
  );
1358
1397
  const defaultToken = tokensForChain.includes("USDC") ? "USDC" : tokensForChain[0] ?? "USDC";
@@ -1445,7 +1484,7 @@ function DepositAddressStep({
1445
1484
  /* @__PURE__ */ jsx6("div", { className: "rs-step-body", children: /* @__PURE__ */ jsxs6("div", { className: "rs-deposit-address", children: [
1446
1485
  /* @__PURE__ */ jsxs6("div", { className: "rs-deposit-address-selectors", children: [
1447
1486
  /* @__PURE__ */ jsxs6("div", { className: "rs-deposit-address-dropdown", children: [
1448
- /* @__PURE__ */ jsx6("div", { className: "rs-deposit-address-dropdown-label", children: "Supported token" }),
1487
+ /* @__PURE__ */ jsx6("div", { className: "rs-deposit-address-dropdown-label", children: "Fallback token" }),
1449
1488
  /* @__PURE__ */ jsxs6(
1450
1489
  "button",
1451
1490
  {
@@ -1511,7 +1550,7 @@ function DepositAddressStep({
1511
1550
  )) })
1512
1551
  ] }),
1513
1552
  /* @__PURE__ */ jsxs6("div", { className: "rs-deposit-address-dropdown", children: [
1514
- /* @__PURE__ */ jsx6("div", { className: "rs-deposit-address-dropdown-label", children: "Supported chain" }),
1553
+ /* @__PURE__ */ jsx6("div", { className: "rs-deposit-address-dropdown-label", children: "Fallback chain" }),
1515
1554
  /* @__PURE__ */ jsxs6(
1516
1555
  "button",
1517
1556
  {
@@ -2105,7 +2144,7 @@ function DepositFlow({
2105
2144
  // src/DepositModal.tsx
2106
2145
  import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
2107
2146
  var ReownDepositInner = lazy(
2108
- () => import("./DepositModalReown-BVHWFWIG.mjs").then((m) => ({ default: m.DepositModalReown }))
2147
+ () => import("./DepositModalReown-OHTRNISJ.mjs").then((m) => ({ default: m.DepositModalReown }))
2109
2148
  );
2110
2149
  function DepositModal(props) {
2111
2150
  const needsReown = !!props.reownAppId;
@@ -6,9 +6,8 @@ import {
6
6
  getExplorerTxUrl,
7
7
  getTokenAddress,
8
8
  getTokenDecimalsByAddress,
9
- getTokenSymbol,
10
- isSupportedTokenAddressForChain
11
- } from "./chunk-CSQRKM4Y.mjs";
9
+ getTokenSymbol
10
+ } from "./chunk-VL47TLTE.mjs";
12
11
 
13
12
  // src/components/ui/Modal.tsx
14
13
  import {
@@ -366,22 +365,15 @@ function normalizeOrchestratorPortfolio(data) {
366
365
  if (!resolvedTokenAddress) {
367
366
  continue;
368
367
  }
369
- if (!isSupportedTokenAddressForChain(
370
- resolvedTokenAddress,
371
- chainBalance.chainId
372
- )) {
373
- continue;
374
- }
375
- const symbol = getTokenSymbol(resolvedTokenAddress, chainBalance.chainId);
368
+ const registrySymbol = getTokenSymbol(resolvedTokenAddress, chainBalance.chainId);
369
+ const symbol = registrySymbol !== "Token" ? registrySymbol : normalizedName || "Token";
370
+ const decimals = registrySymbol !== "Token" ? getTokenDecimalsByAddress(resolvedTokenAddress, chainBalance.chainId) : tokenData.tokenDecimals ?? 18;
376
371
  tokens.push({
377
372
  chainId: chainBalance.chainId,
378
373
  address: resolvedTokenAddress,
379
374
  symbol,
380
375
  name: symbol,
381
- decimals: getTokenDecimalsByAddress(
382
- resolvedTokenAddress,
383
- chainBalance.chainId
384
- ),
376
+ decimals,
385
377
  balance: unlocked,
386
378
  balanceUsd: 0
387
379
  });
@@ -405,14 +397,17 @@ function normalizeDirectToken(token) {
405
397
  ) ?? getTokenAddress(symbol, chainId);
406
398
  if (!address) return null;
407
399
  const addressAsToken = address;
408
- if (!isSupportedTokenAddressForChain(addressAsToken, chainId)) return null;
409
400
  const balanceUsd = extractNumber(token, "balanceUsd") ?? extractNumber(token, "usdValue") ?? extractNumber(token, "valueUsd") ?? extractNumericString(token, "balanceUsd") ?? extractNumericString(token, "usdValue") ?? extractNumericString(token, "valueUsd") ?? 0;
401
+ const registrySymbol = getTokenSymbol(addressAsToken, chainId);
402
+ const resolvedSymbol = registrySymbol !== "Token" ? registrySymbol : symbol;
403
+ const backendDecimals = extractNumber(token, "decimals") ?? extractNumber(token, "tokenDecimals");
404
+ const resolvedDecimals = registrySymbol !== "Token" ? getTokenDecimalsByAddress(addressAsToken, chainId) : backendDecimals ?? 18;
410
405
  return {
411
406
  chainId,
412
407
  address: addressAsToken,
413
- symbol: getTokenSymbol(addressAsToken, chainId),
414
- name: getTokenSymbol(addressAsToken, chainId),
415
- decimals: getTokenDecimalsByAddress(addressAsToken, chainId),
408
+ symbol: resolvedSymbol,
409
+ name: resolvedSymbol,
410
+ decimals: resolvedDecimals,
416
411
  balance: balanceValue,
417
412
  balanceUsd
418
413
  };
@@ -973,11 +968,13 @@ function getEventTxHash(event) {
973
968
  }
974
969
  if (event.type === "bridge-started" || event.type === "bridge-complete") {
975
970
  const deposit = isRecord(event.data?.deposit) ? event.data.deposit : void 0;
976
- return asString(deposit?.transactionHash);
971
+ const source = isRecord(event.data?.source) ? event.data.source : void 0;
972
+ return asString(deposit?.transactionHash) ?? asString(source?.transactionHash);
977
973
  }
978
974
  if (event.type === "bridge-failed" || event.type === "error") {
979
975
  const deposit = isRecord(event.data?.deposit) ? event.data.deposit : void 0;
980
- return asString(deposit?.transactionHash);
976
+ const source = isRecord(event.data?.source) ? event.data.source : void 0;
977
+ return asString(deposit?.transactionHash) ?? asString(source?.transactionHash);
981
978
  }
982
979
  return void 0;
983
980
  }