@rash2x/bridge-widget 0.7.7 → 0.7.8

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
  }
@@ -6616,7 +6676,7 @@ function ChainStrategyProvider({
6616
6676
  tronApiKey
6617
6677
  }) {
6618
6678
  const { chains } = useChainsStore();
6619
- const chainKeyToId = react.useMemo(() => {
6679
+ const chainKeyToId = React.useMemo(() => {
6620
6680
  const map = {
6621
6681
  ...EVM_CHAIN_KEY_TO_ID
6622
6682
  };
@@ -6629,7 +6689,7 @@ function ChainStrategyProvider({
6629
6689
  }
6630
6690
  return map;
6631
6691
  }, [chains]);
6632
- const evmStrategy = react.useMemo(
6692
+ const evmStrategy = React.useMemo(
6633
6693
  () => new EvmChainStrategy({
6634
6694
  evmAddress: evmWallet.address,
6635
6695
  evmIsConnected: evmWallet.isConnected,
@@ -6649,7 +6709,7 @@ function ChainStrategyProvider({
6649
6709
  chainKeyToId
6650
6710
  ]
6651
6711
  );
6652
- const tonStrategy = react.useMemo(
6712
+ const tonStrategy = React.useMemo(
6653
6713
  () => new TonChainStrategy({
6654
6714
  tonConnectUI: tonWallet.tonConnectUI,
6655
6715
  tonAddress: tonWallet.address,
@@ -6658,7 +6718,7 @@ function ChainStrategyProvider({
6658
6718
  }),
6659
6719
  [tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]
6660
6720
  );
6661
- const tronStrategy = react.useMemo(
6721
+ const tronStrategy = React.useMemo(
6662
6722
  () => new TronChainStrategy({
6663
6723
  tronLink: {
6664
6724
  address: tronWallet.tronLink.address,
@@ -6688,11 +6748,11 @@ function ChainStrategyProvider({
6688
6748
  tronApiKey
6689
6749
  ]
6690
6750
  );
6691
- const chainRegistry = react.useMemo(
6751
+ const chainRegistry = React.useMemo(
6692
6752
  () => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),
6693
6753
  [evmStrategy, tonStrategy, tronStrategy]
6694
6754
  );
6695
- const value = react.useMemo(
6755
+ const value = React.useMemo(
6696
6756
  () => ({
6697
6757
  chainRegistry
6698
6758
  }),
@@ -6910,10 +6970,10 @@ const TokenSelectModal = ({
6910
6970
  onChangeAsset
6911
6971
  }) => {
6912
6972
  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);
6973
+ const [query, setQuery] = React.useState("");
6974
+ const [tab, setTab] = React.useState("my");
6975
+ const [manualTabSwitch, setManualTabSwitch] = React.useState(false);
6976
+ const [listHeight, setListHeight] = React.useState(400);
6917
6977
  const { srcAddress } = useAddresses();
6918
6978
  const { fromChain, toChain, setFromChain, chains } = useChainsStore();
6919
6979
  const { assetMatrix, selectedAssetSymbol } = useTokensStore();
@@ -6922,20 +6982,20 @@ const TokenSelectModal = ({
6922
6982
  fromChain?.chainKey,
6923
6983
  srcAddress
6924
6984
  );
6925
- const hasSourceWallet = react.useCallback(() => {
6985
+ const hasSourceWallet = React.useCallback(() => {
6926
6986
  return hasWalletForChain(fromChain?.chainKey);
6927
6987
  }, [hasWalletForChain, fromChain?.chainKey]);
6928
- react.useEffect(() => {
6988
+ React.useEffect(() => {
6929
6989
  if (!hasSourceWallet()) setTab("all");
6930
6990
  }, [hasSourceWallet]);
6931
- const getTokenUsdValue = react.useCallback(
6991
+ const getTokenUsdValue = React.useCallback(
6932
6992
  (symbol, price) => {
6933
6993
  const bal = getBalance(symbol);
6934
6994
  return bal > 0 && price ? bal * price : 0;
6935
6995
  },
6936
6996
  [getBalance]
6937
6997
  );
6938
- const isTokenAvailableOnChain = react.useCallback(
6998
+ const isTokenAvailableOnChain = React.useCallback(
6939
6999
  (symbol, chainKey) => {
6940
7000
  if (!assetMatrix || !chainKey) return false;
6941
7001
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6943,7 +7003,7 @@ const TokenSelectModal = ({
6943
7003
  },
6944
7004
  [assetMatrix]
6945
7005
  );
6946
- const findFirstAvailableChain = react.useCallback(
7006
+ const findFirstAvailableChain = React.useCallback(
6947
7007
  (symbol) => {
6948
7008
  if (!assetMatrix || !chains) return void 0;
6949
7009
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6956,7 +7016,7 @@ const TokenSelectModal = ({
6956
7016
  },
6957
7017
  [assetMatrix, chains]
6958
7018
  );
6959
- const groupedTokens = react.useMemo(() => {
7019
+ const groupedTokens = React.useMemo(() => {
6960
7020
  const q3 = query.trim().toLowerCase();
6961
7021
  const filtered = q3 ? items.filter(
6962
7022
  (a2) => a2.name.toLowerCase().includes(q3) || a2.symbol.toLowerCase().includes(q3)
@@ -7006,33 +7066,33 @@ const TokenSelectModal = ({
7006
7066
  ]);
7007
7067
  const myTokens = groupedTokens.withBalance;
7008
7068
  const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
7009
- react.useEffect(() => {
7069
+ React.useEffect(() => {
7010
7070
  if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
7011
7071
  setTab("all");
7012
7072
  }
7013
7073
  }, [query, tab, myTokens.length, manualTabSwitch]);
7014
- react.useEffect(() => {
7074
+ React.useEffect(() => {
7015
7075
  if (query.trim() !== "" && tab === "all" && myTokens.length > 0 && !manualTabSwitch) {
7016
7076
  setTab("my");
7017
7077
  }
7018
7078
  }, [query, tab, myTokens.length, manualTabSwitch]);
7019
- react.useEffect(() => {
7079
+ React.useEffect(() => {
7020
7080
  setManualTabSwitch(false);
7021
7081
  }, [query]);
7022
- const resetState = react.useCallback(() => {
7082
+ const resetState = React.useCallback(() => {
7023
7083
  setQuery("");
7024
7084
  setTab("my");
7025
7085
  setManualTabSwitch(false);
7026
7086
  }, []);
7027
- const handleClose = react.useCallback(() => {
7087
+ const handleClose = React.useCallback(() => {
7028
7088
  resetState();
7029
7089
  onClose();
7030
7090
  }, [onClose, resetState]);
7031
- react.useEffect(() => {
7091
+ React.useEffect(() => {
7032
7092
  if (!isOpen) resetState();
7033
7093
  }, [isOpen, resetState]);
7034
- react.useEffect(() => () => resetState(), [resetState]);
7035
- const onPick = react.useCallback(
7094
+ React.useEffect(() => () => resetState(), [resetState]);
7095
+ const onPick = React.useCallback(
7036
7096
  (sym, willChangeSrcChain = false, willChangeDstChain = false, willChangeBothChains = false) => {
7037
7097
  onChangeAsset(sym);
7038
7098
  if (willChangeBothChains) {
@@ -7046,7 +7106,7 @@ const TokenSelectModal = ({
7046
7106
  },
7047
7107
  [findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
7048
7108
  );
7049
- const tokensToRender = react.useMemo(() => {
7109
+ const tokensToRender = React.useMemo(() => {
7050
7110
  if (effectiveTab === "my") {
7051
7111
  return myTokens.map((token) => ({
7052
7112
  token,
@@ -7065,21 +7125,21 @@ const TokenSelectModal = ({
7065
7125
  ];
7066
7126
  return mainTokens;
7067
7127
  }, [effectiveTab, myTokens, groupedTokens]);
7068
- const willChangeDstTokens = react.useMemo(
7128
+ const willChangeDstTokens = React.useMemo(
7069
7129
  () => groupedTokens.willChangeDstChain.map((token) => ({
7070
7130
  token,
7071
7131
  willChangeDst: true
7072
7132
  })),
7073
7133
  [groupedTokens.willChangeDstChain]
7074
7134
  );
7075
- const willChangeSrcTokens = react.useMemo(
7135
+ const willChangeSrcTokens = React.useMemo(
7076
7136
  () => groupedTokens.willChangeSrcChain.map((token) => ({
7077
7137
  token,
7078
7138
  willChangeSrc: true
7079
7139
  })),
7080
7140
  [groupedTokens.willChangeSrcChain]
7081
7141
  );
7082
- const willChangeBothTokens = react.useMemo(
7142
+ const willChangeBothTokens = React.useMemo(
7083
7143
  () => groupedTokens.willChangeBothChains.map((token) => ({
7084
7144
  token,
7085
7145
  willChangeBoth: true
@@ -7087,7 +7147,7 @@ const TokenSelectModal = ({
7087
7147
  [groupedTokens.willChangeBothChains]
7088
7148
  );
7089
7149
  const hasNoResults = tokensToRender.length === 0 && willChangeDstTokens.length === 0 && willChangeSrcTokens.length === 0 && willChangeBothTokens.length === 0;
7090
- const virtualItems = react.useMemo(() => {
7150
+ const virtualItems = React.useMemo(() => {
7091
7151
  const items2 = tokensToRender.map(
7092
7152
  ({ token, willChangeSrc }) => ({
7093
7153
  type: "token",
@@ -7132,7 +7192,7 @@ const TokenSelectModal = ({
7132
7192
  }
7133
7193
  return items2;
7134
7194
  }, [effectiveTab, tokensToRender, t2, willChangeDstTokens, willChangeSrcTokens, willChangeBothTokens]);
7135
- react.useLayoutEffect(() => {
7195
+ React.useLayoutEffect(() => {
7136
7196
  const updateHeight = () => {
7137
7197
  const container2 = document.getElementById("token-select-list");
7138
7198
  if (!container2) return;
@@ -7155,7 +7215,7 @@ const TokenSelectModal = ({
7155
7215
  resizeObserver?.disconnect();
7156
7216
  };
7157
7217
  }, [isOpen, hasSourceWallet]);
7158
- const VirtualRow = react.useCallback(
7218
+ const VirtualRow = React.useCallback(
7159
7219
  ({ index, style }) => {
7160
7220
  const item = virtualItems[index];
7161
7221
  if (!item) return null;
@@ -7199,7 +7259,7 @@ const TokenSelectModal = ({
7199
7259
  virtualItems
7200
7260
  ]
7201
7261
  );
7202
- const itemKey = react.useCallback(
7262
+ const itemKey = React.useCallback(
7203
7263
  (index) => {
7204
7264
  const item = virtualItems[index];
7205
7265
  if (!item) return index;
@@ -7276,8 +7336,8 @@ function useBridgeRefresh() {
7276
7336
  const { fromChain, toChain } = useChainsStore();
7277
7337
  const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();
7278
7338
  const { hasAnyWallet } = useConnectedWalletsStore();
7279
- const [spinning, setSpinning] = react.useState(false);
7280
- const refresh = react.useCallback(async () => {
7339
+ const [spinning, setSpinning] = React.useState(false);
7340
+ const refresh = React.useCallback(async () => {
7281
7341
  setSpinning(true);
7282
7342
  try {
7283
7343
  setQLoading();
@@ -7330,8 +7390,8 @@ function useBridgeRefresh() {
7330
7390
  }
7331
7391
  const RefreshButton = () => {
7332
7392
  const { refresh, spinning } = useBridgeRefresh();
7333
- const [turns, setTurns] = react.useState(0);
7334
- const handleRefresh = react.useCallback(() => {
7393
+ const [turns, setTurns] = React.useState(0);
7394
+ const handleRefresh = React.useCallback(() => {
7335
7395
  setTurns((t2) => t2 + 1);
7336
7396
  refresh();
7337
7397
  }, [refresh]);
@@ -7360,7 +7420,7 @@ const SelectTokenButton = ({
7360
7420
  token
7361
7421
  }) => {
7362
7422
  const { t: t2 } = useBridgeTranslation();
7363
- const label = react.useMemo(() => {
7423
+ const label = React.useMemo(() => {
7364
7424
  return token?.symbol ?? t2("bridge.selectToken");
7365
7425
  }, [token, t2]);
7366
7426
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -7398,8 +7458,8 @@ const Toolbar = () => {
7398
7458
  onOpen: onOpenSettings
7399
7459
  } = useModal();
7400
7460
  const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
7401
- const assets = react.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7402
- const current = react.useMemo(() => {
7461
+ const assets = React.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7462
+ const current = React.useMemo(() => {
7403
7463
  if (!assets.length) return void 0;
7404
7464
  if (!selectedAssetSymbol) return assets[0];
7405
7465
  const sum = selectedAssetSymbol.toUpperCase();
@@ -7445,8 +7505,8 @@ const useAutoSelectNetwork = ({
7445
7505
  }) => {
7446
7506
  const { hasAnyWallet } = useConnectedWalletsStore();
7447
7507
  const { chains, setFromChain } = useChainsStore();
7448
- const previousHadWallet = react.useRef(hasAnyWallet());
7449
- react.useEffect(() => {
7508
+ const previousHadWallet = React.useRef(hasAnyWallet());
7509
+ React.useEffect(() => {
7450
7510
  const currentHasWallet = hasAnyWallet();
7451
7511
  const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;
7452
7512
  if (isFirstWalletConnection && chains?.length) {
@@ -26087,7 +26147,7 @@ class WalletConnectModal {
26087
26147
  }
26088
26148
  async initUi() {
26089
26149
  if (typeof window !== "undefined") {
26090
- await Promise.resolve().then(() => require("./index-x-S2vNi4.cjs"));
26150
+ await Promise.resolve().then(() => require("./index-Btnz7slS.cjs"));
26091
26151
  const modal = document.createElement("wcm-modal");
26092
26152
  document.body.insertAdjacentElement("beforeend", modal);
26093
26153
  OptionsCtrl.setIsUiLoaded(true);
@@ -26193,16 +26253,16 @@ function isSessionExpiredError(error) {
26193
26253
  function useTronWalletConnect(projectId) {
26194
26254
  const { address, isConnected, isConnecting } = useTronWalletConnectStore();
26195
26255
  const { setAddress, setActions, reset } = useTronWalletConnectStore();
26196
- const providerRef = react.useRef(null);
26197
- const modalRef = react.useRef(null);
26198
- const abortControllerRef = react.useRef(null);
26256
+ const providerRef = React.useRef(null);
26257
+ const modalRef = React.useRef(null);
26258
+ const abortControllerRef = React.useRef(null);
26199
26259
  const { onClose: closeWalletSelectModal } = useWalletSelectModal();
26200
26260
  const appliedTheme = useThemeStore((state2) => state2.appliedTheme);
26201
- const closeWalletSelectModalRef = react.useRef(closeWalletSelectModal);
26261
+ const closeWalletSelectModalRef = React.useRef(closeWalletSelectModal);
26202
26262
  closeWalletSelectModalRef.current = closeWalletSelectModal;
26203
- const appliedThemeRef = react.useRef(appliedTheme);
26263
+ const appliedThemeRef = React.useRef(appliedTheme);
26204
26264
  appliedThemeRef.current = appliedTheme;
26205
- react.useEffect(() => {
26265
+ React.useEffect(() => {
26206
26266
  if (!projectId || providerRef.current) return;
26207
26267
  const initProvider = async () => {
26208
26268
  try {
@@ -26275,7 +26335,7 @@ function useTronWalletConnect(projectId) {
26275
26335
  }
26276
26336
  };
26277
26337
  }, [projectId, setAddress]);
26278
- react.useEffect(() => {
26338
+ React.useEffect(() => {
26279
26339
  if (!projectId || !modalRef.current) return;
26280
26340
  const modal = new WalletConnectModal({
26281
26341
  projectId,
@@ -26287,7 +26347,7 @@ function useTronWalletConnect(projectId) {
26287
26347
  });
26288
26348
  modalRef.current = modal;
26289
26349
  }, [appliedTheme, projectId]);
26290
- const connect = react.useCallback(async () => {
26350
+ const connect = React.useCallback(async () => {
26291
26351
  if (!providerRef.current) {
26292
26352
  throw new Error(
26293
26353
  "WalletConnect not initialized. Please provide a valid project ID."
@@ -26355,7 +26415,7 @@ function useTronWalletConnect(projectId) {
26355
26415
  abortControllerRef.current = null;
26356
26416
  }
26357
26417
  }, [setAddress]);
26358
- const cancelConnection = react.useCallback(() => {
26418
+ const cancelConnection = React.useCallback(() => {
26359
26419
  if (abortControllerRef.current) {
26360
26420
  abortControllerRef.current.abort();
26361
26421
  console.log("TRON WalletConnect connection cancelled");
@@ -26364,7 +26424,7 @@ function useTronWalletConnect(projectId) {
26364
26424
  modalRef.current.closeModal();
26365
26425
  }
26366
26426
  }, []);
26367
- const disconnect = react.useCallback(async () => {
26427
+ const disconnect = React.useCallback(async () => {
26368
26428
  if (!providerRef.current) return;
26369
26429
  try {
26370
26430
  await providerRef.current.disconnect();
@@ -26375,7 +26435,7 @@ function useTronWalletConnect(projectId) {
26375
26435
  throw error;
26376
26436
  }
26377
26437
  }, [reset]);
26378
- const signTransaction = react.useCallback(
26438
+ const signTransaction = React.useCallback(
26379
26439
  async (transaction2) => {
26380
26440
  if (!providerRef.current) {
26381
26441
  throw new Error("WalletConnect not initialized");
@@ -26442,7 +26502,7 @@ function useTronWalletConnect(projectId) {
26442
26502
  },
26443
26503
  [address, setAddress]
26444
26504
  );
26445
- const onAddressCorrected = react.useCallback(
26505
+ const onAddressCorrected = React.useCallback(
26446
26506
  (correctedAddress) => {
26447
26507
  console.log(
26448
26508
  "TRON WalletConnect address corrected:",
@@ -26454,7 +26514,7 @@ function useTronWalletConnect(projectId) {
26454
26514
  },
26455
26515
  [address, setAddress]
26456
26516
  );
26457
- react.useEffect(() => {
26517
+ React.useEffect(() => {
26458
26518
  setActions({
26459
26519
  connect,
26460
26520
  disconnect,
@@ -26512,10 +26572,10 @@ function useUrlSync(options) {
26512
26572
  const { setInputAmount } = useBridgeQuoteStore();
26513
26573
  const internalData = useBridgeExternalData();
26514
26574
  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(
26575
+ const [hasInitialized, setHasInitialized] = React.useState(false);
26576
+ const isSyncingRef = React.useRef(false);
26577
+ const lastSyncedParamsRef = React.useRef({});
26578
+ const validateParams = React.useCallback(
26519
26579
  (urlParams) => {
26520
26580
  const result = {};
26521
26581
  if (!chains?.length || !tokens?.length || !assetMatrix) {
@@ -26568,7 +26628,7 @@ function useUrlSync(options) {
26568
26628
  },
26569
26629
  [chains, tokens, assetMatrix]
26570
26630
  );
26571
- const syncStateToUrl = react.useCallback(
26631
+ const syncStateToUrl = React.useCallback(
26572
26632
  (includeAmount = false) => {
26573
26633
  if (!enabled || isSyncingRef.current || !hasInitialized) {
26574
26634
  return;
@@ -26590,11 +26650,11 @@ function useUrlSync(options) {
26590
26650
  },
26591
26651
  [enabled, hasInitialized, currentUrlParams, onUrlParamsChange]
26592
26652
  );
26593
- const handleAmountBlur = react.useCallback(() => {
26653
+ const handleAmountBlur = React.useCallback(() => {
26594
26654
  if (!enabled || !hasInitialized) return;
26595
26655
  syncStateToUrl(true);
26596
26656
  }, [enabled, hasInitialized, syncStateToUrl]);
26597
- react.useEffect(() => {
26657
+ React.useEffect(() => {
26598
26658
  if (!enabled || !chains?.length || !tokens?.length) {
26599
26659
  return;
26600
26660
  }
@@ -26640,7 +26700,7 @@ function useUrlSync(options) {
26640
26700
  setInputAmount,
26641
26701
  setIsUrlInitialized
26642
26702
  ]);
26643
- react.useEffect(() => {
26703
+ React.useEffect(() => {
26644
26704
  if (!enabled || !hasInitialized) return;
26645
26705
  syncStateToUrl(false);
26646
26706
  }, [
@@ -26664,7 +26724,7 @@ const EvaaBridgeWithProviders = (props) => {
26664
26724
  const { disconnect: evmDisconnect } = wagmi.useDisconnect();
26665
26725
  const { data: walletClient } = wagmi.useWalletClient();
26666
26726
  const publicClient = wagmi.usePublicClient();
26667
- const getPublicClientForChain = react.useCallback(
26727
+ const getPublicClientForChain = React.useCallback(
26668
26728
  (chainId) => {
26669
26729
  try {
26670
26730
  const client = wagmiConfig.getClient({
@@ -26684,15 +26744,15 @@ const EvaaBridgeWithProviders = (props) => {
26684
26744
  connect: tronConnect,
26685
26745
  disconnect: tronDisconnect
26686
26746
  } = tronwalletAdapterReactHooks.useWallet();
26687
- const tronSelectRef = react.useRef(tronSelect);
26688
- const tronConnectRef = react.useRef(tronConnect);
26689
- const tronDisconnectRef = react.useRef(tronDisconnect);
26690
- react.useEffect(() => {
26747
+ const tronSelectRef = React.useRef(tronSelect);
26748
+ const tronConnectRef = React.useRef(tronConnect);
26749
+ const tronDisconnectRef = React.useRef(tronDisconnect);
26750
+ React.useEffect(() => {
26691
26751
  tronSelectRef.current = tronSelect;
26692
26752
  tronConnectRef.current = tronConnect;
26693
26753
  tronDisconnectRef.current = tronDisconnect;
26694
26754
  }, [tronSelect, tronConnect, tronDisconnect]);
26695
- const tronLinkActions = react.useMemo(
26755
+ const tronLinkActions = React.useMemo(
26696
26756
  () => ({
26697
26757
  select: (adapterName) => tronSelectRef.current(adapterName),
26698
26758
  connect: () => tronConnectRef.current(),
@@ -26702,14 +26762,14 @@ const EvaaBridgeWithProviders = (props) => {
26702
26762
  );
26703
26763
  const tronWalletConnect = useTronWalletConnect(props.walletConnectProjectId);
26704
26764
  const { setTonConnected, setMetaMaskConnected, setTronConnected } = useConnectedWalletsStore();
26705
- react.useEffect(() => {
26765
+ React.useEffect(() => {
26706
26766
  setTonConnected(!!tonAddress);
26707
26767
  }, [tonAddress, setTonConnected]);
26708
- react.useEffect(() => {
26768
+ React.useEffect(() => {
26709
26769
  setMetaMaskConnected(!!evmIsConnected);
26710
26770
  }, [evmIsConnected, setMetaMaskConnected]);
26711
26771
  const isAnyTronConnected = !!tronConnected || !!tronWalletConnect.isConnected;
26712
- react.useEffect(() => {
26772
+ React.useEffect(() => {
26713
26773
  setTronConnected(isAnyTronConnected);
26714
26774
  }, [isAnyTronConnected, setTronConnected]);
26715
26775
  useAutoSelectNetwork({
@@ -26798,7 +26858,7 @@ const EvaaBridgeContent = ({
26798
26858
  const canSwap = Boolean(
26799
26859
  fromChain && toChain && selectedAssetSymbol && isAllowedFromChain(toChain.chainKey)
26800
26860
  );
26801
- const outputAmount = react.useMemo(() => {
26861
+ const outputAmount = React.useMemo(() => {
26802
26862
  if (!quote || loading) return "";
26803
26863
  const srcToken = resolveTokenOnChainFromMatrix$1(
26804
26864
  assetMatrix,
@@ -26820,35 +26880,35 @@ const EvaaBridgeContent = ({
26820
26880
  fromChain?.chainKey,
26821
26881
  toChain?.chainKey
26822
26882
  ]);
26823
- react.useEffect(() => {
26883
+ React.useEffect(() => {
26824
26884
  if (chains?.length && onInitialized) {
26825
26885
  onInitialized();
26826
26886
  }
26827
26887
  }, [chains, onInitialized]);
26828
- const handleAmountChange = react.useCallback(
26888
+ const handleAmountChange = React.useCallback(
26829
26889
  (newAmount) => {
26830
26890
  setAmountAction(newAmount);
26831
26891
  },
26832
26892
  [setAmountAction]
26833
26893
  );
26834
- const handleFromChainChange = react.useCallback(
26894
+ const handleFromChainChange = React.useCallback(
26835
26895
  (chain2) => {
26836
26896
  if (!chain2) return;
26837
26897
  setFromChainAction(chain2);
26838
26898
  },
26839
26899
  [setFromChainAction]
26840
26900
  );
26841
- const handleToChainChange = react.useCallback(
26901
+ const handleToChainChange = React.useCallback(
26842
26902
  (chain2) => {
26843
26903
  if (!chain2) return;
26844
26904
  setToChainAction(chain2);
26845
26905
  },
26846
26906
  [setToChainAction]
26847
26907
  );
26848
- const handleSwapSides = react.useCallback(() => {
26908
+ const handleSwapSides = React.useCallback(() => {
26849
26909
  swap.actions.swapSides();
26850
26910
  }, [swap.actions]);
26851
- const destinationChains = react.useMemo(() => {
26911
+ const destinationChains = React.useMemo(() => {
26852
26912
  if (!chains || !selectedAssetSymbol || !assetMatrix) {
26853
26913
  return allowedToChains ?? [];
26854
26914
  }
@@ -26861,7 +26921,7 @@ const EvaaBridgeContent = ({
26861
26921
  fromChain?.chainKey,
26862
26922
  selectedAssetSymbol
26863
26923
  ]);
26864
- const sourceChains = react.useMemo(() => {
26924
+ const sourceChains = React.useMemo(() => {
26865
26925
  if (!chains || !assetMatrix) {
26866
26926
  return allowedFromChains ?? [];
26867
26927
  }
@@ -26989,4 +27049,4 @@ exports.useSettingsStore = useSettingsStore;
26989
27049
  exports.useSwapModel = useSwapModel;
26990
27050
  exports.useTokensStore = useTokensStore;
26991
27051
  exports.useTransactionStore = useTransactionStore;
26992
- //# sourceMappingURL=index-DnrWUlYr.cjs.map
27052
+ //# sourceMappingURL=index-bZ0S5sNd.cjs.map