@wheelx-widget/widget 0.1.4 → 0.1.6

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.
package/dist/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
3
  var React5 = require('react');
4
+ var react = require('@chakra-ui/react');
4
5
  var reactQuery = require('@tanstack/react-query');
5
6
  var sdkReactCore = require('@dynamic-labs/sdk-react-core');
6
7
  var ethereum = require('@dynamic-labs/ethereum');
7
8
  var solana = require('@dynamic-labs/solana');
8
9
  var wagmiConnector = require('@dynamic-labs/wagmi-connector');
9
10
  var wagmi = require('wagmi');
11
+ var viem = require('viem');
10
12
  var chains$1 = require('wagmi/chains');
11
13
  var react$1 = require('@emotion/react');
12
14
  var jsxRuntime = require('react/jsx-runtime');
13
15
  var axios6 = require('axios');
14
16
  var zustand = require('zustand');
15
- var react = require('@chakra-ui/react');
16
17
  var biFraction = require('bi-fraction');
17
- var viem = require('viem');
18
18
  var chains = require('viem/chains');
19
19
  var web3_js = require('@solana/web3.js');
20
20
  var utils = require('viem/utils');
@@ -26,6 +26,8 @@ var io5 = require('react-icons/io5');
26
26
  var fa6 = require('react-icons/fa6');
27
27
  var io = require('react-icons/io');
28
28
  var bs = require('react-icons/bs');
29
+ var hi2 = require('react-icons/hi2');
30
+ var ri = require('react-icons/ri');
29
31
 
30
32
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
31
33
 
@@ -181,7 +183,11 @@ var useWalletConnectedStore = zustand.create((set, get) => ({
181
183
  evmWalletConnectorId: null,
182
184
  setEvmWalletInfo: (address, connectorId) => set({ evmWalletAddress: address, evmWalletConnectorId: connectorId }),
183
185
  isEvmWalletMetamask: false,
184
- setIsEvmWalletMetamask: (isEvmWalletMetamask) => set({ isEvmWalletMetamask })
186
+ setIsEvmWalletMetamask: (isEvmWalletMetamask) => set({ isEvmWalletMetamask }),
187
+ isLoggingOut: false,
188
+ setIsLoggingOut: (isLoggingOut) => set({ isLoggingOut }),
189
+ lastDisconnectTimestamp: 0,
190
+ setLastDisconnectTimestamp: (ts) => set({ lastDisconnectTimestamp: ts })
185
191
  }));
186
192
 
187
193
  // src/stores/useSyncWalletConnectedStore.ts
@@ -191,14 +197,25 @@ var getEvmConnectorId = (wallet) => {
191
197
  };
192
198
  var useSyncWalletConnectedStore = () => {
193
199
  const userWallets = sdkReactCore.useUserWallets();
194
- const { address: wagmiAddress, connector: wagmiConnector, isConnected } = wagmi.useAccount();
200
+ const { address: wagmiAddress, connector: wagmiConnector } = wagmi.useAccount();
195
201
  const {
196
202
  setSolanaWalletAddress,
197
203
  setIsSolanaWalletConnected,
198
204
  setEvmWalletInfo,
199
- setIsEthWalletConnected
205
+ setIsEthWalletConnected,
206
+ isLoggingOut,
207
+ lastDisconnectTimestamp
200
208
  } = useWalletConnectedStore();
201
209
  React5.useEffect(() => {
210
+ if (isLoggingOut) return;
211
+ const msSinceDisconnect = Date.now() - lastDisconnectTimestamp;
212
+ if (msSinceDisconnect < 2e3) {
213
+ const { isEthWalletConnected, isSolanaWalletConnected } = useWalletConnectedStore.getState();
214
+ const hasNoConnectedWallets = !isEthWalletConnected && !isSolanaWalletConnected;
215
+ if (hasNoConnectedWallets) {
216
+ return;
217
+ }
218
+ }
202
219
  const solanaWallet = userWallets.find((wallet) => {
203
220
  const chain = String(
204
221
  wallet.chain ?? ""
@@ -214,15 +231,16 @@ var useSyncWalletConnectedStore = () => {
214
231
  ).toLowerCase();
215
232
  return chain.includes("evm");
216
233
  });
217
- const evmAddress = evmWallet?.address ?? wagmiAddress ?? null;
234
+ const evmAddress = evmWallet?.address ?? (evmWallet ? wagmiAddress : null) ?? null;
218
235
  const evmConnectorId = wagmiConnector?.id ?? getEvmConnectorId(evmWallet) ?? null;
219
236
  setEvmWalletInfo(evmAddress, evmConnectorId);
220
- setIsEthWalletConnected(Boolean(evmAddress || isConnected));
237
+ setIsEthWalletConnected(Boolean(evmAddress));
221
238
  }, [
222
239
  userWallets,
223
240
  wagmiAddress,
224
241
  wagmiConnector?.id,
225
- isConnected,
242
+ isLoggingOut,
243
+ lastDisconnectTimestamp,
226
244
  setSolanaWalletAddress,
227
245
  setIsSolanaWalletConnected,
228
246
  setEvmWalletInfo,
@@ -231,7 +249,8 @@ var useSyncWalletConnectedStore = () => {
231
249
  };
232
250
  var useEvmAddress = () => {
233
251
  const { address } = wagmi.useAccount();
234
- const { evmWalletAddress } = useWalletConnectedStore();
252
+ const { evmWalletAddress, isEthWalletConnected } = useWalletConnectedStore();
253
+ if (!isEthWalletConnected) return void 0;
235
254
  return evmWalletAddress || address;
236
255
  };
237
256
  var FavoritesContext = React5.createContext({
@@ -434,21 +453,140 @@ var useTokenFavoritesContext = () => {
434
453
  if (c === void 0) throw new Error("useTokenFavoritesContext must be used within TokenFavoritesProvider");
435
454
  return c;
436
455
  };
437
- var supportedChains = [chains$1.mainnet, chains$1.base, chains$1.soneium, chains$1.polygon, chains$1.arbitrum, chains$1.optimism, chains$1.sepolia, chains$1.arbitrumSepolia, chains$1.optimismSepolia, chains$1.baseSepolia, chains$1.unichainSepolia, chains$1.arcTestnet];
456
+ var tempo = viem.defineChain({
457
+ id: 4217,
458
+ name: "Tempo",
459
+ network: "Tempo",
460
+ nativeCurrency: { name: "USD", symbol: "USD", decimals: 6 },
461
+ rpcUrls: { default: { http: ["https://rpc.tempo.xyz"] } },
462
+ blockExplorers: { default: { name: "Tempo Explorer", url: "https://explore.tempo.xyz" } },
463
+ testnet: true
464
+ });
465
+ var katana = viem.defineChain({ id: 747474, name: "Katana", network: "Katana", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.katana.network"] } }, blockExplorers: { default: { name: "Katana Explorer", url: "https://explorer.katanarpc.com" } } });
466
+ var hyperevm = viem.defineChain({ id: 999, name: "HyperEVM", network: "HyperEVM", nativeCurrency: { name: "HYPE", symbol: "HYPE", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.hyperliquid.xyz/evm", "https://rpc.hypurrscan.io"] } }, blockExplorers: { default: { name: "Purrsec", url: "https://hyperevmscan.io" } } });
467
+ var stable = viem.defineChain({ id: 988, name: "Stable", network: "Stable", nativeCurrency: { name: "STB", symbol: "STB", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.stable.xyz"] } }, blockExplorers: { default: { name: "Stablescan", url: "https://stablescan.xyz" } } });
468
+ var monad = viem.defineChain({ id: 143, name: "Monad", network: "Monad", nativeCurrency: { name: "MON", symbol: "MON", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.monad.xyz", "https://rpc1.monad.xyz"] } }, blockExplorers: { default: { name: "MonadVision", url: "https://monadvision.com" } } });
469
+ var metis = viem.defineChain({ id: 1088, name: "Metis", network: "Metis", nativeCurrency: { name: "METIS", symbol: "METIS", decimals: 18 }, rpcUrls: { default: { http: ["https://metis.api.onfinality.io/public", "https://metis-public.nodies.app"] } }, blockExplorers: { default: { name: "Metis Explorer", url: "https://explorer.metis.io" } } });
470
+ var polygonZkEvm = viem.defineChain({ id: 1101, name: "Polygon zkEVM", network: "Polygon zkEVM", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://zkevm-rpc.com"] } }, blockExplorers: { default: { name: "PolygonScan zkEVM", url: "https://www.oklink.com/polygon-zkevm" } } });
471
+ var megaeth = viem.defineChain({ id: 4326, name: "MegaETH", network: "MegaETH", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://mainnet.megaeth.com/rpc"] } }, blockExplorers: { default: { name: "MegaETH Explorer", url: "https://megaeth.blockscout.com/" } } });
472
+ var pharos = viem.defineChain({ id: 1672, name: "Pharos", network: "Pharos", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.pharos.xyz"] } }, blockExplorers: { default: { name: "Pharoscan", url: "https://pharosscan.xyz" } } });
473
+ var kite = viem.defineChain({ id: 2366, name: "Kite", network: "Kite", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.gokite.ai/"] } }, blockExplorers: { default: { name: "Kitescan", url: "https://kitescan.ai/" } } });
474
+ var plasma = viem.defineChain({ id: 9745, name: "Plasma", network: "Plasma", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.plasma.to"] } }, blockExplorers: { default: { name: "Plasma Explorer", url: "https://plasmascan.to" } }, testnet: true });
475
+ var rari = viem.defineChain({ id: 1380012617, name: "RARI", network: "RARI", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://mainnet.rpc.rarichain.org/http"] } }, blockExplorers: { default: { name: "RARI Explorer", url: "https://mainnet.explorer.rarichain.org/" } }, testnet: true });
476
+ var stabletestnet = viem.defineChain({ id: 2201, name: "Stable Testnet", network: "Stable Testnet", nativeCurrency: { name: "STB", symbol: "STB", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.testnet.stable.xyz"] } }, blockExplorers: { default: { name: "Stablescan Testnet", url: "https://testnet.stablescan.xyz" } }, testnet: true });
477
+ var giwa = viem.defineChain({ id: 91342, name: "GIWA Testnet", network: "GIWA Testnet", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://sepolia-rpc.giwa.io"] } }, blockExplorers: { default: { name: "GIWA Explorer", url: "https://sepolia-explorer.giwa.io" } }, testnet: true });
478
+ var robinhoodTestnet = viem.defineChain({ id: 46630, name: "Robinhood Testnet", network: "Robinhood Testnet", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://rpc.testnet.chain.robinhood.com"] } }, blockExplorers: { default: { name: "Robinhood Explorer", url: "https://explorer.testnet.chain.robinhood.com/" } }, testnet: true });
479
+ var litvm = viem.defineChain({ id: 4441, name: "LitVM Testnet", network: "LitVM Testnet", nativeCurrency: { name: "ETH", symbol: "ETH", decimals: 18 }, rpcUrls: { default: { http: ["https://liteforge.rpc.caldera.xyz/http"] } }, blockExplorers: { default: { name: "LitVM Explorer", url: "https://liteforge.explorer.caldera.xyz" } }, testnet: true });
480
+ var supportedChains = [
481
+ // Mainnet (wagmi/chains)
482
+ chains$1.mainnet,
483
+ chains$1.arbitrum,
484
+ chains$1.optimism,
485
+ chains$1.unichain,
486
+ chains$1.base,
487
+ chains$1.ink,
488
+ chains$1.linea,
489
+ chains$1.soneium,
490
+ chains$1.bsc,
491
+ chains$1.worldchain,
492
+ chains$1.opBNB,
493
+ chains$1.mode,
494
+ chains$1.lisk,
495
+ chains$1.zksync,
496
+ chains$1.celo,
497
+ chains$1.polygon,
498
+ chains$1.avalanche,
499
+ chains$1.plumeMainnet,
500
+ chains$1.zora,
501
+ chains$1.sonic,
502
+ chains$1.berachain,
503
+ chains$1.bob,
504
+ chains$1.abstract,
505
+ chains$1.morph,
506
+ chains$1.taiko,
507
+ chains$1.scroll,
508
+ chains$1.hemi,
509
+ chains$1.xLayer,
510
+ chains$1.mantle,
511
+ chains$1.cronos,
512
+ chains$1.gravity,
513
+ chains$1.blast,
514
+ chains$1.manta,
515
+ chains$1.zircuit,
516
+ chains$1.xdc,
517
+ chains$1.sei,
518
+ chains$1.plume,
519
+ chains$1.gnosis,
520
+ chains$1.hashkey,
521
+ chains$1.flowMainnet,
522
+ chains$1.etherlink,
523
+ chains$1.ronin,
524
+ chains$1.flare,
525
+ chains$1.rootstock,
526
+ chains$1.iota,
527
+ chains$1.pulsechain,
528
+ // Mainnet (custom chains — not in wagmi/chains)
529
+ katana,
530
+ hyperevm,
531
+ stable,
532
+ monad,
533
+ metis,
534
+ polygonZkEvm,
535
+ megaeth,
536
+ pharos,
537
+ kite,
538
+ tempo,
539
+ plasma,
540
+ rari,
541
+ // Testnet (wagmi/chains)
542
+ chains$1.sepolia,
543
+ chains$1.arbitrumSepolia,
544
+ chains$1.optimismSepolia,
545
+ chains$1.baseSepolia,
546
+ chains$1.unichainSepolia,
547
+ chains$1.arcTestnet,
548
+ // Testnet (custom chains — not in wagmi/chains)
549
+ stabletestnet,
550
+ giwa,
551
+ robinhoodTestnet,
552
+ litvm
553
+ ];
438
554
  var CORS_FRIENDLY_RPC_MAP = {
555
+ // wagmi/chains mainnet
439
556
  1: "https://eth-mainnet.public.blastapi.io",
440
557
  8453: "https://mainnet.base.org",
441
558
  1868: "https://soneium.rpc.scs.startale.com",
442
559
  137: "https://polygon-rpc.com",
560
+ 56: "https://bsc-dataseed.binance.org",
561
+ 130: "https://rpc.therpc.io/unichain",
562
+ 196: "https://rpc.xlayer.io",
443
563
  42161: "https://arbitrum.gateway.tenderly.co",
444
564
  10: "https://optimism.gateway.tenderly.co",
565
+ // Custom chains (mainnet)
566
+ 4217: "https://rpc.tempo.xyz",
567
+ 747474: "https://rpc.katana.network",
568
+ 999: "https://rpc.hyperliquid.xyz/evm",
569
+ 988: "https://rpc.stable.xyz",
570
+ 143: "https://rpc.monad.xyz",
571
+ 1088: "https://metis.api.onfinality.io/public",
572
+ 1101: "https://zkevm-rpc.com",
573
+ 4326: "https://mainnet.megaeth.com/rpc",
574
+ 1672: "https://rpc.pharos.xyz",
575
+ 2366: "https://rpc.gokite.ai/",
576
+ 9745: "https://rpc.plasma.to",
577
+ 1380012617: "https://mainnet.rpc.rarichain.org/http",
445
578
  // Testnet
446
579
  11155111: "https://ethereum-sepolia.publicnode.com",
447
580
  421614: "https://sepolia-rollup.arbitrum.io/rpc",
448
581
  11155420: "https://optimism-sepolia.gateway.tenderly.co",
449
582
  84532: "https://sepolia.base.org",
450
583
  1301: "https://sepolia.unichain.org",
451
- 5042002: "https://rpc.testnet.arc.network"
584
+ 5042002: "https://rpc.testnet.arc.network",
585
+ // Custom chains (testnet)
586
+ 2201: "https://rpc.testnet.stable.xyz",
587
+ 91342: "https://sepolia-rpc.giwa.io",
588
+ 46630: "https://rpc.testnet.chain.robinhood.com",
589
+ 4441: "https://liteforge.rpc.caldera.xyz/http"
452
590
  };
453
591
  function buildStableTransports() {
454
592
  const transports = {};
@@ -474,6 +612,37 @@ function WalletConnectionStateSync() {
474
612
  useSyncWalletConnectedStore();
475
613
  return null;
476
614
  }
615
+ function LoadingSkeleton() {
616
+ const { theme } = useWidgetTheme();
617
+ return /* @__PURE__ */ jsxRuntime.jsxs(
618
+ react.Box,
619
+ {
620
+ display: "flex",
621
+ flexDirection: "column",
622
+ alignItems: "center",
623
+ justifyContent: "center",
624
+ w: { base: "100%", md: "480px" },
625
+ h: { base: "400px", md: "440px" },
626
+ borderRadius: "24px",
627
+ bg: theme.assistBgColor,
628
+ gap: 4,
629
+ children: [
630
+ /* @__PURE__ */ jsxRuntime.jsx(
631
+ react.Box,
632
+ {
633
+ w: "40px",
634
+ h: "40px",
635
+ borderRadius: "full",
636
+ bg: theme.defaultBorderColor,
637
+ opacity: 0.4,
638
+ animation: "pulse 1.5s ease-in-out infinite"
639
+ }
640
+ ),
641
+ /* @__PURE__ */ jsxRuntime.jsx(react.Text, { fontSize: "14px", color: theme.defaultTextColor, children: "Loading chains and tokens..." })
642
+ ]
643
+ }
644
+ );
645
+ }
477
646
  function ChainsAndTokensLoader({ children, config }) {
478
647
  const { data } = useChainsAndTokens(true);
479
648
  const { setChains, setSlippagePolicies } = useChainsStore();
@@ -530,7 +699,7 @@ function ChainsAndTokensLoader({ children, config }) {
530
699
  }, [filteredChains, filteredTokens, data, setChains, setTokens, setSlippagePolicies]);
531
700
  const isReady = filteredChains && filteredTokens;
532
701
  if (!isReady) {
533
- return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", justifyContent: "center", alignItems: "center", height: "200px" }, children: /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Loading chains and tokens..." }) });
702
+ return /* @__PURE__ */ jsxRuntime.jsx(LoadingSkeleton, {});
534
703
  }
535
704
  return /* @__PURE__ */ jsxRuntime.jsx(FavoritesProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(TokenFavoritesProvider, { children: [
536
705
  /* @__PURE__ */ jsxRuntime.jsx(WalletConnectionStateSync, {}),
@@ -857,6 +1026,16 @@ var formatDate = (dateString) => {
857
1026
  const formattedTime = `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`;
858
1027
  return formattedTime;
859
1028
  };
1029
+ var dateFormatter = (isoString) => {
1030
+ const date = new Date(isoString);
1031
+ const month = String(date.getMonth() + 1).padStart(2, "0");
1032
+ const day = String(date.getDate()).padStart(2, "0");
1033
+ const year = date.getFullYear();
1034
+ const hours = String(date.getHours()).padStart(2, "0");
1035
+ const minutes = String(date.getMinutes()).padStart(2, "0");
1036
+ const seconds = String(date.getSeconds()).padStart(2, "0");
1037
+ return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`;
1038
+ };
860
1039
 
861
1040
  // src/utils/address.ts
862
1041
  var sliceAddress = (address, startLength = 4, endLength = 4) => {
@@ -928,25 +1107,6 @@ var isSolanaChain = (chain_id) => {
928
1107
  return chain_id === SOLANA_MAINNET.chain_id;
929
1108
  };
930
1109
 
931
- // src/utils/shortLinkRegex.ts
932
- var toRegex = /^\/[a-zA-Z0-9]+$/;
933
- var toAndTokenRegex = /^\/(?!from)[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/;
934
- var fromRegex = /^\/from&[a-zA-Z0-9-+]+$/;
935
- var fromAndTokenRegex = /^\/from&[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/;
936
- var fromAndToRegex = /^\/[a-zA-Z0-9-+]+\/[a-zA-Z0-9-+]+$/;
937
- var fromAndTokenAndToAndTokenRegex = /^\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/;
938
- var allRegexPatterns = [
939
- toRegex,
940
- toAndTokenRegex,
941
- fromRegex,
942
- fromAndTokenRegex,
943
- fromAndToRegex,
944
- fromAndTokenAndToAndTokenRegex
945
- ];
946
- function matchesAnyPatternUsingArray(inputString) {
947
- return allRegexPatterns.some((regex) => regex.test(inputString));
948
- }
949
-
950
1110
  // src/utils/tokenSelectionCache.ts
951
1111
  var TOKEN_SELECTION = "tokenSelection";
952
1112
  var tokenSelectionStore = new localstorage_default(TOKEN_SELECTION);
@@ -1034,7 +1194,7 @@ var logger = {
1034
1194
  error: errorWithTimestamp,
1035
1195
  debug: debugWithTimestamp
1036
1196
  };
1037
- var wagmiSupportedChains = [chains$1.mainnet, chains$1.base, chains$1.soneium, chains$1.polygon, chains$1.arbitrum, chains$1.optimism];
1197
+ var wagmiSupportedChains = [chains$1.mainnet, chains$1.base, chains$1.soneium, chains$1.polygon, chains$1.arbitrum, chains$1.optimism, chains$1.bsc];
1038
1198
  var getTxLink = (txHash, chainId) => {
1039
1199
  if (isSolanaChain(chainId)) {
1040
1200
  return `${SOLANA_MAINNET.explorerUrl}/tx/${txHash}`;
@@ -1106,20 +1266,6 @@ var isSolanaChain2 = (chain_id) => {
1106
1266
  };
1107
1267
 
1108
1268
  // src/core/hooks/useSwapAndBridgeContextStore.ts
1109
- function findItemByName(arr, targetName) {
1110
- const foundItem = arr.find(
1111
- (item) => item.name.replace(/\s+/g, "").toLowerCase() === targetName.replace(/\s+/g, "").toLowerCase()
1112
- );
1113
- return [foundItem !== void 0, foundItem];
1114
- }
1115
- function findItemBySymbol(arr, targetName, chainId, platform_id) {
1116
- const foundItem = arr.find((item) => {
1117
- {
1118
- return item.symbol.replace(/\s+/g, "").toLowerCase() === targetName.replace(/\s+/g, "").toLowerCase() && item.chain_id === chainId;
1119
- }
1120
- });
1121
- return [foundItem !== void 0, foundItem];
1122
- }
1123
1269
  var DEFAULT_FROM_TOKEN = {
1124
1270
  name: "Base",
1125
1271
  address: viem.zeroAddress,
@@ -1222,8 +1368,6 @@ var useInitSwapAndBridgeState = (config) => {
1222
1368
  const {
1223
1369
  setFromTokenInfo,
1224
1370
  setToTokenInfo,
1225
- setIsShortLink,
1226
- setShortLink,
1227
1371
  setFromAmount,
1228
1372
  setToAmount
1229
1373
  } = useSwapAndBridgeContextStore();
@@ -1233,11 +1377,6 @@ var useInitSwapAndBridgeState = (config) => {
1233
1377
  const address = useEvmAddress();
1234
1378
  const { resetTxState } = useTxStateContextStore();
1235
1379
  const hasInitialized = React5.useRef(false);
1236
- const currentPathname = React5.useMemo(() => {
1237
- if (typeof window === "undefined") return "/";
1238
- return window.location.pathname;
1239
- }, []);
1240
- const pathname = currentPathname;
1241
1380
  React5.useEffect(() => {
1242
1381
  if (hasInitialized.current) return;
1243
1382
  if (!chains || !tokens) return;
@@ -1279,46 +1418,8 @@ var useInitSwapAndBridgeState = (config) => {
1279
1418
  }
1280
1419
  }
1281
1420
  }
1282
- if (matchesAnyPatternUsingArray(pathname) && chains && tokens) {
1283
- setIsShortLink(true);
1284
- setShortLink(pathname);
1285
- try {
1286
- const decodedPath = decodeURIComponent(pathname);
1287
- const match = decodedPath.match(
1288
- /^\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)$/
1289
- );
1290
- if (match) {
1291
- const [, fromChainName, fromTokenSymbol, toChainName, toTokenSymbol] = match;
1292
- const [, foundFromChain] = findItemByName(
1293
- chains,
1294
- fromChainName
1295
- );
1296
- const [, foundToChain] = findItemByName(
1297
- chains,
1298
- toChainName
1299
- );
1300
- if (foundFromChain && foundToChain && tokens) {
1301
- const [, foundFromToken] = findItemBySymbol(
1302
- tokens,
1303
- fromTokenSymbol,
1304
- foundFromChain.chain_id
1305
- );
1306
- const [, foundToToken] = findItemBySymbol(
1307
- tokens,
1308
- toTokenSymbol,
1309
- foundToChain.chain_id
1310
- );
1311
- if (foundFromToken && foundToToken) {
1312
- setFromTokenInfo(foundFromToken);
1313
- setToTokenInfo(foundToToken);
1314
- }
1315
- }
1316
- }
1317
- } catch {
1318
- }
1319
- }
1320
1421
  const cached = tokenSelectionStore.get(address || "default");
1321
- if (cached?.from && cached?.to && !matchesAnyPatternUsingArray(pathname)) {
1422
+ if (cached?.from && cached?.to) {
1322
1423
  setFromTokenInfo(cached.from);
1323
1424
  setToTokenInfo(cached.to);
1324
1425
  }
@@ -1330,15 +1431,12 @@ var useInitSwapAndBridgeState = (config) => {
1330
1431
  resetTxState();
1331
1432
  };
1332
1433
  }, [
1333
- pathname,
1334
1434
  address,
1335
1435
  chains,
1336
1436
  tokens,
1337
1437
  config,
1338
1438
  setFromTokenInfo,
1339
1439
  setToTokenInfo,
1340
- setIsShortLink,
1341
- setShortLink,
1342
1440
  setFromAmount,
1343
1441
  setToAmount,
1344
1442
  setDifferentAddress,
@@ -2858,13 +2956,17 @@ var extractVPathSegment = () => {
2858
2956
  const match = pathname.match(/^\/v\/([a-zA-Z0-9-+]+)/);
2859
2957
  return match ? match[1] : "";
2860
2958
  };
2861
- var toBigInt = (value) => {
2862
- try {
2863
- return BigInt(value);
2864
- } catch {
2865
- return BigInt(0);
2866
- }
2867
- };
2959
+ function toBigInt(balance, decimals = 6) {
2960
+ const balanceStr = typeof balance === "number" ? balance.toString() : balance;
2961
+ const [integerPart, decimalPart = ""] = balanceStr.split(".");
2962
+ const integerBigInt = BigInt(integerPart);
2963
+ const neededDecimalDigits = Math.min(decimalPart.length, decimals);
2964
+ const trimmedDecimal = decimalPart.slice(0, neededDecimalDigits);
2965
+ const paddedDecimal = trimmedDecimal.padEnd(decimals, "0");
2966
+ const decimalBigInt = BigInt(paddedDecimal);
2967
+ const multiplier = BigInt(10 ** decimals);
2968
+ return integerBigInt * multiplier + decimalBigInt;
2969
+ }
2868
2970
  function BackIcon(props = {}) {
2869
2971
  return React5.createElement("svg", {
2870
2972
  xmlns: "http://www.w3.org/2000/svg",
@@ -2886,7 +2988,7 @@ function ArrowRightIcon(props = {}) {
2886
2988
  height: props.size || 16,
2887
2989
  ...props,
2888
2990
  style: { display: "inline-block", verticalAlign: "middle", ...props.style || {} },
2889
- dangerouslySetInnerHTML: { __html: `<circle cx="23.0434" cy="23.5005" r="22.9565" fill="#81728C" />
2991
+ dangerouslySetInnerHTML: { __html: `<circle cx="23.0434" cy="23.5005" r="22.9565" fill="currentColor" />
2890
2992
  <path
2891
2993
  d="M14.0898 22.8301C14.0896 22.822 14.0889 22.8138 14.0889 22.8057C14.0889 22.3529 14.463 21.9813 14.9424 21.9365L15.0391 21.9316L29.0293 21.9316L25.582 18.7607C25.1215 18.3371 25.0489 17.7165 25.4199 17.375C25.7913 17.0335 26.466 17.1007 26.9268 17.5244L31.7939 22.001C32.1346 22.1339 32.374 22.4439 32.374 22.8057C32.374 22.8251 32.3715 22.8442 32.3701 22.8633C32.3705 22.874 32.3721 22.8847 32.3721 22.8955C32.3718 23.2561 32.1341 23.5657 31.7949 23.6992L26.9268 28.1768C26.4661 28.6002 25.7912 28.6674 25.4199 28.3262C25.0488 27.9848 25.1218 27.3641 25.582 26.9404L29.0293 23.7695L15.0371 23.7695L14.9404 23.7646C14.4611 23.7198 14.0872 23.3481 14.0869 22.8955C14.0869 22.8735 14.0881 22.8517 14.0898 22.8301Z"
2892
2994
  fill="white" />` }
@@ -3242,7 +3344,7 @@ var textRecipe = react.defineRecipe({
3242
3344
  }
3243
3345
  });
3244
3346
  var Heading = react.chakra("h2", headingRecipe);
3245
- var Text = react.chakra("p", textRecipe);
3347
+ var Text2 = react.chakra("p", textRecipe);
3246
3348
  var isTouchDevice = () => {
3247
3349
  if (typeof window === "undefined") return false;
3248
3350
  return "ontouchstart" in window || navigator.maxTouchPoints > 0;
@@ -3370,6 +3472,12 @@ var FormButton = ({
3370
3472
  }) => {
3371
3473
  const { theme } = useWidgetTheme();
3372
3474
  const address = useEvmAddress();
3475
+ const {
3476
+ solanaWalletAddress,
3477
+ isSolanaWalletConnected,
3478
+ isEthWalletConnected,
3479
+ evmWalletConnectorId
3480
+ } = useWalletConnectedStore();
3373
3481
  const {
3374
3482
  address: wagmiAddress,
3375
3483
  connector,
@@ -3387,8 +3495,11 @@ var FormButton = ({
3387
3495
  return dynamicEvmWallet?.address || void 0;
3388
3496
  }, [userWallets]);
3389
3497
  const effectiveEvmAddress = React5.useMemo(
3390
- () => address || wagmiAddress || dynamicEvmWalletAddress || void 0,
3391
- [address, wagmiAddress, dynamicEvmWalletAddress]
3498
+ () => {
3499
+ if (!isEthWalletConnected) return void 0;
3500
+ return address || wagmiAddress || dynamicEvmWalletAddress || void 0;
3501
+ },
3502
+ [address, wagmiAddress, dynamicEvmWalletAddress, isEthWalletConnected]
3392
3503
  );
3393
3504
  const { openModal, openConnectModal } = useWalletConnectModal();
3394
3505
  const slippage = address ? slippageStore.get(address) : void 0;
@@ -3417,15 +3528,9 @@ var FormButton = ({
3417
3528
  } = useUSDTHandler(fromTokenInfo.chain_id);
3418
3529
  const { isSelectPredictionChain, slippagePolicies, chains } = useChainsStore();
3419
3530
  const { differentAddress } = useDifferentAddressStore();
3420
- const {
3421
- solanaWalletAddress,
3422
- isSolanaWalletConnected,
3423
- isEthWalletConnected,
3424
- evmWalletConnectorId
3425
- } = useWalletConnectedStore();
3426
3531
  const connectors = wagmi.useConnectors();
3427
3532
  const hasEvmUiWallet = Boolean(
3428
- effectiveEvmAddress || isEthWalletConnected || isWagmiConnected
3533
+ effectiveEvmAddress || isEthWalletConnected
3429
3534
  );
3430
3535
  const hasEvmExecutionWallet = Boolean(
3431
3536
  effectiveEvmAddress && (isWagmiConnected && connector || evmWalletConnectorId && connectors.some((c) => c.id === evmWalletConnectorId) || isEthWalletConnected && connectors.length > 0)
@@ -3919,7 +4024,7 @@ var FormButton = ({
3919
4024
  const renderButton = () => {
3920
4025
  if (errorMessage || quoteMessage) {
3921
4026
  return /* @__PURE__ */ jsxRuntime.jsx(react.Button, { ...buttonStyles, disabled: true, bg: theme.disabledButtonBg, children: /* @__PURE__ */ jsxRuntime.jsx(
3922
- Text,
4027
+ Text2,
3923
4028
  {
3924
4029
  variant: {
3925
4030
  base: "content9",
@@ -3985,7 +4090,7 @@ var FormButton = ({
3985
4090
  }
3986
4091
  ),
3987
4092
  /* @__PURE__ */ jsxRuntime.jsx(
3988
- Text,
4093
+ Text2,
3989
4094
  {
3990
4095
  position: "absolute",
3991
4096
  w: "28px",
@@ -4000,7 +4105,7 @@ var FormButton = ({
4000
4105
  ]
4001
4106
  }
4002
4107
  ),
4003
- /* @__PURE__ */ jsxRuntime.jsx(Text, { children: "AI is Thinking the Best Price" })
4108
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { children: "AI is Thinking the Best Price" })
4004
4109
  ] }) })
4005
4110
  }
4006
4111
  );
@@ -4192,13 +4297,13 @@ function filterTokenUnType(items, excludeTypes) {
4192
4297
  var mainnet3 = { id: 1 };
4193
4298
 
4194
4299
  // src/consts/monad.ts
4195
- var monad = { id: 10143 };
4300
+ var monad2 = { id: 10143 };
4196
4301
 
4197
4302
  // src/consts/stable.ts
4198
- var stable = { id: 1 };
4303
+ var stable2 = { id: 1 };
4199
4304
 
4200
4305
  // src/core/SelectTokenModal/hooks/useChainsAndTokensForSelect.ts
4201
- [mainnet3.id, chains.base.id, chains.ink.id, chains.bsc.id, monad.id, chains.soneium.id, stable.id];
4306
+ [mainnet3.id, chains.base.id, chains.ink.id, chains.bsc.id, monad2.id, chains.soneium.id, stable2.id];
4202
4307
  var useChainsAndTokensForSelect = ({
4203
4308
  data,
4204
4309
  selectedChain,
@@ -4596,7 +4701,7 @@ var Network = ({
4596
4701
  }
4597
4702
  ),
4598
4703
  /* @__PURE__ */ jsxRuntime.jsxs(
4599
- Text,
4704
+ Text2,
4600
4705
  {
4601
4706
  variant: {
4602
4707
  base: "content7",
@@ -4664,20 +4769,6 @@ function countLeadingZerosAfterDecimal(numStr) {
4664
4769
  if (firstNonZeroIndex === -1) return 0;
4665
4770
  return firstNonZeroIndex;
4666
4771
  }
4667
- function findItemByName2(arr, targetName) {
4668
- const foundItem = arr.find(
4669
- (item) => item.name.replace(/\s+/g, "").toLowerCase() === targetName.replace(/\s+/g, "").toLowerCase()
4670
- );
4671
- return [foundItem !== void 0, foundItem];
4672
- }
4673
- function findItemBySymbol2(arr, targetName, chainId, platform_id) {
4674
- const foundItem = arr.find((item) => {
4675
- {
4676
- return item.symbol.replace(/\s+/g, "").toLowerCase() === targetName.replace(/\s+/g, "").toLowerCase() && item.chain_id === chainId;
4677
- }
4678
- });
4679
- return [foundItem !== void 0, foundItem];
4680
- }
4681
4772
  var TokenAmountHeading = ({
4682
4773
  amount,
4683
4774
  decimals,
@@ -4685,13 +4776,14 @@ var TokenAmountHeading = ({
4685
4776
  suffix,
4686
4777
  ...props
4687
4778
  }) => {
4779
+ const { theme } = useWidgetTheme();
4688
4780
  const _amount = formatTokenAmount({
4689
4781
  amount,
4690
4782
  decimals
4691
4783
  });
4692
4784
  const leadingZeros = countLeadingZerosAfterDecimal(_amount);
4693
4785
  if (leadingZeros > 5) {
4694
- return /* @__PURE__ */ jsxRuntime.jsxs(Heading, { variant: "heading8", ...props, as: "div", children: [
4786
+ return /* @__PURE__ */ jsxRuntime.jsxs(Heading, { variant: "heading8", ...props, as: "div", color: theme.defaultTextColor, whiteSpace: "nowrap", children: [
4695
4787
  prefix,
4696
4788
  " ",
4697
4789
  _amount.slice(0, 3),
@@ -4710,7 +4802,7 @@ var TokenAmountHeading = ({
4710
4802
  suffix
4711
4803
  ] });
4712
4804
  }
4713
- return /* @__PURE__ */ jsxRuntime.jsxs(Heading, { variant: "heading11", ...props, as: "div", children: [
4805
+ return /* @__PURE__ */ jsxRuntime.jsxs(Heading, { variant: "heading11", ...props, as: "div", color: theme.defaultTextColor, whiteSpace: "nowrap", children: [
4714
4806
  prefix,
4715
4807
  " ",
4716
4808
  _amount,
@@ -4731,7 +4823,7 @@ var TokenAmountText = ({
4731
4823
  });
4732
4824
  const leadingZeros = countLeadingZerosAfterDecimal(_amount);
4733
4825
  if (leadingZeros > 5) {
4734
- return /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "content8", ...props, children: [
4826
+ return /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: "content8", ...props, children: [
4735
4827
  prefix,
4736
4828
  " ",
4737
4829
  _amount.slice(0, 3),
@@ -4750,7 +4842,7 @@ var TokenAmountText = ({
4750
4842
  suffix
4751
4843
  ] });
4752
4844
  }
4753
- return /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "content7", ...props, children: [
4845
+ return /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: "content7", ...props, children: [
4754
4846
  prefix,
4755
4847
  " ",
4756
4848
  _amount,
@@ -5063,7 +5155,7 @@ var TokenAndAddress = ({
5063
5155
  )
5064
5156
  ] }),
5065
5157
  /* @__PURE__ */ jsxRuntime.jsx(
5066
- Text,
5158
+ Text2,
5067
5159
  {
5068
5160
  variant: {
5069
5161
  base: "content9",
@@ -5091,7 +5183,7 @@ var TokenAndAddress = ({
5091
5183
  }
5092
5184
  ),
5093
5185
  /* @__PURE__ */ jsxRuntime.jsx(
5094
- Text,
5186
+ Text2,
5095
5187
  {
5096
5188
  variant: {
5097
5189
  base: "content9",
@@ -5295,7 +5387,7 @@ var TokenList = ({
5295
5387
  }
5296
5388
  } else {
5297
5389
  return /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { w: "100%", h: "50px", justify: "center", align: "center", children: /* @__PURE__ */ jsxRuntime.jsx(
5298
- Text,
5390
+ Text2,
5299
5391
  {
5300
5392
  color: theme.weakTextColor,
5301
5393
  variant: {
@@ -5394,7 +5486,7 @@ var TokenList = ({
5394
5486
  cursor: "pointer",
5395
5487
  children: [
5396
5488
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: item.icon, boxSize: "14px" }),
5397
- /* @__PURE__ */ jsxRuntime.jsx(Text, { children: item.name })
5489
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { children: item.name })
5398
5490
  ]
5399
5491
  },
5400
5492
  index
@@ -5694,7 +5786,7 @@ var MobileContent = React5.memo(function MobileContent2({
5694
5786
  objectFit: "cover"
5695
5787
  }
5696
5788
  ) }),
5697
- /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: ArrowDownIcon, boxSize: "16px" })
5789
+ /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: ArrowDownIcon, boxSize: "16px", color: theme.defaultTextColor })
5698
5790
  ]
5699
5791
  }
5700
5792
  )
@@ -5750,10 +5842,10 @@ var MobileContent = React5.memo(function MobileContent2({
5750
5842
  children: [
5751
5843
  /* @__PURE__ */ jsxRuntime.jsx(AllChainsIcon, {}),
5752
5844
  /* @__PURE__ */ jsxRuntime.jsx(
5753
- Text,
5845
+ Text2,
5754
5846
  {
5755
5847
  variant: "content6_1",
5756
- color: "brand-grey1",
5848
+ color: theme.defaultTextColor,
5757
5849
  whiteSpace: "nowrap",
5758
5850
  children: "Chains with assets"
5759
5851
  }
@@ -5765,7 +5857,7 @@ var MobileContent = React5.memo(function MobileContent2({
5765
5857
  ]
5766
5858
  }
5767
5859
  ),
5768
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Popular" }),
5860
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Popular" }),
5769
5861
  /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { w: "100%", align: "start", gap: 0, children: [
5770
5862
  popularChains?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
5771
5863
  Network,
@@ -5801,7 +5893,7 @@ var MobileContent = React5.memo(function MobileContent2({
5801
5893
  chain.chain_id + "fav-chains"
5802
5894
  ))
5803
5895
  ] }),
5804
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Chains (A-Z)" }),
5896
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Chains (A-Z)" }),
5805
5897
  /* @__PURE__ */ jsxRuntime.jsx(react.VStack, { w: "100%", align: "start", gap: 0, children: orderedChains?.filter((chain) => chain.is_testnet !== true)?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
5806
5898
  Network,
5807
5899
  {
@@ -5818,7 +5910,7 @@ var MobileContent = React5.memo(function MobileContent2({
5818
5910
  chain.chain_id + "ordered-chains"
5819
5911
  )) }),
5820
5912
  !isSelectingFromToken && !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5821
- /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Prediction" }),
5913
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Prediction" }),
5822
5914
  orderedPredictionChains?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
5823
5915
  Network,
5824
5916
  {
@@ -5836,7 +5928,7 @@ var MobileContent = React5.memo(function MobileContent2({
5836
5928
  chain.chain_id + "prediction-chains"
5837
5929
  ))
5838
5930
  ] }),
5839
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Testnet" }),
5931
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Testnet" }),
5840
5932
  orderedChains?.filter((chain) => chain.is_testnet === true)?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
5841
5933
  Network,
5842
5934
  {
@@ -6030,7 +6122,7 @@ var DesktopContent = ({
6030
6122
  children: [
6031
6123
  /* @__PURE__ */ jsxRuntime.jsx(AllChainsIcon, {}),
6032
6124
  /* @__PURE__ */ jsxRuntime.jsx(
6033
- Text,
6125
+ Text2,
6034
6126
  {
6035
6127
  variant: "content6_1",
6036
6128
  color: theme.defaultTextColor,
@@ -6057,7 +6149,7 @@ var DesktopContent = ({
6057
6149
  },
6058
6150
  chain.chain_id + "search-chains"
6059
6151
  )) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6060
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", mb: 2, children: "Popular" }),
6152
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", mb: 2, children: "Popular" }),
6061
6153
  popularChains?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
6062
6154
  Network,
6063
6155
  {
@@ -6085,7 +6177,7 @@ var DesktopContent = ({
6085
6177
  },
6086
6178
  chain.chain_id + "fav-chains"
6087
6179
  )),
6088
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Chains (A-Z)" }),
6180
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Chains (A-Z)" }),
6089
6181
  orderedChains?.filter((chain) => chain.is_testnet === false)?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
6090
6182
  Network,
6091
6183
  {
@@ -6101,7 +6193,7 @@ var DesktopContent = ({
6101
6193
  )),
6102
6194
  !isSelectingFromToken && !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
6103
6195
  /* @__PURE__ */ jsxRuntime.jsx(
6104
- Text,
6196
+ Text2,
6105
6197
  {
6106
6198
  px: 2,
6107
6199
  color: theme.weakTextColor,
@@ -6127,7 +6219,7 @@ var DesktopContent = ({
6127
6219
  chain.chain_id + "prediction-chains"
6128
6220
  ))
6129
6221
  ] }),
6130
- !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Testnet" }),
6222
+ !isPreconfigured && /* @__PURE__ */ jsxRuntime.jsx(Text2, { px: 2, color: theme.weakTextColor, variant: "content7", my: 2, children: "Testnet" }),
6131
6223
  orderedChains?.filter((chain) => chain.is_testnet === true)?.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
6132
6224
  Network,
6133
6225
  {
@@ -6258,6 +6350,7 @@ var SelectTokenModal = ({
6258
6350
  allTokens: tokens
6259
6351
  });
6260
6352
  const { userHasSelectedFromNetwork, setUserHasSelectedFromNetwork } = useUserHasSelectedFromNetwork();
6353
+ const prevUserHasSelectedRef = React5.useRef(userHasSelectedFromNetwork);
6261
6354
  const { chains } = useChainsStore();
6262
6355
  const [disableTestnetLimit, setDisableTestnetLimit] = React5.useState(false);
6263
6356
  const [tempSelectAll, setTempSelectAll] = React5.useState(false);
@@ -6292,6 +6385,8 @@ var SelectTokenModal = ({
6292
6385
  setTempSelectedPlatformId(null);
6293
6386
  }
6294
6387
  }
6388
+ const userJustSelected = userHasSelectedFromNetwork && !prevUserHasSelectedRef.current;
6389
+ prevUserHasSelectedRef.current = userHasSelectedFromNetwork;
6295
6390
  if (isSelectingFromToken) {
6296
6391
  if (isLoadingUserBalances) return;
6297
6392
  if (isArcTestnetShortLink) {
@@ -6305,7 +6400,9 @@ var SelectTokenModal = ({
6305
6400
  setSelectedChain(null);
6306
6401
  } else {
6307
6402
  setIsSelectAll(false);
6308
- setSelectedChain(fromChainId);
6403
+ if (!userJustSelected) {
6404
+ setSelectedChain(fromChainId);
6405
+ }
6309
6406
  }
6310
6407
  } else {
6311
6408
  setIsSelectAll(false);
@@ -6557,7 +6654,7 @@ var TokenInfoCom = ({ tokenInfo, priority = false }) => {
6557
6654
  }
6558
6655
  ),
6559
6656
  /* @__PURE__ */ jsxRuntime.jsx(
6560
- Text,
6657
+ Text2,
6561
6658
  {
6562
6659
  variant: {
6563
6660
  base: "content9",
@@ -6638,7 +6735,9 @@ var TokenSelectAndInput = ({
6638
6735
  const toTokenBalanceHyper = {
6639
6736
  formatted: toTokenBalanceHyperBack?.withdrawable,
6640
6737
  value: toBigInt(
6641
- toTokenBalanceHyperBack?.withdrawable ? toTokenBalanceHyperBack?.withdrawable : "0")
6738
+ toTokenBalanceHyperBack?.withdrawable ? toTokenBalanceHyperBack?.withdrawable : "0",
6739
+ 6
6740
+ )
6642
6741
  };
6643
6742
  React5.useEffect(() => {
6644
6743
  if (!isFrom) {
@@ -6827,7 +6926,7 @@ var TokenSelectAndInput = ({
6827
6926
  const loss = -(+toAmountToUsd - +fromAmountToUsd) / +fromAmountToUsd;
6828
6927
  if (loss >= 0.1) {
6829
6928
  return /* @__PURE__ */ jsxRuntime.jsx(
6830
- Text,
6929
+ Text2,
6831
6930
  {
6832
6931
  as: "span",
6833
6932
  color: "#ff4267",
@@ -6862,7 +6961,7 @@ var TokenSelectAndInput = ({
6862
6961
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
6863
6962
  renderSolanaWalletIcon(),
6864
6963
  /* @__PURE__ */ jsxRuntime.jsx(
6865
- Text,
6964
+ Text2,
6866
6965
  {
6867
6966
  variant: "content8",
6868
6967
  backgroundColor: theme.highlightBgColor,
@@ -6879,7 +6978,7 @@ var TokenSelectAndInput = ({
6879
6978
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
6880
6979
  walletIcon,
6881
6980
  /* @__PURE__ */ jsxRuntime.jsx(
6882
- Text,
6981
+ Text2,
6883
6982
  {
6884
6983
  variant: "content8",
6885
6984
  backgroundColor: theme.highlightBgColor,
@@ -6898,7 +6997,7 @@ var TokenSelectAndInput = ({
6898
6997
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
6899
6998
  walletIcon,
6900
6999
  /* @__PURE__ */ jsxRuntime.jsx(
6901
- Text,
7000
+ Text2,
6902
7001
  {
6903
7002
  variant: "content8",
6904
7003
  backgroundColor: theme.assistBgColor,
@@ -6912,7 +7011,7 @@ var TokenSelectAndInput = ({
6912
7011
  }
6913
7012
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
6914
7013
  /* @__PURE__ */ jsxRuntime.jsx(
6915
- Text,
7014
+ Text2,
6916
7015
  {
6917
7016
  variant: "content8",
6918
7017
  backgroundColor: theme.assistBgColor,
@@ -6941,7 +7040,7 @@ var TokenSelectAndInput = ({
6941
7040
  cursor: "pointer",
6942
7041
  children: [
6943
7042
  /* @__PURE__ */ jsxRuntime.jsx(
6944
- Text,
7043
+ Text2,
6945
7044
  {
6946
7045
  variant: "content8",
6947
7046
  backgroundColor: theme.assistBgColor,
@@ -6980,7 +7079,7 @@ var TokenSelectAndInput = ({
6980
7079
  cursor: "pointer",
6981
7080
  children: [
6982
7081
  /* @__PURE__ */ jsxRuntime.jsx(
6983
- Text,
7082
+ Text2,
6984
7083
  {
6985
7084
  variant: "content8",
6986
7085
  backgroundColor: theme.assistBgColor,
@@ -7014,7 +7113,7 @@ var TokenSelectAndInput = ({
7014
7113
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
7015
7114
  walletIcon,
7016
7115
  /* @__PURE__ */ jsxRuntime.jsx(
7017
- Text,
7116
+ Text2,
7018
7117
  {
7019
7118
  variant: "content8",
7020
7119
  backgroundColor: theme.assistBgColor,
@@ -7074,7 +7173,7 @@ var TokenSelectAndInput = ({
7074
7173
  border: "1px solid",
7075
7174
  borderColor: theme.highlightTextColor,
7076
7175
  onClick: () => handleQuickInput("50%"),
7077
- children: /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "content9", color: theme.highlightTextColor, children: "50%" })
7176
+ children: /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content9", color: theme.highlightTextColor, children: "50%" })
7078
7177
  }
7079
7178
  ),
7080
7179
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -7087,10 +7186,10 @@ var TokenSelectAndInput = ({
7087
7186
  borderRadius: "4px",
7088
7187
  bg: theme.highlightButtonBg,
7089
7188
  onClick: () => handleQuickInput("Max"),
7090
- children: /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: "content9", color: theme.highlightButtonText, children: "Max" })
7189
+ children: /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content9", color: theme.highlightButtonText, children: "Max" })
7091
7190
  }
7092
7191
  ),
7093
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "content8", color: theme.weakTextColor, children: [
7192
+ /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: "content8", color: theme.weakTextColor, children: [
7094
7193
  "Balance:",
7095
7194
  " ",
7096
7195
  tokenInfo.isSolana && solanaBalance ? solanaBalance.formatted : balance
@@ -7207,7 +7306,7 @@ var TokenSelectAndInput = ({
7207
7306
  }
7208
7307
  ),
7209
7308
  /* @__PURE__ */ jsxRuntime.jsxs(
7210
- Text,
7309
+ Text2,
7211
7310
  {
7212
7311
  variant: {
7213
7312
  base: "content9",
@@ -7245,10 +7344,10 @@ var TokenSelectAndInput = ({
7245
7344
  bottom: ["6px", "8px"],
7246
7345
  left: 0,
7247
7346
  paddingRight: [2, 4],
7248
- children: !isFrom && !isDepositPlatformToken && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: tokenInfo.isSolana ? solanaWalletAddress && /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "content8", children: [
7347
+ children: !isFrom && !isDepositPlatformToken && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: tokenInfo.isSolana ? solanaWalletAddress && /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: "content8", children: [
7249
7348
  "Balance: ",
7250
7349
  displayBalance
7251
- ] }) : address && /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: "content8", children: [
7350
+ ] }) : address && /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: "content8", children: [
7252
7351
  "Balance: ",
7253
7352
  displayBalance
7254
7353
  ] }) })
@@ -7342,7 +7441,7 @@ var TipsContent = ({
7342
7441
  const renderFee = (fee) => {
7343
7442
  if (fee === "0") {
7344
7443
  return /* @__PURE__ */ jsxRuntime.jsx(
7345
- Text,
7444
+ Text2,
7346
7445
  {
7347
7446
  variant: "content9",
7348
7447
  color: "white",
@@ -7354,7 +7453,7 @@ var TipsContent = ({
7354
7453
  );
7355
7454
  }
7356
7455
  return /* @__PURE__ */ jsxRuntime.jsxs(
7357
- Text,
7456
+ Text2,
7358
7457
  {
7359
7458
  variant: {
7360
7459
  base: "content9",
@@ -7379,7 +7478,7 @@ var TipsContent = ({
7379
7478
  const sif = +swapImpactFee();
7380
7479
  if (toAmountToUsd === null) {
7381
7480
  return /* @__PURE__ */ jsxRuntime.jsx(
7382
- Text,
7481
+ Text2,
7383
7482
  {
7384
7483
  variant: {
7385
7484
  base: "content9",
@@ -7392,7 +7491,7 @@ var TipsContent = ({
7392
7491
  }
7393
7492
  if (sif > 0 || sif === 0) {
7394
7493
  return /* @__PURE__ */ jsxRuntime.jsxs(
7395
- Text,
7494
+ Text2,
7396
7495
  {
7397
7496
  variant: {
7398
7497
  base: "content9",
@@ -7407,7 +7506,7 @@ var TipsContent = ({
7407
7506
  );
7408
7507
  }
7409
7508
  return /* @__PURE__ */ jsxRuntime.jsxs(
7410
- Text,
7509
+ Text2,
7411
7510
  {
7412
7511
  variant: {
7413
7512
  base: "content9",
@@ -7442,7 +7541,7 @@ var TipsContent = ({
7442
7541
  ),
7443
7542
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
7444
7543
  /* @__PURE__ */ jsxRuntime.jsx(
7445
- Text,
7544
+ Text2,
7446
7545
  {
7447
7546
  variant: {
7448
7547
  base: "content9",
@@ -7456,7 +7555,7 @@ var TipsContent = ({
7456
7555
  ] }),
7457
7556
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
7458
7557
  /* @__PURE__ */ jsxRuntime.jsx(
7459
- Text,
7558
+ Text2,
7460
7559
  {
7461
7560
  variant: {
7462
7561
  base: "content9",
@@ -7467,7 +7566,7 @@ var TipsContent = ({
7467
7566
  }
7468
7567
  ),
7469
7568
  points === "0" && !fromTokenInfo.isSolana ? /* @__PURE__ */ jsxRuntime.jsx(
7470
- Text,
7569
+ Text2,
7471
7570
  {
7472
7571
  variant: "content9",
7473
7572
  color: "white",
@@ -7506,7 +7605,7 @@ var TipsContent = ({
7506
7605
  ),
7507
7606
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
7508
7607
  /* @__PURE__ */ jsxRuntime.jsx(
7509
- Text,
7608
+ Text2,
7510
7609
  {
7511
7610
  variant: {
7512
7611
  base: "content9",
@@ -7520,7 +7619,7 @@ var TipsContent = ({
7520
7619
  ] }),
7521
7620
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
7522
7621
  /* @__PURE__ */ jsxRuntime.jsx(
7523
- Text,
7622
+ Text2,
7524
7623
  {
7525
7624
  variant: {
7526
7625
  base: "content9",
@@ -7537,7 +7636,7 @@ var TipsContent = ({
7537
7636
  ] }),
7538
7637
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
7539
7638
  /* @__PURE__ */ jsxRuntime.jsx(
7540
- Text,
7639
+ Text2,
7541
7640
  {
7542
7641
  variant: {
7543
7642
  base: "content9",
@@ -7548,7 +7647,7 @@ var TipsContent = ({
7548
7647
  }
7549
7648
  ),
7550
7649
  points === "0" && !fromTokenInfo.isSolana ? /* @__PURE__ */ jsxRuntime.jsx(
7551
- Text,
7650
+ Text2,
7552
7651
  {
7553
7652
  variant: "content9",
7554
7653
  color: "white",
@@ -7605,7 +7704,7 @@ var TxInfo = ({
7605
7704
  const renderPriceImpactPercentage = () => {
7606
7705
  if (priceImpact.bridgeFee === "0" && priceImpact.dstGasFee === "0" && priceImpact.swapFee === "0") {
7607
7706
  return /* @__PURE__ */ jsxRuntime.jsx(
7608
- Text,
7707
+ Text2,
7609
7708
  {
7610
7709
  variant: "content9",
7611
7710
  color: theme.highlightButtonText,
@@ -7620,17 +7719,17 @@ var TxInfo = ({
7620
7719
  const inPrice = Number(fromAmountToUsd.replace(/,/g, ""));
7621
7720
  const outPrice = Number(toAmountToUsd.replace(/,/g, ""));
7622
7721
  if (outPrice > inPrice) {
7623
- return /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.defaultTextColor, children: `+${((outPrice - inPrice) / inPrice * 100).toFixed(2)}%` });
7722
+ return /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.defaultTextColor, children: `+${((outPrice - inPrice) / inPrice * 100).toFixed(2)}%` });
7624
7723
  }
7625
- return /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.defaultTextColor, children: `-${((inPrice - outPrice) / inPrice * 100).toFixed(2)}%` });
7724
+ return /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.defaultTextColor, children: `-${((inPrice - outPrice) / inPrice * 100).toFixed(2)}%` });
7626
7725
  }
7627
- return /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.defaultTextColor, children: "-" });
7726
+ return /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.defaultTextColor, children: "-" });
7628
7727
  };
7629
7728
  const renderSoneiumScore = React5.useMemo(() => {
7630
7729
  if (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868 || fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868) {
7631
7730
  return /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7632
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Soneium Score" }),
7633
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, children: "+ 1" })
7731
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Soneium Score" }),
7732
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, children: "+ 1" })
7634
7733
  ] });
7635
7734
  }
7636
7735
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
@@ -7649,7 +7748,7 @@ var TxInfo = ({
7649
7748
  alignItems: "center",
7650
7749
  children: [
7651
7750
  /* @__PURE__ */ jsxRuntime.jsx(
7652
- Text,
7751
+ Text2,
7653
7752
  {
7654
7753
  variant: textVariant,
7655
7754
  fontSize: ["10px", "12px"],
@@ -7666,7 +7765,7 @@ var TxInfo = ({
7666
7765
  margin: "0 2px"
7667
7766
  }
7668
7767
  ),
7669
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, fontSize: ["10px", "12px"], children: "Score" })
7768
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, fontSize: ["10px", "12px"], children: "Score" })
7670
7769
  ]
7671
7770
  }
7672
7771
  );
@@ -7732,7 +7831,7 @@ var TxInfo = ({
7732
7831
  ] }, index);
7733
7832
  }) });
7734
7833
  }
7735
- return /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, children: router });
7834
+ return /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, children: router });
7736
7835
  };
7737
7836
  return /* @__PURE__ */ jsxRuntime.jsxs(
7738
7837
  react.Collapsible.Root,
@@ -7762,7 +7861,7 @@ var TxInfo = ({
7762
7861
  h: "14px"
7763
7862
  }
7764
7863
  ),
7765
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, whiteSpace: "nowrap", children: isRateReversed ? `1 ${toTokenInfo.symbol} = ${fromAmountInUnit} ${fromTokenInfo.symbol}` : `1 ${fromTokenInfo.symbol} = ${toAmountInUnitStr} ${toTokenInfo.symbol}` })
7864
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, whiteSpace: "nowrap", children: isRateReversed ? `1 ${toTokenInfo.symbol} = ${fromAmountInUnit} ${fromTokenInfo.symbol}` : `1 ${fromTokenInfo.symbol} = ${toAmountInUnitStr} ${toTokenInfo.symbol}` })
7766
7865
  ]
7767
7866
  }
7768
7867
  ),
@@ -7784,7 +7883,7 @@ var TxInfo = ({
7784
7883
  /* @__PURE__ */ jsxRuntime.jsx(react.Collapsible.Content, { w: "100%", pb: 1.5, color: theme.defaultTextColor, children: /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { w: "100%", align: "start", fontSize: "xs", gap: 3, children: [
7785
7884
  /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { bg: theme.defaultBgColor, p: 3, borderRadius: "12px", w: "100%", children: [
7786
7885
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7787
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Price Impact" }),
7886
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Price Impact" }),
7788
7887
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
7789
7888
  renderPriceImpactPercentage(),
7790
7889
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -7814,14 +7913,14 @@ var TxInfo = ({
7814
7913
  ] })
7815
7914
  ] }),
7816
7915
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7817
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Slippage" }),
7818
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: textVariant, children: [
7916
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Slippage" }),
7917
+ /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: textVariant, children: [
7819
7918
  formatSlippage(slippage),
7820
7919
  "%"
7821
7920
  ] })
7822
7921
  ] }),
7823
7922
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7824
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Min. Received" }),
7923
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Min. Received" }),
7825
7924
  /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { gap: 1, children: /* @__PURE__ */ jsxRuntime.jsx(
7826
7925
  TokenAmountText,
7827
7926
  {
@@ -7834,10 +7933,10 @@ var TxInfo = ({
7834
7933
  ] }),
7835
7934
  /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { bg: theme.defaultBgColor, p: 3, borderRadius: "12px", w: "100%", children: [
7836
7935
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7837
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Estimated Time" }),
7936
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Estimated Time" }),
7838
7937
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
7839
7938
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { boxSize: "14px", children: /* @__PURE__ */ jsxRuntime.jsx(TimeIcon, {}) }),
7840
- /* @__PURE__ */ jsxRuntime.jsxs(Text, { variant: textVariant, children: [
7939
+ /* @__PURE__ */ jsxRuntime.jsxs(Text2, { variant: textVariant, children: [
7841
7940
  "~",
7842
7941
  estimatedTime,
7843
7942
  "s"
@@ -7845,11 +7944,11 @@ var TxInfo = ({
7845
7944
  ] })
7846
7945
  ] }),
7847
7946
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7848
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "Recipient Address" }),
7849
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, children: sliceAddress(recipient) })
7947
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "Recipient Address" }),
7948
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, children: sliceAddress(recipient) })
7850
7949
  ] }),
7851
7950
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", children: [
7852
- /* @__PURE__ */ jsxRuntime.jsx(Text, { variant: textVariant, color: theme.weakTextColor, children: "AI Router" }),
7951
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: textVariant, color: theme.weakTextColor, children: "AI Router" }),
7853
7952
  renderAiRouter()
7854
7953
  ] }),
7855
7954
  renderSoneiumScore
@@ -8256,10 +8355,6 @@ var DifferentAddressDialog = ({
8256
8355
  );
8257
8356
  };
8258
8357
  var DifferentAddressDialog_default = DifferentAddressDialog;
8259
- var useRouter = () => ({ push: (_url) => {
8260
- }, replace: (_url) => {
8261
- } });
8262
- var usePathname = () => "";
8263
8358
  var FormBody = ({
8264
8359
  getQuote,
8265
8360
  quoteInfo,
@@ -8271,6 +8366,7 @@ var FormBody = ({
8271
8366
  refetchQuote,
8272
8367
  config
8273
8368
  }) => {
8369
+ const { theme } = useWidgetTheme();
8274
8370
  const {
8275
8371
  fromAmount,
8276
8372
  toAmount,
@@ -8286,129 +8382,8 @@ var FormBody = ({
8286
8382
  } = useSwapAndBridgeContextStore();
8287
8383
  const { chains } = useChainsStore();
8288
8384
  const { tokens } = useTokensStore();
8289
- const { replace: replaceLink } = useRouter();
8290
- const pathname = usePathname();
8291
- const { isTrendingOpen, setTrendingClientReact, setIsTrendingLonger } = { isTrendingOpen: false, setTrendingClientReact: (_v) => {
8292
- }, setIsTrendingLonger: (_v) => {
8293
- } };
8294
- const isMobile = react.useBreakpointValue({ base: true, md: false });
8295
8385
  const [isFromHyperChain, setIsFromHyperChain] = React5.useState(false);
8296
8386
  const [isToHyperChain, setIsToHyperChain] = React5.useState(false);
8297
- const updateSearchParams = React5.useCallback(
8298
- (params) => {
8299
- if (typeof window === "undefined") return;
8300
- const searchParams = window?.location?.search;
8301
- const newParams = new URLSearchParams(searchParams);
8302
- Object.entries(params).forEach(([key, value]) => {
8303
- newParams.set(key, value);
8304
- });
8305
- const newPath = decodeURIComponent(pathname.replace(/\/+$/, ""));
8306
- if (tokens && chains && matchesAnyPatternUsingArray(newPath)) {
8307
- if (toRegex.test(newPath)) {
8308
- const [exists, chainsInfo2] = findItemByName2(
8309
- chains || [],
8310
- newPath.replace("/", "")
8311
- );
8312
- if (!exists) return;
8313
- const foundItem = tokens.find(
8314
- (item) => item.chain_id === chainsInfo2?.chain_id
8315
- );
8316
- if (foundItem) {
8317
- newParams.set("to_chain", foundItem.chain_id.toString());
8318
- newParams.set("to_token", foundItem.address.toString());
8319
- }
8320
- } else if (toAndTokenRegex.test(newPath)) {
8321
- const arr = newPath.replace("/", "").split("&");
8322
- const [exists, chainsInfo2] = findItemByName2(chains, arr[0]);
8323
- if (!exists) return;
8324
- const [result, foundItem] = findItemBySymbol2(
8325
- tokens,
8326
- arr[1],
8327
- chainsInfo2?.chain_id
8328
- );
8329
- if (!result) return;
8330
- if (result && foundItem) {
8331
- newParams.set("to_chain", foundItem.chain_id.toString());
8332
- newParams.set("to_token", foundItem.address.toString());
8333
- }
8334
- } else if (fromRegex.test(newPath)) {
8335
- const arr = newPath.split("&");
8336
- const [exists, chainsInfo2] = findItemByName2(chains, arr[1]);
8337
- if (!exists) return;
8338
- const foundItem = tokens.find(
8339
- (item) => item.chain_id === chainsInfo2?.chain_id
8340
- );
8341
- if (foundItem) {
8342
- newParams.set("from_chain", foundItem.chain_id.toString());
8343
- newParams.set("from_token", foundItem.address.toString());
8344
- }
8345
- } else if (fromAndTokenRegex.test(newPath)) {
8346
- const arr = newPath.replace("/", "").split("&");
8347
- const [exists, chainsInfo2] = findItemByName2(chains, arr[0]);
8348
- if (!exists) return;
8349
- const [result, foundItem] = findItemBySymbol2(
8350
- tokens,
8351
- arr[1],
8352
- chainsInfo2?.chain_id
8353
- );
8354
- if (!result) return;
8355
- if (result && foundItem) {
8356
- newParams.set("from_chain", foundItem.chain_id.toString());
8357
- newParams.set("from_token", foundItem.address.toString());
8358
- }
8359
- } else if (fromAndToRegex.test(newPath)) {
8360
- const arr = newPath.split("/");
8361
- const [resultFrom, fromChainsInfo] = findItemByName2(chains, arr[1]);
8362
- if (!resultFrom) return;
8363
- const foundFromItem = tokens.find(
8364
- (item) => item.chain_id === fromChainsInfo?.chain_id
8365
- );
8366
- if (!foundFromItem) return;
8367
- newParams.set("from_chain", foundFromItem.chain_id.toString());
8368
- newParams.set("from_token", foundFromItem.address.toString());
8369
- const [resultTo, toChainsInfo] = findItemByName2(chains, arr[2]);
8370
- if (!resultTo) return;
8371
- const foundToItem = tokens.find(
8372
- (item) => item.chain_id === toChainsInfo?.chain_id
8373
- );
8374
- if (!foundToItem) return;
8375
- newParams.set("to_chain", foundToItem.chain_id.toString());
8376
- newParams.set("to_token", foundToItem.address.toString());
8377
- } else if (fromAndTokenAndToAndTokenRegex.test(newPath)) {
8378
- const arr = newPath.split("/");
8379
- const arrFrom = arr[1].split("&");
8380
- const [resultFrom, fromChainsInfo] = findItemByName2(
8381
- chains,
8382
- arrFrom[0]
8383
- );
8384
- if (!resultFrom) return;
8385
- const [resultFromToken, fromTokenInfo2] = findItemBySymbol2(
8386
- tokens,
8387
- arrFrom[1],
8388
- fromChainsInfo?.chain_id
8389
- );
8390
- if (!resultFromToken) return;
8391
- const arrTo = arr[2].split("&");
8392
- const [resultTo, toChainsInfo] = findItemByName2(chains, arrTo[0]);
8393
- if (!resultTo) return;
8394
- const [resultToToken, toTokenInfo2] = findItemBySymbol2(
8395
- tokens,
8396
- arrTo[1],
8397
- toChainsInfo?.chain_id
8398
- );
8399
- if (!resultToToken) return;
8400
- if (fromTokenInfo2 && toTokenInfo2) {
8401
- newParams.set("to_chain", toTokenInfo2.chain_id.toString());
8402
- newParams.set("to_token", toTokenInfo2.address.toString());
8403
- newParams.set("from_chain", fromTokenInfo2.chain_id.toString());
8404
- newParams.set("from_token", fromTokenInfo2.address.toString());
8405
- }
8406
- }
8407
- }
8408
- replaceLink(`${pathname.replace(pathname, "")}/?${newParams.toString()}`);
8409
- },
8410
- [pathname, replaceLink, chains, tokens]
8411
- );
8412
8387
  const [isModalOpen, setIsModalOpen] = React5.useState(false);
8413
8388
  const [isDifferentAddressDialogOpen, setIsDifferentAddressDialogOpen] = React5.useState(false);
8414
8389
  const [isSelectingFromToken, setIsSelectingFromToken] = React5.useState(false);
@@ -8432,20 +8407,24 @@ var FormBody = ({
8432
8407
  address,
8433
8408
  isToHyperChain
8434
8409
  );
8435
- const fromTokenBalanceHyper = {
8410
+ const fromTokenBalanceHyper = React5.useMemo(() => ({
8436
8411
  decimals: 6,
8437
8412
  formatted: fromTokenBalanceHyperBack?.withdrawable,
8438
8413
  symbol: "USDC",
8439
8414
  value: toBigInt(
8440
- fromTokenBalanceHyperBack?.withdrawable ? fromTokenBalanceHyperBack?.withdrawable : "0")
8441
- };
8442
- const toTokenBalanceHyper = {
8415
+ fromTokenBalanceHyperBack?.withdrawable ? fromTokenBalanceHyperBack?.withdrawable : "0",
8416
+ 6
8417
+ )
8418
+ }), [fromTokenBalanceHyperBack?.withdrawable]);
8419
+ const toTokenBalanceHyper = React5.useMemo(() => ({
8443
8420
  decimals: 6,
8444
8421
  formatted: toTokenBalanceHyperBack?.withdrawable,
8445
8422
  symbol: "USDC",
8446
8423
  value: toBigInt(
8447
- toTokenBalanceHyperBack?.withdrawable ? toTokenBalanceHyperBack?.withdrawable : "0")
8448
- };
8424
+ toTokenBalanceHyperBack?.withdrawable ? toTokenBalanceHyperBack?.withdrawable : "0",
8425
+ 6
8426
+ )
8427
+ }), [toTokenBalanceHyperBack?.withdrawable]);
8449
8428
  React5.useEffect(() => {
8450
8429
  if (fromTokenInfo.chain_id === hyperliquidChainId) {
8451
8430
  setIsFromHyperChain(true);
@@ -8615,15 +8594,12 @@ var FormBody = ({
8615
8594
  }, [tokens]);
8616
8595
  const handleSelectToken = React5.useCallback(
8617
8596
  (tokenInfo) => {
8618
- const params = {};
8619
8597
  const isTestnetChain = (chainId) => {
8620
8598
  const chainInfo = chains?.find((chain) => chain.chain_id === chainId);
8621
8599
  return chainInfo?.is_testnet === true;
8622
8600
  };
8623
8601
  if (isSelectingFromToken) {
8624
8602
  setFromTokenInfo(tokenInfo);
8625
- params.from_chain = tokenInfo.chain_id.toString();
8626
- params.from_token = tokenInfo.address;
8627
8603
  if (isTestnetChain(tokenInfo.chain_id)) {
8628
8604
  const isNativeToken = tokenInfo.tags?.includes("native") || tokenInfo.address === viem.zeroAddress;
8629
8605
  if (isNativeToken) {
@@ -8632,8 +8608,6 @@ var FormBody = ({
8632
8608
  );
8633
8609
  if (otherToken) {
8634
8610
  setToTokenInfo(otherToken);
8635
- params.to_chain = otherToken.chain_id.toString();
8636
- params.to_token = otherToken.address;
8637
8611
  }
8638
8612
  } else {
8639
8613
  const nativeToken = tokens?.find(
@@ -8641,16 +8615,12 @@ var FormBody = ({
8641
8615
  );
8642
8616
  if (nativeToken && (nativeToken.chain_id !== toTokenInfo?.chain_id || nativeToken.address !== toTokenInfo?.address)) {
8643
8617
  setToTokenInfo(nativeToken);
8644
- params.to_chain = nativeToken.chain_id.toString();
8645
- params.to_token = nativeToken.address;
8646
8618
  } else if (!nativeToken) {
8647
8619
  const otherToken = tokens?.find(
8648
8620
  (t) => t.chain_id === tokenInfo.chain_id && t.address !== tokenInfo.address
8649
8621
  );
8650
8622
  if (otherToken) {
8651
8623
  setToTokenInfo(otherToken);
8652
- params.to_chain = otherToken.chain_id.toString();
8653
- params.to_token = otherToken.address;
8654
8624
  }
8655
8625
  }
8656
8626
  }
@@ -8661,15 +8631,11 @@ var FormBody = ({
8661
8631
  );
8662
8632
  if (baseEthToken) {
8663
8633
  setToTokenInfo(baseEthToken);
8664
- params.to_chain = baseEthToken.chain_id.toString();
8665
- params.to_token = baseEthToken.address;
8666
8634
  }
8667
8635
  }
8668
8636
  }
8669
8637
  } else {
8670
8638
  setToTokenInfo(tokenInfo);
8671
- params.to_chain = tokenInfo.chain_id.toString();
8672
- params.to_token = tokenInfo.address;
8673
8639
  if (isTestnetChain(tokenInfo.chain_id)) {
8674
8640
  const isNativeToken = tokenInfo.tags?.includes("native") || tokenInfo.address === viem.zeroAddress;
8675
8641
  if (isNativeToken) {
@@ -8678,8 +8644,6 @@ var FormBody = ({
8678
8644
  );
8679
8645
  if (otherToken) {
8680
8646
  setFromTokenInfo(otherToken);
8681
- params.from_chain = otherToken.chain_id.toString();
8682
- params.from_token = otherToken.address;
8683
8647
  }
8684
8648
  } else {
8685
8649
  const nativeToken = tokens?.find(
@@ -8687,16 +8651,12 @@ var FormBody = ({
8687
8651
  );
8688
8652
  if (nativeToken && (nativeToken.chain_id !== fromTokenInfo?.chain_id || nativeToken.address !== fromTokenInfo?.address)) {
8689
8653
  setFromTokenInfo(nativeToken);
8690
- params.from_chain = nativeToken.chain_id.toString();
8691
- params.from_token = nativeToken.address;
8692
8654
  } else if (!nativeToken) {
8693
8655
  const otherToken = tokens?.find(
8694
8656
  (t) => t.chain_id === tokenInfo.chain_id && t.address !== tokenInfo.address
8695
8657
  );
8696
8658
  if (otherToken) {
8697
8659
  setFromTokenInfo(otherToken);
8698
- params.from_chain = otherToken.chain_id.toString();
8699
- params.from_token = otherToken.address;
8700
8660
  }
8701
8661
  }
8702
8662
  }
@@ -8707,13 +8667,10 @@ var FormBody = ({
8707
8667
  );
8708
8668
  if (soneiumEthToken) {
8709
8669
  setFromTokenInfo(soneiumEthToken);
8710
- params.from_chain = soneiumEthToken.chain_id.toString();
8711
- params.from_token = soneiumEthToken.address;
8712
8670
  }
8713
8671
  }
8714
8672
  }
8715
8673
  }
8716
- updateSearchParams(params);
8717
8674
  handleCloseModal();
8718
8675
  setQuoteInfo(initialQuoteInfo);
8719
8676
  saveTokenSelection();
@@ -8724,7 +8681,6 @@ var FormBody = ({
8724
8681
  setFromTokenInfo,
8725
8682
  setQuoteInfo,
8726
8683
  setToTokenInfo,
8727
- updateSearchParams,
8728
8684
  tokens,
8729
8685
  fromTokenInfo,
8730
8686
  toTokenInfo,
@@ -8742,12 +8698,6 @@ var FormBody = ({
8742
8698
  const _fromAmount = toAmount;
8743
8699
  setDifferentAddress(void 0);
8744
8700
  switchTokens();
8745
- updateSearchParams({
8746
- from_chain: _fromTokenInfo.chain_id.toString(),
8747
- from_token: _fromTokenInfo.address,
8748
- to_chain: _toTokenInfo.chain_id.toString(),
8749
- to_token: _toTokenInfo.address
8750
- });
8751
8701
  const _fromAddress = () => {
8752
8702
  if (_fromTokenInfo.isSolana) {
8753
8703
  return solanaWalletAddress || "";
@@ -8802,15 +8752,6 @@ var FormBody = ({
8802
8752
  const handleToAmountChange = (value) => {
8803
8753
  setToAmount(value);
8804
8754
  };
8805
- React5.useEffect(() => {
8806
- document.getElementById("js_main_form");
8807
- }, [
8808
- isMobile,
8809
- isTrendingOpen,
8810
- setTrendingClientReact,
8811
- quoteInfo,
8812
- setIsTrendingLonger
8813
- ]);
8814
8755
  React5.useEffect(() => {
8815
8756
  const refetchQuote2 = async () => {
8816
8757
  await getQuote({
@@ -8866,7 +8807,7 @@ var FormBody = ({
8866
8807
  transform: ["translate(-50%, -100%)", "translate(-50%, -82.5%)"],
8867
8808
  cursor: toTokenInfo.chain_id === hyperliquidChainId ? "default" : "pointer",
8868
8809
  onClick: handleSwitchTokens,
8869
- color: "#81728C",
8810
+ color: theme.weakTextColor,
8870
8811
  boxSize: {
8871
8812
  base: "20px",
8872
8813
  md: "30px"
@@ -9111,7 +9052,9 @@ var SlippageSettings = ({ refetchQuote }) => {
9111
9052
  base: "20px",
9112
9053
  md: "22px"
9113
9054
  },
9114
- as: SettingsIcon
9055
+ as: SettingsIcon,
9056
+ position: "relative",
9057
+ top: "-2px"
9115
9058
  }
9116
9059
  ),
9117
9060
  showYellowDot && /* @__PURE__ */ jsxRuntime.jsx(
@@ -9159,7 +9102,7 @@ var SlippageSettings = ({ refetchQuote }) => {
9159
9102
  boxShadow: "0px 0px 10px 0px rgba(0, 0, 0, 0.1)"
9160
9103
  },
9161
9104
  content: /* @__PURE__ */ jsxRuntime.jsx(
9162
- Text,
9105
+ Text2,
9163
9106
  {
9164
9107
  variant: {
9165
9108
  base: "content8",
@@ -9194,7 +9137,7 @@ var SlippageSettings = ({ refetchQuote }) => {
9194
9137
  top: 0,
9195
9138
  right: 0,
9196
9139
  children: /* @__PURE__ */ jsxRuntime.jsx(
9197
- Text,
9140
+ Text2,
9198
9141
  {
9199
9142
  variant: {
9200
9143
  base: "content9",
@@ -9225,7 +9168,7 @@ var SlippageSettings = ({ refetchQuote }) => {
9225
9168
  borderRadius: "10px",
9226
9169
  onClick: () => handlePresetClick(presetValue),
9227
9170
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9228
- Text,
9171
+ Text2,
9229
9172
  {
9230
9173
  variant: {
9231
9174
  base: "content9",
@@ -9313,7 +9256,7 @@ var SlippageSettings = ({ refetchQuote }) => {
9313
9256
  }
9314
9257
  ),
9315
9258
  /* @__PURE__ */ jsxRuntime.jsx(
9316
- Text,
9259
+ Text2,
9317
9260
  {
9318
9261
  variant: {
9319
9262
  base: "content9",
@@ -9338,10 +9281,92 @@ var FormTop = ({
9338
9281
  quoteInfo,
9339
9282
  clearLockedRequestId,
9340
9283
  refreshInterval = 30,
9341
- hideCountdown = false
9284
+ hideCountdown = false,
9285
+ onHistoryClick
9342
9286
  }) => {
9343
9287
  const { isLoading: isLoadingRefresh } = useRefreshLoading();
9344
9288
  const { theme } = useWidgetTheme();
9289
+ const { disconnect } = wagmi.useDisconnect();
9290
+ const connectors = wagmi.useConnectors();
9291
+ const { connector: wagmiConnector } = wagmi.useAccount();
9292
+ const { removeWallet } = sdkReactCore.useDynamicContext();
9293
+ const userWallets = sdkReactCore.useUserWallets();
9294
+ const {
9295
+ isEthWalletConnected,
9296
+ evmWalletConnectorId,
9297
+ isSolanaWalletConnected,
9298
+ setEvmWalletInfo,
9299
+ setIsEthWalletConnected,
9300
+ setSolanaWalletAddress,
9301
+ setIsSolanaWalletConnected,
9302
+ setIsLoggingOut: setStoreLoggingOut,
9303
+ setLastDisconnectTimestamp
9304
+ } = useWalletConnectedStore();
9305
+ const isAnyWalletConnected = isEthWalletConnected || isSolanaWalletConnected;
9306
+ const [isLogoutDialogOpen, setIsLogoutDialogOpen] = React5.useState(false);
9307
+ const [isLoggingOut, setIsLoggingOut] = React5.useState(false);
9308
+ const handleLogout = React5.useCallback(async () => {
9309
+ setIsLoggingOut(true);
9310
+ setStoreLoggingOut(true);
9311
+ const currentEvmConnectorId = evmWalletConnectorId;
9312
+ try {
9313
+ for (const wallet of userWallets) {
9314
+ const walletId = wallet.id || wallet.walletId;
9315
+ if (walletId) {
9316
+ try {
9317
+ await removeWallet(walletId);
9318
+ } catch (e) {
9319
+ console.error("Dynamic removeWallet failed:", e);
9320
+ }
9321
+ }
9322
+ }
9323
+ const evmConnector = connectors.find((c) => c.id === currentEvmConnectorId);
9324
+ if (evmConnector) {
9325
+ disconnect({ connector: evmConnector });
9326
+ } else if (wagmiConnector) {
9327
+ disconnect({ connector: wagmiConnector });
9328
+ }
9329
+ if (typeof window !== "undefined") {
9330
+ window.localStorage.removeItem("wagmi.cache");
9331
+ window.localStorage.removeItem("wagmi.wallet");
9332
+ window.sessionStorage.removeItem("wagmi.cache");
9333
+ window.sessionStorage.removeItem("wagmi.wallet");
9334
+ const storages = [window.localStorage, window.sessionStorage];
9335
+ storages.forEach((storage) => {
9336
+ const keysToRemove = [];
9337
+ for (let i = 0; i < storage.length; i++) {
9338
+ const key = storage.key(i);
9339
+ if (key && (key.startsWith("dynamic_") || key.includes("_dynamic_"))) {
9340
+ keysToRemove.push(key);
9341
+ }
9342
+ }
9343
+ keysToRemove.forEach((key) => storage.removeItem(key));
9344
+ });
9345
+ }
9346
+ setEvmWalletInfo(null, null);
9347
+ setIsEthWalletConnected(false);
9348
+ setSolanaWalletAddress(null);
9349
+ setIsSolanaWalletConnected(false);
9350
+ setLastDisconnectTimestamp(Date.now());
9351
+ } finally {
9352
+ setStoreLoggingOut(false);
9353
+ setIsLoggingOut(false);
9354
+ setIsLogoutDialogOpen(false);
9355
+ }
9356
+ }, [
9357
+ userWallets,
9358
+ removeWallet,
9359
+ connectors,
9360
+ evmWalletConnectorId,
9361
+ wagmiConnector,
9362
+ disconnect,
9363
+ setEvmWalletInfo,
9364
+ setIsEthWalletConnected,
9365
+ setSolanaWalletAddress,
9366
+ setIsSolanaWalletConnected,
9367
+ setStoreLoggingOut,
9368
+ setLastDisconnectTimestamp
9369
+ ]);
9345
9370
  const isPolling = Boolean(quoteInfo?.request_id && !isLoadingRefresh);
9346
9371
  const [countdown, setCountdown] = React5.useState(refreshInterval);
9347
9372
  React5.useEffect(() => {
@@ -9379,7 +9404,24 @@ var FormTop = ({
9379
9404
  children: "Bridge & Swap"
9380
9405
  }
9381
9406
  ),
9382
- /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { color: theme.weakTextColor || "#81728C", children: [
9407
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { color: theme.weakTextColor, children: [
9408
+ isAnyWalletConnected && /* @__PURE__ */ jsxRuntime.jsx(
9409
+ react.Box,
9410
+ {
9411
+ w: "21px",
9412
+ h: "21px",
9413
+ display: "flex",
9414
+ alignItems: "center",
9415
+ justifyContent: "center",
9416
+ cursor: "pointer",
9417
+ onClick: onHistoryClick,
9418
+ title: "Transaction history",
9419
+ children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 32 32", children: [
9420
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: theme.weakTextColor, d: "M14 2l-8 8v20h22v-28h-14zM14 4.8v5.2h-5.2l5.2-5.2zM26 28h-18v-16h8v-8h10v24z" }),
9421
+ /* @__PURE__ */ jsxRuntime.jsx("path", { fill: theme.weakTextColor, d: "M10 14h14v2h-14v-2zM10 18h14v2h-14v-2zM10 22h14v2h-14v-2z" })
9422
+ ] })
9423
+ }
9424
+ ),
9383
9425
  /* @__PURE__ */ jsxRuntime.jsxs(
9384
9426
  react.HStack,
9385
9427
  {
@@ -9442,15 +9484,43 @@ var FormTop = ({
9442
9484
  textAlign: "center",
9443
9485
  lineHeight: "28px",
9444
9486
  fontSize: "10px",
9445
- color: countdown <= 10 ? "#FF4D4F" : "#81728C",
9487
+ color: countdown <= 10 ? theme.defaultTextColor : theme.highlightTextColor,
9446
9488
  children: isPolling && !hideCountdown && countdown > 0 ? countdown : ""
9447
9489
  }
9448
9490
  )
9449
9491
  ]
9450
9492
  }
9451
9493
  ),
9452
- /* @__PURE__ */ jsxRuntime.jsx(SlippageSettings, { refetchQuote })
9453
- ] })
9494
+ /* @__PURE__ */ jsxRuntime.jsx(SlippageSettings, { refetchQuote }),
9495
+ isAnyWalletConnected && /* @__PURE__ */ jsxRuntime.jsx(
9496
+ react.HStack,
9497
+ {
9498
+ w: "30px",
9499
+ h: "30px",
9500
+ display: "flex",
9501
+ alignItems: "center",
9502
+ justifyContent: "center",
9503
+ cursor: "pointer",
9504
+ title: "Disconnect all wallets",
9505
+ onClick: () => setIsLogoutDialogOpen(true),
9506
+ children: /* @__PURE__ */ jsxRuntime.jsx(io.IoMdLogOut, { style: { width: "22px", height: "22px" }, color: theme.weakTextColor })
9507
+ }
9508
+ )
9509
+ ] }),
9510
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.Root, { open: isLogoutDialogOpen, onOpenChange: (e) => setIsLogoutDialogOpen(e.open), children: /* @__PURE__ */ jsxRuntime.jsxs(react.Portal, { children: [
9511
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.Backdrop, {}),
9512
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.Positioner, { justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxRuntime.jsxs(react.Dialog.Content, { bgColor: theme.defaultBgColor, color: theme.defaultTextColor, width: ["90vw", "400px"], children: [
9513
+ /* @__PURE__ */ jsxRuntime.jsxs(react.Dialog.Header, { justifyContent: "center", children: [
9514
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.Title, { padding: "15px 0", children: "Disconnect Wallet" }),
9515
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.CloseTrigger, {})
9516
+ ] }),
9517
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.Body, { marginBottom: "20px", children: /* @__PURE__ */ jsxRuntime.jsx(react.Text, { textAlign: "center", padding: ["0 15px", "0 30px"], children: "This operation will disconnect all connected wallets." }) }),
9518
+ /* @__PURE__ */ jsxRuntime.jsxs(react.Dialog.Footer, { padding: ["10px 20px 20px"], justifyContent: "center", children: [
9519
+ /* @__PURE__ */ jsxRuntime.jsx(react.Dialog.ActionTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(react.Button, { variant: "outline", disabled: isLoggingOut, w: "100px", bgColor: theme.normalButtonBg, color: theme.normalButtonText, children: "Cancel" }) }),
9520
+ /* @__PURE__ */ jsxRuntime.jsx(react.Button, { bgColor: theme.highlightButtonBg, color: theme.highlightButtonText, onClick: handleLogout, loading: isLoggingOut, w: "100px", children: "Disconnect" })
9521
+ ] })
9522
+ ] }) })
9523
+ ] }) })
9454
9524
  ] });
9455
9525
  };
9456
9526
  var Timer = ({ stop, onTick }) => {
@@ -9497,7 +9567,7 @@ var Timer = ({ stop, onTick }) => {
9497
9567
  }
9498
9568
  }, [stop]);
9499
9569
  return /* @__PURE__ */ jsxRuntime.jsx(
9500
- Text,
9570
+ Text2,
9501
9571
  {
9502
9572
  variant: {
9503
9573
  base: "content8",
@@ -9879,7 +9949,7 @@ var TxState = ({
9879
9949
  if (isSolanaTransaction && solanaFromTxHash) {
9880
9950
  if (solanaStatus === "confirmed") {
9881
9951
  return /* @__PURE__ */ jsxRuntime.jsx(react.Link, { href: getSolanaTxLink(solanaFromTxHash), target: "_blank", children: /* @__PURE__ */ jsxRuntime.jsxs(
9882
- Text,
9952
+ Text2,
9883
9953
  {
9884
9954
  variant: {
9885
9955
  base: "content9",
@@ -9897,7 +9967,7 @@ var TxState = ({
9897
9967
  }
9898
9968
  if (solanaStatus === "failed") {
9899
9969
  return /* @__PURE__ */ jsxRuntime.jsx(
9900
- Text,
9970
+ Text2,
9901
9971
  {
9902
9972
  variant: {
9903
9973
  base: "content9",
@@ -9909,7 +9979,7 @@ var TxState = ({
9909
9979
  );
9910
9980
  }
9911
9981
  return /* @__PURE__ */ jsxRuntime.jsx(
9912
- Text,
9982
+ Text2,
9913
9983
  {
9914
9984
  variant: {
9915
9985
  base: "content9",
@@ -9927,7 +9997,7 @@ var TxState = ({
9927
9997
  href: getTxLink(fromTxHash, fromTokenInfo.chain_id),
9928
9998
  target: "_blank",
9929
9999
  children: /* @__PURE__ */ jsxRuntime.jsxs(
9930
- Text,
10000
+ Text2,
9931
10001
  {
9932
10002
  variant: {
9933
10003
  base: "content9",
@@ -9947,7 +10017,7 @@ var TxState = ({
9947
10017
  }
9948
10018
  if (fromTxHash && receiptStatus === "failed" || isFetched) {
9949
10019
  return /* @__PURE__ */ jsxRuntime.jsx(
9950
- Text,
10020
+ Text2,
9951
10021
  {
9952
10022
  variant: {
9953
10023
  base: "content9",
@@ -9960,7 +10030,7 @@ var TxState = ({
9960
10030
  }
9961
10031
  if (isTransactionBlocked) {
9962
10032
  return /* @__PURE__ */ jsxRuntime.jsx(
9963
- Text,
10033
+ Text2,
9964
10034
  {
9965
10035
  variant: {
9966
10036
  base: "content9",
@@ -9972,7 +10042,7 @@ var TxState = ({
9972
10042
  );
9973
10043
  }
9974
10044
  return /* @__PURE__ */ jsxRuntime.jsx(
9975
- Text,
10045
+ Text2,
9976
10046
  {
9977
10047
  variant: {
9978
10048
  base: "content9",
@@ -10122,7 +10192,7 @@ var TxState = ({
10122
10192
  }
10123
10193
  ),
10124
10194
  /* @__PURE__ */ jsxRuntime.jsx(
10125
- Text,
10195
+ Text2,
10126
10196
  {
10127
10197
  variant: {
10128
10198
  base: "content8",
@@ -10134,7 +10204,7 @@ var TxState = ({
10134
10204
  )
10135
10205
  ] }),
10136
10206
  /* @__PURE__ */ jsxRuntime.jsx(
10137
- Text,
10207
+ Text2,
10138
10208
  {
10139
10209
  variant: {
10140
10210
  base: "content8",
@@ -10186,6 +10256,7 @@ var TxState = ({
10186
10256
  md: "16px"
10187
10257
  },
10188
10258
  w: "100%",
10259
+ backgroundColor: theme.assistBgColor,
10189
10260
  children: /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", gap: 1, children: [
10190
10261
  /* @__PURE__ */ jsxRuntime.jsx(
10191
10262
  BoxWithBg,
@@ -10229,6 +10300,7 @@ var TxState = ({
10229
10300
  base: "20px",
10230
10301
  md: "32px"
10231
10302
  },
10303
+ color: theme.weakTextColor,
10232
10304
  as: ArrowRightIcon
10233
10305
  }
10234
10306
  ),
@@ -10275,7 +10347,7 @@ var TxState = ({
10275
10347
  ),
10276
10348
  target: "_blank",
10277
10349
  children: /* @__PURE__ */ jsxRuntime.jsxs(
10278
- Text,
10350
+ Text2,
10279
10351
  {
10280
10352
  variant: {
10281
10353
  base: "content9",
@@ -10292,7 +10364,7 @@ var TxState = ({
10292
10364
  )
10293
10365
  }
10294
10366
  ) : /* @__PURE__ */ jsxRuntime.jsx(
10295
- Text,
10367
+ Text2,
10296
10368
  {
10297
10369
  variant: {
10298
10370
  base: "content9",
@@ -10326,7 +10398,7 @@ var TxState = ({
10326
10398
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
10327
10399
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: DateIcon }),
10328
10400
  /* @__PURE__ */ jsxRuntime.jsx(
10329
- Text,
10401
+ Text2,
10330
10402
  {
10331
10403
  variant: {
10332
10404
  base: "content8",
@@ -10338,7 +10410,7 @@ var TxState = ({
10338
10410
  )
10339
10411
  ] }),
10340
10412
  /* @__PURE__ */ jsxRuntime.jsx(
10341
- Text,
10413
+ Text2,
10342
10414
  {
10343
10415
  variant: {
10344
10416
  base: "content8",
@@ -10353,7 +10425,7 @@ var TxState = ({
10353
10425
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
10354
10426
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: TimeIcon }),
10355
10427
  /* @__PURE__ */ jsxRuntime.jsx(
10356
- Text,
10428
+ Text2,
10357
10429
  {
10358
10430
  variant: {
10359
10431
  base: "content8",
@@ -10376,7 +10448,7 @@ var TxState = ({
10376
10448
  /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1, children: [
10377
10449
  /* @__PURE__ */ jsxRuntime.jsx(react.Icon, { as: MoneyIcon }),
10378
10450
  /* @__PURE__ */ jsxRuntime.jsx(
10379
- Text,
10451
+ Text2,
10380
10452
  {
10381
10453
  variant: {
10382
10454
  base: "content8",
@@ -10388,7 +10460,7 @@ var TxState = ({
10388
10460
  )
10389
10461
  ] }),
10390
10462
  /* @__PURE__ */ jsxRuntime.jsx(
10391
- Text,
10463
+ Text2,
10392
10464
  {
10393
10465
  variant: {
10394
10466
  base: "content8",
@@ -10409,6 +10481,381 @@ var TxState = ({
10409
10481
  }
10410
10482
  ) });
10411
10483
  };
10484
+ async function getOrderHistory(address, offset = 0, limit = 4) {
10485
+ const url = `${BASE_API_URL}/v1/orders`;
10486
+ const res = await axios6__default.default.get(url, {
10487
+ params: {
10488
+ address: Array.isArray(address) ? address : [address],
10489
+ offset,
10490
+ limit
10491
+ },
10492
+ paramsSerializer: {
10493
+ indexes: null
10494
+ }
10495
+ });
10496
+ return res.data;
10497
+ }
10498
+ var useOrderHistory = (address, address2, offset, limit) => {
10499
+ const addresses = address && address2 ? [address, address2] : address;
10500
+ return reactQuery.useQuery({
10501
+ queryKey: ["orderHistory", addresses, offset],
10502
+ queryFn: () => addresses ? getOrderHistory(addresses, offset, limit) : Promise.reject("No address provided"),
10503
+ enabled: !!addresses,
10504
+ placeholderData: reactQuery.keepPreviousData,
10505
+ refetchOnWindowFocus: false
10506
+ });
10507
+ };
10508
+ function SuccessIcon() {
10509
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "16px", h: "16px", borderRadius: "full", bg: "#00CBB3", display: "flex", alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "8", viewBox: "0 0 10 8", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1 4L3.5 6.5L9 1", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) });
10510
+ }
10511
+ function ErrorIcon() {
10512
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "16px", h: "16px", borderRadius: "full", bg: "#FF4267", display: "flex", alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M1 1L7 7M7 1L1 7", stroke: "white", strokeWidth: "1.5", strokeLinecap: "round" }) }) });
10513
+ }
10514
+ function PendingIcon() {
10515
+ return /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "16px", h: "16px", borderRadius: "full", bg: "#FFD200", display: "flex", alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "4", cy: "4", r: "3", stroke: "white", strokeWidth: "1.5" }) }) });
10516
+ }
10517
+ function getStatusIcon(status) {
10518
+ switch (status) {
10519
+ case "Filled":
10520
+ return /* @__PURE__ */ jsxRuntime.jsx(SuccessIcon, {});
10521
+ case "Refund":
10522
+ case "Failed":
10523
+ return /* @__PURE__ */ jsxRuntime.jsx(ErrorIcon, {});
10524
+ case "Open":
10525
+ return /* @__PURE__ */ jsxRuntime.jsx(PendingIcon, {});
10526
+ default:
10527
+ return /* @__PURE__ */ jsxRuntime.jsx(SuccessIcon, {});
10528
+ }
10529
+ }
10530
+ function OrderHistoryItem({ order }) {
10531
+ const { theme } = useWidgetTheme();
10532
+ const fromTokenInfo = order.from_token_info;
10533
+ const toTokenInfo = order.to_token_info;
10534
+ const isSameChainSwap = order.from_chain === order.to_chain;
10535
+ const renderTxLink = (txHash, chainId, label) => {
10536
+ const link = getTxLink(txHash, chainId);
10537
+ if (!link) {
10538
+ return /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content8", color: theme.defaultTextColor, children: sliceAddress(txHash, 6) });
10539
+ }
10540
+ return /* @__PURE__ */ jsxRuntime.jsx("a", { href: link, target: "_blank", rel: "noreferrer", style: { textDecoration: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { gap: 1, children: /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content8", color: theme.highlightTextColor, children: sliceAddress(txHash, 6) }) }) });
10541
+ };
10542
+ return /* @__PURE__ */ jsxRuntime.jsxs(
10543
+ react.Box,
10544
+ {
10545
+ w: "100%",
10546
+ borderRadius: "12px",
10547
+ p: "10px 15px",
10548
+ bg: theme.assistBgColor,
10549
+ _hover: { bg: theme.highlightBgColor },
10550
+ transition: "background 0.15s",
10551
+ children: [
10552
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "center", mb: 2, children: [
10553
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 1.5, children: [
10554
+ getStatusIcon(isSameChainSwap ? "Filled" : order.status),
10555
+ /* @__PURE__ */ jsxRuntime.jsx(
10556
+ Text2,
10557
+ {
10558
+ variant: "content7",
10559
+ color: theme.defaultTextColor || "#15003E",
10560
+ fontWeight: 500,
10561
+ children: isSameChainSwap ? "Filled" : order.status
10562
+ }
10563
+ )
10564
+ ] }),
10565
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content8", color: theme.weakTextColor || "#81728C", children: dateFormatter(order.open_timestamp) })
10566
+ ] }),
10567
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { justify: "space-between", w: "100%", children: [
10568
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 2, mb: 1.5, children: [
10569
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "32px", h: "32px", flexShrink: 0, marginRight: "10px", children: /* @__PURE__ */ jsxRuntime.jsx(
10570
+ TokenIconWithNetworkLogo,
10571
+ {
10572
+ w: "100%",
10573
+ h: "100%",
10574
+ tokenInfo: fromTokenInfo
10575
+ }
10576
+ ) }),
10577
+ /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { align: "start", gap: 0.5, flex: 1, w: "80px", children: [
10578
+ /* @__PURE__ */ jsxRuntime.jsx(
10579
+ TokenAmountHeading,
10580
+ {
10581
+ amount: new biFraction.Fraction(order.from_amount),
10582
+ decimals: fromTokenInfo?.decimals,
10583
+ suffix: fromTokenInfo?.symbol,
10584
+ variant: "heading12"
10585
+ }
10586
+ ),
10587
+ /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { gap: 1, children: renderTxLink(order.open_tx_hash, order.from_chain) })
10588
+ ] })
10589
+ ] }),
10590
+ /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { justify: "center", my: 0.5, flex: 1, children: /* @__PURE__ */ jsxRuntime.jsx(hi2.HiMiniArrowRight, { color: theme.weakTextColor, width: "30px", height: "30px" }) }),
10591
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 2, mt: 0, children: [
10592
+ /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { align: "start", gap: 0.5, flex: 1, w: "80px", children: [
10593
+ /* @__PURE__ */ jsxRuntime.jsx(
10594
+ TokenAmountHeading,
10595
+ {
10596
+ amount: new biFraction.Fraction(order.to_amount || order.amount_out || "0"),
10597
+ decimals: toTokenInfo?.decimals,
10598
+ suffix: toTokenInfo?.symbol,
10599
+ variant: "heading12",
10600
+ justifyContent: "flex-end",
10601
+ width: "100%",
10602
+ display: "flex"
10603
+ }
10604
+ ),
10605
+ /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { gap: 1, justifyContent: "flex-end", w: "100%", children: isSameChainSwap ? renderTxLink(order.open_tx_hash, order.from_chain) : order.fill_tx_hash ? renderTxLink(order.fill_tx_hash, order.to_chain) : /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content8", color: theme.defaultTextColor, children: "Receiving..." }) })
10606
+ ] }),
10607
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "32px", h: "32px", flexShrink: 0, marginRight: "10px", marginLeft: "3px", children: /* @__PURE__ */ jsxRuntime.jsx(
10608
+ TokenIconWithNetworkLogo,
10609
+ {
10610
+ w: "100%",
10611
+ h: "100%",
10612
+ tokenInfo: toTokenInfo
10613
+ }
10614
+ ) })
10615
+ ] })
10616
+ ] })
10617
+ ]
10618
+ }
10619
+ );
10620
+ }
10621
+ var PaginationButton = ({
10622
+ currentPage,
10623
+ page,
10624
+ onClick
10625
+ }) => {
10626
+ const { theme } = useWidgetTheme();
10627
+ return /* @__PURE__ */ jsxRuntime.jsx(
10628
+ react.Box,
10629
+ {
10630
+ bg: currentPage === page ? theme.highlightButtonBg : "transparent",
10631
+ color: currentPage === page ? theme.highlightButtonText : theme.weakTextColor,
10632
+ w: "24px",
10633
+ h: "24px",
10634
+ borderRadius: "full",
10635
+ display: "flex",
10636
+ alignItems: "center",
10637
+ justifyContent: "center",
10638
+ cursor: "pointer",
10639
+ onClick,
10640
+ fontSize: "12px",
10641
+ fontWeight: 500,
10642
+ transition: "all 0.2s",
10643
+ children: page
10644
+ }
10645
+ );
10646
+ };
10647
+ function OrderHistoryPagination({
10648
+ currentPage,
10649
+ totalPages,
10650
+ setCurrentPage
10651
+ }) {
10652
+ const { theme } = useWidgetTheme();
10653
+ const handlePrevious = () => {
10654
+ if (currentPage > 1) setCurrentPage(currentPage - 1);
10655
+ };
10656
+ const handleNext = () => {
10657
+ if (currentPage < totalPages) setCurrentPage(currentPage + 1);
10658
+ };
10659
+ if (totalPages <= 1) return null;
10660
+ return /* @__PURE__ */ jsxRuntime.jsxs(
10661
+ react.HStack,
10662
+ {
10663
+ justify: "space-between",
10664
+ align: "center",
10665
+ pt: 2,
10666
+ pb: 1,
10667
+ gap: 2,
10668
+ w: "100%",
10669
+ children: [
10670
+ /* @__PURE__ */ jsxRuntime.jsx(
10671
+ react.Button,
10672
+ {
10673
+ variant: "plain",
10674
+ onClick: handlePrevious,
10675
+ disabled: currentPage === 1,
10676
+ h: "28px",
10677
+ minW: "28px",
10678
+ p: 0,
10679
+ children: /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { gap: 0, color: currentPage === 1 ? theme.disabledButtonText || "#B5B5B5" : theme.defaultTextColor || "#15003E", children: [
10680
+ /* @__PURE__ */ jsxRuntime.jsx(BackIcon, { size: 20 }),
10681
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", fontSize: "11px", children: "Prev" })
10682
+ ] })
10683
+ }
10684
+ ),
10685
+ /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { gap: 1, color: theme.weakTextColor || "#81728C", children: totalPages <= 7 ? Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => /* @__PURE__ */ jsxRuntime.jsx(
10686
+ PaginationButton,
10687
+ {
10688
+ currentPage,
10689
+ page,
10690
+ onClick: () => setCurrentPage(page)
10691
+ },
10692
+ page
10693
+ )) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10694
+ /* @__PURE__ */ jsxRuntime.jsx(
10695
+ PaginationButton,
10696
+ {
10697
+ currentPage,
10698
+ page: 1,
10699
+ onClick: () => setCurrentPage(1)
10700
+ }
10701
+ ),
10702
+ currentPage > 4 && /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", fontSize: "12px", children: "..." }),
10703
+ Array.from({ length: 3 }, (_, i) => {
10704
+ const page = currentPage - 1 + i;
10705
+ if (page > 1 && page < totalPages) {
10706
+ return /* @__PURE__ */ jsxRuntime.jsx(
10707
+ PaginationButton,
10708
+ {
10709
+ currentPage,
10710
+ page,
10711
+ onClick: () => setCurrentPage(page)
10712
+ },
10713
+ page
10714
+ );
10715
+ }
10716
+ return null;
10717
+ }),
10718
+ currentPage < totalPages - 3 && /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", fontSize: "12px", children: "..." }),
10719
+ totalPages > 1 && /* @__PURE__ */ jsxRuntime.jsx(
10720
+ PaginationButton,
10721
+ {
10722
+ currentPage,
10723
+ page: totalPages,
10724
+ onClick: () => setCurrentPage(totalPages)
10725
+ }
10726
+ )
10727
+ ] }) }),
10728
+ /* @__PURE__ */ jsxRuntime.jsx(
10729
+ react.Button,
10730
+ {
10731
+ variant: "plain",
10732
+ onClick: handleNext,
10733
+ disabled: currentPage === totalPages,
10734
+ h: "28px",
10735
+ minW: "28px",
10736
+ p: 0,
10737
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
10738
+ react.HStack,
10739
+ {
10740
+ gap: 0,
10741
+ color: currentPage === totalPages ? theme.disabledButtonText || "#B5B5B5" : theme.defaultTextColor || "#15003E",
10742
+ children: [
10743
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", fontSize: "11px", children: "Next" }),
10744
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { transform: "rotate(180deg)", children: /* @__PURE__ */ jsxRuntime.jsx(BackIcon, { size: 20 }) })
10745
+ ]
10746
+ }
10747
+ )
10748
+ }
10749
+ )
10750
+ ]
10751
+ }
10752
+ );
10753
+ }
10754
+ var PAGE_SIZE = 4;
10755
+ function OrderHistory({ address, solanaAddress, onBack }) {
10756
+ const { theme } = useWidgetTheme();
10757
+ const [currentPage, setCurrentPage] = React5.useState(1);
10758
+ const [offset, setOffset] = React5.useState(0);
10759
+ const { data, isLoading, error, isFetching } = useOrderHistory(
10760
+ address,
10761
+ solanaAddress,
10762
+ offset,
10763
+ PAGE_SIZE
10764
+ );
10765
+ const totalItems = data?.total || 0;
10766
+ const totalPages = Math.ceil(totalItems / PAGE_SIZE);
10767
+ const currentOrders = data?.orders || [];
10768
+ const handlePageChange = (page) => {
10769
+ const newOffset = (page - 1) * PAGE_SIZE;
10770
+ setOffset(newOffset);
10771
+ setCurrentPage(page);
10772
+ };
10773
+ const renderContent = () => {
10774
+ if (isLoading) {
10775
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { gap: 4, py: 10, align: "center", w: "100%", children: [
10776
+ /* @__PURE__ */ jsxRuntime.jsx(react.Spinner, { size: "md", color: theme.highlightTextColor }),
10777
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", color: theme.weakTextColor || "#81728C", children: "Loading transactions..." })
10778
+ ] });
10779
+ }
10780
+ if (error) {
10781
+ return /* @__PURE__ */ jsxRuntime.jsx(
10782
+ react.Box,
10783
+ {
10784
+ border: "1px solid #FF4267",
10785
+ borderRadius: "8px",
10786
+ p: 3,
10787
+ my: 4,
10788
+ bg: "#FFF5F5",
10789
+ children: /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", color: "#FF4267", textAlign: "center", children: "Failed to load transaction history. Please try again." })
10790
+ }
10791
+ );
10792
+ }
10793
+ if (currentOrders.length === 0) {
10794
+ const emptyColor = theme.defaultBorderColor || "#E0D8E8";
10795
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { gap: 4, py: 10, align: "center", w: "100%", children: [
10796
+ /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "48", height: "48", viewBox: "0 0 48 48", fill: "none", children: [
10797
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: "4", y: "8", width: "40", height: "32", rx: "4", stroke: emptyColor, strokeWidth: "2", fill: "none" }),
10798
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 20H32", stroke: emptyColor, strokeWidth: "2", strokeLinecap: "round" }),
10799
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M16 28H28", stroke: emptyColor, strokeWidth: "2", strokeLinecap: "round" })
10800
+ ] }),
10801
+ /* @__PURE__ */ jsxRuntime.jsx(Text2, { variant: "content7", color: theme.weakTextColor || "#81728C", textAlign: "center", children: "No transaction history yet" })
10802
+ ] });
10803
+ }
10804
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.Box, { position: "relative", w: "100%", children: [
10805
+ isFetching && /* @__PURE__ */ jsxRuntime.jsx(
10806
+ react.Box,
10807
+ {
10808
+ position: "absolute",
10809
+ zIndex: 10,
10810
+ top: 0,
10811
+ left: 0,
10812
+ right: 0,
10813
+ bottom: 0,
10814
+ display: "flex",
10815
+ alignItems: "center",
10816
+ justifyContent: "center",
10817
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.Spinner, { size: "sm", color: theme.highlightTextColor })
10818
+ }
10819
+ ),
10820
+ /* @__PURE__ */ jsxRuntime.jsx(react.VStack, { gap: 2.5, w: "100%", children: currentOrders.map((order) => /* @__PURE__ */ jsxRuntime.jsx(OrderHistoryItem, { order }, order.order_id)) }),
10821
+ /* @__PURE__ */ jsxRuntime.jsx(
10822
+ OrderHistoryPagination,
10823
+ {
10824
+ currentPage,
10825
+ totalPages,
10826
+ setCurrentPage: handlePageChange
10827
+ }
10828
+ )
10829
+ ] });
10830
+ };
10831
+ return /* @__PURE__ */ jsxRuntime.jsxs(react.VStack, { w: "100%", gap: 4, align: "start", children: [
10832
+ /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { w: "100%", justify: "space-between", align: "center", children: [
10833
+ /* @__PURE__ */ jsxRuntime.jsx(
10834
+ react.Button,
10835
+ {
10836
+ variant: "plain",
10837
+ onClick: onBack,
10838
+ h: "24px",
10839
+ minW: "24px",
10840
+ p: 0,
10841
+ children: /* @__PURE__ */ jsxRuntime.jsx(ri.RiArrowGoBackFill, { color: theme.defaultTextColor, size: 20 })
10842
+ }
10843
+ ),
10844
+ /* @__PURE__ */ jsxRuntime.jsx(
10845
+ Text2,
10846
+ {
10847
+ color: theme.defaultTextColor,
10848
+ textAlign: "center",
10849
+ fontWeight: 600,
10850
+ fontSize: "16px",
10851
+ children: "Transaction history"
10852
+ }
10853
+ ),
10854
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { w: "24px" })
10855
+ ] }),
10856
+ renderContent()
10857
+ ] });
10858
+ }
10412
10859
  var initialQuoteInfo = {
10413
10860
  isFetching: false,
10414
10861
  error: null,
@@ -10457,6 +10904,7 @@ var MainForm = ({ config }) => {
10457
10904
  const refreshIntervalRef = React5.useRef(30);
10458
10905
  const timerRef = React5.useRef(null);
10459
10906
  const isQuoteStoppedRef = React5.useRef(false);
10907
+ const [showHistory, setShowHistory] = React5.useState(false);
10460
10908
  const { differentAddress } = useDifferentAddressStore();
10461
10909
  const { chains, slippagePolicies } = useChainsStore();
10462
10910
  const prevAddressRef = React5.useRef(address);
@@ -10861,6 +11309,16 @@ var MainForm = ({ config }) => {
10861
11309
  }
10862
11310
  ) });
10863
11311
  }
11312
+ if (showHistory) {
11313
+ return /* @__PURE__ */ jsxRuntime.jsx(
11314
+ OrderHistory,
11315
+ {
11316
+ address,
11317
+ solanaAddress: solanaWalletAddress || void 0,
11318
+ onBack: () => setShowHistory(false)
11319
+ }
11320
+ );
11321
+ }
10864
11322
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
10865
11323
  /* @__PURE__ */ jsxRuntime.jsx(
10866
11324
  FormTop,
@@ -10869,7 +11327,8 @@ var MainForm = ({ config }) => {
10869
11327
  quoteInfo,
10870
11328
  clearLockedRequestId,
10871
11329
  refreshInterval,
10872
- hideCountdown: isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains)
11330
+ hideCountdown: isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains),
11331
+ onHistoryClick: () => setShowHistory(true)
10873
11332
  }
10874
11333
  ),
10875
11334
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -10940,7 +11399,23 @@ var MainForm = ({ config }) => {
10940
11399
  src: "https://wheelx.fi/images/success-sprites.png",
10941
11400
  alt: "success"
10942
11401
  }
10943
- )
11402
+ ),
11403
+ !showHistory && /* @__PURE__ */ jsxRuntime.jsx(react.HStack, { w: "100%", justifyContent: "center", alignItems: "center", opacity: "0.7", fontSize: "13px", children: /* @__PURE__ */ jsxRuntime.jsx("a", { href: "https://wheelx.fi/", target: "_blank", style: { display: "block" }, children: /* @__PURE__ */ jsxRuntime.jsxs(react.HStack, { color: theme.weakTextColor, fontSize: "12px", alignContent: "center", alignItems: "center", w: "100%", children: [
11404
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { children: "Powered by" }),
11405
+ /* @__PURE__ */ jsxRuntime.jsx(
11406
+ react.Box,
11407
+ {
11408
+ w: "14px",
11409
+ h: "14px",
11410
+ backgroundColor: "currentColor",
11411
+ maskSize: "contain",
11412
+ maskRepeat: "no-repeat",
11413
+ maskPosition: "center center",
11414
+ maskImage: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA/CAMAAACLtlvuAAAAeFBMVEUAAAAVAD4VAD4VAD4VAD4VAD4dAEAUAD8VAD4VAD8VAD4VAD4VAD8XAD8VAD4VAD4VAD4XAD8XAD8VAD4VAD4VAD8VAD8XAD8XAD8VAD4WAD8WAD8WAD8VAD4XAD8XAD8XAD8WAD4VAD4VAD4WAD8WAD8VAD4TAD0voTQoAAAAJnRSTlMA+ufG7bEXnPRh0KlsPuHZj3RDvLZWSiwfl1wwE6MmDAaIfcE6USqlGmwAAAMlSURBVEjHnZbpgqowDEZTFqnsiCgoAm4f7/+GVypMpkivjueXSo6pNWlD/2GfC+E29BU7KKKv5BgK/8vE36deT/L9Czma5D19wRWKLX3CJk1v2gfu4AaGGJ3tLLSJKjw4rYvWEMMEUHijObwVthS5A0Be2t8x1dw9YqQc9soCrocVkSWGQstiIF89XnCM4Y/Z0cqHc6AHSla06ZDvzjE6xc+3boCCiOWRFP4FI5uZXMuxGD24RAsylRYEFFZLM0I8EWvSZeYERX+gFwoH2Ma4klG2AenA2tEC3ZFC2HAN8srpd2fcqaNljv2ZqvlvZndNFFtkQiZE5MFdkGtrcKnpTwb3giNNNsucl2NeaXEiYptldh+IqyFxSZMdsKy7lC33t2MTEedmWbm8Pm9pq3EgzVaycrWy2IoF+YyaZnYGpG2n9plZa+tehWm4IvJjIs2+JnggJfRyLBFSmaVhzUfshoRLDFfy68mBs2p+Ef10uLzJ8/z8m9jPH1hQdkkenrgy1I86/HA2LCklC08cBx8iMJKTjyeJE+c2kyccbQ0P+ImFEZcu09qcTL9fWQ4Nyw5pTG2TqF7O4uVrMrHzUSFqh28KOrJsvU18YPG+6XBRd4nXPavktlKXC5F2boSe2pUT9AK44T4otfbhYepU7oVS4vZT51zGLb1Q4/zbPXBXVZodJ7RALrS8LGu5j7z5ek0VWl6W2eatmZM4nFeXyZv2vMHFNEhk7LKs5fZBBk5oeM26TJXKHfbm8SZJ6mTKyzLn3uNinEnWheTLl2W2E2TZZkHtrgCsGD69uyVd40ziS2dlkDcSit44kyRRjHBRDpDIdzPJjVw40YucAbvo7Uzy8CIHTtb+kksPsGu6v5tJLNWluxiQQbhx5O1+sQHkpRZjmEmmAikzHxACAsC26LSYNb1QWEC8m+9iRZ0pRmffkI4fe4heYj7D7hty+4i+Ieg3qo2aL9zz2F0O6j+7WZ+N5wqsv7oFV/C+t//mRr37+03wF7fpfX0Z6eduPblsZ594a991gxjbdLu1nzeId90GlUQeuHb1Rk7xQDiCm8cax5oHCen8A09+fN7BIX4wAAAAAElFTkSuQmCC)"
11415
+ }
11416
+ ),
11417
+ /* @__PURE__ */ jsxRuntime.jsx(react.Box, { children: "WheelX" })
11418
+ ] }) }) })
10944
11419
  ]
10945
11420
  }
10946
11421
  ),
@@ -10954,39 +11429,7 @@ var MainForm = ({ config }) => {
10954
11429
  md: "480px"
10955
11430
  }
10956
11431
  }
10957
- ),
10958
- /* @__PURE__ */ jsxRuntime.jsx(react.Box, { marginTop: "30px", fontSize: "14px", children: /* @__PURE__ */ jsxRuntime.jsx(
10959
- "a",
10960
- {
10961
- href: "https://github.com/wheelx-fi/wheelx-contracts/blob/main/audits/ABDK_WheelX_WheelXContracts_v_1_0.pdf",
10962
- target: "_blank",
10963
- children: /* @__PURE__ */ jsxRuntime.jsxs(
10964
- Text,
10965
- {
10966
- color: "#5D6270",
10967
- display: "flex",
10968
- alignItems: "center",
10969
- justifyContent: "center",
10970
- children: [
10971
- "Audited By",
10972
- " ",
10973
- /* @__PURE__ */ jsxRuntime.jsx(
10974
- react.Image,
10975
- {
10976
- display: "block",
10977
- width: "70px",
10978
- height: "28px",
10979
- marginLeft: "2px",
10980
- objectFit: "contain",
10981
- src: "https://wheelx.fi/images/adbk.png",
10982
- alt: ""
10983
- }
10984
- )
10985
- ]
10986
- }
10987
- )
10988
- }
10989
- ) })
11432
+ )
10990
11433
  ] })
10991
11434
  }
10992
11435
  ),