@rash2x/bridge-widget 0.7.7 → 0.7.9

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.
@@ -3,7 +3,7 @@ var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
5
  const jsxRuntime = require("react/jsx-runtime");
6
- const react = require("react");
6
+ const React = require("react");
7
7
  const reactI18next = require("react-i18next");
8
8
  const i18n = require("i18next");
9
9
  const button = require("@/components/ui/button");
@@ -32,6 +32,23 @@ const tronwalletAdapters = require("@tronweb3/tronwallet-adapters");
32
32
  const tronweb = require("tronweb");
33
33
  const card = require("@/components/ui/card");
34
34
  const reactWindow = require("react-window");
35
+ function _interopNamespaceDefault(e2) {
36
+ const n3 = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
37
+ if (e2) {
38
+ for (const k2 in e2) {
39
+ if (k2 !== "default") {
40
+ const d3 = Object.getOwnPropertyDescriptor(e2, k2);
41
+ Object.defineProperty(n3, k2, d3.get ? d3 : {
42
+ enumerable: true,
43
+ get: () => e2[k2]
44
+ });
45
+ }
46
+ }
47
+ }
48
+ n3.default = e2;
49
+ return Object.freeze(n3);
50
+ }
51
+ const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
35
52
  const common$1 = { "connecting": "Connecting…", "initializing": "Initializing...", "loading": "Loading...", "paste": "paste", "close": "Close", "zeroPlaceholder": "0", "nativeToken": "Native Token" };
36
53
  const wallets$1 = { "addTonWallet": "Add TON wallet", "addEvmWallet": "Add EVM wallet", "connectTonWallet": "Connect TON wallet", "connectEvmWallet": "Connect EVM wallet", "initializingMetamask": "Initializing MetaMask SDK...", "initializingTronlink": "Initializing TronLink...", "failedToConnectTon": "Failed to connect to TON wallet", "failedToDisconnect": "Failed to disconnect", "metamaskConnectionError": "MetaMask connection error", "failedToConnectMetamask": "Failed to connect to MetaMask", "failedToDisconnectMetamask": "Failed to disconnect from MetaMask", "selectWallet": "Select Wallet", "tonWallets": "TON", "evmWallets": "EVM", "tronWallets": "TRON", "tonconnect": "TonConnect", "metaMask": "WalletConnect", "walletConnect": "WalletConnect", "tronLink": "TronLink", "addTronWallet": "Add Tron wallet", "comingSoon": "Coming Soon", "connected": "CONNECTED", "connectedStatus": "Connected", "disconnect": "Disconnect", "chooseWallet": "Connect wallet", "oneWalletPerEnv": "You can only connect one wallet per environment.", "connect": "Connect", "connectTronWallet": "Connect Tron wallet", "connectWallet": "Connect wallet" };
37
54
  const bridge$1 = { "max": "Max", "sourceNetwork": "Source network", "destinationNetwork": "Destination network", "selectToken": "Select token", "selectNetwork": "Select network", "selectSourceNetwork": "Select source network", "selectDestinationNetwork": "Select destination network", "searchToken": "Search token", "myTokens": "My tokens", "allTokens": "All tokens", "search": "Search", "select": "Select", "willChangeSourceChain": "Will change source network", "willChangeDestinationChain": "Will change destination network", "willChangeBothChains": "Will change both networks", "willChangeSourceNetworkAndToken": "Will change source token", "noBalancesFound": "No balances found.", "noResults": "No results", "tokenNotFound": "We couldn't find a token with that name or symbol. Please try again.", "chainNotFound": "We couldn't find a chain with that name. Please try again.", "sendToAnotherAddress": "Send to another address", "youWillReceive": "You will receive", "anotherAddressPlaceholder": "Address", "addressDoesntMatch": "Address doesn't match the {{network}} network", "checkBeforeTransfer": "Check correctness before transfer" };
@@ -95,7 +112,7 @@ function BridgeI18nProvider({
95
112
  children,
96
113
  defaultLanguage = "en"
97
114
  }) {
98
- react.useEffect(() => {
115
+ React.useEffect(() => {
99
116
  if (bridgeI18n.language !== defaultLanguage) {
100
117
  bridgeI18n.changeLanguage(defaultLanguage);
101
118
  }
@@ -507,9 +524,9 @@ const ExitIcon = (props) => {
507
524
  );
508
525
  };
509
526
  const SwapButton = ({ canSwap, onSwap }) => {
510
- const [turns, setTurns] = react.useState(0);
511
- const [isSwapping, setIsSwapping] = react.useState(false);
512
- const handleSwap = react.useCallback(() => {
527
+ const [turns, setTurns] = React.useState(0);
528
+ const [isSwapping, setIsSwapping] = React.useState(false);
529
+ const handleSwap = React.useCallback(() => {
513
530
  if (!canSwap || isSwapping) return;
514
531
  setIsSwapping(true);
515
532
  setTurns((t2) => t2 + 1);
@@ -585,7 +602,7 @@ const SelectNetworkButton = ({
585
602
  network
586
603
  }) => {
587
604
  const { t: t2 } = useBridgeTranslation();
588
- const label = react.useMemo(() => {
605
+ const label = React.useMemo(() => {
589
606
  return network?.name ?? t2("bridge.selectNetwork");
590
607
  }, [network, t2]);
591
608
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -626,7 +643,7 @@ const normalizeValue = (value, max) => {
626
643
  }
627
644
  return void 0;
628
645
  };
629
- const TokenInput = react.forwardRef(
646
+ const TokenInput = React.forwardRef(
630
647
  ({
631
648
  value,
632
649
  onAmountChange,
@@ -638,11 +655,11 @@ const TokenInput = react.forwardRef(
638
655
  error,
639
656
  ...rest
640
657
  }, ref) => {
641
- const [inputVal, setInputVal] = react.useState(value ?? "");
642
- react.useEffect(() => {
658
+ const [inputVal, setInputVal] = React.useState(value ?? "");
659
+ React.useEffect(() => {
643
660
  setInputVal(value ?? "");
644
661
  }, [value]);
645
- const handleChange = react.useCallback(
662
+ const handleChange = React.useCallback(
646
663
  (event) => {
647
664
  const raw = event.target.value;
648
665
  const normalized = normalizeValue(raw, max);
@@ -689,10 +706,10 @@ const TokenInput = react.forwardRef(
689
706
  );
690
707
  TokenInput.displayName = "TokenInput";
691
708
  function useModal(initial = false) {
692
- const [isOpen, setOpen] = react.useState(initial);
693
- const onOpen = react.useCallback(() => setOpen(true), []);
694
- const onClose = react.useCallback(() => setOpen(false), []);
695
- const toggle = react.useCallback(() => setOpen((v2) => !v2), []);
709
+ const [isOpen, setOpen] = React.useState(initial);
710
+ const onOpen = React.useCallback(() => setOpen(true), []);
711
+ const onClose = React.useCallback(() => setOpen(false), []);
712
+ const toggle = React.useCallback(() => setOpen((v2) => !v2), []);
696
713
  return { isOpen, onOpen, onClose, toggle };
697
714
  }
698
715
  function createJSONStorage(getStorage, options) {
@@ -1203,14 +1220,14 @@ const ChainSelectModal = ({
1203
1220
  isSource
1204
1221
  }) => {
1205
1222
  const { t: t2 } = useBridgeTranslation();
1206
- const [query, setQuery] = react.useState("");
1223
+ const [query, setQuery] = React.useState("");
1207
1224
  const { setFromChain, chains, fromChain, toChain } = useChainsStore();
1208
1225
  const { assetMatrix, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
1209
- const handleClose = react.useCallback(() => {
1226
+ const handleClose = React.useCallback(() => {
1210
1227
  setQuery("");
1211
1228
  onClose();
1212
1229
  }, [onClose]);
1213
- const findCompatibleSrcChain = react.useCallback(
1230
+ const findCompatibleSrcChain = React.useCallback(
1214
1231
  (dstChain) => {
1215
1232
  if (!chains || !selectedAssetSymbol || !assetMatrix) return void 0;
1216
1233
  const PRIORITY_CHAINS2 = [
@@ -1234,7 +1251,7 @@ const ChainSelectModal = ({
1234
1251
  },
1235
1252
  [chains, selectedAssetSymbol, assetMatrix, fromChain?.chainKey]
1236
1253
  );
1237
- const findCompatibleTokenAndSrcChain = react.useCallback(
1254
+ const findCompatibleTokenAndSrcChain = React.useCallback(
1238
1255
  (dstChain) => {
1239
1256
  if (!chains || !assetMatrix) return void 0;
1240
1257
  const PRIORITY_CHAINS2 = [
@@ -1264,7 +1281,7 @@ const ChainSelectModal = ({
1264
1281
  },
1265
1282
  [chains, assetMatrix, fromChain?.chainKey]
1266
1283
  );
1267
- const groupedChains = react.useMemo(() => {
1284
+ const groupedChains = React.useMemo(() => {
1268
1285
  const q3 = query.trim().toLowerCase();
1269
1286
  const isAllowed = isSource ? isAllowedFromChain : isAllowedToChain;
1270
1287
  const filtered = (items ?? []).filter((c2) => isAllowed(c2.chainKey)).filter(
@@ -1303,12 +1320,12 @@ const ChainSelectModal = ({
1303
1320
  findCompatibleTokenAndSrcChain,
1304
1321
  isSource
1305
1322
  ]);
1306
- const PRIORITY_CHAINS = react.useMemo(
1323
+ const PRIORITY_CHAINS = React.useMemo(
1307
1324
  () => ["ethereum", "arbitrum", "bsc", "polygon", "optimism", "base"],
1308
1325
  []
1309
1326
  );
1310
- const [isPickLoading, setIsPickLoading] = react.useState(false);
1311
- const onChainPick = react.useCallback(
1327
+ const [isPickLoading, setIsPickLoading] = React.useState(false);
1328
+ const onChainPick = React.useCallback(
1312
1329
  async (chain2, willChangeSrc = false, willChangeTokenAndSrc = false) => {
1313
1330
  if (!willChangeSrc && !willChangeTokenAndSrc) {
1314
1331
  onChangeChain(chain2);
@@ -1456,9 +1473,9 @@ const ChainSelectModal = ({
1456
1473
  ] })
1457
1474
  ] }) });
1458
1475
  };
1459
- const ChainStrategyContext = react.createContext(void 0);
1476
+ const ChainStrategyContext = React.createContext(void 0);
1460
1477
  function useChainStrategies() {
1461
- const context = react.useContext(ChainStrategyContext);
1478
+ const context = React.useContext(ChainStrategyContext);
1462
1479
  if (!context) {
1463
1480
  throw new Error(
1464
1481
  "useChainStrategies must be used within ChainStrategyProvider"
@@ -1606,12 +1623,12 @@ const WalletInlineButton = ({
1606
1623
  const account = connection?.getAccount();
1607
1624
  const isConnected = connection?.isConnected();
1608
1625
  const error = connection?.getError();
1609
- const availableConnections = react.useMemo(
1626
+ const availableConnections = React.useMemo(
1610
1627
  () => connection?.getAvailableConnections() ?? [],
1611
1628
  [connection]
1612
1629
  );
1613
1630
  const evmConnectorId = connectedEvmConnector?.id;
1614
- const activeTronConnection = react.useMemo(() => {
1631
+ const activeTronConnection = React.useMemo(() => {
1615
1632
  if (walletType !== "tron") return null;
1616
1633
  const tronWalletConnect = availableConnections.find(
1617
1634
  (conn) => conn.provider === "walletconnect" && conn.connected && !!conn.address
@@ -1623,16 +1640,16 @@ const WalletInlineButton = ({
1623
1640
  if (tronLink) return tronLink;
1624
1641
  return null;
1625
1642
  }, [availableConnections, walletType]);
1626
- const handleClick = react.useCallback(() => {
1643
+ const handleClick = React.useCallback(() => {
1627
1644
  onOpen(addressType);
1628
1645
  }, [onOpen, addressType]);
1629
- const buttonText = react.useMemo(() => {
1646
+ const buttonText = React.useMemo(() => {
1630
1647
  if (isConnected && account) return formatAddress(account);
1631
1648
  if (wallet === "ton") return t2("wallets.addTonWallet");
1632
1649
  if (wallet === "tronlink") return t2("wallets.addTronWallet");
1633
1650
  return t2("wallets.addEvmWallet");
1634
1651
  }, [wallet, isConnected, account, t2]);
1635
- const connectedIcon = react.useMemo(() => {
1652
+ const connectedIcon = React.useMemo(() => {
1636
1653
  if (!isConnected) return null;
1637
1654
  if (walletType === "tron" && activeTronConnection) {
1638
1655
  return activeTronConnection.provider === "walletconnect" ? prefixIcons.walletconnect : prefixIcons.tronlink;
@@ -1737,8 +1754,8 @@ const SwapSection = ({
1737
1754
  const { assetMatrix, selectedAssetSymbol } = useTokensStore();
1738
1755
  const { status } = useBridgeQuoteStore();
1739
1756
  const { t: t2 } = useBridgeTranslation();
1740
- const [isFocused, setIsFocused] = react.useState(false);
1741
- const tokenOnThisChain = react.useMemo(
1757
+ const [isFocused, setIsFocused] = React.useState(false);
1758
+ const tokenOnThisChain = React.useMemo(
1742
1759
  () => resolveTokenOnChainFromMatrix$2(
1743
1760
  assetMatrix,
1744
1761
  selectedAssetSymbol,
@@ -1747,25 +1764,25 @@ const SwapSection = ({
1747
1764
  [assetMatrix, selectedAssetSymbol, chain2?.chainKey]
1748
1765
  );
1749
1766
  const priceUsd = tokenOnThisChain?.price?.usd ?? pickAnyPriceUsd(assetMatrix, selectedAssetSymbol);
1750
- const computedFiat = react.useMemo(() => {
1767
+ const computedFiat = React.useMemo(() => {
1751
1768
  const amt = parseFloat(amount || "");
1752
1769
  if (Number.isNaN(amt) || !priceUsd) return "$0";
1753
1770
  return formatUsd(amt * priceUsd);
1754
1771
  }, [amount, priceUsd]);
1755
1772
  const isUsdLoading = Boolean(amount && parseFloat(amount) > 0 && !priceUsd);
1756
- const onChangeChain = react.useCallback(
1773
+ const onChangeChain = React.useCallback(
1757
1774
  (c2) => {
1758
1775
  onSelect?.(c2);
1759
1776
  onClose();
1760
1777
  },
1761
1778
  [onSelect, onClose]
1762
1779
  );
1763
- const handleMaxClick = react.useCallback(() => {
1780
+ const handleMaxClick = React.useCallback(() => {
1764
1781
  if (balance.balance && onAmountChange) {
1765
1782
  onAmountChange(balance.balance.toString());
1766
1783
  }
1767
1784
  }, [balance.balance, onAmountChange]);
1768
- const isInsufficientBalance = react.useMemo(() => {
1785
+ const isInsufficientBalance = React.useMemo(() => {
1769
1786
  return !!(isSource && amount && balance.balance && parseFloat(amount) > balance.balance);
1770
1787
  }, [amount, balance.balance, isSource]);
1771
1788
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -1802,7 +1819,7 @@ const SwapSection = ({
1802
1819
  TokenInput,
1803
1820
  {
1804
1821
  value: amount,
1805
- onAmountChange: react.useCallback(
1822
+ onAmountChange: React.useCallback(
1806
1823
  (v2) => onAmountChange?.(v2),
1807
1824
  [onAmountChange]
1808
1825
  ),
@@ -1878,13 +1895,13 @@ function isAddressValidForChain(chainKey, addr, chainType) {
1878
1895
  return addr.trim().length > 0;
1879
1896
  }
1880
1897
  const useIsAddressValid = (address, chainKey, chainType) => {
1881
- const isValid = react.useMemo(() => {
1898
+ const isValid = React.useMemo(() => {
1882
1899
  return isAddressValidForChain(chainKey, address, chainType);
1883
1900
  }, [address, chainKey, chainType]);
1884
1901
  return { isValid };
1885
1902
  };
1886
1903
  const AnotherAddress = () => {
1887
- const [isFocused, setIsFocused] = react.useState(false);
1904
+ const [isFocused, setIsFocused] = React.useState(false);
1888
1905
  const { t: t2 } = useBridgeTranslation();
1889
1906
  const { toChain } = useChainsStore();
1890
1907
  const setCustomDstAddress = useCustomAddressStore(
@@ -1895,11 +1912,11 @@ const AnotherAddress = () => {
1895
1912
  const customDstAddress = useCustomAddressStore(
1896
1913
  (state2) => state2.customDstAddress
1897
1914
  );
1898
- const [value, setValue] = react.useState("");
1899
- const trimmed = react.useMemo(() => value.trim(), [value]);
1915
+ const [value, setValue] = React.useState("");
1916
+ const trimmed = React.useMemo(() => value.trim(), [value]);
1900
1917
  const { isValid } = useIsAddressValid(trimmed, toChain?.chainKey, toChain?.chainType);
1901
1918
  const invalid = trimmed && !isValid;
1902
- react.useEffect(() => {
1919
+ React.useEffect(() => {
1903
1920
  if (!isEnabled2) {
1904
1921
  if (customDstAddress !== void 0) {
1905
1922
  setCustomDstAddress(void 0);
@@ -2056,7 +2073,7 @@ function useAddresses() {
2056
2073
  (state2) => state2.address
2057
2074
  );
2058
2075
  const tronAddress = tronLinkAddress || tronWalletConnectAddress || void 0;
2059
- const srcAddress = react.useMemo(() => {
2076
+ const srcAddress = React.useMemo(() => {
2060
2077
  if (!fromChain?.chainKey) return void 0;
2061
2078
  const chainKey = fromChain.chainKey.toLowerCase();
2062
2079
  if (chainKey === "ton") {
@@ -2067,7 +2084,7 @@ function useAddresses() {
2067
2084
  }
2068
2085
  return evmAddress || void 0;
2069
2086
  }, [fromChain?.chainKey, evmAddress, tonAddress, tronAddress]);
2070
- const dstAddress = react.useMemo(() => {
2087
+ const dstAddress = React.useMemo(() => {
2071
2088
  if (!toChain?.chainKey) return void 0;
2072
2089
  if (isCustomAddressEnabled) {
2073
2090
  return customDstAddress;
@@ -2586,7 +2603,7 @@ function useBridgeQuote() {
2586
2603
  const { chainRegistry } = useChainStrategies();
2587
2604
  const publicClient = wagmi.usePublicClient();
2588
2605
  const input2 = inputAmount;
2589
- const srcTokenOnFrom = react.useMemo(
2606
+ const srcTokenOnFrom = React.useMemo(
2590
2607
  () => resolveTokenOnChainFromMatrix$1(
2591
2608
  assetMatrix,
2592
2609
  selectedAssetSymbol,
@@ -2594,7 +2611,7 @@ function useBridgeQuote() {
2594
2611
  ),
2595
2612
  [assetMatrix, selectedAssetSymbol, fromChain?.chainKey]
2596
2613
  );
2597
- const dstTokenOnTo = react.useMemo(
2614
+ const dstTokenOnTo = React.useMemo(
2598
2615
  () => resolveTokenOnChainFromMatrix$1(
2599
2616
  assetMatrix,
2600
2617
  selectedAssetSymbol,
@@ -2602,14 +2619,14 @@ function useBridgeQuote() {
2602
2619
  ),
2603
2620
  [assetMatrix, selectedAssetSymbol, toChain?.chainKey]
2604
2621
  );
2605
- const [loading, setLoading] = react.useState(false);
2606
- react.useEffect(() => {
2622
+ const [loading, setLoading] = React.useState(false);
2623
+ React.useEffect(() => {
2607
2624
  if (!input2 || input2 === "") {
2608
2625
  setLoading(false);
2609
2626
  resetWithIdle();
2610
2627
  }
2611
2628
  }, [input2, resetWithIdle]);
2612
- react.useEffect(() => {
2629
+ React.useEffect(() => {
2613
2630
  const resetUi = (withError) => {
2614
2631
  setLoading(false);
2615
2632
  {
@@ -2741,7 +2758,7 @@ const useChainDerivations = () => {
2741
2758
  setIsLoadingToChains,
2742
2759
  isUrlInitialized
2743
2760
  } = useChainsStore();
2744
- const supportedFrom = react.useMemo(() => {
2761
+ const supportedFrom = React.useMemo(() => {
2745
2762
  if (typeof selectedAssetSymbol !== "string" || !assetMatrix || !chains?.length)
2746
2763
  return [];
2747
2764
  const byChain = assetMatrix[selectedAssetSymbol.toUpperCase()];
@@ -2749,7 +2766,7 @@ const useChainDerivations = () => {
2749
2766
  const result = chains.filter((c2) => keys2.has(c2.chainKey) && isAllowedFromChain(c2.chainKey));
2750
2767
  return result;
2751
2768
  }, [selectedAssetSymbol, assetMatrix, chains]);
2752
- react.useEffect(() => {
2769
+ React.useEffect(() => {
2753
2770
  setAllowedFromChains(supportedFrom);
2754
2771
  if (!isUrlInitialized) {
2755
2772
  return;
@@ -2780,7 +2797,7 @@ const useChainDerivations = () => {
2780
2797
  setAllowedToChains,
2781
2798
  isUrlInitialized
2782
2799
  ]);
2783
- react.useEffect(() => {
2800
+ React.useEffect(() => {
2784
2801
  let ignore = false;
2785
2802
  const run = async () => {
2786
2803
  if (!selectedAssetSymbol || !fromChain?.chainKey || !chains?.length) {
@@ -2860,7 +2877,7 @@ function isBalanceDebugEnabled() {
2860
2877
  function useBalances(chainKey, address) {
2861
2878
  const { chainRegistry } = useChainStrategies();
2862
2879
  const { assetMatrix } = useTokensStore();
2863
- const tokensOnChain = react.useMemo(() => {
2880
+ const tokensOnChain = React.useMemo(() => {
2864
2881
  if (!chainKey || !assetMatrix) return [];
2865
2882
  const tokensList = [];
2866
2883
  for (const [, byChain] of Object.entries(assetMatrix)) {
@@ -2906,7 +2923,7 @@ function useBalances(chainKey, address) {
2906
2923
  refetchInterval: 6e4,
2907
2924
  refetchIntervalInBackground: false
2908
2925
  });
2909
- const balanceBySymbol = react.useMemo(() => {
2926
+ const balanceBySymbol = React.useMemo(() => {
2910
2927
  const map = /* @__PURE__ */ new Map();
2911
2928
  const data = query.data;
2912
2929
  if (data) {
@@ -2916,12 +2933,12 @@ function useBalances(chainKey, address) {
2916
2933
  }
2917
2934
  return map;
2918
2935
  }, [query.data]);
2919
- const getBalance = react.useCallback(
2936
+ const getBalance = React.useCallback(
2920
2937
  (symbol) => balanceBySymbol.get(normalizeTickerSymbol$1(symbol)) ?? 0,
2921
2938
  [balanceBySymbol]
2922
2939
  );
2923
2940
  const isLoading = query.isLoading || query.isFetching;
2924
- const balances = react.useMemo(() => query.data || {}, [query.data]);
2941
+ const balances = React.useMemo(() => query.data || {}, [query.data]);
2925
2942
  return {
2926
2943
  balances,
2927
2944
  getBalance,
@@ -2944,21 +2961,21 @@ function useSwapModel() {
2944
2961
  );
2945
2962
  const { loading } = useBridgeQuote();
2946
2963
  const { inputAmount, setInputAmount, resetWithIdle } = useBridgeQuoteStore();
2947
- const fromBalance = react.useMemo(
2964
+ const fromBalance = React.useMemo(
2948
2965
  () => ({
2949
2966
  balance: srcBalances.getBalance(tokensStore.selectedAssetSymbol || ""),
2950
2967
  isLoading: srcBalances.isLoading
2951
2968
  }),
2952
2969
  [srcBalances, tokensStore.selectedAssetSymbol]
2953
2970
  );
2954
- const receiveBalance = react.useMemo(
2971
+ const receiveBalance = React.useMemo(
2955
2972
  () => ({
2956
2973
  balance: dstBalances.getBalance(tokensStore.selectedAssetSymbol || ""),
2957
2974
  isLoading: dstBalances.isLoading
2958
2975
  }),
2959
2976
  [dstBalances, tokensStore.selectedAssetSymbol]
2960
2977
  );
2961
- const state2 = react.useMemo(
2978
+ const state2 = React.useMemo(
2962
2979
  () => ({
2963
2980
  fromChain: chainsStore.fromChain,
2964
2981
  toChain: chainsStore.toChain,
@@ -2974,7 +2991,7 @@ function useSwapModel() {
2974
2991
  setFromChain: chainsStore.setFromChain,
2975
2992
  setToChain: chainsStore.setToChain,
2976
2993
  setAmount: setInputAmount,
2977
- swapSides: react.useCallback(() => {
2994
+ swapSides: React.useCallback(() => {
2978
2995
  const fromChain = chainsStore.fromChain;
2979
2996
  const toChain = chainsStore.toChain;
2980
2997
  const sym = (tokensStore.selectedAssetSymbol ?? "").toUpperCase();
@@ -3025,11 +3042,54 @@ const InfoIcon = (props) => {
3025
3042
  }
3026
3043
  );
3027
3044
  };
3045
+ const MOBILE_BREAKPOINT = 768;
3046
+ function useIsMobile() {
3047
+ const [isMobile2, setIsMobile] = React__namespace.useState(
3048
+ void 0
3049
+ );
3050
+ React__namespace.useEffect(() => {
3051
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
3052
+ const onChange = () => {
3053
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3054
+ };
3055
+ mql.addEventListener("change", onChange);
3056
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
3057
+ return () => mql.removeEventListener("change", onChange);
3058
+ }, []);
3059
+ return !!isMobile2;
3060
+ }
3028
3061
  const Tip = (props) => {
3029
3062
  const { children, text } = props;
3030
- return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { children: [
3031
- /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipTrigger, { className: "w-4 h-4 rounded-full bg-muted text-muted-foreground", children }),
3032
- /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { children: text })
3063
+ const [open, setOpen] = React.useState(false);
3064
+ const isMobile2 = useIsMobile();
3065
+ const tooltipRef = React.useRef(null);
3066
+ const handleToggle = () => {
3067
+ setOpen((prev) => !prev);
3068
+ };
3069
+ React.useEffect(() => {
3070
+ const handleClickOutside = (event) => {
3071
+ if (tooltipRef.current && !tooltipRef.current.contains(event.target)) {
3072
+ setOpen(false);
3073
+ }
3074
+ };
3075
+ document.addEventListener("mousedown", handleClickOutside);
3076
+ return () => {
3077
+ document.removeEventListener("mousedown", handleClickOutside);
3078
+ };
3079
+ }, []);
3080
+ return /* @__PURE__ */ jsxRuntime.jsxs(tooltip.Tooltip, { open: isMobile2 ? open : void 0, children: [
3081
+ /* @__PURE__ */ jsxRuntime.jsx(
3082
+ tooltip.TooltipTrigger,
3083
+ {
3084
+ onClick: (e2) => {
3085
+ e2.preventDefault();
3086
+ handleToggle();
3087
+ },
3088
+ className: "w-4 h-4 rounded-full bg-muted text-muted-foreground",
3089
+ children
3090
+ }
3091
+ ),
3092
+ /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipContent, { ref: tooltipRef, children: text })
3033
3093
  ] });
3034
3094
  };
3035
3095
  const BASE_URL = "https://icons-ckg.pages.dev/stargate-light/tokens";
@@ -3046,7 +3106,7 @@ function useFeeBreakdown() {
3046
3106
  const { quote } = useBridgeQuoteStore();
3047
3107
  const { tokens, allTokens, selectedAssetSymbol, assetMatrix } = useTokensStore();
3048
3108
  const { fromChain, toChain, chains } = useChainsStore();
3049
- return react.useMemo(() => {
3109
+ return React.useMemo(() => {
3050
3110
  const srcToken = resolveTokenOnChainFromMatrix$1(
3051
3111
  assetMatrix,
3052
3112
  selectedAssetSymbol,
@@ -3073,7 +3133,7 @@ function useBridgeExternalData(options) {
3073
3133
  const inputAmount = useBridgeQuoteStore((state2) => state2.inputAmount);
3074
3134
  const quote = useBridgeQuoteStore((state2) => state2.quote);
3075
3135
  const slippageBps = useSettingsStore((state2) => state2.slippageBps);
3076
- const data = react.useMemo(
3136
+ const data = React.useMemo(
3077
3137
  () => buildBridgeExternalData({
3078
3138
  amount: inputAmount,
3079
3139
  selectedAssetSymbol,
@@ -3098,8 +3158,8 @@ function useBridgeExternalData(options) {
3098
3158
  slippageBps
3099
3159
  ]
3100
3160
  );
3101
- const lastSerializedRef = react.useRef(void 0);
3102
- react.useEffect(() => {
3161
+ const lastSerializedRef = React.useRef(void 0);
3162
+ React.useEffect(() => {
3103
3163
  const callback = options?.onDataUpdate;
3104
3164
  if (!callback) return;
3105
3165
  const serialized = serializeBridgeDataForCache(data);
@@ -3683,7 +3743,7 @@ function useGasEstimate(amountNum) {
3683
3743
  const quoteFees = quote?.fees;
3684
3744
  const quoteSrcChainKey = quote?.srcChainKey;
3685
3745
  const nativeBalanceValue = nativeCurrencySymbol ? Number(balances[nativeCurrencySymbol.toUpperCase()]?.balance ?? 0) : 0;
3686
- const result = react.useMemo(() => {
3746
+ const result = React.useMemo(() => {
3687
3747
  if (!chainKey || !nativeCurrencySymbol) {
3688
3748
  return {
3689
3749
  nativeSym: "",
@@ -3761,7 +3821,7 @@ function useBridgeTransaction() {
3761
3821
  const { chains } = useChainsStore();
3762
3822
  const txStore = useTransactionStore();
3763
3823
  const gas = useGasEstimate();
3764
- const srcToken = react.useMemo(
3824
+ const srcToken = React.useMemo(
3765
3825
  () => resolveTokenOnChainFromMatrix$1(
3766
3826
  assetMatrix,
3767
3827
  selectedAssetSymbol,
@@ -3769,7 +3829,7 @@ function useBridgeTransaction() {
3769
3829
  ),
3770
3830
  [assetMatrix, selectedAssetSymbol, quote?.srcChainKey]
3771
3831
  );
3772
- const dstToken = react.useMemo(
3832
+ const dstToken = React.useMemo(
3773
3833
  () => resolveTokenOnChainFromMatrix$1(
3774
3834
  assetMatrix,
3775
3835
  selectedAssetSymbol,
@@ -3983,7 +4043,7 @@ function useBalanceCheck(amountNum, gas) {
3983
4043
  const { selectedAssetSymbol } = useTokensStore();
3984
4044
  const { srcAddress } = useAddresses();
3985
4045
  const { getBalance } = useBalances(fromChain?.chainKey, srcAddress);
3986
- const validationResult = react.useMemo(() => {
4046
+ const validationResult = React.useMemo(() => {
3987
4047
  if (!fromChain || !gas.balancesKnown) {
3988
4048
  return {
3989
4049
  availableBalance: 0,
@@ -4026,7 +4086,7 @@ function useAmountLimits(amountNum) {
4026
4086
  const { selectedAssetSymbol, tokens } = useTokensStore();
4027
4087
  const { fromChain } = useChainsStore();
4028
4088
  const { quote } = useBridgeQuoteStore();
4029
- const limitsResult = react.useMemo(() => {
4089
+ const limitsResult = React.useMemo(() => {
4030
4090
  const tokenSymbol = selectedAssetSymbol;
4031
4091
  if (quote?.srcAmountMax && fromChain?.chainKey && selectedAssetSymbol) {
4032
4092
  const sourceToken = tokens?.find(
@@ -4064,7 +4124,7 @@ function useSilentValidations(amountString) {
4064
4124
  const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();
4065
4125
  const { fromChain, toChain } = useChainsStore();
4066
4126
  const { quote, status, error } = useBridgeQuoteStore();
4067
- const validationResult = react.useMemo(() => {
4127
+ const validationResult = React.useMemo(() => {
4068
4128
  const hasTooManyDecimals = (() => {
4069
4129
  if (!amountString || !fromChain?.chainKey || !selectedAssetSymbol)
4070
4130
  return false;
@@ -4119,7 +4179,7 @@ function useSilentValidations(amountString) {
4119
4179
  }
4120
4180
  function useTelegramRestriction() {
4121
4181
  const { fromChain, toChain } = useChainsStore();
4122
- const restriction = react.useMemo(() => {
4182
+ const restriction = React.useMemo(() => {
4123
4183
  const isTelegramEnv = typeof window !== "undefined" && /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
4124
4184
  typeof window.TelegramWebviewProxy?.postEvent === "function";
4125
4185
  if (!isTelegramEnv) {
@@ -4163,7 +4223,7 @@ const MainButton = ({
4163
4223
  const missingDst = isCustomAddressEnabled ? !dstAddressValid : !dstConnectedOk || !dstAddressValid;
4164
4224
  const requiresCustomAddress = isCustomAddressEnabled && !dstAddressValid;
4165
4225
  const canTransfer = !missingSrc && !missingDst && amountNum > 0 && !!srcChainKey && !!dstChainKey;
4166
- const label = react.useMemo(() => {
4226
+ const label = React.useMemo(() => {
4167
4227
  switch (true) {
4168
4228
  case isTelegramRestricted:
4169
4229
  return t2("telegram.openWebVersion");
@@ -4275,7 +4335,7 @@ const WalletModalButton = (props) => {
4275
4335
  const { icon: IconComponent, name, onClose } = props;
4276
4336
  const { chainRegistry } = useChainStrategies();
4277
4337
  const { connect, isPending } = wagmi.useConnect();
4278
- const [isConnecting, setIsConnecting] = react.useState(false);
4338
+ const [isConnecting, setIsConnecting] = React.useState(false);
4279
4339
  if (props.variant === "connected") {
4280
4340
  const { address, onDisconnect } = props;
4281
4341
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -4729,11 +4789,11 @@ const SuccessStep = ({
4729
4789
  );
4730
4790
  };
4731
4791
  const useCountdown = (initialSeconds) => {
4732
- const [time2, setTime] = react.useState(initialSeconds);
4792
+ const [time2, setTime] = React.useState(initialSeconds);
4733
4793
  const minutes = Math.floor(time2 / 60);
4734
4794
  const seconds = time2 % 60;
4735
4795
  const formattedTime = `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
4736
- react.useEffect(() => {
4796
+ React.useEffect(() => {
4737
4797
  if (!time2) return;
4738
4798
  const intervalId = setInterval(() => {
4739
4799
  setTime(time2 - 1);
@@ -4811,7 +4871,7 @@ const useTokens = () => {
4811
4871
  // 1 час хранения в кэше
4812
4872
  refetchOnWindowFocus: false
4813
4873
  });
4814
- react.useEffect(() => {
4874
+ React.useEffect(() => {
4815
4875
  if (query.isSuccess && query.data?.length) {
4816
4876
  setAllTokens(query.data);
4817
4877
  const bridgeableTokens = query.data.filter(
@@ -4830,7 +4890,7 @@ const useTokens = () => {
4830
4890
  setSelectedToken,
4831
4891
  setSelectedAssetSymbol
4832
4892
  ]);
4833
- react.useEffect(() => {
4893
+ React.useEffect(() => {
4834
4894
  if (query.isError && query.error) {
4835
4895
  console.error(query.error.name, query.error.message);
4836
4896
  }
@@ -4850,7 +4910,7 @@ const useChains = () => {
4850
4910
  // 1 час хранения в кэше
4851
4911
  refetchOnWindowFocus: false
4852
4912
  });
4853
- react.useEffect(() => {
4913
+ React.useEffect(() => {
4854
4914
  if (query.isSuccess && query.data?.length) {
4855
4915
  setChains(query.data);
4856
4916
  if (!fromChain) {
@@ -4858,7 +4918,7 @@ const useChains = () => {
4858
4918
  }
4859
4919
  }
4860
4920
  }, [query.isSuccess, query.data]);
4861
- react.useEffect(() => {
4921
+ React.useEffect(() => {
4862
4922
  if (query.isError && query.error) {
4863
4923
  console.error(query.error.name, query.error.message);
4864
4924
  }
@@ -6604,7 +6664,30 @@ const EVM_CHAIN_KEY_TO_ID = {
6604
6664
  optimism: 10,
6605
6665
  polygon: 137,
6606
6666
  base: 8453,
6607
- bsc: 56
6667
+ bsc: 56,
6668
+ manta: 169,
6669
+ opbnb: 204,
6670
+ conflux: 1030,
6671
+ mantle: 5e3,
6672
+ plasma: 9745,
6673
+ monad: 143,
6674
+ celo: 42220,
6675
+ linea: 59144,
6676
+ blast: 81457,
6677
+ scroll: 534352,
6678
+ cronosevm: 25,
6679
+ gnosis: 100,
6680
+ sonic: 146,
6681
+ fantom: 250,
6682
+ zksync: 324,
6683
+ metis: 1088,
6684
+ zkevm: 1101,
6685
+ moonbeam: 1284,
6686
+ moonriver: 1285,
6687
+ kava: 2222,
6688
+ klaytn: 8217,
6689
+ avalanche: 43114,
6690
+ aurora: 1313161554
6608
6691
  };
6609
6692
  function ChainStrategyProvider({
6610
6693
  children,
@@ -6616,7 +6699,7 @@ function ChainStrategyProvider({
6616
6699
  tronApiKey
6617
6700
  }) {
6618
6701
  const { chains } = useChainsStore();
6619
- const chainKeyToId = react.useMemo(() => {
6702
+ const chainKeyToId = React.useMemo(() => {
6620
6703
  const map = {
6621
6704
  ...EVM_CHAIN_KEY_TO_ID
6622
6705
  };
@@ -6629,7 +6712,7 @@ function ChainStrategyProvider({
6629
6712
  }
6630
6713
  return map;
6631
6714
  }, [chains]);
6632
- const evmStrategy = react.useMemo(
6715
+ const evmStrategy = React.useMemo(
6633
6716
  () => new EvmChainStrategy({
6634
6717
  evmAddress: evmWallet.address,
6635
6718
  evmIsConnected: evmWallet.isConnected,
@@ -6649,7 +6732,7 @@ function ChainStrategyProvider({
6649
6732
  chainKeyToId
6650
6733
  ]
6651
6734
  );
6652
- const tonStrategy = react.useMemo(
6735
+ const tonStrategy = React.useMemo(
6653
6736
  () => new TonChainStrategy({
6654
6737
  tonConnectUI: tonWallet.tonConnectUI,
6655
6738
  tonAddress: tonWallet.address,
@@ -6658,7 +6741,7 @@ function ChainStrategyProvider({
6658
6741
  }),
6659
6742
  [tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]
6660
6743
  );
6661
- const tronStrategy = react.useMemo(
6744
+ const tronStrategy = React.useMemo(
6662
6745
  () => new TronChainStrategy({
6663
6746
  tronLink: {
6664
6747
  address: tronWallet.tronLink.address,
@@ -6688,11 +6771,11 @@ function ChainStrategyProvider({
6688
6771
  tronApiKey
6689
6772
  ]
6690
6773
  );
6691
- const chainRegistry = react.useMemo(
6774
+ const chainRegistry = React.useMemo(
6692
6775
  () => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),
6693
6776
  [evmStrategy, tonStrategy, tronStrategy]
6694
6777
  );
6695
- const value = react.useMemo(
6778
+ const value = React.useMemo(
6696
6779
  () => ({
6697
6780
  chainRegistry
6698
6781
  }),
@@ -6910,10 +6993,10 @@ const TokenSelectModal = ({
6910
6993
  onChangeAsset
6911
6994
  }) => {
6912
6995
  const { t: t2 } = useBridgeTranslation();
6913
- const [query, setQuery] = react.useState("");
6914
- const [tab, setTab] = react.useState("my");
6915
- const [manualTabSwitch, setManualTabSwitch] = react.useState(false);
6916
- const [listHeight, setListHeight] = react.useState(400);
6996
+ const [query, setQuery] = React.useState("");
6997
+ const [tab, setTab] = React.useState("my");
6998
+ const [manualTabSwitch, setManualTabSwitch] = React.useState(false);
6999
+ const [listHeight, setListHeight] = React.useState(400);
6917
7000
  const { srcAddress } = useAddresses();
6918
7001
  const { fromChain, toChain, setFromChain, chains } = useChainsStore();
6919
7002
  const { assetMatrix, selectedAssetSymbol } = useTokensStore();
@@ -6922,20 +7005,20 @@ const TokenSelectModal = ({
6922
7005
  fromChain?.chainKey,
6923
7006
  srcAddress
6924
7007
  );
6925
- const hasSourceWallet = react.useCallback(() => {
7008
+ const hasSourceWallet = React.useCallback(() => {
6926
7009
  return hasWalletForChain(fromChain?.chainKey);
6927
7010
  }, [hasWalletForChain, fromChain?.chainKey]);
6928
- react.useEffect(() => {
7011
+ React.useEffect(() => {
6929
7012
  if (!hasSourceWallet()) setTab("all");
6930
7013
  }, [hasSourceWallet]);
6931
- const getTokenUsdValue = react.useCallback(
7014
+ const getTokenUsdValue = React.useCallback(
6932
7015
  (symbol, price) => {
6933
7016
  const bal = getBalance(symbol);
6934
7017
  return bal > 0 && price ? bal * price : 0;
6935
7018
  },
6936
7019
  [getBalance]
6937
7020
  );
6938
- const isTokenAvailableOnChain = react.useCallback(
7021
+ const isTokenAvailableOnChain = React.useCallback(
6939
7022
  (symbol, chainKey) => {
6940
7023
  if (!assetMatrix || !chainKey) return false;
6941
7024
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6943,7 +7026,7 @@ const TokenSelectModal = ({
6943
7026
  },
6944
7027
  [assetMatrix]
6945
7028
  );
6946
- const findFirstAvailableChain = react.useCallback(
7029
+ const findFirstAvailableChain = React.useCallback(
6947
7030
  (symbol) => {
6948
7031
  if (!assetMatrix || !chains) return void 0;
6949
7032
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6956,7 +7039,7 @@ const TokenSelectModal = ({
6956
7039
  },
6957
7040
  [assetMatrix, chains]
6958
7041
  );
6959
- const groupedTokens = react.useMemo(() => {
7042
+ const groupedTokens = React.useMemo(() => {
6960
7043
  const q3 = query.trim().toLowerCase();
6961
7044
  const filtered = q3 ? items.filter(
6962
7045
  (a2) => a2.name.toLowerCase().includes(q3) || a2.symbol.toLowerCase().includes(q3)
@@ -7006,33 +7089,33 @@ const TokenSelectModal = ({
7006
7089
  ]);
7007
7090
  const myTokens = groupedTokens.withBalance;
7008
7091
  const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
7009
- react.useEffect(() => {
7092
+ React.useEffect(() => {
7010
7093
  if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
7011
7094
  setTab("all");
7012
7095
  }
7013
7096
  }, [query, tab, myTokens.length, manualTabSwitch]);
7014
- react.useEffect(() => {
7097
+ React.useEffect(() => {
7015
7098
  if (query.trim() !== "" && tab === "all" && myTokens.length > 0 && !manualTabSwitch) {
7016
7099
  setTab("my");
7017
7100
  }
7018
7101
  }, [query, tab, myTokens.length, manualTabSwitch]);
7019
- react.useEffect(() => {
7102
+ React.useEffect(() => {
7020
7103
  setManualTabSwitch(false);
7021
7104
  }, [query]);
7022
- const resetState = react.useCallback(() => {
7105
+ const resetState = React.useCallback(() => {
7023
7106
  setQuery("");
7024
7107
  setTab("my");
7025
7108
  setManualTabSwitch(false);
7026
7109
  }, []);
7027
- const handleClose = react.useCallback(() => {
7110
+ const handleClose = React.useCallback(() => {
7028
7111
  resetState();
7029
7112
  onClose();
7030
7113
  }, [onClose, resetState]);
7031
- react.useEffect(() => {
7114
+ React.useEffect(() => {
7032
7115
  if (!isOpen) resetState();
7033
7116
  }, [isOpen, resetState]);
7034
- react.useEffect(() => () => resetState(), [resetState]);
7035
- const onPick = react.useCallback(
7117
+ React.useEffect(() => () => resetState(), [resetState]);
7118
+ const onPick = React.useCallback(
7036
7119
  (sym, willChangeSrcChain = false, willChangeDstChain = false, willChangeBothChains = false) => {
7037
7120
  onChangeAsset(sym);
7038
7121
  if (willChangeBothChains) {
@@ -7046,7 +7129,7 @@ const TokenSelectModal = ({
7046
7129
  },
7047
7130
  [findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
7048
7131
  );
7049
- const tokensToRender = react.useMemo(() => {
7132
+ const tokensToRender = React.useMemo(() => {
7050
7133
  if (effectiveTab === "my") {
7051
7134
  return myTokens.map((token) => ({
7052
7135
  token,
@@ -7065,21 +7148,21 @@ const TokenSelectModal = ({
7065
7148
  ];
7066
7149
  return mainTokens;
7067
7150
  }, [effectiveTab, myTokens, groupedTokens]);
7068
- const willChangeDstTokens = react.useMemo(
7151
+ const willChangeDstTokens = React.useMemo(
7069
7152
  () => groupedTokens.willChangeDstChain.map((token) => ({
7070
7153
  token,
7071
7154
  willChangeDst: true
7072
7155
  })),
7073
7156
  [groupedTokens.willChangeDstChain]
7074
7157
  );
7075
- const willChangeSrcTokens = react.useMemo(
7158
+ const willChangeSrcTokens = React.useMemo(
7076
7159
  () => groupedTokens.willChangeSrcChain.map((token) => ({
7077
7160
  token,
7078
7161
  willChangeSrc: true
7079
7162
  })),
7080
7163
  [groupedTokens.willChangeSrcChain]
7081
7164
  );
7082
- const willChangeBothTokens = react.useMemo(
7165
+ const willChangeBothTokens = React.useMemo(
7083
7166
  () => groupedTokens.willChangeBothChains.map((token) => ({
7084
7167
  token,
7085
7168
  willChangeBoth: true
@@ -7087,7 +7170,7 @@ const TokenSelectModal = ({
7087
7170
  [groupedTokens.willChangeBothChains]
7088
7171
  );
7089
7172
  const hasNoResults = tokensToRender.length === 0 && willChangeDstTokens.length === 0 && willChangeSrcTokens.length === 0 && willChangeBothTokens.length === 0;
7090
- const virtualItems = react.useMemo(() => {
7173
+ const virtualItems = React.useMemo(() => {
7091
7174
  const items2 = tokensToRender.map(
7092
7175
  ({ token, willChangeSrc }) => ({
7093
7176
  type: "token",
@@ -7132,7 +7215,7 @@ const TokenSelectModal = ({
7132
7215
  }
7133
7216
  return items2;
7134
7217
  }, [effectiveTab, tokensToRender, t2, willChangeDstTokens, willChangeSrcTokens, willChangeBothTokens]);
7135
- react.useLayoutEffect(() => {
7218
+ React.useLayoutEffect(() => {
7136
7219
  const updateHeight = () => {
7137
7220
  const container2 = document.getElementById("token-select-list");
7138
7221
  if (!container2) return;
@@ -7155,7 +7238,7 @@ const TokenSelectModal = ({
7155
7238
  resizeObserver?.disconnect();
7156
7239
  };
7157
7240
  }, [isOpen, hasSourceWallet]);
7158
- const VirtualRow = react.useCallback(
7241
+ const VirtualRow = React.useCallback(
7159
7242
  ({ index, style }) => {
7160
7243
  const item = virtualItems[index];
7161
7244
  if (!item) return null;
@@ -7199,7 +7282,7 @@ const TokenSelectModal = ({
7199
7282
  virtualItems
7200
7283
  ]
7201
7284
  );
7202
- const itemKey = react.useCallback(
7285
+ const itemKey = React.useCallback(
7203
7286
  (index) => {
7204
7287
  const item = virtualItems[index];
7205
7288
  if (!item) return index;
@@ -7276,8 +7359,8 @@ function useBridgeRefresh() {
7276
7359
  const { fromChain, toChain } = useChainsStore();
7277
7360
  const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();
7278
7361
  const { hasAnyWallet } = useConnectedWalletsStore();
7279
- const [spinning, setSpinning] = react.useState(false);
7280
- const refresh = react.useCallback(async () => {
7362
+ const [spinning, setSpinning] = React.useState(false);
7363
+ const refresh = React.useCallback(async () => {
7281
7364
  setSpinning(true);
7282
7365
  try {
7283
7366
  setQLoading();
@@ -7330,8 +7413,8 @@ function useBridgeRefresh() {
7330
7413
  }
7331
7414
  const RefreshButton = () => {
7332
7415
  const { refresh, spinning } = useBridgeRefresh();
7333
- const [turns, setTurns] = react.useState(0);
7334
- const handleRefresh = react.useCallback(() => {
7416
+ const [turns, setTurns] = React.useState(0);
7417
+ const handleRefresh = React.useCallback(() => {
7335
7418
  setTurns((t2) => t2 + 1);
7336
7419
  refresh();
7337
7420
  }, [refresh]);
@@ -7360,7 +7443,7 @@ const SelectTokenButton = ({
7360
7443
  token
7361
7444
  }) => {
7362
7445
  const { t: t2 } = useBridgeTranslation();
7363
- const label = react.useMemo(() => {
7446
+ const label = React.useMemo(() => {
7364
7447
  return token?.symbol ?? t2("bridge.selectToken");
7365
7448
  }, [token, t2]);
7366
7449
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -7398,8 +7481,8 @@ const Toolbar = () => {
7398
7481
  onOpen: onOpenSettings
7399
7482
  } = useModal();
7400
7483
  const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
7401
- const assets = react.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7402
- const current = react.useMemo(() => {
7484
+ const assets = React.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7485
+ const current = React.useMemo(() => {
7403
7486
  if (!assets.length) return void 0;
7404
7487
  if (!selectedAssetSymbol) return assets[0];
7405
7488
  const sum = selectedAssetSymbol.toUpperCase();
@@ -7445,8 +7528,8 @@ const useAutoSelectNetwork = ({
7445
7528
  }) => {
7446
7529
  const { hasAnyWallet } = useConnectedWalletsStore();
7447
7530
  const { chains, setFromChain } = useChainsStore();
7448
- const previousHadWallet = react.useRef(hasAnyWallet());
7449
- react.useEffect(() => {
7531
+ const previousHadWallet = React.useRef(hasAnyWallet());
7532
+ React.useEffect(() => {
7450
7533
  const currentHasWallet = hasAnyWallet();
7451
7534
  const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;
7452
7535
  if (isFirstWalletConnection && chains?.length) {
@@ -26087,7 +26170,7 @@ class WalletConnectModal {
26087
26170
  }
26088
26171
  async initUi() {
26089
26172
  if (typeof window !== "undefined") {
26090
- await Promise.resolve().then(() => require("./index-x-S2vNi4.cjs"));
26173
+ await Promise.resolve().then(() => require("./index-CWgNX6rD.cjs"));
26091
26174
  const modal = document.createElement("wcm-modal");
26092
26175
  document.body.insertAdjacentElement("beforeend", modal);
26093
26176
  OptionsCtrl.setIsUiLoaded(true);
@@ -26193,16 +26276,16 @@ function isSessionExpiredError(error) {
26193
26276
  function useTronWalletConnect(projectId) {
26194
26277
  const { address, isConnected, isConnecting } = useTronWalletConnectStore();
26195
26278
  const { setAddress, setActions, reset } = useTronWalletConnectStore();
26196
- const providerRef = react.useRef(null);
26197
- const modalRef = react.useRef(null);
26198
- const abortControllerRef = react.useRef(null);
26279
+ const providerRef = React.useRef(null);
26280
+ const modalRef = React.useRef(null);
26281
+ const abortControllerRef = React.useRef(null);
26199
26282
  const { onClose: closeWalletSelectModal } = useWalletSelectModal();
26200
26283
  const appliedTheme = useThemeStore((state2) => state2.appliedTheme);
26201
- const closeWalletSelectModalRef = react.useRef(closeWalletSelectModal);
26284
+ const closeWalletSelectModalRef = React.useRef(closeWalletSelectModal);
26202
26285
  closeWalletSelectModalRef.current = closeWalletSelectModal;
26203
- const appliedThemeRef = react.useRef(appliedTheme);
26286
+ const appliedThemeRef = React.useRef(appliedTheme);
26204
26287
  appliedThemeRef.current = appliedTheme;
26205
- react.useEffect(() => {
26288
+ React.useEffect(() => {
26206
26289
  if (!projectId || providerRef.current) return;
26207
26290
  const initProvider = async () => {
26208
26291
  try {
@@ -26275,7 +26358,7 @@ function useTronWalletConnect(projectId) {
26275
26358
  }
26276
26359
  };
26277
26360
  }, [projectId, setAddress]);
26278
- react.useEffect(() => {
26361
+ React.useEffect(() => {
26279
26362
  if (!projectId || !modalRef.current) return;
26280
26363
  const modal = new WalletConnectModal({
26281
26364
  projectId,
@@ -26287,7 +26370,7 @@ function useTronWalletConnect(projectId) {
26287
26370
  });
26288
26371
  modalRef.current = modal;
26289
26372
  }, [appliedTheme, projectId]);
26290
- const connect = react.useCallback(async () => {
26373
+ const connect = React.useCallback(async () => {
26291
26374
  if (!providerRef.current) {
26292
26375
  throw new Error(
26293
26376
  "WalletConnect not initialized. Please provide a valid project ID."
@@ -26355,7 +26438,7 @@ function useTronWalletConnect(projectId) {
26355
26438
  abortControllerRef.current = null;
26356
26439
  }
26357
26440
  }, [setAddress]);
26358
- const cancelConnection = react.useCallback(() => {
26441
+ const cancelConnection = React.useCallback(() => {
26359
26442
  if (abortControllerRef.current) {
26360
26443
  abortControllerRef.current.abort();
26361
26444
  console.log("TRON WalletConnect connection cancelled");
@@ -26364,7 +26447,7 @@ function useTronWalletConnect(projectId) {
26364
26447
  modalRef.current.closeModal();
26365
26448
  }
26366
26449
  }, []);
26367
- const disconnect = react.useCallback(async () => {
26450
+ const disconnect = React.useCallback(async () => {
26368
26451
  if (!providerRef.current) return;
26369
26452
  try {
26370
26453
  await providerRef.current.disconnect();
@@ -26375,7 +26458,7 @@ function useTronWalletConnect(projectId) {
26375
26458
  throw error;
26376
26459
  }
26377
26460
  }, [reset]);
26378
- const signTransaction = react.useCallback(
26461
+ const signTransaction = React.useCallback(
26379
26462
  async (transaction2) => {
26380
26463
  if (!providerRef.current) {
26381
26464
  throw new Error("WalletConnect not initialized");
@@ -26442,7 +26525,7 @@ function useTronWalletConnect(projectId) {
26442
26525
  },
26443
26526
  [address, setAddress]
26444
26527
  );
26445
- const onAddressCorrected = react.useCallback(
26528
+ const onAddressCorrected = React.useCallback(
26446
26529
  (correctedAddress) => {
26447
26530
  console.log(
26448
26531
  "TRON WalletConnect address corrected:",
@@ -26454,7 +26537,7 @@ function useTronWalletConnect(projectId) {
26454
26537
  },
26455
26538
  [address, setAddress]
26456
26539
  );
26457
- react.useEffect(() => {
26540
+ React.useEffect(() => {
26458
26541
  setActions({
26459
26542
  connect,
26460
26543
  disconnect,
@@ -26512,10 +26595,10 @@ function useUrlSync(options) {
26512
26595
  const { setInputAmount } = useBridgeQuoteStore();
26513
26596
  const internalData = useBridgeExternalData();
26514
26597
  const currentUrlParams = internalData.urlParams;
26515
- const [hasInitialized, setHasInitialized] = react.useState(false);
26516
- const isSyncingRef = react.useRef(false);
26517
- const lastSyncedParamsRef = react.useRef({});
26518
- const validateParams = react.useCallback(
26598
+ const [hasInitialized, setHasInitialized] = React.useState(false);
26599
+ const isSyncingRef = React.useRef(false);
26600
+ const lastSyncedParamsRef = React.useRef({});
26601
+ const validateParams = React.useCallback(
26519
26602
  (urlParams) => {
26520
26603
  const result = {};
26521
26604
  if (!chains?.length || !tokens?.length || !assetMatrix) {
@@ -26568,7 +26651,7 @@ function useUrlSync(options) {
26568
26651
  },
26569
26652
  [chains, tokens, assetMatrix]
26570
26653
  );
26571
- const syncStateToUrl = react.useCallback(
26654
+ const syncStateToUrl = React.useCallback(
26572
26655
  (includeAmount = false) => {
26573
26656
  if (!enabled || isSyncingRef.current || !hasInitialized) {
26574
26657
  return;
@@ -26590,11 +26673,11 @@ function useUrlSync(options) {
26590
26673
  },
26591
26674
  [enabled, hasInitialized, currentUrlParams, onUrlParamsChange]
26592
26675
  );
26593
- const handleAmountBlur = react.useCallback(() => {
26676
+ const handleAmountBlur = React.useCallback(() => {
26594
26677
  if (!enabled || !hasInitialized) return;
26595
26678
  syncStateToUrl(true);
26596
26679
  }, [enabled, hasInitialized, syncStateToUrl]);
26597
- react.useEffect(() => {
26680
+ React.useEffect(() => {
26598
26681
  if (!enabled || !chains?.length || !tokens?.length) {
26599
26682
  return;
26600
26683
  }
@@ -26640,7 +26723,7 @@ function useUrlSync(options) {
26640
26723
  setInputAmount,
26641
26724
  setIsUrlInitialized
26642
26725
  ]);
26643
- react.useEffect(() => {
26726
+ React.useEffect(() => {
26644
26727
  if (!enabled || !hasInitialized) return;
26645
26728
  syncStateToUrl(false);
26646
26729
  }, [
@@ -26664,7 +26747,7 @@ const EvaaBridgeWithProviders = (props) => {
26664
26747
  const { disconnect: evmDisconnect } = wagmi.useDisconnect();
26665
26748
  const { data: walletClient } = wagmi.useWalletClient();
26666
26749
  const publicClient = wagmi.usePublicClient();
26667
- const getPublicClientForChain = react.useCallback(
26750
+ const getPublicClientForChain = React.useCallback(
26668
26751
  (chainId) => {
26669
26752
  try {
26670
26753
  const client = wagmiConfig.getClient({
@@ -26684,15 +26767,15 @@ const EvaaBridgeWithProviders = (props) => {
26684
26767
  connect: tronConnect,
26685
26768
  disconnect: tronDisconnect
26686
26769
  } = tronwalletAdapterReactHooks.useWallet();
26687
- const tronSelectRef = react.useRef(tronSelect);
26688
- const tronConnectRef = react.useRef(tronConnect);
26689
- const tronDisconnectRef = react.useRef(tronDisconnect);
26690
- react.useEffect(() => {
26770
+ const tronSelectRef = React.useRef(tronSelect);
26771
+ const tronConnectRef = React.useRef(tronConnect);
26772
+ const tronDisconnectRef = React.useRef(tronDisconnect);
26773
+ React.useEffect(() => {
26691
26774
  tronSelectRef.current = tronSelect;
26692
26775
  tronConnectRef.current = tronConnect;
26693
26776
  tronDisconnectRef.current = tronDisconnect;
26694
26777
  }, [tronSelect, tronConnect, tronDisconnect]);
26695
- const tronLinkActions = react.useMemo(
26778
+ const tronLinkActions = React.useMemo(
26696
26779
  () => ({
26697
26780
  select: (adapterName) => tronSelectRef.current(adapterName),
26698
26781
  connect: () => tronConnectRef.current(),
@@ -26702,14 +26785,14 @@ const EvaaBridgeWithProviders = (props) => {
26702
26785
  );
26703
26786
  const tronWalletConnect = useTronWalletConnect(props.walletConnectProjectId);
26704
26787
  const { setTonConnected, setMetaMaskConnected, setTronConnected } = useConnectedWalletsStore();
26705
- react.useEffect(() => {
26788
+ React.useEffect(() => {
26706
26789
  setTonConnected(!!tonAddress);
26707
26790
  }, [tonAddress, setTonConnected]);
26708
- react.useEffect(() => {
26791
+ React.useEffect(() => {
26709
26792
  setMetaMaskConnected(!!evmIsConnected);
26710
26793
  }, [evmIsConnected, setMetaMaskConnected]);
26711
26794
  const isAnyTronConnected = !!tronConnected || !!tronWalletConnect.isConnected;
26712
- react.useEffect(() => {
26795
+ React.useEffect(() => {
26713
26796
  setTronConnected(isAnyTronConnected);
26714
26797
  }, [isAnyTronConnected, setTronConnected]);
26715
26798
  useAutoSelectNetwork({
@@ -26798,7 +26881,7 @@ const EvaaBridgeContent = ({
26798
26881
  const canSwap = Boolean(
26799
26882
  fromChain && toChain && selectedAssetSymbol && isAllowedFromChain(toChain.chainKey)
26800
26883
  );
26801
- const outputAmount = react.useMemo(() => {
26884
+ const outputAmount = React.useMemo(() => {
26802
26885
  if (!quote || loading) return "";
26803
26886
  const srcToken = resolveTokenOnChainFromMatrix$1(
26804
26887
  assetMatrix,
@@ -26820,35 +26903,35 @@ const EvaaBridgeContent = ({
26820
26903
  fromChain?.chainKey,
26821
26904
  toChain?.chainKey
26822
26905
  ]);
26823
- react.useEffect(() => {
26906
+ React.useEffect(() => {
26824
26907
  if (chains?.length && onInitialized) {
26825
26908
  onInitialized();
26826
26909
  }
26827
26910
  }, [chains, onInitialized]);
26828
- const handleAmountChange = react.useCallback(
26911
+ const handleAmountChange = React.useCallback(
26829
26912
  (newAmount) => {
26830
26913
  setAmountAction(newAmount);
26831
26914
  },
26832
26915
  [setAmountAction]
26833
26916
  );
26834
- const handleFromChainChange = react.useCallback(
26917
+ const handleFromChainChange = React.useCallback(
26835
26918
  (chain2) => {
26836
26919
  if (!chain2) return;
26837
26920
  setFromChainAction(chain2);
26838
26921
  },
26839
26922
  [setFromChainAction]
26840
26923
  );
26841
- const handleToChainChange = react.useCallback(
26924
+ const handleToChainChange = React.useCallback(
26842
26925
  (chain2) => {
26843
26926
  if (!chain2) return;
26844
26927
  setToChainAction(chain2);
26845
26928
  },
26846
26929
  [setToChainAction]
26847
26930
  );
26848
- const handleSwapSides = react.useCallback(() => {
26931
+ const handleSwapSides = React.useCallback(() => {
26849
26932
  swap.actions.swapSides();
26850
26933
  }, [swap.actions]);
26851
- const destinationChains = react.useMemo(() => {
26934
+ const destinationChains = React.useMemo(() => {
26852
26935
  if (!chains || !selectedAssetSymbol || !assetMatrix) {
26853
26936
  return allowedToChains ?? [];
26854
26937
  }
@@ -26861,7 +26944,7 @@ const EvaaBridgeContent = ({
26861
26944
  fromChain?.chainKey,
26862
26945
  selectedAssetSymbol
26863
26946
  ]);
26864
- const sourceChains = react.useMemo(() => {
26947
+ const sourceChains = React.useMemo(() => {
26865
26948
  if (!chains || !assetMatrix) {
26866
26949
  return allowedFromChains ?? [];
26867
26950
  }
@@ -26989,4 +27072,4 @@ exports.useSettingsStore = useSettingsStore;
26989
27072
  exports.useSwapModel = useSwapModel;
26990
27073
  exports.useTokensStore = useTokensStore;
26991
27074
  exports.useTransactionStore = useTransactionStore;
26992
- //# sourceMappingURL=index-DnrWUlYr.cjs.map
27075
+ //# sourceMappingURL=index-Y5S-J1RC.cjs.map