@rash2x/bridge-widget 0.6.34 → 0.6.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const index = require("./index-DvjGvKnp.cjs");
3
+ const index = require("./index-BXp-N4UF.cjs");
4
4
  exports.DEFAULT_SLIPPAGE_BPS = index.DEFAULT_SLIPPAGE_BPS;
5
5
  exports.EvaaBridge = index.EvaaBridge;
6
6
  exports.RoutePriority = index.RoutePriority;
@@ -1,4 +1,4 @@
1
- import { U, d, f, e, H, B, F, X, N, z, $, G, A, D, Z, w, s, v, r, p, q, L, a2, aa, a4, a7, x, I, y, a5, J, a3, a8, a9, Y, a6, W, P, _, a1, ab, Q, S, a0, K, V, t, o, i, u, l, m, j, n, h, k } from "./index-CO2PQtBo.js";
1
+ import { U, d, f, e, H, B, F, X, N, z, $, G, A, D, Z, w, s, v, r, p, q, L, a2, aa, a4, a7, x, I, y, a5, J, a3, a8, a9, Y, a6, W, P, _, a1, ab, Q, S, a0, K, V, t, o, i, u, l, m, j, n, h, k } from "./index-DvKN7Y1C.js";
2
2
  export {
3
3
  U as DEFAULT_SLIPPAGE_BPS,
4
4
  d as EvaaBridge,
@@ -31,6 +31,7 @@ const viem = require("viem");
31
31
  const tronwalletAdapters = require("@tronweb3/tronwallet-adapters");
32
32
  const tronweb = require("tronweb");
33
33
  const card = require("@/components/ui/card");
34
+ const reactWindow = require("react-window");
34
35
  const common$1 = { "connecting": "Connecting…", "initializing": "Initializing...", "loading": "Loading...", "paste": "paste", "close": "Close", "zeroPlaceholder": "0", "nativeToken": "Native Token" };
35
36
  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" };
36
37
  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", "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" };
@@ -6715,6 +6716,7 @@ const SettingsModal = ({ isOpen, onClose }) => {
6715
6716
  }
6716
6717
  ) });
6717
6718
  };
6719
+ const TOKEN_ROW_HEIGHT = 52;
6718
6720
  const TokenRow = ({
6719
6721
  symbol,
6720
6722
  name,
@@ -6766,17 +6768,21 @@ const TokenSelectModal = ({
6766
6768
  const [query, setQuery] = react.useState("");
6767
6769
  const [tab, setTab] = react.useState("my");
6768
6770
  const [manualTabSwitch, setManualTabSwitch] = react.useState(false);
6771
+ const [listHeight, setListHeight] = react.useState(400);
6769
6772
  const { srcAddress } = useAddresses();
6770
6773
  const { fromChain, setFromChain, chains } = useChainsStore();
6771
6774
  const { assetMatrix, selectedAssetSymbol } = useTokensStore();
6772
- const { hasAnyWallet } = useConnectedWalletsStore();
6775
+ const { hasAnyWallet, hasWalletForChain } = useConnectedWalletsStore();
6773
6776
  const { getBalance, query: balancesQuery } = useBalances(
6774
6777
  fromChain?.chainKey,
6775
6778
  srcAddress
6776
6779
  );
6780
+ const hasSourceWallet = react.useCallback(() => {
6781
+ return hasWalletForChain(fromChain?.chainKey);
6782
+ }, [hasWalletForChain, fromChain?.chainKey]);
6777
6783
  react.useEffect(() => {
6778
- if (!hasAnyWallet()) setTab("all");
6779
- }, [hasAnyWallet]);
6784
+ if (!hasSourceWallet()) setTab("all");
6785
+ }, [hasSourceWallet]);
6780
6786
  const getTokenUsdValue = react.useCallback(
6781
6787
  (symbol, price) => {
6782
6788
  const bal = getBalance(symbol);
@@ -6843,7 +6849,7 @@ const TokenSelectModal = ({
6843
6849
  getTokenUsdValue
6844
6850
  ]);
6845
6851
  const myTokens = groupedTokens.withBalance;
6846
- const effectiveTab = hasAnyWallet() ? tab : "all";
6852
+ const effectiveTab = hasSourceWallet() ? tab === "my" && myTokens.length === 0 && !manualTabSwitch ? "all" : tab : "all";
6847
6853
  react.useEffect(() => {
6848
6854
  if (query.trim() !== "" && tab === "my" && myTokens.length === 0 && !manualTabSwitch) {
6849
6855
  setTab("all");
@@ -6870,14 +6876,17 @@ const TokenSelectModal = ({
6870
6876
  if (!isOpen) resetState();
6871
6877
  }, [isOpen, resetState]);
6872
6878
  react.useEffect(() => () => resetState(), [resetState]);
6873
- const onPick = (sym, willChangeSrcChain = false) => {
6874
- if (willChangeSrcChain) {
6875
- const newChain = findFirstAvailableChain(sym);
6876
- if (newChain && setFromChain) setFromChain(newChain);
6877
- }
6878
- onChangeAsset(sym);
6879
- handleClose();
6880
- };
6879
+ const onPick = react.useCallback(
6880
+ (sym, willChangeSrcChain = false) => {
6881
+ if (willChangeSrcChain) {
6882
+ const newChain = findFirstAvailableChain(sym);
6883
+ if (newChain && setFromChain) setFromChain(newChain);
6884
+ }
6885
+ onChangeAsset(sym);
6886
+ handleClose();
6887
+ },
6888
+ [findFirstAvailableChain, handleClose, onChangeAsset, setFromChain]
6889
+ );
6881
6890
  const tokensToRender = react.useMemo(() => {
6882
6891
  if (effectiveTab === "my") {
6883
6892
  return myTokens.map((token) => ({
@@ -6905,6 +6914,103 @@ const TokenSelectModal = ({
6905
6914
  [groupedTokens.willChangeSrcChain]
6906
6915
  );
6907
6916
  const hasNoResults = tokensToRender.length === 0 && willChangeSrcTokens.length === 0;
6917
+ const virtualItems = react.useMemo(() => {
6918
+ const items2 = tokensToRender.map(
6919
+ ({ token, willChangeSrc }) => ({
6920
+ type: "token",
6921
+ data: { token, willChangeSrc }
6922
+ })
6923
+ );
6924
+ if (effectiveTab === "all" && willChangeSrcTokens.length > 0) {
6925
+ items2.push({
6926
+ type: "header",
6927
+ text: t2("bridge.willChangeSourceChain")
6928
+ });
6929
+ items2.push(
6930
+ ...willChangeSrcTokens.map(({ token, willChangeSrc }) => ({
6931
+ type: "token",
6932
+ data: { token, willChangeSrc }
6933
+ }))
6934
+ );
6935
+ }
6936
+ return items2;
6937
+ }, [effectiveTab, tokensToRender, t2, willChangeSrcTokens]);
6938
+ react.useLayoutEffect(() => {
6939
+ const updateHeight = () => {
6940
+ const container2 = document.getElementById("token-select-list");
6941
+ console.log("CONTAINER", container2);
6942
+ if (!container2) return;
6943
+ const height = container2.getBoundingClientRect().height;
6944
+ if (height > 0) {
6945
+ setListHeight(height);
6946
+ }
6947
+ };
6948
+ updateHeight();
6949
+ const timeout1 = setTimeout(updateHeight, 0);
6950
+ const timeout2 = setTimeout(updateHeight, 300);
6951
+ const resizeObserver = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => {
6952
+ updateHeight();
6953
+ }) : void 0;
6954
+ const container = document.getElementById("token-select-list");
6955
+ if (container) resizeObserver?.observe(container);
6956
+ return () => {
6957
+ clearTimeout(timeout1);
6958
+ clearTimeout(timeout2);
6959
+ resizeObserver?.disconnect();
6960
+ };
6961
+ }, [isOpen, hasSourceWallet]);
6962
+ const VirtualRow = react.useCallback(
6963
+ ({ index, style }) => {
6964
+ const item = virtualItems[index];
6965
+ if (!item) return null;
6966
+ if (item.type === "header") {
6967
+ return /* @__PURE__ */ jsxRuntime.jsx(
6968
+ "div",
6969
+ {
6970
+ style: { ...style, height: TOKEN_ROW_HEIGHT },
6971
+ className: "px-5 flex leading-4 text-base py-2 text-muted-foreground uppercase mt-8",
6972
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: item.text })
6973
+ }
6974
+ );
6975
+ }
6976
+ const { token, willChangeSrc } = item.data;
6977
+ const bal = getBalance(token.symbol);
6978
+ const usd = getTokenUsdValue(token.symbol, token.price?.usd);
6979
+ const isSelected = selectedAssetSymbol?.toUpperCase() === token.symbol.toUpperCase();
6980
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { ...style, height: TOKEN_ROW_HEIGHT }, children: /* @__PURE__ */ jsxRuntime.jsx(
6981
+ TokenRow,
6982
+ {
6983
+ symbol: token.symbol,
6984
+ name: token.name,
6985
+ isSelected: !!isSelected,
6986
+ hasAnyWallet: hasAnyWallet(),
6987
+ balance: bal,
6988
+ usdValue: usd,
6989
+ isBalanceLoading: balancesQuery.isLoading || balancesQuery.isFetching,
6990
+ onPick: () => onPick(token.symbol, willChangeSrc)
6991
+ }
6992
+ ) });
6993
+ },
6994
+ [
6995
+ balancesQuery.isFetching,
6996
+ balancesQuery.isLoading,
6997
+ getBalance,
6998
+ getTokenUsdValue,
6999
+ hasAnyWallet,
7000
+ onPick,
7001
+ selectedAssetSymbol,
7002
+ virtualItems
7003
+ ]
7004
+ );
7005
+ const itemKey = react.useCallback(
7006
+ (index) => {
7007
+ const item = virtualItems[index];
7008
+ if (!item) return index;
7009
+ if (item.type === "header") return `header-${index}-${item.text}`;
7010
+ return `${effectiveTab}:${item.data.token.symbol}:${item.data.willChangeSrc ? "will" : "on"}`;
7011
+ },
7012
+ [effectiveTab, virtualItems]
7013
+ );
6908
7014
  return /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog, { open: isOpen, onOpenChange: (open) => !open && handleClose(), children: /* @__PURE__ */ jsxRuntime.jsxs(dialog.DialogContent, { className: "max-h-[90dvh] h-[90dvh] overflow-hidden flex flex-col p-10 pt-7", children: [
6909
7015
  /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogHeader, { className: "text-left", children: /* @__PURE__ */ jsxRuntime.jsx(dialog.DialogTitle, { className: "text-2xl leading-8", children: t2("bridge.selectToken") }) }),
6910
7016
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -6915,11 +7021,11 @@ const TokenSelectModal = ({
6915
7021
  onChange: setQuery
6916
7022
  }
6917
7023
  ),
6918
- hasAnyWallet() && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
6919
- myTokens.length !== 0 && /* @__PURE__ */ jsxRuntime.jsx(
7024
+ hasSourceWallet() && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2", children: [
7025
+ /* @__PURE__ */ jsxRuntime.jsx(
6920
7026
  button.Button,
6921
7027
  {
6922
- variant: tab === "my" ? "default" : "ghost",
7028
+ variant: effectiveTab === "my" ? "default" : "ghost",
6923
7029
  onClick: () => {
6924
7030
  setTab("my");
6925
7031
  setManualTabSwitch(true);
@@ -6927,7 +7033,7 @@ const TokenSelectModal = ({
6927
7033
  size: "sm",
6928
7034
  className: utils$1.cn(
6929
7035
  "px-4 cursor-pointer",
6930
- tab !== "my" && "bg-muted hover:bg-accent"
7036
+ effectiveTab !== "my" && "bg-muted hover:bg-accent"
6931
7037
  ),
6932
7038
  children: t2("bridge.myTokens")
6933
7039
  }
@@ -6935,7 +7041,7 @@ const TokenSelectModal = ({
6935
7041
  /* @__PURE__ */ jsxRuntime.jsx(
6936
7042
  button.Button,
6937
7043
  {
6938
- variant: tab === "all" ? "default" : "ghost",
7044
+ variant: effectiveTab === "all" ? "default" : "ghost",
6939
7045
  onClick: () => {
6940
7046
  setTab("all");
6941
7047
  setManualTabSwitch(true);
@@ -6943,58 +7049,27 @@ const TokenSelectModal = ({
6943
7049
  size: "sm",
6944
7050
  className: utils$1.cn(
6945
7051
  "px-4 cursor-pointer",
6946
- tab !== "all" && "bg-muted hover:bg-accent"
7052
+ effectiveTab !== "all" && "bg-muted hover:bg-accent"
6947
7053
  ),
6948
7054
  children: t2("bridge.allTokens")
6949
7055
  }
6950
7056
  )
6951
7057
  ] }),
6952
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 overflow-y-auto -mx-5", children: hasNoResults ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center", children: t2("bridge.tokenNotFound") }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7058
+ /* @__PURE__ */ jsxRuntime.jsx("div", { id: "token-select-list", className: "flex-1 -mx-5 min-h-0", children: hasNoResults ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground px-12 py-2 h-28 flex items-center justify-center text-center", children: t2("bridge.tokenNotFound") }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6953
7059
  effectiveTab === "my" && myTokens.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "leading-4 px-5 text-base text-muted-foreground uppercase py-2", children: t2("bridge.noBalancesFound") }),
6954
- tokensToRender.map(({ token, willChangeSrc }) => {
6955
- const bal = getBalance(token.symbol);
6956
- const usd = getTokenUsdValue(token.symbol, token.price?.usd);
6957
- const isSelected = selectedAssetSymbol?.toUpperCase() === token.symbol.toUpperCase();
6958
- return /* @__PURE__ */ jsxRuntime.jsx(
6959
- TokenRow,
6960
- {
6961
- symbol: token.symbol,
6962
- name: token.name,
6963
- isSelected: !!isSelected,
6964
- hasAnyWallet: hasAnyWallet(),
6965
- balance: bal,
6966
- usdValue: usd,
6967
- isBalanceLoading: balancesQuery.isLoading || balancesQuery.isFetching,
6968
- onPick: () => onPick(token.symbol, willChangeSrc)
6969
- },
6970
- `${effectiveTab}:${token.symbol}`
6971
- );
6972
- }),
6973
- effectiveTab === "all" && willChangeSrcTokens.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6974
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-5 flex leading-4 text-base py-2 text-muted-foreground uppercase mt-8", children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: t2("bridge.willChangeSourceChain") }) }),
6975
- willChangeSrcTokens.map(({ token, willChangeSrc }) => {
6976
- const bal = getBalance(token.symbol);
6977
- const usd = getTokenUsdValue(
6978
- token.symbol,
6979
- token.price?.usd
6980
- );
6981
- const isSelected = selectedAssetSymbol?.toUpperCase() === token.symbol.toUpperCase();
6982
- return /* @__PURE__ */ jsxRuntime.jsx(
6983
- TokenRow,
6984
- {
6985
- symbol: token.symbol,
6986
- name: token.name,
6987
- isSelected: !!isSelected,
6988
- hasAnyWallet: hasAnyWallet(),
6989
- balance: bal,
6990
- usdValue: usd,
6991
- isBalanceLoading: balancesQuery.isLoading || balancesQuery.isFetching,
6992
- onPick: () => onPick(token.symbol, willChangeSrc)
6993
- },
6994
- `will:${token.symbol}`
6995
- );
6996
- })
6997
- ] })
7060
+ /* @__PURE__ */ jsxRuntime.jsx(
7061
+ reactWindow.FixedSizeList,
7062
+ {
7063
+ height: listHeight,
7064
+ itemCount: virtualItems.length,
7065
+ itemSize: TOKEN_ROW_HEIGHT,
7066
+ width: "100%",
7067
+ itemKey,
7068
+ className: "[&::-webkit-scrollbar]:w-1 [&::-webkit-scrollbar-track]:bg-transparent [&::-webkit-scrollbar-thumb]:bg-muted-foreground/20 [&::-webkit-scrollbar-thumb]:rounded-full hover:[&::-webkit-scrollbar-thumb]:bg-muted-foreground/30",
7069
+ overscanCount: 5,
7070
+ children: VirtualRow
7071
+ }
7072
+ )
6998
7073
  ] }) })
6999
7074
  ] }) });
7000
7075
  };
@@ -25840,7 +25915,7 @@ class WalletConnectModal {
25840
25915
  }
25841
25916
  async initUi() {
25842
25917
  if (typeof window !== "undefined") {
25843
- await Promise.resolve().then(() => require("./index-CmbarigA.cjs"));
25918
+ await Promise.resolve().then(() => require("./index-DJbbVeMD.cjs"));
25844
25919
  const modal = document.createElement("wcm-modal");
25845
25920
  document.body.insertAdjacentElement("beforeend", modal);
25846
25921
  OptionsCtrl.setIsUiLoaded(true);
@@ -26562,4 +26637,4 @@ exports.useSettingsStore = useSettingsStore;
26562
26637
  exports.useSwapModel = useSwapModel;
26563
26638
  exports.useTokensStore = useTokensStore;
26564
26639
  exports.useTransactionStore = useTransactionStore;
26565
- //# sourceMappingURL=index-DvjGvKnp.cjs.map
26640
+ //# sourceMappingURL=index-BXp-N4UF.cjs.map