@rash2x/bridge-widget 0.7.6 → 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;
@@ -2403,7 +2420,7 @@ function calculateMinReceived(quote, slippageBps, dstToken) {
2403
2420
  }
2404
2421
  function getQuoteDetails(quote, srcToken, dstToken, tokens, chains, slippageBps, srcChain, dstChain) {
2405
2422
  const amounts = getQuoteAmounts(quote, srcToken, dstToken);
2406
- const fees = computeFeeBreakdownUsd(quote, srcToken, tokens, chains, srcChain, dstChain);
2423
+ const fees = computeFeeBreakdownUsd(quote, srcToken, dstToken, tokens, chains, srcChain, dstChain);
2407
2424
  const minimumReceived = calculateMinReceived(quote, slippageBps, dstToken);
2408
2425
  return {
2409
2426
  inputAmount: amounts.inputHuman,
@@ -2423,7 +2440,7 @@ function getRouteDisplayName(route) {
2423
2440
  if (routeLower.includes("v2")) return "Stargate V2";
2424
2441
  return route.split(/[/\-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(" ");
2425
2442
  }
2426
- function computeFeeBreakdownUsd(quote, srcToken, tokens, chains, srcChain, dstChain) {
2443
+ function computeFeeBreakdownUsd(quote, srcToken, dstToken, tokens, chains, srcChain, dstChain) {
2427
2444
  const defaultMsgSymbol = srcChain?.nativeCurrency?.symbol?.toUpperCase() ?? "";
2428
2445
  const defaultBridgeSymbol = srcToken?.symbol?.toUpperCase() ?? "";
2429
2446
  const defaultDstGasSymbol = dstChain?.nativeCurrency?.symbol?.toUpperCase() ?? "";
@@ -2466,7 +2483,7 @@ function computeFeeBreakdownUsd(quote, srcToken, tokens, chains, srcChain, dstCh
2466
2483
  let bridgeFeeUsd = 0;
2467
2484
  const bridgeFeeSymbol = srcToken.symbol?.toUpperCase() ?? "";
2468
2485
  const srcHuman = fromLD(quote.srcAmount, srcToken.decimals);
2469
- const dstHuman = fromLD(quote.dstAmount, srcToken.decimals);
2486
+ const dstHuman = dstToken ? fromLD(quote.dstAmount, dstToken.decimals) : 0;
2470
2487
  const diff = srcHuman - dstHuman;
2471
2488
  if (diff > 0) {
2472
2489
  bridgeFeeAmount = diff;
@@ -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,13 +3106,18 @@ 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,
3053
3113
  fromChain?.chainKey
3054
3114
  );
3055
- return computeFeeBreakdownUsd(quote, srcToken, allTokens ?? tokens, chains, fromChain, toChain);
3115
+ const dstToken = resolveTokenOnChainFromMatrix$1(
3116
+ assetMatrix,
3117
+ selectedAssetSymbol,
3118
+ toChain?.chainKey
3119
+ );
3120
+ return computeFeeBreakdownUsd(quote, srcToken, dstToken, allTokens ?? tokens, chains, fromChain, toChain);
3056
3121
  }, [quote, allTokens, tokens, chains, selectedAssetSymbol, assetMatrix, fromChain, toChain]);
3057
3122
  }
3058
3123
  function useBridgeExternalData(options) {
@@ -3068,7 +3133,7 @@ function useBridgeExternalData(options) {
3068
3133
  const inputAmount = useBridgeQuoteStore((state2) => state2.inputAmount);
3069
3134
  const quote = useBridgeQuoteStore((state2) => state2.quote);
3070
3135
  const slippageBps = useSettingsStore((state2) => state2.slippageBps);
3071
- const data = react.useMemo(
3136
+ const data = React.useMemo(
3072
3137
  () => buildBridgeExternalData({
3073
3138
  amount: inputAmount,
3074
3139
  selectedAssetSymbol,
@@ -3093,8 +3158,8 @@ function useBridgeExternalData(options) {
3093
3158
  slippageBps
3094
3159
  ]
3095
3160
  );
3096
- const lastSerializedRef = react.useRef(void 0);
3097
- react.useEffect(() => {
3161
+ const lastSerializedRef = React.useRef(void 0);
3162
+ React.useEffect(() => {
3098
3163
  const callback = options?.onDataUpdate;
3099
3164
  if (!callback) return;
3100
3165
  const serialized = serializeBridgeDataForCache(data);
@@ -3678,7 +3743,7 @@ function useGasEstimate(amountNum) {
3678
3743
  const quoteFees = quote?.fees;
3679
3744
  const quoteSrcChainKey = quote?.srcChainKey;
3680
3745
  const nativeBalanceValue = nativeCurrencySymbol ? Number(balances[nativeCurrencySymbol.toUpperCase()]?.balance ?? 0) : 0;
3681
- const result = react.useMemo(() => {
3746
+ const result = React.useMemo(() => {
3682
3747
  if (!chainKey || !nativeCurrencySymbol) {
3683
3748
  return {
3684
3749
  nativeSym: "",
@@ -3756,7 +3821,7 @@ function useBridgeTransaction() {
3756
3821
  const { chains } = useChainsStore();
3757
3822
  const txStore = useTransactionStore();
3758
3823
  const gas = useGasEstimate();
3759
- const srcToken = react.useMemo(
3824
+ const srcToken = React.useMemo(
3760
3825
  () => resolveTokenOnChainFromMatrix$1(
3761
3826
  assetMatrix,
3762
3827
  selectedAssetSymbol,
@@ -3764,7 +3829,7 @@ function useBridgeTransaction() {
3764
3829
  ),
3765
3830
  [assetMatrix, selectedAssetSymbol, quote?.srcChainKey]
3766
3831
  );
3767
- const dstToken = react.useMemo(
3832
+ const dstToken = React.useMemo(
3768
3833
  () => resolveTokenOnChainFromMatrix$1(
3769
3834
  assetMatrix,
3770
3835
  selectedAssetSymbol,
@@ -3978,7 +4043,7 @@ function useBalanceCheck(amountNum, gas) {
3978
4043
  const { selectedAssetSymbol } = useTokensStore();
3979
4044
  const { srcAddress } = useAddresses();
3980
4045
  const { getBalance } = useBalances(fromChain?.chainKey, srcAddress);
3981
- const validationResult = react.useMemo(() => {
4046
+ const validationResult = React.useMemo(() => {
3982
4047
  if (!fromChain || !gas.balancesKnown) {
3983
4048
  return {
3984
4049
  availableBalance: 0,
@@ -4021,7 +4086,7 @@ function useAmountLimits(amountNum) {
4021
4086
  const { selectedAssetSymbol, tokens } = useTokensStore();
4022
4087
  const { fromChain } = useChainsStore();
4023
4088
  const { quote } = useBridgeQuoteStore();
4024
- const limitsResult = react.useMemo(() => {
4089
+ const limitsResult = React.useMemo(() => {
4025
4090
  const tokenSymbol = selectedAssetSymbol;
4026
4091
  if (quote?.srcAmountMax && fromChain?.chainKey && selectedAssetSymbol) {
4027
4092
  const sourceToken = tokens?.find(
@@ -4059,7 +4124,7 @@ function useSilentValidations(amountString) {
4059
4124
  const { selectedAssetSymbol, assetMatrix, tokens } = useTokensStore();
4060
4125
  const { fromChain, toChain } = useChainsStore();
4061
4126
  const { quote, status, error } = useBridgeQuoteStore();
4062
- const validationResult = react.useMemo(() => {
4127
+ const validationResult = React.useMemo(() => {
4063
4128
  const hasTooManyDecimals = (() => {
4064
4129
  if (!amountString || !fromChain?.chainKey || !selectedAssetSymbol)
4065
4130
  return false;
@@ -4110,35 +4175,11 @@ function useSilentValidations(amountString) {
4110
4175
  status,
4111
4176
  error
4112
4177
  ]);
4113
- react.useEffect(() => {
4114
- if (validationResult.isValidForTransfer) return;
4115
- console.info("[SilentValidations] invalid", {
4116
- amountString,
4117
- hasTooManyDecimals: validationResult.hasTooManyDecimals,
4118
- hasUnsupportedTokenPair: validationResult.hasUnsupportedTokenPair,
4119
- hasInsufficientLiquidity: validationResult.hasInsufficientLiquidity,
4120
- status,
4121
- hasQuote: Boolean(quote),
4122
- error,
4123
- fromChainKey: fromChain?.chainKey,
4124
- toChainKey: toChain?.chainKey,
4125
- selectedAssetSymbol
4126
- });
4127
- }, [
4128
- validationResult,
4129
- amountString,
4130
- status,
4131
- quote,
4132
- error,
4133
- fromChain?.chainKey,
4134
- toChain?.chainKey,
4135
- selectedAssetSymbol
4136
- ]);
4137
4178
  return validationResult;
4138
4179
  }
4139
4180
  function useTelegramRestriction() {
4140
4181
  const { fromChain, toChain } = useChainsStore();
4141
- const restriction = react.useMemo(() => {
4182
+ const restriction = React.useMemo(() => {
4142
4183
  const isTelegramEnv = typeof window !== "undefined" && /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
4143
4184
  typeof window.TelegramWebviewProxy?.postEvent === "function";
4144
4185
  if (!isTelegramEnv) {
@@ -4182,7 +4223,7 @@ const MainButton = ({
4182
4223
  const missingDst = isCustomAddressEnabled ? !dstAddressValid : !dstConnectedOk || !dstAddressValid;
4183
4224
  const requiresCustomAddress = isCustomAddressEnabled && !dstAddressValid;
4184
4225
  const canTransfer = !missingSrc && !missingDst && amountNum > 0 && !!srcChainKey && !!dstChainKey;
4185
- const label = react.useMemo(() => {
4226
+ const label = React.useMemo(() => {
4186
4227
  switch (true) {
4187
4228
  case isTelegramRestricted:
4188
4229
  return t2("telegram.openWebVersion");
@@ -4260,7 +4301,6 @@ const MainButton = ({
4260
4301
  }
4261
4302
  };
4262
4303
  const disabled = status === "loading" || requiresCustomAddress || !isTelegramRestricted && !missingSrc && !missingDst && (amountNum <= 0 || isBalanceLoading || hasInsufficientBalance || hasAmountTooLarge || !gas.hasEnoughGas || noRoute || !isValidForTransfer);
4263
- console.log(gas);
4264
4304
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-4 space-y-4", children: [
4265
4305
  isTelegramRestricted && /* @__PURE__ */ jsxRuntime.jsx(
4266
4306
  alert.Alert,
@@ -4295,7 +4335,7 @@ const WalletModalButton = (props) => {
4295
4335
  const { icon: IconComponent, name, onClose } = props;
4296
4336
  const { chainRegistry } = useChainStrategies();
4297
4337
  const { connect, isPending } = wagmi.useConnect();
4298
- const [isConnecting, setIsConnecting] = react.useState(false);
4338
+ const [isConnecting, setIsConnecting] = React.useState(false);
4299
4339
  if (props.variant === "connected") {
4300
4340
  const { address, onDisconnect } = props;
4301
4341
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -4749,11 +4789,11 @@ const SuccessStep = ({
4749
4789
  );
4750
4790
  };
4751
4791
  const useCountdown = (initialSeconds) => {
4752
- const [time2, setTime] = react.useState(initialSeconds);
4792
+ const [time2, setTime] = React.useState(initialSeconds);
4753
4793
  const minutes = Math.floor(time2 / 60);
4754
4794
  const seconds = time2 % 60;
4755
4795
  const formattedTime = `${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
4756
- react.useEffect(() => {
4796
+ React.useEffect(() => {
4757
4797
  if (!time2) return;
4758
4798
  const intervalId = setInterval(() => {
4759
4799
  setTime(time2 - 1);
@@ -4831,7 +4871,7 @@ const useTokens = () => {
4831
4871
  // 1 час хранения в кэше
4832
4872
  refetchOnWindowFocus: false
4833
4873
  });
4834
- react.useEffect(() => {
4874
+ React.useEffect(() => {
4835
4875
  if (query.isSuccess && query.data?.length) {
4836
4876
  setAllTokens(query.data);
4837
4877
  const bridgeableTokens = query.data.filter(
@@ -4850,7 +4890,7 @@ const useTokens = () => {
4850
4890
  setSelectedToken,
4851
4891
  setSelectedAssetSymbol
4852
4892
  ]);
4853
- react.useEffect(() => {
4893
+ React.useEffect(() => {
4854
4894
  if (query.isError && query.error) {
4855
4895
  console.error(query.error.name, query.error.message);
4856
4896
  }
@@ -4870,7 +4910,7 @@ const useChains = () => {
4870
4910
  // 1 час хранения в кэше
4871
4911
  refetchOnWindowFocus: false
4872
4912
  });
4873
- react.useEffect(() => {
4913
+ React.useEffect(() => {
4874
4914
  if (query.isSuccess && query.data?.length) {
4875
4915
  setChains(query.data);
4876
4916
  if (!fromChain) {
@@ -4878,7 +4918,7 @@ const useChains = () => {
4878
4918
  }
4879
4919
  }
4880
4920
  }, [query.isSuccess, query.data]);
4881
- react.useEffect(() => {
4921
+ React.useEffect(() => {
4882
4922
  if (query.isError && query.error) {
4883
4923
  console.error(query.error.name, query.error.message);
4884
4924
  }
@@ -6636,7 +6676,7 @@ function ChainStrategyProvider({
6636
6676
  tronApiKey
6637
6677
  }) {
6638
6678
  const { chains } = useChainsStore();
6639
- const chainKeyToId = react.useMemo(() => {
6679
+ const chainKeyToId = React.useMemo(() => {
6640
6680
  const map = {
6641
6681
  ...EVM_CHAIN_KEY_TO_ID
6642
6682
  };
@@ -6649,7 +6689,7 @@ function ChainStrategyProvider({
6649
6689
  }
6650
6690
  return map;
6651
6691
  }, [chains]);
6652
- const evmStrategy = react.useMemo(
6692
+ const evmStrategy = React.useMemo(
6653
6693
  () => new EvmChainStrategy({
6654
6694
  evmAddress: evmWallet.address,
6655
6695
  evmIsConnected: evmWallet.isConnected,
@@ -6669,7 +6709,7 @@ function ChainStrategyProvider({
6669
6709
  chainKeyToId
6670
6710
  ]
6671
6711
  );
6672
- const tonStrategy = react.useMemo(
6712
+ const tonStrategy = React.useMemo(
6673
6713
  () => new TonChainStrategy({
6674
6714
  tonConnectUI: tonWallet.tonConnectUI,
6675
6715
  tonAddress: tonWallet.address,
@@ -6678,7 +6718,7 @@ function ChainStrategyProvider({
6678
6718
  }),
6679
6719
  [tonWallet.tonConnectUI, tonWallet.address, tonClient, tonApiKey]
6680
6720
  );
6681
- const tronStrategy = react.useMemo(
6721
+ const tronStrategy = React.useMemo(
6682
6722
  () => new TronChainStrategy({
6683
6723
  tronLink: {
6684
6724
  address: tronWallet.tronLink.address,
@@ -6708,11 +6748,11 @@ function ChainStrategyProvider({
6708
6748
  tronApiKey
6709
6749
  ]
6710
6750
  );
6711
- const chainRegistry = react.useMemo(
6751
+ const chainRegistry = React.useMemo(
6712
6752
  () => new ChainStrategyRegistry([evmStrategy, tonStrategy, tronStrategy]),
6713
6753
  [evmStrategy, tonStrategy, tronStrategy]
6714
6754
  );
6715
- const value = react.useMemo(
6755
+ const value = React.useMemo(
6716
6756
  () => ({
6717
6757
  chainRegistry
6718
6758
  }),
@@ -6930,10 +6970,10 @@ const TokenSelectModal = ({
6930
6970
  onChangeAsset
6931
6971
  }) => {
6932
6972
  const { t: t2 } = useBridgeTranslation();
6933
- const [query, setQuery] = react.useState("");
6934
- const [tab, setTab] = react.useState("my");
6935
- const [manualTabSwitch, setManualTabSwitch] = react.useState(false);
6936
- 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);
6937
6977
  const { srcAddress } = useAddresses();
6938
6978
  const { fromChain, toChain, setFromChain, chains } = useChainsStore();
6939
6979
  const { assetMatrix, selectedAssetSymbol } = useTokensStore();
@@ -6942,20 +6982,20 @@ const TokenSelectModal = ({
6942
6982
  fromChain?.chainKey,
6943
6983
  srcAddress
6944
6984
  );
6945
- const hasSourceWallet = react.useCallback(() => {
6985
+ const hasSourceWallet = React.useCallback(() => {
6946
6986
  return hasWalletForChain(fromChain?.chainKey);
6947
6987
  }, [hasWalletForChain, fromChain?.chainKey]);
6948
- react.useEffect(() => {
6988
+ React.useEffect(() => {
6949
6989
  if (!hasSourceWallet()) setTab("all");
6950
6990
  }, [hasSourceWallet]);
6951
- const getTokenUsdValue = react.useCallback(
6991
+ const getTokenUsdValue = React.useCallback(
6952
6992
  (symbol, price) => {
6953
6993
  const bal = getBalance(symbol);
6954
6994
  return bal > 0 && price ? bal * price : 0;
6955
6995
  },
6956
6996
  [getBalance]
6957
6997
  );
6958
- const isTokenAvailableOnChain = react.useCallback(
6998
+ const isTokenAvailableOnChain = React.useCallback(
6959
6999
  (symbol, chainKey) => {
6960
7000
  if (!assetMatrix || !chainKey) return false;
6961
7001
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6963,7 +7003,7 @@ const TokenSelectModal = ({
6963
7003
  },
6964
7004
  [assetMatrix]
6965
7005
  );
6966
- const findFirstAvailableChain = react.useCallback(
7006
+ const findFirstAvailableChain = React.useCallback(
6967
7007
  (symbol) => {
6968
7008
  if (!assetMatrix || !chains) return void 0;
6969
7009
  const tokensByChain = assetMatrix[symbol.toUpperCase()];
@@ -6976,7 +7016,7 @@ const TokenSelectModal = ({
6976
7016
  },
6977
7017
  [assetMatrix, chains]
6978
7018
  );
6979
- const groupedTokens = react.useMemo(() => {
7019
+ const groupedTokens = React.useMemo(() => {
6980
7020
  const q3 = query.trim().toLowerCase();
6981
7021
  const filtered = q3 ? items.filter(
6982
7022
  (a2) => a2.name.toLowerCase().includes(q3) || a2.symbol.toLowerCase().includes(q3)
@@ -7026,33 +7066,33 @@ const TokenSelectModal = ({
7026
7066
  ]);
7027
7067
  const myTokens = groupedTokens.withBalance;
7028
7068
  const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
7029
- react.useEffect(() => {
7069
+ React.useEffect(() => {
7030
7070
  if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
7031
7071
  setTab("all");
7032
7072
  }
7033
7073
  }, [query, tab, myTokens.length, manualTabSwitch]);
7034
- react.useEffect(() => {
7074
+ React.useEffect(() => {
7035
7075
  if (query.trim() !== "" && tab === "all" && myTokens.length > 0 && !manualTabSwitch) {
7036
7076
  setTab("my");
7037
7077
  }
7038
7078
  }, [query, tab, myTokens.length, manualTabSwitch]);
7039
- react.useEffect(() => {
7079
+ React.useEffect(() => {
7040
7080
  setManualTabSwitch(false);
7041
7081
  }, [query]);
7042
- const resetState = react.useCallback(() => {
7082
+ const resetState = React.useCallback(() => {
7043
7083
  setQuery("");
7044
7084
  setTab("my");
7045
7085
  setManualTabSwitch(false);
7046
7086
  }, []);
7047
- const handleClose = react.useCallback(() => {
7087
+ const handleClose = React.useCallback(() => {
7048
7088
  resetState();
7049
7089
  onClose();
7050
7090
  }, [onClose, resetState]);
7051
- react.useEffect(() => {
7091
+ React.useEffect(() => {
7052
7092
  if (!isOpen) resetState();
7053
7093
  }, [isOpen, resetState]);
7054
- react.useEffect(() => () => resetState(), [resetState]);
7055
- const onPick = react.useCallback(
7094
+ React.useEffect(() => () => resetState(), [resetState]);
7095
+ const onPick = React.useCallback(
7056
7096
  (sym, willChangeSrcChain = false, willChangeDstChain = false, willChangeBothChains = false) => {
7057
7097
  onChangeAsset(sym);
7058
7098
  if (willChangeBothChains) {
@@ -7066,7 +7106,7 @@ const TokenSelectModal = ({
7066
7106
  },
7067
7107
  [findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
7068
7108
  );
7069
- const tokensToRender = react.useMemo(() => {
7109
+ const tokensToRender = React.useMemo(() => {
7070
7110
  if (effectiveTab === "my") {
7071
7111
  return myTokens.map((token) => ({
7072
7112
  token,
@@ -7085,21 +7125,21 @@ const TokenSelectModal = ({
7085
7125
  ];
7086
7126
  return mainTokens;
7087
7127
  }, [effectiveTab, myTokens, groupedTokens]);
7088
- const willChangeDstTokens = react.useMemo(
7128
+ const willChangeDstTokens = React.useMemo(
7089
7129
  () => groupedTokens.willChangeDstChain.map((token) => ({
7090
7130
  token,
7091
7131
  willChangeDst: true
7092
7132
  })),
7093
7133
  [groupedTokens.willChangeDstChain]
7094
7134
  );
7095
- const willChangeSrcTokens = react.useMemo(
7135
+ const willChangeSrcTokens = React.useMemo(
7096
7136
  () => groupedTokens.willChangeSrcChain.map((token) => ({
7097
7137
  token,
7098
7138
  willChangeSrc: true
7099
7139
  })),
7100
7140
  [groupedTokens.willChangeSrcChain]
7101
7141
  );
7102
- const willChangeBothTokens = react.useMemo(
7142
+ const willChangeBothTokens = React.useMemo(
7103
7143
  () => groupedTokens.willChangeBothChains.map((token) => ({
7104
7144
  token,
7105
7145
  willChangeBoth: true
@@ -7107,7 +7147,7 @@ const TokenSelectModal = ({
7107
7147
  [groupedTokens.willChangeBothChains]
7108
7148
  );
7109
7149
  const hasNoResults = tokensToRender.length === 0 && willChangeDstTokens.length === 0 && willChangeSrcTokens.length === 0 && willChangeBothTokens.length === 0;
7110
- const virtualItems = react.useMemo(() => {
7150
+ const virtualItems = React.useMemo(() => {
7111
7151
  const items2 = tokensToRender.map(
7112
7152
  ({ token, willChangeSrc }) => ({
7113
7153
  type: "token",
@@ -7152,7 +7192,7 @@ const TokenSelectModal = ({
7152
7192
  }
7153
7193
  return items2;
7154
7194
  }, [effectiveTab, tokensToRender, t2, willChangeDstTokens, willChangeSrcTokens, willChangeBothTokens]);
7155
- react.useLayoutEffect(() => {
7195
+ React.useLayoutEffect(() => {
7156
7196
  const updateHeight = () => {
7157
7197
  const container2 = document.getElementById("token-select-list");
7158
7198
  if (!container2) return;
@@ -7175,7 +7215,7 @@ const TokenSelectModal = ({
7175
7215
  resizeObserver?.disconnect();
7176
7216
  };
7177
7217
  }, [isOpen, hasSourceWallet]);
7178
- const VirtualRow = react.useCallback(
7218
+ const VirtualRow = React.useCallback(
7179
7219
  ({ index, style }) => {
7180
7220
  const item = virtualItems[index];
7181
7221
  if (!item) return null;
@@ -7219,7 +7259,7 @@ const TokenSelectModal = ({
7219
7259
  virtualItems
7220
7260
  ]
7221
7261
  );
7222
- const itemKey = react.useCallback(
7262
+ const itemKey = React.useCallback(
7223
7263
  (index) => {
7224
7264
  const item = virtualItems[index];
7225
7265
  if (!item) return index;
@@ -7296,8 +7336,8 @@ function useBridgeRefresh() {
7296
7336
  const { fromChain, toChain } = useChainsStore();
7297
7337
  const { setLoading: setQLoading, triggerRefetch } = useBridgeQuoteStore();
7298
7338
  const { hasAnyWallet } = useConnectedWalletsStore();
7299
- const [spinning, setSpinning] = react.useState(false);
7300
- const refresh = react.useCallback(async () => {
7339
+ const [spinning, setSpinning] = React.useState(false);
7340
+ const refresh = React.useCallback(async () => {
7301
7341
  setSpinning(true);
7302
7342
  try {
7303
7343
  setQLoading();
@@ -7350,8 +7390,8 @@ function useBridgeRefresh() {
7350
7390
  }
7351
7391
  const RefreshButton = () => {
7352
7392
  const { refresh, spinning } = useBridgeRefresh();
7353
- const [turns, setTurns] = react.useState(0);
7354
- const handleRefresh = react.useCallback(() => {
7393
+ const [turns, setTurns] = React.useState(0);
7394
+ const handleRefresh = React.useCallback(() => {
7355
7395
  setTurns((t2) => t2 + 1);
7356
7396
  refresh();
7357
7397
  }, [refresh]);
@@ -7380,7 +7420,7 @@ const SelectTokenButton = ({
7380
7420
  token
7381
7421
  }) => {
7382
7422
  const { t: t2 } = useBridgeTranslation();
7383
- const label = react.useMemo(() => {
7423
+ const label = React.useMemo(() => {
7384
7424
  return token?.symbol ?? t2("bridge.selectToken");
7385
7425
  }, [token, t2]);
7386
7426
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -7418,8 +7458,8 @@ const Toolbar = () => {
7418
7458
  onOpen: onOpenSettings
7419
7459
  } = useModal();
7420
7460
  const { tokens, selectedAssetSymbol, setSelectedAssetSymbol } = useTokensStore();
7421
- const assets = react.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7422
- const current = react.useMemo(() => {
7461
+ const assets = React.useMemo(() => listAssetsForSelect(tokens || []), [tokens]);
7462
+ const current = React.useMemo(() => {
7423
7463
  if (!assets.length) return void 0;
7424
7464
  if (!selectedAssetSymbol) return assets[0];
7425
7465
  const sum = selectedAssetSymbol.toUpperCase();
@@ -7465,8 +7505,8 @@ const useAutoSelectNetwork = ({
7465
7505
  }) => {
7466
7506
  const { hasAnyWallet } = useConnectedWalletsStore();
7467
7507
  const { chains, setFromChain } = useChainsStore();
7468
- const previousHadWallet = react.useRef(hasAnyWallet());
7469
- react.useEffect(() => {
7508
+ const previousHadWallet = React.useRef(hasAnyWallet());
7509
+ React.useEffect(() => {
7470
7510
  const currentHasWallet = hasAnyWallet();
7471
7511
  const isFirstWalletConnection = !previousHadWallet.current && currentHasWallet;
7472
7512
  if (isFirstWalletConnection && chains?.length) {
@@ -26107,7 +26147,7 @@ class WalletConnectModal {
26107
26147
  }
26108
26148
  async initUi() {
26109
26149
  if (typeof window !== "undefined") {
26110
- await Promise.resolve().then(() => require("./index-DzUouoJg.cjs"));
26150
+ await Promise.resolve().then(() => require("./index-Btnz7slS.cjs"));
26111
26151
  const modal = document.createElement("wcm-modal");
26112
26152
  document.body.insertAdjacentElement("beforeend", modal);
26113
26153
  OptionsCtrl.setIsUiLoaded(true);
@@ -26213,16 +26253,16 @@ function isSessionExpiredError(error) {
26213
26253
  function useTronWalletConnect(projectId) {
26214
26254
  const { address, isConnected, isConnecting } = useTronWalletConnectStore();
26215
26255
  const { setAddress, setActions, reset } = useTronWalletConnectStore();
26216
- const providerRef = react.useRef(null);
26217
- const modalRef = react.useRef(null);
26218
- const abortControllerRef = react.useRef(null);
26256
+ const providerRef = React.useRef(null);
26257
+ const modalRef = React.useRef(null);
26258
+ const abortControllerRef = React.useRef(null);
26219
26259
  const { onClose: closeWalletSelectModal } = useWalletSelectModal();
26220
26260
  const appliedTheme = useThemeStore((state2) => state2.appliedTheme);
26221
- const closeWalletSelectModalRef = react.useRef(closeWalletSelectModal);
26261
+ const closeWalletSelectModalRef = React.useRef(closeWalletSelectModal);
26222
26262
  closeWalletSelectModalRef.current = closeWalletSelectModal;
26223
- const appliedThemeRef = react.useRef(appliedTheme);
26263
+ const appliedThemeRef = React.useRef(appliedTheme);
26224
26264
  appliedThemeRef.current = appliedTheme;
26225
- react.useEffect(() => {
26265
+ React.useEffect(() => {
26226
26266
  if (!projectId || providerRef.current) return;
26227
26267
  const initProvider = async () => {
26228
26268
  try {
@@ -26295,7 +26335,7 @@ function useTronWalletConnect(projectId) {
26295
26335
  }
26296
26336
  };
26297
26337
  }, [projectId, setAddress]);
26298
- react.useEffect(() => {
26338
+ React.useEffect(() => {
26299
26339
  if (!projectId || !modalRef.current) return;
26300
26340
  const modal = new WalletConnectModal({
26301
26341
  projectId,
@@ -26307,7 +26347,7 @@ function useTronWalletConnect(projectId) {
26307
26347
  });
26308
26348
  modalRef.current = modal;
26309
26349
  }, [appliedTheme, projectId]);
26310
- const connect = react.useCallback(async () => {
26350
+ const connect = React.useCallback(async () => {
26311
26351
  if (!providerRef.current) {
26312
26352
  throw new Error(
26313
26353
  "WalletConnect not initialized. Please provide a valid project ID."
@@ -26375,7 +26415,7 @@ function useTronWalletConnect(projectId) {
26375
26415
  abortControllerRef.current = null;
26376
26416
  }
26377
26417
  }, [setAddress]);
26378
- const cancelConnection = react.useCallback(() => {
26418
+ const cancelConnection = React.useCallback(() => {
26379
26419
  if (abortControllerRef.current) {
26380
26420
  abortControllerRef.current.abort();
26381
26421
  console.log("TRON WalletConnect connection cancelled");
@@ -26384,7 +26424,7 @@ function useTronWalletConnect(projectId) {
26384
26424
  modalRef.current.closeModal();
26385
26425
  }
26386
26426
  }, []);
26387
- const disconnect = react.useCallback(async () => {
26427
+ const disconnect = React.useCallback(async () => {
26388
26428
  if (!providerRef.current) return;
26389
26429
  try {
26390
26430
  await providerRef.current.disconnect();
@@ -26395,7 +26435,7 @@ function useTronWalletConnect(projectId) {
26395
26435
  throw error;
26396
26436
  }
26397
26437
  }, [reset]);
26398
- const signTransaction = react.useCallback(
26438
+ const signTransaction = React.useCallback(
26399
26439
  async (transaction2) => {
26400
26440
  if (!providerRef.current) {
26401
26441
  throw new Error("WalletConnect not initialized");
@@ -26462,7 +26502,7 @@ function useTronWalletConnect(projectId) {
26462
26502
  },
26463
26503
  [address, setAddress]
26464
26504
  );
26465
- const onAddressCorrected = react.useCallback(
26505
+ const onAddressCorrected = React.useCallback(
26466
26506
  (correctedAddress) => {
26467
26507
  console.log(
26468
26508
  "TRON WalletConnect address corrected:",
@@ -26474,7 +26514,7 @@ function useTronWalletConnect(projectId) {
26474
26514
  },
26475
26515
  [address, setAddress]
26476
26516
  );
26477
- react.useEffect(() => {
26517
+ React.useEffect(() => {
26478
26518
  setActions({
26479
26519
  connect,
26480
26520
  disconnect,
@@ -26532,10 +26572,10 @@ function useUrlSync(options) {
26532
26572
  const { setInputAmount } = useBridgeQuoteStore();
26533
26573
  const internalData = useBridgeExternalData();
26534
26574
  const currentUrlParams = internalData.urlParams;
26535
- const [hasInitialized, setHasInitialized] = react.useState(false);
26536
- const isSyncingRef = react.useRef(false);
26537
- const lastSyncedParamsRef = react.useRef({});
26538
- 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(
26539
26579
  (urlParams) => {
26540
26580
  const result = {};
26541
26581
  if (!chains?.length || !tokens?.length || !assetMatrix) {
@@ -26588,7 +26628,7 @@ function useUrlSync(options) {
26588
26628
  },
26589
26629
  [chains, tokens, assetMatrix]
26590
26630
  );
26591
- const syncStateToUrl = react.useCallback(
26631
+ const syncStateToUrl = React.useCallback(
26592
26632
  (includeAmount = false) => {
26593
26633
  if (!enabled || isSyncingRef.current || !hasInitialized) {
26594
26634
  return;
@@ -26610,11 +26650,11 @@ function useUrlSync(options) {
26610
26650
  },
26611
26651
  [enabled, hasInitialized, currentUrlParams, onUrlParamsChange]
26612
26652
  );
26613
- const handleAmountBlur = react.useCallback(() => {
26653
+ const handleAmountBlur = React.useCallback(() => {
26614
26654
  if (!enabled || !hasInitialized) return;
26615
26655
  syncStateToUrl(true);
26616
26656
  }, [enabled, hasInitialized, syncStateToUrl]);
26617
- react.useEffect(() => {
26657
+ React.useEffect(() => {
26618
26658
  if (!enabled || !chains?.length || !tokens?.length) {
26619
26659
  return;
26620
26660
  }
@@ -26660,7 +26700,7 @@ function useUrlSync(options) {
26660
26700
  setInputAmount,
26661
26701
  setIsUrlInitialized
26662
26702
  ]);
26663
- react.useEffect(() => {
26703
+ React.useEffect(() => {
26664
26704
  if (!enabled || !hasInitialized) return;
26665
26705
  syncStateToUrl(false);
26666
26706
  }, [
@@ -26684,7 +26724,7 @@ const EvaaBridgeWithProviders = (props) => {
26684
26724
  const { disconnect: evmDisconnect } = wagmi.useDisconnect();
26685
26725
  const { data: walletClient } = wagmi.useWalletClient();
26686
26726
  const publicClient = wagmi.usePublicClient();
26687
- const getPublicClientForChain = react.useCallback(
26727
+ const getPublicClientForChain = React.useCallback(
26688
26728
  (chainId) => {
26689
26729
  try {
26690
26730
  const client = wagmiConfig.getClient({
@@ -26704,15 +26744,15 @@ const EvaaBridgeWithProviders = (props) => {
26704
26744
  connect: tronConnect,
26705
26745
  disconnect: tronDisconnect
26706
26746
  } = tronwalletAdapterReactHooks.useWallet();
26707
- const tronSelectRef = react.useRef(tronSelect);
26708
- const tronConnectRef = react.useRef(tronConnect);
26709
- const tronDisconnectRef = react.useRef(tronDisconnect);
26710
- react.useEffect(() => {
26747
+ const tronSelectRef = React.useRef(tronSelect);
26748
+ const tronConnectRef = React.useRef(tronConnect);
26749
+ const tronDisconnectRef = React.useRef(tronDisconnect);
26750
+ React.useEffect(() => {
26711
26751
  tronSelectRef.current = tronSelect;
26712
26752
  tronConnectRef.current = tronConnect;
26713
26753
  tronDisconnectRef.current = tronDisconnect;
26714
26754
  }, [tronSelect, tronConnect, tronDisconnect]);
26715
- const tronLinkActions = react.useMemo(
26755
+ const tronLinkActions = React.useMemo(
26716
26756
  () => ({
26717
26757
  select: (adapterName) => tronSelectRef.current(adapterName),
26718
26758
  connect: () => tronConnectRef.current(),
@@ -26722,14 +26762,14 @@ const EvaaBridgeWithProviders = (props) => {
26722
26762
  );
26723
26763
  const tronWalletConnect = useTronWalletConnect(props.walletConnectProjectId);
26724
26764
  const { setTonConnected, setMetaMaskConnected, setTronConnected } = useConnectedWalletsStore();
26725
- react.useEffect(() => {
26765
+ React.useEffect(() => {
26726
26766
  setTonConnected(!!tonAddress);
26727
26767
  }, [tonAddress, setTonConnected]);
26728
- react.useEffect(() => {
26768
+ React.useEffect(() => {
26729
26769
  setMetaMaskConnected(!!evmIsConnected);
26730
26770
  }, [evmIsConnected, setMetaMaskConnected]);
26731
26771
  const isAnyTronConnected = !!tronConnected || !!tronWalletConnect.isConnected;
26732
- react.useEffect(() => {
26772
+ React.useEffect(() => {
26733
26773
  setTronConnected(isAnyTronConnected);
26734
26774
  }, [isAnyTronConnected, setTronConnected]);
26735
26775
  useAutoSelectNetwork({
@@ -26818,7 +26858,7 @@ const EvaaBridgeContent = ({
26818
26858
  const canSwap = Boolean(
26819
26859
  fromChain && toChain && selectedAssetSymbol && isAllowedFromChain(toChain.chainKey)
26820
26860
  );
26821
- const outputAmount = react.useMemo(() => {
26861
+ const outputAmount = React.useMemo(() => {
26822
26862
  if (!quote || loading) return "";
26823
26863
  const srcToken = resolveTokenOnChainFromMatrix$1(
26824
26864
  assetMatrix,
@@ -26840,35 +26880,35 @@ const EvaaBridgeContent = ({
26840
26880
  fromChain?.chainKey,
26841
26881
  toChain?.chainKey
26842
26882
  ]);
26843
- react.useEffect(() => {
26883
+ React.useEffect(() => {
26844
26884
  if (chains?.length && onInitialized) {
26845
26885
  onInitialized();
26846
26886
  }
26847
26887
  }, [chains, onInitialized]);
26848
- const handleAmountChange = react.useCallback(
26888
+ const handleAmountChange = React.useCallback(
26849
26889
  (newAmount) => {
26850
26890
  setAmountAction(newAmount);
26851
26891
  },
26852
26892
  [setAmountAction]
26853
26893
  );
26854
- const handleFromChainChange = react.useCallback(
26894
+ const handleFromChainChange = React.useCallback(
26855
26895
  (chain2) => {
26856
26896
  if (!chain2) return;
26857
26897
  setFromChainAction(chain2);
26858
26898
  },
26859
26899
  [setFromChainAction]
26860
26900
  );
26861
- const handleToChainChange = react.useCallback(
26901
+ const handleToChainChange = React.useCallback(
26862
26902
  (chain2) => {
26863
26903
  if (!chain2) return;
26864
26904
  setToChainAction(chain2);
26865
26905
  },
26866
26906
  [setToChainAction]
26867
26907
  );
26868
- const handleSwapSides = react.useCallback(() => {
26908
+ const handleSwapSides = React.useCallback(() => {
26869
26909
  swap.actions.swapSides();
26870
26910
  }, [swap.actions]);
26871
- const destinationChains = react.useMemo(() => {
26911
+ const destinationChains = React.useMemo(() => {
26872
26912
  if (!chains || !selectedAssetSymbol || !assetMatrix) {
26873
26913
  return allowedToChains ?? [];
26874
26914
  }
@@ -26881,7 +26921,7 @@ const EvaaBridgeContent = ({
26881
26921
  fromChain?.chainKey,
26882
26922
  selectedAssetSymbol
26883
26923
  ]);
26884
- const sourceChains = react.useMemo(() => {
26924
+ const sourceChains = React.useMemo(() => {
26885
26925
  if (!chains || !assetMatrix) {
26886
26926
  return allowedFromChains ?? [];
26887
26927
  }
@@ -27009,4 +27049,4 @@ exports.useSettingsStore = useSettingsStore;
27009
27049
  exports.useSwapModel = useSwapModel;
27010
27050
  exports.useTokensStore = useTokensStore;
27011
27051
  exports.useTransactionStore = useTransactionStore;
27012
- //# sourceMappingURL=index-CbuEGPY8.cjs.map
27052
+ //# sourceMappingURL=index-bZ0S5sNd.cjs.map