@wheelx-widget/widget 0.1.4 → 0.1.5
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 +160 -129
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +160 -129
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/defaultTheme.ts","../src/theme/ThemeProvider.tsx","../src/api/consts.ts","../src/api/useChainsAndTokens.ts","../src/stores/chainsStore.ts","../src/stores/walletStore.ts","../src/stores/useSyncWalletConnectedStore.ts","../src/utils/wallet.ts","../src/core/SelectTokenModal/FavoritesContext.tsx","../src/core/SelectTokenModal/storageUtils.ts","../src/core/SelectTokenModal/TokenFavoritesContext.tsx","../src/providers/WheelXProvider.tsx","../src/api/useGetQuote.ts","../src/api/useTokenInfo.ts","../src/api/useUsdPrice.ts","../src/api/useHyperliquid.ts","../src/api/useIntervalGetOrderDetail.ts","../src/api/useTokenBalance.ts","../src/stores/differentAddress.ts","../src/core/hooks/useWalletConnectModal.ts","../src/utils/format.ts","../src/utils/address.ts","../src/utils/localstorage.ts","../src/utils/solana.ts","../src/utils/shortLinkRegex.ts","../src/utils/tokenSelectionCache.ts","../src/utils/quoteAnalytics.ts","../src/utils/index.ts","../src/core/ui/toaster.tsx","../src/core/hooks/useTxStateContextStore.ts","../src/consts/solana.ts","../src/core/hooks/useSwapAndBridgeContextStore.ts","../src/core/hooks/useGuardChain.ts","../src/core/hooks/useRefreshLoading.ts","../src/core/hooks/useTokenBalance.ts","../src/core/hooks/useSolanaTokenBalance.ts","../src/core/hooks/useSolanaSendTransaction.ts","../src/core/hooks/useRetryAbleTransactionReceipt.ts","../src/core/utils/consts.ts","../src/core/utils/slippage.ts","../src/core/utils/debounce.ts","../src/core/utils/defaultData.ts","../../../node_modules/@wagmi/core/src/utils/getAction.ts","../../../node_modules/@wagmi/core/src/version.ts","../../../node_modules/@wagmi/core/src/utils/getVersion.ts","../../../node_modules/@wagmi/core/src/errors/base.ts","../../../node_modules/@wagmi/core/src/errors/config.ts","../../../node_modules/@wagmi/core/src/actions/getConnectorClient.ts","../../../node_modules/@wagmi/core/src/actions/readContract.ts","../../../node_modules/@wagmi/core/src/actions/waitForTransactionReceipt.ts","../../../node_modules/@wagmi/core/src/actions/writeContract.ts","../src/core/utils/getErc20Approval.ts","../src/core/utils/index.ts","../src/core/icons/index.ts","../src/core/ui/componentRecipes/heading.tsx","../src/core/ui/tooltip.tsx","../src/core/ui/BoxWithBg.tsx","../src/core/ui/OptimizedImage.tsx","../src/core/utils/twoApprove.ts","../src/core/FormButton.tsx","../src/core/SelectTokenModal/utils.ts","../src/consts/mainnet.ts","../src/consts/monad.ts","../src/consts/stable.ts","../src/core/SelectTokenModal/hooks/useChainsAndTokensForSelect.ts","../src/core/SelectTokenModal/hooks/useUserHasSelectedFromNetwork.ts","../src/core/SelectTokenModal/hooks/useSearchTokens.ts","../src/core/SelectTokenModal/FavoriteButton.tsx","../src/core/SelectTokenModal/Network.tsx","../src/core/commons/utils.ts","../src/core/commons/TokenAmountHeading.tsx","../src/core/commons/TokenAmountText.tsx","../src/core/commons/TokenIconWithNetworkLogo.tsx","../src/core/SelectTokenModal/TokenFavoriteButton.tsx","../src/core/SelectTokenModal/SearchHistoryContext.tsx","../src/core/SelectTokenModal/TokenAndAddress.tsx","../src/core/SelectTokenModal/TokenList.tsx","../src/core/SelectTokenModal/SearchInput.tsx","../src/core/SelectTokenModal/AllChainsIcon.tsx","../src/core/SelectTokenModal/MobileContent.tsx","../src/core/SelectTokenModal/DesktopContent.tsx","../src/core/SelectTokenModal/index.tsx","../src/core/TokenInfoCom.tsx","../src/core/TokenSelectAndInput.tsx","../src/core/TipsContent.tsx","../src/core/TxInfo.tsx","../src/core/DifferentAddressDialog.tsx","../src/core/FormBody.tsx","../src/core/SlippageSettings.tsx","../src/core/FormTop.tsx","../src/core/Timer.tsx","../src/core/animations/Success.tsx","../src/core/animations/Wheel.tsx","../src/core/animations/Failure.tsx","../src/core/TxState.tsx","../src/core/MainForm.tsx"],"names":["EmotionThemeProvider","axios","create","useAccount","createContext","useEffect","jsx","useContext","useState","useRef","useCallback","base","soneium","http","React","useMemo","detail","message","useQuery","mainnet","polygon","arbitrum","optimism","SOLANA_MAINNET","isSolanaChain","initialState","logger","value","useTokenBalance","useRpcProviders","useDynamicContext","useUserWallets","PublicKey","Fraction","debounce","_BaseError_walk","connector","chainId","chain","viem_readContract","viem_waitForTransactionReceipt","viem_writeContract","erc20Abi","isStablecoin","Tooltip","jsxs","ChakraTooltip","Box","ChakraImage","useReconnect","useConfig","getOrderedTokensAssets","balance","Icon","HStack","Image","findItemByName","findItemBySymbol","useBreakpointValue","address","symbol","tags","solanaWalletAddress","VStack","Fragment","Spinner","MobileContent","InputGroup","Input","Portal","memo","zeroAddress","DynamicWalletIcon","Button","isAddress","Dialog","chainsInfo","fromTokenInfo","toTokenInfo","parseUnits","refetchQuote","isSameChain","log","orderId","error"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { WidgetTheme } from '../types'\n\nexport const defaultTheme: WidgetTheme = {\n defaultTextColor: '#1A1D26',\n highlightTextColor: '#007B9D',\n weakTextColor: '#5D6270',\n defaultBgColor: '#FFFFFF',\n highlightBgColor: '#E6F7FB',\n assistBgColor: '#F5F6F8',\n defaultBorderColor: '#E2E4E8',\n highlightBorderColor: '#007B9D',\n highlightButtonBg: '#007B9D',\n highlightButtonText: '#FFFFFF',\n normalButtonBg: '#F5F6F8',\n normalButtonText: '#1A1D26',\n disabledButtonBg: '#E2E4E8',\n disabledButtonText: '#A0A4AE'\n}\n","import React, { createContext, useContext, useMemo } from 'react'\nimport { ThemeProvider as EmotionThemeProvider } from '@emotion/react'\nimport type { WidgetTheme } from '../types'\nimport { defaultTheme } from './defaultTheme'\n\ninterface WidgetThemeContextValue {\n theme: WidgetTheme\n}\n\nconst WidgetThemeContext = createContext<WidgetThemeContextValue>({\n theme: defaultTheme\n})\n\nexport const useWidgetTheme = () => useContext(WidgetThemeContext)\n\ninterface WidgetThemeProviderProps {\n theme?: Partial<WidgetTheme>\n children: React.ReactNode\n}\n\nexport const WidgetThemeProvider: React.FC<WidgetThemeProviderProps> = ({\n theme: customTheme,\n children\n}) => {\n const mergedTheme = useMemo<WidgetTheme>(() => {\n if (!customTheme) return defaultTheme\n return { ...defaultTheme, ...customTheme }\n }, [customTheme])\n\n const contextValue = useMemo(() => ({ theme: mergedTheme }), [mergedTheme])\n\n return (\n <WidgetThemeContext.Provider value={contextValue}>\n <EmotionThemeProvider theme={{ widgetTheme: mergedTheme }}>\n {children}\n </EmotionThemeProvider>\n </WidgetThemeContext.Provider>\n )\n}\n","/**\n * API base URL - hardcoded to production API, cannot be changed by users.\n */\nexport const BASE_API_URL = 'https://api.wheelx.fi'\n","import { useQuery } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios from 'axios'\n\nexport type Tag = 'pin' | 'top' | 'cert' | 'native'\nexport type FeeLevel = 'Group1' | 'Group2' | null\nexport interface TokenInfo {\n name: string\n address: `0x${string}`\n chain_id: number\n decimals: number\n symbol: string\n logo: string\n tags: Tag[]\n support_kline?: boolean\n token_type?: string\n categories?: string[]\n chain_icon?: string\n platform_id?: number\n platform_type?: string[]\n isSolana?: boolean\n fee_level?: FeeLevel\n}\nexport interface TokenInfoWithBalance extends TokenInfo {\n balance?: string\n usdPrice?: string\n}\n\nexport type ChainInfo = {\n name: string\n rpc_url: string\n rpc_fallback: string[]\n chain_icon: string\n chain_id: number\n eth_token: `0x${string}`\n support_kline: boolean\n is_popular: boolean\n outbound: boolean\n inbound: boolean\n is_testnet?: boolean\n platform_id?: number\n}\nexport interface Prediction {\n chains: ChainInfo[]\n tokens: TokenInfo[]\n}\nexport interface SlippagePolicy {\n bridge: boolean\n from_fee_level: FeeLevel\n to_fee_level: FeeLevel\n default_slippage: number\n min_slippage: number\n max_slippage: number\n refresh_interval: number\n notice_rounds?: number\n}\nexport interface ChainsAndTokens {\n chains: ChainInfo[]\n tokens: TokenInfo[]\n slippage_policies?: SlippagePolicy[]\n deposit_platforms: {\n prediction: Prediction\n }\n}\n\nexport async function getChainsAndTokens() {\n const url = `${BASE_API_URL}/v1/chain-info`\n\n const res = await axios.get<ChainsAndTokens>(url)\n\n return res.data\n}\n\nexport const useChainsAndTokens = (enabled = true) => {\n const result = useQuery({\n queryKey: ['chainsAndTokens'],\n queryFn: () => getChainsAndTokens(),\n enabled,\n staleTime: 30 * 1000,\n refetchOnWindowFocus: false\n })\n return result\n}\n\nexport function mergeTokensWithCompositeKey(\n arr1: TokenInfoWithBalance[],\n arr2: TokenInfoWithBalance[]\n): TokenInfoWithBalance[] {\n const generateCompositeKey = (token: TokenInfoWithBalance) =>\n `${token.address}_${token.chain_id}_${token.symbol}_${token.platform_id}`\n\n const tokenMap = new Map<string, TokenInfoWithBalance>()\n\n const processArray = (tokens: TokenInfoWithBalance[]) => {\n for (const token of tokens) {\n const compositeKey = generateCompositeKey(token)\n const existingToken = tokenMap.get(compositeKey)\n\n if (!existingToken) {\n tokenMap.set(compositeKey, token)\n } else {\n const existingHasTags = existingToken.tags?.length > 0\n const currentHasTags = token.tags?.length > 0\n if (currentHasTags && !existingHasTags) {\n tokenMap.set(compositeKey, {\n ...existingToken,\n ...token,\n platform_id: token.platform_id ?? existingToken.platform_id,\n balance: token.balance ?? existingToken.balance,\n usdPrice: token.usdPrice ?? existingToken.usdPrice\n })\n } else if (!currentHasTags && existingHasTags) {\n tokenMap.set(compositeKey, {\n ...existingToken,\n platform_id: existingToken.platform_id ?? token.platform_id,\n balance: existingToken.balance ?? token.balance,\n usdPrice: existingToken.usdPrice ?? token.usdPrice\n })\n } else {\n tokenMap.set(compositeKey, {\n ...existingToken,\n ...token,\n platform_id: token.platform_id ?? existingToken.platform_id\n })\n }\n }\n }\n }\n\n processArray(arr1)\n processArray(arr2)\n return Array.from(tokenMap.values())\n}\n","import { create } from 'zustand'\nimport { ChainInfo, SlippagePolicy, TokenInfo } from '../api/useChainsAndTokens'\n\ninterface ChainsStore {\n chains: ChainInfo[] | null\n setChains: (chains: ChainInfo[]) => void\n isSelectPredictionChain: boolean\n setIsSelectPredictionChain: (isSelectPredictionChain: boolean) => void\n slippagePolicies: SlippagePolicy[] | null\n setSlippagePolicies: (policies: SlippagePolicy[]) => void\n}\ninterface TokenStore {\n tokens: TokenInfo[] | null\n setTokens: (tokens: TokenInfo[]) => void\n}\nexport const useChainsStore = create<ChainsStore>((set) => ({\n chains: null,\n setChains: (chains: ChainInfo[]) => set({ chains }),\n isSelectPredictionChain: false,\n setIsSelectPredictionChain: (isSelectPredictionChain: boolean) =>\n set({ isSelectPredictionChain }),\n slippagePolicies: null,\n setSlippagePolicies: (policies: SlippagePolicy[]) =>\n set({ slippagePolicies: policies })\n}))\nexport const useTokensStore = create<TokenStore>((set) => ({\n tokens: null,\n setTokens: (tokens: TokenInfo[]) => set({ tokens })\n}))\n","import { create } from 'zustand'\n\ninterface WalletStore {\n isEthWalletConnected: boolean\n setIsEthWalletConnected: (isEthWalletConnected: boolean) => void\n isSolanaWalletConnected: boolean\n setIsSolanaWalletConnected: (isSolanaWalletConnected: boolean) => void\n totalConnectedWallets: number\n setTotalConnectedWallets: () => void\n totalWallets: number\n solanaWalletAddress: string | null\n setSolanaWalletAddress: (address: string | null) => void\n evmWalletAddress: string | null\n evmWalletConnectorId: string | null\n setEvmWalletInfo: (address: string | null, connectorId: string | null) => void\n isEvmWalletMetamask: boolean\n setIsEvmWalletMetamask: (isEvmWalletMetamask: boolean) => void\n}\n\nexport const useWalletConnectedStore = create<WalletStore>((set, get) => ({\n isEthWalletConnected: false,\n setIsEthWalletConnected: (isEthWalletConnected) => {\n const { isSolanaWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ isEthWalletConnected, totalConnectedWallets: count })\n },\n isSolanaWalletConnected: false,\n setIsSolanaWalletConnected: (isSolanaWalletConnected) => {\n const { isEthWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ isSolanaWalletConnected, totalConnectedWallets: count })\n },\n totalConnectedWallets: 0,\n setTotalConnectedWallets: () => {\n const { isEthWalletConnected, isSolanaWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ totalConnectedWallets: count })\n },\n totalWallets: 2,\n solanaWalletAddress: null,\n setSolanaWalletAddress: (address) => set({ solanaWalletAddress: address }),\n evmWalletAddress: null,\n evmWalletConnectorId: null,\n setEvmWalletInfo: (address, connectorId) =>\n set({ evmWalletAddress: address, evmWalletConnectorId: connectorId }),\n isEvmWalletMetamask: false,\n setIsEvmWalletMetamask: (isEvmWalletMetamask) => set({ isEvmWalletMetamask })\n}))\n","import { useEffect } from 'react'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { useAccount } from 'wagmi'\r\n\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\ntype DynamicWalletLike = {\r\n address?: string | null\r\n chain?: string | null\r\n connector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n walletConnector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n}\r\n\r\nconst getEvmConnectorId = (wallet?: DynamicWalletLike) => {\r\n if (!wallet) return null\r\n\r\n return (\r\n wallet.connector?.id ||\r\n wallet.walletConnector?.id ||\r\n wallet.connector?.key ||\r\n wallet.walletConnector?.key ||\r\n null\r\n )\r\n}\r\n\r\nexport const useSyncWalletConnectedStore = () => {\r\n const userWallets = useUserWallets()\r\n const { address: wagmiAddress, connector: wagmiConnector, isConnected } = useAccount()\r\n const {\r\n setSolanaWalletAddress,\r\n setIsSolanaWalletConnected,\r\n setEvmWalletInfo,\r\n setIsEthWalletConnected\r\n } = useWalletConnectedStore()\r\n\r\n useEffect(() => {\r\n const solanaWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as DynamicWalletLike | undefined\r\n\r\n const solanaAddress = solanaWallet?.address ?? null\r\n setSolanaWalletAddress(solanaAddress)\r\n setIsSolanaWalletConnected(Boolean(solanaAddress))\r\n\r\n const evmWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as DynamicWalletLike | undefined\r\n\r\n const evmAddress = (evmWallet?.address as `0x${string}` | null) ?? wagmiAddress ?? null\r\n // Priority: wagmiConnector.id (actual wagmi connector ID) > Dynamic Labs connector IDs\r\n // This is important because wagmi connector IDs differ from Dynamic Labs internal IDs\r\n // e.g., MetaMask: wagmi uses \"io.metamask\" but Dynamic uses \"metamask\"\r\n const evmConnectorId = wagmiConnector?.id ?? getEvmConnectorId(evmWallet) ?? null\r\n\r\n setEvmWalletInfo(evmAddress, evmConnectorId)\r\n setIsEthWalletConnected(Boolean(evmAddress || isConnected))\r\n }, [\r\n userWallets,\r\n wagmiAddress,\r\n wagmiConnector?.id,\r\n isConnected,\r\n setSolanaWalletAddress,\r\n setIsSolanaWalletConnected,\r\n setEvmWalletInfo,\r\n setIsEthWalletConnected\r\n ])\r\n}\r\n","import { useAccount } from 'wagmi'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\n/**\r\n * Hook to get EVM wallet address with fallback to saved address\r\n * This ensures that when a user first connects an EVM wallet (e.g., OKX),\r\n * then connects a Solana wallet (e.g., MetaMask), the EVM address remains\r\n * consistent with the first connected wallet.\r\n *\r\n * @returns The EVM wallet address (saved address or current wagmi address)\r\n */\r\nexport const useEvmAddress = () => {\r\n const { address } = useAccount()\r\n const { evmWalletAddress } = useWalletConnectedStore()\r\n\r\n // Priority: saved evmWalletAddress > current wagmi address\r\n return (evmWalletAddress as `0x${string}` | undefined) || address\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useRef,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\n\r\nexport interface FavoriteItem { networkId: number; networkName?: string; timestamp: number }\r\n\r\ninterface FavoritesContextType {\r\n favorites: FavoriteItem[]\r\n addFavorite: (networkId: number, networkName?: string) => void\r\n removeFavorite: (networkId: number) => void\r\n isFavorite: (networkId: number) => boolean\r\n clearFavorites: () => void\r\n isLoading: boolean; walletAddress: string | undefined\r\n}\r\n\r\nconst FavoritesContext = createContext<FavoritesContextType>({\r\n favorites: [], addFavorite: () => {}, removeFavorite: () => {},\r\n isFavorite: () => false, clearFavorites: () => {},\r\n isLoading: true, walletAddress: undefined\r\n})\r\n\r\nexport const FavoritesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const [favorites, setFavorites] = useState<FavoriteItem[]>([])\r\n const [isLoading, setIsLoading] = useState(true)\r\n const mountedRef = useRef(false)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-favorites-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n mountedRef.current = true\r\n // Use requestIdleCallback or microtask to defer completely past Hydrate\r\n const id = requestAnimationFrame(() => {\r\n if (!mountedRef.current) return\r\n if (!address) { setFavorites([]); setIsLoading(false); return }\r\n try {\r\n const k = getStorageKey(); if (!k) { setIsLoading(false); return }\r\n const s = localStorage.getItem(k); if (s) setFavorites(JSON.parse(s))\r\n } catch (_) { setFavorites([]) } finally { setIsLoading(false) }\r\n })\r\n return () => { mountedRef.current = false; cancelAnimationFrame(id) }\r\n }, [address, getStorageKey])\r\n\r\n const save = (n: FavoriteItem[]) => {\r\n if (typeof window === 'undefined') return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.setItem(k, JSON.stringify(n)); setFavorites(n) } catch (_) {}\r\n }\r\n\r\n const addFavorite = (nId: number, nName: string = 'Unknown Network') => {\r\n if (!address) return\r\n if (!favorites.find(f => f.networkId === nId))\r\n save([...favorites, { networkId: nId, networkName: nName, timestamp: Date.now() }])\r\n }\r\n\r\n const removeFavorite = (nId: number) => {\r\n if (!address) return\r\n save(favorites.filter(f => f.networkId !== nId))\r\n }\r\n\r\n const isFavorite = (nId: number): boolean => favorites.some(f => f.networkId === nId)\r\n\r\n const clearFavorites = () => {\r\n if (!address) return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.removeItem(k); setFavorites([]) } catch (_) {}\r\n }\r\n\r\n return (\r\n <FavoritesContext.Provider value={{ favorites, addFavorite, removeFavorite, isFavorite, clearFavorites, isLoading, walletAddress: address }}>\r\n {children}\r\n </FavoritesContext.Provider>\r\n )\r\n}\r\n\r\nexport const useFavoritesContext = () => {\r\n const c = useContext(FavoritesContext)\r\n if (c === undefined) throw new Error('useFavoritesContext must be used within a FavoritesProvider')\r\n return c\r\n}\r\n","/**\r\n * Check if the error is a storage quota exceeded error\r\n */\r\nexport function isQuotaExceededError(err: unknown): boolean {\r\n return (\r\n err instanceof DOMException &&\r\n (err.code === 22 ||\r\n err.code === 1014 ||\r\n err.name === 'QuotaExceededError' ||\r\n err.name === 'NS_ERROR_DOM_QUOTA_REACHED')\r\n )\r\n}\r\n\r\n/**\r\n * Check if localStorage is available (compatible with private browsing mode)\r\n */\r\nexport function isLocalStorageSupported(): boolean {\r\n if (typeof window === 'undefined' || !window.localStorage) {\r\n return false\r\n }\r\n\r\n const TEST_KEY = '__storage_test__'\r\n try {\r\n localStorage.setItem(TEST_KEY, 'test')\r\n localStorage.removeItem(TEST_KEY)\r\n return true\r\n } catch (e) {\r\n return isQuotaExceededError(e) // Private mode also triggers errors\r\n }\r\n}\r\n\r\n/**\r\n * Calculate the used space of localStorage (in character count)\r\n */\r\nexport function getLSUsedSpace(): number {\r\n if (typeof window === 'undefined' || !isLocalStorageSupported()) {\r\n return 0\r\n }\r\n\r\n return Object.keys(localStorage).reduce((total, curKey) => {\r\n if (!localStorage.hasOwnProperty(curKey)) {\r\n return total\r\n }\r\n // Sum of key and value character counts\r\n total += curKey.length + localStorage[curKey].length\r\n return total\r\n }, 0)\r\n}\r\n\r\n/**\r\n * Get detailed information about storage usage\r\n */\r\nexport interface StorageUsageInfo {\r\n used: number // Used bytes\r\n quota: number | null // Total quota (bytes), null means unknown\r\n percentage: number // Usage percentage\r\n usedFormatted: string // Formatted used size\r\n quotaFormatted: string // Formatted total size\r\n}\r\n\r\nexport function getStorageUsage(): StorageUsageInfo {\r\n if (typeof window === 'undefined') {\r\n return {\r\n used: 0,\r\n quota: null,\r\n percentage: 0,\r\n usedFormatted: '0 B',\r\n quotaFormatted: 'Unknown'\r\n }\r\n }\r\n\r\n try {\r\n // Method 1: Precisely calculate used space\r\n const usedBytes = getLSUsedSpace()\r\n\r\n // Assume standard limit of 5MB (5 * 1024 * 1024 bytes)\r\n const defaultQuota = 5 * 1024 * 1024\r\n const percentage = Math.round((usedBytes / defaultQuota) * 100)\r\n\r\n // Format bytes to human-readable format\r\n const formatBytes = (bytes: number): string => {\r\n if (bytes === 0) return '0 B'\r\n if (bytes < 1024) {\r\n return `${bytes} B`\r\n } else if (bytes < 1024 * 1024) {\r\n return `${(bytes / 1024).toFixed(2)} KB`\r\n } else {\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`\r\n }\r\n }\r\n\r\n return {\r\n used: usedBytes,\r\n quota: defaultQuota,\r\n percentage: Math.min(percentage, 100),\r\n usedFormatted: formatBytes(usedBytes),\r\n quotaFormatted: formatBytes(defaultQuota)\r\n }\r\n } catch (error) {\r\n console.error('Failed to get storage usage:', error)\r\n return {\r\n used: 0,\r\n quota: null,\r\n percentage: 0,\r\n usedFormatted: '0 B',\r\n quotaFormatted: 'Unknown'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if there is enough storage space for new data\r\n */\r\nexport function checkStorageSpace(dataSize: number): {\r\n isSufficient: boolean\r\n message?: string\r\n usage?: StorageUsageInfo\r\n} {\r\n if (typeof window === 'undefined') {\r\n return {\r\n isSufficient: false,\r\n message: 'Non-browser environment'\r\n }\r\n }\r\n\r\n // Check if localStorage is available\r\n if (!isLocalStorageSupported()) {\r\n return {\r\n isSufficient: false,\r\n message: 'Browser does not support local storage or is in private mode'\r\n }\r\n }\r\n\r\n try {\r\n const usage = getStorageUsage()\r\n\r\n if (usage.quota !== null && usage.used + dataSize > usage.quota) {\r\n return {\r\n isSufficient: false,\r\n message: `Local storage space insufficient. Used: ${usage.usedFormatted}, Limit: ${usage.quotaFormatted}`,\r\n usage\r\n }\r\n }\r\n\r\n // If usage exceeds 80%, give warning but don't block operation\r\n if (usage.percentage > 80) {\r\n return {\r\n isSufficient: true,\r\n message: `Storage usage is high: ${usage.percentage}%`,\r\n usage\r\n }\r\n }\r\n\r\n return {\r\n isSufficient: true,\r\n usage\r\n }\r\n } catch (error) {\r\n console.error('Failed to check storage space:', error)\r\n return {\r\n isSufficient: false,\r\n message: 'Error occurred while checking storage space'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Safely store data, will check if there is enough space\r\n */\r\nexport function safeSetItem(\r\n key: string,\r\n data: unknown\r\n): {\r\n success: boolean\r\n message?: string\r\n error?: Error\r\n} {\r\n try {\r\n // Estimate data size\r\n const dataStr = JSON.stringify(data)\r\n const dataSize = new TextEncoder().encode(dataStr).length\r\n\r\n // Check storage space\r\n const spaceCheck = checkStorageSpace(dataSize)\r\n if (!spaceCheck.isSufficient) {\r\n return {\r\n success: false,\r\n message: spaceCheck.message\r\n }\r\n }\r\n\r\n // Attempt to store\r\n localStorage.setItem(key, dataStr)\r\n return { success: true }\r\n } catch (error) {\r\n if (isQuotaExceededError(error)) {\r\n return {\r\n success: false,\r\n message:\r\n 'Local storage space is full, unable to save data. Please clear browser cache.',\r\n error: error as Error\r\n }\r\n }\r\n return {\r\n success: false,\r\n message: 'Unknown error occurred while storing data',\r\n error: error as Error\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Safely retrieve data, includes error handling\r\n */\r\nexport function safeGetItem<T>(key: string): {\r\n data: T | null\r\n success: boolean\r\n error?: Error\r\n} {\r\n try {\r\n if (!isLocalStorageSupported()) {\r\n throw new Error('localStorage not available')\r\n }\r\n\r\n const item = localStorage.getItem(key)\r\n if (!item) {\r\n return { data: null, success: true }\r\n }\r\n\r\n const data = JSON.parse(item) as T\r\n return { data, success: true }\r\n } catch (error) {\r\n return {\r\n data: null,\r\n success: false,\r\n error: error as Error\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all stored data (dangerous operation, use with caution)\r\n */\r\nexport function clearAllStorage(): { success: boolean; message?: string } {\r\n try {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.clear()\r\n return { success: true }\r\n }\r\n return { success: false, message: 'localStorage not available' }\r\n } catch (error) {\r\n return {\r\n success: false,\r\n message: `Failed to clear storage: ${error instanceof Error ? error.message : 'Unknown error'}`\r\n }\r\n }\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useRef,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { isLocalStorageSupported } from './storageUtils'\r\nimport { Tag } from '../../api/useChainsAndTokens'\r\n\r\nexport interface TokenFavoriteItem {\r\n chain_id: number; address: `0x${string}`; symbol: string\r\n decimals: number; logo: string; name: string; timestamp?: number\r\n tags: Tag[]; categories?: string[]\r\n}\r\n\r\ninterface TokenFavoritesContextType {\r\n favorites: TokenFavoriteItem[]\r\n addFavorite: (chainId: number, tokenAddress: `0x${string}`, symbol: string, decimals: number, logo: string, name: string, tags: Tag[]) => void\r\n removeFavorite: (chainId: number, tokenAddress: string) => void\r\n isFavorite: (chainId: number, tokenAddress: string) => boolean\r\n clearFavorites: () => void\r\n isLoading: boolean; walletAddress: string | undefined; storageError: string | null\r\n}\r\n\r\nconst TokenFavoritesContext = createContext<TokenFavoritesContextType>({\r\n favorites: [], addFavorite: () => {}, removeFavorite: () => {},\r\n isFavorite: () => false, clearFavorites: () => {},\r\n isLoading: true, walletAddress: undefined, storageError: null\r\n})\r\n\r\nexport const TokenFavoritesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const [favorites, setFavorites] = useState<TokenFavoriteItem[]>([])\r\n const [isLoading, setIsLoading] = useState(true)\r\n const [storageError, setStorageError] = useState<string | null>(null)\r\n const mountedRef = useRef(false)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-token-favorites-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n mountedRef.current = true\r\n const id = requestAnimationFrame(() => {\r\n if (!mountedRef.current) return\r\n if (!address) { setFavorites([]); setIsLoading(false); return }\r\n try {\r\n const k = getStorageKey(); if (!k) { setIsLoading(false); return }\r\n const s = localStorage.getItem(k); if (s) setFavorites(JSON.parse(s))\r\n } catch (_) { setFavorites([]) } finally { setIsLoading(false) }\r\n })\r\n return () => { mountedRef.current = false; cancelAnimationFrame(id) }\r\n }, [address, getStorageKey])\r\n\r\n const saveFavorites = (n: TokenFavoriteItem[]) => {\r\n if (typeof window === 'undefined') return\r\n if (!isLocalStorageSupported()) { setStorageError('no localStorage'); return }\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.setItem(k, JSON.stringify(n)); setFavorites(n) } catch (_) {}\r\n }\r\n\r\n const addFavorite = (ci: number, ta: `0x${string}`, s: string, d: number, l: string, n: string, tg: Tag[]) => {\r\n if (!address) return\r\n if (!favorites.find(f => f.chain_id === ci && f.address === ta))\r\n saveFavorites([...favorites, { chain_id: ci, address: ta, symbol: s, decimals: d, logo: l, name: n, tags: tg, timestamp: Date.now() }])\r\n }\r\n\r\n const removeFavorite = (ci: number, ta: string) => {\r\n if (!address) return\r\n setFavorites(p => { const u = p.filter(f => !(f.chain_id === ci && f.address === ta)); saveFavorites(u); return u })\r\n }\r\n\r\n const isFavorite = (ci: number, ta: string): boolean =>\r\n favorites.some(f => f.chain_id === ci && f.address === ta)\r\n\r\n const clearFavorites = () => {\r\n if (!address) return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.removeItem(k); setFavorites([]) } catch (_) {}\r\n }\r\n\r\n return (\r\n <TokenFavoritesContext.Provider value={{ favorites, addFavorite, removeFavorite, isFavorite, clearFavorites, isLoading, walletAddress: address, storageError }}>\r\n {children}\r\n </TokenFavoritesContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTokenFavoritesContext = () => {\r\n const c = useContext(TokenFavoritesContext)\r\n if (c === undefined) throw new Error('useTokenFavoritesContext must be used within TokenFavoritesProvider')\r\n return c\r\n}\r\n","'use client'\r\n\r\nimport React, { useMemo } from 'react'\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\r\nimport { DynamicContextProvider } from '@dynamic-labs/sdk-react-core'\r\nimport type { EvmNetwork } from '@dynamic-labs/sdk-react-core'\r\nimport { EthereumWalletConnectors } from '@dynamic-labs/ethereum'\r\nimport { SolanaWalletConnectorsWithConfig } from '@dynamic-labs/solana'\r\nimport { DynamicWagmiConnector } from '@dynamic-labs/wagmi-connector'\r\nimport { WagmiProvider } from 'wagmi'\r\nimport { http, fallback, createConfig } from 'wagmi'\r\nimport { mainnet, base, soneium, polygon, arbitrum, optimism, sepolia, arbitrumSepolia, optimismSepolia, baseSepolia, unichainSepolia, arcTestnet } from 'wagmi/chains'\r\nimport { WidgetThemeProvider } from '../theme/ThemeProvider'\r\nimport { useChainsAndTokens } from '../api/useChainsAndTokens'\r\nimport { useChainsStore } from '../stores/chainsStore'\r\nimport { useTokensStore } from '../stores/chainsStore'\r\nimport { useSyncWalletConnectedStore } from '../stores/useSyncWalletConnectedStore'\r\nimport { FavoritesProvider } from '../core/SelectTokenModal/FavoritesContext'\r\nimport { TokenFavoritesProvider } from '../core/SelectTokenModal/TokenFavoritesContext'\r\nimport type { WidgetConfig } from '../types'\r\nimport '../animations.css'\r\n\r\nconst supportedChains = [mainnet, base, soneium, polygon, arbitrum, optimism, sepolia, arbitrumSepolia, optimismSepolia, baseSepolia, unichainSepolia, arcTestnet]\r\n\r\n/**\r\n * CORS-friendly RPC URLs per chain ID.\r\n * These are used as fallback when the API hasn't returned chain RPC data yet,\r\n * or when a chain doesn't provide rpc_url in the API response.\r\n */\r\nconst CORS_FRIENDLY_RPC_MAP: Record<number, string> = {\r\n 1: 'https://eth-mainnet.public.blastapi.io',\r\n 8453: 'https://mainnet.base.org',\r\n 1868: 'https://soneium.rpc.scs.startale.com',\r\n 137: 'https://polygon-rpc.com',\r\n 42161: 'https://arbitrum.gateway.tenderly.co',\r\n 10: 'https://optimism.gateway.tenderly.co',\r\n // Testnet\r\n 11155111: 'https://ethereum-sepolia.publicnode.com',\r\n 421614: 'https://sepolia-rollup.arbitrum.io/rpc',\r\n 11155420: 'https://optimism-sepolia.gateway.tenderly.co',\r\n 84532: 'https://sepolia.base.org',\r\n 1301: 'https://sepolia.unichain.org',\r\n 5042002: 'https://rpc.testnet.arc.network'\r\n}\r\n\r\n/** Build stable transports using CORS-friendly RPCs only (like main site's defaultRpc) */\r\nfunction buildStableTransports() {\r\n const transports: Record<number, ReturnType<typeof fallback>> = {}\r\n\r\n supportedChains.forEach((chain) => {\r\n const fallbackRpc = CORS_FRIENDLY_RPC_MAP[chain.id]\r\n if (fallbackRpc) {\r\n transports[chain.id] = fallback([http(), http(fallbackRpc)])\r\n } else {\r\n transports[chain.id] = fallback([http(), http(chain.rpcUrls?.default?.http?.[0] || '')])\r\n }\r\n })\r\n\r\n return transports\r\n}\r\n\r\n/** Stable wagmi config - never changes, like main site's singleton config */\r\nfunction getWagmiConfig() {\r\n return createConfig({\r\n chains: supportedChains,\r\n transports: buildStableTransports(),\r\n multiInjectedProviderDiscovery: false,\r\n ssr: false\r\n })\r\n}\r\n\r\nfunction WalletConnectionStateSync() {\r\n useSyncWalletConnectedStore()\r\n return null\r\n}\r\n\r\nfunction ChainsAndTokensLoader({ children, config }: { children: React.ReactNode; config?: WidgetConfig }) {\r\n const { data } = useChainsAndTokens(true)\r\n const { setChains, setSlippagePolicies } = useChainsStore()\r\n const { setTokens } = useTokensStore()\r\n const initialDataRef = React.useRef(false)\r\n\r\n const allChains = useMemo(() => {\r\n if (!data?.chains) return null\r\n const l = [...data.chains]\r\n if (data.deposit_platforms?.prediction?.chains) l.push(...data.deposit_platforms.prediction.chains)\r\n return l\r\n }, [data])\r\n\r\n const allTokens = useMemo(() => {\r\n if (!data?.tokens) return null\r\n const l = [...data.tokens]\r\n if (data.deposit_platforms?.prediction?.tokens) l.push(...data.deposit_platforms.prediction.tokens)\r\n return l\r\n }, [data])\r\n\r\n // Filter chains/tokens based on config\r\n const filteredChains = useMemo(() => {\r\n if (!allChains) return null\r\n const fromChains = config?.from?.chains\r\n const toChains = config?.to?.chains\r\n if (!fromChains?.length && !toChains?.length) return allChains\r\n\r\n const allowedSet = new Set<number>()\r\n fromChains?.forEach(id => allowedSet.add(id))\r\n toChains?.forEach(id => allowedSet.add(id))\r\n return allChains.filter(c => allowedSet.has(c.chain_id))\r\n }, [allChains, config?.from?.chains, config?.to?.chains])\r\n\r\n const filteredTokens = useMemo(() => {\r\n if (!allTokens) return null\r\n const fromTokenConfig = config?.from?.chainTokens\r\n const toTokenConfig = config?.to?.chainTokens\r\n if (!fromTokenConfig && !toTokenConfig) return allTokens\r\n\r\n // Build set of allowed {chainId, address} pairs\r\n const allowedSet = new Set<string>()\r\n const addTokens = (tc: Record<number, { chainId: number; address: string }[]> | undefined) => {\r\n if (!tc) return\r\n for (const entries of Object.values(tc)) {\r\n for (const t of entries) {\r\n allowedSet.add(`${t.chainId}:${t.address.toLowerCase()}`)\r\n }\r\n }\r\n }\r\n addTokens(fromTokenConfig)\r\n addTokens(toTokenConfig)\r\n\r\n if (allowedSet.size === 0) return allTokens\r\n return allTokens.filter(t => allowedSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }, [allTokens, config?.from?.chainTokens, config?.to?.chainTokens])\r\n\r\n React.useEffect(() => {\r\n if (filteredChains && !initialDataRef.current) { setChains(filteredChains); if (data?.slippage_policies) setSlippagePolicies(data.slippage_policies) }\r\n if (filteredTokens && !initialDataRef.current) setTokens(filteredTokens)\r\n if (filteredChains && filteredTokens) initialDataRef.current = true\r\n }, [filteredChains, filteredTokens, data, setChains, setTokens, setSlippagePolicies])\r\n\r\n const isReady = filteredChains && filteredTokens\r\n\r\n if (!isReady) {\r\n return (\r\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '200px' }}>\r\n <span>Loading chains and tokens...</span>\r\n </div>\r\n )\r\n }\r\n\r\n return (\r\n <FavoritesProvider>\r\n <TokenFavoritesProvider>\r\n <WalletConnectionStateSync />\r\n {children}\r\n </TokenFavoritesProvider>\r\n </FavoritesProvider>\r\n )\r\n}\r\n\r\nconst DEFAULT_ENVIRONMENT_ID = 'f217660e-2cec-470b-a8f4-ac655b16f802'\r\n\r\nexport interface WheelXProviderProps { config?: WidgetConfig; children: React.ReactNode }\r\n\r\nconst solanaRpcUrl = 'https://mainnet.helius-rpc.com/?api-key=7337bed2-6c3a-472f-b06f-9b2be0e1392f'\r\n\r\nexport const WheelXProvider: React.FC<WheelXProviderProps> = ({ config, children }) => {\r\n const queryClient = useMemo(() => new QueryClient(), [])\r\n const evmNetworks = useMemo(() => supportedChains.map(chain => ({\r\n chainId: chain.id, networkId: chain.id, name: chain.name,\r\n nativeCurrency: { name: chain.nativeCurrency.name, symbol: chain.nativeCurrency.symbol, decimals: chain.nativeCurrency.decimals },\r\n rpcUrls: chain.rpcUrls?.default?.http?.length ? [...chain.rpcUrls.default.http] : [],\r\n blockExplorerUrls: chain.blockExplorers?.default?.url ? [chain.blockExplorers.default.url] : []\r\n } as unknown as EvmNetwork)), [])\r\n\r\n const solanaConnectors = useMemo(() => SolanaWalletConnectorsWithConfig({ customRpcUrls: { solana: [solanaRpcUrl] } }), [])\r\n\r\n const dynamicSettings = useMemo(() => ({\r\n environmentId: config?.dynamicEnvironmentId || DEFAULT_ENVIRONMENT_ID,\r\n walletConnectors: [EthereumWalletConnectors, solanaConnectors],\r\n enableConnectOnlyFallback: false,\r\n initialAuthenticationMode: 'connect-only' as const,\r\n mobileExperience: 'redirect' as const,\r\n deepLinkPreference: 'universal' as const,\r\n defaultNumberOfWalletsToShow: 25,\r\n overrides: { evmNetworks }\r\n }), [evmNetworks, solanaConnectors, config?.dynamicEnvironmentId])\r\n\r\n const wagmiConfig = useMemo(() => getWagmiConfig(), [])\r\n\r\n return (\r\n <WidgetThemeProvider theme={config?.theme}>\r\n <QueryClientProvider client={queryClient}>\r\n <DynamicContextProvider settings={dynamicSettings}>\r\n <WagmiProvider config={wagmiConfig}>\r\n <DynamicWagmiConnector>\r\n <ChainsAndTokensLoader config={config}>{children}</ChainsAndTokensLoader>\r\n </DynamicWagmiConnector>\r\n </WagmiProvider>\r\n </DynamicContextProvider>\r\n </QueryClientProvider>\r\n </WidgetThemeProvider>\r\n )\r\n}\r\n","import { useMutation } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios, { AxiosError } from 'axios'\n\nexport interface QuoteRequest {\n from_chain: number\n to_chain: number\n from_token: string\n to_token: string\n from_address: string\n to_address: string\n amount: string\n slippage?: number\n to_platform_id: number\n}\nexport interface routesItem {\n name: string\n logo: string\n}\ninterface QuoteResponse {\n request_id?: string\n amount_out: string\n approve?: {\n token: string\n spender: string\n amount: bigint\n } | null\n\n router_type?: string\n points: number | string\n\n estimated_time: number\n fee: string\n min_receive: string\n price_impact: {\n bridge_fee: string\n dst_gas_fee: string\n swap_fee: string\n before_discount_fee: string\n discount_percentage?: string\n }\n recipient: string\n router: string\n slippage: number\n quote_message: string | null\n tx: {\n chainId: number\n data: `0x${string}`\n to: `0x${string}`\n value: string\n gas?: bigint | null\n maxFeePerGas?: bigint | undefined\n maxPriorityFeePerGas?: bigint | undefined\n message?: string\n sender?: string\n tx?: string\n }\n routes?: routesItem[]\n}\n\ninterface ErrorResponse {\n detail: string\n}\n\ninterface ErrorResponse2 {\n detail: {\n msg: string\n }[]\n}\n\nexport type QuoteErrorType =\n | 'business_error'\n | 'http_error'\n | 'network_error'\n | 'timeout'\n | 'unknown_error'\n\nexport interface QuoteMutationError extends Error {\n httpStatus?: number\n hasResponseBody?: boolean\n errorType?: QuoteErrorType\n detail?: string\n code?: string\n}\n\nconst createQuoteMutationError = (\n message: string,\n extra: Partial<QuoteMutationError>\n): QuoteMutationError => {\n const quoteError = new Error(message) as QuoteMutationError\n quoteError.httpStatus = extra.httpStatus\n quoteError.hasResponseBody = extra.hasResponseBody\n quoteError.errorType = extra.errorType\n quoteError.detail = extra.detail\n quoteError.code = extra.code\n return quoteError\n}\n\nconst getErrorDetail = (data: unknown): string => {\n if (typeof data === 'string') {\n return data\n }\n\n if (data && typeof data === 'object') {\n const detail = (data as { detail?: unknown }).detail\n if (typeof detail === 'string') {\n return detail\n }\n }\n\n return ''\n}\n\nexport const useGetQuote = (signal?: AbortSignal) =>\n useMutation({\n mutationFn: async (requestBody: QuoteRequest) => {\n try {\n const res = await axios.post<QuoteResponse>(\n `${BASE_API_URL}/v1/quote`,\n {\n ...requestBody,\n quote_only: true\n },\n {\n headers: { 'Content-Type': 'application/json' },\n signal\n }\n )\n\n return res.data\n } catch (error) {\n if (error instanceof AxiosError) {\n if (error.code === 'ERR_CANCELED') {\n return null\n }\n\n if (error.response?.status === 400) {\n const errorData = error.response?.data as ErrorResponse\n throw createQuoteMutationError(errorData.detail, {\n httpStatus: 400,\n hasResponseBody: true,\n errorType: 'business_error',\n detail: errorData.detail,\n code: error.code\n })\n }\n\n if (error.response?.status === 422) {\n const errorData = error.response?.data as ErrorResponse2\n const detail = errorData.detail[0]?.msg || 'Validation failed'\n throw createQuoteMutationError(detail, {\n httpStatus: 422,\n hasResponseBody: true,\n errorType: 'business_error',\n detail,\n code: error.code\n })\n }\n\n if (!error.response) {\n const isTimeout =\n error.code === 'ECONNABORTED' ||\n error.message.toLowerCase().includes('timeout')\n const message = error.message || 'Network Error'\n throw createQuoteMutationError(message, {\n httpStatus: 0,\n hasResponseBody: false,\n errorType: isTimeout ? 'timeout' : 'network_error',\n detail: message,\n code: error.code\n })\n }\n\n const detail = getErrorDetail(error.response.data)\n const message = detail || error.message || 'Failed to get quote'\n throw createQuoteMutationError(message, {\n httpStatus: error.response.status,\n hasResponseBody: !!error.response.data,\n errorType: 'http_error',\n detail,\n code: error.code\n })\n }\n\n throw error\n }\n }\n })\n","import { useQuery } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios from 'axios'\nimport { TokenInfo } from './useChainsAndTokens'\nimport { isAddress } from 'viem'\n\nexport async function getTokenInfo(value?: string, chainId?: number) {\n const url = `${BASE_API_URL}/v1/token-info`\n const res = await axios.get<TokenInfo[]>(url, {\n params: {\n address: value,\n chain_id: chainId,\n limit: 50\n }\n })\n\n return res.data\n}\n\nexport const useTokenInfo = ({\n value,\n chainId\n}: {\n value?: string\n chainId?: number\n}) => {\n const result = useQuery({\n queryKey: ['tokenInfo', value, chainId],\n queryFn: () => getTokenInfo(value, chainId),\n enabled: !!value && !!chainId\n })\n return result\n}\n\nexport const useTokenInfoBySymbol = ({\n value,\n chainId,\n hasSymbol\n}: {\n value?: string\n chainId?: number\n hasSymbol?: boolean\n}) => {\n const result = useQuery({\n queryKey: ['tokenInfoBySymbol', value, chainId],\n queryFn: () => getTokenInfo(value, chainId),\n enabled: !!value && isAddress(value) && hasSymbol\n })\n return result\n}\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport axios from 'axios'\r\n\r\nexport interface UsdPriceInfo {\r\n chainIndex: string\r\n tokenAddress: `0x${string}`\r\n time: string\r\n price: string\r\n}\r\n\r\ninterface UsdPriceRequest {\r\n chain_index: string\r\n token: `0x${string}`\r\n}\r\n\r\ntype UsdPriceResponse = UsdPriceInfo\r\n\r\nasync function getUsdPrice(\r\n tokens?: UsdPriceRequest[]\r\n): Promise<UsdPriceResponse[]> {\r\n const url = `${BASE_API_URL}/v1/token-price`\r\n const res = await axios.post<UsdPriceResponse[]>(url, tokens)\r\n return res.data\r\n}\r\n\r\nexport const useUsdPrice = (tokens?: UsdPriceRequest[]) => {\r\n return useQuery({\r\n queryKey: ['usdPrice', tokens],\r\n queryFn: () => getUsdPrice(tokens),\r\n enabled: !!tokens,\r\n retry: 4,\r\n retryDelay: 1_000\r\n })\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nexport interface HyperliquidBalanceRes {\r\n code?: number\r\n message?: string | unknown\r\n withdrawable: string | null\r\n}\r\n\r\nexport const getHyperliquidBalance = async (\r\n address: `0x${string}` | undefined\r\n): Promise<HyperliquidBalanceRes> => {\r\n try {\r\n const response = await fetch('https://api.hyperliquid.xyz/info', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type: 'clearinghouseState', user: address })\r\n })\r\n return await response.json()\r\n } catch (error: unknown) {\r\n return { code: 1, message: error, withdrawable: null }\r\n }\r\n}\r\n\r\nexport const useHyperliquidBalance = (\r\n address: `0x${string}` | undefined,\r\n enabled: boolean\r\n) => {\r\n return useQuery<HyperliquidBalanceRes, Error>({\r\n queryKey: ['getHyperliquidBalance', address],\r\n queryFn: () => getHyperliquidBalance(address),\r\n enabled: enabled && !!address,\r\n retry: 1,\r\n staleTime: 5 * 60 * 1000,\r\n refetchInterval: (query) => {\r\n if (query?.state?.data?.withdrawable === null) {\r\n return 1_000\r\n }\r\n return false\r\n }\r\n })\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport { TokenInfo } from './useChainsAndTokens'\r\nimport axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\n\r\nexport type OrderStatus = 'Open' | 'Filled' | 'Refund' | 'Failed'\r\n\r\nexport interface OrderDetail {\r\n data: string\r\n fill_block: number | null\r\n fill_timestamp: string | null\r\n fill_tx_hash: `0x${string}` | null\r\n from_amount: string\r\n from_chain: number\r\n from_token: string\r\n open_block: number\r\n open_timestamp: string\r\n open_tx_hash: string\r\n order_id: string\r\n status: OrderStatus\r\n to_address: string\r\n to_chain: number\r\n to_token: string\r\n to_amount: string\r\n amount_out?: string\r\n from_token_info: TokenInfo | null\r\n to_token_info: TokenInfo | null\r\n points: number\r\n reward_type: string\r\n reward_value: object\r\n to_platform_id: number\r\n}\r\n\r\nexport async function getOrderDetail(orderId: string) {\r\n const res = await axios.get<OrderDetail>(\r\n `${BASE_API_URL}/v1/order/${orderId}`\r\n )\r\n\r\n return res.data\r\n}\r\n\r\nexport const useIntervalGetOrderDetail = ({\r\n orderId,\r\n enabled = true\r\n}: {\r\n orderId: string | null\r\n enabled?: boolean\r\n}) => {\r\n const result = useQuery({\r\n queryKey: ['orderDetail', orderId],\r\n queryFn: () => getOrderDetail(orderId ?? ''),\r\n refetchInterval: 1_000,\r\n refetchOnMount: false,\r\n enabled: !!orderId && enabled\r\n })\r\n return result\r\n}\r\n\r\nexport const useIntervalGetOrderDetailPlus = ({\r\n orderId,\r\n enabled = true,\r\n maxRefetchAttempts = 50\r\n}: {\r\n orderId: string | null\r\n enabled?: boolean\r\n maxRefetchAttempts?: number\r\n}) => {\r\n const [attemptCount, setAttemptCount] = useState(0)\r\n const [shouldStop, setShouldStop] = useState(false)\r\n\r\n const queryEnabled =\r\n !!orderId && enabled && !shouldStop && attemptCount < maxRefetchAttempts\r\n\r\n const result = useQuery({\r\n queryKey: ['orderDetail', orderId],\r\n queryFn: () => getOrderDetail(orderId ?? ''),\r\n refetchInterval: () => {\r\n if (attemptCount >= maxRefetchAttempts || shouldStop) {\r\n return false\r\n }\r\n return 1000\r\n },\r\n refetchOnMount: false,\r\n retry: false,\r\n enabled: queryEnabled\r\n })\r\n\r\n useEffect(() => {\r\n if (result.isFetching) {\r\n setAttemptCount((prev) => prev + 1)\r\n }\r\n }, [result.isFetching])\r\n\r\n useEffect(() => {\r\n if (\r\n attemptCount >= maxRefetchAttempts &&\r\n result?.data?.status !== 'Filled'\r\n ) {\r\n setShouldStop(true)\r\n console.log(\r\n `The polling has reached its maximum number (${maxRefetchAttempts} times), but no result of the required field has been obtained`\r\n )\r\n }\r\n if (result?.data?.status === 'Filled') {\r\n setShouldStop(true)\r\n }\r\n }, [attemptCount, maxRefetchAttempts, result.data, orderId])\r\n\r\n return {\r\n ...result,\r\n attemptCount,\r\n shouldStop\r\n }\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport axios from 'axios'\r\nimport { TokenInfoWithBalance } from './useChainsAndTokens'\r\n\r\nexport interface TokenBalance {\r\n balance: string\r\n chain_id: number\r\n platform_id?: number\r\n price: string\r\n token: TokenInfoWithBalance\r\n}\r\n\r\nexport async function getTokenBalance(address?: `0x${string}`) {\r\n const url = `${BASE_API_URL}/v1/token-balances`\r\n const res = await axios.get<TokenBalance[]>(url, { params: { address } })\r\n return res.data\r\n}\r\n\r\nexport async function getSolanaTokenBalance(address?: string) {\r\n if (!address) return []\r\n const url = `${BASE_API_URL}/v1/token-balances`\r\n const res = await axios.get<TokenBalance[]>(url, { params: { address } })\r\n return res.data\r\n}\r\n\r\nexport async function getAllTokenBalances(\r\n evmAddress?: string,\r\n solanaAddress?: string\r\n) {\r\n const [evmBalances, solanaBalances] = await Promise.all([\r\n evmAddress ? getTokenBalance(evmAddress as `0x${string}`) : Promise.resolve([]),\r\n solanaAddress ? getSolanaTokenBalance(solanaAddress) : Promise.resolve([])\r\n ])\r\n return [...(evmBalances || []), ...(solanaBalances || [])]\r\n}\r\n\r\nexport const useTokenBalance = (address?: `0x${string}`) => {\r\n return useQuery({\r\n queryKey: ['tokenBalance', address],\r\n queryFn: () => getTokenBalance(address),\r\n enabled: !!address\r\n })\r\n}\r\n\r\nexport const useAllTokenBalance = (\r\n evmAddress?: string,\r\n solanaAddress?: string\r\n) => {\r\n return useQuery({\r\n queryKey: ['allTokenBalance', evmAddress, solanaAddress],\r\n queryFn: () => getAllTokenBalances(evmAddress, solanaAddress),\r\n enabled: !!evmAddress || !!solanaAddress\r\n })\r\n}\r\n","import { create } from 'zustand'\n\ninterface DifferentAddressProp {\n differentAddress: `0x${string}` | undefined | string\n setDifferentAddress: (address: `0x${string}` | undefined | string) => void\n isDepositPlatformToken: boolean\n setIsDepositPlatformToken: (isDepositPlatformToken: boolean) => void\n}\nexport const useDifferentAddressStore = create<DifferentAddressProp>((set) => ({\n differentAddress: undefined,\n setDifferentAddress: (differentAddress) => set({ differentAddress }),\n isDepositPlatformToken: false,\n setIsDepositPlatformToken: (isDepositPlatformToken) =>\n set({ isDepositPlatformToken })\n}))\n","import { useCallback } from 'react'\nimport {\n useDynamicContext,\n useDynamicModals,\n useIsLoggedIn\n} from '@dynamic-labs/sdk-react-core'\n\nexport const useWalletConnectModal = () => {\n const { setShowAuthFlow } = useDynamicContext()\n const { setShowLinkNewWalletModal } = useDynamicModals()\n const isLoggedIn = useIsLoggedIn()\n\n const openModal = useCallback(() => {\n if (isLoggedIn) {\n setShowLinkNewWalletModal(true)\n return\n }\n\n setShowAuthFlow(true)\n }, [isLoggedIn, setShowAuthFlow, setShowLinkNewWalletModal])\n\n return {\n openModal,\n openConnectModal: openModal\n }\n}\n","import { Fraction, RoundingMode } from 'bi-fraction'\n\ninterface FormatTokenAmountProps {\n amount: Fraction\n decimals?: number\n fixedDecimals?: number\n useGroupSeparator?: boolean\n}\n\nexport const formatTokenAmount = ({\n amount,\n decimals = 18,\n fixedDecimals = 6,\n useGroupSeparator = true\n}: FormatTokenAmountProps) => {\n const isZeroDecimals = decimals === 0\n const _fixedDecimals = decimals > 6 ? fixedDecimals : 6\n\n const result = amount.shr(decimals).toFixed(isZeroDecimals ? 18 : decimals)\n\n const [integerPart, decimalPart] = result.split('.')\n\n if (!decimalPart || decimalPart === '0') {\n return integerPart\n }\n\n const firstNonZeroIndex = decimalPart.search(/[1-9]/)\n if (firstNonZeroIndex === -1) {\n return integerPart\n }\n\n if (firstNonZeroIndex >= _fixedDecimals) {\n const displayDecimals = firstNonZeroIndex + 3\n return useGroupSeparator\n ? amount\n .shr(decimals)\n .toFormat({\n decimalPlaces: displayDecimals,\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n : amount\n .shr(decimals)\n .toFixed(displayDecimals, {\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n }\n\n return useGroupSeparator\n ? amount\n .shr(decimals)\n .toFormat({\n decimalPlaces: _fixedDecimals,\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n : amount\n .shr(decimals)\n .toFixed(_fixedDecimals, {\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n}\n\nexport const formatDate = (dateString: string) => {\n const dateTime = new Date(dateString)\n const month = String(dateTime.getUTCMonth() + 1).padStart(2, '0')\n const day = String(dateTime.getUTCDate()).padStart(2, '0')\n const year = dateTime.getUTCFullYear()\n const hours = String(dateTime.getUTCHours()).padStart(2, '0')\n const minutes = String(dateTime.getUTCMinutes()).padStart(2, '0')\n const seconds = String(dateTime.getUTCSeconds()).padStart(2, '0')\n\n const formattedTime = `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`\n\n return formattedTime\n}\n\nexport const dateFormatter = (isoString: string) => {\n const date = new Date(isoString)\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n const year = date.getFullYear()\n const hours = String(date.getHours()).padStart(2, '0')\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`\n}\n","export const sliceAddress = (\n address?: `0x${string}` | string,\n startLength: number = 4,\n endLength: number = 4\n) => {\n if (!address) return ''\n\n if (address.length <= startLength + endLength) {\n return address\n }\n\n return `${address.slice(0, startLength)}...${address.slice(-endLength)}`\n}\n","const SLIPPAGE = 'slippage'\n\nexport const getLocalStorage = (key: string): string => {\n if (typeof window !== 'undefined') {\n return window.localStorage.getItem(key) as string\n }\n return null as unknown as string\n}\n\nconst removeLocalStorage = (key: string): void => {\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(key)\n }\n}\n\nconst setLocalStorage = (key: string, value: string): void => {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, value)\n }\n}\n\ninterface StoreData {\n [key: string]: object\n}\n\nclass Store {\n private key: string\n\n constructor(storageKey: string = SLIPPAGE) {\n this.key = storageKey\n }\n\n private getStorageData(): StoreData {\n const data = getLocalStorage(this.key)\n return data ? JSON.parse(data) : {}\n }\n\n private setStorageData(data: StoreData): void {\n setLocalStorage(this.key, JSON.stringify(data))\n }\n\n public get(label: string): any | null {\n const data = this.getStorageData()\n return data[label] || null\n }\n\n public set(label: string, obj: object): void {\n const data = this.getStorageData()\n data[label] = {\n ...data[label],\n ...obj\n }\n this.setStorageData(data)\n }\n\n public remove(label: string): void {\n const data = this.getStorageData()\n delete data[label]\n this.setStorageData(data)\n }\n\n public clear(): void {\n removeLocalStorage(this.key)\n }\n}\n\nexport const slippageStore = new Store()\n\nexport default Store\n","import { TokenInfo } from '../api/useChainsAndTokens'\n\ntype SolanaWalletAdapterNetwork = 'mainnet' | 'devnet' | 'testnet'\nexport interface SolanaChainConfig {\n platform_id: number\n chain_id: number\n name: string\n network: string\n symbol: string\n decimals: number\n rpcUrl: string\n explorerUrl?: string\n walletAdapterNetwork: SolanaWalletAdapterNetwork\n}\n\nexport const SOLANA_MAINNET: SolanaChainConfig = {\n platform_id: 0,\n chain_id: 1151111081099710,\n name: 'Solana',\n network: 'mainnet',\n symbol: 'SOL',\n decimals: 9,\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io/',\n walletAdapterNetwork: 'mainnet'\n}\n\nexport const isSolanaChain = (chain_id?: number): boolean => {\n return chain_id === SOLANA_MAINNET.chain_id\n}\nexport const addIsSolanaProperty = (tokenInfo: TokenInfo): TokenInfo => {\n if (isSolanaChain(tokenInfo.chain_id)) {\n return { ...tokenInfo, isSolana: true }\n }\n return tokenInfo\n}\n","export const toRegex = /^\\/[a-zA-Z0-9]+$/\r\nexport const toAndTokenRegex = /^\\/(?!from)[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\nexport const fromRegex = /^\\/from&[a-zA-Z0-9-+]+$/\r\nexport const fromAndTokenRegex = /^\\/from&[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\nexport const fromAndToRegex = /^\\/[a-zA-Z0-9-+]+\\/[a-zA-Z0-9-+]+$/\r\nexport const fromAndTokenAndToAndTokenRegex =\r\n /^\\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+\\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\n\r\nconst allRegexPatterns = [\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex\r\n]\r\nexport function matchesAnyPatternUsingArray(inputString: string): boolean {\r\n return allRegexPatterns.some((regex) => regex.test(inputString))\r\n}\r\n","import { TokenInfo } from '../api'\r\nimport Store from './localstorage'\r\n\r\nconst TOKEN_SELECTION = 'tokenSelection'\r\n\r\nexport interface CachedTokenSelection {\r\n from: TokenInfo\r\n to: TokenInfo\r\n}\r\n\r\nexport const tokenSelectionStore = new Store(TOKEN_SELECTION)\r\n","export type QuoteEventErrorType =\n | 'business_error'\n | 'http_error'\n | 'network_error'\n | 'timeout'\n | 'unknown_error'\n\ntype GtagEventParams = Record<string, string | number | boolean | null>\n\ninterface QuoteErrorLike {\n message?: string\n httpStatus?: number\n hasResponseBody?: boolean\n errorType?: QuoteEventErrorType\n}\n\nconst shouldEnableDebugMode = () => {\n if (typeof window === 'undefined') {\n return false\n }\n\n return new URLSearchParams(window.location.search).get('debugview') === '1'\n}\n\nconst trackEvent = (eventName: string, params: GtagEventParams) => {\n if (typeof window === 'undefined') {\n return\n }\n\n const eventParams = shouldEnableDebugMode()\n ? { ...params, debug_mode: true }\n : params\n window.gtag?.('event', eventName, eventParams)\n}\n\nexport const createTraceId = () => {\n if (\n typeof crypto !== 'undefined' &&\n typeof crypto.randomUUID === 'function'\n ) {\n return crypto.randomUUID()\n }\n\n return `trace_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`\n}\n\nexport const maskAddress = (address?: string, head = 6, tail = 4) => {\n if (!address) return ''\n if (address.length <= head + tail) return address\n return `${address.slice(0, head)}...${address.slice(-tail)}`\n}\n\nexport const trackQuoteRequest = (params: GtagEventParams) => {\n trackEvent('quote_request_start', params)\n}\n\nexport const trackQuoteSuccess = (params: GtagEventParams) => {\n trackEvent('quote_request_success', params)\n}\n\nexport const trackQuoteError = (params: GtagEventParams) => {\n trackEvent('quote_request_error', params)\n}\n\nexport const resolveQuoteErrorMeta = (\n error: unknown,\n fallbackMessage = 'Failed to get quote'\n) => {\n const unknownError = (error || {}) as QuoteErrorLike\n const errorMessage = unknownError.message || fallbackMessage\n\n let errorType = unknownError.errorType\n if (!errorType) {\n if (errorMessage.toLowerCase().includes('timeout')) {\n errorType = 'timeout'\n } else if (\n errorMessage === 'Network Error' ||\n (unknownError.httpStatus === undefined &&\n unknownError.hasResponseBody === false)\n ) {\n errorType = 'network_error'\n } else if (\n typeof unknownError.httpStatus === 'number' &&\n unknownError.httpStatus > 0\n ) {\n errorType = 'http_error'\n } else {\n errorType = 'unknown_error'\n }\n }\n\n return {\n errorType,\n httpStatus: unknownError.httpStatus ?? 0,\n hasResponseBody: unknownError.hasResponseBody ?? false,\n errorMessage\n }\n}\n","export { formatTokenAmount, formatDate, dateFormatter } from './format'\r\nexport { sliceAddress } from './address'\r\nexport { getLocalStorage, slippageStore } from './localstorage'\r\nexport { useEvmAddress } from './wallet'\r\nexport type { SolanaChainConfig } from './solana'\r\nexport {\r\n SOLANA_MAINNET,\r\n isSolanaChain,\r\n addIsSolanaProperty\r\n} from './solana'\r\nexport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from './shortLinkRegex'\r\nexport type { CachedTokenSelection } from './tokenSelectionCache'\r\nexport { tokenSelectionStore } from './tokenSelectionCache'\r\nexport type { QuoteEventErrorType } from './quoteAnalytics'\r\nexport {\r\n createTraceId,\r\n maskAddress,\r\n trackQuoteRequest,\r\n trackQuoteSuccess,\r\n trackQuoteError,\r\n resolveQuoteErrorMeta\r\n} from './quoteAnalytics'\r\n\r\n// Utilities ported from main site\r\nimport { mainnet, base, soneium, polygon, arbitrum, optimism } from 'wagmi/chains'\r\nimport { getLocalStorage } from './localstorage'\r\nimport { isSolanaChain, SOLANA_MAINNET } from './solana'\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n// --- Logger (with timestamp, warn/error always log, info/log/debug only when enabled) ---\r\nconst LOG_ENABLE = (typeof process !== 'undefined' && (process.env as any).NEXT_LOG_ENABLE) || undefined\r\n\r\nconst logWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n if (LOG_ENABLE === 'true') {\r\n const timestamp = new Date().toLocaleString()\r\n console.log(`[${timestamp}]`, message, ...optionalParams)\r\n }\r\n}\r\n\r\nconst infoWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n if (LOG_ENABLE === 'true') {\r\n const timestamp = new Date().toLocaleString()\r\n console.info(`[${timestamp}]`, message, ...optionalParams)\r\n }\r\n}\r\n\r\nconst warnWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.warn(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nconst errorWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.error(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nconst debugWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.debug(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nexport const logger = {\r\n log: logWithTimestamp,\r\n info: infoWithTimestamp,\r\n warn: warnWithTimestamp,\r\n error: errorWithTimestamp,\r\n debug: debugWithTimestamp\r\n}\r\n\r\n// --- enableTestnet (check localStorage) ---\r\nexport function enableTestnet() {\r\n const enableTestnet = getLocalStorage('enableTestnet') === 'true'\r\n if (enableTestnet) return true\r\n return (typeof process !== 'undefined' && (process.env as any).NEXT_PUBLIC_ENABLE_TESTNETS === 'true')\r\n}\r\n\r\n// --- getTxLink (generate blockchain explorer URL) ---\r\nconst wagmiSupportedChains = [mainnet, base, soneium, polygon, arbitrum, optimism]\r\n\r\nexport const getTxLink = (txHash: string, chainId: number) => {\r\n if (isSolanaChain(chainId)) {\r\n return `${SOLANA_MAINNET.explorerUrl}/tx/${txHash}`\r\n }\r\n const chain = wagmiSupportedChains.find((c) => c.id === chainId)\r\n const explorer = chain?.blockExplorers?.default?.url\r\n return explorer ? `${explorer}/tx/${txHash}` : ''\r\n}\r\n\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\nexport const debounce = (fn: (...args: unknown[]) => void, ms: number) => {\r\n let timeoutId: ReturnType<typeof setTimeout>\r\n return (...args: unknown[]) => {\r\n clearTimeout(timeoutId)\r\n timeoutId = setTimeout(() => fn(...args), ms)\r\n }\r\n}\r\n\r\nexport const openFunctionHash =\r\n '0x3448bbc2203c608599ad448eeb1007cea04b788ac631f9f558e8dd01a3c27b3d'\r\n\r\nexport const uniqueArray = (array: string[]): string[] => {\r\n return array.filter(\r\n (item, index, self) => index === self.findIndex((t) => t === item)\r\n )\r\n}\r\n\r\nexport interface ApproveInfo {\r\n spender: string\r\n amount: bigint\r\n token: string\r\n}\r\n\r\nexport function isApproveValid(approve: ApproveInfo | null): boolean {\r\n return (\r\n approve != null &&\r\n typeof approve === 'object' &&\r\n Object.keys(approve).length > 0 &&\r\n approve.amount !== undefined &&\r\n approve.spender !== undefined &&\r\n approve.token !== undefined\r\n )\r\n}\r\n\r\nexport function isValidWeb3TokenAddress(address: string) {\r\n if (typeof address !== 'string' || !address.startsWith('0x')) {\r\n return false\r\n }\r\n const hexPart = address.substring(2)\r\n const hexRegex = /^[0-9A-Fa-f]{40}$/\r\n return hexRegex.test(hexPart)\r\n}\r\n","// Toast stubs for Chakra UI v3 (createStandaloneToast removed in v3)\r\nconst createToastStub = () => ({\r\n success: (_opts: any) => {},\r\n error: (_opts: any) => {},\r\n warning: (_opts: any) => {},\r\n info: (_opts: any) => {},\r\n loading: (_opts: any) => {},\r\n create: (_opts: any) => '',\r\n remove: (_id: string) => {},\r\n isActive: (_id: string) => false,\r\n closeAll: () => {},\r\n close: (_id: string) => {}\r\n})\r\n\r\nexport const toaster = createToastStub()\r\nexport const bottomToaster = createToastStub()\r\nexport const topToaster = createToastStub()\r\n","import { create } from 'zustand'\n\ninterface TxStateContextStore {\n fromTxHash: `0x${string}` | null\n toTxHash: `0x${string}` | null\n setFromTxHash: (fromTxHash: `0x${string}` | null) => void\n setToTxHash: (toTxHash: `0x${string}` | null) => void\n resetTxState: () => void\n startTrading: boolean\n setStartTrading: (startTrading: boolean) => void\n userCancelsTransaction: boolean\n setUserCancelsTransaction: (userCancelsTransaction: boolean) => void\n fromValue?: string | null\n setFromValue?: (fromValue: string | null) => void\n tryAgain?: boolean\n setTryAgain: (tryAgain: boolean) => void\n solanaFromTxHash: string | null\n setSolanaFromTxHash: (hash: string | null) => void\n isSolanaTransaction: boolean\n setIsSolanaTransaction: (isSolana: boolean) => void\n}\n\nconst initialState = {\n fromTxHash: null,\n toTxHash: null,\n startTrading: false,\n solanaFromTxHash: null,\n isSolanaTransaction: false\n}\n\nexport const useTxStateContextStore = create<TxStateContextStore>((set) => ({\n ...initialState,\n setFromTxHash: (fromTxHash) => set({ fromTxHash }),\n setToTxHash: (toTxHash) => set({ toTxHash }),\n resetTxState: () => set(initialState),\n setStartTrading: (startTrading) => set({ startTrading }),\n userCancelsTransaction: false,\n setUserCancelsTransaction: (userCancelsTransaction) =>\n set({ userCancelsTransaction }),\n setFromValue: (fromValue) => set({ fromValue }),\n setTryAgain: (tryAgain) => set({ tryAgain }),\n setSolanaFromTxHash: (solanaFromTxHash) => set({ solanaFromTxHash }),\n setIsSolanaTransaction: (isSolanaTransaction) => set({ isSolanaTransaction })\n}))\n","import { TokenInfo } from '../api'\r\n\r\ntype SolanaWalletAdapterNetwork = 'mainnet' | 'devnet' | 'testnet'\r\nexport interface SolanaChainConfig {\r\n platform_id: number\r\n chain_id: number\r\n name: string\r\n network: string // (mainnet/devnet/testnet)\r\n symbol: string // (SOL)\r\n decimals: number // (9)\r\n rpcUrl: string // RPC\r\n explorerUrl?: string // URL\r\n walletAdapterNetwork: SolanaWalletAdapterNetwork // wallet-adapter\r\n}\r\n\r\n/**\r\n * Solana mainnet\r\n */\r\nexport const SOLANA_MAINNET: SolanaChainConfig = {\r\n platform_id: 0,\r\n chain_id: 1151111081099710,\r\n name: 'Solana',\r\n network: 'mainnet',\r\n symbol: 'SOL',\r\n decimals: 9,\r\n rpcUrl: 'https://api.mainnet-beta.solana.com',\r\n explorerUrl: 'https://solscan.io/',\r\n walletAdapterNetwork: 'mainnet'\r\n}\r\n\r\nexport const isSolanaChain = (chain_id?: number): boolean => {\r\n return chain_id === SOLANA_MAINNET.chain_id\r\n}\r\nexport const addIsSolanaProperty = (tokenInfo: TokenInfo): TokenInfo => {\r\n if (isSolanaChain(tokenInfo.chain_id)) {\r\n return { ...tokenInfo, isSolana: true }\r\n }\r\n return tokenInfo\r\n}\r\n","import { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { zeroAddress } from 'viem'\r\nimport { soneium, base } from 'viem/chains'\r\nimport { create } from 'zustand'\r\n\r\nimport { TokenInfo, useTokenInfoBySymbol } from '../../api'\r\nimport { useTxStateContextStore } from './useTxStateContextStore'\r\nimport { isValidWeb3TokenAddress } from '../../utils'\r\nimport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from '../../utils/shortLinkRegex'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useTokensStore } from '../../stores/chainsStore'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\n\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport {\r\n tokenSelectionStore,\r\n CachedTokenSelection\r\n} from '../../utils/tokenSelectionCache'\r\nimport { WidgetConfig } from '../../types'\r\n\r\n// ChainInfo short type for name matching\r\ninterface ChainInfoShort {\r\n name: string\r\n chain_id: number\r\n}\r\n\r\nfunction findItemByName(\r\n arr: Array<ChainInfoShort>,\r\n targetName: string\r\n): [boolean, ChainInfoShort | undefined] {\r\n const foundItem = arr.find(\r\n (item) =>\r\n item.name.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase()\r\n )\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nfunction findItemBySymbol(\r\n arr: Array<TokenInfo>,\r\n targetName: string,\r\n chainId: number | undefined,\r\n platform_id?: number | undefined\r\n): [boolean, TokenInfo | undefined] {\r\n const foundItem = arr.find((item) => {\r\n if (platform_id && platform_id > 0) {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.platform_id === platform_id\r\n )\r\n } else {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.chain_id === chainId\r\n )\r\n }\r\n })\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nexport interface SwapState {\r\n fromTokenInfo: TokenInfo\r\n toTokenInfo: TokenInfo\r\n fromAmount: string\r\n toAmount: string\r\n slippage?: string\r\n fromAmountToUsd?: string | null\r\n toAmountToUsd?: string | null\r\n isShortLink?: boolean\r\n shortLink?: string\r\n transactionType?: string\r\n autoSlippage?: number | undefined\r\n tradeType?: string | null\r\n}\r\n\r\ninterface SwapAndBridgeContextStore extends SwapState {\r\n setFromTokenInfo: (tokenInfo: TokenInfo) => void\r\n setToTokenInfo: (tokenInfo: TokenInfo) => void\r\n setFromAmount: (amount: string) => void\r\n setToAmount: (amount: string) => void\r\n switchTokens: () => void\r\n resetState: () => void\r\n setAmounts: (fromAmount: string, toAmount: string) => void\r\n resetAmounts: () => void\r\n setSlippage: (slippage?: string) => void\r\n setFromAmountToUsd: (value: string | null) => void\r\n setToAmountToUsd: (value: string | null) => void\r\n setIsShortLink: (value: boolean) => void\r\n setShortLink: (value: string) => void\r\n setTransactionType: (value: string) => void\r\n setAutoSlippage: (value: number | undefined) => void\r\n}\r\n\r\nconst DEFAULT_FROM_TOKEN: TokenInfo = {\r\n name: 'Base',\r\n address: zeroAddress,\r\n chain_id: base.id,\r\n decimals: 18,\r\n symbol: 'ETH',\r\n logo: 'https://wheelx.fi/images/tokens/eth.png',\r\n tags: ['pin']\r\n}\r\n\r\nconst DEFAULT_TO_TOKEN: TokenInfo = {\r\n name: 'ETH',\r\n address: zeroAddress,\r\n chain_id: soneium.id,\r\n decimals: 18,\r\n symbol: 'ETH',\r\n logo: 'https://wheelx.fi/images/tokens/eth.png',\r\n tags: ['pin']\r\n}\r\n\r\nconst initialState: SwapState = {\r\n fromTokenInfo: DEFAULT_FROM_TOKEN,\r\n toTokenInfo: DEFAULT_TO_TOKEN,\r\n fromAmount: '',\r\n toAmount: '',\r\n fromAmountToUsd: '',\r\n toAmountToUsd: '',\r\n transactionType: '',\r\n autoSlippage: undefined\r\n}\r\n\r\nexport const useSwapAndBridgeContextStore = create<SwapAndBridgeContextStore>()(\r\n (set, get) => ({\r\n ...initialState,\r\n\r\n setFromTokenInfo: (tokenInfo: TokenInfo) => {\r\n const { toTokenInfo, fromTokenInfo } = get()\r\n useDifferentAddressStore.getState().setDifferentAddress(undefined)\r\n const enhancedTokenInfo = {\r\n ...tokenInfo,\r\n isSolana: isSolanaChain(tokenInfo.chain_id)\r\n }\r\n if (\r\n tokenInfo.address === toTokenInfo.address &&\r\n tokenInfo.chain_id === toTokenInfo.chain_id\r\n ) {\r\n set({\r\n fromTokenInfo: enhancedTokenInfo,\r\n toTokenInfo: fromTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n } else {\r\n set({\r\n fromTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n }\r\n },\r\n\r\n setToTokenInfo: (tokenInfo: TokenInfo) => {\r\n const { fromTokenInfo, toTokenInfo } = get()\r\n useDifferentAddressStore.getState().setDifferentAddress(undefined)\r\n const enhancedTokenInfo = {\r\n ...tokenInfo,\r\n isSolana: isSolanaChain(tokenInfo.chain_id)\r\n }\r\n if (\r\n tokenInfo.address === fromTokenInfo.address &&\r\n tokenInfo.chain_id === fromTokenInfo.chain_id\r\n ) {\r\n set({\r\n fromTokenInfo: toTokenInfo,\r\n toTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n } else {\r\n set({\r\n toTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n }\r\n },\r\n\r\n setFromAmount: (fromAmount: string) => set({ fromAmount }),\r\n setToAmount: (toAmount: string) => set({ toAmount }),\r\n switchTokens: () => {\r\n const { fromTokenInfo, toTokenInfo } = get()\r\n set({\r\n fromTokenInfo: toTokenInfo,\r\n toTokenInfo: fromTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n },\r\n resetState: () => set(initialState),\r\n setAmounts: (fromAmount: string, toAmount: string) =>\r\n set({ fromAmount, toAmount }),\r\n resetAmounts: () => set({ fromAmount: '', toAmount: '' }),\r\n setSlippage: (slippage) => set({ slippage }),\r\n setFromAmountToUsd: (fromAmountToUsd) => set({ fromAmountToUsd }),\r\n setToAmountToUsd: (toAmountToUsd) => set({ toAmountToUsd }),\r\n setIsShortLink: (isShortLink) => set({ isShortLink }),\r\n setShortLink: (shortLink) => set({ shortLink }),\r\n setTransactionType: (transactionType) => set({ transactionType }),\r\n setAutoSlippage: (autoSlippage) => set({ autoSlippage })\r\n })\r\n)\r\n\r\nexport const useInitSwapAndBridgeState = (config?: WidgetConfig) => {\r\n const {\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setIsShortLink,\r\n setShortLink,\r\n setFromAmount,\r\n setToAmount\r\n } = useSwapAndBridgeContextStore()\r\n const { setDifferentAddress } = useDifferentAddressStore()\r\n const { tokens } = useTokensStore()\r\n const { chains } = useChainsStore()\r\n const address = useEvmAddress()\r\n const { resetTxState } = useTxStateContextStore()\r\n const hasInitialized = useRef(false)\r\n\r\n const currentPathname = useMemo(() => {\r\n if (typeof window === 'undefined') return '/'\r\n return window.location.pathname\r\n }, [])\r\n\r\n const pathname = currentPathname\r\n\r\n useEffect(() => {\r\n if (hasInitialized.current) return\r\n // Wait until chains and tokens are loaded from API before applying defaults\r\n if (!chains || !tokens) return\r\n\r\n // Apply config defaults if provided\r\n if (config?.from?.defaultChainId && chains && tokens) {\r\n const fromChain = chains.find((c) => c.chain_id === config.from?.defaultChainId)\r\n if (fromChain) {\r\n let defaultToken: TokenInfo | undefined\r\n if (config.from?.defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === config.from?.defaultToken?.chainId &&\r\n t.address.toLowerCase() === config.from?.defaultToken?.address.toLowerCase()\r\n )\r\n }\r\n if (!defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === fromChain.chain_id &&\r\n t.address.toLowerCase() === fromChain.eth_token.toLowerCase()\r\n )\r\n }\r\n if (defaultToken) {\r\n setFromTokenInfo(defaultToken)\r\n }\r\n }\r\n }\r\n\r\n if (config?.to?.defaultChainId && chains && tokens) {\r\n const toChain = chains.find((c) => c.chain_id === config.to?.defaultChainId)\r\n if (toChain) {\r\n let defaultToken: TokenInfo | undefined\r\n if (config.to?.defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === config.to?.defaultToken?.chainId &&\r\n t.address.toLowerCase() === config.to?.defaultToken?.address.toLowerCase()\r\n )\r\n }\r\n if (!defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === toChain.chain_id &&\r\n t.address.toLowerCase() === toChain.eth_token.toLowerCase()\r\n )\r\n }\r\n if (defaultToken) {\r\n setToTokenInfo(defaultToken)\r\n }\r\n }\r\n }\r\n\r\n // Parse short link from pathname\r\n if (matchesAnyPatternUsingArray(pathname) && chains && tokens) {\r\n setIsShortLink(true)\r\n setShortLink(pathname)\r\n try {\r\n const decodedPath = decodeURIComponent(pathname)\r\n // Match /fromChain&fromToken/toChain&toToken\r\n const match = decodedPath.match(\r\n /^\\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)\\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)$/\r\n )\r\n if (match) {\r\n const [, fromChainName, fromTokenSymbol, toChainName, toTokenSymbol] = match\r\n const [, foundFromChain] = findItemByName(\r\n chains as unknown as ChainInfoShort[],\r\n fromChainName\r\n )\r\n const [, foundToChain] = findItemByName(\r\n chains as unknown as ChainInfoShort[],\r\n toChainName\r\n )\r\n if (foundFromChain && foundToChain && tokens) {\r\n const [, foundFromToken] = findItemBySymbol(\r\n tokens,\r\n fromTokenSymbol,\r\n foundFromChain.chain_id\r\n )\r\n const [, foundToToken] = findItemBySymbol(\r\n tokens,\r\n toTokenSymbol,\r\n foundToChain.chain_id\r\n )\r\n if (foundFromToken && foundToToken) {\r\n setFromTokenInfo(foundFromToken)\r\n setToTokenInfo(foundToToken)\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n }\r\n\r\n // Restore from cache\r\n const cached = tokenSelectionStore.get(address || 'default') as\r\n | CachedTokenSelection\r\n | undefined\r\n if (cached?.from && cached?.to && !matchesAnyPatternUsingArray(pathname)) {\r\n setFromTokenInfo(cached.from)\r\n setToTokenInfo(cached.to)\r\n }\r\n\r\n hasInitialized.current = true\r\n\r\n return () => {\r\n setFromAmount('')\r\n setToAmount('')\r\n setDifferentAddress(undefined)\r\n resetTxState()\r\n }\r\n }, [\r\n pathname,\r\n address,\r\n chains,\r\n tokens,\r\n config,\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setIsShortLink,\r\n setShortLink,\r\n setFromAmount,\r\n setToAmount,\r\n setDifferentAddress,\r\n resetTxState\r\n ])\r\n}\r\n\r\nexport const useResetSwapAndBridgeState = () => {\r\n const {\r\n resetState\r\n } = useSwapAndBridgeContextStore()\r\n const { resetTxState } = useTxStateContextStore()\r\n const { setDifferentAddress } = useDifferentAddressStore()\r\n const prevPathnameRef = useRef<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n const currentPathname = window.location.pathname\r\n if (\r\n prevPathnameRef.current !== null &&\r\n prevPathnameRef.current !== currentPathname\r\n ) {\r\n resetState()\r\n resetTxState()\r\n setDifferentAddress(undefined)\r\n }\r\n prevPathnameRef.current = currentPathname\r\n }, []) // Only runs once on mount\r\n}\r\n","import { useCallback, useRef, useState } from 'react'\nimport {\n useAccount,\n useChainId,\n useConfig,\n useReconnect,\n type Config,\n type Connector\n} from 'wagmi'\nimport type { Chain } from 'wagmi/chains'\n\ninterface EIP1193Provider {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>\n isMetaMask?: boolean\n isConnected?: () => boolean\n isBraveWallet?: boolean\n isTokenPocket?: boolean\n}\n\ninterface EthereumProvider extends EIP1193Provider {\n providers?: EthereumProvider[]\n}\n\nconst logger = {\n error: (...args: unknown[]) => console.error(...args)\n}\n\nexport const useGuardChain = (\n callback: () => void,\n requiredChainId: number\n) => {\n const [isSwitching, setIsSwitching] = useState(false)\n\n const cb = useRef(callback)\n cb.current = callback\n\n const chainId = useChainId()\n const config = useConfig()\n const { connector } = useAccount()\n const { reconnectAsync } = useReconnect()\n\n return {\n isSwitching,\n sendTx: useCallback(async () => {\n if (chainId !== requiredChainId) {\n try {\n setIsSwitching(true)\n await connectRequiredChain(config, requiredChainId, connector)\n\n try {\n await reconnectAsync()\n } catch {\n // continue\n }\n\n await new Promise((resolve) => setTimeout(resolve, 500))\n setIsSwitching(false)\n cb.current()\n } catch (error) {\n setIsSwitching(false)\n logger.error('switch chain error', error)\n throw new Error(\n `Failed to switch to ${getChainName(config, requiredChainId)}. Please switch manually in your wallet.`\n )\n }\n } else {\n if (!connector) {\n try {\n await reconnectAsync()\n await new Promise((resolve) => setTimeout(resolve, 300))\n } catch {\n // continue\n }\n }\n cb.current()\n }\n }, [chainId, config, requiredChainId, connector, reconnectAsync])\n }\n}\n\nfunction getChainName(config: Config, chainId: number): string {\n const chain = config.chains.find((c: Chain) => c.id === chainId)\n return chain?.name || `Chain ${chainId}`\n}\n\nasync function connectRequiredChain(\n config: Config,\n chainId: number,\n connector: Connector | undefined\n) {\n const chain = config.chains.find((c: Chain) => c.id === chainId)\n if (!chain) {\n throw new Error(`Chain with id ${chainId} not found in config`)\n }\n\n let provider: EIP1193Provider | undefined\n\n if (connector) {\n try {\n if (connector.id && connector.name) {\n provider = (await connector.getProvider?.()) as EIP1193Provider | undefined\n }\n } catch {\n // continue to fallback\n }\n }\n\n if (!provider) {\n const ethereum = (window as unknown as { ethereum?: EthereumProvider })\n .ethereum\n if (ethereum?.providers && Array.isArray(ethereum.providers)) {\n provider = ethereum.providers.find(\n (p: EthereumProvider) => (p as { isOkxWallet?: boolean }).isOkxWallet\n )\n if (!provider) {\n provider = ethereum.providers.find(\n (p: EthereumProvider) =>\n p.isMetaMask && !p.isBraveWallet && !p.isTokenPocket\n )\n }\n if (!provider) {\n provider = ethereum.providers[0]\n }\n } else {\n provider = ethereum\n }\n }\n\n if (!provider) {\n throw new Error('No wallet provider found')\n }\n\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }]\n })\n } catch (switchError: unknown) {\n if ((switchError as { code?: number })?.code === 4902) {\n const addChainParams = {\n chainId: `0x${chainId.toString(16)}`,\n chainName: chain.name,\n nativeCurrency: {\n name: chain.nativeCurrency.name,\n symbol: chain.nativeCurrency.symbol,\n decimals: 18\n },\n rpcUrls: chain.rpcUrls.default.http,\n blockExplorerUrls: chain.blockExplorers?.default\n ? [chain.blockExplorers.default.url]\n : []\n }\n\n try {\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [addChainParams]\n })\n } catch (addError: unknown) {\n throw addError\n }\n } else {\n throw switchError\n }\n }\n}\n","import { useCallback, useRef } from 'react'\nimport { create } from 'zustand'\n\ninterface RefreshLoadingState {\n isLoading: boolean\n setIsLoading: (isLoading: boolean) => void\n}\n\nconst useRefreshLoadingStore = create<RefreshLoadingState>((set) => ({\n isLoading: false,\n setIsLoading: (isLoading) => set({ isLoading })\n}))\n\nexport const useRefreshLoading = () => {\n const { isLoading, setIsLoading } = useRefreshLoadingStore()\n\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const autoRestoreTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const startLoading = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n\n if (autoRestoreTimer.current) {\n clearTimeout(autoRestoreTimer.current)\n autoRestoreTimer.current = null\n }\n\n if (!isLoading) {\n setIsLoading(true)\n\n timer.current = setTimeout(() => {\n setIsLoading(false)\n timer.current = null\n }, 1500)\n } else {\n setIsLoading(false)\n\n autoRestoreTimer.current = setTimeout(() => {\n setIsLoading(true)\n autoRestoreTimer.current = null\n\n timer.current = setTimeout(() => {\n setIsLoading(false)\n timer.current = null\n }, 1500)\n }, 200)\n }\n }, [isLoading, setIsLoading])\n\n return { isLoading, startLoading }\n}\n","import { useMemo } from 'react'\r\nimport { useQuery } from '@tanstack/react-query'\r\nimport {\r\n createPublicClient,\r\n erc20Abi,\r\n formatUnits,\r\n http,\r\n type PublicClient\r\n} from 'viem'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\n\r\nconst FRONTEND_MAX_RETRY_COUNT = 3\r\nconst REQUEST_TIMEOUT = 4000\r\nconst BALANCE_REFETCH_INTERVAL = 12000\r\n\r\nconst chainRpcMode = new Map<number, 'frontend' | 'backend'>()\r\n\r\n// Default RPC URLs for common chains (used as frontend fallback)\r\nconst defaultRpc: Record<number, string> = {}\r\n\r\ninterface Props {\r\n chainId: number\r\n tokenAddress?: `0x${string}`\r\n connectAddress?: `0x${string}`\r\n}\r\n\r\ninterface BalanceResult {\r\n decimals: number\r\n formatted: string\r\n symbol: string\r\n value: bigint\r\n}\r\n\r\nconst getBalanceByClient = async (\r\n client: PublicClient,\r\n address: `0x${string}`,\r\n tokenAddress?: `0x${string}`\r\n): Promise<BalanceResult> => {\r\n if (tokenAddress) {\r\n const [value, decimals, symbol] = await Promise.all([\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'balanceOf',\r\n args: [address]\r\n }) as Promise<bigint>,\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'decimals'\r\n }) as Promise<number>,\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'symbol'\r\n }) as Promise<string>\r\n ])\r\n\r\n return {\r\n decimals,\r\n formatted: formatUnits(value, decimals),\r\n symbol,\r\n value\r\n }\r\n }\r\n\r\n const value = await client.getBalance({ address })\r\n return {\r\n decimals: 18,\r\n formatted: formatUnits(value, 18),\r\n symbol: 'ETH',\r\n value\r\n }\r\n}\r\n\r\nexport const useTokenBalance = ({\r\n chainId,\r\n tokenAddress,\r\n connectAddress\r\n}: Props) => {\r\n const address = useEvmAddress()\r\n const { chains } = useChainsStore()\r\n\r\n const currentAddress = connectAddress ?? address\r\n const backendRpcUrl = useMemo(\r\n () => chains?.find((chain) => chain.chain_id === chainId)?.rpc_url,\r\n [chains, chainId]\r\n )\r\n\r\n const { data: balance } = useQuery<BalanceResult>({\r\n queryKey: [\r\n 'token-balance-with-rpc-fallback',\r\n currentAddress,\r\n chainId,\r\n tokenAddress,\r\n backendRpcUrl\r\n ],\r\n enabled: Boolean(currentAddress && chainId),\r\n queryFn: async () => {\r\n const walletAddress = currentAddress as `0x${string}`\r\n const frontendRpcUrl = defaultRpc[chainId]\r\n const preferBackend = chainRpcMode.get(chainId) === 'backend'\r\n let lastError: unknown\r\n\r\n if (!preferBackend && frontendRpcUrl) {\r\n const frontendClient = createPublicClient({\r\n transport: http(frontendRpcUrl, {\r\n retryCount: 0,\r\n timeout: REQUEST_TIMEOUT\r\n })\r\n })\r\n\r\n for (let i = 0; i < FRONTEND_MAX_RETRY_COUNT; i++) {\r\n try {\r\n const result = await getBalanceByClient(\r\n frontendClient,\r\n walletAddress,\r\n tokenAddress\r\n )\r\n chainRpcMode.set(chainId, 'frontend')\r\n return result\r\n } catch (error) {\r\n lastError = error\r\n }\r\n }\r\n }\r\n\r\n if (backendRpcUrl) {\r\n const backendClient = createPublicClient({\r\n transport: http(backendRpcUrl, {\r\n retryCount: 0,\r\n timeout: REQUEST_TIMEOUT\r\n })\r\n })\r\n const result = await getBalanceByClient(\r\n backendClient,\r\n walletAddress,\r\n tokenAddress\r\n )\r\n chainRpcMode.set(chainId, 'backend')\r\n return result\r\n }\r\n\r\n throw lastError ?? new Error('No available RPC URL for balance query')\r\n },\r\n retry: 0,\r\n refetchInterval: BALANCE_REFETCH_INTERVAL\r\n })\r\n\r\n return balance\r\n}\r\n","import { useEffect, useMemo, useState } from 'react'\r\nimport { ChainEnum, useRpcProviders, useTokenBalances } from '@dynamic-labs/sdk-react-core'\r\nimport { Connection, PublicKey } from '@solana/web3.js'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\n\r\nconst SOL_MINT_ADDRESS = 'So11111111111111111111111111111111111111112'\r\nconst SOL_NATIVE_ADDRESS = '11111111111111111111111111111111'\r\nconst SOLANA_MAINNET_NETWORK_ID = 101\r\n\r\ninterface SolanaTokenBalance {\r\n decimals: number\r\n value: bigint\r\n formatted: string\r\n symbol: string\r\n}\r\n\r\nconst normalizeAddress = (value?: string) => (value ?? '').trim().toLowerCase()\r\n\r\nconst formatRawBalance = (raw: bigint, decimals: number) => {\r\n if (decimals <= 0) return raw.toString()\r\n\r\n const rawStr = raw.toString()\r\n const negative = rawStr.startsWith('-')\r\n const unsigned = negative ? rawStr.slice(1) : rawStr\r\n const padded = unsigned.padStart(decimals + 1, '0')\r\n const intPart = padded.slice(0, -decimals)\r\n const fracPart = padded.slice(-decimals).replace(/0+$/, '')\r\n\r\n const formatted = fracPart ? `${intPart}.${fracPart}` : intPart\r\n return negative ? `-${formatted}` : formatted\r\n}\r\n\r\nconst selectSolanaConnection = (providers: unknown) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: Connection\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: solanaProviders?.[0]?.provider ?? null\r\n }\r\n}\r\n\r\nexport const useSolanaTokenBalance = (\r\n tokenMintAddress?: string,\r\n isEnabled: boolean = true\r\n) => {\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { defaultProvider: connection } = useRpcProviders(selectSolanaConnection)\r\n\r\n const normalizedTokenMint = normalizeAddress(tokenMintAddress)\r\n const isSolToken =\r\n !tokenMintAddress ||\r\n normalizedTokenMint === normalizeAddress(SOL_MINT_ADDRESS) ||\r\n normalizedTokenMint === normalizeAddress(SOL_NATIVE_ADDRESS)\r\n\r\n const {\r\n tokenBalances,\r\n isLoading,\r\n isError,\r\n error,\r\n fetchAccountBalances\r\n } = useTokenBalances({\r\n accountAddress: solanaWalletAddress || undefined,\r\n chainName: ChainEnum.Sol,\r\n networkId: SOLANA_MAINNET_NETWORK_ID,\r\n includeNativeBalance: true,\r\n includeFiat: true,\r\n tokenAddresses: isSolToken || !tokenMintAddress ? undefined : [tokenMintAddress],\r\n filterSpamTokens: false\r\n })\r\n\r\n const [rpcData, setRpcData] = useState<SolanaTokenBalance | null>(null)\r\n const [rpcLoading, setRpcLoading] = useState(false)\r\n const [rpcError, setRpcError] = useState<Error | null>(null)\r\n\r\n useEffect(() => {\r\n let cancelled = false\r\n\r\n const fetchByRpc = async () => {\r\n if (!isEnabled || !solanaWalletAddress || !connection) {\r\n setRpcData(null)\r\n setRpcError(null)\r\n setRpcLoading(false)\r\n return\r\n }\r\n\r\n setRpcLoading(true)\r\n setRpcError(null)\r\n\r\n try {\r\n const owner = new PublicKey(solanaWalletAddress)\r\n\r\n if (isSolToken) {\r\n const lamports = await connection.getBalance(owner)\r\n if (cancelled) return\r\n\r\n setRpcData({\r\n decimals: 9,\r\n value: BigInt(lamports),\r\n formatted: formatRawBalance(BigInt(lamports), 9),\r\n symbol: 'SOL'\r\n })\r\n return\r\n }\r\n\r\n if (!tokenMintAddress) {\r\n if (!cancelled) setRpcData(null)\r\n return\r\n }\r\n\r\n const mint = new PublicKey(tokenMintAddress)\r\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(owner, {\r\n mint\r\n })\r\n\r\n if (cancelled) return\r\n\r\n let totalRaw = 0n\r\n let decimals = 0\r\n\r\n for (const account of tokenAccounts.value) {\r\n const parsed = account.account.data.parsed?.info?.tokenAmount\r\n if (!parsed) continue\r\n\r\n const amountStr = String(parsed.amount ?? '0')\r\n totalRaw += BigInt(amountStr)\r\n decimals = Number(parsed.decimals ?? decimals)\r\n }\r\n\r\n setRpcData({\r\n decimals,\r\n value: totalRaw,\r\n formatted: formatRawBalance(totalRaw, decimals),\r\n symbol: ''\r\n })\r\n } catch (err) {\r\n if (!cancelled) {\r\n setRpcData(null)\r\n setRpcError(err instanceof Error ? err : new Error('Failed to fetch Solana balance'))\r\n }\r\n } finally {\r\n if (!cancelled) setRpcLoading(false)\r\n }\r\n }\r\n\r\n fetchByRpc()\r\n\r\n return () => {\r\n cancelled = true\r\n }\r\n }, [connection, isEnabled, isSolToken, solanaWalletAddress, tokenMintAddress])\r\n\r\n const dynamicData = useMemo<SolanaTokenBalance | null>(() => {\r\n if (!isEnabled || !solanaWalletAddress) return null\r\n\r\n if (isSolToken) {\r\n const native = tokenBalances.find((item) => item.isNative)\r\n if (!native) {\r\n return {\r\n decimals: 9,\r\n value: 0n,\r\n formatted: '0',\r\n symbol: 'SOL'\r\n }\r\n }\r\n\r\n return {\r\n decimals: native.decimals,\r\n value: BigInt(Math.floor(native.rawBalance || 0)),\r\n formatted: String(native.balance ?? 0),\r\n symbol: native.symbol || 'SOL'\r\n }\r\n }\r\n\r\n const targetToken = tokenBalances.find(\r\n (item) => normalizeAddress(item.address) === normalizedTokenMint\r\n )\r\n\r\n if (!targetToken) {\r\n return {\r\n decimals: 0,\r\n value: 0n,\r\n formatted: '0',\r\n symbol: ''\r\n }\r\n }\r\n\r\n return {\r\n decimals: targetToken.decimals,\r\n value: BigInt(Math.floor(targetToken.rawBalance || 0)),\r\n formatted: String(targetToken.balance ?? 0),\r\n symbol: targetToken.symbol || ''\r\n }\r\n }, [isEnabled, isSolToken, normalizedTokenMint, solanaWalletAddress, tokenBalances])\r\n\r\n const data = useMemo(() => {\r\n if (!isEnabled || !solanaWalletAddress) return null\r\n if (rpcData) return rpcData\r\n return dynamicData\r\n }, [dynamicData, isEnabled, rpcData, solanaWalletAddress])\r\n\r\n return {\r\n data,\r\n isLoading: isLoading || rpcLoading,\r\n isError: isError || Boolean(rpcError),\r\n error: rpcError || (error ? new Error(error) : null),\r\n refetch: async () => {\r\n await Promise.all([fetchAccountBalances(true)])\r\n }\r\n }\r\n}\r\n\r\nexport const useSolanaTokenUsdPrice = (tokenMintAddress?: string) => {\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const normalizedTokenMint = normalizeAddress(tokenMintAddress)\r\n const isSolToken =\r\n !!tokenMintAddress &&\r\n (normalizedTokenMint === normalizeAddress(SOL_MINT_ADDRESS) ||\r\n normalizedTokenMint === normalizeAddress(SOL_NATIVE_ADDRESS))\r\n\r\n const { tokenBalances, isLoading, isError, error, fetchAccountBalances } =\r\n useTokenBalances({\r\n accountAddress: solanaWalletAddress || undefined,\r\n chainName: ChainEnum.Sol,\r\n networkId: SOLANA_MAINNET_NETWORK_ID,\r\n includeNativeBalance: true,\r\n includeFiat: true,\r\n tokenAddresses:\r\n !tokenMintAddress || isSolToken ? undefined : [tokenMintAddress],\r\n filterSpamTokens: false\r\n })\r\n\r\n const data = useMemo<number>(() => {\r\n if (!tokenMintAddress) return 0\r\n\r\n if (isSolToken) {\r\n const native = tokenBalances.find((item) => item.isNative)\r\n return Number(native?.price || 0)\r\n }\r\n\r\n const targetToken = tokenBalances.find(\r\n (item) => normalizeAddress(item.address) === normalizedTokenMint\r\n )\r\n return Number(targetToken?.price || 0)\r\n }, [isSolToken, normalizedTokenMint, tokenBalances, tokenMintAddress])\r\n\r\n return {\r\n data,\r\n isLoading,\r\n isError,\r\n error: error ? new Error(error) : null,\r\n refetch: () => fetchAccountBalances(true)\r\n }\r\n}\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport {\r\n useDynamicContext,\r\n useRpcProviders,\r\n useUserWallets\r\n} from '@dynamic-labs/sdk-react-core'\r\n\r\nimport {\r\n Transaction,\r\n VersionedTransaction,\r\n VersionedMessage,\r\n SendOptions,\r\n PublicKey,\r\n SystemProgram,\r\n LAMPORTS_PER_SOL,\r\n Connection\r\n} from '@solana/web3.js'\r\n\r\n\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { logger } from '../../utils'\r\n\r\nexport interface SolanaTransactionInfo {\r\n message: string\r\n sender: string\r\n}\r\n\r\nexport interface SendSolanaTransactionOptions {\r\n txMessage?: string\r\n txSender?: string\r\n recipient?: string\r\n amount?: number\r\n waitForConfirmation?: boolean\r\n onSuccess?: (signature: string) => void\r\n onError?: (error: Error) => void\r\n}\r\n\r\nexport interface SolanaTransactionState {\r\n isLoading: boolean\r\n signature: string | null\r\n error: string | null\r\n isConfirmed: boolean\r\n}\r\n\r\ntype SolanaTransactionErrorCode =\r\n | 'SOL_WALLET_NOT_CONNECTED'\r\n | 'SOL_NETWORK_UNAVAILABLE'\r\n | 'SOL_DYNAMIC_SIGNER_UNAVAILABLE'\r\n | 'SOL_DYNAMIC_SIGN_REJECTED'\r\n | 'SOL_DYNAMIC_SEND_FAILED'\r\n | 'SOL_DYNAMIC_INVALID_SIGNATURE'\r\n | 'SOL_TX_PARAMS_INVALID'\r\n | 'SOL_CHAIN_ENV_MISMATCH'\r\n | 'SOL_RUNTIME_CONTEXT_CHANGED'\r\n | 'SOL_TX_EXECUTE_FAILED'\r\n\r\ntype SolanaTransactionError = Error & {\r\n code: SolanaTransactionErrorCode\r\n cause?: unknown\r\n}\r\n\r\ntype DynamicSolanaSigner = {\r\n signAndSendTransaction?: (\r\n tx: Transaction | VersionedTransaction,\r\n options?: SendOptions\r\n ) => Promise<unknown>\r\n signTransaction?: <T extends Transaction | VersionedTransaction>(\r\n tx: T\r\n ) => Promise<T>\r\n publicKey?: unknown\r\n address?: unknown\r\n getAddress?: () => Promise<unknown>\r\n}\r\n\r\ntype DynamicSolanaWalletLike = {\r\n chain?: string | null\r\n address?: string | null\r\n publicKey?: string | null\r\n connector?: unknown\r\n walletConnector?: unknown\r\n}\r\n\r\nexport type SolanaTransactionType = 'cross-chain' | 'same-chain' | 'transfer'\r\n\r\nexport const useSolanaTransaction = () => {\r\n const { defaultProvider: connection } = useRpcProviders((providers) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: unknown\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: (solanaProviders?.[0]?.provider ?? null) as Connection | null\r\n }\r\n })\r\n\r\n\r\n const { primaryWallet } = useDynamicContext()\r\n const userWallets = useUserWallets()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const effectivePublicKey = useMemo(() => {\r\n if (solanaWalletAddress) {\r\n try {\r\n return new PublicKey(solanaWalletAddress)\r\n } catch {\r\n return null\r\n }\r\n }\r\n return null\r\n }, [solanaWalletAddress])\r\n\r\n\r\n const [state, setState] = useState<SolanaTransactionState>({\r\n isLoading: false,\r\n signature: null,\r\n error: null,\r\n isConfirmed: false\r\n })\r\n const dynamicSignerRef = useRef<DynamicSolanaSigner | null>(null)\r\n const expectedSolanaNetwork = 'mainnet'\r\n\r\n const createTxError = useCallback(\r\n (\r\n code: SolanaTransactionErrorCode,\r\n message: string,\r\n cause?: unknown\r\n ): SolanaTransactionError => {\r\n const error = new Error(`[${code}] ${message}`) as SolanaTransactionError\r\n error.code = code\r\n if (cause !== undefined) {\r\n error.cause = cause\r\n }\r\n return error\r\n },\r\n []\r\n )\r\n\r\n const mapDynamicSignerError = useCallback(\r\n (error: unknown): SolanaTransactionError => {\r\n if (\r\n error instanceof Error &&\r\n 'code' in error &&\r\n typeof (error as { code?: unknown }).code === 'string'\r\n ) {\r\n return error as SolanaTransactionError\r\n }\r\n\r\n const message =\r\n error instanceof Error\r\n ? `${error.name}: ${error.message}`\r\n : typeof error === 'string'\r\n ? error\r\n : ''\r\n const normalized = message.toLowerCase()\r\n\r\n if (\r\n normalized.includes('reject') ||\r\n normalized.includes('denied') ||\r\n normalized.includes('cancel')\r\n ) {\r\n return createTxError(\r\n 'SOL_DYNAMIC_SIGN_REJECTED',\r\n 'User rejected the Solana wallet sign/send request',\r\n error\r\n )\r\n }\r\n\r\n if (\r\n normalized.includes('walletnotselectederror') ||\r\n normalized.includes('wallet not selected') ||\r\n normalized.includes('not connected') ||\r\n normalized.includes('no signer')\r\n ) {\r\n return createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'No available Dynamic Solana signer found. Please reconnect your Solana wallet',\r\n error\r\n )\r\n }\r\n\r\n return createTxError(\r\n 'SOL_DYNAMIC_SEND_FAILED',\r\n 'Dynamic Solana transaction failed to send. Please try again later',\r\n error\r\n )\r\n },\r\n [createTxError]\r\n )\r\n\r\n const extractSignature = useCallback(\r\n (result: unknown): string => {\r\n if (typeof result === 'string' && result.length > 0) {\r\n return result\r\n }\r\n\r\n if (result && typeof result === 'object') {\r\n const candidate = result as {\r\n signature?: unknown\r\n txid?: unknown\r\n hash?: unknown\r\n }\r\n\r\n if (\r\n typeof candidate.signature === 'string' &&\r\n candidate.signature.length > 0\r\n ) {\r\n return candidate.signature\r\n }\r\n\r\n if (typeof candidate.txid === 'string' && candidate.txid.length > 0) {\r\n return candidate.txid\r\n }\r\n\r\n if (typeof candidate.hash === 'string' && candidate.hash.length > 0) {\r\n return candidate.hash\r\n }\r\n }\r\n\r\n throw createTxError(\r\n 'SOL_DYNAMIC_INVALID_SIGNATURE',\r\n 'Dynamic returned an invalid transaction signature format'\r\n )\r\n },\r\n [createTxError]\r\n )\r\n\r\n const connectedDynamicSolanaWallet = useMemo(() => {\r\n return userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as unknown as DynamicSolanaWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as (DynamicSolanaWalletLike & { connector?: unknown }) | undefined\r\n }, [userWallets])\r\n\r\n const extractAddressFromUnknown = useCallback(\r\n (value: unknown): string | null => {\r\n if (!value) return null\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n return trimmed.length > 0 ? trimmed : null\r\n }\r\n\r\n if (value instanceof PublicKey) {\r\n return value.toBase58()\r\n }\r\n\r\n if (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'toBase58' in value &&\r\n typeof (value as { toBase58?: unknown }).toBase58 === 'function'\r\n ) {\r\n try {\r\n const parsed = (value as { toBase58: () => string }).toBase58()\r\n return parsed.length > 0 ? parsed : null\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return null\r\n },\r\n []\r\n )\r\n\r\n const resolveDynamicWalletAddress = useCallback(() => {\r\n return (\r\n extractAddressFromUnknown(connectedDynamicSolanaWallet?.address) ||\r\n extractAddressFromUnknown(connectedDynamicSolanaWallet?.publicKey) ||\r\n extractAddressFromUnknown(\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.address\r\n ) ||\r\n extractAddressFromUnknown(\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.publicKey\r\n )\r\n )\r\n }, [connectedDynamicSolanaWallet, primaryWallet, extractAddressFromUnknown])\r\n\r\n type RuntimeSnapshot = {\r\n walletAddress: string | null\r\n dynamicWalletAddress: string | null\r\n }\r\n\r\n const takeRuntimeSnapshot = useCallback((): RuntimeSnapshot => {\r\n return {\r\n walletAddress: effectivePublicKey?.toBase58() ?? null,\r\n dynamicWalletAddress: resolveDynamicWalletAddress()\r\n }\r\n }, [\r\n effectivePublicKey,\r\n resolveDynamicWalletAddress\r\n ])\r\n\r\n const assertSnapshotConsistent = useCallback(\r\n (baseline: RuntimeSnapshot, phase: string) => {\r\n const current = takeRuntimeSnapshot()\r\n const walletChanged = baseline.walletAddress !== current.walletAddress\r\n const dynamicWalletChanged =\r\n baseline.dynamicWalletAddress !== current.dynamicWalletAddress\r\n\r\n if (walletChanged || dynamicWalletChanged) {\r\n throw createTxError(\r\n 'SOL_RUNTIME_CONTEXT_CHANGED',\r\n `Wallet or network context changed during ${phase}. Please retry`\r\n )\r\n }\r\n },\r\n [createTxError, takeRuntimeSnapshot]\r\n )\r\n\r\n const getDynamicSolanaSigner = useCallback(async () => {\r\n if (dynamicSignerRef.current) {\r\n return dynamicSignerRef.current\r\n }\r\n\r\n const connectorCandidates = [\r\n connectedDynamicSolanaWallet?.connector,\r\n connectedDynamicSolanaWallet?.walletConnector,\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.connector,\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)\r\n ?.walletConnector\r\n ]\r\n\r\n for (const candidate of connectorCandidates) {\r\n if (!candidate) continue\r\n\r\n const candidateWithSigner = candidate as DynamicSolanaSigner & {\r\n getSigner?: () => Promise<unknown>\r\n }\r\n\r\n if (\r\n typeof candidateWithSigner.signAndSendTransaction === 'function' ||\r\n typeof candidateWithSigner.signTransaction === 'function'\r\n ) {\r\n dynamicSignerRef.current = candidateWithSigner\r\n return candidateWithSigner\r\n }\r\n\r\n if (typeof candidateWithSigner.getSigner === 'function') {\r\n const signer = (await Promise.race([\r\n candidateWithSigner.getSigner(),\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), 1500)\r\n })\r\n ])) as DynamicSolanaSigner | undefined\r\n\r\n if (\r\n signer &&\r\n (typeof signer.signAndSendTransaction === 'function' ||\r\n typeof signer.signTransaction === 'function')\r\n ) {\r\n dynamicSignerRef.current = signer\r\n return signer\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }, [connectedDynamicSolanaWallet, primaryWallet])\r\n\r\n const resolveSignerAddress = useCallback(\r\n async (signer: DynamicSolanaSigner): Promise<string | null> => {\r\n const fromPublicKey = extractAddressFromUnknown(signer.publicKey)\r\n if (fromPublicKey) return fromPublicKey\r\n\r\n const fromAddress = extractAddressFromUnknown(signer.address)\r\n if (fromAddress) return fromAddress\r\n\r\n if (typeof signer.getAddress === 'function') {\r\n try {\r\n const maybeAddress = await Promise.race([\r\n signer.getAddress(),\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), 400)\r\n })\r\n ])\r\n return extractAddressFromUnknown(maybeAddress)\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return null\r\n },\r\n [extractAddressFromUnknown]\r\n )\r\n\r\n const assertSignerMatchesWallet = useCallback(\r\n async (signer: DynamicSolanaSigner, walletAddress: string) => {\r\n const signerAddress = await resolveSignerAddress(signer)\r\n if (!signerAddress) return\r\n\r\n if (signerAddress !== walletAddress) {\r\n throw createTxError(\r\n 'SOL_RUNTIME_CONTEXT_CHANGED',\r\n 'Dynamic signer account does not match the connected wallet'\r\n )\r\n }\r\n },\r\n [createTxError, resolveSignerAddress]\r\n )\r\n\r\n useEffect(() => {\r\n dynamicSignerRef.current = null\r\n }, [connectedDynamicSolanaWallet, primaryWallet, solanaWalletAddress])\r\n\r\n useEffect(() => {\r\n if (!effectivePublicKey || !connectedDynamicSolanaWallet) return\r\n\r\n void getDynamicSolanaSigner().catch(() => undefined)\r\n }, [effectivePublicKey, connectedDynamicSolanaWallet, getDynamicSolanaSigner])\r\n\r\n const validateWallet = useCallback((): { valid: boolean; error?: Error } => {\r\n if (!effectivePublicKey) {\r\n return {\r\n valid: false,\r\n error: createTxError(\r\n 'SOL_WALLET_NOT_CONNECTED',\r\n 'Please connect a Solana wallet first'\r\n )\r\n }\r\n }\r\n if (!connection) {\r\n return {\r\n valid: false,\r\n error: createTxError(\r\n 'SOL_NETWORK_UNAVAILABLE',\r\n 'Solana network connection is unavailable'\r\n )\r\n }\r\n }\r\n\r\n return { valid: true }\r\n }, [effectivePublicKey, connection, createTxError])\r\n\r\n /**\r\n * Parse transaction - supports full VersionedTransaction (from res.tx.tx)\r\n * Priority: Try to parse as complete VersionedTransaction, then VersionedMessage, finally Legacy\r\n */\r\n const parseTransaction = useCallback(\r\n (message: string, walletAddress: string) => {\r\n const messageBuffer = Buffer.from(message, 'base64')\r\n\r\n // Priority: Parse complete VersionedTransaction (from backend's tx field)\r\n try {\r\n const transaction = VersionedTransaction.deserialize(messageBuffer)\r\n\r\n // If transaction contains signatures, check if signatures are valid\r\n if (transaction.signatures.length > 0) {\r\n const hasValidSignatures = transaction.signatures.some((sig) => {\r\n if (!sig || sig.length === 0) return false\r\n const allZeros = sig.every((byte) => byte === 0)\r\n const allOnes = sig.every((byte) => byte === 1)\r\n if (allZeros || allOnes) return false\r\n return true\r\n })\r\n\r\n if (hasValidSignatures) {\r\n return {\r\n transaction,\r\n type: 'versioned' as const,\r\n isPresigned: true\r\n }\r\n }\r\n }\r\n\r\n return { transaction, type: 'versioned' as const, isPresigned: false }\r\n } catch {\r\n // Ignore parsing error, try next method\r\n }\r\n\r\n // Alternative: Parse VersionedMessage (from old API)\r\n try {\r\n const versionedMessage = VersionedMessage.deserialize(messageBuffer)\r\n const transaction = new VersionedTransaction(versionedMessage)\r\n return { transaction, type: 'versioned' as const }\r\n } catch {\r\n // Ignore parsing error, try next method\r\n }\r\n\r\n // Final attempt: Legacy Transaction\r\n try {\r\n const legacyTx = Transaction.from(messageBuffer)\r\n legacyTx.feePayer = new PublicKey(walletAddress)\r\n return {\r\n transaction: legacyTx,\r\n type: 'legacy' as const,\r\n isPresigned: false\r\n }\r\n } catch (_legacyError) {\r\n throw new Error('Invalid transaction message format,' + _legacyError)\r\n }\r\n },\r\n []\r\n )\r\n\r\n /**\r\n * Wait for transaction confirmation\r\n */\r\n const confirmTransaction = useCallback(\r\n async (\r\n signature: string,\r\n commitment: 'confirmed' | 'finalized' = 'confirmed'\r\n ): Promise<boolean> => {\r\n if (!connection) throw new Error('Connection not available')\r\n\r\n const isTransientRpcError = (error: unknown) => {\r\n const message =\r\n error instanceof Error\r\n ? `${error.name}: ${error.message}`.toLowerCase()\r\n : typeof error === 'string'\r\n ? error.toLowerCase()\r\n : ''\r\n\r\n return (\r\n message.includes('failed to fetch') ||\r\n message.includes('network request failed') ||\r\n message.includes('fetcherror') ||\r\n message.includes('timeout') ||\r\n message.includes('503')\r\n )\r\n }\r\n\r\n try {\r\n const response = await connection.getSignatureStatus(signature)\r\n\r\n if (!response || !response.value) {\r\n return false\r\n }\r\n\r\n const status = response.value\r\n\r\n if (status?.err) {\r\n throw new Error(`Transaction failed: ${JSON.stringify(status.err)}`)\r\n }\r\n\r\n if (\r\n status?.confirmationStatus === commitment ||\r\n status?.confirmationStatus === 'finalized'\r\n ) {\r\n return true\r\n }\r\n } catch (error) {\r\n if (!isTransientRpcError(error)) {\r\n throw error\r\n }\r\n }\r\n\r\n // Poll for transaction confirmation\r\n return new Promise((resolve) => {\r\n const interval = setInterval(async () => {\r\n try {\r\n const pollResponse = await connection.getSignatureStatus(signature)\r\n\r\n if (!pollResponse || !pollResponse.value) {\r\n return\r\n }\r\n\r\n const newStatus = pollResponse.value\r\n\r\n if (newStatus?.err) {\r\n clearInterval(interval)\r\n resolve(false)\r\n return\r\n }\r\n\r\n if (\r\n newStatus?.confirmationStatus === commitment ||\r\n newStatus?.confirmationStatus === 'finalized'\r\n ) {\r\n clearInterval(interval)\r\n resolve(true)\r\n }\r\n } catch {\r\n // Polling errors do not immediately reject, continue waiting\r\n }\r\n }, 1000)\r\n\r\n setTimeout(() => {\r\n clearInterval(interval)\r\n resolve(false)\r\n }, 60000)\r\n })\r\n },\r\n [connection]\r\n )\r\n\r\n const executeTransaction = useCallback(\r\n async (options: SendSolanaTransactionOptions) => {\r\n const {\r\n txMessage,\r\n txSender,\r\n waitForConfirmation = true,\r\n onSuccess,\r\n onError\r\n } = options\r\n\r\n const validation = validateWallet()\r\n if (!validation.valid) {\r\n const error = validation.error!\r\n setState((prev) => ({\r\n ...prev,\r\n error: error.message,\r\n isLoading: false\r\n }))\r\n onError?.(error)\r\n throw error\r\n }\r\n\r\n const walletAddress = effectivePublicKey!.toBase58()\r\n const senderAddress = txSender || walletAddress\r\n const txStartAt = Date.now()\r\n const runtimeSnapshot = takeRuntimeSnapshot()\r\n const activeConnection = connection\r\n\r\n if (!activeConnection) {\r\n throw createTxError(\r\n 'SOL_NETWORK_UNAVAILABLE',\r\n 'Solana network connection is unavailable'\r\n )\r\n }\r\n\r\n\r\n try {\r\n setState((prev) => ({ ...prev, isLoading: true, error: null }))\r\n assertSnapshotConsistent(runtimeSnapshot, 'pre-send validation')\r\n\r\n let transaction: Transaction | VersionedTransaction\r\n\r\n if (txMessage) {\r\n const parsed = parseTransaction(txMessage, senderAddress)\r\n transaction = parsed.transaction\r\n\r\n // Save whether pre-signed\r\n const isPresigned = (\r\n parsed as typeof parsed & { isPresigned?: boolean }\r\n ).isPresigned\r\n ;(\r\n transaction as VersionedTransaction & { isPresigned?: boolean }\r\n ).isPresigned = isPresigned\r\n } else {\r\n throw createTxError(\r\n 'SOL_TX_PARAMS_INVALID',\r\n 'Please provide a transaction message or transfer parameters'\r\n )\r\n }\r\n\r\n let signature: string\r\n\r\n const sendViaDynamic = async (\r\n tx: Transaction | VersionedTransaction\r\n ): Promise<string> => {\r\n assertSnapshotConsistent(runtimeSnapshot, 'dynamic signer resolve')\r\n const dynamicSigner = await getDynamicSolanaSigner()\r\n\r\n if (!dynamicSigner) {\r\n throw createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'No available Dynamic Solana signer found. Please reconnect your Solana wallet'\r\n )\r\n }\r\n\r\n await assertSignerMatchesWallet(dynamicSigner, walletAddress)\r\n assertSnapshotConsistent(runtimeSnapshot, 'wallet signature request')\r\n\r\n try {\r\n if (typeof dynamicSigner.signAndSendTransaction === 'function') {\r\n const sendResult = await dynamicSigner.signAndSendTransaction(\r\n tx,\r\n {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n }\r\n )\r\n const resolvedSignature = extractSignature(sendResult)\r\n return resolvedSignature\r\n }\r\n\r\n if (typeof dynamicSigner.signTransaction === 'function') {\r\n const signedTx = await dynamicSigner.signTransaction(tx)\r\n const sendSignature =\r\n signedTx instanceof VersionedTransaction\r\n ? await activeConnection.sendRawTransaction(\r\n signedTx.serialize(),\r\n {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n }\r\n )\r\n : await activeConnection.sendRawTransaction(\r\n (signedTx as Transaction).serialize(),\r\n { skipPreflight: true, maxRetries: 3 }\r\n )\r\n\r\n\r\n return sendSignature\r\n }\r\n\r\n throw createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'Dynamic Solana signer does not support transaction signing interfaces'\r\n )\r\n } catch (error) {\r\n throw mapDynamicSignerError(error)\r\n }\r\n }\r\n\r\n if (transaction instanceof VersionedTransaction) {\r\n const isPresigned =\r\n (transaction as VersionedTransaction & { isPresigned?: boolean })\r\n .isPresigned === true\r\n\r\n if (isPresigned && transaction.signatures.length > 0) {\r\n signature = await activeConnection.sendTransaction(transaction, {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n })\r\n\r\n } else {\r\n signature = await sendViaDynamic(transaction)\r\n }\r\n } else {\r\n signature = await sendViaDynamic(transaction)\r\n }\r\n\r\n assertSnapshotConsistent(runtimeSnapshot, 'transaction submission')\r\n\r\n logger.info('[SolanaTx] submitted', {\r\n signature,\r\n submitDurationMs: Date.now() - txStartAt\r\n })\r\n\r\n let isConfirmed = false\r\n if (waitForConfirmation) {\r\n const confirmStartAt = Date.now()\r\n isConfirmed = await confirmTransaction(signature)\r\n logger.info('[SolanaTx] confirmation finished', {\r\n signature,\r\n isConfirmed,\r\n confirmDurationMs: Date.now() - confirmStartAt\r\n })\r\n }\r\n\r\n assertSnapshotConsistent(runtimeSnapshot, 'post-confirmation')\r\n\r\n setState({\r\n isLoading: false,\r\n signature,\r\n error: null,\r\n isConfirmed\r\n })\r\n\r\n onSuccess?.(signature)\r\n\r\n return { signature, isConfirmed }\r\n } catch (error: unknown) {\r\n const err =\r\n error instanceof Error &&\r\n 'code' in error &&\r\n typeof (error as { code?: unknown }).code === 'string'\r\n ? (error as SolanaTransactionError)\r\n : createTxError(\r\n 'SOL_TX_EXECUTE_FAILED',\r\n error instanceof Error\r\n ? error.message\r\n : typeof error === 'string'\r\n ? error\r\n : 'Solana transaction execution failed',\r\n error\r\n )\r\n\r\n logger.error('[SolanaTx] execute failed', {\r\n durationMs: Date.now() - txStartAt,\r\n code: err.code,\r\n message: err.message,\r\n cause: err.cause\r\n })\r\n\r\n setState((prev) => ({\r\n ...prev,\r\n isLoading: false,\r\n error: err.message\r\n }))\r\n onError?.(err)\r\n throw err\r\n }\r\n },\r\n [\r\n connection,\r\n createTxError,\r\n effectivePublicKey,\r\n validateWallet,\r\n parseTransaction,\r\n confirmTransaction,\r\n getDynamicSolanaSigner,\r\n extractSignature,\r\n mapDynamicSignerError,\r\n takeRuntimeSnapshot,\r\n assertSnapshotConsistent,\r\n assertSignerMatchesWallet\r\n ]\r\n )\r\n\r\n const sendFromQuote = useCallback(\r\n async (\r\n txMessage: string,\r\n txSender?: string,\r\n options?: {\r\n waitForConfirmation?: boolean\r\n onSuccess?: (signature: string) => void\r\n onError?: (error: Error) => void\r\n }\r\n ) => {\r\n return executeTransaction({\r\n txMessage,\r\n txSender,\r\n waitForConfirmation: options?.waitForConfirmation ?? true,\r\n onSuccess: options?.onSuccess,\r\n onError: options?.onError\r\n })\r\n },\r\n [executeTransaction]\r\n )\r\n\r\n const resetState = useCallback(() => {\r\n setState({\r\n isLoading: false,\r\n signature: null,\r\n error: null,\r\n isConfirmed: false\r\n })\r\n }, [])\r\n\r\n return {\r\n sendTransaction: executeTransaction,\r\n sendFromQuote,\r\n state,\r\n isConnected: !!effectivePublicKey,\r\n walletAddress: effectivePublicKey?.toBase58() || null,\r\n validateWallet,\r\n resetState,\r\n connection\r\n }\r\n}\r\n","import { useState, useEffect } from 'react'\nimport { useWaitForTransactionReceipt } from 'wagmi'\n\ninterface RpcError {\n name?: string | undefined\n message?: string\n code?: string | number\n}\n\nexport function useRetryAbleTransactionReceipt(\n hash: `0x${string}` | undefined,\n chain_id: number,\n maxRetries = 6\n) {\n const [retryCount, setRetryCount] = useState(0)\n const [shouldRetry, setShouldRetry] = useState(false)\n const [lastError, setLastError] = useState<RpcError | null>(null)\n\n const result = useWaitForTransactionReceipt({\n hash: hash || undefined,\n chainId: chain_id\n })\n\n useEffect(() => {\n // Check if it's an RPC error or other retryable error\n if (result.isError) {\n const error = result.error as RpcError\n setLastError(error)\n\n // Check if error type is RPC error or network error\n const isRpcError =\n error?.name === 'UnknownRpcError' ||\n error?.message?.includes('RPC endpoint') ||\n error?.message?.includes('HTTP client error') ||\n error?.code === 'NETWORK_ERROR' ||\n error?.code === 'TIMEOUT'\n\n // Check if it's user rejected error, such errors should not be retried\n const isUserRejected =\n error?.code === 4001 ||\n error?.message?.includes('user rejected') ||\n error?.message?.includes('rejected the transaction')\n\n // Max retries not reached and it's a retryable error\n if (retryCount < maxRetries && isRpcError && !isUserRejected) {\n console.warn(\n `RPC error detected, preparing retry ${retryCount + 1}/${maxRetries}...`,\n error.message\n )\n\n const delay = 1000 * Math.pow(2, retryCount) // Exponential backoff: 1s, 2s, 4s...\n const timer = setTimeout(() => {\n setRetryCount((prev) => prev + 1)\n setShouldRetry((prev) => !prev) // Trigger retry\n }, delay)\n\n return () => clearTimeout(timer)\n } else if (retryCount >= maxRetries) {\n console.log(\n `Failed to get transaction receipt, max retry count reached (${maxRetries} times)`,\n error\n )\n } else if (isUserRejected) {\n console.log('User rejected transaction, no retry', error)\n }\n }\n }, [result.isError, result.error, retryCount, maxRetries])\n\n // Reset retry count on success\n useEffect(() => {\n if (result.isSuccess) {\n setRetryCount(0)\n setLastError(null)\n }\n }, [result.isSuccess])\n\n // Return directly if no hash\n if (!hash) {\n return {\n ...result,\n retryCount: 0,\n isMaxRetriesExceeded: false,\n lastError: null\n }\n }\n\n return {\n ...result,\n retryCount,\n shouldRetry,\n isMaxRetriesExceeded: result.isError && retryCount >= maxRetries,\n lastError\n }\n}\n","import type { ChainInfo, FeeLevel, SlippagePolicy, TokenInfo } from '../../api/useChainsAndTokens'\r\n\r\nexport const DEFAULT_AUTO_REFETCH_INTERVAL = 30\r\n\r\nexport const nullAddress = '0x0000000000000000000000000000000000000000'\r\n\r\n/**\r\n * ========== ETH-to-ETH Bridge Config ==========\r\n * Values in basis points (bips, 1 = 0.01%)\r\n */\r\n/** ETH-to-ETH cross-chain bridge slippage (bips, 0 = let API decide) */\r\nexport const ETH_TO_ETH_BRIDGE_SLIPPAGE = 0\r\nexport const ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL = 15\r\n\r\nexport const isETHtoETHBridge = (\r\n fromToken: TokenInfo,\r\n toToken: TokenInfo,\r\n chains: ChainInfo[] | null\r\n): boolean => {\r\n if (!chains) return false\r\n\r\n const fromChain = chains.find((c) => c.chain_id === fromToken.chain_id)\r\n const toChain = chains.find((c) => c.chain_id === toToken.chain_id)\r\n\r\n if (!fromChain || !toChain) return false\r\n\r\n const fromIsEth = fromToken.address.toLowerCase() === fromChain.eth_token.toLowerCase()\r\n const toIsEth = toToken.address.toLowerCase() === toChain.eth_token.toLowerCase()\r\n const isDifferentChain = fromToken.chain_id !== toToken.chain_id\r\n\r\n return fromIsEth && toIsEth && isDifferentChain\r\n}\r\n\r\n/**\r\n * ========== Stablecoin Config ==========\r\n */\r\n\r\n/** Stablecoin vs Stablecoin - Same-chain Swap default slippage (bips, 10 = 0.1%) */\r\nexport const STABLECOIN_SAME_CHAIN_SLIPPAGE = 10\r\n\r\n/** Stablecoin vs Stablecoin - Cross-chain Swap default slippage (bips, 50 = 0.5%) */\r\nexport const STABLECOIN_CROSS_CHAIN_SLIPPAGE = 50\r\n\r\n/** Stablecoin pair quote polling interval (seconds), 30s when both are stablecoins */\r\nexport const STABLECOIN_REFRESH_INTERVAL = 30\r\n\r\n/**\r\n * Check if a token is a stablecoin (based on categories field from API)\r\n */\r\nexport function isStablecoin(tokenInfo: TokenInfo | undefined | null): boolean {\r\n if (!tokenInfo?.categories) return false\r\n return tokenInfo.categories.includes('stablecoin')\r\n}\r\n\r\n/**\r\n * Get stablecoin-specific config (returns config only when both tokens are stablecoins).\r\n * If either is not a stablecoin, returns null to fall through to fee_level slippage_policies logic.\r\n */\r\nexport function getStablecoinAdjustment(\r\n fromTokenInfo: TokenInfo | undefined | null,\r\n toTokenInfo: TokenInfo | undefined | null,\r\n isBridge: boolean\r\n): { slippage: number; refreshInterval: number } | null {\r\n if (!fromTokenInfo || !toTokenInfo) return null\r\n\r\n // Both must be stablecoins\r\n if (!isStablecoin(fromTokenInfo) || !isStablecoin(toTokenInfo)) {\r\n return null\r\n }\r\n\r\n // Both stablecoins: same-chain 0.1%, cross-chain 0.5%, refresh 30s\r\n return {\r\n slippage: isBridge\r\n ? STABLECOIN_CROSS_CHAIN_SLIPPAGE\r\n : STABLECOIN_SAME_CHAIN_SLIPPAGE,\r\n refreshInterval: STABLECOIN_REFRESH_INTERVAL\r\n }\r\n}\r\n\r\n/**\r\n * Match slippage_policy by bridge, from_fee_level, and to_fee_level.\r\n */\r\nexport function matchSlippagePolicy(\r\n policies: SlippagePolicy[] | null,\r\n isBridge: boolean,\r\n fromFeeLevel: FeeLevel,\r\n toFeeLevel: FeeLevel\r\n): SlippagePolicy | null {\r\n if (!policies || policies.length === 0) return null\r\n\r\n return (\r\n policies.find(\r\n (p) =>\r\n p.bridge === isBridge &&\r\n p.from_fee_level === fromFeeLevel &&\r\n p.to_fee_level === toFeeLevel\r\n ) || null\r\n )\r\n}\r\n\r\n/**\r\n * Get the refresh interval (seconds) from the matched policy, default 30s.\r\n */\r\nexport function getRefreshInterval(\r\n policy: SlippagePolicy | null\r\n): number {\r\n return policy?.refresh_interval ?? 30\r\n}\r\n\r\n/**\r\n * Get the default slippage (bips) from the matched policy.\r\n * Fallback values: same-chain swap=100, cross-chain swap=200.\r\n */\r\nexport function getDefaultSlippage(\r\n policy: SlippagePolicy | null,\r\n isBridge: boolean,\r\n isSameChain: boolean\r\n): number {\r\n if (policy) return policy.default_slippage\r\n\r\n // Fallback: keep old hardcoded values for compatibility\r\n if (!isBridge && isSameChain) return 100 // swapAutoSlippage\r\n if (isBridge) return 200 // crossChainSwapAutoSlippage (bridge=true)\r\n return 0 // bridgeAutoSlippage - should rarely hit this\r\n}\r\n\r\nexport const hyperliquidChainId = 998\r\n","import { Fraction } from 'bi-fraction'\n\nexport const calculateSlippage = (slippage?: string) => {\n if (!slippage) return\n // console.log('--------######slippage######------:', slippage)\n const slippageFraction = new Fraction(slippage)\n\n if (slippageFraction.eq(0)) return\n return Number(slippageFraction.mul(100).toFixed(0))\n}\n\nexport const formatSlippage = (slippage: number) => {\n return new Fraction(slippage).div(100).toFixed(2)\n}\n","export function debounce<T extends (...args: unknown[]) => void>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null\n\n return (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout)\n timeout = setTimeout(() => {\n func(...args)\n }, wait)\n }\n}\n","interface SaveDayItem { name: string; chainId: number; day: number }\n\nexport const saveDay: SaveDayItem[] = [\n { name: 'Blast', chainId: 81457, day: 8 },\n { name: 'Bob', chainId: 60808, day: 5 },\n { name: 'Celo', chainId: 42220, day: 7 },\n { name: 'Gravity', chainId: 1625, day: 7 },\n { name: 'Hashkey Chain', chainId: 177, day: 7 },\n { name: 'Ink', chainId: 57073, day: 7 },\n { name: 'Lisk', chainId: 1135, day: 7 },\n { name: 'Mode', chainId: 34443, day: 7 },\n { name: 'opBNB', chainId: 204, day: 7 },\n { name: 'RARI', chainId: 1380012617, day: 8 },\n { name: 'Unichain', chainId: 130, day: 7 },\n { name: 'Worldchain', chainId: 480, day: 7 },\n { name: 'Zora', chainId: 7777777, day: 7 }\n]\n\nexport const lottery_from_chains: number[] = [1868, 56, 8453, 57073, 130, 999, 42161, 196, 59144, 1101]\n","import type {\n Account,\n Chain,\n Client,\n PublicActions,\n RpcSchema,\n Transport,\n WalletActions,\n} from 'viem'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n transport extends Transport,\n chain extends Chain | undefined,\n account extends Account | undefined,\n rpcSchema extends RpcSchema | undefined,\n extended extends { [key: string]: unknown },\n client extends Client<transport, chain, account, rpcSchema, extended>,\n parameters,\n returnType,\n>(\n client: client,\n actionFn: (_: any, parameters: parameters) => returnType,\n // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n // meaning that `actionFn.name` will not always work. For that case, the consumer\n // needs to pass the name explicitly.\n name: keyof PublicActions | keyof WalletActions,\n): (parameters: parameters) => returnType {\n const action_implicit = client[actionFn.name]\n if (typeof action_implicit === 'function')\n return action_implicit as (params: parameters) => returnType\n\n const action_explicit = client[name]\n if (typeof action_explicit === 'function')\n return action_explicit as (params: parameters) => returnType\n\n return (params) => actionFn(client, params)\n}\n","export const version = '2.22.1'\n","import { version } from '../version.js'\n\nexport const getVersion = () => `@wagmi/core@${version}`\n","import type { Compute, OneOf } from '../types/utils.js'\nimport { getVersion } from '../utils/getVersion.js'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\ntype BaseErrorOptions = Compute<\n OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n }\n>\n\nexport type BaseErrorType = BaseError & { name: 'WagmiCoreError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n\n override name = 'WagmiCoreError'\n get docsBaseUrl() {\n return 'https://wagmi.sh/core'\n }\n get version() {\n return getVersion()\n }\n\n constructor(shortMessage: string, options: BaseErrorOptions = {}) {\n super()\n\n const details =\n options.cause instanceof BaseError\n ? options.cause.details\n : options.cause?.message\n ? options.cause.message\n : options.details!\n const docsPath =\n options.cause instanceof BaseError\n ? options.cause.docsPath || options.docsPath\n : options.docsPath\n\n this.message = [\n shortMessage || 'An error occurred.',\n '',\n ...(options.metaMessages ? [...options.metaMessages, ''] : []),\n ...(docsPath\n ? [\n `Docs: ${this.docsBaseUrl}${docsPath}.html${\n options.docsSlug ? `#${options.docsSlug}` : ''\n }`,\n ]\n : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: ${this.version}`,\n ].join('\\n')\n\n if (options.cause) this.cause = options.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = options.metaMessages\n this.shortMessage = shortMessage\n }\n\n walk(fn?: (err: unknown) => boolean) {\n return this.#walk(this, fn)\n }\n\n #walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if ((err as Error).cause) return this.#walk((err as Error).cause, fn)\n return err\n }\n}\n","import type { Address } from 'viem'\n\nimport type { Connector } from '../createConfig.js'\nimport { BaseError } from './base.js'\n\nexport type ChainNotConfiguredErrorType = ChainNotConfiguredError & {\n name: 'ChainNotConfiguredError'\n}\nexport class ChainNotConfiguredError extends BaseError {\n override name = 'ChainNotConfiguredError'\n constructor() {\n super('Chain not configured.')\n }\n}\n\nexport type ConnectorAlreadyConnectedErrorType =\n ConnectorAlreadyConnectedError & {\n name: 'ConnectorAlreadyConnectedError'\n }\nexport class ConnectorAlreadyConnectedError extends BaseError {\n override name = 'ConnectorAlreadyConnectedError'\n constructor() {\n super('Connector already connected.')\n }\n}\n\nexport type ConnectorNotConnectedErrorType = ConnectorNotConnectedError & {\n name: 'ConnectorNotConnectedError'\n}\nexport class ConnectorNotConnectedError extends BaseError {\n override name = 'ConnectorNotConnectedError'\n constructor() {\n super('Connector not connected.')\n }\n}\n\nexport type ConnectorNotFoundErrorType = ConnectorNotFoundError & {\n name: 'ConnectorNotFoundError'\n}\nexport class ConnectorNotFoundError extends BaseError {\n override name = 'ConnectorNotFoundError'\n constructor() {\n super('Connector not found.')\n }\n}\n\nexport type ConnectorAccountNotFoundErrorType =\n ConnectorAccountNotFoundError & {\n name: 'ConnectorAccountNotFoundError'\n }\nexport class ConnectorAccountNotFoundError extends BaseError {\n override name = 'ConnectorAccountNotFoundError'\n constructor({\n address,\n connector,\n }: {\n address: Address\n connector: Connector\n }) {\n super(`Account \"${address}\" not found for connector \"${connector.name}\".`)\n }\n}\n\nexport type ConnectorChainMismatchErrorType = ConnectorAccountNotFoundError & {\n name: 'ConnectorChainMismatchError'\n}\nexport class ConnectorChainMismatchError extends BaseError {\n override name = 'ConnectorChainMismatchError'\n constructor({\n connectionChainId,\n connectorChainId,\n }: {\n connectionChainId: number\n connectorChainId: number\n }) {\n super(\n `The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`,\n {\n metaMessages: [\n `Current Chain ID: ${connectorChainId}`,\n `Expected Chain ID: ${connectionChainId}`,\n ],\n },\n )\n }\n}\n\nexport type ConnectorUnavailableReconnectingErrorType =\n ConnectorUnavailableReconnectingError & {\n name: 'ConnectorUnavailableReconnectingError'\n }\nexport class ConnectorUnavailableReconnectingError extends BaseError {\n override name = 'ConnectorUnavailableReconnectingError'\n constructor({ connector }: { connector: { name: string } }) {\n super(`Connector \"${connector.name}\" unavailable while reconnecting.`, {\n details: [\n 'During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.',\n 'All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.',\n 'This error commonly occurs for connectors that asynchronously inject after reconnection has already started.',\n ].join(' '),\n })\n }\n}\n","import {\n type Account,\n type Address,\n type BaseErrorType,\n type Client,\n createClient,\n custom,\n} from 'viem'\nimport { getAddress, parseAccount } from 'viem/utils'\n\nimport type { Config, Connection } from '../createConfig.js'\nimport type { ErrorType } from '../errors/base.js'\nimport {\n ConnectorAccountNotFoundError,\n type ConnectorAccountNotFoundErrorType,\n ConnectorChainMismatchError,\n type ConnectorChainMismatchErrorType,\n ConnectorNotConnectedError,\n type ConnectorNotConnectedErrorType,\n ConnectorUnavailableReconnectingError,\n type ConnectorUnavailableReconnectingErrorType,\n} from '../errors/config.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute } from '../types/utils.js'\n\nexport type GetConnectorClientParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n ChainIdParameter<config, chainId> &\n ConnectorParameter & {\n /**\n * Account to use for the client.\n *\n * - `Account | Address`: An Account MUST exist on the connector.\n * - `null`: Account MAY NOT exist on the connector. This is useful for\n * actions that can infer the account from the connector (e.g. sending a\n * call without a connected account – the user will be prompted to select\n * an account within the wallet).\n */\n account?: Address | Account | null | undefined\n /**\n * Assert that the current chain ID matches the connector's chain ID.\n */\n assertChainId?: boolean | undefined\n }\n>\n\nexport type GetConnectorClientReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n Client<\n config['_internal']['transports'][chainId],\n Extract<config['chains'][number], { id: chainId }>,\n Account\n >\n>\n\nexport type GetConnectorClientErrorType =\n | ConnectorAccountNotFoundErrorType\n | ConnectorChainMismatchErrorType\n | ConnectorNotConnectedErrorType\n | ConnectorUnavailableReconnectingErrorType\n // base\n | BaseErrorType\n | ErrorType\n\n/** https://wagmi.sh/core/api/actions/getConnectorClient */\nexport async function getConnectorClient<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: GetConnectorClientParameters<config, chainId> = {},\n): Promise<GetConnectorClientReturnType<config, chainId>> {\n const { assertChainId = true } = parameters\n\n // Get connection\n let connection: Connection | undefined\n if (parameters.connector) {\n const { connector } = parameters\n if (\n config.state.status === 'reconnecting' &&\n !connector.getAccounts &&\n !connector.getChainId\n )\n throw new ConnectorUnavailableReconnectingError({ connector })\n\n const [accounts, chainId] = await Promise.all([\n connector.getAccounts().catch((e) => {\n if (parameters.account === null) return []\n throw e\n }),\n connector.getChainId(),\n ])\n connection = {\n accounts: accounts as readonly [Address, ...Address[]],\n chainId,\n connector,\n }\n } else connection = config.state.connections.get(config.state.current!)\n if (!connection) throw new ConnectorNotConnectedError()\n\n const chainId = parameters.chainId ?? connection.chainId\n\n // Check connector using same chainId as connection\n const connectorChainId = await connection.connector.getChainId()\n if (assertChainId && connectorChainId !== chainId)\n throw new ConnectorChainMismatchError({\n connectionChainId: chainId,\n connectorChainId,\n })\n\n // If connector has custom `getClient` implementation\n type Return = GetConnectorClientReturnType<config, chainId>\n const connector = connection.connector\n if (connector.getClient)\n return connector.getClient({ chainId }) as unknown as Return\n\n // Default using `custom` transport\n const account = parseAccount(parameters.account ?? connection.accounts[0]!)\n if (account) account.address = getAddress(account.address) // TODO: Checksum address as part of `parseAccount`?\n\n // If account was provided, check that it exists on the connector\n if (\n parameters.account &&\n !connection.accounts.some(\n (x) => x.toLowerCase() === account.address.toLowerCase(),\n )\n )\n throw new ConnectorAccountNotFoundError({\n address: account.address,\n connector,\n })\n\n const chain = config.chains.find((chain) => chain.id === chainId)\n const provider = (await connection.connector.getProvider({ chainId })) as {\n request(...args: any): Promise<any>\n }\n\n return createClient({\n account,\n chain,\n name: 'Connector Client',\n transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }),\n }) as Return\n}\n","import type { Abi, ContractFunctionArgs, ContractFunctionName } from 'viem'\nimport {\n type ReadContractErrorType as viem_ReadContractErrorType,\n type ReadContractParameters as viem_ReadContractParameters,\n type ReadContractReturnType as viem_ReadContractReturnType,\n readContract as viem_readContract,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type ReadContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n config extends Config = Config,\n> = viem_ReadContractParameters<abi, functionName, args> &\n ChainIdParameter<config>\n\nexport type ReadContractReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = viem_ReadContractReturnType<abi, functionName, args>\n\nexport type ReadContractErrorType = viem_ReadContractErrorType\n\n/** https://wagmi.sh/core/api/actions/readContract */\nexport function readContract<\n config extends Config,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n config: config,\n parameters: ReadContractParameters<abi, functionName, args, config>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n const { chainId, ...rest } = parameters\n const client = config.getClient({ chainId })\n const action = getAction(client, viem_readContract, 'readContract')\n return action(rest as any)\n}\n","import type { Chain } from 'viem'\nimport { hexToString } from 'viem'\nimport {\n call,\n getTransaction,\n type WaitForTransactionReceiptErrorType as viem_WaitForTransactionReceiptErrorType,\n type WaitForTransactionReceiptParameters as viem_WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType as viem_WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt as viem_waitForTransactionReceipt,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { SelectChains } from '../types/chain.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport type { Compute, IsNarrowable } from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type WaitForTransactionReceiptParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n viem_WaitForTransactionReceiptParameters & ChainIdParameter<config, chainId>\n>\n\nexport type WaitForTransactionReceiptReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n ///\n chains extends readonly Chain[] = SelectChains<config, chainId>,\n> = Compute<\n {\n [key in keyof chains]: viem_WaitForTransactionReceiptReturnType<\n IsNarrowable<chains[key], Chain> extends true ? chains[key] : undefined\n > & { chainId: chains[key]['id'] }\n }[number]\n>\n\nexport type WaitForTransactionReceiptErrorType =\n viem_WaitForTransactionReceiptErrorType\n\nexport async function waitForTransactionReceipt<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: WaitForTransactionReceiptParameters<config, chainId>,\n): Promise<WaitForTransactionReceiptReturnType<config, chainId>> {\n const { chainId, timeout = 0, ...rest } = parameters\n\n const client = config.getClient({ chainId })\n const action = getAction(\n client,\n viem_waitForTransactionReceipt,\n 'waitForTransactionReceipt',\n )\n const receipt = await action({ ...rest, timeout })\n\n if (receipt.status === 'reverted') {\n const action_getTransaction = getAction(\n client,\n getTransaction,\n 'getTransaction',\n )\n const { from: account, ...txn } = await action_getTransaction({\n hash: receipt.transactionHash,\n })\n const action_call = getAction(client, call, 'call')\n const code = await action_call({\n ...(txn as any),\n account,\n data: txn.input,\n gasPrice: txn.type !== 'eip1559' ? txn.gasPrice : undefined,\n maxFeePerGas: txn.type === 'eip1559' ? txn.maxFeePerGas : undefined,\n maxPriorityFeePerGas:\n txn.type === 'eip1559' ? txn.maxPriorityFeePerGas : undefined,\n })\n const reason = code?.data\n ? hexToString(`0x${code.data.substring(138)}`)\n : 'unknown reason'\n throw new Error(reason)\n }\n\n return {\n ...receipt,\n chainId: client.chain.id,\n } as WaitForTransactionReceiptReturnType<config, chainId>\n}\n","import type {\n Abi,\n Account,\n Chain,\n Client,\n ContractFunctionArgs,\n ContractFunctionName,\n} from 'viem'\nimport {\n type WriteContractErrorType as viem_WriteContractErrorType,\n type WriteContractParameters as viem_WriteContractParameters,\n type WriteContractReturnType as viem_WriteContractReturnType,\n writeContract as viem_writeContract,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { BaseErrorType, ErrorType } from '../errors/base.js'\nimport type { SelectChains } from '../types/chain.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute, UnionCompute } from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\nimport {\n type GetConnectorClientErrorType,\n getConnectorClient,\n} from './getConnectorClient.js'\n\nexport type WriteContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n ///\n allFunctionNames = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n chains extends readonly Chain[] = SelectChains<config, chainId>,\n> = UnionCompute<\n {\n // TODO: Should use `UnionStrictOmit<..., 'chain'>` on `viem_WriteContractParameters` result instead\n // temp workaround that doesn't affect runtime behavior for https://github.com/wevm/wagmi/issues/3981\n [key in keyof chains]: viem_WriteContractParameters<\n abi,\n functionName,\n args,\n chains[key],\n Account,\n chains[key],\n allFunctionNames\n >\n }[number] &\n Compute<ChainIdParameter<config, chainId>> &\n ConnectorParameter & {\n /** @deprecated */\n __mode?: 'prepared'\n }\n>\n\nexport type WriteContractReturnType = viem_WriteContractReturnType\n\nexport type WriteContractErrorType =\n // getConnectorClient()\n | GetConnectorClientErrorType\n // base\n | BaseErrorType\n | ErrorType\n // viem\n | viem_WriteContractErrorType\n\n/** https://wagmi.sh/core/api/actions/writeContract */\nexport async function writeContract<\n config extends Config,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: WriteContractParameters<abi, functionName, args, config, chainId>,\n): Promise<WriteContractReturnType> {\n const { account, chainId, connector, ...request } = parameters\n\n let client: Client\n if (typeof account === 'object' && account?.type === 'local')\n client = config.getClient({ chainId })\n else\n client = await getConnectorClient(config, {\n account: account ?? undefined,\n assertChainId: false,\n chainId,\n connector,\n })\n\n const action = getAction(client, viem_writeContract, 'writeContract')\n const hash = await action({\n ...(request as any),\n ...(account ? { account } : {}),\n chain: chainId ? { id: chainId } : null,\n })\n\n return hash\n}\n","import {\r\n writeContract,\r\n waitForTransactionReceipt,\r\n readContract\r\n} from '@wagmi/core'\r\nimport { erc20Abi } from 'viem'\r\nimport { Config } from 'wagmi'\r\n\r\ninterface Props {\r\n chainId: number\r\n tokenAddress: `0x${string}`\r\n owner?: `0x${string}`\r\n spender?: `0x${string}`\r\n}\r\n\r\ninterface PropsWithAmount extends Props {\r\n amount: bigint\r\n}\r\n\r\nexport const getErc20Approval = (config: Config) => {\r\n const getAllowance = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender\r\n }: Props) => {\r\n if (!owner || !spender) {\r\n return BigInt(0)\r\n }\r\n const allowance = await readContract(config, {\r\n abi: erc20Abi,\r\n address: tokenAddress,\r\n functionName: 'allowance',\r\n chainId,\r\n args: [owner, spender]\r\n })\r\n return allowance\r\n }\r\n\r\n const isNeedApprove = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n }: PropsWithAmount) => {\r\n if (!owner || !spender || !tokenAddress) {\r\n return false\r\n }\r\n const allowance = await getAllowance({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender\r\n })\r\n return allowance < amount\r\n }\r\n\r\n const approve = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n }: PropsWithAmount) => {\r\n if (!owner || !spender || !tokenAddress) {\r\n return false\r\n }\r\n const tx = await writeContract(config, {\r\n abi: erc20Abi,\r\n address: tokenAddress,\r\n functionName: 'approve',\r\n chainId,\r\n args: [spender, amount]\r\n })\r\n const receipt = await waitForTransactionReceipt(config, {\r\n hash: tx,\r\n chainId\r\n })\r\n if (receipt.status === 'success') {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n return {\r\n getAllowance,\r\n isNeedApprove,\r\n approve\r\n }\r\n}\r\n","import { Fraction } from 'bi-fraction'\r\n\r\nexport {\r\n DEFAULT_AUTO_REFETCH_INTERVAL,\r\n nullAddress,\r\n ETH_TO_ETH_BRIDGE_SLIPPAGE,\r\n ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL,\r\n isETHtoETHBridge,\r\n getStablecoinAdjustment,\r\n matchSlippagePolicy,\r\n getDefaultSlippage,\r\n getRefreshInterval,\r\n hyperliquidChainId\r\n} from './consts'\r\nexport { calculateSlippage, formatSlippage } from './slippage'\r\nexport { debounce } from './debounce'\r\nexport { saveDay, lottery_from_chains } from './defaultData'\r\nexport { retry } from './retry'\r\nexport { getErc20Approval } from './getErc20Approval'\r\n\r\nimport type { TokenInfo, SlippagePolicy } from '../../api'\r\n\r\n// Stubs for exports used by component code\r\nexport const getOrderedTokensChainNormal = (tokens: any[]) => tokens\r\nexport const getOrderedTokensChainSearch = (tokens: any[]) => tokens\r\nexport const getOrderedTokensAssets = (tokens: any[]) => tokens\r\nexport const mergeAndDeduplicate = <T>(a: T[], b: T[], key: string = ''): T[] => [...a, ...b]\r\n\r\n/** Stablecoin vs Stablecoin - Same-chain warn slippage (bips, 5 = 0.05%) */\r\nconst STABLECOIN_SAME_CHAIN_WARN_SLIPPAGE = 5\r\n/** Stablecoin vs Stablecoin - Cross-chain warn slippage (bips, 20 = 0.2%) */\r\nconst STABLECOIN_CROSS_CHAIN_WARN_SLIPPAGE = 20\r\n/** High slippage warning threshold (bips, 300 = 3%) */\r\nexport const HIGH_SLIPPAGE_WARN_THRESHOLD = 300\r\n\r\n/** Check if a token is a stablecoin */\r\nexport function isStablecoin(tokenInfo: TokenInfo | undefined | null): boolean {\r\n if (!tokenInfo?.categories) return false\r\n return tokenInfo.categories.includes('stablecoin')\r\n}\r\n\r\n/**\r\n * Get the low slippage warning threshold (bips). Values below this trigger a warning.\r\n * Priority: ETH-to-ETH > stablecoin > fee_level policy > 0 (no warning)\r\n */\r\nexport function getLowSlippageWarnThreshold(\r\n fromTokenInfo: TokenInfo | undefined | null,\r\n toTokenInfo: TokenInfo | undefined | null,\r\n matchedPolicy: SlippagePolicy | null,\r\n isETHtoETH = false\r\n): number {\r\n if (!fromTokenInfo || !toTokenInfo) return 0\r\n if (isETHtoETH) return 0\r\n\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n\r\n if (isStablecoin(fromTokenInfo) && isStablecoin(toTokenInfo)) {\r\n return isBridge\r\n ? STABLECOIN_CROSS_CHAIN_WARN_SLIPPAGE\r\n : STABLECOIN_SAME_CHAIN_WARN_SLIPPAGE\r\n }\r\n\r\n if (matchedPolicy?.min_slippage !== undefined) {\r\n return matchedPolicy.min_slippage\r\n }\r\n\r\n return 0\r\n}\r\n\r\n// Re-export formatTokenAmount from src/utils\r\nexport { formatTokenAmount } from '../../utils'\r\n\r\nexport const formatDecimalNum = (val: string | number | undefined, fixed = 6) => {\r\n if (val === undefined || val === null || val === '') return ''\r\n const num = Number(val)\r\n if (isNaN(num)) return ''\r\n return num.toFixed(fixed).replace(/\\.?0+$/, '')\r\n}\r\n\r\nexport const formatSmallNumber = (val: string | number): string => {\r\n const num = Number(val)\r\n if (isNaN(num)) return '0'\r\n if (num === 0) return '0'\r\n if (num >= 0.000001) {\r\n return num.toFixed(6).replace(/\\.?0+$/, '')\r\n }\r\n return '<0.000001'\r\n}\r\n\r\nexport const toSubscriptNumber = (n: number): string => {\r\n const subscripts = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']\r\n return String(n)\r\n .split('')\r\n .map((d) => subscripts[Number(d)] || d)\r\n .join('')\r\n}\r\n\r\nexport const extractVPathSegment = (): string => {\r\n if (typeof window === 'undefined') return ''\r\n const pathname = window.location.pathname\r\n const match = pathname.match(/^\\/v\\/([a-zA-Z0-9-+]+)/)\r\n return match ? match[1] : ''\r\n}\r\n\r\nexport const isValueInArray = <T>(value: T, array: T[]): boolean => {\r\n return array.includes(value)\r\n}\r\n\r\nexport const toUSDCBigint = (value: string, decimals: number): bigint => {\r\n try {\r\n const fraction = new Fraction(value)\r\n return BigInt(fraction.shl(decimals).toFixed(0))\r\n } catch {\r\n return BigInt(0)\r\n }\r\n}\r\n\r\nexport const toBigInt = (value: string): bigint => {\r\n try {\r\n return BigInt(value)\r\n } catch {\r\n return BigInt(0)\r\n }\r\n}\r\n","// Auto-generated inline SVG React components\n// SVG inner HTML is rendered directly inside <svg> elements\n// Supports currentColor via SVG's native color inheritance\nimport { createElement } from 'react'\n\nexport function BackIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 41 41',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M8.42041 20.4997L7.7133 19.7926L7.0062 20.4997L7.7133 21.2068L8.42041 20.4997ZM28.4204 21.4997C28.9727 21.4997 29.4204 21.052 29.4204 20.4997C29.4204 19.9474 28.9727 19.4997 28.4204 19.4997V21.4997ZM15.0871 13.833L14.38 13.1259L7.7133 19.7926L8.42041 20.4997L9.12752 21.2068L15.7942 14.5401L15.0871 13.833ZM8.42041 20.4997L7.7133 21.2068L14.38 27.8734L15.0871 27.1663L15.7942 26.4592L9.12752 19.7926L8.42041 20.4997ZM8.42041 20.4997V21.4997H28.4204V20.4997V19.4997H8.42041V20.4997Z\"\n fill=\"currentColor\" />` }\n })\n}\n\nexport function ArrowRightIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 46 47',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"23.0434\" cy=\"23.5005\" r=\"22.9565\" fill=\"#81728C\" />\n <path\n 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\"\n fill=\"white\" />` }\n })\n}\n\nexport function ArrowDownIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 28 28',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M22.1663 9.91699L13.9997 18.0837L5.83301 9.91699\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" fill=\"none\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function ArrowFillRightIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M15.6694 11.3079L9.41205 6.09346C8.89099 5.65924 8.0999 6.02976 8.0999 6.70803V16.292C8.0999 16.9702 8.89099 17.3408 9.41205 16.9065L15.6694 11.6921C15.7894 11.5921 15.7894 11.4079 15.6694 11.3079Z\"\n fill=\"#8143FF\" />` }\n })\n}\n\nexport function LinkIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M6.58694 4.5C6.58694 4.22385 6.36309 4 6.08693 4H3.08692C2.53462 4 2.08691 4.4477 2.08691 5V11.5C2.08691 12.0523 2.53462 12.5 3.08692 12.5H9.58695C10.1393 12.5 10.587 12.0523 10.587 11.5V8.5C10.587 8.22385 10.3631 8 10.087 8C9.8108 8 9.58695 8.22385 9.58695 8.5V11.5H3.08692V5H6.08693C6.36309 5 6.58694 4.77615 6.58694 4.5Z\"\n fill=\"#81728C\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M10.3798 3.5H8.58689C8.31074 3.5 8.08689 3.27615 8.08689 3C8.08689 2.72385 8.31074 2.5 8.58689 2.5H11.5869C11.8631 2.5 12.0869 2.72385 12.0869 3V6C12.0869 6.27615 11.8631 6.5 11.5869 6.5C11.3108 6.5 11.0869 6.27615 11.0869 6V4.2071L6.29398 9C6.09873 9.19525 5.78214 9.19525 5.58688 9C5.39163 8.80475 5.39163 8.48815 5.58688 8.2929L10.3798 3.5Z\"\n fill=\"#81728C\" />` }\n })\n}\n\nexport function TimeIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 14',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<g clip-path=\"url(#clip0_2125_393)\">\n <path d=\"M7 14C10.866 14 14 10.866 14 7C14 3.13401 10.866 0 7 0C3.13401 0 0 3.13401 0 7C0 10.866 3.13401 14 7 14Z\"\n fill=\"#00CBB3\" />\n <path d=\"M7 4.5V7L9.54 9.96\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2125_393\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>` }\n })\n}\n\nexport function DateIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<rect x=\"0.0869141\" y=\"0.5\" width=\"14\" height=\"14\" rx=\"7\" fill=\"#00C4FF\" />\n <path\n d=\"M3.08691 6.83301C3.08691 5.8902 3.08691 5.41879 3.37981 5.1259C3.6727 4.83301 4.1441 4.83301 5.08691 4.83301H9.08693C10.0297 4.83301 10.5011 4.83301 10.794 5.1259C11.0869 5.41879 11.0869 5.8902 11.0869 6.83301V8.49968C11.0869 9.44248 11.0869 9.91389 10.794 10.2068C10.5011 10.4997 10.0297 10.4997 9.08694 10.4997H5.08692C4.14411 10.4997 3.6727 10.4997 3.37981 10.2068C3.08691 9.91389 3.08691 9.44248 3.08691 8.49967V6.83301Z\"\n stroke=\"white\" />\n <path d=\"M3.53125 7.05566H10.6424\" stroke=\"white\" stroke-linecap=\"round\" />\n <path d=\"M5.08691 4.5L5.08691 5.27778\" stroke=\"white\" stroke-linecap=\"round\" />\n <path d=\"M9.08691 4.5L9.08691 5.27778\" stroke=\"white\" stroke-linecap=\"round\" />` }\n })\n}\n\nexport function MoneyIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<rect x=\"0.0869141\" y=\"0.5\" width=\"14\" height=\"14\" rx=\"7\" fill=\"#FFAE00\" />\n <path\n d=\"M10.6254 5.88477H3.54845C3.29355 5.88477 3.08691 6.09141 3.08691 6.3463V10.0386C3.08691 10.2935 3.29355 10.5002 3.54845 10.5002H10.6254C10.8803 10.5002 11.0869 10.2935 11.0869 10.0386V6.3463C11.0869 6.09141 10.8803 5.88477 10.6254 5.88477Z\"\n stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M8.47138 5.88462V4.96154C8.47138 4.83913 8.42275 4.72174 8.3362 4.63518C8.24964 4.54863 8.13225 4.5 8.00984 4.5H6.16369C6.04128 4.5 5.92389 4.54863 5.83733 4.63518C5.75078 4.72174 5.70215 4.83913 5.70215 4.96154V5.88462\"\n stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M7.67619 7.57723C7.65593 7.5199 7.62466 7.46777 7.58493 7.42338C7.50042 7.32895 7.37761 7.26953 7.24091 7.26953H6.88366C6.65613 7.26953 6.47168 7.45399 6.47168 7.68152C6.47168 7.87513 6.60649 8.04261 6.79562 8.08399L7.33954 8.20297C7.55143 8.24932 7.70246 8.43709 7.70246 8.65399C7.70246 8.90887 7.49582 9.11569 7.24091 9.11569H6.93322C6.73226 9.11569 6.5613 8.98724 6.49794 8.808\"\n stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.08691 7.26916V6.80762\" stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.08691 9.57677V9.11523\" stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function RewardsIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<g clip-path=\"url(#clip0_2496_20928)\">\n<path d=\"M7 14.7451C10.866 14.7451 14 11.6111 14 7.74512C14 3.87912 10.866 0.745117 7 0.745117C3.13401 0.745117 0 3.87912 0 7.74512C0 11.6111 3.13401 14.7451 7 14.7451Z\" fill=\"#FF4267\"/>\n<path d=\"M4.875 7.62012L6.75 9.49512L8.625 7.62012M4.5 5.74512L3 7.99512L6.75 11.7451L10.5 7.99512L9 5.74512H4.5Z\" stroke=\"white\" stroke-linecap=\"round\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_2496_20928\">\n<rect width=\"14\" height=\"14\" fill=\"white\" transform=\"translate(0 0.745117)\"/>\n</clipPath>\n</defs>` }\n })\n}\n\nexport function PlusIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 25 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M17.5 3C19.7091 3 21.5 4.79086 21.5 7V17C21.5 19.2091 19.7091 21 17.5 21H7.5C5.29086 21 3.5 19.2091 3.5 17V7C3.5 4.79086 5.29086 3 7.5 3H17.5ZM11.5 7V11H7.5V13H11.5V17H13.5V13H17.5V11H13.5V7H11.5Z\"\n fill=\"white\" />` }\n })\n}\n\nexport function RoutesIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5H6.79c-.39-.88-1.26-1.5-2.29-1.5a2.5 2.5 0 0 0 0 5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5a2.5 2.5 0 0 0 0-5z\"\n fill=\"rgba(135,111,143,1)\"\n ></path>` }\n })\n}\n\nexport function InfoIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 14',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7 0C10.8655 0 14 3.13373 14 7C14 10.8655 10.8655 14 7 14C3.13373 14 0 10.8655 0 7C0 3.13373 3.13373 0 7 0Z\"\n fill=\"currentColor\" />\n <path d=\"M6.99654 4.12793V7.47204\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.99569 9.87252H7.00326\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function WalletIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M21.4504 13.6398V14.6398C21.4504 14.7707 21.3991 14.8964 21.3075 14.9899C21.2159 15.0833 21.0912 15.1372 20.9604 15.1398H19.5004C18.9704 15.1398 18.4904 14.7498 18.4504 14.2298C18.4204 13.9198 18.5404 13.6298 18.7404 13.4298C18.8309 13.336 18.9398 13.2619 19.0602 13.212C19.1806 13.1621 19.31 13.1375 19.4404 13.1398H20.9504C21.2404 13.1498 21.4504 13.3698 21.4504 13.6398Z\"\n fill=\"currentColor\" />\n <path\n d=\"M17.9902 12.69C17.4902 13.18 17.2502 13.91 17.4502 14.67C17.7102 15.6 18.6202 16.19 19.5802 16.19H20.4502C21.0002 16.19 21.4502 16.64 21.4502 17.19V17.38C21.4502 19.45 19.7602 21.14 17.6902 21.14H6.2102C4.1402 21.14 2.4502 19.45 2.4502 17.38V10.65C2.4502 9.41996 3.0402 8.32996 3.9502 7.64996C4.5802 7.16996 5.3602 6.88996 6.2102 6.88996H17.6902C19.7602 6.88996 21.4502 8.57996 21.4502 10.65V11.09C21.4502 11.64 21.0002 12.09 20.4502 12.09H19.4302C18.8702 12.09 18.3602 12.31 17.9902 12.69ZM16.2002 4.81996C16.4702 5.08996 16.2402 5.50996 15.8602 5.50996L8.1802 5.49996C7.7402 5.49996 7.5102 4.95996 7.8302 4.64996L9.4502 3.01996C10.1102 2.36654 11.0014 2 11.9302 2C12.8589 2 13.7502 2.36654 14.4102 3.01996L16.1602 4.78996C16.1702 4.79996 16.1902 4.80996 16.2002 4.81996Z\"\n fill=\"currentColor\" />` }\n })\n}\n\nexport function SwitchIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 46 46',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"22.9565\" cy=\"22.9565\" r=\"22.9565\" fill=\"currentColor\" />\n <path\n d=\"M20.131 14.002C20.5837 14.002 20.9553 14.3761 21.0001 14.8555L21.005 14.9521V31.3359C21.005 31.861 20.6139 32.287 20.131 32.2871C19.8537 32.287 19.6066 32.1466 19.4464 31.9277C19.4182 31.9018 19.3901 31.8747 19.3634 31.8457L14.7599 26.8398C14.3363 26.3792 14.2691 25.7043 14.6105 25.333C14.9519 24.9618 15.5725 25.0348 15.9962 25.4951L19.256 29.0391V14.9521L19.2609 14.8555C19.3057 14.3761 19.6783 14.0021 20.131 14.002ZM26.0411 14C26.3154 14.0001 26.5605 14.1377 26.7208 14.3525C26.7508 14.3798 26.7804 14.4087 26.8087 14.4395L31.4122 19.4453C31.8358 19.906 31.903 20.5808 31.5616 20.9521C31.2201 21.3232 30.5996 21.2504 30.1759 20.79L26.9161 17.2461V31.335L26.9112 31.4316C26.8664 31.911 26.4938 32.285 26.0411 32.2852C25.5885 32.2849 25.2168 31.9109 25.172 31.4316L25.1671 31.335V14.9512C25.1671 14.4262 25.5584 14.0003 26.0411 14Z\"\n fill=\"white\" />` }\n })\n}\n\nexport function SettingsIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 21 22',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M18.4138 7.00571L17.831 5.99429C17.3379 5.13846 16.2451 4.84323 15.3881 5.33429V5.33429C14.9802 5.5746 14.4934 5.64278 14.0351 5.52379C13.5768 5.4048 13.1847 5.10842 12.9452 4.7C12.7912 4.4404 12.7084 4.14472 12.7052 3.84286V3.84286C12.7191 3.35889 12.5366 2.88991 12.1991 2.54275C11.8616 2.19558 11.398 1.9998 10.9138 2H9.73952C9.26519 1.99999 8.81041 2.18901 8.47581 2.52521C8.14121 2.86142 7.95438 3.3171 7.95666 3.79143V3.79143C7.94261 4.77075 7.14466 5.55724 6.16524 5.55714C5.86337 5.55401 5.56769 5.47122 5.30809 5.31714V5.31714C4.4511 4.82608 3.35833 5.12132 2.86524 5.97714L2.23952 7.00571C1.74702 7.86047 2.03824 8.95254 2.89095 9.44857V9.44857C3.44523 9.76858 3.78667 10.36 3.78667 11C3.78667 11.64 3.44523 12.2314 2.89095 12.5514V12.5514C2.03932 13.0441 1.74778 14.1335 2.23952 14.9857V14.9857L2.83095 16.0057C3.06199 16.4226 3.44963 16.7302 3.90809 16.8605C4.36656 16.9908 4.85805 16.9331 5.27381 16.7V16.7C5.68252 16.4615 6.16956 16.3962 6.62668 16.5185C7.0838 16.6408 7.47312 16.9407 7.70809 17.3514C7.86217 17.611 7.94496 17.9067 7.94809 18.2086V18.2086C7.94809 19.198 8.75014 20 9.73952 20H10.9138C11.8998 20 12.7005 19.2032 12.7052 18.2171V18.2171C12.7029 17.7413 12.8909 17.2843 13.2274 16.9479C13.5639 16.6114 14.0208 16.4234 14.4967 16.4257C14.7978 16.4338 15.0923 16.5162 15.3538 16.6657V16.6657C16.2086 17.1582 17.3006 16.867 17.7967 16.0143V16.0143L18.4138 14.9857C18.6527 14.5757 18.7183 14.0874 18.596 13.6288C18.4737 13.1703 18.1737 12.7795 17.7624 12.5429V12.5429C17.3511 12.3062 17.051 11.9154 16.9288 11.4569C16.8065 10.9984 16.8721 10.51 17.111 10.1C17.2663 9.82879 17.4912 9.60391 17.7624 9.44857V9.44857C18.61 8.95281 18.9005 7.86712 18.4138 7.01429V7.01429V7.00571Z\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" />\n <circle cx=\"10.3309\" cy=\"10.9998\" r=\"2.46857\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\" stroke=\"currentColor\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function CloseIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M14.3955 9.59489L9.60352 14.3869\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path d=\"M14.3976 14.3898L9.60156 9.5928\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M16.335 2.7502H7.66598C4.64498 2.7502 2.75098 4.8892 2.75098 7.9162V16.0842C2.75098 19.1112 4.63598 21.2502 7.66598 21.2502H16.334C19.365 21.2502 21.251 19.1112 21.251 16.0842V7.9162C21.251 4.8892 19.365 2.7502 16.335 2.7502Z\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" />` }\n })\n}\n\nexport function AllIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 32 32',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M16 5.333c8.1 0 14.667 3.581 14.667 8v5.333c0 4.419-6.567 8-14.667 8-7.956 0-14.432-3.455-14.66-7.764l-0.007-0.236v-5.333c0-4.419 6.567-8 14.667-8zM16 21.333c-4.96 0-9.347-1.343-12-3.4v0.733c0 2.509 5.177 5.333 12 5.333 6.68 0 11.784-2.707 11.993-5.176l0.007-0.157 0.001-0.733c-2.653 2.056-7.040 3.4-12.001 3.4zM16 8c-6.823 0-12 2.824-12 5.333s5.177 5.333 12 5.333 12-2.824 12-5.333c0-2.509-5.177-5.333-12-5.333z\"\n ></path>` }\n })\n}\n\nexport function StablecoinIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '64 64 896 896',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm22.3 665.2l.2 31.7c0 4.4-3.6 8.1-8 8.1h-28.4c-4.4 0-8-3.6-8-8v-31.4C401.3 723 359.5 672.4 355 617.4c-.4-4.7 3.3-8.7 8-8.7h46.2c3.9 0 7.3 2.8 7.9 6.6 5.1 31.7 29.8 55.4 74.1 61.3V533.9l-24.7-6.3c-52.3-12.5-102.1-45.1-102.1-112.7 0-72.9 55.4-112.1 126.2-119v-33c0-4.4 3.6-8 8-8h28.1c4.4 0 8 3.6 8 8v32.7c68.5 6.9 119.9 46.9 125.9 109.2.5 4.7-3.2 8.8-8 8.8h-44.9c-4 0-7.4-3-7.9-6.9-4-29.2-27.4-53-65.5-58.2v134.3l25.4 5.9c64.8 16 108.9 47 108.9 116.4 0 75.3-56 117.3-134.3 124.1zM426.6 410.3c0 25.4 15.7 45.1 49.5 57.3 4.7 1.9 9.4 3.4 15 5v-124c-36.9 4.7-64.5 25.4-64.5 61.7zm116.5 135.2c-2.8-.6-5.6-1.3-8.8-2.2V677c42.6-3.8 72-27.2 72-66.4 0-30.7-15.9-50.7-63.2-65.1z\"\n ></path>` }\n })\n}\n\nexport function StockIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 44.8 44.8',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <path\n fill=\"currentColor\"\n d=\"M44.8,22.4c0,1.1,0,2.2-.2,3.2h-3.2c.2-1,.3-2.1.3-3.2-.1-10.6-8.7-19.2-19.3-19.2S3.2,11.8,3.2,22.4s8.6,19.2,19.2,19.2h11.5c-3.4,2-7.3,3.2-11.5,3.2C10,44.8,0,34.7,0,22.4S10,0,22.4,0s22.4,10,22.4,22.4ZM32,35.2h-9.6c-7.1,0-12.8-5.7-12.8-12.8s5.7-12.8,12.8-12.8,12.8,5.7,12.8,12.8-.1,2.2-.4,3.2h3.3c.2-1,.3-2.1.3-3.2,0-8.8-7.2-16-16-16S6.4,13.6,6.4,22.4s7.2,16,16,16h15.6c1-1,2-2.1,2.8-3.2h-8.8ZM37,28.8h-14.7c-3.5,0-6.4-2.9-6.4-6.4s2.9-6.4,6.4-6.4,6.4,2.9,6.4,6.4-.3,2.3-.9,3.2h3.5c.4-1,.5-2.1.5-3.2,0-5.3-4.3-9.6-9.6-9.6s-9.6,4.3-9.6,9.6,4.3,9.6,9.6,9.6h20.4c.5-1,.9-2.1,1.2-3.2h-6.8Z\"\n />` }\n })\n}\n\nexport function XStockIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 800 801',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M800 6.00637C800 2.78947 797.392 0.181652 794.175 0.181652L533.333 0.181641L400 133.515L266.667 0.181652H5.82473C2.60782 0.181652 6.4736e-06 2.78947 6.4736e-06 6.00638V266.848L133.333 400.182L1.14018e-05 533.515L0 794.357C-1.40616e-07 797.574 2.60782 800.182 5.82472 800.182H266.667L400 666.848L533.333 800.182H794.175C797.392 800.182 800 797.574 800 794.357V533.515L666.667 400.182L800 266.848V6.00637Z\"\n />` }\n })\n}\n\nexport function LikedIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 512 512',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"\n ></path>` }\n })\n}\n\nexport function SearchIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"11.4171\" cy=\"11.4171\" r=\"8.41714\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path d=\"M17.2715 17.7085L20.5715 20.9999\" stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function AIIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 48 48',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <path\n fill=\"currentColor\"\n d=\"M41,42H7V11h15v-2h-3v-4h5v2-2h5v4h-3v2h15v31ZM11,38h26V15H11v23ZM47,32h-4v-11h4v11ZM5,32H1v-11h4v11ZM32,29h-5v-5h5v5ZM21,29h-5v-5h5v5Z\"\n />` }\n })\n}\n\nexport function DingIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 1024 1024',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><path d=\"M951.296 424.96L1024 352.256 671.744 0 599.04 72.704l70.144 70.656-168.96 168.96a296.96 296.96 0 0 0-286.72 75.264L143.36 458.24 72.704 387.584 0 460.8l245.248 245.248-139.776 139.776 72.704 72.704 140.288-140.288L563.2 1024l72.704-72.704-70.144-70.656 70.144-70.144a296.96 296.96 0 0 0 75.776-287.232l168.96-168.96z\" fill=\"#d4237a\" p-id=\"21051\"></path>` }\n })\n}\n\nexport function MetamaskIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M21.0041 2.61084L13.2002 8.43117L14.6433 4.99725L21.0041 2.61084Z\" fill=\"#E2761B\" />\n <path\n d=\"M2.98857 2.61084L10.7297 8.4863L9.3572 4.99725L2.98857 2.61084ZM18.1964 16.1024L16.118 19.3L20.565 20.5286L21.8435 16.1732L18.1964 16.1024ZM2.16504 16.1732L3.43563 20.5286L7.88269 19.3L5.80426 16.1024L2.16504 16.1732Z\"\n fill=\"#E4761B\" />\n <path\n d=\"M7.63179 10.6993L6.39258 12.5817L10.8083 12.7786L10.6514 8.01363L7.63179 10.6993ZM16.3612 10.6993L13.3024 7.9585L13.2004 12.7786L17.6083 12.5817L16.3612 10.6993ZM7.88277 19.2999L10.5338 18.0003L8.24356 16.2046L7.88277 19.2999ZM13.4592 18.0003L16.1181 19.2999L15.7494 16.2046L13.4592 18.0003Z\"\n fill=\"#E4761B\" />\n <path\n d=\"M16.1181 19.3L13.4593 18.0005L13.671 19.7411L13.6475 20.4735L16.1181 19.3ZM7.88281 19.3L10.3534 20.4735L10.3377 19.7411L10.5338 18.0005L7.88281 19.3Z\"\n fill=\"#D7C1B3\" />\n <path\n d=\"M10.3924 15.055L8.18066 14.4013L9.74145 13.6846L10.3924 15.055ZM13.6003 15.055L14.2513 13.6846L15.8199 14.4013L13.6003 15.055Z\"\n fill=\"#233447\" />\n <path\n d=\"M7.88214 19.3002L8.25861 16.1026L5.80371 16.1735L7.88214 19.3002ZM15.741 16.1026L16.1174 19.3002L18.1959 16.1735L15.741 16.1026ZM17.6076 12.582L13.1998 12.7789L13.6076 15.0551L14.2586 13.6847L15.8272 14.4014L17.6076 12.582ZM8.18018 14.4014L9.74881 13.6847L10.3919 15.0551L10.8076 12.7789L6.39195 12.582L8.18018 14.4014Z\"\n fill=\"#CD6116\" />\n <path\n d=\"M6.39258 12.582L8.24356 16.205L8.18081 14.4014L6.39258 12.582ZM15.8279 14.4014L15.7494 16.205L17.6083 12.582L15.8279 14.4014ZM10.8083 12.7789L10.3926 15.0551L10.9102 17.7408L11.0279 14.2045L10.8083 12.7789ZM13.2004 12.7789L12.9887 14.1966L13.0828 17.7408L13.6083 15.0551L13.2004 12.7789Z\"\n fill=\"#E4751F\" />\n <path\n d=\"M13.6081 15.0551L13.0826 17.7408L13.4591 18.0007L15.7493 16.205L15.8277 14.4014L13.6081 15.0551ZM8.18066 14.4014L8.24341 16.205L10.5336 18.0007L10.9101 17.7408L10.3924 15.0551L8.18066 14.4014Z\"\n fill=\"#F6851B\" />\n <path\n d=\"M13.6475 20.4733L13.671 19.7409L13.475 19.5676H10.5181L10.3377 19.7409L10.3534 20.4733L7.88281 19.2998L8.74556 20.0086L10.4946 21.2294H13.4985L15.2554 20.0086L16.1181 19.2998L13.6475 20.4733Z\"\n fill=\"#C0AD9E\" />\n <path\n d=\"M13.4585 18.0006L13.082 17.7407H10.9095L10.533 18.0006L10.3369 19.7412L10.5173 19.5679H13.4742L13.6702 19.7412L13.4585 18.0006Z\"\n fill=\"#161616\" />\n <path\n d=\"M21.3333 8.80922L22 5.59583L21.0039 2.61084L13.4588 8.23427L16.3608 10.6994L20.4627 11.9045L21.3725 10.8412L20.9804 10.5577L21.6078 9.98273L21.1216 9.60469L21.749 9.12425L21.3333 8.80922ZM2 5.59583L2.66667 8.80922L2.24314 9.12425L2.87059 9.60469L2.39216 9.98273L3.01961 10.5577L2.62745 10.8412L3.52941 11.9045L7.63137 10.6994L10.5333 8.23427L2.98824 2.61084L2 5.59583Z\"\n fill=\"#763D16\" />\n <path\n d=\"M20.4631 11.9043L16.3611 10.6993L17.6082 12.5816L15.7494 16.2046L18.1964 16.173H21.8435L20.4631 11.9043ZM7.63171 10.6993L3.52974 11.9043L2.16504 16.173H5.80426L8.24347 16.2046L6.39249 12.5816L7.63171 10.6993ZM13.2003 12.7785L13.4592 8.23409L14.6513 4.99707H9.3572L10.5337 8.23409L10.8082 12.7785L10.9023 14.2119L10.9101 17.7404H13.0827L13.0984 14.2119L13.2003 12.7785Z\"\n fill=\"#F6851B\" />` }\n })\n}\n\n// Data URI for loader.svg — use in CSS mask-image: url(...)\nexport const loaderSvgUrl = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDIyIDIyIiBmaWxsPSJub25lIj4NCjxwYXRoIGQ9Ik0zLjIwODI1IDEuODMzMjVDMy4xMTY1OSAxLjgzMzI1IDIuOTMyODkgMS44MzI4OSAyLjg0MTIzIDEuOTI0NTZDMi43NDk1NiAyLjEwNzg5IDIuNzQ5NTYgMi40NzUyOCAyLjg0MTIzIDIuNjU4NjFMNC42MTAxMSA0LjQyNzQ5QzIuODkxNTkgNi4xMTQyNSAxLjgzMzI1IDguNDQ4OTggMS44MzMyNSAxMC45OTk5QzEuODMzMjUgMTYuMDcyMSA1LjkyNzcgMjAuMTY2NiAxMC45OTk5IDIwLjE2NjZDMTYuMDcyMSAyMC4xNjY2IDIwLjE2NjYgMTYuMDcyMSAyMC4xNjY2IDEwLjk5OTlDMjAuMTY2NiA2LjMxODI4IDE2LjU5ODQgMi40Mzg4IDEyLjAxODYgMS45Mjk5M0MxMS45ODgzIDEuOTI2NjIgMTEuOTU3OCAxLjkyNDgzIDExLjkyNzMgMS45MjQ1NkMxMS42OTE4IDEuOTIxMjYgMTEuNDY0IDIuMDA4NzcgMTEuMjkxMiAyLjE2ODk0QzExLjExODQgMi4zMjkxIDExLjAxNCAyLjU0OTYzIDEwLjk5OTUgMi43ODQ3N0MxMC45ODUgMy4wMTk5MSAxMS4wNjE1IDMuMjUxNjEgMTEuMjEzMyAzLjQzMThDMTEuMzY1IDMuNjExOTkgMTEuNTgwNCAzLjcyNjg0IDExLjgxNDUgMy43NTI1MkMxNS40ODQ3IDQuMTYwMzIgMTguMzMzMyA3LjI0ODIzIDE4LjMzMzMgMTAuOTk5OUMxOC4zMzMzIDE1LjA5NDQgMTUuMDk0NCAxOC4zMzMzIDEwLjk5OTkgMTguMzMzM0M2LjkwNTQ3IDE4LjMzMzMgMy42NjY1OSAxNS4wOTQ0IDMuNjY2NTkgMTAuOTk5OUMzLjY2NjU5IDguOTQzNzkgNC41MTk1IDcuMDY5ODggNS45MDI3NSA1LjcyMDEzTDcuNDI0NTYgNy4yNDE5NEM3LjYwNzg5IDcuMzMzNjEgNy45NzUyOCA3LjMzMzYxIDguMTU4NjEgNy4yNDE5NEM4LjI1MDI4IDcuMTUwMjggOC4yNDk5MiA2Ljk2NjU5IDguMjQ5OTIgNi44NzQ5MlYzLjU4MjQ0VjIuNzQ5OTJDOC4yNDk5MiAyLjE5OTkyIDcuODgzMjUgMS44MzMyNSA3LjMzMzI1IDEuODMzMjVIMy4yMDgyNVoiIGZpbGw9IiMwMDAiLz4NCjwvc3ZnPg=='\n\n// Default export for backward compatibility\nexport default function Icon(props: any = {}) {\n return createElement('span', {\n style: { display: 'inline-block', width: props.size || 16, height: props.size || 16 },\n ...props\n })\n}\n","import { chakra, defineRecipe } from '@chakra-ui/react'\r\n\r\nconst headingRecipe = defineRecipe({\r\n variants: {\r\n variant: {\r\n heading5: { fontWeight: 700, fontSize: '26px', lineHeight: '26px' },\r\n heading6: { fontWeight: 700, fontSize: '24px', lineHeight: '24px' },\r\n heading7: { fontWeight: 600, fontSize: '22px', lineHeight: '22px' },\r\n heading8: { fontWeight: 600, fontSize: '20px', lineHeight: '20px' },\r\n heading9: { fontWeight: 600, fontSize: '18px', lineHeight: '18px' },\r\n heading10: { fontWeight: 600, fontSize: '16px', lineHeight: '16px' },\r\n heading11: { fontWeight: 600, fontSize: '14px', lineHeight: '14px' },\r\n heading12: { fontWeight: 600, fontSize: '12px', lineHeight: '12px' },\r\n heading13: { fontWeight: 600, fontSize: '10px', lineHeight: '10px' }\r\n }\r\n }\r\n})\r\n\r\nconst textRecipe = defineRecipe({\r\n variants: {\r\n variant: {\r\n content3: { fontWeight: 400, fontSize: '28px', lineHeight: '28px' },\r\n content4: { fontWeight: 400, fontSize: '24px', lineHeight: '24px' },\r\n content5: { fontWeight: 400, fontSize: '22px', lineHeight: '22px' },\r\n content6: { fontWeight: 400, fontSize: '18px', lineHeight: '18px' },\r\n 'content6_1': { fontWeight: 400, fontSize: '16px', lineHeight: '16px' },\r\n content7: { fontWeight: 400, fontSize: '14px', lineHeight: '14px' },\r\n 'content7_2': { fontWeight: 400, fontSize: '14px', lineHeight: 1.4 },\r\n content8: { fontWeight: 400, fontSize: '12px', lineHeight: '12px' },\r\n 'content8_2': { fontWeight: 400, fontSize: '12px', lineHeight: 1.4 },\r\n content9: { fontWeight: 400, fontSize: '10px', lineHeight: '10px' }\r\n }\r\n }\r\n})\r\n\r\nexport const Heading = chakra('h2', headingRecipe)\r\nexport const Text = chakra('p', textRecipe)\r\n","import {\r\n Box,\r\n Portal,\r\n useDisclosure,\r\n Tooltip as ChakraTooltip\r\n} from '@chakra-ui/react'\r\nimport type { BoxProps } from '@chakra-ui/react'\r\nimport * as React from 'react'\r\n\r\n// Detect if device supports touch\r\nconst isTouchDevice = () => {\r\n if (typeof window === 'undefined') return false\r\n return (\r\n 'ontouchstart' in window ||\r\n navigator.maxTouchPoints > 0\r\n )\r\n}\r\n\r\nexport interface TooltipProps extends ChakraTooltip.RootProps {\r\n showArrow?: boolean\r\n portalled?: boolean\r\n portalRef?: React.RefObject<HTMLElement>\r\n content: React.ReactNode\r\n contentProps?: ChakraTooltip.ContentProps\r\n disabled?: boolean\r\n}\r\n\r\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\r\n function Tooltip(props, ref) {\r\n const {\r\n showArrow,\r\n children,\r\n disabled,\r\n portalled = true,\r\n content,\r\n contentProps,\r\n portalRef,\r\n ...rest\r\n } = props\r\n\r\n if (disabled) return children\r\n\r\n return (\r\n <ChakraTooltip.Root {...rest}>\r\n <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>\r\n <Portal disabled={!portalled} container={portalRef}>\r\n <ChakraTooltip.Positioner>\r\n <ChakraTooltip.Content\r\n ref={ref}\r\n color={'black'}\r\n css={{\r\n '--tooltip-bg': 'white'\r\n }}\r\n {...contentProps}\r\n >\r\n {showArrow && (\r\n <ChakraTooltip.Arrow>\r\n <ChakraTooltip.ArrowTip />\r\n </ChakraTooltip.Arrow>\r\n )}\r\n {content}\r\n </ChakraTooltip.Content>\r\n </ChakraTooltip.Positioner>\r\n </Portal>\r\n </ChakraTooltip.Root>\r\n )\r\n }\r\n)\r\n\r\ntype MobileTooltipProps = TooltipProps & {\r\n boxProps?: BoxProps\r\n}\r\n\r\nexport const tooltip = Tooltip\r\nexport const MobileTooltip = (props: MobileTooltipProps) => {\r\n const { boxProps, ...tooltipProps } = props\r\n const { open, onOpen, onClose, onToggle } = useDisclosure()\r\n const [isTouch, setIsTouch] = React.useState(false)\r\n const triggerRef = React.useRef<HTMLDivElement>(null)\r\n\r\n React.useEffect(() => {\r\n setIsTouch(isTouchDevice())\r\n }, [])\r\n\r\n // Close tooltip when clicking outside (for touch devices)\r\n React.useEffect(() => {\r\n if (!isTouch || !open) return\r\n\r\n const handleClickOutside = (e: MouseEvent | TouchEvent) => {\r\n if (\r\n triggerRef.current &&\r\n !triggerRef.current.contains(e.target as Node)\r\n ) {\r\n onClose()\r\n }\r\n }\r\n\r\n // Delay to avoid immediate close from the same click\r\n const timer = setTimeout(() => {\r\n document.addEventListener('click', handleClickOutside)\r\n document.addEventListener('touchstart', handleClickOutside)\r\n }, 0)\r\n\r\n return () => {\r\n clearTimeout(timer)\r\n document.removeEventListener('click', handleClickOutside)\r\n document.removeEventListener('touchstart', handleClickOutside)\r\n }\r\n }, [isTouch, open, onClose])\r\n\r\n return (\r\n <Tooltip open={open} {...tooltipProps}>\r\n <Box\r\n ref={triggerRef}\r\n onClick={isTouch ? onToggle : onOpen}\r\n onMouseLeave={isTouch ? undefined : onClose}\r\n onMouseEnter={isTouch ? undefined : onOpen}\r\n {...boxProps}\r\n fontSize={0}\r\n >\r\n {props.children}\r\n </Box>\r\n </Tooltip>\r\n )\r\n}\r\n","import { Box, BoxProps } from '@chakra-ui/react'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nexport const BoxWithBg = ({\r\n children,\r\n ...props\r\n}: PropsWithChildren<BoxProps>) => {\r\n return (\r\n <Box w={'100%'} bg={'#F5F6FF'} borderRadius={'16px'} p={3} {...props}>\r\n {children}\r\n </Box>\r\n )\r\n}\r\n","'use client'\r\nimport { Image as ChakraImage, type ImageProps } from '@chakra-ui/react'\r\nexport const OptimizedImage = (props: ImageProps) => <ChakraImage {...props} />\r\n","export const isNeedTwoApprove = (\r\n fromTokenAddress: string,\r\n fromChainId: number\r\n): boolean => {\r\n const USDT_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7'\r\n const ETHEREUM_CHAIN_ID = 1\r\n return (\r\n fromTokenAddress.toLowerCase() === USDT_ADDRESS.toLowerCase() &&\r\n fromChainId === ETHEREUM_CHAIN_ID\r\n )\r\n}\r\n\r\nexport const useUSDTHandler = () => {\r\n return {\r\n needsTwoApproval: false,\r\n isProcessingSecondApproval: false\r\n }\r\n}\r\n","'use client'\r\n\r\nimport {\r\n VStack,\r\n Button,\r\n Icon,\r\n ConditionalValue,\r\n Image,\r\n HStack,\r\n Spinner,\r\n Box\r\n} from '@chakra-ui/react'\r\nimport { useWalletConnectModal } from './hooks/useWalletConnectModal'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nimport { Fraction } from 'bi-fraction'\r\n// import { parseEther } from 'ethers'\r\nimport { useState, useMemo, useCallback, useEffect, useRef } from 'react'\r\nimport { parseUnits } from 'viem'\r\nimport {\r\n BaseError,\r\n useAccount,\r\n useConfig,\r\n useConnectors,\r\n useReconnect,\r\n useSendTransaction\r\n // usePublicClient,\r\n // useWalletClient\r\n} from 'wagmi'\r\n\r\nimport { logger } from '../utils'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { slippageStore } from '../utils'\r\n\r\nimport { toaster } from './ui/toaster'\r\n\r\nimport {\r\n useGuardChain,\r\n useSwapAndBridgeContextStore,\r\n useTxStateContextStore,\r\n useRefreshLoading\r\n} from './hooks'\r\nimport {\r\n getErc20Approval,\r\n calculateSlippage,\r\n extractVPathSegment,\r\n matchSlippagePolicy,\r\n isETHtoETHBridge\r\n} from './utils'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { WalletIcon } from './icons'\r\nimport { Heading, Text } from './ui'\r\nimport { useUSDTHandler } from './utils/twoApprove'\r\n// import { bottomToaster } from './ui/toaster'\r\nimport { useChainsStore } from './hooks'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useSolanaTransaction } from './hooks/useSolanaSendTransaction'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { QuoteRequestWithToTokenDecimals } from './MainForm'\r\n\r\ninterface Props {\r\n isFetching: boolean\r\n insufficientBalance?: boolean\r\n data: `0x${string}` | null\r\n contractAddress: `0x${string}` | null\r\n stopAutoRefetch: () => void\r\n errorMessage: string | null\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n backApprove?: boolean\r\n router_type?: string | null | undefined\r\n txValue?: string | null\r\n isInsufficientBalance?: boolean\r\n quoteMessage: string | null | undefined\r\n solanaTxMessage?: string\r\n lockRequestId: () => void\r\n clearLockedRequestId: () => void\r\n lockedRequestId: string | null\r\n currentRequestId: string | undefined | null\r\n getQuote: (params: QuoteRequestWithToTokenDecimals) => Promise<void>\r\n}\r\n\r\ninterface TxGasInfo {\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n}\r\n\r\ntype DynamicWalletLike = {\r\n address?: string | null\r\n chain?: string | null\r\n}\r\n\r\nconst buttonStyles = {\r\n w: '100%',\r\n h: {\r\n base: '40px',\r\n md: '56px'\r\n },\r\n colorPalette: 'wheel'\r\n}\r\n\r\nconst buttonHeadingVariant: ConditionalValue<'heading11' | 'heading9'> = {\r\n base: 'heading11',\r\n md: 'heading9'\r\n}\r\n\r\nconst USDT_MAINNET_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7'\r\n\r\nexport const FormButton = ({\r\n isFetching,\r\n insufficientBalance = false,\r\n data,\r\n contractAddress,\r\n stopAutoRefetch,\r\n errorMessage,\r\n gas,\r\n maxFeePerGas,\r\n maxPriorityFeePerGas,\r\n backApprove,\r\n router_type,\r\n isInsufficientBalance,\r\n quoteMessage,\r\n txValue,\r\n solanaTxMessage,\r\n lockRequestId,\r\n clearLockedRequestId,\r\n lockedRequestId,\r\n getQuote,\r\n currentRequestId\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const {\r\n address: wagmiAddress,\r\n connector,\r\n isConnected: isWagmiConnected\r\n } = useAccount()\r\n const { reconnectAsync } = useReconnect()\r\n const userWallets = useUserWallets()\r\n const dynamicEvmWalletAddress = useMemo(() => {\r\n const dynamicEvmWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as DynamicWalletLike | undefined\r\n\r\n return (dynamicEvmWallet?.address as `0x${string}` | undefined) || undefined\r\n }, [userWallets])\r\n const effectiveEvmAddress = useMemo(\r\n () => address || wagmiAddress || dynamicEvmWalletAddress || undefined,\r\n [address, wagmiAddress, dynamicEvmWalletAddress]\r\n )\r\n const { openModal, openConnectModal } = useWalletConnectModal()\r\n const slippage = address ? slippageStore.get(address) : undefined\r\n const { startLoading } = useRefreshLoading()\r\n\r\n const config = useConfig()\r\n\r\n const {\r\n fromTokenInfo,\r\n fromAmount,\r\n toAmount,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n toTokenInfo\r\n } = useSwapAndBridgeContextStore()\r\n const {\r\n setFromTxHash,\r\n setSolanaFromTxHash,\r\n setIsSolanaTransaction,\r\n setUserCancelsTransaction\r\n } = useTxStateContextStore()\r\n\r\n // console.log('####### slippage #######:',slippage)\r\n // console.log('####### lockedRequestId #######:',lockedRequestId)\r\n // console.log('####### currentRequestId #######:',currentRequestId)\r\n\r\n const [isApproving, setIsApproving] = useState(false)\r\n const [lossTwenty, setLossTwenty] = useState(false)\r\n const [lossFifty, setLossFifty] = useState(false)\r\n const {\r\n handleApprove\r\n // error: approveError\r\n } = useUSDTHandler(fromTokenInfo.chain_id)\r\n\r\n const { isSelectPredictionChain, slippagePolicies, chains } = useChainsStore()\r\n const { differentAddress } = useDifferentAddressStore()\r\n\r\n const {\r\n solanaWalletAddress,\r\n isSolanaWalletConnected,\r\n isEthWalletConnected,\r\n evmWalletConnectorId\r\n } = useWalletConnectedStore()\r\n\r\n const connectors = useConnectors()\r\n\r\n // const { publicKey: walletPublicKey, connected: walletConnected } = useWallet()\r\n\r\n // const solanaConnected = walletConnected || !!solanaWalletAddress\r\n // Use walletPublicKey first; fall back to solanaWalletAddress from Zustand store\r\n // to handle cases where WalletProvider Context has not yet synced after connect\r\n // const publicKey = walletPublicKey\r\n // ? walletPublicKey\r\n // : solanaWalletAddress\r\n // ? (() => {\r\n // try {\r\n // return new PublicKey(solanaWalletAddress)\r\n // } catch {\r\n // return null\r\n // }\r\n // })()\r\n // : null\r\n\r\n // console.log('solanaConnected:', solanaConnected, 'publicKey:', publicKey)\r\n\r\n // Memoized validations\r\n const hasEvmUiWallet = Boolean(\r\n effectiveEvmAddress || isEthWalletConnected || isWagmiConnected\r\n )\r\n\r\n // Check if we have a valid EVM wallet for executing transactions\r\n // This includes:\r\n // 1) wagmi connected with connector, or\r\n // 2) stored evmWalletConnectorId found in connectors, or\r\n // 3) user has EVM address and there are available connectors (handles wallet switch scenarios)\r\n const hasEvmExecutionWallet = Boolean(\r\n effectiveEvmAddress &&\r\n ((isWagmiConnected && connector) ||\r\n (evmWalletConnectorId &&\r\n connectors.some((c) => c.id === evmWalletConnectorId)) ||\r\n (isEthWalletConnected && connectors.length > 0))\r\n )\r\n\r\n const validations = useMemo(() => {\r\n const fromAmountFraction = new Fraction(fromAmount || '0')\r\n const hasValidAmounts =\r\n parseFloat(fromAmount) &&\r\n parseFloat(toAmount) &&\r\n fromAmountFraction.gt(new Fraction('0'))\r\n // const isDifferentChain = fromTokenInfo.chain_id !== toTokenInfo.chain_id\r\n\r\n return {\r\n hasValidAmounts,\r\n // isDifferentChain,\r\n canSwap: hasValidAmounts && !isFetching\r\n // canSwap: isDifferentChain && hasValidAmounts && !isFetching\r\n }\r\n }, [fromAmount, toAmount, isFetching])\r\n\r\n // ——— Slippage Warning Logic ———\r\n\r\n /** Matched fee_level policy */\r\n const matchedPolicy = useMemo(() => {\r\n if (!fromTokenInfo || !toTokenInfo || !slippagePolicies) return null\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n return matchSlippagePolicy(slippagePolicies, isBridge, fromFeeLevel, toFeeLevel)\r\n }, [fromTokenInfo, toTokenInfo, slippagePolicies])\r\n\r\n /** Whether this is an ETH-to-ETH cross-chain bridge */\r\n const isETHtoETH = useMemo(\r\n () => isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains),\r\n [fromTokenInfo, toTokenInfo, chains]\r\n )\r\n\r\n /** Number of notice rounds from matched policy, defaults to 2 */\r\n const noticeRounds = useMemo(\r\n () => matchedPolicy?.notice_rounds ?? 2,\r\n [matchedPolicy]\r\n )\r\n\r\n /** Track how many quote rounds have passed since the user clicked confirm */\r\n const [quoteRoundCount, setQuoteRoundCount] = useState(0)\r\n const prevCurrentRequestIdRef = useRef(currentRequestId)\r\n\r\n // Reset count when lockedRequestId is cleared (transaction dismissed)\r\n useEffect(() => {\r\n if (!lockedRequestId) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setQuoteRoundCount(0)\r\n prevCurrentRequestIdRef.current = currentRequestId\r\n }\r\n // currentRequestId used only to update ref, intentionally omitted from deps\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lockedRequestId])\r\n\r\n // Increment / reset count each time currentRequestId changes\r\n useEffect(() => {\r\n // Skip if request_id hasn't actually changed\r\n if (currentRequestId === prevCurrentRequestIdRef.current) return\r\n prevCurrentRequestIdRef.current = currentRequestId\r\n\r\n // Lock cleared → new quote cycle started → reset count\r\n if (!lockedRequestId || !currentRequestId) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setQuoteRoundCount(0)\r\n return\r\n }\r\n\r\n // Skip the initial quote (matches the locked request_id)\r\n if (currentRequestId === lockedRequestId) return\r\n\r\n // Increment count for each new quote round while locked\r\n setQuoteRoundCount((prev) => prev + 1)\r\n }, [currentRequestId, lockedRequestId])\r\n\r\n /** Quote round limit exceeded warning (only when locked request is active) */\r\n const showQuoteRoundWarning = useMemo(\r\n () =>\r\n Boolean(lockedRequestId) &&\r\n quoteRoundCount >= noticeRounds &&\r\n !isETHtoETH,\r\n [lockedRequestId, quoteRoundCount, noticeRounds, isETHtoETH]\r\n )\r\n\r\n const handleTransactionSuccess = useCallback(\r\n (hash: `0x${string}`) => {\r\n console.log(\r\n '[Transaction] User confirmed transaction in wallet, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setFromTxHash(hash)\r\n setUserCancelsTransaction(false)\r\n console.log('[Transaction] Quote polling stopped, tx hash:', hash)\r\n },\r\n [setFromTxHash, setUserCancelsTransaction, stopAutoRefetch]\r\n )\r\n\r\n const handleTransactionError = useCallback(\r\n async (error: Error) => {\r\n logger.error('Transaction error:', error)\r\n setUserCancelsTransaction(true)\r\n console.log(\r\n '[Transaction] User rejected or transaction failed, clearing locked request_id and refetching quote...'\r\n )\r\n clearLockedRequestId()\r\n\r\n // Trigger refresh animation immediately\r\n startLoading()\r\n\r\n // Refetch quote immediately after user cancels transaction\r\n const vCode = extractVPathSegment()\r\n const fromAddress = fromTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : effectiveEvmAddress || ''\r\n\r\n const toAddress = toTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : differentAddress || effectiveEvmAddress || ''\r\n\r\n if (fromAddress && fromAmount) {\r\n console.log(\r\n '[Transaction] Refetching quote after transaction rejection...'\r\n )\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n toaster.create({\r\n description:\r\n (error as BaseError)?.shortMessage ||\r\n error.message ||\r\n 'Transaction failed',\r\n type: 'error'\r\n })\r\n },\r\n [\r\n setUserCancelsTransaction,\r\n clearLockedRequestId,\r\n startLoading,\r\n getQuote,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n effectiveEvmAddress,\r\n solanaWalletAddress,\r\n differentAddress,\r\n slippage\r\n ]\r\n )\r\n\r\n const { sendTransaction, isPending } = useSendTransaction({\r\n mutation: {\r\n onSuccess: handleTransactionSuccess,\r\n onError: handleTransactionError\r\n }\r\n })\r\n\r\n const { approve, isNeedApprove } = getErc20Approval(config)\r\n\r\n // const publicClient = usePublicClient()\r\n // const { data: walletClient } = useWalletClient()\r\n\r\n const executeSwapWithData = useCallback(async () => {\r\n if (!data || !contractAddress) {\r\n throw new Error('Data or contract address not available')\r\n }\r\n\r\n let txOwner = effectiveEvmAddress\r\n // Try to find the correct connector with the following priority:\r\n // 1. Stored evmWalletConnectorId matching a wagmi connector\r\n // 2. Current wagmi connector from useAccount\r\n // 3. First available connector from connectors list (for newly connected wallets)\r\n let txConnector = evmWalletConnectorId\r\n ? connectors.find((c) => c.id === evmWalletConnectorId)\r\n : null\r\n\r\n if (!txConnector && connector) {\r\n txConnector = connector\r\n }\r\n\r\n // If still no connector but user has an EVM address connected, try to find any available connector\r\n if (!txConnector && effectiveEvmAddress && connectors.length > 0) {\r\n // Try to find the connector that matches the current connected state\r\n // This handles the case where user switched wallets and wagmi state is not fully synced\r\n txConnector = connectors[0]\r\n console.log(\r\n '[Transaction] Using first available connector as fallback:',\r\n txConnector?.id\r\n )\r\n }\r\n\r\n if (!hasEvmExecutionWallet || !txOwner || !txConnector) {\r\n try {\r\n console.log('[Transaction] Attempting to reconnect wallet...')\r\n const connections = await reconnectAsync()\r\n const latestConnection = connections.find(\r\n (item) => item.accounts?.length\r\n )\r\n\r\n if (latestConnection?.accounts?.[0]) {\r\n txOwner = latestConnection.accounts[0] as `0x${string}`\r\n }\r\n if (latestConnection?.connector) {\r\n txConnector = latestConnection.connector\r\n }\r\n } catch (reconnectError) {\r\n logger.error('Reconnect EVM wallet failed:', reconnectError)\r\n }\r\n }\r\n\r\n // Fallback: if wagmi connectors list is empty but Dynamic shows an EVM wallet,\r\n // re-trigger the Dynamic auth flow so DynamicWagmiConnector can bridge to wagmi\r\n if (!txConnector && effectiveEvmAddress && isEthWalletConnected) {\r\n console.log('[Transaction] Connectors empty but wallet detected, triggering Dynamic reconnect...')\r\n openModal()\r\n setUserCancelsTransaction(true)\r\n toaster.create({\r\n description: 'Please reconnect your EVM wallet and try again',\r\n type: 'info'\r\n })\r\n return\r\n }\r\n\r\n if (!txOwner || !txConnector) {\r\n setUserCancelsTransaction(true)\r\n openConnectModal()\r\n toaster.create({\r\n description: 'Please reconnect EVM wallet and try again',\r\n type: 'error'\r\n })\r\n return\r\n }\r\n\r\n try {\r\n // const isErc20Token = fromTokenInfo.address !== zeroAddress\r\n // if (isErc20Token && backApprove) {\r\n const isEthereumUSDT =\r\n fromTokenInfo.chain_id === 1 &&\r\n fromTokenInfo.address.toLowerCase() ===\r\n USDT_MAINNET_ADDRESS.toLowerCase()\r\n\r\n if (backApprove) {\r\n const chainId = fromTokenInfo.chain_id\r\n const tokenAddress = fromTokenInfo.address\r\n const owner = txOwner\r\n\r\n const spender = contractAddress\r\n const amount = parseUnits(fromAmount, fromTokenInfo.decimals)\r\n setIsApproving(true)\r\n // Keep quote polling during approval process\r\n console.log(\r\n '[Approve] Starting approval process, quote polling will continue...'\r\n )\r\n // After approval, continue polling until user confirms transaction in wallet\r\n try {\r\n if (isEthereumUSDT) {\r\n console.log('[Approve] Using Ethereum USDT double approval')\r\n await handleApprove(tokenAddress, spender, amount)\r\n } else {\r\n const _isNeedApprove = await isNeedApprove({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n })\r\n if (_isNeedApprove) {\r\n console.log('[Approve] Approval needed, executing approve...')\r\n await approve({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n })\r\n } else {\r\n console.log('[Approve] No approval needed, skipping approve')\r\n }\r\n }\r\n // Quote polling continues, will stop when user confirms transaction in wallet\r\n console.log(\r\n '[Approve] Approval completed, waiting 2 seconds before executing transaction...'\r\n )\r\n console.log(\r\n '[Approve] Quote polling continues until user confirms transaction in wallet'\r\n )\r\n const delayStart = Date.now()\r\n await new Promise((resolve) => setTimeout(resolve, 2000))\r\n console.log(\r\n `[Approve] Wait complete (${Date.now() - delayStart}ms), executing transaction now`\r\n )\r\n } finally {\r\n setIsApproving(false)\r\n }\r\n }\r\n // For all transactions (approve and non-approve), quote polling will continue\r\n // until user confirms the transaction in wallet\r\n console.log(\r\n '[Transaction] Preparing transaction, quote polling continues...'\r\n )\r\n const transactionOptions = {\r\n to: contractAddress,\r\n data: data,\r\n value: BigInt(txValue || '0')\r\n // value: isErc20Token ? undefined : parseEther(fromAmount)\r\n }\r\n const tx: TxGasInfo = {}\r\n if (gas && gas > 0) {\r\n tx.gas = gas\r\n }\r\n if (maxFeePerGas && maxFeePerGas > 0) {\r\n tx.maxFeePerGas = maxFeePerGas\r\n }\r\n if (maxPriorityFeePerGas && maxPriorityFeePerGas > 0) {\r\n tx.maxPriorityFeePerGas = maxPriorityFeePerGas\r\n }\r\n sendTransaction(\r\n Object.assign({}, transactionOptions, tx, { connector: txConnector })\r\n )\r\n\r\n // sendTransaction({\r\n // to: contractAddress,\r\n // data: data,\r\n // value: isErc20Token ? undefined : parseEther(fromAmount)\r\n // })\r\n } catch (error) {\r\n logger.error('Failed to create swap order:', error)\r\n setUserCancelsTransaction(true)\r\n clearLockedRequestId()\r\n toaster.create({\r\n description:\r\n (error as BaseError)?.shortMessage ||\r\n (error as Error)?.message ||\r\n 'Failed to create swap order',\r\n type: 'error'\r\n })\r\n setIsApproving(false)\r\n }\r\n }, [\r\n effectiveEvmAddress,\r\n approve,\r\n backApprove,\r\n connector,\r\n connectors,\r\n contractAddress,\r\n data,\r\n evmWalletConnectorId,\r\n fromAmount,\r\n fromTokenInfo.address,\r\n fromTokenInfo.chain_id,\r\n fromTokenInfo.decimals,\r\n gas,\r\n handleApprove,\r\n hasEvmExecutionWallet,\r\n isEthWalletConnected,\r\n isNeedApprove,\r\n maxFeePerGas,\r\n maxPriorityFeePerGas,\r\n openConnectModal,\r\n openModal,\r\n reconnectAsync,\r\n sendTransaction,\r\n setUserCancelsTransaction,\r\n clearLockedRequestId,\r\n txValue\r\n ])\r\n\r\n const { sendTx: handleSwap, isSwitching } = useGuardChain(\r\n executeSwapWithData,\r\n fromTokenInfo.chain_id\r\n )\r\n\r\n const buttonText = useMemo(() => {\r\n if (router_type) {\r\n if (router_type === 'wrap') {\r\n return !backApprove ? 'Wrap' : 'Approve & Wrap'\r\n } else if (router_type === 'unwrap') {\r\n return !backApprove ? 'Unwrap' : 'Approve & Unwrap'\r\n } else if (router_type === 'swap') {\r\n return !backApprove ? 'Swap' : 'Approve & Swap'\r\n } else {\r\n return !backApprove ? 'Bridge' : 'Approve & Bridge'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [router_type, backApprove])\r\n\r\n const buttonLoadingText = useMemo(() => {\r\n if (router_type) {\r\n if (router_type === 'wrap') {\r\n return !backApprove\r\n ? 'Wrapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Wrapping'\r\n } else if (router_type === 'unwrap') {\r\n return !backApprove\r\n ? 'Unwrapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Unwrapping'\r\n } else if (router_type === 'swap') {\r\n return !backApprove\r\n ? 'Swapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Swapping'\r\n } else {\r\n return !backApprove\r\n ? 'Bridging'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Bridging'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [isApproving, backApprove, isSwitching, router_type])\r\n\r\n const renderButtonTopWarningMessage = (txt: string) => {\r\n return (\r\n <Box\r\n as={'div'}\r\n color={'#81728c'}\r\n backgroundColor={'rgba(255, 210, 0, .1)'}\r\n border={'1px solid rgba(255, 210, 0, 1)'}\r\n minHeight={'18px'}\r\n lineHeight={1.5}\r\n padding={'6px 15px 6px 36px'}\r\n // lineHeight={'30px'}\r\n textAlign={'left'}\r\n fontSize={'12px'}\r\n borderRadius={'4px'}\r\n w={'100%'}\r\n marginBottom={'10px'}\r\n position={'relative'}\r\n // alignItems={'flex-start'}\r\n // justifyContent={'center'}\r\n // gap={0}\r\n >\r\n <Image\r\n src={'https://wheelx.fi/images/jth.png'}\r\n alt=\"error\"\r\n w={'14px'}\r\n h={'14px'}\r\n marginRight={'4px'}\r\n display={'inline'}\r\n position={'absolute'}\r\n left={'15px'}\r\n top={'8px'}\r\n ></Image>\r\n <Box>{txt}</Box>\r\n </Box>\r\n )\r\n }\r\n\r\n const renderLossWarning = () => {\r\n if (fromAmountToUsd && toAmountToUsd) {\r\n const fromPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const toPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (fromPrice > 50 && fromPrice > toPrice) {\r\n const loss = -(toPrice - fromPrice) / fromPrice\r\n if (loss >= 0.2) {\r\n renderButtonTopWarningMessage(\r\n 'The current price impact is relatively high'\r\n )\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n\r\n const {\r\n sendFromQuote,\r\n state: { isLoading: isSolanaTxLoading }\r\n } = useSolanaTransaction()\r\n\r\n useEffect(() => {\r\n if (fromAmountToUsd && toAmountToUsd) {\r\n const fromPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const toPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (fromPrice > 50 && fromPrice > +toPrice) {\r\n const loss = -(toPrice - fromPrice) / fromPrice\r\n if (loss < 0.2) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setLossTwenty(false)\r\n setLossFifty(false)\r\n } else if (loss >= 0.2 && loss < 0.5) {\r\n setLossTwenty(true)\r\n setLossFifty(false)\r\n } else {\r\n setLossTwenty(false)\r\n setLossFifty(true)\r\n }\r\n }\r\n }\r\n }, [fromAmountToUsd, toAmountToUsd])\r\n\r\n const renderSolanaWalletConnectButton = () => {\r\n return (\r\n <Button {...buttonStyles} onClick={openModal}>\r\n <Icon w={'24px'} h={'24px'} as={WalletIcon} />\r\n <Heading variant={buttonHeadingVariant}>Connect Solana Wallet</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const renderEvmWalletConnectButton = (name?: string) => {\r\n return (\r\n <Button {...buttonStyles} onClick={openConnectModal}>\r\n <Icon w={'24px'} h={'24px'} as={WalletIcon} />\r\n <Heading variant={buttonHeadingVariant}>\r\n Connect {name ? name : ''} Wallet\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n const getSolanaErrorToastMessage = (error: Error) => {\r\n const message = error.message || 'Solana transaction failed'\r\n const matched = message.match(/\\[(SOL_[A-Z_]+)\\]/)\r\n const code = matched?.[1]\r\n\r\n switch (code) {\r\n case 'SOL_WALLET_NOT_CONNECTED':\r\n case 'SOL_DYNAMIC_SIGNER_UNAVAILABLE':\r\n return 'No available Solana signing wallet detected. Please reconnect and try again'\r\n case 'SOL_DYNAMIC_SIGN_REJECTED':\r\n return 'You cancelled the wallet signature request. Please initiate the transaction again'\r\n case 'SOL_DYNAMIC_INVALID_SIGNATURE':\r\n return 'The wallet returned an invalid signature. Please try again later'\r\n case 'SOL_NETWORK_UNAVAILABLE':\r\n return 'Solana network connection is unavailable. Please check your network and try again'\r\n case 'SOL_DYNAMIC_SEND_FAILED':\r\n return 'Transaction submission failed. Please try again later'\r\n case 'SOL_TX_PARAMS_INVALID':\r\n return 'Invalid transaction parameters. Please refresh the quote and try again'\r\n default:\r\n return message\r\n }\r\n }\r\n\r\n const handleSolanaSwap = async () => {\r\n // Check Solana wallet connection status before initiating transaction\r\n if (!isSolanaWalletConnected || !solanaWalletAddress) {\r\n setUserCancelsTransaction(true)\r\n toaster.create({\r\n description: 'Please reconnect Solana wallet and try again',\r\n type: 'error'\r\n })\r\n openModal()\r\n return\r\n }\r\n\r\n console.log(\r\n '[Solana Transaction] Preparing transaction, quote polling continues...'\r\n )\r\n await sendFromQuote(\r\n solanaTxMessage || '', // Get from quote API\r\n solanaWalletAddress || '',\r\n {\r\n onSuccess: (signature) => {\r\n // console.log('Transaction successful:', signature)\r\n console.log(\r\n '[Solana Transaction] User confirmed transaction in wallet, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setSolanaFromTxHash(signature)\r\n setIsSolanaTransaction(true)\r\n setUserCancelsTransaction(false)\r\n console.log(\r\n '[Solana Transaction] Quote polling stopped, signature:',\r\n signature\r\n )\r\n console.log(\r\n '[Solana Transaction] Using locked request_id:',\r\n lockedRequestId\r\n )\r\n },\r\n onError: async (error) => {\r\n console.log(\r\n '[Solana Transaction] Transaction failed or rejected, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setUserCancelsTransaction(true)\r\n console.log(\r\n '[Solana Transaction] Clearing locked request_id and refetching quote...'\r\n )\r\n clearLockedRequestId()\r\n\r\n // Trigger refresh animation immediately\r\n startLoading()\r\n\r\n // Refetch quote immediately after user cancels transaction\r\n const vCode = extractVPathSegment()\r\n const fromAddress = solanaWalletAddress || ''\r\n\r\n const toAddress = toTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : differentAddress || effectiveEvmAddress || ''\r\n\r\n if (fromAddress && fromAmount) {\r\n console.log(\r\n '[Solana Transaction] Refetching quote after transaction rejection...'\r\n )\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n toaster.create({\r\n description: getSolanaErrorToastMessage(error),\r\n type: 'error'\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n const renderButton = () => {\r\n if (errorMessage || quoteMessage) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content7'\r\n }}\r\n color={theme.disabledButtonText}\r\n >\r\n {errorMessage || quoteMessage}\r\n </Text>\r\n </Button>\r\n )\r\n }\r\n\r\n if (\r\n (fromTokenInfo.isSolana || toTokenInfo.isSolana) &&\r\n !solanaWalletAddress\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n\r\n if (!fromTokenInfo.isSolana && !hasEvmUiWallet) {\r\n return renderEvmWalletConnectButton('EVM')\r\n }\r\n\r\n if (!hasEvmUiWallet && !solanaWalletAddress) {\r\n if (\r\n (fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n return renderEvmWalletConnectButton()\r\n } else if (!hasEvmUiWallet && solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && !toTokenInfo.isSolana) ||\r\n (!fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderEvmWalletConnectButton('EVM')\r\n }\r\n } else if (hasEvmUiWallet && !solanaWalletAddress) {\r\n // Check if user selected Solana token but hasn't connected Solana wallet\r\n if (fromTokenInfo.isSolana || toTokenInfo.isSolana) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n if (\r\n (fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (!fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n }\r\n\r\n // Check fetching state before other validations to show loading state during retry\r\n if (isFetching || (fromAmount && !toAmount)) {\r\n return (\r\n <Button\r\n {...buttonStyles}\r\n disabled\r\n // loading\r\n loadingText={''}\r\n bg={theme.disabledButtonBg}\r\n >\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>\r\n <HStack gap={0}>\r\n <HStack\r\n w={'28px'}\r\n h={'28px'}\r\n position={'relative'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n gap={0}\r\n top={'-1px'}\r\n marginRight={'5px'}\r\n >\r\n <Image\r\n display={'block'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n <Text\r\n position={'absolute'}\r\n w={'28px'}\r\n h={'28px'}\r\n top={0}\r\n left={0}\r\n border={`3px solid ${theme.disabledButtonText}`}\r\n borderRadius={'100%'}\r\n boxSizing={'border-box'}\r\n ></Text>\r\n </HStack>\r\n <Text>AI is Thinking the Best Price</Text>\r\n </HStack>\r\n {/* Fetching Best Price */}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (isSelectPredictionChain && !differentAddress) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>Enter Address</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (!validations.hasValidAmounts) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>Enter Amount</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (insufficientBalance || isInsufficientBalance) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>\r\n {quoteMessage ? quoteMessage : 'Insufficient Balance'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const isSolanaSwapFlow =\r\n fromTokenInfo.isSolana && Boolean(solanaWalletAddress)\r\n const isLoading =\r\n isPending ||\r\n isSwitching ||\r\n isApproving ||\r\n (isSolanaSwapFlow && isSolanaTxLoading)\r\n return (\r\n <Button\r\n {...buttonStyles}\r\n onClick={() => {\r\n if (isLoading) return\r\n // Quote polling will continue until user confirms transaction in wallet\r\n console.log(\r\n '[Button] User clicked confirm button, quote polling continues...'\r\n )\r\n // Lock the current request_id when user clicks the button\r\n lockRequestId()\r\n console.log('[Button] Locked request_id:', lockedRequestId)\r\n\r\n if (isSolanaSwapFlow) {\r\n void handleSolanaSwap()\r\n } else {\r\n handleSwap()\r\n }\r\n }}\r\n disabled={!validations.canSwap || lossFifty || isLoading}\r\n bg={isLoading ? theme.normalButtonBg : theme.highlightButtonBg}\r\n color={isLoading ? theme.normalButtonText : theme.highlightButtonText}\r\n loading={isLoading}\r\n spinner={<Spinner size=\"sm\" color={isLoading ? theme.normalButtonText : theme.highlightButtonText} />}\r\n loadingText={\r\n <Heading variant={buttonHeadingVariant} color={isLoading ? theme.normalButtonText : theme.highlightButtonText}>\r\n {isSolanaSwapFlow && isSolanaTxLoading\r\n ? `${buttonLoadingText}...`\r\n : buttonLoadingText}\r\n </Heading>\r\n }\r\n >\r\n <Heading variant={buttonHeadingVariant} color={isLoading ? theme.normalButtonText : theme.highlightButtonText}>{buttonText}</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <VStack w={'100%'} gap={0}>\r\n {showQuoteRoundWarning &&\r\n renderButtonTopWarningMessage(\r\n 'Confirm in wallet may cause the transaction to fail. You can consider canceling and resubmitting the transaction.'\r\n )}\r\n {renderLossWarning()}\r\n {renderButton()}\r\n </VStack>\r\n <Image\r\n display={'none'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n </>\r\n )\r\n}\r\n","import { ChainInfo, TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { FavoriteItem } from './FavoritesContext'\r\n\r\nexport function getOrderedTokens(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const aIsDin = a.token_type === 'preset'\r\n const bIsDin = b.token_type === 'preset'\r\n\r\n if (aIsDin && !bIsDin) return -1\r\n if (!aIsDin && bIsDin) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function getOrderedTokensAssets(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null,\r\n propertyName?: string\r\n) {\r\n // console.log('###### assets sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n if (propertyName === 'platform_id') {\r\n return token.platform_id === selectedChain\r\n }\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n if (a.usdPrice === null && b.usdPrice === null) {\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') return -1\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') return 1\r\n if (a.balance === 'NaN' && b.balance === 'NaN') return 0\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n return 0\r\n }\r\n\r\n if (a.usdPrice === null) return 1\r\n if (b.usdPrice === null) return -1\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const firstCharA = a.name.toLowerCase()\r\n const firstCharB = b.name.toLowerCase()\r\n if (firstCharA < firstCharB) return -1\r\n if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\nexport function getOrderedTokensChainNormal(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null,\r\n propertyName?: string\r\n) {\r\n // console.log('###### chain normal sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n if (propertyName === 'platform_id') {\r\n return token.platform_id === selectedChain\r\n }\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function getOrderedTokensChainSearch(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n // console.log('###### chain search sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const aIsDin = a.token_type === 'preset'\r\n const bIsDin = b.token_type === 'preset'\r\n\r\n if (aIsDin && !bIsDin) return -1\r\n if (!aIsDin && bIsDin) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function processChains(\r\n favorites: FavoriteItem[],\r\n allNetworks: ChainInfo[]\r\n) {\r\n const favoriteNetworkIds = new Set(favorites.map((fav) => fav.networkId))\r\n const favoriteChains = allNetworks.filter((network) =>\r\n favoriteNetworkIds.has(network.chain_id)\r\n )\r\n const nonFavoriteChains = allNetworks.filter(\r\n (network) => !favoriteNetworkIds.has(network.chain_id)\r\n )\r\n return { favoriteChains, nonFavoriteChains }\r\n}\r\n\r\nexport function mergeAndDeduplicateChains(\r\n arr1: ChainInfo[],\r\n arr2: ChainInfo[]\r\n): ChainInfo[] {\r\n const networkMap = new Map<number, ChainInfo>()\r\n const combinedArray = [...arr1, ...arr2]\r\n combinedArray.forEach((network) => {\r\n if (!networkMap.has(network.chain_id)) {\r\n networkMap.set(network.chain_id, network)\r\n }\r\n })\r\n return Array.from(networkMap.values())\r\n}\r\n\r\nexport function mergeAndDeduplicate(arr1: TokenInfo[], arr2: TokenInfo[]) {\r\n const mergedArray = [...arr1, ...arr2]\r\n const map = new Map()\r\n\r\n for (const item of mergedArray) {\r\n const key = `${item.address}-${item.chain_id}`\r\n if (!map.has(key)) {\r\n map.set(key, item)\r\n } else {\r\n const existingItem = map.get(key)\r\n const existingHasPreset = existingItem.token_type === 'preset'\r\n const currentHasPreset = item.token_type === 'preset'\r\n if (existingHasPreset && !currentHasPreset) {\r\n continue\r\n } else if (!existingHasPreset && currentHasPreset) {\r\n map.set(key, item)\r\n } else {\r\n continue\r\n }\r\n }\r\n }\r\n\r\n return Array.from(map.values())\r\n}\r\n\r\nexport function filterTokenByType(\r\n items: TokenInfo[],\r\n searchString: string\r\n): TokenInfo[] {\r\n return items.filter((item) => item.categories?.includes(searchString))\r\n}\r\n\r\nexport function filterTokenUnType(\r\n items: TokenInfo[],\r\n excludeTypes: string | string[]\r\n): TokenInfo[] {\r\n const typesToExclude = Array.isArray(excludeTypes) ? excludeTypes : [excludeTypes]\r\n return items.filter((item) => {\r\n if (!item.categories) return true\r\n return !typesToExclude.some(type => item.categories?.includes(type))\r\n })\r\n}\r\n\r\nexport function getOrderedTokensChainPrediction(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n // console.log('###### chain normal sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.platform_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\nexport const enableTestnet = () => false \r\n","export const mainnet: { tokens: number[], chains: number[], id: number } = { tokens: [], chains: [], id: 1 }\r\n","export const monad: { tokens: number[], chains: number[], id: number } = { tokens: [], chains: [], id: 10143 }\r\n","export const stable: { tokens: number[], id: number } = { tokens: [], id: 1 }\r\n","import {\r\n ChainsAndTokens,\r\n mergeTokensWithCompositeKey,\r\n TokenBalance,\r\n TokenInfoWithBalance\r\n} from '../../../api'\r\nimport { enableTestnet } from '../utils'\r\nimport { useCallback, useMemo, useState } from 'react'\r\nimport { base, baseSepolia, sepolia, bsc, soneium, ink } from 'viem/chains'\r\nimport { mainnet } from '../../../consts/mainnet'\r\nimport { getOrderedTokensChainNormal } from '../utils'\r\nimport { monad } from '../../../consts/monad'\r\nimport { stable } from '../../../consts/stable'\r\n// import { plasma } from '../consts/plasma'\r\n\r\ninterface Props {\r\n data?: ChainsAndTokens\r\n selectedChain: number | null\r\n userBalances?: TokenBalance[]\r\n selectedChainByPlatformId?: number | null\r\n allowedChainIds?: number[]\r\n allowedTokenSet?: Set<string> | null\r\n}\r\n\r\nexport const popularChainsIds: number[] = enableTestnet()\r\n ? [sepolia.id, baseSepolia.id]\r\n : [mainnet.id, base.id, ink.id, bsc.id, monad.id, soneium.id, stable.id]\r\n\r\nexport const useChainsAndTokensForSelect = ({\r\n data,\r\n selectedChain,\r\n userBalances,\r\n selectedChainByPlatformId,\r\n allowedChainIds,\r\n allowedTokenSet\r\n}: Props) => {\r\n // const chains = data?.chains || []\r\n // const tokensData = data?.tokens || []\r\n // const predictionChains = data?.deposit_platforms?.prediction?.chains || []\r\n // const predictionTokens = data?.deposit_platforms?.prediction?.tokens || []\r\n\r\n const rawChains = useMemo(\r\n () => [\r\n ...(data?.chains || []),\r\n ...(data?.deposit_platforms?.prediction?.chains || [])\r\n ],\r\n [data?.chains, data?.deposit_platforms?.prediction?.chains]\r\n )\r\n\r\n // Filter chains to the allowed set (if config restricts them)\r\n const allChains = useMemo(() => {\r\n if (!allowedChainIds || allowedChainIds.length === 0) return rawChains\r\n const allowedSet = new Set(allowedChainIds)\r\n return rawChains.filter(c => allowedSet.has(c.chain_id))\r\n }, [rawChains, allowedChainIds])\r\n\r\n const rawTokens = useMemo(\r\n () => [\r\n ...(data?.tokens || []),\r\n ...(data?.deposit_platforms?.prediction?.tokens || [])\r\n ],\r\n [data?.tokens, data?.deposit_platforms?.prediction?.tokens]\r\n )\r\n\r\n // Filter tokens to the allowed set (if config restricts them)\r\n const allTokens = useMemo(() => {\r\n if (!allowedTokenSet) return rawTokens\r\n return rawTokens.filter(t => allowedTokenSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }, [rawTokens, allowedTokenSet])\r\n\r\n const [searchChainsValue, setSearchChainsValue] = useState('')\r\n const [searchTokensValue, setSearchTokensValue] = useState('')\r\n\r\n const handleSearchChains = (value: string) => {\r\n setSearchChainsValue(value)\r\n }\r\n\r\n const handleSearchTokens = (value: string) => {\r\n setSearchTokensValue(value)\r\n }\r\n\r\n const resetSearch = useCallback(() => {\r\n setSearchChainsValue('')\r\n setSearchTokensValue('')\r\n }, [])\r\n\r\n const popularChains = useMemo(\r\n () =>\r\n (allChains ?? [])\r\n .filter((chain) => chain.is_popular === true)\r\n .sort((a, b) => {\r\n const nameA = a.name.toLowerCase()\r\n const nameB = b.name.toLowerCase()\r\n if (nameA < nameB) return -1\r\n if (nameA > nameB) return 1\r\n return 0\r\n }),\r\n [allChains]\r\n )\r\n // console.log('popularChains: ', popularChains)\r\n\r\n const currentChain = useMemo(() => {\r\n if (selectedChainByPlatformId) {\r\n return allChains?.find(\r\n (chain) => chain.platform_id === selectedChainByPlatformId\r\n )\r\n } else {\r\n return allChains?.find((chain) => chain.chain_id === selectedChain)\r\n }\r\n }, [allChains, selectedChain])\r\n\r\n const searchChains = useMemo(() => {\r\n return allChains?.filter((chain) => {\r\n if (searchChainsValue === '') return false\r\n return (\r\n chain.name.toLowerCase().includes(searchChainsValue.toLowerCase()) ||\r\n chain.chain_id.toString().includes(searchChainsValue.toLowerCase())\r\n )\r\n })\r\n }, [allChains, searchChainsValue])\r\n\r\n // A-Z\r\n const orderedChains = useMemo(\r\n () =>\r\n allChains\r\n ?.filter((chain) => !chain.is_popular)\r\n .sort((a, b) => {\r\n const firstCharA = a.name.toLowerCase()\r\n const firstCharB = b.name.toLowerCase()\r\n if (firstCharA < firstCharB) return -1\r\n if (firstCharA > firstCharB) return 1\r\n // if (a.name < b.name) return -1\r\n // if (a.name > b.name) return 1\r\n return 0\r\n }),\r\n [allChains]\r\n )\r\n\r\n // const [tokensWithBalances, setTokensWithBalances] = useState<\r\n // TokenInfoWithBalance[] | undefined\r\n // >(allTokens)\r\n\r\n // const [tokensAndBalances, setTokensAndBalances] = useState<\r\n // TokenInfoWithBalance[] | undefined\r\n // >(allTokens)\r\n\r\n // useEffect(() => {\r\n // // console.log('tokensData: ', tokensData, userBalances)\r\n // if (allTokens) {\r\n // if (userBalances) {\r\n // const tokensWithBalances = allTokens.map((token) => {\r\n // const balance = userBalances.find(\r\n // (balance) =>\r\n // balance.chain_id === token.chain_id &&\r\n // balance.token.address === token.address\r\n // )\r\n // return {\r\n // ...token,\r\n // balance: balance?.balance,\r\n // usdPrice: balance?.price\r\n // }\r\n // })\r\n // return setTokensWithBalances(tokensWithBalances)\r\n // }\r\n // setTokensWithBalances(allTokens)\r\n // }\r\n // }, [allTokens, userBalances])\r\n\r\n // useEffect(() => {\r\n // if (tokensWithBalances?.length && userBalances?.length) {\r\n // const newUserBalances: TokenInfoWithBalance[] | undefined = []\r\n // userBalances.map((item) => {\r\n // const newItem = {\r\n // ...item.token,\r\n // balance: item?.balance,\r\n // usdPrice: item?.price\r\n // }\r\n // newUserBalances.push(newItem)\r\n // })\r\n // const merged = mergeTokensWithCompositeKey(\r\n // newUserBalances,\r\n // tokensWithBalances\r\n // )\r\n // setTokensAndBalances(merged)\r\n // } else {\r\n // setTokensAndBalances(tokensWithBalances)\r\n // }\r\n // }, [tokensWithBalances, userBalances])\r\n\r\n const tokensWithBalances = useMemo(() => {\r\n if (!allTokens) return undefined\r\n if (userBalances) {\r\n return allTokens.map((token) => {\r\n const balance = userBalances.find(\r\n (balance) =>\r\n balance.chain_id === token.chain_id &&\r\n balance.token.address === token.address\r\n )\r\n return {\r\n ...token,\r\n balance: balance?.balance,\r\n usdPrice: balance?.price\r\n }\r\n })\r\n }\r\n return allTokens\r\n }, [allTokens, userBalances])\r\n\r\n const tokensAndBalances = useMemo(() => {\r\n let result: TokenInfoWithBalance[] | undefined\r\n if (tokensWithBalances?.length && userBalances?.length) {\r\n const newUserBalances: TokenInfoWithBalance[] | undefined = []\r\n userBalances.forEach((item) => {\r\n const newItem = {\r\n ...item.token,\r\n balance: item?.balance,\r\n usdPrice: item?.price\r\n }\r\n newUserBalances.push(newItem)\r\n })\r\n result = mergeTokensWithCompositeKey(newUserBalances, tokensWithBalances)\r\n } else {\r\n result = tokensWithBalances\r\n }\r\n // Re-apply config token filter after merge (user balances may introduce tokens not in config)\r\n if (result && allowedTokenSet) {\r\n result = result.filter(t => allowedTokenSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }\r\n return result\r\n }, [tokensWithBalances, userBalances, allowedTokenSet])\r\n\r\n // console.log('###### all tokensWithBalances #######:', tokensWithBalances)\r\n // console.log('###### all tokensAndBalances #######:', tokensAndBalances)\r\n\r\n const tokens = useMemo(() => {\r\n if (currentChain?.platform_id && currentChain.platform_id > 0) {\r\n return getOrderedTokensChainNormal(\r\n tokensAndBalances,\r\n currentChain.platform_id,\r\n 'platform_id'\r\n )\r\n } else {\r\n return getOrderedTokensChainNormal(tokensAndBalances, selectedChain)\r\n }\r\n }, [selectedChain, tokensAndBalances, currentChain])\r\n\r\n // console.log(\r\n // '#### selectedChain ######: ',\r\n // selectedChain,\r\n // tokens,\r\n // tokensAndBalances\r\n // )\r\n\r\n return {\r\n popularChains,\r\n orderedChains,\r\n searchChains,\r\n tokens,\r\n searchChainsValue,\r\n searchTokensValue,\r\n handleSearchChains,\r\n handleSearchTokens,\r\n resetSearch,\r\n allChains\r\n }\r\n}\r\n","import { create } from 'zustand'\r\n\r\ninterface UserHasSelectedFromNetwork {\r\n userHasSelectedFromNetwork: boolean\r\n setUserHasSelectedFromNetwork: (userHasSelectedFromNetwork: boolean) => void\r\n}\r\n\r\nexport const useUserHasSelectedFromNetwork = create<UserHasSelectedFromNetwork>(\r\n (set) => ({\r\n userHasSelectedFromNetwork: false,\r\n setUserHasSelectedFromNetwork: (userHasSelectedFromNetwork) =>\r\n set({ userHasSelectedFromNetwork })\r\n })\r\n)\r\n","import { TokenInfoWithBalance, useTokenInfo } from '../../../api'\r\nimport { useMemo } from 'react'\r\nimport {\r\n getOrderedTokensChainSearch,\r\n getOrderedTokensAssets,\r\n mergeAndDeduplicate\r\n} from '../../utils'\r\n\r\ninterface Props {\r\n searchTokensValue: string\r\n selectedChain?: number | null\r\n allTokens?: TokenInfoWithBalance[]\r\n}\r\n\r\nexport const useSearchTokens = ({\r\n searchTokensValue,\r\n selectedChain,\r\n allTokens\r\n}: Props) => {\r\n const { data: searchTokenInfoResult, isLoading: isLoadingSearchTokenInfo } =\r\n useTokenInfo({\r\n value: searchTokensValue,\r\n chainId: selectedChain ?? undefined\r\n })\r\n\r\n const newAllToken = useMemo(\r\n () =>\r\n allTokens?.map((token) => ({\r\n ...token,\r\n token_type: 'preset' as const\r\n })),\r\n [allTokens]\r\n )\r\n\r\n const searchTokensInfo = useMemo(() => {\r\n if (!searchTokensValue) {\r\n return undefined\r\n }\r\n\r\n if (searchTokenInfoResult) {\r\n const tokenWithBalances = searchTokenInfoResult.map((token) => {\r\n const balance = newAllToken?.find(\r\n (balance) =>\r\n balance.chain_id === token.chain_id &&\r\n balance.address === token.address\r\n )\r\n return {\r\n ...token,\r\n balance: balance?.balance,\r\n usdPrice: balance?.usdPrice\r\n }\r\n })\r\n\r\n const filteredTokens = newAllToken?.filter((token) => {\r\n return token.symbol\r\n .toLowerCase()\r\n .includes(searchTokensValue.toLowerCase())\r\n })\r\n\r\n if (filteredTokens) {\r\n const newArr = mergeAndDeduplicate(tokenWithBalances, filteredTokens)\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(newArr, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(newArr, selectedChain)\r\n }\r\n } else {\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(tokenWithBalances, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(tokenWithBalances, selectedChain)\r\n }\r\n }\r\n } else {\r\n const filteredTokens = newAllToken?.filter((token) => {\r\n if (searchTokensValue === '') return true\r\n return token.symbol\r\n .toLowerCase()\r\n .includes(searchTokensValue.toLowerCase())\r\n })\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(filteredTokens, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(filteredTokens, selectedChain)\r\n }\r\n }\r\n }, [newAllToken, searchTokenInfoResult, searchTokensValue, selectedChain])\r\n\r\n return {\r\n searchTokensInfo,\r\n isLoadingSearchTokenInfo\r\n }\r\n}\r\n","import { Box, Icon } from '@chakra-ui/react'\r\nimport { MdOutlineStarOutline, MdOutlineStarPurple500 } from 'react-icons/md'\r\nimport { useFavoritesContext } from './FavoritesContext'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface FavoriteButtonProps {\r\n networkId: number\r\n networkName?: string\r\n}\r\n\r\nexport const FavoriteButton: React.FC<FavoriteButtonProps> = ({\r\n networkId,\r\n networkName\r\n}) => {\r\n const { theme } = useWidgetTheme()\r\n const { isFavorite, addFavorite, removeFavorite } = useFavoritesContext()\r\n const favorited = isFavorite(networkId)\r\n\r\n const handleToggleFavorite = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n try {\r\n if (favorited) {\r\n removeFavorite(networkId)\r\n } else {\r\n addFavorite(networkId, networkName)\r\n }\r\n } catch (error) {\r\n console.error('Error toggling favorite:', error)\r\n }\r\n }\r\n\r\n return (\r\n <Box\r\n onClick={handleToggleFavorite}\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"pointer\"\r\n >\r\n {!favorited ? (\r\n <Icon\r\n as={MdOutlineStarOutline}\r\n fontSize=\"16px\"\r\n color={theme.weakTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n ) : (\r\n <Icon\r\n as={MdOutlineStarPurple500}\r\n fontSize=\"16px\"\r\n color={theme.highlightTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n )}\r\n </Box>\r\n )\r\n}\r\n","import { Box, HStack, Icon, Image, useBreakpointValue } from '@chakra-ui/react'\r\n\r\nimport { Text } from '../ui'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { ArrowFillRightIcon } from '../icons'\r\nimport { DingIcon } from '../icons'\r\nimport { useEffect, useState } from 'react'\r\nimport { FavoriteButton } from './FavoriteButton'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n chainId: number\r\n isSelected?: boolean\r\n isPopular?: boolean\r\n onClick: () => void\r\n isSelectingFromToken: boolean\r\n isPredictionChain?: boolean\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n}\r\nexport const Network = ({\r\n chainId,\r\n isSelected,\r\n onClick,\r\n isPopular,\r\n isSelectingFromToken,\r\n isPredictionChain,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains, setIsSelectPredictionChain } = useChainsStore()\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n const [isFromTestnet, setIsFromTestnet] = useState(false)\r\n const [isToTestnet, setIsToTestnet] = useState(false)\r\n\r\n const isMobile = useBreakpointValue({ base: true, md: false })\r\n const [isStarVisible, setIsStarVisible] = useState(false)\r\n const [isPopularIconShow, setIsPopularIconShow] = useState(false)\r\n const address = useEvmAddress()\r\n\r\n const handleClick = () => {\r\n const currentChainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n \r\n // Reset testnet limit based on what network is being selected\r\n if (currentChainInfo?.is_testnet) {\r\n // If clicking a testnet, re-enable the testnet limit\r\n setDisableTestnetLimit(false)\r\n } else {\r\n // If clicking a non-testnet, disable the testnet limit\r\n setDisableTestnetLimit(true)\r\n }\r\n \r\n onClick()\r\n if (isPredictionChain) {\r\n setIsSelectPredictionChain(true)\r\n } else {\r\n if (!isSelectingFromToken) {\r\n setIsSelectPredictionChain(false)\r\n }\r\n }\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(true)\r\n setIsPopularIconShow(true)\r\n }\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(false)\r\n setIsPopularIconShow(false)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isMobile) {\r\n setIsStarVisible(true)\r\n setIsPopularIconShow(true)\r\n }\r\n }, [isMobile])\r\n\r\n useEffect(() => {\r\n if (disableTestnetLimit) {\r\n setIsToTestnet(false)\r\n setIsFromTestnet(false)\r\n return\r\n }\r\n const currentChainId = chainInfo?.chain_id\r\n const isCurrentChainTestnet = chainInfo?.is_testnet\r\n \r\n if (!isSelectingFromToken) {\r\n // When selecting to token, check if from is a testnet\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n const isFromChainTestnet = fromChainInfo?.is_testnet\r\n\r\n if (isFromChainTestnet) {\r\n if (isCurrentChainTestnet && currentChainId === fromChainId) {\r\n setIsToTestnet(false)\r\n } else if (!isCurrentChainTestnet || currentChainId !== fromChainId) {\r\n setIsToTestnet(true)\r\n }\r\n }\r\n } else {\r\n // When selecting from token, check if to is a testnet\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n const isToChainTestnet = toChainInfo?.is_testnet\r\n\r\n if (isToChainTestnet) {\r\n if (isCurrentChainTestnet && currentChainId === toChainId) {\r\n setIsFromTestnet(false)\r\n } else if (!isCurrentChainTestnet || currentChainId !== toChainId) {\r\n setIsFromTestnet(true)\r\n }\r\n }\r\n }\r\n }, [\r\n isSelectingFromToken,\r\n fromChainId,\r\n toChainId,\r\n chainInfo,\r\n disableTestnetLimit,\r\n chains\r\n ])\r\n\r\n if (chainInfo) {\r\n if (!chainInfo.outbound && isSelectingFromToken) {\r\n return null\r\n }\r\n if (!chainInfo.inbound && !isSelectingFromToken) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n <HStack\r\n px={2}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={handleClick}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n data-selected={isSelected ? 'true' : 'false'}\r\n opacity={isToTestnet || isFromTestnet ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelected ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelected ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={['100%', '82%']}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <Image\r\n src={chainInfo?.chain_icon || `https://wheelx.fi/images/networks/${chainId}.png`}\r\n w={'24px'}\r\n h={'24px'}\r\n alt={chainInfo?.name}\r\n borderRadius={'full'}\r\n />\r\n <Text\r\n variant={{\r\n base: 'content7',\r\n md: 'content6_1'\r\n }}\r\n lineClamp=\"1\"\r\n flex={1}\r\n w={0}\r\n whiteSpace={'nowrap'}\r\n overflow={'hidden'}\r\n textOverflow={'ellipsis'}\r\n display={'flex'}\r\n color={theme.defaultTextColor}\r\n >\r\n {chainInfo?.name}\r\n {chainInfo?.chain_id === 1151111081099710 && (\r\n <Image\r\n src=\"https://wheelx.fi/images/new.png\"\r\n alt=\"new\"\r\n w={'22px'}\r\n marginLeft={'3px'}\r\n borderRadius={'3px'}\r\n objectFit={'contain'}\r\n ></Image>\r\n )}\r\n </Text>\r\n {isStarVisible && address && !isPopular && !isPredictionChain && (\r\n <FavoriteButton networkId={chainId} networkName={chainInfo?.name} />\r\n )}\r\n {isPopularIconShow && isPopular && (\r\n <Box\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"default\"\r\n >\r\n <Icon\r\n as={DingIcon}\r\n fontSize=\"14px\"\r\n width={'14px'}\r\n h={'14px'}\r\n color={theme.highlightTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n </Box>\r\n )}\r\n </HStack>\r\n {isSelected && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )\r\n}\r\n","import { TokenInfo } from '../../api'\r\n\r\nexport interface ChainInfoShort {\r\n name: string\r\n rpc_url: string\r\n rpc_fallback: string[]\r\n chain_icon: string\r\n chain_id: number\r\n platform_id?: number\r\n}\r\nexport function countLeadingZerosAfterDecimal(numStr: string): number {\r\n if (!numStr.includes('.')) return 0\r\n\r\n const [, decimalPart] = numStr.split('.')\r\n const firstNonZeroIndex = decimalPart.search(/[1-9]/)\r\n\r\n if (firstNonZeroIndex === -1) return 0\r\n return firstNonZeroIndex\r\n}\r\nexport function findItemByName(\r\n arr: Array<ChainInfoShort>,\r\n targetName: string\r\n): [boolean, ChainInfoShort | undefined] {\r\n const foundItem = arr.find(\r\n (item) =>\r\n item.name.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase()\r\n )\r\n return [foundItem !== undefined, foundItem]\r\n}\r\nexport function findItemBySymbol(\r\n arr: Array<TokenInfo>,\r\n targetName: string,\r\n chainId: number | undefined,\r\n platform_id?: number | undefined\r\n): [boolean, TokenInfo | undefined] {\r\n const foundItem = arr.find((item) => {\r\n if (platform_id && platform_id > 0) {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.platform_id === platform_id\r\n )\r\n } else {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.chain_id === chainId\r\n )\r\n }\r\n })\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nexport function getBaseUrl(): string {\r\n return window.location.origin + window.location.pathname\r\n}\r\n\r\n/**\r\n * Formats a number with appropriate units (K for thousands, M for millions),\r\n * displaying integers without decimal parts for whole numbers and removing trailing zeros in decimals.\r\n * @param num - The number to be formatted.\r\n * @returns The formatted string with unit suffix if applicable.\r\n */\r\nexport function formatNumberWithUnits(num: number): string {\r\n if (num < 100000) {\r\n // For numbers less than 100,000: display integers directly, decimals as-is but remove trailing zeros\r\n const numStr = num.toString()\r\n return numStr.includes('.') ? numStr.replace(/\\.?0+$/, '') : numStr\r\n } else if (num < 1000000) {\r\n // Between 100,000 and 1,000,000: convert to K (thousands) unit\r\n const valueInK = num / 1000\r\n // Display as XK for integers, X.XXK for decimals (remove trailing zeros)\r\n const formatted =\r\n valueInK % 1 === 0\r\n ? `${valueInK}K`\r\n : `${valueInK.toFixed(2)}K`.replace(/\\.?0+K$/, 'K')\r\n return formatted\r\n } else {\r\n // For 1,000,000 and above: convert to M (millions) unit\r\n const valueInM = num / 1000000\r\n // Display as XM for integers, X.XXXM for decimals (remove trailing zeros)\r\n const formatted =\r\n valueInM % 1 === 0\r\n ? `${valueInM}M`\r\n : `${valueInM.toFixed(3)}M`.replace(/\\.?0+M$/, 'M')\r\n return formatted\r\n }\r\n}\r\n\r\n/**\r\n * Formats a numeric string to have at most 3 decimal places with rounding.\r\n * Preserves existing decimals if less than or equal to 3, shows integer if no decimals.\r\n * @param numericString - The string representation of the number to format.\r\n * @returns Formatted string with appropriate decimal places (rounded if necessary).\r\n * @throws Error if the input string is not a valid number.\r\n */\r\nexport function formatDecimalStringWithRounding(numericString: string): string {\r\n // Convert the input string to a number\r\n const numberValue = parseFloat(numericString)\r\n\r\n // Check if the conversion resulted in a valid number\r\n if (isNaN(numberValue)) {\r\n throw new Error(\r\n 'Invalid numeric string provided. Input must be a valid number.'\r\n )\r\n }\r\n\r\n // Find the position of the decimal point in the original string\r\n const decimalIndex = numericString.indexOf('.')\r\n\r\n // If there's no decimal point, return the string as it represents an integer\r\n if (decimalIndex === -1) {\r\n return numericString\r\n }\r\n\r\n // Calculate the number of decimal places in the original string\r\n const decimalPlaces = numericString.length - decimalIndex - 1\r\n\r\n let result: string\r\n\r\n // If there are 3 or fewer decimal places, use the original string\r\n if (decimalPlaces <= 3) {\r\n result = numericString\r\n } else {\r\n // Use toFixed(3) to round and keep exactly 3 decimal places\r\n result = numberValue.toFixed(3)\r\n }\r\n\r\n // Remove trailing zeros after the decimal point[6,8](@ref)\r\n // If all decimals are zeros, remove the decimal point as well\r\n result = result.replace(/(\\.\\d*?[1-9])0+$|\\.0+$/, '$1')\r\n\r\n return result\r\n}\r\n","'use client'\r\nimport { formatTokenAmount } from '../utils'\r\nimport { countLeadingZerosAfterDecimal } from './utils'\r\nimport { Heading } from '../ui'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\ninterface Props extends React.ComponentProps<typeof Heading> {\r\n amount: Fraction\r\n prefix?: string\r\n suffix?: string\r\n decimals?: number\r\n}\r\n\r\nexport const TokenAmountHeading = ({\r\n amount,\r\n decimals,\r\n prefix,\r\n suffix,\r\n ...props\r\n}: Props) => {\r\n const _amount = formatTokenAmount({\r\n amount,\r\n decimals\r\n })\r\n\r\n const leadingZeros = countLeadingZerosAfterDecimal(_amount)\r\n if (leadingZeros > 5) {\r\n return (\r\n <Heading variant={'heading8'} {...props} as=\"div\">\r\n {prefix} {_amount.slice(0, 3)}\r\n <span\r\n style={{\r\n display: 'inline-block',\r\n transform: 'scale(0.6) translateY(8px)'\r\n }}\r\n >\r\n {leadingZeros}\r\n </span>\r\n {_amount.slice(leadingZeros + 2)} {suffix}\r\n </Heading>\r\n )\r\n }\r\n\r\n return (\r\n <Heading variant={'heading11'} {...props} as=\"div\">\r\n {prefix} {_amount} {suffix}\r\n </Heading>\r\n )\r\n}\r\n","'use client'\r\nimport { formatTokenAmount } from '../utils'\r\nimport { countLeadingZerosAfterDecimal } from './utils'\r\nimport { Text } from '../ui'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\ninterface Props extends React.ComponentProps<typeof Text> {\r\n amount: Fraction\r\n prefix?: string\r\n suffix?: string\r\n decimals?: number\r\n}\r\n\r\nexport const TokenAmountText = ({\r\n amount,\r\n decimals,\r\n prefix,\r\n suffix,\r\n ...props\r\n}: Props) => {\r\n const _amount = formatTokenAmount({\r\n amount,\r\n decimals\r\n })\r\n\r\n const leadingZeros = countLeadingZerosAfterDecimal(_amount)\r\n if (leadingZeros > 5) {\r\n return (\r\n <Text variant={'content8'} {...props}>\r\n {prefix} {_amount.slice(0, 3)}\r\n <span\r\n style={{\r\n display: 'inline-block',\r\n transform: 'scale(0.6) translateY(8px)'\r\n }}\r\n >\r\n {leadingZeros}\r\n </span>\r\n {_amount.slice(leadingZeros + 2)} {suffix}\r\n </Text>\r\n )\r\n }\r\n\r\n return (\r\n <Text variant={'content7'} {...props}>\r\n {prefix} {_amount} {suffix}\r\n </Text>\r\n )\r\n}\r\n","import { Box, BoxProps, ConditionalValue } from '@chakra-ui/react'\r\nimport { OptimizedImage } from '../ui/OptimizedImage'\r\n\r\nconst chainsInfo: Record<number, any> = {}\r\nimport { TokenInfo } from '../../api'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\ninterface TokenIconProps extends BoxProps {\r\n smallW?: ConditionalValue<number | string> | undefined\r\n smallH?: ConditionalValue<number | string> | undefined\r\n smallT?: ConditionalValue<number | string> | undefined\r\n smallB?: ConditionalValue<number | string> | undefined\r\n smallL?: ConditionalValue<number | string> | undefined\r\n smallR?: ConditionalValue<number | string> | undefined\r\n tokenInfo?: TokenInfo | null\r\n customChainLogo?: string\r\n priority?: boolean\r\n}\r\n\r\nexport const TokenIconWithNetworkLogo = ({\r\n tokenInfo,\r\n customChainLogo,\r\n w = {\r\n base: '28px',\r\n md: '32px'\r\n },\r\n h = {\r\n base: '28px',\r\n md: '32px'\r\n },\r\n smallW = {\r\n base: 3,\r\n md: 4\r\n },\r\n smallH = {\r\n base: 3,\r\n md: 4\r\n },\r\n smallB = -1,\r\n smallR = 0,\r\n pr = {\r\n base: '4px',\r\n md: '8px'\r\n },\r\n priority = false,\r\n ...props\r\n}: TokenIconProps) => {\r\n const { name, chain_id, logo } = tokenInfo ?? {}\r\n const { chains } = useChainsStore()\r\n const chain = chains?.find((chain) => chain.chain_id === chain_id)\r\n\r\n // console.log('logo: ', logo, 'name:', name)\r\n\r\n return (\r\n <Box\r\n pos={'relative'}\r\n w={w}\r\n h={h}\r\n pr={pr}\r\n boxSizing={'content-box'}\r\n {...props}\r\n >\r\n <OptimizedImage\r\n w={w}\r\n h={h}\r\n borderRadius={'full'}\r\n src={logo || `https://wheelx.fi/images/default-token-icon.png`}\r\n alt={name || ''}\r\n objectFit=\"cover\"\r\n priority={priority}\r\n />\r\n <OptimizedImage\r\n pos={'absolute'}\r\n bottom={smallB ? smallB : -1}\r\n right={smallR ? smallR : 0}\r\n src={\r\n customChainLogo\r\n ? customChainLogo\r\n : chain?.chain_icon || (chain_id ? chainsInfo[chain_id]?.icon : '')\r\n }\r\n alt={chain?.name ?? ''}\r\n w={smallW}\r\n h={smallH}\r\n borderRadius={'full'}\r\n border={'1px solid white'}\r\n bg={'white'}\r\n objectFit=\"cover\"\r\n />\r\n </Box>\r\n )\r\n}\r\n","import { Box, Icon } from '@chakra-ui/react'\r\n// import { MdOutlineStarOutline, MdOutlineStarPurple500 } from 'react-icons/md'\r\nimport { MdFavorite, MdFavoriteBorder } from 'react-icons/md'\r\nimport { useTokenFavoritesContext } from './TokenFavoritesContext'\r\nimport { TokenInfo } from '../../api'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface FavoriteButtonProps {\r\n tokenInfo: TokenInfo\r\n}\r\n\r\nexport const TokenFavoriteButton: React.FC<FavoriteButtonProps> = ({\r\n tokenInfo\r\n}) => {\r\n const { theme } = useWidgetTheme()\r\n const {\r\n chain_id: chainId,\r\n address: tokenAddress,\r\n symbol,\r\n decimals,\r\n logo,\r\n name,\r\n tags\r\n } = tokenInfo\r\n const { isFavorite, addFavorite, removeFavorite } = useTokenFavoritesContext()\r\n const favorited = isFavorite(chainId, tokenAddress)\r\n\r\n const handleToggleFavorite = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n try {\r\n if (favorited) {\r\n removeFavorite(chainId, tokenAddress)\r\n } else {\r\n addFavorite(chainId, tokenAddress, symbol, decimals, logo, name, tags)\r\n }\r\n } catch (error) {\r\n console.error('Error toggling favorite:', error)\r\n }\r\n }\r\n\r\n return (\r\n <Box\r\n onClick={handleToggleFavorite}\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"pointer\"\r\n >\r\n {!favorited ? (\r\n <Icon\r\n as={MdFavoriteBorder}\r\n fontSize=\"16px\"\r\n color={theme.weakTextColor}\r\n marginLeft={'4px'}\r\n />\r\n ) : (\r\n <Icon\r\n as={MdFavorite}\r\n fontSize=\"16px\"\r\n marginLeft={'4px'}\r\n color={theme.highlightTextColor}\r\n />\r\n )}\r\n </Box>\r\n )\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useAccount } from 'wagmi'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { isLocalStorageSupported } from './storageUtils'\r\nimport { Tag } from '../../api/useChainsAndTokens'\r\n\r\nexport interface TokenSearchHistoryItem {\r\n chain_id: number\r\n address: `0x${string}`\r\n symbol: string\r\n decimals: number\r\n logo: string\r\n name: string\r\n timestamp?: number\r\n tags: Tag[]\r\n categories?: string[]\r\n}\r\n\r\ninterface TokenSearchHistoryContextType {\r\n searchHistory: TokenSearchHistoryItem[]\r\n addSearchHistory: (\r\n chainId: number,\r\n tokenAddress: `0x${string}`,\r\n symbol: string,\r\n decimals: number,\r\n logo: string,\r\n name: string,\r\n tags: Tag[]\r\n ) => void\r\n removeSearchHistory: (chainId: number, tokenAddress: string) => void\r\n isSearchHistory: (chainId: number, tokenAddress: string) => boolean\r\n clearSearchHistory: () => void\r\n isLoading: boolean\r\n walletAddress: string | undefined\r\n storageError: string | null\r\n}\r\n\r\nconst TokenSearchHistoryContext = createContext<TokenSearchHistoryContextType>({\r\n searchHistory: [],\r\n addSearchHistory: () => {},\r\n removeSearchHistory: () => {},\r\n isSearchHistory: () => false,\r\n clearSearchHistory: () => {},\r\n isLoading: true,\r\n walletAddress: undefined,\r\n storageError: null\r\n})\r\n\r\ninterface TokenSearchHistoryProviderProps {\r\n children: ReactNode\r\n}\r\n\r\nexport const TokenSearchHistoryProvider: React.FC<\r\n TokenSearchHistoryProviderProps\r\n> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const { isConnected } = useAccount()\r\n const [searchHistory, setSearchHistory] = useState<TokenSearchHistoryItem[]>(\r\n []\r\n )\r\n const [isLoading, setIsLoading] = useState(true)\r\n const [storageError, setStorageError] = useState<string | null>(null)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-token-searchHistory-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n const loadSearchHistory = async () => {\r\n if (!address) {\r\n setSearchHistory([])\r\n setIsLoading(false)\r\n return\r\n }\r\n\r\n try {\r\n const storageKey = getStorageKey()\r\n if (!storageKey) {\r\n setIsLoading(false)\r\n return\r\n }\r\n\r\n const stored = localStorage.getItem(storageKey)\r\n if (stored) {\r\n const parsedSearchHistory = JSON.parse(\r\n stored\r\n ) as TokenSearchHistoryItem[]\r\n setSearchHistory(parsedSearchHistory)\r\n }\r\n } catch (error) {\r\n console.error('Failed to load searchHistory from localStorage:', error)\r\n setSearchHistory([])\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n loadSearchHistory()\r\n }, [address, getStorageKey])\r\n\r\n const saveSearchHistory = (newSearchHistory: TokenSearchHistoryItem[]) => {\r\n if (typeof window === 'undefined') return\r\n\r\n if (!isLocalStorageSupported()) {\r\n setStorageError('you browser can not using local storage')\r\n return\r\n }\r\n\r\n const storageKey = getStorageKey()\r\n if (!storageKey) return\r\n\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(newSearchHistory))\r\n setSearchHistory(newSearchHistory)\r\n } catch (error) {\r\n console.error('Failed to save searchHistory to localStorage:', error)\r\n }\r\n }\r\n\r\n const addSearchHistory = (\r\n chainId: number,\r\n tokenAddress: `0x${string}`,\r\n symbol: string,\r\n decimals: number,\r\n logo: string,\r\n name: string,\r\n tags: Tag[]\r\n ) => {\r\n if (!isConnected || !address) {\r\n console.warn('Cannot add favorite: No wallet connected')\r\n return\r\n }\r\n const existingIndex = searchHistory.findIndex(\r\n (fav) => fav.chain_id === chainId && fav.address === tokenAddress\r\n )\r\n\r\n if (existingIndex === -1) {\r\n const newSearchHistory: TokenSearchHistoryItem = {\r\n chain_id: chainId,\r\n address: tokenAddress,\r\n symbol,\r\n decimals,\r\n logo,\r\n name,\r\n tags: tags,\r\n timestamp: Date.now()\r\n }\r\n const updatedSearchHistory = [...searchHistory, newSearchHistory]\r\n saveSearchHistory(updatedSearchHistory)\r\n }\r\n }\r\n\r\n const removeSearchHistory = (chainId: number, tokenAddress: string) => {\r\n if (!isConnected || !address) {\r\n console.warn('Cannot remove favorite: No wallet connected')\r\n return\r\n }\r\n\r\n // const updatedSearchHistory = searchHistory.filter(\r\n // (fav) => !(fav.chainId === chainId && fav.tokenAddress === tokenAddress)\r\n // )\r\n // saveSearchHistory(updatedSearchHistory)\r\n setSearchHistory((prevSearchHistory) => {\r\n const updatedSearchHistory = prevSearchHistory.filter(\r\n (fav) => !(fav.chain_id === chainId && fav.address === tokenAddress)\r\n )\r\n saveSearchHistory(updatedSearchHistory)\r\n return updatedSearchHistory\r\n })\r\n }\r\n\r\n const isSearchHistory = (chainId: number, tokenAddress: string): boolean => {\r\n return searchHistory.some(\r\n (fav) => fav.chain_id === chainId && fav.address === tokenAddress\r\n )\r\n }\r\n\r\n const clearSearchHistory = () => {\r\n if (!isConnected || !address) return\r\n\r\n const storageKey = getStorageKey()\r\n if (!storageKey) return\r\n\r\n try {\r\n localStorage.removeItem(storageKey)\r\n setSearchHistory([])\r\n } catch (error) {\r\n console.error('Failed to clear searchHistory:', error)\r\n }\r\n }\r\n\r\n const contextValue: TokenSearchHistoryContextType = {\r\n searchHistory,\r\n addSearchHistory,\r\n removeSearchHistory,\r\n isSearchHistory,\r\n clearSearchHistory,\r\n isLoading,\r\n storageError,\r\n walletAddress: address\r\n }\r\n\r\n return (\r\n <TokenSearchHistoryContext.Provider value={contextValue}>\r\n {children}\r\n </TokenSearchHistoryContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTokenSearchHistoryContext = () => {\r\n const context = useContext(TokenSearchHistoryContext)\r\n if (context === undefined) {\r\n throw new Error(\r\n 'useSearchHistoryContext must be used within a token SearchHistoryProvider'\r\n )\r\n }\r\n return context\r\n}\r\n","import { HStack, Image, useBreakpointValue, VStack } from '@chakra-ui/react'\r\n\r\nimport { TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { sliceAddress } from '../../utils'\r\n\r\nimport { Heading, Text } from '../ui'\r\n\r\nimport { Fraction } from 'bi-fraction'\r\nimport { TokenAmountHeading, TokenIconWithNetworkLogo } from '../commons'\r\nimport { TokenFavoriteButton } from './TokenFavoriteButton'\r\nimport { useEffect, useState } from 'react'\r\n// import { useAccount } from 'wagmi'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useTokenSearchHistoryContext } from './SearchHistoryContext'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useMemo } from 'react'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\ninterface Props {\r\n tokenInfo: TokenInfoWithBalance\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n isSelectAll?: boolean\r\n isSearchResult?: boolean\r\n isSelectingFromToken: boolean\r\n}\r\nexport const TokenAndAddress = ({\r\n tokenInfo,\r\n onSelectToken,\r\n isSelectAll,\r\n isSearchResult,\r\n isSelectingFromToken\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { address, symbol, tags } = tokenInfo\r\n const userAddress = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { chains } = useChainsStore()\r\n\r\n // Check if user has any wallet connected (EVM or Solana)\r\n const hasConnectedWallet = !!(userAddress || solanaWalletAddress)\r\n\r\n const isPinToken = tags?.includes('pin')\r\n const isCertToken = tags?.includes('cert')\r\n\r\n const isMobile = useBreakpointValue({ base: true, md: false })\r\n const [isStarVisible, setIsStarVisible] = useState(false)\r\n const { addSearchHistory } = useTokenSearchHistoryContext()\r\n const [tokenNotIn, setTokenNotIn] = useState(false)\r\n const [tokenNotOut, setTokenNotOut] = useState(false)\r\n const [hideBalance, setHideBalance] = useState(true)\r\n const { setIsDepositPlatformToken, setDifferentAddress } =\r\n useDifferentAddressStore()\r\n\r\n const currentChainInfo = useMemo(() => {\r\n return chains?.find((chain) => chain.chain_id === tokenInfo.chain_id)\r\n }, [chains, tokenInfo])\r\n\r\n // console.log('### userAddress ####:', userAddress)\r\n\r\n const handleMouseEnter = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(true)\r\n }\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(false)\r\n }\r\n }\r\n\r\n const handleClick = () => {\r\n if (isSearchResult) {\r\n const { chain_id, address, symbol, decimals, logo, name, tags } =\r\n tokenInfo\r\n addSearchHistory(chain_id, address, symbol, decimals, logo, name, tags)\r\n }\r\n if (tokenNotOut) {\r\n return\r\n }\r\n if (tokenNotIn) {\r\n return\r\n }\r\n onSelectToken(tokenInfo)\r\n const { solanaWalletAddress } = useWalletConnectedStore.getState()\r\n const isSolanaToken = isSolanaChain(tokenInfo.chain_id)\r\n\r\n // console.log('###tokenInfo####:', tokenInfo)\r\n if (tokenInfo?.platform_id && tokenInfo.platform_id > 0) {\r\n setIsDepositPlatformToken(true)\r\n setDifferentAddress(undefined)\r\n } else {\r\n if (!isSelectingFromToken) {\r\n setIsDepositPlatformToken(false)\r\n if (userAddress || solanaWalletAddress) {\r\n if (isSolanaToken && solanaWalletAddress) {\r\n // console.log(\r\n // '######### Setting different address for Solana token #########',\r\n // solanaWalletAddress\r\n // )\r\n setDifferentAddress(solanaWalletAddress)\r\n } else {\r\n setDifferentAddress(userAddress)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (currentChainInfo) {\r\n if (!currentChainInfo.outbound && isSelectingFromToken) {\r\n setTokenNotOut(true)\r\n } else {\r\n setTokenNotOut(false)\r\n }\r\n\r\n if (!currentChainInfo.inbound && !isSelectingFromToken) {\r\n setTokenNotIn(true)\r\n } else {\r\n setTokenNotIn(false)\r\n }\r\n\r\n if (tokenInfo?.platform_id && tokenInfo.platform_id > 0) {\r\n setHideBalance(true)\r\n } else {\r\n setHideBalance(false)\r\n }\r\n }\r\n }, [currentChainInfo, isSelectingFromToken])\r\n\r\n useEffect(() => {\r\n if (isMobile) {\r\n setIsStarVisible(true)\r\n }\r\n }, [isMobile])\r\n // const isTopToken = tags.includes('top')\r\n\r\n if (tokenNotIn || tokenNotOut) {\r\n return null\r\n }\r\n\r\n return (\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n cursor={'pointer'}\r\n onClick={handleClick}\r\n p={2}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n flexShrink={0}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <HStack flexShrink={0} flex={1} w={0}>\r\n <TokenIconWithNetworkLogo tokenInfo={tokenInfo} />\r\n <VStack gap={1} align={'start'} flex={1} w={0}>\r\n <HStack gap={0} w={'100%'} h={'20px'} overflow={'hidden'}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n maxW={'70%'}\r\n overflow={'hidden'}\r\n textOverflow={'ellipsis'}\r\n whiteSpace={'nowrap'}\r\n >\r\n {symbol}\r\n </Heading>\r\n {isPinToken && (\r\n <Image\r\n src={'https://wheelx.fi/images/gas.png'}\r\n w={'14px'}\r\n h={'14px'}\r\n alt={'pin'}\r\n marginLeft={'3px'}\r\n />\r\n )}\r\n {isCertToken && (\r\n <Image\r\n src={'https://wheelx.fi/images/verified.png'}\r\n w={'14px'}\r\n h={'14px'}\r\n alt={'cert'}\r\n marginLeft={'3px'}\r\n />\r\n )}\r\n {isStarVisible &&\r\n hasConnectedWallet &&\r\n !isSelectAll &&\r\n !hideBalance && (\r\n <TokenFavoriteButton\r\n // chainId={tokenInfo.chain_id}\r\n // tokenAddress={tokenInfo.address}\r\n tokenInfo={tokenInfo}\r\n />\r\n )}\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n {sliceAddress(address)}\r\n {/* - {isPinToken ? 'Pin' : 'no pin'} -\r\n {isTopToken ? 'Top' : 'no top'} */}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n {hasConnectedWallet && !hideBalance && (\r\n <VStack gap={1} align={'end'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(\r\n tokenInfo.balance\r\n ? tokenInfo.balance !== 'NaN'\r\n ? tokenInfo.balance\r\n : 0\r\n : 0\r\n ).shl(tokenInfo.decimals)}\r\n decimals={tokenInfo.decimals}\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n />\r\n\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n {tokenInfo.usdPrice &&\r\n tokenInfo.balance &&\r\n tokenInfo.balance !== 'NaN' ? (\r\n <>\r\n $\r\n {new Fraction(tokenInfo.balance)\r\n .mul(tokenInfo.usdPrice)\r\n .toFormat({\r\n decimalPlaces: 2,\r\n trailingZeros: false\r\n })}\r\n </>\r\n ) : null}\r\n </Text>\r\n </VStack>\r\n )}\r\n </HStack>\r\n )\r\n}\r\n","import { HStack, Icon, Spinner, VStack, Image } from '@chakra-ui/react'\r\nimport { TokenAndAddress } from './TokenAndAddress'\r\nimport { TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { TokenBalance } from '../../api'\r\nimport { Text } from '../ui'\r\n// import { use, useMemo } from 'react'\r\nimport {\r\n filterTokenByType,\r\n filterTokenUnType,\r\n getOrderedTokensAssets\r\n} from './utils'\r\nimport { useEffect, useMemo, useState } from 'react'\r\nimport { useTokenFavoritesContext } from './TokenFavoritesContext'\r\nimport { useTokenSearchHistoryContext } from './SearchHistoryContext'\r\n\r\nimport { AllIcon } from '../icons'\r\nimport { StablecoinIcon } from '../icons'\r\nimport { StockIcon } from '../icons'\r\nimport { XStockIcon } from '../icons'\r\nimport { LikedIcon } from '../icons'\r\nimport { SearchIcon } from '../icons'\r\nimport { AIIcon } from '../icons'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\nconst deduplicateByAddressAndChainId = (tokens: TokenInfo[]): TokenInfo[] => {\r\n const addressMap = new Map<string, TokenInfo>()\r\n return tokens.filter((token) => {\r\n const key = `${token.address}-${token.chain_id.toString()}`\r\n if (addressMap.has(key)) {\r\n return false\r\n }\r\n addressMap.set(key, token)\r\n return true\r\n })\r\n}\r\n\r\nconst tabList = [\r\n {\r\n name: 'All',\r\n type: 'all',\r\n icon: AllIcon\r\n },\r\n {\r\n name: 'AI',\r\n type: 'ai',\r\n icon: AIIcon\r\n },\r\n {\r\n name: 'Stablecoin',\r\n type: 'stablecoin',\r\n icon: StablecoinIcon\r\n },\r\n {\r\n name: 'Stock',\r\n type: 'stock',\r\n icon: StockIcon\r\n },\r\n {\r\n name: 'xStocks',\r\n type: 'xstocks',\r\n icon: XStockIcon\r\n },\r\n {\r\n name: 'Liked',\r\n type: 'liked',\r\n icon: LikedIcon\r\n },\r\n {\r\n name: 'Searched',\r\n type: 'history',\r\n icon: SearchIcon\r\n }\r\n]\r\n\r\ninterface Props {\r\n isLoading: boolean\r\n isSelectAll: boolean\r\n userBalances?: TokenBalance[]\r\n tokens?: TokenInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n chainId?: number | null\r\n resetSearch: () => void\r\n searchTokensValue: string\r\n isSelectingFromToken: boolean\r\n}\r\n\r\nexport const TokenList = ({\r\n isLoading,\r\n isSelectAll,\r\n userBalances,\r\n tokens,\r\n searchTokensInfo,\r\n onSelectToken,\r\n chainId,\r\n resetSearch,\r\n searchTokensValue,\r\n isSelectingFromToken\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const userTokens = useMemo(() => {\r\n return userBalances?.map((balance) => {\r\n return {\r\n ...balance.token,\r\n balance: balance.balance,\r\n usdPrice: balance.price\r\n }\r\n })\r\n }, [userBalances])\r\n\r\n const { favorites } = useTokenFavoritesContext()\r\n const { searchHistory } = useTokenSearchHistoryContext()\r\n const [currentTab, setCurrentTab] = useState('all')\r\n const [showTab, setShowTab] = useState(false)\r\n // const [showStablecoin, setShowStablecoin] = useState(false)\r\n // const [showStock, setShowStock] = useState(false)\r\n const address = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { isSelectPredictionChain } = useChainsStore()\r\n const isSolana = isSolanaChain(chainId || undefined)\r\n\r\n // Check if user has any wallet connected (EVM or Solana)\r\n const hasConnectedWallet = !!(address || solanaWalletAddress)\r\n\r\n const currentChainFavTokens = useMemo(() => {\r\n if (currentTab !== 'liked') {\r\n return []\r\n }\r\n return favorites?.filter((fav) => fav.chain_id === chainId)\r\n }, [currentTab, favorites, chainId])\r\n\r\n useEffect(() => {\r\n setCurrentTab('all')\r\n }, [chainId])\r\n\r\n useEffect(() => {\r\n if (!searchTokensValue) {\r\n setCurrentTab('all')\r\n }\r\n }, [searchTokensValue])\r\n\r\n const currentChainSearchHistory = useMemo(() => {\r\n if (currentTab !== 'history') {\r\n return []\r\n }\r\n return searchHistory?.filter((fav) => fav.chain_id === chainId)\r\n }, [currentTab, searchHistory, chainId])\r\n const currentTokens = useMemo(() => {\r\n if (\r\n currentTab === 'stock' ||\r\n currentTab === 'xstocks' ||\r\n currentTab === 'stablecoin' ||\r\n currentTab === 'ai'\r\n ) {\r\n return filterTokenByType(tokens || [], currentTab)\r\n }\r\n return []\r\n }, [currentTab, tokens])\r\n\r\n const AllTokens = useMemo(() => {\r\n if (currentTab !== 'all') {\r\n return []\r\n }\r\n return filterTokenUnType(tokens || [], ['stock', 'xstocks'])\r\n }, [currentTab, tokens])\r\n\r\n const isHasStablecoin = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('stablecoin')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n const isHasStock = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('stock')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n const isHasXStock = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('xstocks')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n const isHasAI = useMemo(() => {\r\n const findToken = tokens?.find((token) => token.categories?.includes('ai'))\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n // console.log('#### tokens ######:', tokens)\r\n\r\n const render = () => {\r\n if (isLoading) {\r\n return (\r\n <HStack w={'100%'} h={'50px'} justify={'center'} align={'center'}>\r\n <Spinner />\r\n </HStack>\r\n )\r\n }\r\n\r\n if (searchTokensInfo) {\r\n if (searchTokensInfo.length > 0) {\r\n if (isSelectAll) {\r\n return searchTokensInfo.map((token, index) => {\r\n if (token.balance) {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n }\r\n })\r\n } else {\r\n return searchTokensInfo.map((token, index) => {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSearchResult={true}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n })\r\n }\r\n } else {\r\n return (\r\n <HStack w={'100%'} h={'50px'} justify={'center'} align={'center'}>\r\n <Text\r\n color={theme.weakTextColor}\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n >\r\n No results\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n }\r\n\r\n if (isSelectAll) {\r\n return getOrderedTokensAssets(userTokens)?.map((token, index) => {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n })\r\n } else {\r\n let newTokens = AllTokens\r\n if (currentTab === 'liked') {\r\n newTokens = currentChainFavTokens\r\n } else if (currentTab === 'history') {\r\n newTokens = currentChainSearchHistory\r\n } else if (\r\n currentTab === 'stablecoin' ||\r\n currentTab === 'stock' ||\r\n currentTab === 'xstocks' ||\r\n currentTab === 'ai'\r\n ) {\r\n newTokens = currentTokens\r\n }\r\n if (newTokens.length === 0) {\r\n return (\r\n <VStack\r\n height={'300px'}\r\n justifyContent={'center'}\r\n gap={4}\r\n alignItems={'center'}\r\n background={theme.defaultBgColor}\r\n borderRadius={'20px'}\r\n w={'100%'}\r\n >\r\n <Image src=\"https://wheelx.fi/images/no_data.png\" alt=\"no data\" w={'120px'}></Image>\r\n </VStack>\r\n )\r\n }\r\n return deduplicateByAddressAndChainId(newTokens)?.map((token, index) => (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n ))\r\n }\r\n }\r\n\r\n const renderTab = () => {\r\n if (!showTab) {\r\n return null\r\n }\r\n return (\r\n <HStack w={'100%'} p={2} overflowX={'auto'} overflowY={'hidden'}>\r\n {tabList.map((item, index) => {\r\n if (!hasConnectedWallet) {\r\n if (item.type === 'liked' || item.type === 'history') {\r\n return null\r\n }\r\n }\r\n if (item.type === 'stablecoin' && !isHasStablecoin) {\r\n return null\r\n }\r\n if (item.type === 'stock' && !isHasStock) {\r\n return null\r\n }\r\n if (item.type === 'xstocks' && !isHasXStock && !isSolana) {\r\n return null\r\n }\r\n if (item.type === 'ai' && !isHasAI) {\r\n return null\r\n }\r\n\r\n return (\r\n <HStack\r\n key={index}\r\n onClick={() => {\r\n setCurrentTab(item.type)\r\n resetSearch()\r\n }}\r\n color={currentTab === item.type ? theme.highlightTextColor : theme.weakTextColor}\r\n backgroundColor={currentTab === item.type ? theme.highlightBgColor : theme.assistBgColor}\r\n h={'26px'}\r\n padding={'0 9px'}\r\n borderRadius={'5px'}\r\n fontSize={'12px'}\r\n cursor={'pointer'}\r\n >\r\n <Icon as={item.icon} boxSize={'14px'} />\r\n <Text>{item.name}</Text>\r\n </HStack>\r\n )\r\n })}\r\n </HStack>\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (!isSelectAll) {\r\n if (!hasConnectedWallet) {\r\n if (!isHasStock && !isHasStablecoin && !isHasAI) {\r\n setShowTab(false)\r\n } else {\r\n setShowTab(true)\r\n }\r\n } else {\r\n setShowTab(true)\r\n }\r\n } else {\r\n setShowTab(false)\r\n }\r\n if (isSelectPredictionChain) {\r\n setShowTab(false)\r\n }\r\n }, [hasConnectedWallet, isSelectAll, isHasStablecoin, isHasStock, tokens])\r\n\r\n // useEffect(() => {\r\n // if (isHasStablecoin) {\r\n // setShowStablecoin(true)\r\n // } else {\r\n // setShowStablecoin(false)\r\n // }\r\n // }, [isHasStablecoin])\r\n // useEffect(() => {\r\n // if (isHasStock) {\r\n // setShowStock(true)\r\n // } else {\r\n // setShowStock(false)\r\n // }\r\n // }, [isHasStock])\r\n\r\n useEffect(() => {\r\n if (searchTokensInfo) {\r\n setCurrentTab('')\r\n }\r\n }, [searchTokensInfo])\r\n\r\n return (\r\n <VStack gap={0} w={'100%'} h={'100%'}>\r\n {renderTab()}\r\n <VStack\r\n gap={0}\r\n w={'100%'}\r\n flex={1}\r\n h={0}\r\n overflowX={'hidden'}\r\n overflowY={'auto'}\r\n >\r\n {render()}\r\n </VStack>\r\n </VStack>\r\n )\r\n}\r\n","import { InputGroup, Input, Icon } from '@chakra-ui/react'\r\nimport { SearchIcon } from '../icons'\r\nimport { useCallback, useEffect, useState } from 'react'\r\nimport { debounce } from '../../utils'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n placeholder?: string\r\n value: string\r\n onChange: (value: string) => void\r\n}\r\n\r\nexport const SearchInput = ({ placeholder, value, onChange }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const [localValue, setLocalValue] = useState(value)\r\n\r\n const debouncedOnChange = useCallback(debounce(onChange, 500), [onChange])\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const inputValue = e.target.value\r\n setLocalValue(inputValue)\r\n debouncedOnChange(inputValue)\r\n }\r\n\r\n useEffect(() => {\r\n setLocalValue(value)\r\n }, [value])\r\n\r\n return (\r\n <InputGroup\r\n startElement={\r\n <Icon\r\n as={SearchIcon}\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n />\r\n }\r\n startElementProps={{\r\n pl: 2.5\r\n }}\r\n px={2}\r\n pb={2}\r\n >\r\n <Input\r\n placeholder={placeholder}\r\n px={2}\r\n border={'1px solid'}\r\n borderColor={theme.weakTextColor}\r\n borderRadius={'12px'}\r\n fontSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n h={'40px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n _focus={{\r\n borderColor: theme.highlightBorderColor,\r\n outlineWidth: '0px'\r\n }}\r\n value={localValue}\r\n onChange={handleChange}\r\n />\r\n </InputGroup>\r\n )\r\n}\r\n","import { HStack, Image, VStack } from '@chakra-ui/react'\r\n\r\nexport const AllChainsIcon = () => {\r\n return (\r\n <VStack w={'24px'} h={'24px'} gap={1}>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/networks/1.png'}\r\n alt=\"ethereum\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n <Image\r\n src={'https://wheelx.fi/images/networks/56.png'}\r\n alt=\"bnb\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n </HStack>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/networks/8453.png'}\r\n alt=\"base\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n <Image\r\n src={'https://wheelx.fi/images/networks/42161.png'}\r\n alt=\"arbitrum\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","import {\r\n VStack,\r\n Box,\r\n Image,\r\n HStack,\r\n InputGroup,\r\n Icon,\r\n Input\r\n} from '@chakra-ui/react'\r\n\r\nimport { Network } from './Network'\r\nimport { Text } from '../ui'\r\nimport { BackIcon } from '../icons'\r\nimport { SearchIcon } from '../icons'\r\nimport { ArrowDownIcon } from '../icons'\r\nimport { ArrowFillRightIcon } from '../icons'\r\nimport {\r\n Dispatch,\r\n memo,\r\n SetStateAction,\r\n useMemo,\r\n useState,\r\n useRef,\r\n useEffect\r\n} from 'react'\r\nimport {\r\n ChainInfo,\r\n TokenBalance,\r\n TokenInfo,\r\n TokenInfoWithBalance\r\n} from '../../api'\r\nimport { TokenList } from './TokenList'\r\nimport { SearchInput } from './SearchInput'\r\nimport { AllChainsIcon } from './AllChainsIcon'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n popularChains?: ChainInfo[]\r\n orderedChains?: ChainInfo[]\r\n orderedPredictionChains?: ChainInfo[]\r\n favChains?: ChainInfo[]\r\n tokens?: TokenInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n userBalances?: TokenBalance[]\r\n isLoading: boolean\r\n searchChainsValue: string\r\n searchTokensValue: string\r\n selectedChain: number | null\r\n selectedPlatform: number\r\n selectedChainInfo?: ChainInfo\r\n isSelectAll: boolean\r\n isMobileChainsOpen: boolean\r\n chainId: number | null\r\n isSelectingFromToken: boolean\r\n handleSearchChains: (value: string) => void\r\n handleSearchTokens: (value: string) => void\r\n handleSelectChains: (chainId: number, platformId: number) => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n handleSelectAll: () => void\r\n resetSearch: () => void\r\n setIsMobileChainsOpen: Dispatch<SetStateAction<boolean>>\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n isPreconfigured?: boolean\r\n}\r\n\r\nconst arePropsEqual = (prevProps: Props, nextProps: Props) => {\r\n return (\r\n prevProps.isMobileChainsOpen === nextProps.isMobileChainsOpen &&\r\n prevProps.searchTokensValue === nextProps.searchTokensValue &&\r\n prevProps.isSelectAll === nextProps.isSelectAll &&\r\n prevProps.isLoading === nextProps.isLoading &&\r\n prevProps.searchChainsValue === nextProps.searchChainsValue &&\r\n JSON.stringify(prevProps.selectedChainInfo) ===\r\n JSON.stringify(nextProps.selectedChainInfo) &&\r\n JSON.stringify(prevProps.popularChains) ===\r\n JSON.stringify(nextProps.popularChains) &&\r\n JSON.stringify(prevProps.orderedChains) ===\r\n JSON.stringify(nextProps.orderedChains) &&\r\n JSON.stringify(prevProps.favChains) ===\r\n JSON.stringify(nextProps.favChains) &&\r\n JSON.stringify(prevProps.tokens) === JSON.stringify(nextProps.tokens) &&\r\n JSON.stringify(prevProps.userBalances) ===\r\n JSON.stringify(nextProps.userBalances) &&\r\n JSON.stringify(prevProps.searchTokensInfo) ===\r\n JSON.stringify(nextProps.searchTokensInfo)\r\n )\r\n}\r\n\r\nexport const MobileContent = memo(function MobileContent({\r\n isMobileChainsOpen,\r\n searchTokensValue,\r\n isSelectAll,\r\n selectedChain,\r\n selectedPlatform,\r\n selectedChainInfo,\r\n handleSearchTokens,\r\n handleSearchChains,\r\n handleSelectChains,\r\n setIsMobileChainsOpen,\r\n onSelectToken,\r\n searchChainsValue,\r\n popularChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n favChains,\r\n tokens,\r\n userBalances,\r\n searchTokensInfo,\r\n isLoading,\r\n handleSelectAll,\r\n chainId,\r\n resetSearch,\r\n isSelectingFromToken,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit,\r\n isPreconfigured\r\n}: Props) {\r\n const { theme } = useWidgetTheme()\r\n const [isMobileSearchFocused, setIsMobileSearchFocused] = useState(false)\r\n const isShowChainsWithAssets = useMemo(\r\n () => userBalances && userBalances.length > 0,\r\n [userBalances]\r\n )\r\n\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains } = useChainsStore()\r\n\r\n const isChainsWithAssetsDisabled = useMemo(() => {\r\n if (disableTestnetLimit) return false\r\n\r\n if (isSelectingFromToken) {\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n return toChainInfo?.is_testnet === true\r\n } else {\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n return fromChainInfo?.is_testnet === true\r\n }\r\n }, [isSelectingFromToken, fromChainId, toChainId, disableTestnetLimit, chains])\r\n\r\n const listContainerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (!isMobileChainsOpen || !listContainerRef.current) return\r\n const timeoutId = setTimeout(() => {\r\n const selectedElement = listContainerRef.current?.querySelector(\r\n '[data-selected=\"true\"]'\r\n ) as HTMLElement\r\n\r\n if (selectedElement && listContainerRef.current) {\r\n const container = listContainerRef.current\r\n const elementTop = selectedElement.offsetTop\r\n const elementHeight = selectedElement.offsetHeight\r\n const containerHeight = container.clientHeight\r\n\r\n const scrollTop = elementTop - containerHeight / 2 + elementHeight / 2\r\n\r\n container.scrollTo({\r\n top: scrollTop,\r\n behavior: 'smooth'\r\n })\r\n }\r\n }, 100)\r\n\r\n return () => clearTimeout(timeoutId)\r\n }, [\r\n selectedChain,\r\n selectedPlatform,\r\n popularChains,\r\n favChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n searchChainsValue,\r\n isMobileChainsOpen\r\n ])\r\n\r\n return (\r\n <VStack w={'100%'} h={'100%'} align={'start'} gap={0} hideFrom={'md'}>\r\n {!isMobileChainsOpen && !isPreconfigured && (\r\n <Box w={'100%'} px={2} pb={2}>\r\n <HStack\r\n w={'100%'}\r\n border={'1px solid'}\r\n borderColor={isMobileSearchFocused ? theme.highlightBorderColor : theme.weakTextColor}\r\n boxSizing={'border-box'}\r\n justifyContent={'space-between'}\r\n >\r\n <InputGroup\r\n startElement={\r\n <Icon\r\n as={SearchIcon}\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n />\r\n }\r\n startElementProps={{\r\n pl: '9px'\r\n }}\r\n >\r\n <Input\r\n placeholder=\"Search for a token or contract address\"\r\n px={2}\r\n border={'none'}\r\n fontSize={'12px'}\r\n h={'38px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n _focusVisible={{\r\n outlineWidth: '0px'\r\n }}\r\n onFocus={() => setIsMobileSearchFocused(true)}\r\n onBlur={() => setIsMobileSearchFocused(false)}\r\n value={searchTokensValue}\r\n onChange={(e) => handleSearchTokens(e.target.value)}\r\n />\r\n </InputGroup>\r\n <HStack\r\n gap={1}\r\n cursor={'pointer'}\r\n onClick={() => setIsMobileChainsOpen(true)}\r\n pr={1}\r\n >\r\n {isSelectAll ? (\r\n <AllChainsIcon />\r\n ) : (\r\n <Box w={'24px'} h={'24px'}>\r\n <Image\r\n src={selectedChainInfo?.chain_icon}\r\n alt={selectedChainInfo?.name}\r\n width={'100%'}\r\n height={'100%'}\r\n borderRadius={'50%'}\r\n objectFit={'cover'}\r\n />\r\n </Box>\r\n )}\r\n <Icon as={ArrowDownIcon} boxSize={'16px'} />\r\n </HStack>\r\n </HStack>\r\n </Box>\r\n )}\r\n {isMobileChainsOpen ? (\r\n <VStack w={'100%'} h={'100%'} align={'start'} gap={0}>\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search chains\"\r\n value={searchChainsValue}\r\n onChange={(value) => handleSearchChains(value)}\r\n />\r\n )}\r\n\r\n {/* chains list */}\r\n <Box\r\n flex={1}\r\n overflowY={'auto'}\r\n w={'100%'}\r\n overscrollBehavior={'contain'}\r\n ref={listContainerRef}\r\n >\r\n {!isPreconfigured && isShowChainsWithAssets && (\r\n <HStack\r\n px={2}\r\n mb={4}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={() => {\r\n // if (isChainsWithAssetsDisabled) return\r\n setDisableTestnetLimit(true)\r\n handleSelectAll()\r\n setIsMobileChainsOpen(false)\r\n }}\r\n opacity={isChainsWithAssetsDisabled ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelectAll ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelectAll ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={'82%'}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <AllChainsIcon />\r\n <Text\r\n variant={'content6_1'}\r\n color={'brand-grey1'}\r\n whiteSpace={'nowrap'}\r\n >\r\n Chains with assets\r\n </Text>\r\n </HStack>\r\n {isSelectAll && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Popular\r\n </Text>\r\n )}\r\n <VStack w={'100%'} align={'start'} gap={0}>\r\n {popularChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'popular-chains'}\r\n chainId={chain.chain_id}\r\n isPopular={true}\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isPredictionChain={false}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n {favChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'fav-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isPredictionChain={chain?.platform_id != null ? true : false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </VStack>\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Chains (A-Z)\r\n </Text>\r\n )}\r\n <VStack w={'100%'} align={'start'} gap={0}>\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet !== true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </VStack>\r\n {!isSelectingFromToken && !isPreconfigured && (\r\n <>\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Prediction\r\n </Text>\r\n {orderedPredictionChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'prediction-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={true}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Testnet\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </Box>\r\n </VStack>\r\n ) : (\r\n // tokens list\r\n <Box flex={1} overflowY={'auto'} w={'100%'}>\r\n {/* <Text px={2} color={'#81728C'} variant={'content7'} my={2}>\r\n Suggested tokens\r\n </Text> */}\r\n <TokenList\r\n isLoading={isLoading}\r\n isSelectAll={isSelectAll}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n tokens={tokens}\r\n onSelectToken={onSelectToken}\r\n chainId={chainId}\r\n resetSearch={resetSearch}\r\n searchTokensValue={searchTokensValue}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n </Box>\r\n )}\r\n {/* for mobile close chains list */}\r\n {isMobileChainsOpen && (\r\n <Icon\r\n pos={'absolute'}\r\n boxSize={'24px'}\r\n as={BackIcon}\r\n left={4}\r\n top={3.5}\r\n color={theme.weakTextColor}\r\n cursor={'pointer'}\r\n onClick={() => {\r\n setIsMobileChainsOpen(false)\r\n if (userBalances && userBalances.length > 0) {\r\n handleSelectAll()\r\n }\r\n }}\r\n />\r\n )}\r\n </VStack>\r\n )\r\n}, arePropsEqual)\r\n","import { HStack, VStack, Icon } from '@chakra-ui/react'\r\n\r\nimport { ArrowFillRightIcon } from '../icons'\r\n\r\nimport { Network } from './Network'\r\nimport { Text } from '../ui'\r\nimport {\r\n ChainInfo,\r\n TokenBalance,\r\n TokenInfo,\r\n TokenInfoWithBalance\r\n} from '../../api'\r\nimport { TokenList } from './TokenList'\r\nimport { SearchInput } from './SearchInput'\r\nimport { useMemo } from 'react'\r\nimport { AllChainsIcon } from './AllChainsIcon'\r\nimport { useRef, useEffect } from 'react'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n popularChains?: ChainInfo[]\r\n orderedChains?: ChainInfo[]\r\n favChains?: ChainInfo[]\r\n searchChains?: ChainInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n tokens?: TokenInfo[]\r\n orderedPredictionChains?: ChainInfo[]\r\n predictionTokens?: TokenInfo[]\r\n userBalances?: TokenBalance[]\r\n isLoading: boolean\r\n searchChainsValue: string\r\n searchTokensValue: string\r\n selectedChain: number | null\r\n selectedPlatform: number\r\n isSelectAll: boolean\r\n chainId: number | null\r\n isSelectingFromToken: boolean\r\n handleSearchChains: (value: string) => void\r\n handleSearchTokens: (value: string) => void\r\n handleSelectChains: (chainId: number, platformId: number) => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n handleSelectAll: () => void\r\n resetSearch: () => void\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n isPreconfigured?: boolean\r\n}\r\nexport const DesktopContent = ({\r\n isLoading,\r\n searchChainsValue,\r\n handleSearchChains,\r\n isSelectAll,\r\n popularChains,\r\n orderedChains,\r\n favChains,\r\n searchChains,\r\n orderedPredictionChains,\r\n // predictionTokens,\r\n tokens,\r\n userBalances,\r\n searchTokensInfo,\r\n selectedChain,\r\n selectedPlatform,\r\n handleSelectChains,\r\n searchTokensValue,\r\n handleSearchTokens,\r\n onSelectToken,\r\n isSelectingFromToken,\r\n handleSelectAll,\r\n chainId,\r\n resetSearch,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit,\r\n isPreconfigured\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const isShowChainsWithAssets = useMemo(\r\n () => userBalances && userBalances.length > 0,\r\n [userBalances]\r\n )\r\n\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains } = useChainsStore()\r\n\r\n const isChainsWithAssetsDisabled = useMemo(() => {\r\n if (disableTestnetLimit) return false\r\n\r\n if (isSelectingFromToken) {\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n return toChainInfo?.is_testnet === true\r\n } else {\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n return fromChainInfo?.is_testnet === true\r\n }\r\n }, [isSelectingFromToken, fromChainId, toChainId, disableTestnetLimit, chains])\r\n\r\n // console.log('isSelectingFromToken:', tokens)\r\n const listContainerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (!listContainerRef.current) return\r\n\r\n const timeoutId = setTimeout(() => {\r\n const selectedElement = listContainerRef.current?.querySelector(\r\n '[data-selected=\"true\"]'\r\n ) as HTMLElement\r\n\r\n if (selectedElement && listContainerRef.current) {\r\n const container = listContainerRef.current\r\n const elementTop = selectedElement.offsetTop\r\n const elementHeight = selectedElement.offsetHeight\r\n const containerHeight = container.clientHeight\r\n\r\n const scrollTop = elementTop - containerHeight / 2 + elementHeight / 2\r\n\r\n container.scrollTo({\r\n top: scrollTop,\r\n behavior: 'smooth'\r\n })\r\n }\r\n }, 100)\r\n\r\n return () => clearTimeout(timeoutId)\r\n }, [\r\n selectedChain,\r\n selectedPlatform,\r\n popularChains,\r\n favChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n searchChainsValue,\r\n searchChains\r\n ])\r\n\r\n // console.log('order chains', orderedChains)\r\n\r\n return (\r\n <HStack w={'100%'} h={'100%'} align={'start'} gap={0} hideBelow={'md'}>\r\n {/* left side */}\r\n <VStack\r\n w={'40%'}\r\n h={'100%'}\r\n py={3.5}\r\n borderRadius={'24px 0 0 24px'}\r\n bg={theme.assistBgColor}\r\n align={'start'}\r\n maxW={'236px'}\r\n >\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search chains\"\r\n value={searchChainsValue}\r\n onChange={(value) => handleSearchChains(value)}\r\n />\r\n )}\r\n\r\n <VStack\r\n align={'start'}\r\n gap={0}\r\n w={'100%'}\r\n overflowY={'auto'}\r\n ref={listContainerRef}\r\n >\r\n {!isPreconfigured && isShowChainsWithAssets && (\r\n <HStack\r\n px={2}\r\n mb={4}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={() => {\r\n // if (isChainsWithAssetsDisabled) return\r\n setDisableTestnetLimit(true)\r\n handleSelectAll()\r\n }}\r\n opacity={isChainsWithAssetsDisabled ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelectAll ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelectAll ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={'82%'}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <AllChainsIcon />\r\n <Text\r\n variant={'content6_1'}\r\n color={theme.defaultTextColor}\r\n whiteSpace={'nowrap'}\r\n >\r\n Chains with assets\r\n </Text>\r\n </HStack>\r\n {isSelectAll && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )}\r\n\r\n {searchChainsValue ? (\r\n <>\r\n {searchChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'search-chains'}\r\n chainId={chain.chain_id}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n ) : (\r\n <>\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} mb={2}>\r\n Popular\r\n </Text>\r\n )}\r\n {popularChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'popular-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isPopular={true}\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n\r\n {favChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'fav-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={chain?.platform_id != null ? true : false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Chains (A-Z)\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === false)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n {!isSelectingFromToken && !isPreconfigured && (\r\n <>\r\n <Text\r\n px={2}\r\n color={theme.weakTextColor}\r\n variant={'content7'}\r\n my={2}\r\n >\r\n Prediction\r\n </Text>\r\n {orderedPredictionChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'prediction-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(\r\n chain.chain_id,\r\n chain.platform_id || 0\r\n )\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={true}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Testnet\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n </VStack>\r\n </VStack>\r\n\r\n {/* right side */}\r\n <VStack flex={1} py={3.5} align={'start'} h={'100%'} w={0}>\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search for a token or contract address\"\r\n value={searchTokensValue}\r\n onChange={(value) => handleSearchTokens(value)}\r\n />\r\n )}\r\n\r\n <VStack align={'start'} gap={3} w={'100%'} overflowY={'auto'} pr={1}>\r\n {/* <Text color={'brand-grey4'} variant={'content7'} px={2}>\r\n Suggested tokens\r\n </Text> */}\r\n\r\n <TokenList\r\n isLoading={isLoading}\r\n isSelectAll={isSelectAll}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n tokens={tokens}\r\n chainId={chainId}\r\n onSelectToken={onSelectToken}\r\n resetSearch={resetSearch}\r\n searchTokensValue={searchTokensValue}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n </VStack>\r\n </VStack>\r\n </HStack>\r\n )\r\n}\r\n","import { Dialog, Portal, VStack, Icon } from '@chakra-ui/react'\r\nimport { memo, useCallback, useEffect, useMemo, useState } from 'react'\r\n\r\nimport {\r\n // ChainInfo,\r\n TokenInfo,\r\n useChainsAndTokens,\r\n useAllTokenBalance\r\n} from '../../api'\r\n\r\nimport { Heading } from '../ui'\r\nimport { BackIcon } from '../icons'\r\n\r\nimport {\r\n useChainsAndTokensForSelect,\r\n useUserHasSelectedFromNetwork,\r\n useSearchTokens\r\n} from './hooks'\r\nimport { CloseIcon } from '../icons'\r\nimport { MobileContent } from './MobileContent'\r\nimport { DesktopContent } from './DesktopContent'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useFavoritesContext } from './FavoritesContext'\r\nimport { processChains } from './utils'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\nimport type { WidgetConfig } from '../../types'\r\ninterface SelectTokenModalProps {\r\n isOpen: boolean\r\n isSelectingFromToken: boolean\r\n onClose: () => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n config?: WidgetConfig\r\n}\r\n\r\nconst isValidEvmAddress = (\r\n address: string | undefined\r\n): address is `0x${string}` => {\r\n return address !== undefined && /^0x[a-fA-F0-9]{40}$/.test(address)\r\n}\r\n\r\nconst SelectTokenModal = ({\r\n isOpen,\r\n isSelectingFromToken,\r\n onClose,\r\n onSelectToken,\r\n config\r\n}: SelectTokenModalProps) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const { fromTokenInfo, toTokenInfo, isShortLink, shortLink } =\r\n useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const toChainPlatformId = toTokenInfo?.platform_id || 0\r\n const { differentAddress } = useDifferentAddressStore()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const { data, isLoading: isLoadingChains } = useChainsAndTokens()\r\n // const chains = data?.chains\r\n\r\n const isArcTestnetShortLink = useMemo(() => {\r\n return isShortLink && shortLink?.toLowerCase() === '/arctestnet'\r\n }, [isShortLink, shortLink])\r\n\r\n const {\r\n data: userBalances,\r\n isLoading: isLoadingUserBalances,\r\n refetch: refetchUserBalances\r\n } = useAllTokenBalance(address, solanaWalletAddress || undefined)\r\n\r\n // const { data: userDifferentAddressBalances } =\r\n // useTokenBalance(differentAddress)\r\n const { data: userDifferentAddressBalances } = useAllTokenBalance(\r\n isValidEvmAddress(differentAddress) ? differentAddress : undefined,\r\n solanaWalletAddress || undefined\r\n )\r\n\r\n // when modal is open, refetch user balances\r\n useEffect(() => {\r\n if (isOpen && (address || solanaWalletAddress)) {\r\n refetchUserBalances()\r\n }\r\n }, [isOpen, address, solanaWalletAddress])\r\n\r\n const [isSelectAll, setIsSelectAll] = useState(false)\r\n const [selectedChain, setSelectedChain] = useState<number | null>(null)\r\n const [selectedChainByPlatformId, setSelectedChainByPlatformId] = useState<\r\n number | null\r\n >(null)\r\n\r\n // Compute allowed chain IDs based on config side\r\n const allowedChainIds = useMemo(() => {\r\n const sideChains = isSelectingFromToken ? config?.from?.chains : config?.to?.chains\r\n return sideChains?.length ? sideChains : undefined\r\n }, [isSelectingFromToken, config?.from?.chains, config?.to?.chains])\r\n\r\n // When config restricts chains/tokens, show simplified view (no categories, no search)\r\n const isPreconfigured = useMemo(() => {\r\n return isSelectingFromToken\r\n ? !!(config?.from?.chains?.length || config?.from?.chainTokens)\r\n : !!(config?.to?.chains?.length || config?.to?.chainTokens)\r\n }, [isSelectingFromToken, config?.from?.chains, config?.from?.chainTokens, config?.to?.chains, config?.to?.chainTokens])\r\n\r\n // Build allowed token set from config (chainTokens), keyed by \"chainId:address\"\r\n const allowedTokenSet = useMemo(() => {\r\n const tokenConfig = isSelectingFromToken ? config?.from?.chainTokens : config?.to?.chainTokens\r\n if (!tokenConfig) return null\r\n const set = new Set<string>()\r\n for (const entries of Object.values(tokenConfig)) {\r\n for (const t of entries) {\r\n set.add(`${t.chainId}:${t.address.toLowerCase()}`)\r\n }\r\n }\r\n return set.size > 0 ? set : null\r\n }, [isSelectingFromToken, config?.from?.chainTokens, config?.to?.chainTokens])\r\n\r\n const {\r\n popularChains,\r\n orderedChains,\r\n searchChains,\r\n tokens,\r\n searchChainsValue,\r\n searchTokensValue,\r\n handleSearchChains,\r\n handleSearchTokens,\r\n resetSearch,\r\n allChains\r\n } = useChainsAndTokensForSelect({\r\n data,\r\n selectedChain,\r\n allowedChainIds,\r\n allowedTokenSet,\r\n userBalances:\r\n isSelectingFromToken === false && differentAddress\r\n ? userDifferentAddressBalances\r\n : userBalances,\r\n selectedChainByPlatformId\r\n })\r\n const { favorites } = useFavoritesContext()\r\n\r\n const { searchTokensInfo, isLoadingSearchTokenInfo } = useSearchTokens({\r\n searchTokensValue,\r\n selectedChain,\r\n allTokens: tokens\r\n })\r\n\r\n const { userHasSelectedFromNetwork, setUserHasSelectedFromNetwork } =\r\n useUserHasSelectedFromNetwork()\r\n\r\n const { chains } = useChainsStore()\r\n const [disableTestnetLimit, setDisableTestnetLimit] = useState(false)\r\n\r\n const [tempSelectAll, setTempSelectAll] = useState(false)\r\n const [tempSelectedChain, setTempSelectedChain] = useState<number | null>(\r\n null\r\n )\r\n const [tempSelectedPlatformId, setTempSelectedPlatformId] = useState<\r\n number | null\r\n >(null)\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Check if the currently selected network is a testnet\r\n const isCurrentChainTestnet = (chainId: number | undefined) => {\r\n if (!chainId) return false\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n return chainInfo?.is_testnet === true\r\n }\r\n\r\n const fromTestnet = isCurrentChainTestnet(fromChainId)\r\n const toTestnet = isCurrentChainTestnet(toChainId)\r\n\r\n if (isSelectingFromToken) {\r\n setDisableTestnetLimit(!toTestnet)\r\n } else {\r\n setDisableTestnetLimit(!fromTestnet)\r\n }\r\n \r\n if (tempSelectAll) {\r\n const shouldRestoreTestnet = isSelectingFromToken\r\n ? isCurrentChainTestnet(toChainId)\r\n : isCurrentChainTestnet(fromChainId)\r\n\r\n if (shouldRestoreTestnet && tempSelectedChain !== null) {\r\n setIsSelectAll(false)\r\n setSelectedChain(tempSelectedChain)\r\n if (tempSelectedPlatformId !== null) {\r\n setSelectedChainByPlatformId(tempSelectedPlatformId)\r\n }\r\n setTempSelectAll(false)\r\n setTempSelectedChain(null)\r\n setTempSelectedPlatformId(null)\r\n }\r\n }\r\n\r\n if (isSelectingFromToken) {\r\n if (isLoadingUserBalances) return\r\n if (isArcTestnetShortLink) {\r\n // Keep original Arc testnet short link logic\r\n setIsSelectAll(false)\r\n const arcTestnetChain = chains?.find((chain) => chain.chain_id === 78600 && chain.is_testnet === true)\r\n if (arcTestnetChain) {\r\n setSelectedChain(arcTestnetChain.chain_id)\r\n }\r\n } else if (\r\n userBalances &&\r\n userBalances.length > 0 &&\r\n !userHasSelectedFromNetwork &&\r\n !tempSelectAll &&\r\n !allowedChainIds // Don't select-all when config restricts chains\r\n ) {\r\n setIsSelectAll(true)\r\n setSelectedChain(null)\r\n } else {\r\n setIsSelectAll(false)\r\n setSelectedChain(fromChainId)\r\n }\r\n } else {\r\n setIsSelectAll(false)\r\n setSelectedChain(toChainId)\r\n setSelectedChainByPlatformId(toChainPlatformId)\r\n }\r\n }\r\n }, [isOpen, fromChainId, toChainId, isSelectingFromToken, isLoadingUserBalances, chains, tempSelectAll, tempSelectedChain, tempSelectedPlatformId, isArcTestnetShortLink, userBalances, userHasSelectedFromNetwork, toChainPlatformId, allowedChainIds])\r\n\r\n const { favoriteChains, nonFavoriteChains } = useMemo(() => {\r\n return processChains(favorites, orderedChains || [])\r\n }, [favorites, orderedChains])\r\n\r\n const normalChains = useMemo(() => {\r\n return nonFavoriteChains.filter(\r\n (item) => !item.hasOwnProperty('platform_id')\r\n )\r\n }, [nonFavoriteChains])\r\n\r\n const predictionChains = useMemo(() => {\r\n return nonFavoriteChains.filter((item) =>\r\n item.hasOwnProperty('platform_id')\r\n )\r\n }, [nonFavoriteChains])\r\n\r\n const handleSelectChains = useCallback(\r\n (chainId: number, platformId: number | undefined) => {\r\n if (isSelectingFromToken) {\r\n setUserHasSelectedFromNetwork(true)\r\n }\r\n setIsSelectAll(false)\r\n setSelectedChain(chainId)\r\n setSelectedChainByPlatformId(platformId || null)\r\n },\r\n [isSelectingFromToken, setUserHasSelectedFromNetwork]\r\n )\r\n\r\n const handleSelectAll = useCallback(() => {\r\n setTempSelectedChain(selectedChain)\r\n setTempSelectedPlatformId(selectedChainByPlatformId)\r\n setTempSelectAll(true)\r\n\r\n setUserHasSelectedFromNetwork(false)\r\n setIsSelectAll(true)\r\n setSelectedChain(null)\r\n }, [setUserHasSelectedFromNetwork, selectedChain, selectedChainByPlatformId])\r\n\r\n const handleClose = useCallback(() => {\r\n onClose()\r\n setTimeout(() => {\r\n resetSearch()\r\n setIsMobileChainsOpen(false)\r\n }, 100)\r\n }, [onClose, resetSearch])\r\n\r\n const _onSelectToken = useCallback(\r\n (tokenInfo: TokenInfo) => {\r\n setTempSelectAll(false)\r\n setTempSelectedChain(null)\r\n setTempSelectedPlatformId(null)\r\n\r\n onSelectToken(tokenInfo)\r\n handleClose()\r\n },\r\n [handleClose, onSelectToken]\r\n )\r\n\r\n // mobile search\r\n const [isMobileChainsOpen, setIsMobileChainsOpen] = useState(false)\r\n\r\n const selectedChainInfo = allChains?.find((chain) => {\r\n if (selectedChainByPlatformId) {\r\n return chain.platform_id === selectedChainByPlatformId\r\n } else {\r\n return chain.chain_id === selectedChain\r\n }\r\n })\r\n\r\n // console.log('selectedChainInfo', selectedChainInfo)\r\n\r\n return (\r\n <Dialog.Root\r\n open={isOpen}\r\n onOpenChange={handleClose}\r\n placement={'center'}\r\n trapFocus={false}\r\n scrollBehavior=\"outside\"\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner px={4}>\r\n <Dialog.Content\r\n pos={'relative'}\r\n p={{\r\n base: 2,\r\n md: 4\r\n }}\r\n maxW={{\r\n base: '430px',\r\n md: '700px'\r\n }}\r\n borderRadius={'24px'}\r\n boxShadow={'0px 12px 36px 0px #007B9D59'}\r\n h={'min(85vh, 756px)'}\r\n bg={theme.defaultBgColor}\r\n >\r\n <VStack\r\n gap={{\r\n base: 6\r\n }}\r\n w={'100%'}\r\n h={'100%'}\r\n alignItems={'center'}\r\n >\r\n <Dialog.Header justifyContent={'center'}>\r\n <Heading\r\n variant={{\r\n base: 'heading10',\r\n md: 'heading8'\r\n }}\r\n mt={1.5}\r\n color={theme.defaultTextColor}\r\n >\r\n Select {isSelectingFromToken ? '\"From\"' : '\"To\"'} chain and\r\n token\r\n </Heading>\r\n </Dialog.Header>\r\n\r\n <Dialog.Body flex={1} w={'100%'} overflow={'hidden'}>\r\n {/* desktop */}\r\n <DesktopContent\r\n isLoading={\r\n isLoadingUserBalances ||\r\n isLoadingChains ||\r\n isLoadingSearchTokenInfo\r\n }\r\n searchChainsValue={searchChainsValue}\r\n handleSearchChains={handleSearchChains}\r\n isSelectAll={isSelectAll}\r\n selectedChain={selectedChain}\r\n selectedPlatform={selectedChainByPlatformId || 0}\r\n handleSelectAll={handleSelectAll}\r\n handleSelectChains={handleSelectChains}\r\n searchTokensValue={searchTokensValue}\r\n handleSearchTokens={handleSearchTokens}\r\n onSelectToken={_onSelectToken}\r\n popularChains={popularChains}\r\n orderedChains={normalChains}\r\n favChains={favoriteChains}\r\n orderedPredictionChains={predictionChains}\r\n tokens={tokens}\r\n userBalances={userBalances}\r\n searchChains={searchChains}\r\n searchTokensInfo={searchTokensInfo}\r\n isSelectingFromToken={isSelectingFromToken}\r\n chainId={selectedChain}\r\n resetSearch={resetSearch}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n isPreconfigured={isPreconfigured}\r\n />\r\n\r\n {/* mobile */}\r\n <MobileContent\r\n isLoading={\r\n isLoadingUserBalances ||\r\n isLoadingChains ||\r\n isLoadingSearchTokenInfo\r\n }\r\n isSelectAll={isSelectAll}\r\n isMobileChainsOpen={isMobileChainsOpen}\r\n searchTokensValue={searchTokensValue}\r\n searchChainsValue={searchChainsValue}\r\n handleSearchTokens={handleSearchTokens}\r\n handleSearchChains={handleSearchChains}\r\n handleSelectChains={handleSelectChains}\r\n handleSelectAll={handleSelectAll}\r\n setIsMobileChainsOpen={setIsMobileChainsOpen}\r\n onSelectToken={_onSelectToken}\r\n popularChains={popularChains}\r\n orderedChains={normalChains}\r\n favChains={favoriteChains}\r\n tokens={tokens}\r\n selectedChainInfo={selectedChainInfo}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n chainId={selectedChain}\r\n selectedChain={selectedChain}\r\n selectedPlatform={selectedChainByPlatformId || 0}\r\n orderedPredictionChains={predictionChains}\r\n resetSearch={resetSearch}\r\n isSelectingFromToken={isSelectingFromToken}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n isPreconfigured={isPreconfigured}\r\n />\r\n </Dialog.Body>\r\n </VStack>\r\n\r\n <Dialog.CloseTrigger\r\n left={4}\r\n top={3.5}\r\n right={'auto'}\r\n color={theme.weakTextColor}\r\n cursor={'pointer'}\r\n hideBelow={'md'}\r\n >\r\n <Icon boxSize={'40px'} as={BackIcon} />\r\n </Dialog.CloseTrigger>\r\n {/* do not use asChild, the ios 10 will not show the close icon */}\r\n <Dialog.CloseTrigger\r\n top={3}\r\n right={3}\r\n left={'auto'}\r\n cursor={'pointer'}\r\n hideFrom={'md'}\r\n >\r\n <Icon boxSize={'24px'} color={theme.weakTextColor} as={CloseIcon} />\r\n </Dialog.CloseTrigger>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n )\r\n}\r\n\r\nexport default memo(SelectTokenModal)\r\n","import { HStack, VStack } from '@chakra-ui/react'\r\n\r\nimport { TokenInfo } from '../api'\r\nimport { useChainsStore } from './hooks'\r\n\r\nimport { TokenIconWithNetworkLogo } from './commons/TokenIconWithNetworkLogo'\r\nimport { Heading, Text } from './ui'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n tokenInfo: TokenInfo\r\n priority?: boolean\r\n}\r\n\r\nexport const TokenInfoCom = ({ tokenInfo, priority = false }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { chain_id, symbol, platform_id } = tokenInfo\r\n\r\n const { chains } = useChainsStore()\r\n const chainInfo = chains?.find((chain) => {\r\n if (platform_id && platform_id > 0) {\r\n return chain.platform_id === platform_id\r\n } else {\r\n return chain.chain_id === chain_id\r\n }\r\n })\r\n\r\n // console.log('#######chainInfo#########:', chainInfo)\r\n\r\n return (\r\n <HStack>\r\n <TokenIconWithNetworkLogo\r\n tokenInfo={tokenInfo}\r\n customChainLogo={chainInfo?.chain_icon}\r\n priority={priority}\r\n />\r\n <VStack align={'start'} gap={1} flex={1}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n lineClamp={1}\r\n wordBreak={'break-all'}\r\n >\r\n {symbol}\r\n </Heading>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n lineClamp={1}\r\n wordBreak={'break-all'}\r\n >\r\n {chainInfo?.name}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n )\r\n}\r\n","import { Button, HStack, Icon, Input, Image, Box } from '@chakra-ui/react'\r\nimport { VStack } from '@chakra-ui/react'\r\nimport { useCallback, useEffect, useMemo, useState } from 'react'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\nimport { TokenInfo } from '../api'\r\n\r\nimport { TokenInfoCom } from './TokenInfoCom'\r\n\r\nimport { ArrowDownIcon } from './icons'\r\nimport { Heading, Text } from './ui'\r\nimport { debounce, hyperliquidChainId, toBigInt } from './utils'\r\nimport { formatTokenAmount, sliceAddress } from '../utils'\r\nimport { zeroAddress } from 'viem'\r\nimport { WalletIcon as DynamicWalletIcon } from '@dynamic-labs/wallet-book'\r\n\r\nimport { useEvmAddress } from '../utils/wallet'\r\n\r\nimport { useSwapAndBridgeContextStore, useTokenBalance } from './hooks'\r\nimport { isSolanaChain } from '../consts/solana'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\n// import { MetamaskIcon } from './icons'\r\nimport { useHyperliquidBalance } from '../api/useHyperliquid'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { useWalletConnectModal } from './hooks/useWalletConnectModal'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\n\r\nimport {\r\n useSolanaTokenUsdPrice,\r\n useSolanaTokenBalance\r\n} from './hooks/useSolanaTokenBalance'\r\n\r\nconst defaultIcon = 'https://wheelx.fi/images/wallet-icon/wallet2.png'\r\n\r\ntype DynamicWalletLike = {\r\n chain?: string | null\r\n key?: string | null\r\n name?: string | null\r\n walletName?: string | null\r\n connector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n walletConnector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n}\r\n\r\nconst normalizeWalletKey = (value?: string | null) =>\r\n value?.toLowerCase().trim().replace(/\\s+/g, '') || null\r\n\r\nconst getWalletBookKey = (wallet?: DynamicWalletLike) => {\r\n if (!wallet) return null\r\n\r\n const candidates = [\r\n wallet.key,\r\n wallet.connector?.key,\r\n wallet.walletConnector?.key,\r\n wallet.connector?.id,\r\n wallet.walletConnector?.id,\r\n wallet.name,\r\n wallet.walletName\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n const normalized = normalizeWalletKey(candidate)\r\n if (normalized) return normalized\r\n }\r\n\r\n return null\r\n}\r\n\r\ninterface TokenSelectAndInputProps {\r\n\r\n text: 'From' | 'To'\r\n onClick: () => void\r\n amount: string\r\n onChange: (value: string) => void\r\n userBalance: Fraction\r\n tokenInfo: TokenInfo\r\n usdPrice?: Fraction\r\n totalGasFee?: bigint\r\n isLoadingFeeData?: boolean\r\n isInsufficientBalance?: boolean\r\n onOpenDialog?: () => void\r\n}\r\n\r\nexport const TokenSelectAndInput = ({\r\n text,\r\n tokenInfo,\r\n onClick,\r\n amount,\r\n onChange,\r\n userBalance,\r\n usdPrice,\r\n totalGasFee,\r\n isLoadingFeeData,\r\n isInsufficientBalance,\r\n onOpenDialog\r\n}: TokenSelectAndInputProps) => {\r\n const address = useEvmAddress()\r\n const userWallets = useUserWallets()\r\n const { openModal, openConnectModal } = useWalletConnectModal()\r\n const { theme } = useWidgetTheme()\r\n\r\n\r\n\r\n\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const [isNative, setIsNative] = useState(false)\r\n // set value to state immediately to avoid the input value is not updated immediately when use debounce\r\n const [value, setValue] = useState(amount)\r\n const {\r\n setFromAmountToUsd,\r\n setToAmountToUsd,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n fromTokenInfo,\r\n toTokenInfo\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n setValue(amount)\r\n }, [amount])\r\n\r\n const isFrom = text === 'From'\r\n const { differentAddress, isDepositPlatformToken } =\r\n useDifferentAddressStore()\r\n\r\n const toTokenDifferentAddressBalance = useTokenBalance({\r\n chainId: tokenInfo.chain_id,\r\n tokenAddress:\r\n tokenInfo.address === zeroAddress ? undefined : tokenInfo.address,\r\n connectAddress: differentAddress\r\n ? (differentAddress as `0x${string}`)\r\n : address\r\n })\r\n\r\n const [isToHyperChain, setIsToHyperChain] = useState(false)\r\n\r\n const { data: toTokenBalanceHyperBack } = useHyperliquidBalance(\r\n differentAddress ? (differentAddress as `0x${string}`) : address,\r\n isToHyperChain\r\n )\r\n\r\n const toTokenBalanceHyper = {\r\n decimals: 6,\r\n formatted: toTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n toTokenBalanceHyperBack?.withdrawable\r\n ? toTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (!isFrom) {\r\n if (tokenInfo.chain_id === hyperliquidChainId) {\r\n setIsToHyperChain(true)\r\n } else {\r\n setIsToHyperChain(false)\r\n }\r\n }\r\n }, [tokenInfo, isFrom])\r\n\r\n const toDifferentAddressBalance = isToHyperChain\r\n ? new Fraction(toTokenBalanceHyper?.value ?? 0n)\r\n : new Fraction(toTokenDifferentAddressBalance?.value ?? 0n)\r\n const differentAddressBalance = formatTokenAmount({\r\n amount: toDifferentAddressBalance,\r\n decimals: tokenInfo.decimals\r\n })\r\n\r\n const connectedEvmWallet = useMemo(\r\n () =>\r\n userWallets.find((item) => {\r\n const chain = String(\r\n (item as unknown as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as unknown as DynamicWalletLike | undefined,\r\n [userWallets]\r\n )\r\n\r\n const connectedSolanaWallet = useMemo(\r\n () =>\r\n userWallets.find((item) => {\r\n const chain = String(\r\n (item as unknown as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as unknown as DynamicWalletLike | undefined,\r\n [userWallets]\r\n )\r\n\r\n const evmWalletKey = useMemo(\r\n () => getWalletBookKey(connectedEvmWallet),\r\n [connectedEvmWallet]\r\n )\r\n\r\n const solanaWalletKey = useMemo(\r\n () => getWalletBookKey(connectedSolanaWallet),\r\n [connectedSolanaWallet]\r\n )\r\n\r\n const walletIcon = useMemo(\r\n () => (\r\n <Box\r\n boxSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n borderRadius={'full'}\r\n overflow={'hidden'}\r\n bg={'white'}\r\n >\r\n {evmWalletKey ? (\r\n <DynamicWalletIcon\r\n walletKey={evmWalletKey}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n ) : (\r\n <Image src={defaultIcon} alt=\"connector\" w={'100%'} h={'100%'} />\r\n )}\r\n </Box>\r\n ),\r\n [evmWalletKey]\r\n )\r\n\r\n const renderSolanaWalletIcon = useCallback(() => {\r\n return (\r\n <Box\r\n boxSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n borderRadius={'full'}\r\n overflow={'hidden'}\r\n bg={'white'}\r\n >\r\n {solanaWalletKey ? (\r\n <DynamicWalletIcon\r\n walletKey={solanaWalletKey}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n ) : (\r\n <Image src={defaultIcon} alt=\"connector\" w={'100%'} h={'100%'} />\r\n )}\r\n </Box>\r\n )\r\n }, [solanaWalletKey])\r\n\r\n\r\n useEffect(() => {\r\n if (isFrom) {\r\n const { tags } = tokenInfo\r\n if (tags.includes('native')) {\r\n setIsNative(true)\r\n } else {\r\n setIsNative(false)\r\n }\r\n }\r\n }, [tokenInfo, isFrom])\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const debouncedOnChange = useCallback(debounce(onChange, 500), [onChange])\r\n\r\n const handleValueChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value\r\n if (value === '.') {\r\n setValue('0.')\r\n return\r\n }\r\n if (value === '' || /^\\d*\\.?\\d*$/.test(value)) {\r\n // set value to state immediately\r\n setValue(value)\r\n // debounce the onChange function\r\n const isSame = new Fraction(value).eq(amount)\r\n if (!isSame) {\r\n debouncedOnChange(value)\r\n }\r\n }\r\n },\r\n [amount, debouncedOnChange]\r\n )\r\n\r\n const handleFocus = useCallback(() => {\r\n setIsFocused(true)\r\n }, [])\r\n\r\n const handleBlur = useCallback(() => {\r\n setIsFocused(false)\r\n }, [])\r\n\r\n const handleQuickInput = useCallback(\r\n async (value: string) => {\r\n const plusGasFee = new Fraction('0.00008')\r\n .shl(tokenInfo.decimals)\r\n .add(totalGasFee ?? 0n)\r\n\r\n const maxValue =\r\n (tokenInfo.address === zeroAddress || isNative) &&\r\n userBalance.gt(plusGasFee)\r\n ? userBalance.sub(plusGasFee)\r\n : userBalance\r\n\r\n const _value = value === '50%' ? userBalance.div(2) : maxValue\r\n if (value === 'Max' && isLoadingFeeData) {\r\n return\r\n }\r\n const _amount = formatTokenAmount({\r\n amount: _value,\r\n decimals: tokenInfo.decimals,\r\n useGroupSeparator: false\r\n })\r\n if (_amount !== amount) {\r\n onChange(_amount)\r\n }\r\n },\r\n [\r\n amount,\r\n isLoadingFeeData,\r\n isNative,\r\n onChange,\r\n tokenInfo.address,\r\n tokenInfo.decimals,\r\n totalGasFee,\r\n userBalance\r\n ]\r\n )\r\n\r\n const balance = formatTokenAmount({\r\n amount: userBalance,\r\n decimals: tokenInfo.decimals\r\n })\r\n\r\n // useEffect(() => {\r\n // if (isFrom) {\r\n // console.log('######userBalance.gt(0)######:', userBalance.gt(0))\r\n // console.log('######isFrom######:', isFrom)\r\n // }\r\n // }, [isFrom, userBalance])\r\n\r\n // const usdValue =\r\n // usdPrice && amount && usdPrice.gt(0)\r\n // ? new Fraction(amount).mul(usdPrice).toFormat({\r\n // decimalPlaces: 2\r\n // })\r\n // : null\r\n\r\n const { data: solanaUsdPrice } = useSolanaTokenUsdPrice(\r\n tokenInfo.isSolana ? tokenInfo.address : undefined\r\n )\r\n\r\n const usdValue = useMemo(() => {\r\n if (tokenInfo.isSolana && solanaUsdPrice && amount) {\r\n return (parseFloat(amount) * solanaUsdPrice).toFixed(2)\r\n }\r\n // EVM\r\n if (usdPrice && amount && usdPrice.gt(0)) {\r\n return new Fraction(amount).mul(usdPrice).toFormat({\r\n decimalPlaces: 2\r\n })\r\n }\r\n return null\r\n }, [tokenInfo.isSolana, solanaUsdPrice, amount, usdPrice])\r\n\r\n const isNativeSOL =\r\n tokenInfo.isSolana &&\r\n (tokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n String(tokenInfo.address) === '11111111111111111111111111111111')\r\n\r\n\r\n\r\n // Solana\r\n const { data: solanaBalance } = useSolanaTokenBalance(\r\n isNativeSOL\r\n ? undefined\r\n : tokenInfo.isSolana\r\n ? tokenInfo.address\r\n : undefined,\r\n tokenInfo.isSolana\r\n )\r\n\r\n const displayBalance = useMemo(() => {\r\n if (!isFrom && tokenInfo.isSolana && solanaBalance) {\r\n return solanaBalance.formatted\r\n }\r\n return differentAddressBalance\r\n }, [isFrom, tokenInfo.isSolana, solanaBalance, differentAddressBalance])\r\n\r\n useEffect(() => {\r\n if (isFrom) {\r\n setFromAmountToUsd(usdValue)\r\n } else {\r\n setToAmountToUsd(usdValue)\r\n }\r\n }, [isFrom, setFromAmountToUsd, setToAmountToUsd, usdValue])\r\n\r\n const renderLossWarning = () => {\r\n if (!isFrom && fromAmountToUsd && toAmountToUsd) {\r\n if (+fromAmountToUsd > 50 && +fromAmountToUsd > +toAmountToUsd) {\r\n const loss = -(+toAmountToUsd - +fromAmountToUsd) / +fromAmountToUsd\r\n if (loss >= 0.1) {\r\n // console.log('###loss###:', loss)\r\n return (\r\n <Text\r\n as={'span'}\r\n color={'#ff4267'}\r\n >{` (-${(loss * 100).toFixed(2)}%)`}</Text>\r\n )\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n\r\n const FiEditDom = () => {\r\n return (\r\n <FiEdit\r\n cursor={'pointer'}\r\n width={'16px'}\r\n height={'16px'}\r\n color={theme.weakTextColor}\r\n onClick={() => {\r\n onOpenDialog?.()\r\n }}\r\n />\r\n )\r\n }\r\n\r\n const renderSolanaAddress = (currentAddress: string) => {\r\n // Only use differentAddress if it's a Solana-format address (not EVM 0x...).\r\n // TokenAndAddress.tsx may set differentAddress to the EVM wallet address\r\n // for Solana tokens when Solana is not yet connected, which we must ignore.\r\n const isSolanaDiff = differentAddress && !differentAddress.startsWith('0x')\r\n const displayAddress = isSolanaDiff ? differentAddress : currentAddress\r\n const isCustomDiff =\r\n isSolanaDiff && differentAddress !== currentAddress\r\n return (\r\n <HStack gap={1}>\r\n {renderSolanaWalletIcon()}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.highlightBgColor}\r\n padding={'2px'}\r\n color={isCustomDiff ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(displayAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n\r\n const renderEvmAddress = (currentAddress: string) => {\r\n const isDifferent =\r\n differentAddress &&\r\n differentAddress.toLowerCase() !== currentAddress.toLowerCase()\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.highlightBgColor}\r\n padding={'2px'}\r\n color={isDifferent ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : currentAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n\r\n const renderDifferentAddress = () => {\r\n if ((address || solanaWalletAddress) && !isFrom) {\r\n if (isDepositPlatformToken) {\r\n if (differentAddress) {\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n padding={'2px'}\r\n color={differentAddress ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(differentAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n return (\r\n <HStack gap={1}>\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.weakTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n onClick={() => {\r\n onOpenDialog?.()\r\n }}\r\n >\r\n Enter Address\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n if (address && !solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id)) ||\r\n (fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id))\r\n ) {\r\n return (\r\n <HStack\r\n gap={1}\r\n onClick={() => {\r\n openModal?.()\r\n }}\r\n cursor={'pointer'}\r\n >\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.defaultTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n >\r\n Connect Wallet\r\n </Text>\r\n <IoAddCircleOutline\r\n style={{\r\n width: '14px',\r\n height: '14px',\r\n color: theme.weakTextColor\r\n }}\r\n />\r\n </HStack>\r\n )\r\n }\r\n } else if (!address && solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id)) ||\r\n (fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id))\r\n ) {\r\n return renderSolanaAddress(solanaWalletAddress)\r\n } else {\r\n return (\r\n <HStack\r\n gap={1}\r\n onClick={() => {\r\n openConnectModal()\r\n }}\r\n cursor={'pointer'}\r\n >\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.defaultTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n >\r\n Connect Wallet\r\n </Text>\r\n <IoAddCircleOutline\r\n style={{\r\n width: '14px',\r\n height: '14px',\r\n color: theme.weakTextColor\r\n }}\r\n />\r\n </HStack>\r\n )\r\n }\r\n } else if (address && solanaWalletAddress) {\r\n if (isSolanaChain(toTokenInfo.chain_id)) {\r\n return renderSolanaAddress(solanaWalletAddress)\r\n }\r\n return renderEvmAddress(address)\r\n }\r\n\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n padding={'2px'}\r\n color={\r\n differentAddress &&\r\n differentAddress.toLowerCase() !== address?.toLowerCase()\r\n ? theme.highlightTextColor\r\n : theme.defaultTextColor\r\n }\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : address)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n return (\r\n <VStack\r\n align={'start'}\r\n w={'100%'}\r\n bg={theme.assistBgColor}\r\n px={{\r\n base: 2,\r\n md: 4\r\n }}\r\n paddingBottom={{\r\n base: isFrom ? 2 : 7,\r\n md: isFrom ? 3 : 8\r\n }}\r\n paddingTop={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '8px',\r\n md: '16px'\r\n }}\r\n gap={'0'}\r\n >\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n color={theme.weakTextColor}\r\n marginBottom={[2]}\r\n >\r\n <Heading variant={'heading11'} height={'18px'} color={theme.weakTextColor}>\r\n {text}\r\n </Heading>\r\n\r\n {address || (tokenInfo.isSolana && solanaWalletAddress) ? (\r\n <>\r\n {isFrom &&\r\n ((tokenInfo.isSolana && solanaBalance) || userBalance.gt(0)) ? (\r\n <HStack color={theme.defaultTextColor}>\r\n <Button\r\n variant={'outline'}\r\n minW={'30px'}\r\n h={{\r\n base: '18px'\r\n }}\r\n borderRadius={'4px'}\r\n border={'1px solid'}\r\n borderColor={theme.highlightTextColor}\r\n onClick={() => handleQuickInput('50%')}\r\n >\r\n <Text variant={'content9'} color={theme.highlightTextColor}>50%</Text>\r\n </Button>\r\n <Button\r\n minW={'30px'}\r\n h={{\r\n base: '18px'\r\n }}\r\n borderRadius={'4px'}\r\n bg={theme.highlightButtonBg}\r\n onClick={() => handleQuickInput('Max')}\r\n >\r\n <Text variant={'content9'} color={theme.highlightButtonText}>Max</Text>\r\n </Button>\r\n <Text variant={'content8'} color={theme.weakTextColor}>\r\n Balance:{' '}\r\n {tokenInfo.isSolana && solanaBalance\r\n ? solanaBalance.formatted\r\n : balance}\r\n </Text>\r\n </HStack>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n ) : null}\r\n {renderDifferentAddress()}\r\n </HStack>\r\n\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n align={'center'}\r\n gap={{\r\n base: 2.5,\r\n md: 6\r\n }}\r\n >\r\n <HStack\r\n gap={{\r\n base: 1,\r\n md: 3\r\n }}\r\n onClick={onClick}\r\n cursor={'pointer'}\r\n justify={'space-between'}\r\n px={{\r\n base: 1.5,\r\n md: 2.5\r\n }}\r\n py={{\r\n base: 2.5\r\n }}\r\n bg={theme.highlightBgColor}\r\n borderRadius={{\r\n base: '8px',\r\n md: '12px'\r\n }}\r\n w={'50%'}\r\n >\r\n\r\n <TokenInfoCom tokenInfo={tokenInfo} priority />\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n color={theme.defaultTextColor}\r\n as={ArrowDownIcon}\r\n />\r\n </HStack>\r\n\r\n <VStack\r\n w={'50%'}\r\n pb={2}\r\n h={{\r\n base: '48px',\r\n md: '52px'\r\n }}\r\n border={'1px solid'}\r\n borderColor={isFocused ? theme.highlightBorderColor : theme.defaultBorderColor}\r\n bg={theme.defaultBgColor}\r\n borderRadius={{\r\n base: '8px',\r\n md: '12px'\r\n }}\r\n align={'flex-end'}\r\n position={'relative'}\r\n >\r\n <Input\r\n id={`${text.toLowerCase()}-input`}\r\n px={{\r\n base: 2,\r\n md: 3\r\n }}\r\n textAlign={'right'}\r\n fontWeight={'600'}\r\n fontSize={{\r\n base: '16px',\r\n md: '18px'\r\n }}\r\n _placeholder={{\r\n color: 'brand-grey3'\r\n }}\r\n onBlur={handleBlur}\r\n onFocus={handleFocus}\r\n disabled={!isFrom}\r\n color={isInsufficientBalance ? 'red' : theme.defaultTextColor}\r\n _disabled={{\r\n color: theme.weakTextColor,\r\n opacity: 1\r\n }}\r\n border={'none'}\r\n _focus={{\r\n outlineWidth: '0px'\r\n }}\r\n placeholder=\"0\"\r\n onChange={handleValueChange}\r\n value={value}\r\n inputMode=\"decimal\"\r\n type=\"text\"\r\n autoComplete=\"off\"\r\n />\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n pos={'absolute'}\r\n right={{\r\n base: 2,\r\n md: 3\r\n }}\r\n bottom={'5px'}\r\n >\r\n {usdValue ? `~$${usdValue}` : null}\r\n {renderLossWarning()}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n <HStack\r\n w={'100%'}\r\n justify={'flex-end'}\r\n color={theme.weakTextColor}\r\n height={'18px'}\r\n overflow={'hidden'}\r\n lineHeight={'18px'}\r\n position={'absolute'}\r\n bottom={['6px', '8px']}\r\n left={0}\r\n paddingRight={[2, 4]}\r\n >\r\n {!isFrom && !isDepositPlatformToken && (\r\n <>\r\n {tokenInfo.isSolana\r\n ? solanaWalletAddress && (\r\n <Text variant={'content8'}>Balance: {displayBalance}</Text>\r\n )\r\n : address && (\r\n <Text variant={'content8'}>Balance: {displayBalance}</Text>\r\n )}\r\n </>\r\n )}\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","'use client'\r\nimport { HStack, VStack, Icon, Box } from '@chakra-ui/react'\r\nimport { Heading, Text } from './ui'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { FaGasPump } from 'react-icons/fa6'\r\n// import { PiWaveSineFill } from 'react-icons/pi'\r\nimport { TokenInfo } from '../api'\r\nimport { useEffect, useState } from 'react'\r\n\r\ninterface TipsContentProps {\r\n priceImpact: {\r\n bridgeFee: string\r\n dstGasFee: string\r\n swapFee: string\r\n before_discount_fee: string\r\n discount_percentage: string | undefined\r\n }\r\n toTokenInfo: TokenInfo\r\n fromTokenInfo: TokenInfo\r\n router_type: string | null | undefined\r\n fromAmountToUsd: string | null | undefined\r\n toAmountToUsd: string | null | undefined\r\n points?: number | 0 | string\r\n}\r\n\r\nexport const TipsContent = ({\r\n priceImpact,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n // router_type,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n points\r\n}: TipsContentProps) => {\r\n const { chain_id: toChainId /*symbol: toTokenSymbol*/ } = toTokenInfo\r\n const { chain_id: fromChainId /*symbol: fromTokenSymbol*/ } = fromTokenInfo\r\n const totalPriceImpact = new Fraction(priceImpact.bridgeFee)\r\n .add(priceImpact.dstGasFee)\r\n .add(priceImpact.swapFee)\r\n\r\n const [hasDiscount, setHasDiscount] = useState(false)\r\n\r\n useEffect(() => {\r\n if (priceImpact) {\r\n if (\r\n priceImpact.before_discount_fee &&\r\n priceImpact.before_discount_fee !== priceImpact.swapFee &&\r\n // priceImpact.swapFee !== '0' &&\r\n priceImpact.before_discount_fee !== '0'\r\n ) {\r\n setHasDiscount(true)\r\n } else {\r\n setHasDiscount(false)\r\n }\r\n }\r\n }, [priceImpact])\r\n\r\n const renderTotalPriceImpact = () => {\r\n if (toAmountToUsd === null) {\r\n return '-'\r\n }\r\n // only exact match 0, return free, if 0.00000 is not free\r\n if (\r\n priceImpact.bridgeFee === '0' &&\r\n priceImpact.dstGasFee === '0' &&\r\n priceImpact.swapFee === '0'\r\n ) {\r\n return 'Free'\r\n }\r\n\r\n const priceImpactValue = +totalPriceImpact.toFormat({ decimalPlaces: 2 })\r\n const sif = +swapImpactFee()\r\n // console.log('priceImpactValue:', priceImpactValue, 'sif:', sif)\r\n const total = -priceImpactValue + -sif\r\n\r\n if (total < 0) {\r\n return `-$${(-total).toFixed(2)}`\r\n }\r\n return `+$${total.toFixed(2)}`\r\n }\r\n // const renderTotalPriceImpact = () => {\r\n // // only exact match 0, return free, if 0.00000 is not free\r\n // if (\r\n // +fromAmountToUsd - +toAmountToUsd === 0 ||\r\n // +fromAmountToUsd - +toAmountToUsd < 0\r\n // ) {\r\n // return 'Free'\r\n // }\r\n // return `-$${(+fromAmountToUsd - +toAmountToUsd).toFixed(2)} `\r\n // }\r\n\r\n const renderDiscount = (beforeFee: string, afterFee: string) => {\r\n if (beforeFee && afterFee) {\r\n return (\r\n <HStack gap={0}>\r\n <Box color={'brand-purple'} marginRight={'3px'}>\r\n -${new Fraction(afterFee).toFormat({ decimalPlaces: 2 })}\r\n </Box>\r\n <Box textDecoration={'line-through'} color=\"gray\">\r\n ${new Fraction(beforeFee).toFormat({ decimalPlaces: 2 })}\r\n </Box>\r\n {renderDiscountPercentage()}\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderDiscountPercentage = () => {\r\n if (priceImpact.discount_percentage) {\r\n return (\r\n <Box\r\n color={'#000'}\r\n backgroundColor={'#ffd400'}\r\n width={'30px'}\r\n borderRadius={'4px'}\r\n textAlign={'center'}\r\n fontSize={'10px'}\r\n marginLeft={'3px'}\r\n >\r\n {priceImpact.discount_percentage}%\r\n </Box>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderFee = (fee: string) => {\r\n if (fee === '0') {\r\n return (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -${new Fraction(fee).toFormat({ decimalPlaces: 2 })}\r\n </Text>\r\n )\r\n }\r\n\r\n const swapImpactFee = () => {\r\n const i = fromAmountToUsd ? +fromAmountToUsd.replace(/,/g, '') : 0\r\n const o = toAmountToUsd ? +toAmountToUsd.replace(/,/g, '') : 0\r\n const fee = +totalPriceImpact.toFormat({ decimalPlaces: 2 })\r\n const fio = i - (o + fee)\r\n return fio.toFixed(2)\r\n }\r\n\r\n const renderSwapImpactFee = () => {\r\n const sif = +swapImpactFee()\r\n if (toAmountToUsd === null) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -\r\n </Text>\r\n )\r\n }\r\n // console.log('sif:', sif)\r\n if (sif > 0 || sif === 0) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -${sif}\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n +${-sif}\r\n </Text>\r\n )\r\n }\r\n\r\n // if (\r\n // router_type === 'bridge' &&\r\n // fromTokenSymbol === 'ETH' &&\r\n // toTokenSymbol === 'ETH'\r\n // ) {\r\n // // console.log('Cross-chain only (ETH only)')\r\n // return (\r\n // <VStack p={4}>\r\n // <Heading\r\n // variant={{\r\n // base: 'heading13',\r\n // md: 'heading12'\r\n // }}\r\n // borderBottom={'1px solid #B5B5B5'}\r\n // pb={2}\r\n // w={'100%'}\r\n // textAlign={'center'}\r\n // >\r\n // Total Price Impact: {renderTotalPriceImpact()}\r\n // </Heading>\r\n // {/* <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // Provider Fee\r\n // </Text>\r\n // {renderFee(priceImpact.swapFee)}\r\n // </HStack> */}\r\n // <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // Dst. Gas Fee\r\n // </Text>\r\n // <HStack gap={1}>\r\n // {priceImpact.dstGasFee !== '0' && (\r\n // <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n // )}\r\n // {renderFee(priceImpact.dstGasFee)}\r\n // </HStack>\r\n // </HStack>\r\n // <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // WheelX Fee\r\n // </Text>\r\n // {points === '0' ? (\r\n // <Text\r\n // variant={'content9'}\r\n // color={'white'}\r\n // bg={'#00CBB3'}\r\n // p={'3px'}\r\n // borderRadius={'4px'}\r\n // >\r\n // Free\r\n // </Text>\r\n // ) : hasDiscount ? (\r\n // renderDiscount(\r\n // priceImpact.before_discount_fee,\r\n // priceImpact.bridgeFee + priceImpact.swapFee\r\n // )\r\n // ) : (\r\n // <>\r\n // {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n // {renderDiscountPercentage()}\r\n // </>\r\n // )}\r\n // </HStack>\r\n // </VStack>\r\n // )\r\n // }\r\n if (fromChainId === toChainId) {\r\n return (\r\n <VStack p={4}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading12'\r\n }}\r\n borderBottom={'1px solid #B5B5B5'}\r\n pb={2}\r\n w={'100%'}\r\n textAlign={'center'}\r\n >\r\n Total Price Impact: {renderTotalPriceImpact()}\r\n </Heading>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Swap Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {/* {\r\n <Icon\r\n boxSize={'10px'}\r\n as={PiWaveSineFill}\r\n color={'#c1c8cd'}\r\n position={'relative'}\r\n left={'1px'}\r\n />\r\n } */}\r\n {renderSwapImpactFee()}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n WheelX Fee\r\n </Text>\r\n {points === '0' && !fromTokenInfo.isSolana ? (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n ) : hasDiscount ? (\r\n renderDiscount(\r\n priceImpact.before_discount_fee,\r\n priceImpact.bridgeFee + priceImpact.swapFee\r\n )\r\n ) : (\r\n <>\r\n {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n {renderDiscountPercentage()}\r\n </>\r\n )}\r\n </HStack>\r\n {/* <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Gas Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack> */}\r\n </VStack>\r\n )\r\n }\r\n return (\r\n <VStack p={4}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading12'\r\n }}\r\n borderBottom={'1px solid #B5B5B5'}\r\n pb={2}\r\n w={'100%'}\r\n textAlign={'center'}\r\n >\r\n Total Price Impact: {renderTotalPriceImpact()}\r\n </Heading>\r\n\r\n {/* <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Provider Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack> */}\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Swap Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {/* {\r\n <Icon\r\n boxSize={'10px'}\r\n as={PiWaveSineFill}\r\n color={'#c1c8cd'}\r\n position={'relative'}\r\n left={'1px'}\r\n />\r\n } */}\r\n {renderSwapImpactFee()}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Dst. Gas Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n WheelX Fee\r\n </Text>\r\n {points === '0' && !fromTokenInfo.isSolana ? (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n ) : hasDiscount ? (\r\n renderDiscount(\r\n priceImpact.before_discount_fee,\r\n priceImpact.bridgeFee + priceImpact.swapFee\r\n )\r\n ) : (\r\n <>\r\n {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n {renderDiscountPercentage()}\r\n </>\r\n )}\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","import {\r\n Collapsible,\r\n HStack,\r\n Icon,\r\n VStack,\r\n ConditionalValue,\r\n Image,\r\n Box\r\n} from '@chakra-ui/react'\r\nimport { useState } from 'react'\r\n// import { FaGasPump } from 'react-icons/fa6'\r\n\r\nimport { MobileTooltip } from './ui/tooltip'\r\nimport { ArrowDownIcon } from './icons'\r\nimport { RoutesIcon } from './icons'\r\nimport { TimeIcon } from './icons'\r\nimport { InfoIcon } from './icons'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { Text } from './ui'\r\nimport { TokenAmountText } from './commons'\r\nimport { formatTokenAmount, sliceAddress } from '../utils'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { formatDecimalNum, formatSlippage } from './utils'\r\nimport { TipsContent } from './TipsContent'\r\nimport { useMemo } from 'react'\r\nimport { saveDay } from './utils/defaultData'\r\nimport { IoIosFlash } from 'react-icons/io'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nexport interface routesItem {\r\n name: string\r\n logo: string\r\n}\r\n\r\nexport interface TxInfoProps {\r\n priceImpact: {\r\n bridgeFee: string\r\n dstGasFee: string\r\n swapFee: string\r\n before_discount_fee: string\r\n discount_percentage: string | undefined\r\n }\r\n slippage: number\r\n minReceive: string\r\n\r\n estimatedTime: number\r\n recipient: string\r\n router: string\r\n points: number | string\r\n\r\n amountOut: string\r\n fromTokenInUsd?: Fraction\r\n router_type: string | null | undefined\r\n routes?: routesItem[] | undefined\r\n}\r\n\r\nconst textVariant: ConditionalValue<'content8' | 'content7'> = {\r\n base: 'content8',\r\n md: 'content7'\r\n}\r\n\r\nexport const TxInfo = ({\r\n priceImpact,\r\n slippage,\r\n minReceive,\r\n estimatedTime,\r\n recipient,\r\n router,\r\n points,\r\n amountOut,\r\n fromTokenInUsd,\r\n router_type,\r\n routes\r\n}: TxInfoProps) => {\r\n const { theme } = useWidgetTheme()\r\n const [open, setOpen] = useState(false)\r\n const {\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n toAmountToUsd,\r\n fromAmountToUsd\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const [isRateReversed, setIsRateReversed] = useState(false)\r\n\r\n // console.log('###### routes ######:', routes)\r\n\r\n const toAmountInUnit = new Fraction(fromAmount).eq(0)\r\n ? '0'\r\n : formatTokenAmount({\r\n amount: new Fraction(amountOut)\r\n .shr(toTokenInfo.decimals)\r\n .div(new Fraction(fromAmount)),\r\n decimals: 0,\r\n fixedDecimals: toTokenInfo.decimals > 6 ? 6 : 2\r\n })\r\n\r\n const fromAmountInUnit =\r\n toAmountInUnit !== '0'\r\n ? formatDecimalNum(1 / parseFloat(toAmountInUnit.replace(/,/g, '')), 6)\r\n : '0'\r\n\r\n const toAmountInUnitNumber = parseFloat(toAmountInUnit.replace(/,/g, ''))\r\n const toAmountInUnitStr =\r\n toAmountInUnit !== '0' ? formatDecimalNum(toAmountInUnitNumber, 6) : '0'\r\n\r\n const renderPriceImpactPercentage = () => {\r\n if (\r\n priceImpact.bridgeFee === '0' &&\r\n priceImpact.dstGasFee === '0' &&\r\n priceImpact.swapFee === '0'\r\n ) {\r\n return (\r\n <Text\r\n variant={'content9'}\r\n color={theme.highlightButtonText}\r\n bg={theme.highlightButtonBg}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n )\r\n }\r\n\r\n if (toAmountToUsd && fromAmountToUsd && fromTokenInUsd) {\r\n const inPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const outPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (outPrice > inPrice) {\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n {`+${(((outPrice - inPrice) / inPrice) * 100).toFixed(2)}%`}\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n {`-${(((inPrice - outPrice) / inPrice) * 100).toFixed(2)}%`}\r\n </Text>\r\n )\r\n }\r\n // use usd: (in - out) / in\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n -\r\n </Text>\r\n )\r\n }\r\n\r\n const renderSoneiumScore = useMemo(() => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Soneium Score\r\n </Text>\r\n <Text variant={textVariant}>+ 1</Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }, [fromTokenInfo.chain_id, toTokenInfo.chain_id, theme.weakTextColor])\r\n\r\n const renderSoneiumScoreTop = () => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack\r\n border={'1px solid #000'}\r\n gap={0}\r\n padding={'0 5px'}\r\n h={'18px'}\r\n borderRadius={'18px'}\r\n fontSize={'12px'}\r\n alignItems={'center'}\r\n >\r\n <Text\r\n variant={textVariant}\r\n fontSize={['10px', '12px']}\r\n whiteSpace={'nowrap'}\r\n >\r\n + 1\r\n </Text>\r\n <Image\r\n w={['12px', '12px']}\r\n // h={'12px'}\r\n src=\"https://wheelx.fi/images/soneium.png\"\r\n alt={'badge'}\r\n margin={'0 2px'}\r\n ></Image>\r\n <Text variant={textVariant} fontSize={['10px', '12px']}>\r\n Score\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }\r\n\r\n const handleRateDisplayClick = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n setIsRateReversed(!isRateReversed)\r\n }\r\n\r\n // useEffect(() => {\r\n // console.log('----toAmountInUnit----:', toAmountInUnit)\r\n // }, [toAmountInUnit])\r\n\r\n const renderSaveDay = () => {\r\n if (fromTokenInfo.chain_id === toTokenInfo.chain_id) return null\r\n const currentSaveDay = saveDay.find(\r\n (item) => item.chainId === fromTokenInfo.chain_id\r\n )\r\n if (currentSaveDay) {\r\n return (\r\n <HStack\r\n border={'1px solid #000'}\r\n gap={0}\r\n padding={'0 5px'}\r\n h={'18px'}\r\n borderRadius={'18px'}\r\n fontSize={['8px', '10px']}\r\n whiteSpace={'nowrap'}\r\n alignItems={'center'}\r\n >\r\n <IoIosFlash />\r\n Save {currentSaveDay.day}D\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderAiRouter = () => {\r\n if (routes && routes?.length > 0) {\r\n const length = routes.length\r\n return (\r\n <HStack gap={0}>\r\n {routes.map((item, index) => {\r\n return (\r\n <HStack key={index} gap={0}>\r\n {item.logo && (\r\n <Image\r\n src={item.logo}\r\n alt={item.name}\r\n title={item.name}\r\n w={'14px'}\r\n h={'14px'}\r\n borderRadius={'full'}\r\n />\r\n )}\r\n {index !== length - 1 && (\r\n <Icon\r\n as={RoutesIcon}\r\n margin={'0 4px'}\r\n boxSize={'12px'}\r\n ></Icon>\r\n )}\r\n </HStack>\r\n )\r\n })}\r\n </HStack>\r\n )\r\n }\r\n return <Text variant={textVariant}>{router}</Text>\r\n }\r\n\r\n return (\r\n <Collapsible.Root\r\n open={open}\r\n w={'100%'}\r\n bg={theme.assistBgColor}\r\n borderRadius={'8px'}\r\n px={2}\r\n py={1.5}\r\n >\r\n <Collapsible.Trigger w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'} color={theme.defaultTextColor}>\r\n <HStack\r\n gap={1}\r\n onClick={handleRateDisplayClick}\r\n cursor=\"pointer\"\r\n userSelect=\"none\"\r\n >\r\n <Image\r\n src={'https://wheelx.fi/images/switch.png'}\r\n alt=\"switch\"\r\n w={'14px'}\r\n h={'14px'}\r\n />\r\n <Text variant={textVariant} whiteSpace={'nowrap'}>\r\n {isRateReversed\r\n ? `1 ${toTokenInfo.symbol} = ${fromAmountInUnit} ${fromTokenInfo.symbol}`\r\n : `1 ${fromTokenInfo.symbol} = ${toAmountInUnitStr} ${toTokenInfo.symbol}`}\r\n </Text>\r\n </HStack>\r\n <HStack>\r\n {!open && renderSoneiumScoreTop()}\r\n {!open && renderSaveDay()}\r\n <Icon\r\n transition={'all 0.3s ease-in-out'}\r\n transform={open ? 'rotate(180deg)' : undefined}\r\n boxSize={'14px'}\r\n onClick={() => setOpen(!open)}\r\n >\r\n <ArrowDownIcon />\r\n </Icon>\r\n </HStack>\r\n </HStack>\r\n </Collapsible.Trigger>\r\n <Collapsible.Content w={'100%'} pb={1.5} color={theme.defaultTextColor}>\r\n <VStack w={'100%'} align={'start'} fontSize={'xs'} gap={3}>\r\n <VStack bg={theme.defaultBgColor} p={3} borderRadius={'12px'} w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Price Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {renderPriceImpactPercentage()}\r\n <MobileTooltip\r\n contentProps={{\r\n boxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.1)'\r\n }}\r\n content={\r\n <TipsContent\r\n priceImpact={priceImpact}\r\n toTokenInfo={toTokenInfo}\r\n router_type={router_type}\r\n fromTokenInfo={fromTokenInfo}\r\n fromAmountToUsd={fromAmountToUsd}\r\n toAmountToUsd={toAmountToUsd}\r\n points={points}\r\n />\r\n }\r\n openDelay={100}\r\n closeDelay={100}\r\n interactive\r\n >\r\n <Icon boxSize={'10px'} as={InfoIcon} color={'#c1c8cd'} />\r\n </MobileTooltip>\r\n </HStack>\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Slippage\r\n </Text>\r\n <Text variant={textVariant}>{formatSlippage(slippage)}%</Text>\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Min. Received\r\n </Text>\r\n <HStack gap={1}>\r\n <TokenAmountText\r\n amount={new Fraction(minReceive)}\r\n decimals={toTokenInfo.decimals}\r\n suffix={toTokenInfo.symbol}\r\n />\r\n </HStack>\r\n </HStack>\r\n </VStack>\r\n\r\n <VStack bg={theme.defaultBgColor} p={3} borderRadius={'12px'} w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Estimated Time\r\n </Text>\r\n <HStack gap={1}>\r\n <Icon boxSize={'14px'}>\r\n <TimeIcon />\r\n </Icon>\r\n <Text variant={textVariant}>~{estimatedTime}s</Text>\r\n </HStack>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Recipient Address\r\n </Text>\r\n <Text variant={textVariant}>{sliceAddress(recipient)}</Text>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n AI Router\r\n </Text>\r\n {renderAiRouter()}\r\n </HStack>\r\n {renderSoneiumScore}\r\n </VStack>\r\n </VStack>\r\n </Collapsible.Content>\r\n </Collapsible.Root>\r\n )\r\n}\r\n","'use client'\r\nimport {\r\n Box,\r\n Button,\r\n Dialog,\r\n HStack,\r\n Icon,\r\n Input,\r\n Portal,\r\n VStack\r\n} from '@chakra-ui/react'\r\nimport { Heading } from './ui/componentRecipes/heading'\r\nimport { CloseIcon } from './icons'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { isAddress } from 'viem'\r\nimport { bottomToaster } from './ui/toaster'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { IoClose } from 'react-icons/io5'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { sliceAddress } from '../utils'\r\nimport { BsFillClipboardMinusFill } from 'react-icons/bs'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n/**\r\n *\r\n * @param address\r\n * @returns\r\n */\r\nexport function isValidEVMAddress(address: string): boolean {\r\n if (\r\n !address ||\r\n typeof address !== 'string' ||\r\n !address.startsWith('0x') ||\r\n address.length !== 42\r\n ) {\r\n return false\r\n }\r\n return isAddress(address)\r\n}\r\n\r\n/**\r\n * Validate Solana address: base58 encoded, length 32-44 characters\r\n */\r\nexport function isValidSolanaAddress(address: string): boolean {\r\n if (!address || typeof address !== 'string') return false\r\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/\r\n return base58Regex.test(address)\r\n}\r\n\r\ninterface DifferentAddressDialogProps {\r\n isOpen: boolean\r\n onClose: () => void\r\n onSaveCallback?: () => void\r\n}\r\n\r\ninterface DifferentAddressDialogInnerProps {\r\n isOpen: boolean\r\n onClose: () => void\r\n onSaveCallback?: () => void\r\n differentAddress: string | undefined\r\n setDifferentAddress: (address: string | undefined) => void\r\n isDepositPlatformToken: boolean\r\n isSolanaTarget: boolean\r\n defaultWalletAddress: string\r\n /** Primary wallet address used as localStorage key suffix.\r\n * Priority: EVM > Solana. Empty if no wallet connected. */\r\n primaryWalletAddress: string\r\n}\r\n\r\nconst DifferentAddressDialogInner = ({\r\n isOpen,\r\n onClose,\r\n onSaveCallback,\r\n differentAddress,\r\n setDifferentAddress,\r\n isDepositPlatformToken,\r\n isSolanaTarget,\r\n defaultWalletAddress,\r\n primaryWalletAddress\r\n}: DifferentAddressDialogInnerProps) => {\r\n const { theme } = useWidgetTheme()\r\n // Compute the default input value when the dialog mounts (opens)\r\n const defaultInputValue: `0x${string}` | undefined | string = (() => {\r\n // For Solana target, ignore EVM-format differentAddress (set by\r\n // TokenAndAddress.tsx when Solana wallet was not yet connected)\r\n if (\r\n isSolanaTarget &&\r\n differentAddress &&\r\n differentAddress.startsWith('0x')\r\n ) {\r\n return defaultWalletAddress || undefined\r\n }\r\n if (differentAddress) return differentAddress\r\n if (!isDepositPlatformToken && defaultWalletAddress)\r\n return defaultWalletAddress\r\n return undefined\r\n })()\r\n\r\n const [isAddressError, setIsAddressError] = useState(false)\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [inputValue, setInputValue] = useState<\r\n `0x${string}` | undefined | string\r\n >(defaultInputValue)\r\n const inputRef = useRef<HTMLInputElement>(null)\r\n\r\n // Recent different addresses (max 4 total: 2 EVM + 2 Solana) persisted in localStorage.\r\n // Key is scoped per primary wallet address to isolate records across wallets.\r\n const RECENT_ADDRESSES_KEY = primaryWalletAddress\r\n ? `wheelx_recent_different_addresses_${primaryWalletAddress.toLowerCase()}`\r\n : ''\r\n\r\n interface RecentAddressEntry {\r\n address: string\r\n type: 'evm' | 'solana'\r\n }\r\n\r\n const detectAddressType = (addr: string): 'evm' | 'solana' =>\r\n addr.startsWith('0x') ? 'evm' : 'solana'\r\n\r\n const getRecentAddresses = (): RecentAddressEntry[] => {\r\n if (typeof window === 'undefined' || !RECENT_ADDRESSES_KEY) {\r\n return []\r\n }\r\n try {\r\n const stored = localStorage.getItem(RECENT_ADDRESSES_KEY)\r\n if (!stored) return []\r\n const parsed = JSON.parse(stored)\r\n if (!Array.isArray(parsed) || parsed.length === 0) return []\r\n // Migrate old string[] format to { address, type }[]\r\n if (typeof parsed[0] === 'string') {\r\n const migrated: RecentAddressEntry[] = (parsed as string[]).map(\r\n (addr) => ({\r\n address: addr,\r\n type: detectAddressType(addr)\r\n })\r\n )\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(migrated))\r\n return migrated\r\n }\r\n return parsed as RecentAddressEntry[]\r\n } catch (e) {\r\n console.error('[RecentAddr] getRecentAddresses error:', e)\r\n return []\r\n }\r\n }\r\n\r\n const [recentAddresses, setRecentAddresses] =\r\n useState<RecentAddressEntry[]>(getRecentAddresses)\r\n\r\n const addRecentAddress = useCallback(\r\n (addr: string) => {\r\n if (!RECENT_ADDRESSES_KEY) {\r\n return\r\n }\r\n try {\r\n const stored = localStorage.getItem(RECENT_ADDRESSES_KEY)\r\n const existing: RecentAddressEntry[] = stored ? JSON.parse(stored) : []\r\n const addrType = detectAddressType(addr)\r\n // Separate existing entries by type, remove duplicate of the new address\r\n const evmEntries = existing.filter(\r\n (e) =>\r\n e.type === 'evm' && e.address.toLowerCase() !== addr.toLowerCase()\r\n )\r\n const solanaEntries = existing.filter(\r\n (e) => e.type === 'solana' && e.address !== addr\r\n )\r\n\r\n if (addrType === 'evm') {\r\n const newEntry: RecentAddressEntry = { address: addr, type: 'evm' }\r\n const updatedEvm: RecentAddressEntry[] = [\r\n newEntry,\r\n ...evmEntries\r\n ].slice(0, 2)\r\n // Preserve EVM entries first to keep recently-used EVM at top\r\n const updated: RecentAddressEntry[] = [\r\n ...updatedEvm,\r\n ...solanaEntries\r\n ]\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(updated))\r\n setRecentAddresses(updated)\r\n } else {\r\n const newEntry: RecentAddressEntry = { address: addr, type: 'solana' }\r\n const updatedSolana: RecentAddressEntry[] = [\r\n newEntry,\r\n ...solanaEntries\r\n ].slice(0, 2)\r\n const updated: RecentAddressEntry[] = [\r\n ...evmEntries,\r\n ...updatedSolana\r\n ]\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(updated))\r\n setRecentAddresses(updated)\r\n }\r\n } catch (e) {\r\n console.error('[RecentAddr] addRecentAddress error:', e)\r\n }\r\n },\r\n [RECENT_ADDRESSES_KEY]\r\n )\r\n\r\n // Filter displayed addresses by the current target chain type\r\n const displayedAddresses = useMemo(\r\n () =>\r\n recentAddresses.filter((e) =>\r\n isSolanaTarget ? e.type === 'solana' : e.type === 'evm'\r\n ),\r\n [recentAddresses, isSolanaTarget]\r\n )\r\n\r\n const handleSelectRecentAddress = useCallback((addr: string) => {\r\n setInputValue(addr)\r\n setIsAddressError(false)\r\n }, [])\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value\r\n setInputValue(value || undefined)\r\n if (isAddressError && value) {\r\n setIsAddressError(false)\r\n }\r\n }\r\n\r\n const handleClearInput = useCallback(() => {\r\n setInputValue(undefined)\r\n setIsAddressError(false)\r\n setTimeout(() => {\r\n inputRef.current?.focus()\r\n }, 0)\r\n }, [])\r\n\r\n const handleFocus = useCallback(() => {\r\n setIsFocused(true)\r\n setIsAddressError(false)\r\n }, [])\r\n\r\n const handleBlur = useCallback(() => {\r\n setIsFocused(false)\r\n }, [])\r\n\r\n const handleClose = useCallback(() => {\r\n setInputValue(undefined)\r\n setIsAddressError(false)\r\n onClose?.()\r\n }, [onClose])\r\n\r\n const onSave = useCallback(() => {\r\n if (!inputValue || inputValue.trim() === '') {\r\n setIsAddressError(false)\r\n setDifferentAddress(undefined)\r\n handleClose()\r\n onSaveCallback?.()\r\n return\r\n }\r\n const trimmed = inputValue.trim()\r\n if (isSolanaTarget) {\r\n if (isValidSolanaAddress(trimmed)) {\r\n setIsAddressError(false)\r\n setDifferentAddress(trimmed)\r\n // Record this address if it differs from the connected wallet address\r\n // (skip recording for Prediction / deposit-platform tokens)\r\n if (\r\n !isDepositPlatformToken &&\r\n defaultWalletAddress &&\r\n trimmed !== defaultWalletAddress\r\n ) {\r\n addRecentAddress(trimmed)\r\n }\r\n handleClose()\r\n onSaveCallback?.()\r\n } else {\r\n setIsAddressError(true)\r\n }\r\n } else {\r\n if (isValidEVMAddress(trimmed)) {\r\n setIsAddressError(false)\r\n setDifferentAddress(trimmed)\r\n // Record this address if it differs from the connected wallet address\r\n // (skip recording for Prediction / deposit-platform tokens)\r\n const shouldRecord =\r\n !isDepositPlatformToken &&\r\n defaultWalletAddress &&\r\n trimmed.toLowerCase() !== defaultWalletAddress.toLowerCase()\r\n if (shouldRecord) {\r\n addRecentAddress(trimmed)\r\n }\r\n handleClose()\r\n onSaveCallback?.()\r\n } else {\r\n setIsAddressError(true)\r\n }\r\n }\r\n }, [\r\n inputValue,\r\n isSolanaTarget,\r\n setDifferentAddress,\r\n handleClose,\r\n onSaveCallback,\r\n addRecentAddress,\r\n defaultWalletAddress,\r\n isDepositPlatformToken\r\n ])\r\n\r\n useEffect(() => {\r\n if (isAddressError) {\r\n bottomToaster.error({\r\n description: isSolanaTarget\r\n ? 'This address is not a valid Solana address.'\r\n : 'This address is not a EVM address.',\r\n duration: 3000\r\n })\r\n }\r\n }, [isAddressError, isSolanaTarget])\r\n\r\n return (\r\n <Dialog.Root\r\n open={isOpen}\r\n onOpenChange={handleClose}\r\n placement={'center'}\r\n trapFocus={false}\r\n scrollBehavior=\"outside\"\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner px={4}>\r\n <Dialog.Content w={['100%', '480px']} bgColor={theme.assistBgColor}>\r\n <Dialog.Header justifyContent={'center'}>\r\n <Heading\r\n variant={{\r\n base: 'heading10',\r\n md: 'heading8'\r\n }}\r\n mt={1.5}\r\n padding={'20px 0'}\r\n color={theme.defaultTextColor}\r\n fontSize={'18px'}\r\n >\r\n To Address\r\n </Heading>\r\n </Dialog.Header>\r\n <Dialog.Body>\r\n <VStack>\r\n <HStack w=\"100%\" marginBottom={'10px'}>\r\n <Box margin={'0 15px'} flex={1} position={'relative'}>\r\n <Input\r\n placeholder={\r\n isSolanaTarget\r\n ? 'Please enter the Solana address'\r\n : 'Please enter the EVM address'\r\n }\r\n w={'100%'}\r\n paddingLeft={'15px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n color={isAddressError ? 'red' : theme.defaultTextColor}\r\n borderColor={\r\n isFocused\r\n ? theme.highlightBorderColor\r\n : isAddressError\r\n ? 'red'\r\n : theme.weakTextColor\r\n }\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n outline={'none'}\r\n ref={inputRef}\r\n value={inputValue || ''}\r\n onChange={handleInputChange}\r\n fontSize={['11px', '12px', '14px']}\r\n />\r\n {inputValue && (\r\n <Box\r\n onClick={handleClearInput}\r\n width={'14px'}\r\n height={'14px'}\r\n position={'absolute'}\r\n top={'50%'}\r\n right={'10px'}\r\n transform={'translateY(-50%)'}\r\n cursor={'pointer'}\r\n >\r\n <IoClose color={theme.weakTextColor} />\r\n </Box>\r\n )}\r\n </Box>\r\n </HStack>\r\n {!isDepositPlatformToken &&\r\n primaryWalletAddress &&\r\n displayedAddresses.length > 0 && (\r\n <VStack\r\n w=\"calc(100% - 30px)\"\r\n margin=\"0 15px\"\r\n marginBottom=\"12px\"\r\n gap=\"10px\"\r\n align=\"stretch\"\r\n >\r\n <Box fontSize=\"12px\" color={theme.weakTextColor} marginBottom=\"2px\">\r\n Recent Addresses\r\n </Box>\r\n <HStack\r\n w={'100%'}\r\n justifyContent={'flex-start'}\r\n >\r\n {displayedAddresses.map((entry, index) => (\r\n <Box\r\n key={index}\r\n cursor=\"pointer\"\r\n padding=\"8px 12px\"\r\n borderRadius=\"8px\"\r\n backgroundColor={theme.defaultBgColor}\r\n _hover={{ backgroundColor: theme.highlightBgColor }}\r\n width={['40%', '40%', 'calc(33.33333% - 10px)']}\r\n onClick={() =>\r\n handleSelectRecentAddress(entry.address)\r\n }\r\n >\r\n <HStack\r\n fontSize=\"14px\"\r\n color={theme.defaultTextColor}\r\n fontFamily=\"monospace\"\r\n >\r\n <BsFillClipboardMinusFill\r\n size={'12px'}\r\n color={theme.weakTextColor}\r\n />\r\n {sliceAddress(entry.address, 5, 4)}\r\n </HStack>\r\n </Box>\r\n ))}\r\n </HStack>\r\n </VStack>\r\n )}\r\n <HStack\r\n w={'100%'}\r\n padding={'0 15px'}\r\n paddingBottom={'21px'}\r\n gap=\"10px\"\r\n // justifyContent={'space-between'}\r\n >\r\n <Button\r\n // flex={1}\r\n // margin={'0 15px'}\r\n // w={'calc(50% - 15px)'}\r\n flex={1}\r\n backgroundColor={theme.highlightBgColor}\r\n color={theme.defaultTextColor}\r\n onClick={handleClose}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n flex={1}\r\n backgroundColor={theme.highlightButtonBg}\r\n color={theme.highlightButtonText}\r\n onClick={onSave}\r\n >\r\n Save\r\n </Button>\r\n </HStack>\r\n </VStack>\r\n </Dialog.Body>\r\n <Dialog.CloseTrigger\r\n top={3}\r\n right={3}\r\n left={'auto'}\r\n cursor={'pointer'}\r\n >\r\n <Icon boxSize={'24px'} color={theme.weakTextColor} as={CloseIcon} />\r\n </Dialog.CloseTrigger>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n )\r\n}\r\n\r\nconst DifferentAddressDialog = ({\r\n isOpen,\r\n onClose,\r\n onSaveCallback\r\n}: DifferentAddressDialogProps) => {\r\n const address = useEvmAddress()\r\n const { setDifferentAddress, differentAddress, isDepositPlatformToken } =\r\n useDifferentAddressStore()\r\n\r\n const { toTokenInfo } = useSwapAndBridgeContextStore()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const isSolanaTarget = !!toTokenInfo?.isSolana\r\n\r\n // Default wallet address for the current target chain\r\n const defaultWalletAddress = isSolanaTarget\r\n ? solanaWalletAddress || ''\r\n : address || ''\r\n\r\n // Primary wallet address for scoping recent address records in localStorage.\r\n // - Both wallets connected: key follows the To token chain (EVM→EVM, Solana→Solana)\r\n // - Only one wallet connected: use whichever is connected\r\n // - Empty if no wallet is connected.\r\n const primaryWalletAddress = (() => {\r\n const evmAddr = (address || '').toLowerCase()\r\n const solAddr = (solanaWalletAddress || '').toLowerCase()\r\n if (evmAddr && solAddr) {\r\n return isSolanaTarget ? solAddr : evmAddr\r\n }\r\n if (evmAddr) return evmAddr\r\n if (solAddr) return solAddr\r\n return ''\r\n })()\r\n\r\n // Increment a counter each time the dialog opens, using it as the key on\r\n // DifferentAddressDialogInner so the inner component remounts with fresh state.\r\n // This is the React-recommended \"resetting state with a key\" pattern.\r\n const [openCount, setOpenCount] = useState(0)\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setOpenCount((c) => c + 1)\r\n }\r\n // Simple counter increment to trigger key-based remount of the inner\r\n // component — this is the React-recommended \"reset state with a key\"\r\n // pattern. No multi-state sync is performed here.\r\n }, [isOpen])\r\n\r\n return (\r\n <DifferentAddressDialogInner\r\n key={openCount}\r\n isOpen={isOpen}\r\n onClose={onClose}\r\n onSaveCallback={onSaveCallback}\r\n differentAddress={differentAddress}\r\n setDifferentAddress={setDifferentAddress}\r\n isDepositPlatformToken={isDepositPlatformToken}\r\n isSolanaTarget={isSolanaTarget}\r\n defaultWalletAddress={defaultWalletAddress}\r\n primaryWalletAddress={primaryWalletAddress}\r\n />\r\n )\r\n}\r\n\r\nexport default DifferentAddressDialog\r\n","import { VStack, Icon, useBreakpointValue } from '@chakra-ui/react'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { useState, useMemo, useCallback, useEffect } from 'react'\r\nimport { parseUnits, zeroAddress } from 'viem'\r\nimport { useEstimateFeesPerGas } from 'wagmi'\r\nimport { useEvmAddress } from '../utils/wallet'\r\n\r\nimport { TokenInfo, useUsdPrice } from '../api'\r\nimport type { WidgetConfig } from '../types'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\nimport { FormButton } from './FormButton'\r\nimport { useSwapAndBridgeContextStore, useTokenBalance } from './hooks'\r\nimport SelectTokenModal from './SelectTokenModal'\r\nimport { TokenSelectAndInput } from './TokenSelectAndInput'\r\nimport { SwitchIcon } from './icons'\r\nimport { TxInfo } from './TxInfo'\r\nimport { formatTokenAmount, slippageStore } from '../utils'\r\nimport { tokenSelectionStore } from '../utils/tokenSelectionCache'\r\nimport {\r\n calculateSlippage,\r\n extractVPathSegment,\r\n toBigInt,\r\n hyperliquidChainId\r\n} from './utils'\r\nimport {\r\n initialQuoteInfo,\r\n QuoteInfo,\r\n QuoteRequestWithToTokenDecimals\r\n} from './MainForm'\r\nconst useRouter = () => ({ push: (_url: string) => {}, replace: (_url: string) => {} })\r\nconst usePathname = () => ''\r\nimport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from '../utils/shortLinkRegex'\r\nimport { findItemByName, findItemBySymbol } from './commons/utils'\r\nimport { useChainsStore, useTokensStore } from './hooks'\r\nimport DifferentAddressDialog from './DifferentAddressDialog'\r\nimport { useHyperliquidBalance } from '../api/useHyperliquid'\r\nimport { soneium, base } from 'wagmi/chains'\r\nimport {\r\n useSolanaTokenBalance\r\n // useSolanaTokenUsdPrice\r\n} from './hooks/useSolanaTokenBalance'\r\n// import { isSolanaChain } from '../consts/solana'\r\n\r\ninterface Props {\r\n getQuote: (params: QuoteRequestWithToTokenDecimals) => Promise<void>\r\n quoteInfo: QuoteInfo\r\n setQuoteInfo: (quoteInfo: QuoteInfo) => void\r\n stopAutoRefetch: () => void\r\n lockRequestId: () => void\r\n clearLockedRequestId: () => void\r\n lockedRequestId: string | null\r\n refetchQuote: () => void\r\n config?: WidgetConfig\r\n}\r\n\r\nexport const FormBody = ({\r\n getQuote,\r\n quoteInfo,\r\n setQuoteInfo,\r\n stopAutoRefetch,\r\n lockRequestId,\r\n clearLockedRequestId,\r\n lockedRequestId,\r\n refetchQuote,\r\n config\r\n}: Props) => {\r\n const {\r\n fromAmount,\r\n toAmount,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setFromAmount,\r\n setToAmount,\r\n switchTokens,\r\n autoSlippage,\r\n slippage: customSlippage\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { chains } = useChainsStore()\r\n const { tokens } = useTokensStore()\r\n\r\n // console.log('######quoteInfo######:', quoteInfo)\r\n\r\n const { replace: replaceLink } = useRouter()\r\n const pathname = usePathname()\r\n const { isTrendingOpen, setTrendingClientReact, setIsTrendingLonger } =\r\n { isTrendingOpen: false, setTrendingClientReact: (_v: any) => {}, setIsTrendingLonger: (_v: boolean) => {} }\r\n const isMobile = useBreakpointValue({ base: true, md: false })\r\n const [isFromHyperChain, setIsFromHyperChain] = useState(false)\r\n const [isToHyperChain, setIsToHyperChain] = useState(false)\r\n\r\n const updateSearchParams = useCallback(\r\n (params: Record<string, string>) => {\r\n if (typeof window === 'undefined') return\r\n\r\n const searchParams = window?.location?.search\r\n const newParams = new URLSearchParams(searchParams)\r\n Object.entries(params).forEach(([key, value]) => {\r\n newParams.set(key, value)\r\n })\r\n const newPath = decodeURIComponent(pathname.replace(/\\/+$/, ''))\r\n // console.log('-------------newPath-----------:', newPath)\r\n if (tokens && chains && matchesAnyPatternUsingArray(newPath)) {\r\n if (toRegex.test(newPath)) {\r\n // record to chain id and token address\r\n const [exists, chainsInfo] = findItemByName(\r\n chains || [],\r\n newPath.replace('/', '')\r\n )\r\n if (!exists) return\r\n const foundItem = tokens.find(\r\n (item) => item.chain_id === chainsInfo?.chain_id\r\n )\r\n if (foundItem) {\r\n newParams.set('to_chain', foundItem.chain_id.toString())\r\n newParams.set('to_token', foundItem.address.toString())\r\n }\r\n } else if (toAndTokenRegex.test(newPath)) {\r\n const arr = newPath.replace('/', '').split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[0])\r\n if (!exists) return\r\n const [result, foundItem] = findItemBySymbol(\r\n tokens,\r\n arr[1],\r\n chainsInfo?.chain_id\r\n )\r\n if (!result) return\r\n if (result && foundItem) {\r\n newParams.set('to_chain', foundItem.chain_id.toString())\r\n newParams.set('to_token', foundItem.address.toString())\r\n }\r\n } else if (fromRegex.test(newPath)) {\r\n // record from chain id and token address\r\n const arr = newPath.split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[1])\r\n if (!exists) return\r\n const foundItem = tokens.find(\r\n (item) => item.chain_id === chainsInfo?.chain_id\r\n )\r\n if (foundItem) {\r\n newParams.set('from_chain', foundItem.chain_id.toString())\r\n newParams.set('from_token', foundItem.address.toString())\r\n }\r\n } else if (fromAndTokenRegex.test(newPath)) {\r\n const arr = newPath.replace('/', '').split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[0])\r\n if (!exists) return\r\n const [result, foundItem] = findItemBySymbol(\r\n tokens,\r\n arr[1],\r\n chainsInfo?.chain_id\r\n )\r\n if (!result) return\r\n if (result && foundItem) {\r\n newParams.set('from_chain', foundItem.chain_id.toString())\r\n newParams.set('from_token', foundItem.address.toString())\r\n }\r\n } else if (fromAndToRegex.test(newPath)) {\r\n const arr = newPath.split('/')\r\n const [resultFrom, fromChainsInfo] = findItemByName(chains, arr[1])\r\n if (!resultFrom) return\r\n const foundFromItem = tokens.find(\r\n (item) => item.chain_id === fromChainsInfo?.chain_id\r\n )\r\n if (!foundFromItem) return\r\n newParams.set('from_chain', foundFromItem.chain_id.toString())\r\n newParams.set('from_token', foundFromItem.address.toString())\r\n const [resultTo, toChainsInfo] = findItemByName(chains, arr[2])\r\n if (!resultTo) return\r\n const foundToItem = tokens.find(\r\n (item) => item.chain_id === toChainsInfo?.chain_id\r\n )\r\n if (!foundToItem) return\r\n newParams.set('to_chain', foundToItem.chain_id.toString())\r\n newParams.set('to_token', foundToItem.address.toString())\r\n } else if (fromAndTokenAndToAndTokenRegex.test(newPath)) {\r\n const arr = newPath.split('/')\r\n const arrFrom = arr[1].split('&')\r\n const [resultFrom, fromChainsInfo] = findItemByName(\r\n chains,\r\n arrFrom[0]\r\n )\r\n if (!resultFrom) return\r\n const [resultFromToken, fromTokenInfo] = findItemBySymbol(\r\n tokens,\r\n arrFrom[1],\r\n fromChainsInfo?.chain_id\r\n )\r\n if (!resultFromToken) return\r\n const arrTo = arr[2].split('&')\r\n const [resultTo, toChainsInfo] = findItemByName(chains, arrTo[0])\r\n if (!resultTo) return\r\n const [resultToToken, toTokenInfo] = findItemBySymbol(\r\n tokens,\r\n arrTo[1],\r\n toChainsInfo?.chain_id\r\n )\r\n if (!resultToToken) return\r\n if (fromTokenInfo && toTokenInfo) {\r\n newParams.set('to_chain', toTokenInfo.chain_id.toString())\r\n newParams.set('to_token', toTokenInfo.address.toString())\r\n newParams.set('from_chain', fromTokenInfo.chain_id.toString())\r\n newParams.set('from_token', fromTokenInfo.address.toString())\r\n }\r\n }\r\n }\r\n replaceLink(`${pathname.replace(pathname, '')}/?${newParams.toString()}`)\r\n },\r\n [pathname, replaceLink, chains, tokens]\r\n )\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false)\r\n const [isDifferentAddressDialogOpen, setIsDifferentAddressDialogOpen] =\r\n useState(false)\r\n const [isSelectingFromToken, setIsSelectingFromToken] = useState(false)\r\n const [isInsufficientBalance, setIsInsufficientBalance] = useState(false)\r\n\r\n const address = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n // When wallet is connected, use stored slippage from localStorage\r\n // When wallet is not connected, use customSlippage from zustand store if set\r\n const slippage = address\r\n ? slippageStore.get(address)\r\n : customSlippage !== undefined\r\n ? { value: customSlippage }\r\n : undefined\r\n\r\n // console.log('######slippage######:', slippage)\r\n\r\n // Token balances\r\n const fromTokenBalanceNormal = useTokenBalance({\r\n chainId: fromTokenInfo.chain_id,\r\n tokenAddress:\r\n fromTokenInfo.address === zeroAddress ? undefined : fromTokenInfo.address\r\n })\r\n const toTokenBalanceNormal = useTokenBalance({\r\n chainId: toTokenInfo.chain_id,\r\n tokenAddress:\r\n toTokenInfo.address === zeroAddress ? undefined : toTokenInfo.address\r\n })\r\n\r\n const { data: fromTokenBalanceHyperBack } = useHyperliquidBalance(\r\n address,\r\n isFromHyperChain\r\n )\r\n const { data: toTokenBalanceHyperBack } = useHyperliquidBalance(\r\n address,\r\n isToHyperChain\r\n )\r\n\r\n const fromTokenBalanceHyper = {\r\n decimals: 6,\r\n formatted: fromTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n fromTokenBalanceHyperBack?.withdrawable\r\n ? fromTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }\r\n\r\n const toTokenBalanceHyper = {\r\n decimals: 6,\r\n formatted: toTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n toTokenBalanceHyperBack?.withdrawable\r\n ? toTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }\r\n\r\n // const fromTokenBalance = isFromHyperChain\r\n // ? fromTokenBalanceHyper\r\n // : fromTokenBalanceNormal\r\n\r\n // const toTokenBalance = isToHyperChain\r\n // ? toTokenBalanceHyper\r\n // : toTokenBalanceNormal\r\n\r\n // console.log('######## fromTokenInfo ########:', fromTokenInfo)\r\n // console.log('######## toTokenInfo ########:', toTokenInfo)\r\n // console.log('######## fromTokenBalance ########:', fromTokenBalance)\r\n // console.log('######## toTokenBalance ########:', toTokenBalance)\r\n\r\n useEffect(() => {\r\n if (fromTokenInfo.chain_id === hyperliquidChainId) {\r\n setIsFromHyperChain(true)\r\n } else {\r\n setIsFromHyperChain(false)\r\n }\r\n }, [fromTokenInfo])\r\n useEffect(() => {\r\n if (toTokenInfo.chain_id === hyperliquidChainId) {\r\n setIsToHyperChain(true)\r\n } else {\r\n setIsToHyperChain(false)\r\n }\r\n }, [toTokenInfo])\r\n\r\n // console.log('######## fromTokenBalanceHyper ########:', fromTokenBalanceHyper)\r\n\r\n const { data: feeData, isFetching: isLoadingFeeData } = useEstimateFeesPerGas(\r\n {\r\n chainId: fromTokenInfo.chain_id\r\n }\r\n )\r\n // fixed gas limit 500_000n\r\n const totalGasFee = feeData ? 500_000n * feeData.maxFeePerGas : 0n\r\n const { differentAddress, setDifferentAddress } = useDifferentAddressStore()\r\n // console.log('######## differentAddress ########:', differentAddress)\r\n\r\n // Determine from address based on chain type\r\n const fromAddress = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }, [fromTokenInfo.isSolana, solanaWalletAddress, address])\r\n\r\n // Determine to address based on chain type\r\n const toAddress = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }, [toTokenInfo.isSolana, solanaWalletAddress, differentAddress, address])\r\n\r\n const isFromNativeSOL =\r\n fromTokenInfo.isSolana &&\r\n (fromTokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n (fromTokenInfo.address as string) === '11111111111111111111111111111111')\r\n\r\n const isToNativeSOL =\r\n toTokenInfo.isSolana &&\r\n (toTokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n (toTokenInfo.address as string) === '11111111111111111111111111111111')\r\n\r\n const fromTokenBalanceSolana = useSolanaTokenBalance(\r\n isFromNativeSOL\r\n ? undefined\r\n : fromTokenInfo.isSolana\r\n ? fromTokenInfo.address\r\n : undefined,\r\n fromTokenInfo.isSolana\r\n )\r\n const toTokenBalanceSolana = useSolanaTokenBalance(\r\n isToNativeSOL\r\n ? undefined\r\n : toTokenInfo.isSolana\r\n ? toTokenInfo.address\r\n : undefined,\r\n toTokenInfo.isSolana\r\n )\r\n\r\n const fromTokenBalance = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return fromTokenBalanceSolana.data\r\n ? {\r\n decimals: fromTokenBalanceSolana.data.decimals,\r\n value: fromTokenBalanceSolana.data.value,\r\n formatted: fromTokenBalanceSolana.data.formatted\r\n }\r\n : undefined\r\n }\r\n return isFromHyperChain ? fromTokenBalanceHyper : fromTokenBalanceNormal\r\n }, [\r\n fromTokenInfo.isSolana,\r\n fromTokenBalanceSolana.data,\r\n isFromHyperChain,\r\n fromTokenBalanceHyper,\r\n fromTokenBalanceNormal\r\n ])\r\n\r\n const toTokenBalance = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return toTokenBalanceSolana.data\r\n ? {\r\n decimals: toTokenBalanceSolana.data.decimals,\r\n value: toTokenBalanceSolana.data.value,\r\n formatted: toTokenBalanceSolana.data.formatted\r\n }\r\n : undefined\r\n }\r\n return isToHyperChain ? toTokenBalanceHyper : toTokenBalanceNormal\r\n }, [\r\n toTokenInfo.isSolana,\r\n toTokenBalanceSolana.data,\r\n isToHyperChain,\r\n toTokenBalanceHyper,\r\n toTokenBalanceNormal\r\n ])\r\n\r\n // Memoized balance calculations\r\n const balanceInfo = useMemo(() => {\r\n const fromBalance = new Fraction(fromTokenBalance?.value ?? 0n)\r\n const toBalance = new Fraction(toTokenBalance?.value ?? 0n)\r\n\r\n // console.log('######toBalance######:', toBalance)\r\n // console.log('######fromBalance######:', fromBalance)\r\n\r\n const fromAmountFraction = new Fraction(fromAmount)\r\n\r\n const insufficientBalance =\r\n !!fromAmount &&\r\n fromAmountFraction.gt(fromBalance.shr(fromTokenInfo.decimals))\r\n\r\n return {\r\n fromBalance,\r\n toBalance,\r\n insufficientBalance\r\n }\r\n }, [\r\n fromAmount,\r\n fromTokenBalance?.value,\r\n fromTokenInfo.decimals,\r\n toTokenBalance?.value\r\n ])\r\n\r\n const balance = formatTokenAmount({\r\n amount: balanceInfo.fromBalance,\r\n decimals: fromTokenInfo.decimals\r\n })\r\n\r\n useEffect(() => {\r\n const plusGasFee = new Fraction('0.00008')\r\n .shl(fromTokenInfo.decimals)\r\n .add(totalGasFee ?? 0n)\r\n const { tags } = fromTokenInfo\r\n const isNative = tags?.includes('native')\r\n // console.log('###native###:', balance, fromAmount)\r\n if (\r\n (fromTokenInfo.address == zeroAddress || isNative) &&\r\n balanceInfo.fromBalance.lt(plusGasFee)\r\n ) {\r\n setIsInsufficientBalance(true)\r\n } else {\r\n setIsInsufficientBalance(false)\r\n }\r\n if (+balance < +fromAmount) {\r\n setIsInsufficientBalance(true)\r\n } else {\r\n setIsInsufficientBalance(false)\r\n }\r\n }, [balanceInfo, fromAmount, fromTokenInfo, totalGasFee, balance])\r\n\r\n // Event handlers\r\n const handleOpenTokenModal = (isFromToken: boolean) => {\r\n setIsSelectingFromToken(isFromToken)\r\n setIsModalOpen(true)\r\n }\r\n\r\n const handleCloseModal = useCallback(() => {\r\n setIsModalOpen(false)\r\n }, [])\r\n const handleCloseDifferentAddressDialog = useCallback(() => {\r\n setIsDifferentAddressDialogOpen(false)\r\n }, [])\r\n const handleOpenDifferentAddressDialog = useCallback(() => {\r\n setIsDifferentAddressDialogOpen(true)\r\n }, [])\r\n\r\n const { data: usdPrice } = useUsdPrice([\r\n {\r\n chain_index: fromTokenInfo.chain_id.toString(),\r\n token: fromTokenInfo.address\r\n },\r\n {\r\n chain_index: toTokenInfo.chain_id.toString(),\r\n token: toTokenInfo.address\r\n }\r\n ])\r\n const fromTokenUsdPrice = useMemo(() => {\r\n if (!usdPrice?.[0]?.price) return undefined\r\n return new Fraction(usdPrice[0].price)\r\n }, [usdPrice])\r\n const toTokenUsdPrice = useMemo(() => {\r\n if (!usdPrice?.[1]?.price) return undefined\r\n return new Fraction(usdPrice[1].price)\r\n }, [usdPrice])\r\n\r\n const fromTokenInUsd = useMemo(() => {\r\n if (\r\n !fromTokenUsdPrice ||\r\n fromTokenUsdPrice.eq(0) ||\r\n !fromAmount ||\r\n new Fraction(fromAmount).eq(0)\r\n )\r\n return\r\n return new Fraction(fromAmount).mul(fromTokenUsdPrice)\r\n }, [fromAmount, fromTokenUsdPrice])\r\n\r\n // Save current token selection to cache (only when EVM wallet connected, not shortLink, and tokens are library tokens)\r\n const saveTokenSelection = useCallback(() => {\r\n const { isEthWalletConnected, evmWalletAddress } =\r\n useWalletConnectedStore.getState()\r\n const {\r\n isShortLink: shortLinkFlag,\r\n fromTokenInfo: fti,\r\n toTokenInfo: tti\r\n } = useSwapAndBridgeContextStore.getState()\r\n\r\n if (!isEthWalletConnected || !evmWalletAddress || shortLinkFlag) return\r\n\r\n const fromInLibrary = tokens?.some(\r\n (t) => t.chain_id === fti.chain_id && t.address === fti.address\r\n )\r\n const toInLibrary = tokens?.some(\r\n (t) => t.chain_id === tti.chain_id && t.address === tti.address\r\n )\r\n\r\n if (fromInLibrary && toInLibrary) {\r\n tokenSelectionStore.set(evmWalletAddress, {\r\n from: fti,\r\n to: tti\r\n })\r\n }\r\n }, [tokens])\r\n\r\n // const handleSelectToken = useCallback(\r\n // (tokenInfo: TokenInfo) => {\r\n // const params: Record<string, string> = {}\r\n // // console.log('######Selected Token######:', tokenInfo)\r\n // if (isSelectingFromToken) {\r\n // setFromTokenInfo(tokenInfo)\r\n // params.from_chain = tokenInfo.chain_id.toString()\r\n // params.from_token = tokenInfo.address\r\n // } else {\r\n // setToTokenInfo(tokenInfo)\r\n // params.to_chain = tokenInfo.chain_id.toString()\r\n // params.to_token = tokenInfo.address\r\n // }\r\n // updateSearchParams(params)\r\n // handleCloseModal()\r\n // setQuoteInfo(initialQuoteInfo)\r\n // },\r\n // [\r\n // handleCloseModal,\r\n // isSelectingFromToken,\r\n // setFromTokenInfo,\r\n // setQuoteInfo,\r\n // setToTokenInfo,\r\n // updateSearchParams\r\n // ]\r\n // )\r\n\r\n const handleSelectToken = useCallback(\r\n (tokenInfo: TokenInfo) => {\r\n const params: Record<string, string> = {}\r\n\r\n // Check if the currently selected network is a testnet\r\n const isTestnetChain = (chainId: number) => {\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n return chainInfo?.is_testnet === true\r\n }\r\n\r\n if (isSelectingFromToken) {\r\n // Selecting FROM token\r\n setFromTokenInfo(tokenInfo)\r\n params.from_chain = tokenInfo.chain_id.toString()\r\n params.from_token = tokenInfo.address\r\n\r\n // If a testnet token is selected\r\n if (isTestnetChain(tokenInfo.chain_id)) {\r\n // Need to set to to a different token on the same testnet\r\n // If user selected native token, find another token for to\r\n // If user selected non-native token, use native token for to\r\n \r\n const isNativeToken = tokenInfo.tags?.includes('native') || tokenInfo.address === zeroAddress\r\n \r\n if (isNativeToken) {\r\n // User selected native token as from, find another token for to\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setToTokenInfo(otherToken)\r\n params.to_chain = otherToken.chain_id.toString()\r\n params.to_token = otherToken.address\r\n }\r\n } else {\r\n // User selected non-native token as from, use native token for to\r\n const nativeToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n (t.tags?.includes('native') || t.address === zeroAddress)\r\n )\r\n \r\n if (\r\n nativeToken &&\r\n (nativeToken.chain_id !== toTokenInfo?.chain_id ||\r\n nativeToken.address !== toTokenInfo?.address)\r\n ) {\r\n setToTokenInfo(nativeToken)\r\n params.to_chain = nativeToken.chain_id.toString()\r\n params.to_token = nativeToken.address\r\n } else if (!nativeToken) {\r\n // If no native token exists, select any other token from the same network\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setToTokenInfo(otherToken)\r\n params.to_chain = otherToken.chain_id.toString()\r\n params.to_token = otherToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // If a non-testnet network is selected but to is a testnet, reset to to default network\r\n if (toTokenInfo && isTestnetChain(toTokenInfo.chain_id)) {\r\n const baseEthToken = tokens?.find(\r\n (t) => t.chain_id === base.id && t.symbol === 'ETH'\r\n )\r\n if (baseEthToken) {\r\n setToTokenInfo(baseEthToken)\r\n params.to_chain = baseEthToken.chain_id.toString()\r\n params.to_token = baseEthToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // Selecting TO token\r\n setToTokenInfo(tokenInfo)\r\n params.to_chain = tokenInfo.chain_id.toString()\r\n params.to_token = tokenInfo.address\r\n\r\n // If a testnet token is selected\r\n if (isTestnetChain(tokenInfo.chain_id)) {\r\n // Need to set from to a different token on the same testnet\r\n // If user selected native token, find another token for from\r\n // If user selected non-native token, use native token for from\r\n \r\n const isNativeToken = tokenInfo.tags?.includes('native') || tokenInfo.address === zeroAddress\r\n \r\n if (isNativeToken) {\r\n // User selected native token as to, find another token for from\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setFromTokenInfo(otherToken)\r\n params.from_chain = otherToken.chain_id.toString()\r\n params.from_token = otherToken.address\r\n }\r\n } else {\r\n // User selected non-native token as to, use native token for from\r\n const nativeToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n (t.tags?.includes('native') || t.address === zeroAddress)\r\n )\r\n \r\n if (\r\n nativeToken &&\r\n (nativeToken.chain_id !== fromTokenInfo?.chain_id ||\r\n nativeToken.address !== fromTokenInfo?.address)\r\n ) {\r\n setFromTokenInfo(nativeToken)\r\n params.from_chain = nativeToken.chain_id.toString()\r\n params.from_token = nativeToken.address\r\n } else if (!nativeToken) {\r\n // If no native token exists, select any other token from the same network\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setFromTokenInfo(otherToken)\r\n params.from_chain = otherToken.chain_id.toString()\r\n params.from_token = otherToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // If a non-testnet network is selected but from is a testnet, reset from to default network\r\n if (fromTokenInfo && isTestnetChain(fromTokenInfo.chain_id)) {\r\n const soneiumEthToken = tokens?.find(\r\n (t) => t.chain_id === soneium.id && t.symbol === 'ETH'\r\n )\r\n if (soneiumEthToken) {\r\n setFromTokenInfo(soneiumEthToken)\r\n params.from_chain = soneiumEthToken.chain_id.toString()\r\n params.from_token = soneiumEthToken.address\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateSearchParams(params)\r\n handleCloseModal()\r\n setQuoteInfo(initialQuoteInfo)\r\n saveTokenSelection()\r\n },\r\n [\r\n handleCloseModal,\r\n isSelectingFromToken,\r\n setFromTokenInfo,\r\n setQuoteInfo,\r\n setToTokenInfo,\r\n updateSearchParams,\r\n tokens,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n chains,\r\n saveTokenSelection\r\n ]\r\n )\r\n\r\n const handleSwitchTokens = async () => {\r\n if (toTokenInfo.chain_id === hyperliquidChainId) {\r\n return\r\n }\r\n // Reset quoteInfo first to prevent showing stale UI with wrong token info\r\n setQuoteInfo(initialQuoteInfo)\r\n\r\n const _fromTokenInfo = toTokenInfo\r\n const _toTokenInfo = fromTokenInfo\r\n const _fromAmount = toAmount\r\n\r\n // Clear differentAddress on token switch to avoid stale address being displayed\r\n setDifferentAddress(undefined)\r\n switchTokens()\r\n updateSearchParams({\r\n from_chain: _fromTokenInfo.chain_id.toString(),\r\n from_token: _fromTokenInfo.address,\r\n to_chain: _toTokenInfo.chain_id.toString(),\r\n to_token: _toTokenInfo.address\r\n })\r\n\r\n // Determine from address based on chain type\r\n const _fromAddress = () => {\r\n if (_fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }\r\n\r\n // Determine to address based on chain type\r\n const _toAddress = () => {\r\n if (_toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }\r\n\r\n const vCode = extractVPathSegment()\r\n // console.log('##########vCode#########:', vCode)\r\n await getQuote({\r\n from_chain: _fromTokenInfo.chain_id,\r\n to_chain: _toTokenInfo.chain_id,\r\n from_token: _fromTokenInfo.address ?? '',\r\n to_token: _toTokenInfo.address ?? '',\r\n from_address: _fromAddress(),\r\n to_address: _toAddress(),\r\n amount: parseUnits(_fromAmount, _fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: _toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: _toTokenInfo.platform_id || 0\r\n })\r\n saveTokenSelection()\r\n }\r\n\r\n const handleFromAmountChange = async (value: string) => {\r\n clearLockedRequestId()\r\n setFromAmount(value)\r\n setToAmount('')\r\n if (!value) {\r\n setQuoteInfo(initialQuoteInfo)\r\n return\r\n }\r\n const vCode = extractVPathSegment()\r\n // setQuoteInfo({ ...initialQuoteInfo, isFetching: true })\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(value, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value) || autoSlippage,\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n const handleToAmountChange = (value: string) => {\r\n // console.log('######Set toAmount######: ', value)\r\n setToAmount(value)\r\n }\r\n\r\n useEffect(() => {\r\n const formBody = document.getElementById('js_main_form')\r\n if (formBody && !isMobile && isTrendingOpen) {\r\n const react = formBody.getBoundingClientRect()\r\n setTrendingClientReact(react)\r\n if (quoteInfo?.request_id) {\r\n setIsTrendingLonger(true)\r\n } else {\r\n setIsTrendingLonger(false)\r\n }\r\n }\r\n }, [\r\n isMobile,\r\n isTrendingOpen,\r\n setTrendingClientReact,\r\n quoteInfo,\r\n setIsTrendingLonger\r\n ])\r\n\r\n useEffect(() => {\r\n const refetchQuote = async () => {\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n if (fromAddress && fromAmount) {\r\n refetchQuote()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [differentAddress, fromAddress, toAddress])\r\n\r\n return (\r\n <>\r\n <VStack\r\n w={'100%'}\r\n align={'start'}\r\n pos={'relative'}\r\n gap={{\r\n base: 2.5,\r\n md: 4\r\n }}\r\n >\r\n <TokenSelectAndInput\r\n text=\"From\"\r\n tokenInfo={fromTokenInfo}\r\n onClick={() => handleOpenTokenModal(true)}\r\n amount={fromAmount}\r\n onChange={handleFromAmountChange}\r\n userBalance={balanceInfo.fromBalance}\r\n isInsufficientBalance={isInsufficientBalance}\r\n usdPrice={fromTokenUsdPrice}\r\n totalGasFee={totalGasFee}\r\n isLoadingFeeData={isLoadingFeeData}\r\n />\r\n\r\n <Icon\r\n pos={'absolute'}\r\n top={'50%'}\r\n left={'50%'}\r\n transform={['translate(-50%, -100%)', 'translate(-50%, -82.5%)']}\r\n cursor={\r\n toTokenInfo.chain_id === hyperliquidChainId ? 'default' : 'pointer'\r\n }\r\n onClick={handleSwitchTokens}\r\n color={'#81728C'}\r\n boxSize={{\r\n base: '20px',\r\n md: '30px'\r\n }}\r\n as={SwitchIcon}\r\n opacity={toTokenInfo.chain_id === hyperliquidChainId ? '0.5' : '1'}\r\n />\r\n\r\n <TokenSelectAndInput\r\n text=\"To\"\r\n tokenInfo={toTokenInfo}\r\n onClick={() => handleOpenTokenModal(false)}\r\n amount={toAmount}\r\n onChange={handleToAmountChange}\r\n userBalance={balanceInfo.toBalance}\r\n usdPrice={toTokenUsdPrice}\r\n isInsufficientBalance={isInsufficientBalance}\r\n onOpenDialog={handleOpenDifferentAddressDialog}\r\n />\r\n </VStack>\r\n\r\n <FormButton\r\n errorMessage={quoteInfo.error}\r\n isFetching={quoteInfo.isFetching}\r\n data={quoteInfo.data}\r\n gas={quoteInfo.gas}\r\n router_type={quoteInfo?.router_type}\r\n txValue={quoteInfo?.tx_value}\r\n quoteMessage={quoteInfo?.quote_message}\r\n backApprove={quoteInfo.backApprove}\r\n maxFeePerGas={quoteInfo.maxFeePerGas}\r\n maxPriorityFeePerGas={quoteInfo.maxPriorityFeePerGas}\r\n contractAddress={quoteInfo.contractAddress}\r\n insufficientBalance={balanceInfo.insufficientBalance}\r\n stopAutoRefetch={stopAutoRefetch}\r\n isInsufficientBalance={isInsufficientBalance}\r\n solanaTxMessage={quoteInfo.solanaTxMessage}\r\n lockRequestId={lockRequestId}\r\n currentRequestId={quoteInfo.request_id}\r\n clearLockedRequestId={clearLockedRequestId}\r\n lockedRequestId={lockedRequestId}\r\n getQuote={getQuote}\r\n />\r\n\r\n <SelectTokenModal\r\n isOpen={isModalOpen}\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClose={handleCloseModal}\r\n config={config}\r\n\r\n onSelectToken={handleSelectToken}\r\n />\r\n {quoteInfo.info && fromAmount && toAmount && (\r\n <TxInfo\r\n {...quoteInfo.info}\r\n fromTokenInUsd={fromTokenInUsd}\r\n router_type={quoteInfo.router_type}\r\n routes={quoteInfo.routes}\r\n />\r\n )}\r\n <DifferentAddressDialog\r\n isOpen={isDifferentAddressDialogOpen}\r\n onClose={handleCloseDifferentAddressDialog}\r\n onSaveCallback={refetchQuote}\r\n ></DifferentAddressDialog>\r\n </>\r\n )\r\n}\r\n","import {\r\n Box,\r\n Button,\r\n HStack,\r\n Icon,\r\n // Image,\r\n Input,\r\n InputGroup,\r\n Popover,\r\n Portal\r\n} from '@chakra-ui/react'\r\n\r\nimport { MobileTooltip } from './ui/tooltip'\r\nimport { SettingsIcon } from './icons'\r\nimport { InfoIcon } from './icons'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { Heading, Text } from './ui'\r\nimport { slippageStore } from '../utils'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { useCallback, useEffect, useMemo, useState } from 'react'\r\nimport { Props } from './FormTop'\r\nimport { useChainsStore } from './hooks'\r\nimport { FaTriangleExclamation } from \"react-icons/fa6\";\r\nimport {\r\n matchSlippagePolicy,\r\n isETHtoETHBridge,\r\n getLowSlippageWarnThreshold,\r\n HIGH_SLIPPAGE_WARN_THRESHOLD,\r\n isStablecoin\r\n} from './utils/index'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n/** Preset slippage percentages (displayed as %) */\r\nconst PRESET_VALUES = ['0.1', '0.5', '1', '2']\r\n\r\n/** Convert bips to a percentage string. E.g. 10 → '0.1', 50 → '0.5' */\r\nconst bipsToPercent = (bips: number): string => (bips / 100).toString()\r\n\r\nexport const SlippageSettings = ({ refetchQuote }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const {\r\n slippage,\r\n setSlippage,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n autoSlippage\r\n } = useSwapAndBridgeContextStore()\r\n const { slippagePolicies, chains } = useChainsStore()\r\n\r\n // --- Track which preset was explicitly clicked (null = input-typed or no selection) ---\r\n const [activePreset, setActivePreset] = useState<string | null>(null)\r\n\r\n // --- Load stored slippage on mount / address change ---\r\n useEffect(() => {\r\n /* eslint-disable react-hooks/set-state-in-effect */\r\n if (address) {\r\n const storedSlippage = slippageStore.get(address)\r\n if (storedSlippage && storedSlippage.value) {\r\n const parsed = parseFloat(storedSlippage.value).toString()\r\n setSlippage(parsed)\r\n // If stored value matches a preset, treat it as preset-selected\r\n setActivePreset(PRESET_VALUES.includes(parsed) ? parsed : null)\r\n } else {\r\n setSlippage(undefined)\r\n setActivePreset(null)\r\n }\r\n }\r\n /* eslint-enable react-hooks/set-state-in-effect */\r\n }, [address, setSlippage])\r\n\r\n // --- Debug: log fromTokenInfo and toTokenInfo details ---\r\n // useEffect(() => {\r\n // console.log('[SlippageSettings] fromTokenInfo:', {\r\n // name: fromTokenInfo?.name,\r\n // symbol: fromTokenInfo?.symbol,\r\n // address: fromTokenInfo?.address,\r\n // chain_id: fromTokenInfo?.chain_id,\r\n // decimals: fromTokenInfo?.decimals,\r\n // fee_level: fromTokenInfo?.fee_level,\r\n // categories: fromTokenInfo?.categories,\r\n // tags: fromTokenInfo?.tags\r\n // })\r\n // console.log('[SlippageSettings] toTokenInfo:', {\r\n // name: toTokenInfo?.name,\r\n // symbol: toTokenInfo?.symbol,\r\n // address: toTokenInfo?.address,\r\n // chain_id: toTokenInfo?.chain_id,\r\n // decimals: toTokenInfo?.decimals,\r\n // fee_level: toTokenInfo?.fee_level,\r\n // categories: toTokenInfo?.categories,\r\n // tags: toTokenInfo?.tags\r\n // })\r\n // }, [fromTokenInfo, toTokenInfo])\r\n\r\n // --- Match policy based on current token pair ---\r\n const matchedPolicy = useMemo(() => {\r\n if (!fromTokenInfo || !toTokenInfo) return null\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n return matchSlippagePolicy(\r\n slippagePolicies,\r\n isBridge,\r\n fromFeeLevel,\r\n toFeeLevel\r\n )\r\n }, [fromTokenInfo, toTokenInfo, slippagePolicies])\r\n\r\n // --- ETH-to-ETH cross-chain bridge check ---\r\n const isETHtoETH = useMemo(\r\n () => isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains),\r\n [fromTokenInfo, toTokenInfo, chains]\r\n )\r\n\r\n // --- Stablecoin pair detection ---\r\n const isStablecoinPair = useMemo(\r\n () =>\r\n isStablecoin(fromTokenInfo) && isStablecoin(toTokenInfo),\r\n [fromTokenInfo, toTokenInfo]\r\n )\r\n\r\n // --- Same chain check ---\r\n const isSameChain = useMemo(\r\n () =>\r\n fromTokenInfo?.chain_id !== undefined &&\r\n toTokenInfo?.chain_id !== undefined &&\r\n fromTokenInfo.chain_id === toTokenInfo.chain_id,\r\n [fromTokenInfo, toTokenInfo]\r\n )\r\n\r\n // --- Which preset (if any) corresponds to autoSlippage (the recommended value) ---\r\n const autoPresetValue = useMemo(() => {\r\n if (autoSlippage === undefined) return null\r\n const autoPercent = bipsToPercent(autoSlippage)\r\n return PRESET_VALUES.includes(autoPercent) ? autoPercent : null\r\n }, [autoSlippage])\r\n\r\n // --- Effective slippage in bips for the currently active value ---\r\n const effectiveSlippageBips = useMemo(() => {\r\n if (slippage !== undefined) {\r\n return Math.round(parseFloat(slippage) * 100)\r\n }\r\n return 0\r\n }, [slippage])\r\n\r\n // --- Low slippage warning threshold (bips) ---\r\n // Stablecoin pair uses fixed thresholds; others use fee_level policy or 0\r\n const lowSlippageWarnThreshold = useMemo(() => {\r\n if (isStablecoinPair) {\r\n // Same-chain stablecoin: min 0.05% (5 bips), cross-chain: min 0.2% (20 bips)\r\n return isSameChain ? 5 : 20\r\n }\r\n return getLowSlippageWarnThreshold(\r\n fromTokenInfo,\r\n toTokenInfo,\r\n matchedPolicy,\r\n isETHtoETH\r\n )\r\n }, [isStablecoinPair, isSameChain, fromTokenInfo, toTokenInfo, matchedPolicy, isETHtoETH])\r\n\r\n // --- Max slippage warning threshold (bips) ---\r\n // Stablecoin: 3% (300 bips); others from policy or 3% fallback\r\n const maxSlippageWarnThreshold = useMemo(() => {\r\n if (isStablecoinPair) {\r\n return 300 // 3% for stablecoin\r\n }\r\n return matchedPolicy?.max_slippage ?? HIGH_SLIPPAGE_WARN_THRESHOLD\r\n }, [isStablecoinPair, matchedPolicy])\r\n\r\n // --- Show low slippage warning (only when user has explicitly set a value) ---\r\n const showLowSlippageWarning = useMemo(\r\n () =>\r\n slippage !== undefined &&\r\n lowSlippageWarnThreshold > 0 &&\r\n effectiveSlippageBips > 0 &&\r\n effectiveSlippageBips < lowSlippageWarnThreshold,\r\n [slippage, lowSlippageWarnThreshold, effectiveSlippageBips]\r\n )\r\n\r\n // --- Show high slippage warning (only when user has explicitly set a value) ---\r\n const showHighSlippageWarning = useMemo(() => {\r\n if (slippage === undefined || isETHtoETH) return false\r\n return effectiveSlippageBips > maxSlippageWarnThreshold\r\n }, [slippage, isETHtoETH, effectiveSlippageBips, maxSlippageWarnThreshold])\r\n\r\n // --- Yellow dot on settings icon when slippage is too high or too low ---\r\n const showYellowDot = useMemo(() => {\r\n if (slippage === undefined || isETHtoETH) return false\r\n if (effectiveSlippageBips <= 0) return false\r\n return (\r\n effectiveSlippageBips < lowSlippageWarnThreshold ||\r\n effectiveSlippageBips > maxSlippageWarnThreshold\r\n )\r\n }, [\r\n slippage,\r\n isETHtoETH,\r\n effectiveSlippageBips,\r\n lowSlippageWarnThreshold,\r\n maxSlippageWarnThreshold\r\n ])\r\n\r\n // --- Warning message text ---\r\n const warningMessage = useMemo(() => {\r\n if (showLowSlippageWarning) {\r\n return 'Slippage is a bit too low, which may cause the transaction to fail or prevent wallet confirmation.'\r\n }\r\n if (showHighSlippageWarning) {\r\n return 'Your slippage tolerance might be high. Consider adjusting it to avoid front-running risks.'\r\n }\r\n return null\r\n }, [showLowSlippageWarning, showHighSlippageWarning])\r\n\r\n // --- Input display value (defaults to empty when no user selection) ---\r\n const inputValue = useMemo(() => {\r\n if (slippage !== undefined) return slippage.toString()\r\n return ''\r\n }, [slippage])\r\n\r\n // --- Whether current slippage value came from custom input (not a preset click) ---\r\n const isCustomInput = useMemo(() => {\r\n return activePreset === null && slippage !== undefined\r\n }, [activePreset, slippage])\r\n\r\n // --- Handlers ---\r\n const handlePresetClick = useCallback(\r\n (value: string) => {\r\n setActivePreset(value)\r\n setSlippage(value)\r\n if (address) {\r\n slippageStore.set(address, { value })\r\n }\r\n if (value) {\r\n refetchQuote({ slippageValue: value })\r\n }\r\n },\r\n [address, setSlippage, refetchQuote]\r\n )\r\n\r\n const handleInputChange = useCallback(\r\n (value: string) => {\r\n if (value === '' || /^\\d*(\\.\\d{0,2})?$/.test(value)) {\r\n setActivePreset(null)\r\n setSlippage(value)\r\n if (address) {\r\n slippageStore.set(address, { value })\r\n }\r\n if (value) {\r\n refetchQuote({ slippageValue: value })\r\n }\r\n }\r\n },\r\n [address, setSlippage, refetchQuote]\r\n )\r\n\r\n const handleAutoClick = useCallback(() => {\r\n setActivePreset(null)\r\n setSlippage(undefined)\r\n if (address) {\r\n slippageStore.remove(address)\r\n }\r\n // Use slippagePolicies default for this token pair\r\n if (fromTokenInfo && toTokenInfo && autoSlippage !== undefined) {\r\n refetchQuote({\r\n isAutoSlippage: true,\r\n slippageValue: (autoSlippage / 100).toString()\r\n })\r\n }\r\n }, [address, setSlippage, refetchQuote, fromTokenInfo, toTokenInfo, autoSlippage])\r\n\r\n return (\r\n <Popover.Root positioning={{ placement: 'bottom-end' }} autoFocus={false}>\r\n <Popover.Trigger>\r\n <Box position=\"relative\" cursor=\"pointer\">\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '22px'\r\n }}\r\n as={SettingsIcon}\r\n />\r\n {showYellowDot && (\r\n <Box\r\n position=\"absolute\"\r\n top=\"-2px\"\r\n right=\"-2px\"\r\n w=\"8px\"\r\n h=\"8px\"\r\n borderRadius=\"full\"\r\n bg=\"#FCCA00\"\r\n />\r\n )}\r\n </Box>\r\n </Popover.Trigger>\r\n <Portal>\r\n <Popover.Positioner>\r\n <Popover.Content\r\n w={['90vw', '450px', '450px']}\r\n // boxShadow={'0px 4px 12px 0px #545AB4'}\r\n borderRadius={'12px'}\r\n background={theme.assistBgColor}\r\n >\r\n <Popover.Body\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n >\r\n <Popover.Title>\r\n <HStack color={theme.weakTextColor} paddingBottom={'10px'} position={'relative'}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading11'\r\n }}\r\n >\r\n Slippage Tolerance\r\n </Heading>\r\n <MobileTooltip\r\n contentProps={{\r\n boxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.1)'\r\n }}\r\n content={\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n p={4}\r\n lineHeight={1.2}\r\n color={theme.weakTextColor}\r\n >\r\n If the price changes unfavorably by more than the\r\n entered percentage, the transaction will be reverted.\r\n </Text>\r\n }\r\n openDelay={100}\r\n closeDelay={100}\r\n interactive\r\n >\r\n <Icon boxSize={'10px'} as={InfoIcon} color={theme.weakTextColor} />\r\n </MobileTooltip>\r\n <Button\r\n h={'26px'}\r\n border={'1px solid'}\r\n borderColor={slippage === undefined ? theme.highlightBorderColor : theme.weakTextColor}\r\n bg={slippage === undefined ? theme.highlightButtonBg : theme.defaultBgColor}\r\n color={slippage === undefined ? theme.highlightButtonText : theme.weakTextColor}\r\n px={2}\r\n py={0.5}\r\n variant={'outline'}\r\n borderRadius={'4px'}\r\n onClick={handleAutoClick}\r\n position={'absolute'}\r\n top={0}\r\n right={0}\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n >\r\n Auto\r\n </Text>\r\n </Button>\r\n </HStack>\r\n </Popover.Title>\r\n\r\n <HStack mt={2} flexWrap={'wrap'} gap={2} justifyContent={'space-between'} marginBottom={'10px'}>\r\n {PRESET_VALUES.map((presetValue) => {\r\n const isSelected = activePreset === presetValue\r\n const isRecommended =\r\n slippage === undefined && presetValue === autoPresetValue\r\n\r\n return (\r\n <Button\r\n key={presetValue}\r\n h={'34px'}\r\n w={'64px'}\r\n border={'1px solid'}\r\n borderColor={\r\n isSelected || isRecommended ? theme.highlightBorderColor : theme.weakTextColor\r\n }\r\n bg={\r\n isSelected || isRecommended ? theme.highlightButtonBg : theme.defaultBgColor\r\n }\r\n color={\r\n isSelected || isRecommended ? theme.highlightButtonText : theme.defaultTextColor\r\n }\r\n px={2}\r\n py={0.5}\r\n variant={'outline'}\r\n borderRadius={'10px'}\r\n onClick={() => handlePresetClick(presetValue)}\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n >\r\n {presetValue}%\r\n </Text>\r\n </Button>\r\n )\r\n })}\r\n\r\n <InputGroup\r\n w={'76px'}\r\n endElement={'%'}\r\n endElementProps={{\r\n pr: 2,\r\n fontSize: {\r\n base: '10px',\r\n md: '12px'\r\n }\r\n }}\r\n >\r\n <Input\r\n id=\"slippage-input\"\r\n width=\"76px\"\r\n borderRadius={'10px'}\r\n h={'34px'}\r\n px={3}\r\n style={{ paddingInlineEnd: 20 }}\r\n placeholder={'Custom'}\r\n color={theme.defaultTextColor}\r\n _placeholder={{ color: theme.weakTextColor }}\r\n fontSize={{\r\n base: '10px',\r\n md: '12px'\r\n }}\r\n fontWeight={400}\r\n textAlign={'center'}\r\n borderColor={isCustomInput ? theme.highlightBorderColor : theme.weakTextColor}\r\n _focus={{\r\n borderColor: theme.highlightBorderColor,\r\n outlineWidth: '0px'\r\n }}\r\n autoComplete=\"off\"\r\n inputMode=\"decimal\"\r\n type=\"text\"\r\n value={inputValue}\r\n onChange={(e) => handleInputChange(e.target.value)}\r\n />\r\n </InputGroup>\r\n </HStack>\r\n\r\n {warningMessage && (\r\n <Box\r\n // color={'#81728c'}\r\n // backgroundColor={'rgba(255, 210, 0, .1)'}\r\n // border={'1px solid rgba(255, 210, 0, 1)'}\r\n minHeight={'18px'}\r\n lineHeight={1.5}\r\n padding={'6px 0 6px 21px'}\r\n textAlign={'left'}\r\n fontSize={'12px'}\r\n borderRadius={'4px'}\r\n w={'100%'}\r\n mt={2}\r\n position={'relative'}\r\n color={'#FCCA00'}\r\n >\r\n {/* <Image\r\n src={'https://wheelx.fi/images/jth.png'}\r\n alt=\"warning\"\r\n /> */}\r\n <Box\r\n w={'14px'}\r\n h={'14px'}\r\n display={'inline'}\r\n position={'absolute'}\r\n left={'2px'}\r\n top={'8px'}\r\n >\r\n <FaTriangleExclamation color={'#FCCA00'} />\r\n </Box>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n lineHeight={1.5}\r\n >\r\n {warningMessage}\r\n </Text>\r\n </Box>\r\n )}\r\n </Popover.Body>\r\n </Popover.Content>\r\n </Popover.Positioner>\r\n </Portal>\r\n </Popover.Root>\r\n )\r\n}\r\n","import { Box, HStack } from '@chakra-ui/react'\r\n\r\nimport { SlippageSettings } from './SlippageSettings'\r\nimport { Heading } from './ui'\r\nimport { useRefreshLoading } from './hooks/useRefreshLoading'\r\nimport { loaderSvgUrl } from './icons'\r\nimport { QuoteInfo } from './MainForm'\r\nimport { useState, useEffect } from 'react'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\nexport interface RefetchQuoteParams {\r\n slippageValue?: string\r\n isAutoSlippage?: boolean\r\n}\r\n\r\nexport interface Props {\r\n refetchQuote: (params?: RefetchQuoteParams) => void\r\n quoteInfo?: QuoteInfo\r\n clearLockedRequestId?: () => void\r\n refreshInterval?: number\r\n hideCountdown?: boolean\r\n}\r\nexport const FormTop = ({\r\n refetchQuote,\r\n quoteInfo,\r\n clearLockedRequestId,\r\n refreshInterval = 30,\r\n hideCountdown = false\r\n}: Props) => {\r\n const { isLoading: isLoadingRefresh } = useRefreshLoading()\r\n const { theme } = useWidgetTheme()\r\n\r\n const isPolling = Boolean(quoteInfo?.request_id && !isLoadingRefresh)\r\n const [countdown, setCountdown] = useState(refreshInterval)\r\n\r\n useEffect(() => {\r\n if (!isPolling) return\r\n\r\n let seconds = refreshInterval\r\n setCountdown(seconds)\r\n\r\n const timer = setInterval(() => {\r\n seconds -= 1\r\n if (seconds <= 0) {\r\n setCountdown(0)\r\n clearInterval(timer)\r\n return\r\n }\r\n setCountdown(seconds)\r\n }, 1000)\r\n\r\n return () => {\r\n clearInterval(timer)\r\n }\r\n }, [isPolling, refreshInterval])\r\n\r\n const handleRefreshClick = () => {\r\n if (clearLockedRequestId) {\r\n clearLockedRequestId()\r\n }\r\n refetchQuote()\r\n }\r\n\r\n return (\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n Bridge & Swap\r\n </Heading>\r\n <HStack color={theme.weakTextColor || '#81728C'}>\r\n <HStack\r\n w={'24px'}\r\n h={'24px'}\r\n display={'flex'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n background={'transparent'}\r\n position={'relative'}\r\n >\r\n <Box\r\n w=\"22px\"\r\n h=\"22px\"\r\n position=\"relative\"\r\n maskImage={`url(${loaderSvgUrl})`}\r\n maskPosition={'center center'}\r\n maskRepeat={'no-repeat'}\r\n maskSize={'100%'}\r\n top={'1px'}\r\n cursor={'pointer'}\r\n onClick={handleRefreshClick}\r\n className=\"animation-loading\"\r\n animationName={isLoadingRefresh ? 'keyframes-loading' : undefined}\r\n >\r\n <svg\r\n height=\"24\"\r\n width=\"24\"\r\n style={{\r\n backgroundColor: theme.weakTextColor ||'#81728C',\r\n stroke: 'rgb(185, 206, 252)',\r\n strokeDasharray: '0, 101',\r\n fill: 'none',\r\n transform: 'translate(-50%, -50%) rotate(-91deg)',\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n width: '22px',\r\n height: '22px',\r\n transition: 'background-color 0.15ms',\r\n animation:\r\n isLoadingRefresh || !quoteInfo?.request_id\r\n ? undefined\r\n : `svg_loader ${refreshInterval}s linear 0s infinite normal`\r\n }}\r\n >\r\n <circle cx=\"50%\" cy=\"50%\" r=\"50%\" strokeWidth=\"100%\"></circle>\r\n </svg>\r\n </Box>\r\n <Box\r\n position={'absolute'}\r\n pointerEvents={'none'}\r\n w={'100%'}\r\n h={'100%'}\r\n top={0}\r\n left={0}\r\n textAlign={'center'}\r\n lineHeight={'28px'}\r\n fontSize={'10px'}\r\n color={countdown <= 10 ? '#FF4D4F' : '#81728C'}\r\n >\r\n {isPolling && !hideCountdown && countdown > 0 ? countdown : ''}\r\n </Box>\r\n </HStack>\r\n <SlippageSettings refetchQuote={refetchQuote} />\r\n </HStack>\r\n </HStack>\r\n )\r\n}\r\n","import React, { useState, useEffect, useCallback, useRef } from 'react'\r\nimport { Text } from './ui'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n stop: boolean\r\n onTick?: (seconds: number) => void\r\n}\r\n\r\nconst Timer = ({ stop, onTick }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const [seconds, setSeconds] = useState<number>(0)\r\n const [isRunning, setIsRunning] = useState<boolean>(false)\r\n const timer = useRef<NodeJS.Timeout | null>(null)\r\n\r\n const formatTime = (totalSeconds: number): string => {\r\n return `${totalSeconds} s`\r\n }\r\n\r\n const startTimer = useCallback(() => {\r\n if (!isRunning) {\r\n setIsRunning(true)\r\n setSeconds(0)\r\n }\r\n }, [isRunning])\r\n\r\n useEffect(() => {\r\n startTimer()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (onTick) {\r\n onTick(seconds)\r\n }\r\n }, [seconds, onTick])\r\n\r\n useEffect(() => {\r\n if (isRunning) {\r\n timer.current = setInterval(() => {\r\n setSeconds((prev) => prev + 1)\r\n }, 1000)\r\n }\r\n\r\n return () => {\r\n if (timer.current) {\r\n clearInterval(timer.current)\r\n }\r\n }\r\n }, [isRunning])\r\n\r\n useEffect(() => {\r\n if (stop) {\r\n setIsRunning(false)\r\n if (timer.current) {\r\n clearInterval(timer.current)\r\n timer.current = null\r\n }\r\n }\r\n }, [stop])\r\n\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n {formatTime(seconds)}\r\n </Text>\r\n )\r\n}\r\n\r\nexport default Timer\r\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Success = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"animation-success\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Wheel = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"animation-wheel\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Failure = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"failure\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { VStack, HStack, Icon, Button, Image, Link } from '@chakra-ui/react'\r\nimport { useMemo, useState, useEffect } from 'react'\r\nimport type { Connection } from '@solana/web3.js'\r\nimport { useRpcProviders } from '@dynamic-labs/sdk-react-core'\r\n\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\n\r\nimport { useIntervalGetOrderDetailPlus } from '../api/useIntervalGetOrderDetail'\r\nimport {\r\n formatDate,\r\n getTxLink,\r\n logger,\r\n openFunctionHash,\r\n sliceAddress,\r\n formatTokenAmount\r\n} from '../utils'\r\n\r\nimport { useSwapAndBridgeContextStore, useTxStateContextStore } from './hooks'\r\nimport { BackIcon } from './icons'\r\nimport { BoxWithBg } from './ui/BoxWithBg'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\nimport { ArrowRightIcon } from './icons'\r\nimport { LinkIcon } from './icons'\r\nimport { TimeIcon } from './icons'\r\nimport { DateIcon } from './icons'\r\nimport { MoneyIcon } from './icons'\r\nimport { Text, Heading } from './ui'\r\nimport { PlusIcon } from './icons'\r\nimport { TokenAmountHeading, TokenIconWithNetworkLogo } from './commons'\r\nimport { Fraction } from 'bi-fraction'\r\nimport Timer from './Timer'\r\nimport { useConfig } from 'wagmi'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { Success, Wheel, Failure } from './animations'\r\nimport { topToaster } from './ui/toaster'\r\nimport { useRetryAbleTransactionReceipt } from './hooks/useRetryAbleTransactionReceipt'\r\nimport { hyperliquidChainId } from './utils/consts'\r\nimport { useChainsStore } from '../stores/chainsStore'\r\n\r\n// Solana transaction confirmation hook\r\nconst useSolanaTransactionConfirmation = (\r\n signature: string | null,\r\n connection: Connection | null\r\n) => {\r\n const [status, setStatus] = useState<'pending' | 'confirmed' | 'failed'>(\r\n 'pending'\r\n )\r\n const [isLoading, setIsLoading] = useState(false)\r\n\r\n useEffect(() => {\r\n if (!signature || !connection) return\r\n\r\n const checkConfirmation = async () => {\r\n setIsLoading(true)\r\n try {\r\n const response = await connection.getSignatureStatuses([signature], {\r\n searchTransactionHistory: true\r\n })\r\n\r\n const value = response?.value?.[0]\r\n\r\n if (!value) {\r\n setStatus('pending')\r\n return\r\n }\r\n\r\n if (value.err) {\r\n setStatus('failed')\r\n } else if (\r\n value.confirmationStatus === 'confirmed' ||\r\n value.confirmationStatus === 'finalized'\r\n ) {\r\n setStatus('confirmed')\r\n } else {\r\n setStatus('pending')\r\n }\r\n } catch (error) {\r\n const message =\r\n error instanceof Error ? error.message.toLowerCase() : String(error)\r\n\r\n // Transient RPC/network issue: keep pending and continue polling\r\n if (\r\n message.includes('failed to fetch') ||\r\n message.includes('timeout')\r\n ) {\r\n setStatus('pending')\r\n } else {\r\n logger.error('Solana transaction confirmation error:', error)\r\n setStatus('failed')\r\n }\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n checkConfirmation()\r\n\r\n const interval = setInterval(checkConfirmation, 3000)\r\n\r\n // Max waiting 3 minutes. If still pending, mark failed to avoid infinite pending UI.\r\n const timeout = setTimeout(() => {\r\n clearInterval(interval)\r\n setStatus((prev) => (prev === 'pending' ? 'failed' : prev))\r\n setIsLoading(false)\r\n }, 180000)\r\n\r\n return () => {\r\n clearInterval(interval)\r\n clearTimeout(timeout)\r\n }\r\n }, [signature, connection])\r\n\r\n return { status, isLoading }\r\n}\r\n\r\n// Get Solana transaction link\r\nconst getSolanaTxLink = (signature: string) => {\r\n return `https://solscan.io/tx/${signature}`\r\n}\r\n\r\ninterface Props {\r\n resetQuoteInfo: () => void\r\n request_id: string | null\r\n routerType?: string | null | undefined\r\n points?: number | 0 | string\r\n clearLockedRequestId: () => void\r\n}\r\n\r\nexport const TxState = ({\r\n resetQuoteInfo,\r\n request_id,\r\n routerType,\r\n clearLockedRequestId\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTokenInfo, toTokenInfo, fromAmount, toAmount, resetAmounts, setToAmount } =\r\n useSwapAndBridgeContextStore()\r\n\r\n const {\r\n fromTxHash,\r\n solanaFromTxHash,\r\n toTxHash,\r\n resetTxState,\r\n setToTxHash,\r\n setUserCancelsTransaction,\r\n isSolanaTransaction\r\n } = useTxStateContextStore()\r\n\r\n // Get current transaction hash (EVM or Solana)\r\n // const currentTxHash = isSolanaTransaction ? solanaFromTxHash : fromTxHash\r\n\r\n const isSameChainSwap = useMemo(() => {\r\n return fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n }, [fromTokenInfo.chain_id, toTokenInfo.chain_id])\r\n\r\n const now = useMemo(() => {\r\n return formatDate(new Date().toISOString())\r\n }, [])\r\n const [enabled, setEnabled] = useState(false)\r\n const [orderId, setOrderId] = useState<string | null>(request_id)\r\n const [isSameChainSwapSuccess, setIsSameChainSwapSuccess] = useState(false)\r\n const [timeOut, setTimeOut] = useState(false)\r\n const [isTransactionBlocked, setIsTransactionBlocked] = useState(false)\r\n const [currentTime, setCurrentTime] = useState(0)\r\n const { differentAddress, setDifferentAddress } = useDifferentAddressStore()\r\n const { chains } = useChainsStore()\r\n const toChainInfo = chains?.find((chain) => {\r\n if (toTokenInfo.platform_id && toTokenInfo.platform_id > 0) {\r\n return chain.platform_id === toTokenInfo.platform_id\r\n } else {\r\n return chain.chain_id === toTokenInfo.chain_id\r\n }\r\n })\r\n\r\n // Solana connection (Dynamic)\r\n const { defaultProvider: connection } = useRpcProviders((providers) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: Connection\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: solanaProviders?.[0]?.provider ?? null\r\n }\r\n })\r\n\r\n // Solana transaction confirmation status\r\n const { status: solanaStatus, isLoading: solanaIsLoading } =\r\n useSolanaTransactionConfirmation(solanaFromTxHash, connection)\r\n\r\n const resetLocalState = () => {\r\n setEnabled(false)\r\n setOrderId(null)\r\n setIsSameChainSwapSuccess(false)\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n resetLocalState()\r\n }\r\n }, [])\r\n\r\n // Cleanup Solana state (only on unmount, not on re-render)\r\n useEffect(() => {\r\n return () => {\r\n // Don't reset here, let user click back button to reset state\r\n // setIsSolanaTransaction(false)\r\n }\r\n }, [])\r\n\r\n const address = useEvmAddress()\r\n\r\n const {\r\n data: orderDetail,\r\n isError\r\n } = useIntervalGetOrderDetailPlus({\r\n orderId,\r\n enabled,\r\n maxRefetchAttempts: 200\r\n })\r\n\r\n const config = useConfig()\r\n\r\n const {\r\n data: receipt,\r\n isError: isReceiptError,\r\n error,\r\n isPending,\r\n isSuccess,\r\n isFetched,\r\n status: evmStatus,\r\n isMaxRetriesExceeded\r\n } = useRetryAbleTransactionReceipt(\r\n fromTxHash || undefined,\r\n fromTokenInfo.chain_id,\r\n 6\r\n )\r\n\r\n // Derive receipt status from external sources instead of using state+effect\r\n const receiptStatus = useMemo(() => {\r\n if (isSolanaTransaction) {\r\n if (solanaStatus === 'confirmed') return 'success'\r\n if (solanaStatus === 'failed') return 'failed'\r\n return null\r\n }\r\n // EVM: derived from transaction receipt\r\n if (receipt?.status === 'success') return 'success'\r\n if (receipt?.status === 'reverted') return 'failed'\r\n return null\r\n }, [isSolanaTransaction, solanaStatus, receipt?.status])\r\n\r\n useEffect(() => {\r\n console.log(\r\n 'isReceiptError:',\r\n isReceiptError,\r\n 'error:',\r\n error,\r\n 'isPending:',\r\n isPending,\r\n 'isSuccess:',\r\n isSuccess,\r\n 'isFetched:',\r\n isFetched,\r\n 'status:',\r\n evmStatus,\r\n 'solanaStatus:',\r\n solanaStatus\r\n )\r\n }, [\r\n error,\r\n isFetched,\r\n isMaxRetriesExceeded,\r\n isPending,\r\n isReceiptError,\r\n isSuccess,\r\n evmStatus,\r\n solanaStatus\r\n ])\r\n\r\n useEffect(() => {\r\n if (isError) {\r\n console.log('get order detail error:', isError)\r\n }\r\n }, [isError])\r\n\r\n useEffect(() => {\r\n if (timeOut && isTransactionBlocked) {\r\n topToaster.error({\r\n description: `This transaction is stuck on the source network. Please go to the wallet's activity section to speed up or cancel the transaction.`\r\n })\r\n }\r\n }, [isTransactionBlocked, timeOut])\r\n\r\n // Handle Solana transaction success logic\r\n useEffect(() => {\r\n // console.log('🔄 Solana transaction status change:', {\r\n // isSolanaTransaction,\r\n // solanaFromTxHash,\r\n // solanaStatus,\r\n // isSameChainSwap,\r\n // request_id\r\n // })\r\n\r\n if (isSolanaTransaction && solanaFromTxHash) {\r\n if (solanaStatus === 'confirmed') {\r\n // console.log(\r\n // '✅ Solana transaction confirmed, setting status to success'\r\n // )\r\n\r\n // Start order API polling (both same-chain and cross-chain)\r\n const orderIdValue = request_id\r\n if (orderIdValue) {\r\n queueMicrotask(() => {\r\n setOrderId(orderIdValue)\r\n setEnabled(true)\r\n })\r\n } else {\r\n console.warn('⚠️ [Solana] request_id is empty, cannot start order polling. Check if quote API returned request_id for this swap.')\r\n }\r\n } else if (solanaStatus === 'failed') {\r\n // console.log('❌ Solana transaction failed')\r\n queueMicrotask(() => {\r\n setTimeOut(true)\r\n })\r\n } else if (solanaStatus === 'pending') {\r\n console.log('⏳ Solana transaction waiting for confirmation...')\r\n }\r\n } else {\r\n console.log('⚠️ Condition not met:', {\r\n isSolanaTransaction,\r\n solanaFromTxHash\r\n })\r\n }\r\n }, [\r\n isSolanaTransaction,\r\n solanaFromTxHash,\r\n solanaStatus,\r\n request_id\r\n ])\r\n\r\n // EVM transaction handling logic\r\n useEffect(() => {\r\n async function getOrderId() {\r\n try {\r\n if (!fromTxHash || isSolanaTransaction) return\r\n\r\n logger.info('Bridge transaction receipt:', receipt)\r\n\r\n const log = receipt?.logs?.find(\r\n (log: { topics: string[] }) => log.topics[0] === openFunctionHash\r\n )\r\n const orderIdOld = log?.topics[1]\r\n const orderId = request_id || orderIdOld\r\n if (orderId && receipt?.status === 'success') {\r\n setTimeOut(false)\r\n setOrderId(orderId)\r\n setEnabled(true)\r\n setTimeOut(false)\r\n }\r\n } catch (error) {\r\n logger.error('Transaction confirmation failed:', error)\r\n resetLocalState()\r\n }\r\n }\r\n\r\n if (fromTxHash && !isSolanaTransaction) {\r\n getOrderId()\r\n }\r\n }, [\r\n config,\r\n request_id,\r\n fromTokenInfo.chain_id,\r\n fromTxHash,\r\n receipt,\r\n isSolanaTransaction\r\n ])\r\n\r\n useEffect(() => {\r\n if (orderDetail?.status === 'Filled') {\r\n // For same-chain swaps, fill_tx_hash may be null since there's no cross-chain fill tx.\r\n // Use the source tx hash as fallback because source tx IS the target tx on the same chain.\r\n queueMicrotask(() => {\r\n setEnabled(false)\r\n setToTxHash(\r\n orderDetail.fill_tx_hash ||\r\n (isSameChainSwap\r\n ? isSolanaTransaction\r\n ? (solanaFromTxHash as unknown as `0x${string}`)\r\n : fromTxHash\r\n : null)\r\n )\r\n })\r\n }\r\n if (orderDetail?.status === 'Failed') {\r\n queueMicrotask(() => {\r\n setEnabled(false)\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [orderDetail, setToTxHash, isSameChainSwap, fromTxHash, isSolanaTransaction, solanaFromTxHash])\r\n\r\n // Update toAmount when orderDetail returns amount_out or to_amount.\r\n // Both fields are raw token units; must format to human-readable value first.\r\n useEffect(() => {\r\n const rawAmount = orderDetail?.to_amount || orderDetail?.amount_out\r\n if (rawAmount) {\r\n const formatted = formatTokenAmount({\r\n amount: new Fraction(rawAmount),\r\n decimals: toTokenInfo.decimals,\r\n useGroupSeparator: false\r\n })\r\n setToAmount(formatted)\r\n }\r\n }, [orderDetail?.amount_out, orderDetail?.to_amount, setToAmount, toTokenInfo.decimals])\r\n\r\n const onBack = () => {\r\n setUserCancelsTransaction(false)\r\n setTimeOut(false)\r\n setIsTransactionBlocked(false)\r\n resetTxState()\r\n resetAmounts()\r\n resetQuoteInfo()\r\n resetLocalState()\r\n setDifferentAddress(undefined)\r\n clearLockedRequestId()\r\n }\r\n\r\n const handleTimerTick = (secs: number) => {\r\n setCurrentTime(secs)\r\n }\r\n\r\n // Determine if transaction is successful (supports both EVM and Solana)\r\n // const isTransactionSuccess = useMemo(() => {\r\n // if (isSolanaTransaction) {\r\n // return solanaStatus === 'confirmed'\r\n // }\r\n // return receiptStatus === 'success'\r\n // }, [isSolanaTransaction, solanaStatus, receiptStatus])\r\n\r\n // Determine if transaction is in progress\r\n const isTransactionPending = useMemo(() => {\r\n if (isSolanaTransaction) {\r\n return solanaStatus === 'pending' || solanaIsLoading\r\n }\r\n return isPending\r\n }, [isSolanaTransaction, solanaStatus, solanaIsLoading, isPending])\r\n\r\n useEffect(() => {\r\n if (isTransactionPending && currentTime >= 300) {\r\n queueMicrotask(() => {\r\n setIsTransactionBlocked(true)\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [currentTime, isTransactionPending])\r\n\r\n useEffect(() => {\r\n if (isFetched && evmStatus === 'error') {\r\n queueMicrotask(() => {\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [evmStatus, isFetched])\r\n\r\n const renderAnimation = () => {\r\n if (timeOut || receiptStatus === 'failed') {\r\n return <Failure />\r\n }\r\n if (!!toTxHash) {\r\n return <Success />\r\n }\r\n\r\n return <Wheel />\r\n }\r\n\r\n const renderFromTxHash = () => {\r\n // Solana transaction link\r\n if (isSolanaTransaction && solanaFromTxHash) {\r\n // console.log('renderFromTxHash - Solana:', {\r\n // isSolanaTransaction,\r\n // solanaFromTxHash,\r\n // solanaStatus,\r\n // receiptStatus\r\n // })\r\n\r\n if (solanaStatus === 'confirmed') {\r\n // console.log('✅ Rendering Solana transaction hash link')\r\n return (\r\n <Link href={getSolanaTxLink(solanaFromTxHash)} target=\"_blank\">\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(solanaFromTxHash)}{' '}\r\n <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n )\r\n }\r\n if (solanaStatus === 'failed') {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ff4267'}\r\n >\r\n Failed\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#0890FE'}\r\n >\r\n • Depositing...\r\n </Text>\r\n )\r\n }\r\n\r\n // EVM transaction link\r\n if (fromTxHash && receiptStatus === 'success') {\r\n return (\r\n <Link\r\n href={getTxLink(fromTxHash, fromTokenInfo.chain_id)}\r\n target=\"_blank\"\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(fromTxHash)} <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n )\r\n }\r\n if ((fromTxHash && receiptStatus === 'failed') || isFetched) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ff4267'}\r\n >\r\n Failed\r\n </Text>\r\n )\r\n }\r\n if (isTransactionBlocked) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ffd200'}\r\n >\r\n Pending\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#0890FE'}\r\n >\r\n • Depositing...\r\n </Text>\r\n )\r\n }\r\n\r\n const buttonDoingAndFinishText = useMemo(() => {\r\n const isCompleted = !!toTxHash\r\n if (routerType) {\r\n if (routerType === 'wrap') {\r\n return !isCompleted ? 'Wrapping' : 'Wrap'\r\n } else if (routerType === 'unwrap') {\r\n return !isCompleted ? 'Unwrapping' : 'Unwrap'\r\n } else if (routerType === 'swap') {\r\n return !isCompleted ? 'Swapping' : 'Swap'\r\n } else {\r\n return !isCompleted ? 'Bridging' : 'Bridge'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [routerType, toTxHash])\r\n\r\n const renderButton = () => {\r\n const isCompleted = !!toTxHash\r\n const isDisabled = !isCompleted\r\n\r\n let buttonContent\r\n if (isCompleted) {\r\n buttonContent = (\r\n <HStack gap={1}>\r\n <Icon\r\n boxSize={{\r\n base: '16px',\r\n md: '24px'\r\n }}\r\n as={PlusIcon}\r\n />\r\n New {buttonDoingAndFinishText}\r\n </HStack>\r\n )\r\n } else {\r\n buttonContent = <>{buttonDoingAndFinishText}</>\r\n }\r\n\r\n if (isTransactionBlocked) {\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n fontSize={'12px'}\r\n fontWeight={'400'}\r\n >\r\n {'This transaction is stuck on the source network'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (timeOut && !isTransactionBlocked) {\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {'Try Again'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n disabled={isDisabled}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n loading={!isCompleted}\r\n loadingText={\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {buttonContent}\r\n </Heading>\r\n }\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {buttonContent}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const renderSoneium = () => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/badge5.png'}\r\n alt={'badge'}\r\n width={['14px', '14px']}\r\n ></Image>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Soneium Score\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n + 1\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }\r\n\r\n return (\r\n <>\r\n <VStack\r\n gap={{\r\n base: 2,\r\n md: 4\r\n }}\r\n w={'100%'}\r\n >\r\n <Icon\r\n pos={'absolute'}\r\n top={4}\r\n left={4}\r\n onClick={onBack}\r\n cursor={'pointer'}\r\n as={BackIcon}\r\n boxSize={{\r\n base: '24px',\r\n md: '40px'\r\n }}\r\n color={theme.weakTextColor}\r\n />\r\n {renderAnimation()}\r\n <BoxWithBg\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '10px',\r\n md: '16px'\r\n }}\r\n w={'100%'}\r\n >\r\n <HStack w={'100%'} justify={'space-between'} gap={1}>\r\n <BoxWithBg\r\n bg={theme.defaultBgColor}\r\n borderRadius={'12px'}\r\n px={{\r\n base: 1,\r\n md: 2\r\n }}\r\n py={2}\r\n flex={1}\r\n >\r\n <HStack gap={1}>\r\n <TokenIconWithNetworkLogo tokenInfo={fromTokenInfo} />\r\n <VStack gap={1} align={'start'} flex={1} whiteSpace={'nowrap'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(fromAmount).shl(\r\n fromTokenInfo.decimals\r\n )}\r\n decimals={fromTokenInfo.decimals}\r\n variant={{\r\n base: 'heading12',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n suffix={fromTokenInfo.symbol}\r\n lineClamp={1}\r\n />\r\n {renderFromTxHash()}\r\n </VStack>\r\n </HStack>\r\n </BoxWithBg>\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '32px'\r\n }}\r\n as={ArrowRightIcon}\r\n />\r\n <BoxWithBg\r\n bg={theme.defaultBgColor}\r\n borderRadius={'12px'}\r\n px={{\r\n base: 1,\r\n md: 2\r\n }}\r\n py={2}\r\n flex={1}\r\n >\r\n <HStack gap={1}>\r\n <TokenIconWithNetworkLogo\r\n tokenInfo={toTokenInfo}\r\n customChainLogo={toChainInfo?.chain_icon}\r\n />\r\n <VStack gap={1} align={'start'} flex={1} whiteSpace={'nowrap'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(toAmount).shl(toTokenInfo.decimals)}\r\n decimals={toTokenInfo.decimals}\r\n variant={{\r\n base: 'heading12',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n suffix={toTokenInfo.symbol}\r\n lineClamp={1}\r\n />\r\n {isSameChainSwap ? (\r\n <>{renderFromTxHash()}</>\r\n ) : (\r\n <>\r\n {toTxHash ? (\r\n <Link\r\n href={getTxLink(\r\n toTxHash,\r\n toTokenInfo.chain_id === hyperliquidChainId\r\n ? 999\r\n : toTokenInfo.chain_id\r\n )}\r\n target=\"_blank\"\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(toTxHash)}{' '}\r\n <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n ) : (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'state-warning'}\r\n >\r\n • Receiving...\r\n </Text>\r\n )}\r\n </>\r\n )}\r\n </VStack>\r\n </HStack>\r\n </BoxWithBg>\r\n </HStack>\r\n </BoxWithBg>\r\n\r\n <BoxWithBg\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '12px',\r\n md: '16px'\r\n }}\r\n backgroundColor={theme.assistBgColor}\r\n >\r\n <VStack w={'100%'} fontSize={'xs'} gap={3}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={DateIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Date\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n {now}\r\n </Text>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={TimeIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Transfer Time\r\n </Text>\r\n </HStack>\r\n <Timer\r\n stop={isSameChainSwapSuccess || !!toTxHash || timeOut}\r\n onTick={handleTimerTick}\r\n />\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={MoneyIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Recipient\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n title={`${differentAddress}`}\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : address)}\r\n </Text>\r\n </HStack>\r\n {renderSoneium()}\r\n </VStack>\r\n </BoxWithBg>\r\n {renderButton()}\r\n </VStack>\r\n </>\r\n )\r\n}\r\n","'use client'\r\nimport type { WidgetConfig } from '../types'\r\nexport type WheelXWidgetProps = { config?: WidgetConfig }\r\nexport type { TxInfoProps, routesItem } from './TxInfo'\r\nexport type { RefetchQuoteParams } from './FormTop'\r\nimport { VStack, Image, Box } from '@chakra-ui/react'\r\n\r\nimport { FormBody } from './FormBody'\r\nimport { FormTop } from './FormTop'\r\nimport {\r\n useInitSwapAndBridgeState,\r\n useResetSwapAndBridgeState,\r\n useSwapAndBridgeContextStore,\r\n useTxStateContextStore\r\n} from './hooks'\r\nimport { TxState } from './TxState'\r\nimport { QuoteRequest, useGetQuote } from '../api'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { formatTokenAmount, slippageStore, isApproveValid } from '../utils'\r\nimport {\r\n createTraceId,\r\n // maskAddress,\r\n resolveQuoteErrorMeta,\r\n trackQuoteError,\r\n trackQuoteRequest,\r\n trackQuoteSuccess\r\n} from '../utils/quoteAnalytics'\r\n\r\nimport { TxInfoProps, routesItem } from './TxInfo'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { parseUnits } from 'viem'\r\nimport {\r\n calculateSlippage,\r\n extractVPathSegment,\r\n nullAddress,\r\n matchSlippagePolicy,\r\n getDefaultSlippage,\r\n getRefreshInterval,\r\n getStablecoinAdjustment,\r\n isETHtoETHBridge,\r\n ETH_TO_ETH_BRIDGE_SLIPPAGE,\r\n ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL\r\n} from './utils'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { RefetchQuoteParams } from './FormTop'\r\nimport { useRefreshLoading } from './hooks/useRefreshLoading'\r\n\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useChainsStore } from './hooks'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n\r\nimport { Text } from './ui'\r\nexport interface QuoteInfo {\r\n isFetching: boolean\r\n error: string | null\r\n data: `0x${string}` | null\r\n contractAddress: `0x${string}` | null\r\n info: TxInfoProps | null\r\n request_id?: string | null\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n backApprove?: boolean\r\n router_type?: string | null\r\n tx_value?: string | null\r\n points?: number | 0 | string\r\n quote_message?: string | null\r\n routes?: routesItem[]\r\n solanaTxMessage?: string\r\n solanaTxSender?: string\r\n}\r\n\r\nexport interface QuoteRequestWithToTokenDecimals extends QuoteRequest {\r\n toTokenDecimals: number\r\n isAutoRefetch?: boolean\r\n affiliation?: string | null\r\n}\r\n\r\nexport const initialQuoteInfo: QuoteInfo = {\r\n isFetching: false,\r\n error: null,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null,\r\n backApprove: false,\r\n router_type: null\r\n}\r\n\r\nexport const MainForm = ({ config }: WheelXWidgetProps) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTxHash, solanaFromTxHash } = useTxStateContextStore()\r\n useResetSwapAndBridgeState()\r\n useInitSwapAndBridgeState(config)\r\n\r\n const { startLoading } = useRefreshLoading()\r\n const {\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n setToAmount,\r\n setAutoSlippage,\r\n autoSlippage,\r\n slippage: customSlippage,\r\n resetAmounts\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const [quoteInfo, setQuoteInfo] = useState<QuoteInfo>(initialQuoteInfo)\r\n const [lockedRequestId, setLockedRequestId] = useState<string | null>(null)\r\n // const [currentRequestId, setCurrentRequestId] = useState<string | null>(null)\r\n const address = useEvmAddress()\r\n // When wallet is connected, use stored slippage or fallback to autoSlippage\r\n // When wallet is not connected, use customSlippage from zustand store if set, otherwise use autoSlippage\r\n const slippage = address\r\n ? slippageStore.get(address)\r\n ? slippageStore.get(address)\r\n : autoSlippage\r\n : customSlippage !== undefined\r\n ? { value: customSlippage }\r\n : autoSlippage\r\n\r\n const abortControllerRef = useRef(new AbortController())\r\n const [abortSignal, setAbortSignal] = useState<AbortSignal | undefined>(undefined)\r\n\r\n useEffect(() => {\r\n setAbortSignal(abortControllerRef.current.signal)\r\n }, [])\r\n\r\n const { mutateAsync } = useGetQuote(abortSignal)\r\n\r\n const cancelMutation = () => {\r\n abortControllerRef.current.abort()\r\n abortControllerRef.current = new AbortController()\r\n setAbortSignal(abortControllerRef.current.signal)\r\n // setQuoteInfo(initialQuoteInfo)\r\n }\r\n const [routerType, setRouterType] = useState<string | undefined | null>(null)\r\n const [points, setPoints] = useState<number | 0 | string>(0)\r\n const [refreshInterval, setRefreshInterval] = useState<number>(30)\r\n const refreshIntervalRef = useRef<number>(30)\r\n const timerRef = useRef<NodeJS.Timeout | null>(null)\r\n const isQuoteStoppedRef = useRef(false)\r\n const { differentAddress } = useDifferentAddressStore()\r\n const { chains, slippagePolicies } = useChainsStore()\r\n const prevAddressRef = useRef<string | undefined>(address)\r\n const prevSolanaAddressRef = useRef<string | undefined>(solanaWalletAddress)\r\n const isWalletChangingRef = useRef(false)\r\n\r\n const fromAddress = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }, [fromTokenInfo.isSolana, solanaWalletAddress, address])\r\n\r\n const toAddress = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }, [toTokenInfo.isSolana, solanaWalletAddress, differentAddress, address])\r\n\r\n useEffect(() => {\r\n if (\r\n timerRef.current &&\r\n (new Fraction(fromAmount).eq(0) || fromTxHash || solanaFromTxHash || address)\r\n ) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n return () => {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n }\r\n }, [fromAmount, fromTxHash, solanaFromTxHash, address])\r\n\r\n const clearLockedRequestId = () => {\r\n setLockedRequestId(null)\r\n }\r\n\r\n // Clear amounts and request_id when wallet address changes\r\n useEffect(() => {\r\n const prevAddress = prevAddressRef.current\r\n const prevSolanaAddress = prevSolanaAddressRef.current\r\n\r\n // Only clear if address actually changed (not on initial mount)\r\n if (\r\n (prevAddress !== undefined || prevSolanaAddress !== undefined) &&\r\n (address !== prevAddress || solanaWalletAddress !== prevSolanaAddress)\r\n ) {\r\n // Mark that wallet is changing to prevent getQuote from being called\r\n isWalletChangingRef.current = true\r\n\r\n // Cancel any ongoing quote requests\r\n cancelMutation()\r\n\r\n // Stop auto polling timer\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n\r\n // Clear amounts and request_id\r\n resetAmounts()\r\n clearLockedRequestId()\r\n\r\n // Reset quote info\r\n setQuoteInfo(initialQuoteInfo)\r\n }\r\n\r\n // Update refs for next comparison\r\n prevAddressRef.current = address\r\n prevSolanaAddressRef.current = solanaWalletAddress\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [address, solanaWalletAddress])\r\n\r\n const stopAutoRefetch = useCallback(() => {\r\n isQuoteStoppedRef.current = true\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n }, [])\r\n\r\n const lockRequestId = useCallback(() => {\r\n const currentRequestId = quoteInfo.request_id\r\n if (currentRequestId) {\r\n setLockedRequestId(currentRequestId)\r\n }\r\n }, [quoteInfo.request_id])\r\n\r\n // const getEffectiveRequestId = useCallback(() => {\r\n // return lockedRequestId || quoteInfo.request_id\r\n // }, [lockedRequestId, quoteInfo.request_id])\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const getQuoteRef = useRef<(...args: any[]) => Promise<any>>(null)\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const getQuote = useCallback<(params: QuoteRequestWithToTokenDecimals) => Promise<any>>(\r\n async ({\r\n toTokenDecimals,\r\n isAutoRefetch,\r\n ...params\r\n }) => {\r\n // For user-initiated requests (not auto-refetch), reset the wallet changing flag\r\n if (!isAutoRefetch) {\r\n isWalletChangingRef.current = false\r\n } else {\r\n // For auto-refetch, check if wallet is changing\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n }\r\n\r\n // TypeScript limitation with rest spread in intersection types\r\n const p = params as unknown as QuoteRequest & { affiliation?: string | null }\r\n const isAutoRefetchRequest = Boolean(isAutoRefetch)\r\n const traceId = createTraceId()\r\n const requestStartedAt = Date.now()\r\n\r\n try {\r\n if (!isAutoRefetch) {\r\n cancelMutation()\r\n }\r\n if (!parseFloat(p.amount)) return\r\n\r\n trackQuoteRequest({\r\n trace_id: traceId,\r\n from_chain: p.from_chain,\r\n to_chain: p.to_chain,\r\n from_token: `address:${String(p.from_token).toLowerCase()}`,\r\n to_token: `address:${String(p.to_token).toLowerCase()}`,\r\n from_address: `address:${String(p.from_address).toLowerCase()}`,\r\n to_address: `address:${String(p.to_address).toLowerCase()}`,\r\n amount: `amount:${String(p.amount)}`,\r\n slippage: p.slippage ?? 0,\r\n to_platform_id: p.to_platform_id,\r\n quote_only: true,\r\n affiliation: p.affiliation || '',\r\n is_auto_refetch: isAutoRefetchRequest\r\n })\r\n\r\n setQuoteInfo((prevQuoteInfo) => ({\r\n ...prevQuoteInfo,\r\n isFetching: true\r\n }))\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n // Reset quote stop flag on manual refetch (non-auto), so polling can resume\r\n if (!isAutoRefetchRequest) {\r\n isQuoteStoppedRef.current = false\r\n }\r\n\r\n const res = await mutateAsync({ ...p })\r\n // Check if wallet changed during the request\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (res) {\r\n const latencyMs = Date.now() - requestStartedAt\r\n const routeNames = Array.isArray(res.routes)\r\n ? res.routes.map((route: { name: string }) => route.name).join('|')\r\n : ''\r\n\r\n trackQuoteSuccess({\r\n trace_id: traceId,\r\n request_id: res.request_id || '',\r\n amount_out: `amount:${String(res.amount_out || '')}`,\r\n fee: res.fee || '',\r\n slippage: res.slippage ?? 0,\r\n min_receive: res.min_receive || '',\r\n estimated_time: res.estimated_time ?? 0,\r\n router_type: res.router_type || '',\r\n router: res.router || '',\r\n points: Number(res.points || 0),\r\n tx_to: res.tx?.to || '',\r\n tx_value: res.tx?.value || '',\r\n tx_chain_id: res.tx?.chainId || 0,\r\n tx_gas: Number(res.tx?.gas || 0),\r\n approve_token: res.approve?.token || '',\r\n approve_spender: res.approve?.spender || '',\r\n approve_amount: String(res.approve?.amount ?? ''),\r\n recipient: res.recipient || '',\r\n route_names: routeNames,\r\n route_count: Array.isArray(res.routes) ? res.routes.length : 0,\r\n price_impact_bridge_fee: res.price_impact?.bridge_fee || '',\r\n price_impact_swap_fee: res.price_impact?.swap_fee || '',\r\n price_impact_dst_gas_fee: res.price_impact?.dst_gas_fee || '',\r\n latency_ms: latencyMs,\r\n is_auto_refetch: isAutoRefetchRequest,\r\n amount: `amount:${String(p.amount)}`\r\n })\r\n\r\n const toAmount = formatTokenAmount({\r\n amount: new Fraction(res.amount_out),\r\n decimals: toTokenDecimals,\r\n useGroupSeparator: false\r\n })\r\n const contractAddress = res.tx?.to || null\r\n const data = res.tx?.data || null\r\n setToAmount(toAmount)\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: null,\r\n data,\r\n contractAddress,\r\n request_id: res.request_id,\r\n gas: res.tx?.gas || null,\r\n maxFeePerGas: res.tx?.maxFeePerGas || undefined,\r\n maxPriorityFeePerGas: res.tx?.maxFeePerGas || undefined,\r\n tx_value: res.tx?.value || null,\r\n router_type: res.router_type,\r\n routes: res.routes,\r\n solanaTxMessage: res.tx?.tx,\r\n solanaTxSender: res.tx?.sender,\r\n quote_message: res.quote_message,\r\n backApprove: isApproveValid(res.approve || null),\r\n info: {\r\n priceImpact: {\r\n bridgeFee: res.price_impact.bridge_fee,\r\n dstGasFee: res.price_impact.dst_gas_fee,\r\n swapFee: res.price_impact.swap_fee,\r\n before_discount_fee: res.price_impact.before_discount_fee,\r\n discount_percentage: res.price_impact.discount_percentage\r\n },\r\n points: res.points,\r\n slippage: res.slippage,\r\n minReceive: res.min_receive,\r\n estimatedTime: res.estimated_time,\r\n recipient: res.recipient,\r\n router: res.router,\r\n amountOut: res.amount_out,\r\n router_type: res.router_type\r\n }\r\n })\r\n setRouterType(res.router_type)\r\n setPoints(res.points)\r\n // Check again before starting polling\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (p.from_address !== nullAddress && !isQuoteStoppedRef.current) {\r\n timerRef.current = setTimeout(async () => {\r\n // Check if wallet changed before auto-refetch\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n await getQuoteRef.current!({\r\n ...p,\r\n toTokenDecimals,\r\n isAutoRefetch: true\r\n })\r\n }, refreshIntervalRef.current * 1000)\r\n }\r\n }\r\n } catch (error) {\r\n const { errorMessage, errorType, hasResponseBody, httpStatus } =\r\n resolveQuoteErrorMeta(error)\r\n\r\n const isBusinessError =\r\n errorType === 'business_error' ||\r\n errorMessage === 'No available router' ||\r\n errorMessage.includes('No available') ||\r\n errorMessage.includes('not available') ||\r\n errorMessage.includes('insufficient') ||\r\n errorMessage.includes('Invalid')\r\n\r\n trackQuoteError({\r\n trace_id: traceId,\r\n error_type: isBusinessError ? 'business_error' : errorType,\r\n http_status: httpStatus,\r\n error_message: errorMessage,\r\n has_response_body: hasResponseBody,\r\n latency_ms: Date.now() - requestStartedAt,\r\n is_auto_refetch: isAutoRefetchRequest,\r\n from_chain: p.from_chain,\r\n to_chain: p.to_chain,\r\n from_token: `address:${String(p.from_token).toLowerCase()}`,\r\n to_token: `address:${String(p.to_token).toLowerCase()}`,\r\n from_address: `address:${String(p.from_address).toLowerCase()}`,\r\n to_address: `address:${String(p.to_address).toLowerCase()}`,\r\n amount: `amount:${String(p.amount)}`\r\n })\r\n\r\n if (isBusinessError) {\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: null,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null,\r\n quote_message: errorMessage\r\n })\r\n } else {\r\n // Check if wallet changed before starting error polling\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (p.from_address !== nullAddress && !isQuoteStoppedRef.current) {\r\n setQuoteInfo((prev) => ({\r\n ...prev,\r\n isFetching: true,\r\n error: null,\r\n quote_message: null\r\n }))\r\n timerRef.current = setTimeout(async () => {\r\n // Check if wallet changed before auto-refetch\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n await getQuoteRef.current!({\r\n ...p,\r\n toTokenDecimals,\r\n isAutoRefetch: true\r\n })\r\n }, refreshIntervalRef.current * 1000)\r\n } else {\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: errorMessage,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null\r\n })\r\n }\r\n }\r\n }\r\n },\r\n [mutateAsync, setToAmount, startLoading]\r\n )\r\n\r\n useEffect(() => {\r\n getQuoteRef.current = getQuote\r\n }, [getQuote])\r\n\r\n const refetchQuote = useCallback(\r\n async ({ slippageValue, isAutoSlippage }: RefetchQuoteParams = {}) => {\r\n // Check if wallet is changing\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n if (!fromAmount) return\r\n const vCode = extractVPathSegment()\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress || nullAddress,\r\n to_address: toAddress || nullAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n affiliation: vCode,\r\n slippage: isAutoSlippage\r\n ? slippageValue && slippageValue !== '0'\r\n ? calculateSlippage(slippageValue)\r\n : slippageValue === '0'\r\n ? 0\r\n : undefined\r\n : calculateSlippage(slippageValue || slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n },\r\n [\r\n startLoading,\r\n fromAmount,\r\n fromAddress,\r\n getQuote,\r\n fromTokenInfo.chain_id,\r\n fromTokenInfo.address,\r\n fromTokenInfo.decimals,\r\n toTokenInfo.chain_id,\r\n toTokenInfo.address,\r\n toTokenInfo.decimals,\r\n toTokenInfo.platform_id,\r\n toAddress,\r\n slippage?.value\r\n ]\r\n )\r\n\r\n // useEffect(() => {\r\n // if (fromTokenInfo && toTokenInfo) {\r\n // if (fromTokenInfo.chain_id === toTokenInfo.chain_id) {\r\n // setAutoSlippage(swapAutoSlippage)\r\n // } else {\r\n // const fromChainInfo = chains?.find(\r\n // (chain) => chain.chain_id === fromTokenInfo.chain_id\r\n // )\r\n // const toChainInfo = chains?.find(\r\n // (chain) => chain.chain_id === toTokenInfo.chain_id\r\n // )\r\n // const from_eth = fromTokenInfo.address == fromChainInfo?.eth_token\r\n // const to_eth = toTokenInfo.address == toChainInfo?.eth_token\r\n // if (from_eth && to_eth) {\r\n // setAutoSlippage(bridgeAutoSlippage)\r\n // } else {\r\n // setAutoSlippage(crossChainSwapAutoSlippage)\r\n // }\r\n // }\r\n // }\r\n // }, [fromTokenInfo, toTokenInfo, chains, setAutoSlippage])\r\n\r\n // Sync refreshInterval ref so getQuote always uses the latest value\r\n useEffect(() => {\r\n refreshIntervalRef.current = refreshInterval\r\n }, [refreshInterval])\r\n\r\n useEffect(() => {\r\n if (fromTokenInfo && toTokenInfo) {\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n\r\n let newSlippage: number\r\n let newRefreshInterval: number\r\n\r\n // ① Highest priority: ETH-to-ETH cross-chain bridge\r\n if (isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains)) {\r\n newSlippage = ETH_TO_ETH_BRIDGE_SLIPPAGE\r\n newRefreshInterval = ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL\r\n }\r\n // ② Stablecoin pair\r\n else if (getStablecoinAdjustment(fromTokenInfo, toTokenInfo, isBridge)) {\r\n const stableAdjustment = getStablecoinAdjustment(\r\n fromTokenInfo,\r\n toTokenInfo,\r\n isBridge\r\n )!\r\n newSlippage = stableAdjustment.slippage\r\n newRefreshInterval = stableAdjustment.refreshInterval\r\n }\r\n // ③ fee_level policy matching\r\n else {\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n\r\n const matchedPolicy = matchSlippagePolicy(\r\n slippagePolicies,\r\n isBridge,\r\n fromFeeLevel,\r\n toFeeLevel\r\n )\r\n\r\n newSlippage = getDefaultSlippage(\r\n matchedPolicy,\r\n isBridge,\r\n isSameChain\r\n )\r\n\r\n newRefreshInterval = getRefreshInterval(matchedPolicy)\r\n }\r\n\r\n // Only update when slippage value actually changes\r\n if (autoSlippage !== newSlippage) {\r\n setAutoSlippage(newSlippage)\r\n }\r\n\r\n // Update refresh interval when it changes\r\n if (refreshInterval !== newRefreshInterval) {\r\n setRefreshInterval(newRefreshInterval)\r\n }\r\n }\r\n }, [\r\n fromTokenInfo,\r\n toTokenInfo,\r\n slippagePolicies,\r\n chains,\r\n setAutoSlippage,\r\n autoSlippage,\r\n refreshInterval\r\n ])\r\n\r\n useEffect(() => {\r\n async function _getQuote() {\r\n if (!fromAddress || !fromAmount) return\r\n const vCode = extractVPathSegment()\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n // Skip getQuote if wallet is changing (amounts were just cleared)\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n\r\n if (fromAddress && fromAmount) {\r\n _getQuote()\r\n }\r\n // do not pass fromAmount to deps, it will call getQuote every time fromAmount changes, which is not what we want\r\n // only call getQuote when address changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [fromAddress, toAddress])\r\n\r\n\r\n\r\n const renderContent = () => {\r\n if (fromTxHash || solanaFromTxHash) {\r\n return (\r\n <>\r\n <TxState\r\n resetQuoteInfo={() => setQuoteInfo(initialQuoteInfo)}\r\n request_id={lockedRequestId || quoteInfo?.request_id || ''}\r\n routerType={routerType}\r\n points={points}\r\n clearLockedRequestId={clearLockedRequestId}\r\n />\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <FormTop\r\n refetchQuote={refetchQuote}\r\n quoteInfo={quoteInfo}\r\n clearLockedRequestId={clearLockedRequestId}\r\n refreshInterval={refreshInterval}\r\n hideCountdown={isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains)}\r\n />\r\n <FormBody\r\n getQuote={getQuote}\r\n quoteInfo={quoteInfo}\r\n setQuoteInfo={setQuoteInfo}\r\n stopAutoRefetch={stopAutoRefetch}\r\n lockRequestId={lockRequestId}\r\n clearLockedRequestId={clearLockedRequestId}\r\n lockedRequestId={lockedRequestId}\r\n refetchQuote={refetchQuote}\r\n config={config}\r\n />\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <VStack\r\n w={'100%'}\r\n flexDirection={['column-reverse', 'column-reverse', 'row']}\r\n alignItems={['center', 'center', 'flex-start']}\r\n justifyContent={['center', 'center', 'center']}\r\n paddingTop={['0', '0', '0px']}\r\n >\r\n {/* KLine removed */}\r\n {/* Trending removed */}\r\n <Box w={['100%', 'auto']}>\r\n <VStack\r\n pos={'relative'}\r\n bg={theme.defaultBgColor|| 'white'}\r\n // boxShadow={'0px 12px 36px 0px #007B9D59'}\r\n border={`1px solid ${theme.defaultBorderColor}`}\r\n px={{\r\n base: 2.5,\r\n md: 4\r\n }}\r\n py={{\r\n base: 4\r\n }}\r\n borderRadius={{\r\n base: '16px',\r\n md: '24px'\r\n }}\r\n w={{\r\n base: '100%',\r\n sm: '430px',\r\n md: '480px'\r\n }}\r\n align={'start'}\r\n gap={4}\r\n id={'js_main_form'}\r\n >\r\n {renderContent()}\r\n {/* preload images */}\r\n <Image\r\n display={'none'}\r\n src={'https://wheelx.fi/images/wheel-sprites.png'}\r\n alt=\"wheel\"\r\n />\r\n <Image\r\n display={'none'}\r\n src={'https://wheelx.fi/images/success-sprites.png'}\r\n alt=\"success\"\r\n />\r\n </VStack>\r\n <Box\r\n marginTop={'20px'}\r\n w={{\r\n base: '100%',\r\n sm: '430px',\r\n md: '480px'\r\n }}\r\n >\r\n {/* Banner removed */}\r\n </Box>\r\n <Box marginTop={'30px'} fontSize={'14px'}>\r\n <a\r\n href={\r\n 'https://github.com/wheelx-fi/wheelx-contracts/blob/main/audits/ABDK_WheelX_WheelXContracts_v_1_0.pdf'\r\n }\r\n target=\"_blank\"\r\n >\r\n <Text\r\n color={'#5D6270'}\r\n display={'flex'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n >\r\n Audited By{' '}\r\n <Image\r\n display={'block'}\r\n width={'70px'}\r\n height={'28px'}\r\n marginLeft={'2px'}\r\n objectFit={'contain'}\r\n src={'https://wheelx.fi/images/adbk.png'}\r\n alt=\"\"\r\n ></Image>\r\n </Text>\r\n </a>\r\n </Box>\r\n </Box>\r\n </VStack>\r\n <Image\r\n display={'none'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n </>\r\n )\r\n}\r\n\r\nexport const WheelXWidget = MainForm\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/defaultTheme.ts","../src/theme/ThemeProvider.tsx","../src/api/consts.ts","../src/api/useChainsAndTokens.ts","../src/stores/chainsStore.ts","../src/stores/walletStore.ts","../src/stores/useSyncWalletConnectedStore.ts","../src/utils/wallet.ts","../src/core/SelectTokenModal/FavoritesContext.tsx","../src/core/SelectTokenModal/storageUtils.ts","../src/core/SelectTokenModal/TokenFavoritesContext.tsx","../src/providers/WheelXProvider.tsx","../src/api/useGetQuote.ts","../src/api/useTokenInfo.ts","../src/api/useUsdPrice.ts","../src/api/useHyperliquid.ts","../src/api/useIntervalGetOrderDetail.ts","../src/api/useTokenBalance.ts","../src/stores/differentAddress.ts","../src/core/hooks/useWalletConnectModal.ts","../src/utils/format.ts","../src/utils/address.ts","../src/utils/localstorage.ts","../src/utils/solana.ts","../src/utils/shortLinkRegex.ts","../src/utils/tokenSelectionCache.ts","../src/utils/quoteAnalytics.ts","../src/utils/index.ts","../src/core/ui/toaster.tsx","../src/core/hooks/useTxStateContextStore.ts","../src/consts/solana.ts","../src/core/hooks/useSwapAndBridgeContextStore.ts","../src/core/hooks/useGuardChain.ts","../src/core/hooks/useRefreshLoading.ts","../src/core/hooks/useTokenBalance.ts","../src/core/hooks/useSolanaTokenBalance.ts","../src/core/hooks/useSolanaSendTransaction.ts","../src/core/hooks/useRetryAbleTransactionReceipt.ts","../src/core/utils/consts.ts","../src/core/utils/slippage.ts","../src/core/utils/debounce.ts","../src/core/utils/defaultData.ts","../../../node_modules/@wagmi/core/src/utils/getAction.ts","../../../node_modules/@wagmi/core/src/version.ts","../../../node_modules/@wagmi/core/src/utils/getVersion.ts","../../../node_modules/@wagmi/core/src/errors/base.ts","../../../node_modules/@wagmi/core/src/errors/config.ts","../../../node_modules/@wagmi/core/src/actions/getConnectorClient.ts","../../../node_modules/@wagmi/core/src/actions/readContract.ts","../../../node_modules/@wagmi/core/src/actions/waitForTransactionReceipt.ts","../../../node_modules/@wagmi/core/src/actions/writeContract.ts","../src/core/utils/getErc20Approval.ts","../src/core/utils/index.ts","../src/core/icons/index.ts","../src/core/ui/componentRecipes/heading.tsx","../src/core/ui/tooltip.tsx","../src/core/ui/BoxWithBg.tsx","../src/core/ui/OptimizedImage.tsx","../src/core/utils/twoApprove.ts","../src/core/FormButton.tsx","../src/core/SelectTokenModal/utils.ts","../src/consts/mainnet.ts","../src/consts/monad.ts","../src/consts/stable.ts","../src/core/SelectTokenModal/hooks/useChainsAndTokensForSelect.ts","../src/core/SelectTokenModal/hooks/useUserHasSelectedFromNetwork.ts","../src/core/SelectTokenModal/hooks/useSearchTokens.ts","../src/core/SelectTokenModal/FavoriteButton.tsx","../src/core/SelectTokenModal/Network.tsx","../src/core/commons/utils.ts","../src/core/commons/TokenAmountHeading.tsx","../src/core/commons/TokenAmountText.tsx","../src/core/commons/TokenIconWithNetworkLogo.tsx","../src/core/SelectTokenModal/TokenFavoriteButton.tsx","../src/core/SelectTokenModal/SearchHistoryContext.tsx","../src/core/SelectTokenModal/TokenAndAddress.tsx","../src/core/SelectTokenModal/TokenList.tsx","../src/core/SelectTokenModal/SearchInput.tsx","../src/core/SelectTokenModal/AllChainsIcon.tsx","../src/core/SelectTokenModal/MobileContent.tsx","../src/core/SelectTokenModal/DesktopContent.tsx","../src/core/SelectTokenModal/index.tsx","../src/core/TokenInfoCom.tsx","../src/core/TokenSelectAndInput.tsx","../src/core/TipsContent.tsx","../src/core/TxInfo.tsx","../src/core/DifferentAddressDialog.tsx","../src/core/FormBody.tsx","../src/core/SlippageSettings.tsx","../src/core/FormTop.tsx","../src/core/Timer.tsx","../src/core/animations/Success.tsx","../src/core/animations/Wheel.tsx","../src/core/animations/Failure.tsx","../src/core/TxState.tsx","../src/core/MainForm.tsx"],"names":["EmotionThemeProvider","axios","create","useAccount","createContext","useEffect","jsx","useContext","useState","useRef","useCallback","base","soneium","http","React","useMemo","detail","message","useQuery","mainnet","polygon","arbitrum","optimism","SOLANA_MAINNET","isSolanaChain","initialState","logger","value","useTokenBalance","useRpcProviders","useDynamicContext","useUserWallets","PublicKey","Fraction","debounce","_BaseError_walk","connector","chainId","chain","viem_readContract","viem_waitForTransactionReceipt","viem_writeContract","erc20Abi","isStablecoin","Text","Tooltip","jsxs","ChakraTooltip","Box","ChakraImage","useReconnect","useConfig","getOrderedTokensAssets","balance","Icon","HStack","Image","findItemByName","findItemBySymbol","useBreakpointValue","address","symbol","tags","solanaWalletAddress","VStack","Fragment","Spinner","MobileContent","InputGroup","Input","Portal","memo","zeroAddress","DynamicWalletIcon","Button","isAddress","Dialog","chainsInfo","fromTokenInfo","toTokenInfo","parseUnits","refetchQuote","isSameChain","log","orderId","error"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { WidgetTheme } from '../types'\n\nexport const defaultTheme: WidgetTheme = {\n defaultTextColor: '#1A1D26',\n highlightTextColor: '#007B9D',\n weakTextColor: '#5D6270',\n defaultBgColor: '#FFFFFF',\n highlightBgColor: '#E6F7FB',\n assistBgColor: '#F5F6F8',\n defaultBorderColor: '#E2E4E8',\n highlightBorderColor: '#007B9D',\n highlightButtonBg: '#007B9D',\n highlightButtonText: '#FFFFFF',\n normalButtonBg: '#F5F6F8',\n normalButtonText: '#1A1D26',\n disabledButtonBg: '#E2E4E8',\n disabledButtonText: '#A0A4AE'\n}\n","import React, { createContext, useContext, useMemo } from 'react'\nimport { ThemeProvider as EmotionThemeProvider } from '@emotion/react'\nimport type { WidgetTheme } from '../types'\nimport { defaultTheme } from './defaultTheme'\n\ninterface WidgetThemeContextValue {\n theme: WidgetTheme\n}\n\nconst WidgetThemeContext = createContext<WidgetThemeContextValue>({\n theme: defaultTheme\n})\n\nexport const useWidgetTheme = () => useContext(WidgetThemeContext)\n\ninterface WidgetThemeProviderProps {\n theme?: Partial<WidgetTheme>\n children: React.ReactNode\n}\n\nexport const WidgetThemeProvider: React.FC<WidgetThemeProviderProps> = ({\n theme: customTheme,\n children\n}) => {\n const mergedTheme = useMemo<WidgetTheme>(() => {\n if (!customTheme) return defaultTheme\n return { ...defaultTheme, ...customTheme }\n }, [customTheme])\n\n const contextValue = useMemo(() => ({ theme: mergedTheme }), [mergedTheme])\n\n return (\n <WidgetThemeContext.Provider value={contextValue}>\n <EmotionThemeProvider theme={{ widgetTheme: mergedTheme }}>\n {children}\n </EmotionThemeProvider>\n </WidgetThemeContext.Provider>\n )\n}\n","/**\n * API base URL - hardcoded to production API, cannot be changed by users.\n */\nexport const BASE_API_URL = 'https://api.wheelx.fi'\n","import { useQuery } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios from 'axios'\n\nexport type Tag = 'pin' | 'top' | 'cert' | 'native'\nexport type FeeLevel = 'Group1' | 'Group2' | null\nexport interface TokenInfo {\n name: string\n address: `0x${string}`\n chain_id: number\n decimals: number\n symbol: string\n logo: string\n tags: Tag[]\n support_kline?: boolean\n token_type?: string\n categories?: string[]\n chain_icon?: string\n platform_id?: number\n platform_type?: string[]\n isSolana?: boolean\n fee_level?: FeeLevel\n}\nexport interface TokenInfoWithBalance extends TokenInfo {\n balance?: string\n usdPrice?: string\n}\n\nexport type ChainInfo = {\n name: string\n rpc_url: string\n rpc_fallback: string[]\n chain_icon: string\n chain_id: number\n eth_token: `0x${string}`\n support_kline: boolean\n is_popular: boolean\n outbound: boolean\n inbound: boolean\n is_testnet?: boolean\n platform_id?: number\n}\nexport interface Prediction {\n chains: ChainInfo[]\n tokens: TokenInfo[]\n}\nexport interface SlippagePolicy {\n bridge: boolean\n from_fee_level: FeeLevel\n to_fee_level: FeeLevel\n default_slippage: number\n min_slippage: number\n max_slippage: number\n refresh_interval: number\n notice_rounds?: number\n}\nexport interface ChainsAndTokens {\n chains: ChainInfo[]\n tokens: TokenInfo[]\n slippage_policies?: SlippagePolicy[]\n deposit_platforms: {\n prediction: Prediction\n }\n}\n\nexport async function getChainsAndTokens() {\n const url = `${BASE_API_URL}/v1/chain-info`\n\n const res = await axios.get<ChainsAndTokens>(url)\n\n return res.data\n}\n\nexport const useChainsAndTokens = (enabled = true) => {\n const result = useQuery({\n queryKey: ['chainsAndTokens'],\n queryFn: () => getChainsAndTokens(),\n enabled,\n staleTime: 30 * 1000,\n refetchOnWindowFocus: false\n })\n return result\n}\n\nexport function mergeTokensWithCompositeKey(\n arr1: TokenInfoWithBalance[],\n arr2: TokenInfoWithBalance[]\n): TokenInfoWithBalance[] {\n const generateCompositeKey = (token: TokenInfoWithBalance) =>\n `${token.address}_${token.chain_id}_${token.symbol}_${token.platform_id}`\n\n const tokenMap = new Map<string, TokenInfoWithBalance>()\n\n const processArray = (tokens: TokenInfoWithBalance[]) => {\n for (const token of tokens) {\n const compositeKey = generateCompositeKey(token)\n const existingToken = tokenMap.get(compositeKey)\n\n if (!existingToken) {\n tokenMap.set(compositeKey, token)\n } else {\n const existingHasTags = existingToken.tags?.length > 0\n const currentHasTags = token.tags?.length > 0\n if (currentHasTags && !existingHasTags) {\n tokenMap.set(compositeKey, {\n ...existingToken,\n ...token,\n platform_id: token.platform_id ?? existingToken.platform_id,\n balance: token.balance ?? existingToken.balance,\n usdPrice: token.usdPrice ?? existingToken.usdPrice\n })\n } else if (!currentHasTags && existingHasTags) {\n tokenMap.set(compositeKey, {\n ...existingToken,\n platform_id: existingToken.platform_id ?? token.platform_id,\n balance: existingToken.balance ?? token.balance,\n usdPrice: existingToken.usdPrice ?? token.usdPrice\n })\n } else {\n tokenMap.set(compositeKey, {\n ...existingToken,\n ...token,\n platform_id: token.platform_id ?? existingToken.platform_id\n })\n }\n }\n }\n }\n\n processArray(arr1)\n processArray(arr2)\n return Array.from(tokenMap.values())\n}\n","import { create } from 'zustand'\nimport { ChainInfo, SlippagePolicy, TokenInfo } from '../api/useChainsAndTokens'\n\ninterface ChainsStore {\n chains: ChainInfo[] | null\n setChains: (chains: ChainInfo[]) => void\n isSelectPredictionChain: boolean\n setIsSelectPredictionChain: (isSelectPredictionChain: boolean) => void\n slippagePolicies: SlippagePolicy[] | null\n setSlippagePolicies: (policies: SlippagePolicy[]) => void\n}\ninterface TokenStore {\n tokens: TokenInfo[] | null\n setTokens: (tokens: TokenInfo[]) => void\n}\nexport const useChainsStore = create<ChainsStore>((set) => ({\n chains: null,\n setChains: (chains: ChainInfo[]) => set({ chains }),\n isSelectPredictionChain: false,\n setIsSelectPredictionChain: (isSelectPredictionChain: boolean) =>\n set({ isSelectPredictionChain }),\n slippagePolicies: null,\n setSlippagePolicies: (policies: SlippagePolicy[]) =>\n set({ slippagePolicies: policies })\n}))\nexport const useTokensStore = create<TokenStore>((set) => ({\n tokens: null,\n setTokens: (tokens: TokenInfo[]) => set({ tokens })\n}))\n","import { create } from 'zustand'\n\ninterface WalletStore {\n isEthWalletConnected: boolean\n setIsEthWalletConnected: (isEthWalletConnected: boolean) => void\n isSolanaWalletConnected: boolean\n setIsSolanaWalletConnected: (isSolanaWalletConnected: boolean) => void\n totalConnectedWallets: number\n setTotalConnectedWallets: () => void\n totalWallets: number\n solanaWalletAddress: string | null\n setSolanaWalletAddress: (address: string | null) => void\n evmWalletAddress: string | null\n evmWalletConnectorId: string | null\n setEvmWalletInfo: (address: string | null, connectorId: string | null) => void\n isEvmWalletMetamask: boolean\n setIsEvmWalletMetamask: (isEvmWalletMetamask: boolean) => void\n}\n\nexport const useWalletConnectedStore = create<WalletStore>((set, get) => ({\n isEthWalletConnected: false,\n setIsEthWalletConnected: (isEthWalletConnected) => {\n const { isSolanaWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ isEthWalletConnected, totalConnectedWallets: count })\n },\n isSolanaWalletConnected: false,\n setIsSolanaWalletConnected: (isSolanaWalletConnected) => {\n const { isEthWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ isSolanaWalletConnected, totalConnectedWallets: count })\n },\n totalConnectedWallets: 0,\n setTotalConnectedWallets: () => {\n const { isEthWalletConnected, isSolanaWalletConnected } = get()\n const count =\n (isEthWalletConnected ? 1 : 0) + (isSolanaWalletConnected ? 1 : 0)\n set({ totalConnectedWallets: count })\n },\n totalWallets: 2,\n solanaWalletAddress: null,\n setSolanaWalletAddress: (address) => set({ solanaWalletAddress: address }),\n evmWalletAddress: null,\n evmWalletConnectorId: null,\n setEvmWalletInfo: (address, connectorId) =>\n set({ evmWalletAddress: address, evmWalletConnectorId: connectorId }),\n isEvmWalletMetamask: false,\n setIsEvmWalletMetamask: (isEvmWalletMetamask) => set({ isEvmWalletMetamask })\n}))\n","import { useEffect } from 'react'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { useAccount } from 'wagmi'\r\n\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\ntype DynamicWalletLike = {\r\n address?: string | null\r\n chain?: string | null\r\n connector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n walletConnector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n}\r\n\r\nconst getEvmConnectorId = (wallet?: DynamicWalletLike) => {\r\n if (!wallet) return null\r\n\r\n return (\r\n wallet.connector?.id ||\r\n wallet.walletConnector?.id ||\r\n wallet.connector?.key ||\r\n wallet.walletConnector?.key ||\r\n null\r\n )\r\n}\r\n\r\nexport const useSyncWalletConnectedStore = () => {\r\n const userWallets = useUserWallets()\r\n const { address: wagmiAddress, connector: wagmiConnector, isConnected } = useAccount()\r\n const {\r\n setSolanaWalletAddress,\r\n setIsSolanaWalletConnected,\r\n setEvmWalletInfo,\r\n setIsEthWalletConnected\r\n } = useWalletConnectedStore()\r\n\r\n useEffect(() => {\r\n const solanaWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as DynamicWalletLike | undefined\r\n\r\n const solanaAddress = solanaWallet?.address ?? null\r\n setSolanaWalletAddress(solanaAddress)\r\n setIsSolanaWalletConnected(Boolean(solanaAddress))\r\n\r\n const evmWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as DynamicWalletLike | undefined\r\n\r\n const evmAddress = (evmWallet?.address as `0x${string}` | null) ?? wagmiAddress ?? null\r\n // Priority: wagmiConnector.id (actual wagmi connector ID) > Dynamic Labs connector IDs\r\n // This is important because wagmi connector IDs differ from Dynamic Labs internal IDs\r\n // e.g., MetaMask: wagmi uses \"io.metamask\" but Dynamic uses \"metamask\"\r\n const evmConnectorId = wagmiConnector?.id ?? getEvmConnectorId(evmWallet) ?? null\r\n\r\n setEvmWalletInfo(evmAddress, evmConnectorId)\r\n setIsEthWalletConnected(Boolean(evmAddress || isConnected))\r\n }, [\r\n userWallets,\r\n wagmiAddress,\r\n wagmiConnector?.id,\r\n isConnected,\r\n setSolanaWalletAddress,\r\n setIsSolanaWalletConnected,\r\n setEvmWalletInfo,\r\n setIsEthWalletConnected\r\n ])\r\n}\r\n","import { useAccount } from 'wagmi'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\n/**\r\n * Hook to get EVM wallet address with fallback to saved address\r\n * This ensures that when a user first connects an EVM wallet (e.g., OKX),\r\n * then connects a Solana wallet (e.g., MetaMask), the EVM address remains\r\n * consistent with the first connected wallet.\r\n *\r\n * @returns The EVM wallet address (saved address or current wagmi address)\r\n */\r\nexport const useEvmAddress = () => {\r\n const { address } = useAccount()\r\n const { evmWalletAddress } = useWalletConnectedStore()\r\n\r\n // Priority: saved evmWalletAddress > current wagmi address\r\n return (evmWalletAddress as `0x${string}` | undefined) || address\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useRef,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\n\r\nexport interface FavoriteItem { networkId: number; networkName?: string; timestamp: number }\r\n\r\ninterface FavoritesContextType {\r\n favorites: FavoriteItem[]\r\n addFavorite: (networkId: number, networkName?: string) => void\r\n removeFavorite: (networkId: number) => void\r\n isFavorite: (networkId: number) => boolean\r\n clearFavorites: () => void\r\n isLoading: boolean; walletAddress: string | undefined\r\n}\r\n\r\nconst FavoritesContext = createContext<FavoritesContextType>({\r\n favorites: [], addFavorite: () => {}, removeFavorite: () => {},\r\n isFavorite: () => false, clearFavorites: () => {},\r\n isLoading: true, walletAddress: undefined\r\n})\r\n\r\nexport const FavoritesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const [favorites, setFavorites] = useState<FavoriteItem[]>([])\r\n const [isLoading, setIsLoading] = useState(true)\r\n const mountedRef = useRef(false)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-favorites-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n mountedRef.current = true\r\n // Use requestIdleCallback or microtask to defer completely past Hydrate\r\n const id = requestAnimationFrame(() => {\r\n if (!mountedRef.current) return\r\n if (!address) { setFavorites([]); setIsLoading(false); return }\r\n try {\r\n const k = getStorageKey(); if (!k) { setIsLoading(false); return }\r\n const s = localStorage.getItem(k); if (s) setFavorites(JSON.parse(s))\r\n } catch (_) { setFavorites([]) } finally { setIsLoading(false) }\r\n })\r\n return () => { mountedRef.current = false; cancelAnimationFrame(id) }\r\n }, [address, getStorageKey])\r\n\r\n const save = (n: FavoriteItem[]) => {\r\n if (typeof window === 'undefined') return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.setItem(k, JSON.stringify(n)); setFavorites(n) } catch (_) {}\r\n }\r\n\r\n const addFavorite = (nId: number, nName: string = 'Unknown Network') => {\r\n if (!address) return\r\n if (!favorites.find(f => f.networkId === nId))\r\n save([...favorites, { networkId: nId, networkName: nName, timestamp: Date.now() }])\r\n }\r\n\r\n const removeFavorite = (nId: number) => {\r\n if (!address) return\r\n save(favorites.filter(f => f.networkId !== nId))\r\n }\r\n\r\n const isFavorite = (nId: number): boolean => favorites.some(f => f.networkId === nId)\r\n\r\n const clearFavorites = () => {\r\n if (!address) return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.removeItem(k); setFavorites([]) } catch (_) {}\r\n }\r\n\r\n return (\r\n <FavoritesContext.Provider value={{ favorites, addFavorite, removeFavorite, isFavorite, clearFavorites, isLoading, walletAddress: address }}>\r\n {children}\r\n </FavoritesContext.Provider>\r\n )\r\n}\r\n\r\nexport const useFavoritesContext = () => {\r\n const c = useContext(FavoritesContext)\r\n if (c === undefined) throw new Error('useFavoritesContext must be used within a FavoritesProvider')\r\n return c\r\n}\r\n","/**\r\n * Check if the error is a storage quota exceeded error\r\n */\r\nexport function isQuotaExceededError(err: unknown): boolean {\r\n return (\r\n err instanceof DOMException &&\r\n (err.code === 22 ||\r\n err.code === 1014 ||\r\n err.name === 'QuotaExceededError' ||\r\n err.name === 'NS_ERROR_DOM_QUOTA_REACHED')\r\n )\r\n}\r\n\r\n/**\r\n * Check if localStorage is available (compatible with private browsing mode)\r\n */\r\nexport function isLocalStorageSupported(): boolean {\r\n if (typeof window === 'undefined' || !window.localStorage) {\r\n return false\r\n }\r\n\r\n const TEST_KEY = '__storage_test__'\r\n try {\r\n localStorage.setItem(TEST_KEY, 'test')\r\n localStorage.removeItem(TEST_KEY)\r\n return true\r\n } catch (e) {\r\n return isQuotaExceededError(e) // Private mode also triggers errors\r\n }\r\n}\r\n\r\n/**\r\n * Calculate the used space of localStorage (in character count)\r\n */\r\nexport function getLSUsedSpace(): number {\r\n if (typeof window === 'undefined' || !isLocalStorageSupported()) {\r\n return 0\r\n }\r\n\r\n return Object.keys(localStorage).reduce((total, curKey) => {\r\n if (!localStorage.hasOwnProperty(curKey)) {\r\n return total\r\n }\r\n // Sum of key and value character counts\r\n total += curKey.length + localStorage[curKey].length\r\n return total\r\n }, 0)\r\n}\r\n\r\n/**\r\n * Get detailed information about storage usage\r\n */\r\nexport interface StorageUsageInfo {\r\n used: number // Used bytes\r\n quota: number | null // Total quota (bytes), null means unknown\r\n percentage: number // Usage percentage\r\n usedFormatted: string // Formatted used size\r\n quotaFormatted: string // Formatted total size\r\n}\r\n\r\nexport function getStorageUsage(): StorageUsageInfo {\r\n if (typeof window === 'undefined') {\r\n return {\r\n used: 0,\r\n quota: null,\r\n percentage: 0,\r\n usedFormatted: '0 B',\r\n quotaFormatted: 'Unknown'\r\n }\r\n }\r\n\r\n try {\r\n // Method 1: Precisely calculate used space\r\n const usedBytes = getLSUsedSpace()\r\n\r\n // Assume standard limit of 5MB (5 * 1024 * 1024 bytes)\r\n const defaultQuota = 5 * 1024 * 1024\r\n const percentage = Math.round((usedBytes / defaultQuota) * 100)\r\n\r\n // Format bytes to human-readable format\r\n const formatBytes = (bytes: number): string => {\r\n if (bytes === 0) return '0 B'\r\n if (bytes < 1024) {\r\n return `${bytes} B`\r\n } else if (bytes < 1024 * 1024) {\r\n return `${(bytes / 1024).toFixed(2)} KB`\r\n } else {\r\n return `${(bytes / (1024 * 1024)).toFixed(2)} MB`\r\n }\r\n }\r\n\r\n return {\r\n used: usedBytes,\r\n quota: defaultQuota,\r\n percentage: Math.min(percentage, 100),\r\n usedFormatted: formatBytes(usedBytes),\r\n quotaFormatted: formatBytes(defaultQuota)\r\n }\r\n } catch (error) {\r\n console.error('Failed to get storage usage:', error)\r\n return {\r\n used: 0,\r\n quota: null,\r\n percentage: 0,\r\n usedFormatted: '0 B',\r\n quotaFormatted: 'Unknown'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check if there is enough storage space for new data\r\n */\r\nexport function checkStorageSpace(dataSize: number): {\r\n isSufficient: boolean\r\n message?: string\r\n usage?: StorageUsageInfo\r\n} {\r\n if (typeof window === 'undefined') {\r\n return {\r\n isSufficient: false,\r\n message: 'Non-browser environment'\r\n }\r\n }\r\n\r\n // Check if localStorage is available\r\n if (!isLocalStorageSupported()) {\r\n return {\r\n isSufficient: false,\r\n message: 'Browser does not support local storage or is in private mode'\r\n }\r\n }\r\n\r\n try {\r\n const usage = getStorageUsage()\r\n\r\n if (usage.quota !== null && usage.used + dataSize > usage.quota) {\r\n return {\r\n isSufficient: false,\r\n message: `Local storage space insufficient. Used: ${usage.usedFormatted}, Limit: ${usage.quotaFormatted}`,\r\n usage\r\n }\r\n }\r\n\r\n // If usage exceeds 80%, give warning but don't block operation\r\n if (usage.percentage > 80) {\r\n return {\r\n isSufficient: true,\r\n message: `Storage usage is high: ${usage.percentage}%`,\r\n usage\r\n }\r\n }\r\n\r\n return {\r\n isSufficient: true,\r\n usage\r\n }\r\n } catch (error) {\r\n console.error('Failed to check storage space:', error)\r\n return {\r\n isSufficient: false,\r\n message: 'Error occurred while checking storage space'\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Safely store data, will check if there is enough space\r\n */\r\nexport function safeSetItem(\r\n key: string,\r\n data: unknown\r\n): {\r\n success: boolean\r\n message?: string\r\n error?: Error\r\n} {\r\n try {\r\n // Estimate data size\r\n const dataStr = JSON.stringify(data)\r\n const dataSize = new TextEncoder().encode(dataStr).length\r\n\r\n // Check storage space\r\n const spaceCheck = checkStorageSpace(dataSize)\r\n if (!spaceCheck.isSufficient) {\r\n return {\r\n success: false,\r\n message: spaceCheck.message\r\n }\r\n }\r\n\r\n // Attempt to store\r\n localStorage.setItem(key, dataStr)\r\n return { success: true }\r\n } catch (error) {\r\n if (isQuotaExceededError(error)) {\r\n return {\r\n success: false,\r\n message:\r\n 'Local storage space is full, unable to save data. Please clear browser cache.',\r\n error: error as Error\r\n }\r\n }\r\n return {\r\n success: false,\r\n message: 'Unknown error occurred while storing data',\r\n error: error as Error\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Safely retrieve data, includes error handling\r\n */\r\nexport function safeGetItem<T>(key: string): {\r\n data: T | null\r\n success: boolean\r\n error?: Error\r\n} {\r\n try {\r\n if (!isLocalStorageSupported()) {\r\n throw new Error('localStorage not available')\r\n }\r\n\r\n const item = localStorage.getItem(key)\r\n if (!item) {\r\n return { data: null, success: true }\r\n }\r\n\r\n const data = JSON.parse(item) as T\r\n return { data, success: true }\r\n } catch (error) {\r\n return {\r\n data: null,\r\n success: false,\r\n error: error as Error\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all stored data (dangerous operation, use with caution)\r\n */\r\nexport function clearAllStorage(): { success: boolean; message?: string } {\r\n try {\r\n if (typeof window !== 'undefined' && window.localStorage) {\r\n localStorage.clear()\r\n return { success: true }\r\n }\r\n return { success: false, message: 'localStorage not available' }\r\n } catch (error) {\r\n return {\r\n success: false,\r\n message: `Failed to clear storage: ${error instanceof Error ? error.message : 'Unknown error'}`\r\n }\r\n }\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n useRef,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { isLocalStorageSupported } from './storageUtils'\r\nimport { Tag } from '../../api/useChainsAndTokens'\r\n\r\nexport interface TokenFavoriteItem {\r\n chain_id: number; address: `0x${string}`; symbol: string\r\n decimals: number; logo: string; name: string; timestamp?: number\r\n tags: Tag[]; categories?: string[]\r\n}\r\n\r\ninterface TokenFavoritesContextType {\r\n favorites: TokenFavoriteItem[]\r\n addFavorite: (chainId: number, tokenAddress: `0x${string}`, symbol: string, decimals: number, logo: string, name: string, tags: Tag[]) => void\r\n removeFavorite: (chainId: number, tokenAddress: string) => void\r\n isFavorite: (chainId: number, tokenAddress: string) => boolean\r\n clearFavorites: () => void\r\n isLoading: boolean; walletAddress: string | undefined; storageError: string | null\r\n}\r\n\r\nconst TokenFavoritesContext = createContext<TokenFavoritesContextType>({\r\n favorites: [], addFavorite: () => {}, removeFavorite: () => {},\r\n isFavorite: () => false, clearFavorites: () => {},\r\n isLoading: true, walletAddress: undefined, storageError: null\r\n})\r\n\r\nexport const TokenFavoritesProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const [favorites, setFavorites] = useState<TokenFavoriteItem[]>([])\r\n const [isLoading, setIsLoading] = useState(true)\r\n const [storageError, setStorageError] = useState<string | null>(null)\r\n const mountedRef = useRef(false)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-token-favorites-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n mountedRef.current = true\r\n const id = requestAnimationFrame(() => {\r\n if (!mountedRef.current) return\r\n if (!address) { setFavorites([]); setIsLoading(false); return }\r\n try {\r\n const k = getStorageKey(); if (!k) { setIsLoading(false); return }\r\n const s = localStorage.getItem(k); if (s) setFavorites(JSON.parse(s))\r\n } catch (_) { setFavorites([]) } finally { setIsLoading(false) }\r\n })\r\n return () => { mountedRef.current = false; cancelAnimationFrame(id) }\r\n }, [address, getStorageKey])\r\n\r\n const saveFavorites = (n: TokenFavoriteItem[]) => {\r\n if (typeof window === 'undefined') return\r\n if (!isLocalStorageSupported()) { setStorageError('no localStorage'); return }\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.setItem(k, JSON.stringify(n)); setFavorites(n) } catch (_) {}\r\n }\r\n\r\n const addFavorite = (ci: number, ta: `0x${string}`, s: string, d: number, l: string, n: string, tg: Tag[]) => {\r\n if (!address) return\r\n if (!favorites.find(f => f.chain_id === ci && f.address === ta))\r\n saveFavorites([...favorites, { chain_id: ci, address: ta, symbol: s, decimals: d, logo: l, name: n, tags: tg, timestamp: Date.now() }])\r\n }\r\n\r\n const removeFavorite = (ci: number, ta: string) => {\r\n if (!address) return\r\n setFavorites(p => { const u = p.filter(f => !(f.chain_id === ci && f.address === ta)); saveFavorites(u); return u })\r\n }\r\n\r\n const isFavorite = (ci: number, ta: string): boolean =>\r\n favorites.some(f => f.chain_id === ci && f.address === ta)\r\n\r\n const clearFavorites = () => {\r\n if (!address) return\r\n const k = getStorageKey(); if (!k) return\r\n try { localStorage.removeItem(k); setFavorites([]) } catch (_) {}\r\n }\r\n\r\n return (\r\n <TokenFavoritesContext.Provider value={{ favorites, addFavorite, removeFavorite, isFavorite, clearFavorites, isLoading, walletAddress: address, storageError }}>\r\n {children}\r\n </TokenFavoritesContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTokenFavoritesContext = () => {\r\n const c = useContext(TokenFavoritesContext)\r\n if (c === undefined) throw new Error('useTokenFavoritesContext must be used within TokenFavoritesProvider')\r\n return c\r\n}\r\n","'use client'\r\n\r\nimport React, { useMemo } from 'react'\r\nimport { Box, Text } from '@chakra-ui/react'\r\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\r\nimport { DynamicContextProvider } from '@dynamic-labs/sdk-react-core'\r\nimport type { EvmNetwork } from '@dynamic-labs/sdk-react-core'\r\nimport { EthereumWalletConnectors } from '@dynamic-labs/ethereum'\r\nimport { SolanaWalletConnectorsWithConfig } from '@dynamic-labs/solana'\r\nimport { DynamicWagmiConnector } from '@dynamic-labs/wagmi-connector'\r\nimport { WagmiProvider } from 'wagmi'\r\nimport { http, fallback, createConfig } from 'wagmi'\r\nimport { mainnet, base, soneium, polygon, arbitrum, optimism, sepolia, arbitrumSepolia, optimismSepolia, baseSepolia, unichainSepolia, arcTestnet } from 'wagmi/chains'\r\nimport { WidgetThemeProvider, useWidgetTheme } from '../theme/ThemeProvider'\r\nimport { useChainsAndTokens } from '../api/useChainsAndTokens'\r\nimport { useChainsStore } from '../stores/chainsStore'\r\nimport { useTokensStore } from '../stores/chainsStore'\r\nimport { useSyncWalletConnectedStore } from '../stores/useSyncWalletConnectedStore'\r\nimport { FavoritesProvider } from '../core/SelectTokenModal/FavoritesContext'\r\nimport { TokenFavoritesProvider } from '../core/SelectTokenModal/TokenFavoritesContext'\r\nimport type { WidgetConfig } from '../types'\r\nimport '../animations.css'\r\n\r\nconst supportedChains = [mainnet, base, soneium, polygon, arbitrum, optimism, sepolia, arbitrumSepolia, optimismSepolia, baseSepolia, unichainSepolia, arcTestnet]\r\n\r\n/**\r\n * CORS-friendly RPC URLs per chain ID.\r\n * These are used as fallback when the API hasn't returned chain RPC data yet,\r\n * or when a chain doesn't provide rpc_url in the API response.\r\n */\r\nconst CORS_FRIENDLY_RPC_MAP: Record<number, string> = {\r\n 1: 'https://eth-mainnet.public.blastapi.io',\r\n 8453: 'https://mainnet.base.org',\r\n 1868: 'https://soneium.rpc.scs.startale.com',\r\n 137: 'https://polygon-rpc.com',\r\n 42161: 'https://arbitrum.gateway.tenderly.co',\r\n 10: 'https://optimism.gateway.tenderly.co',\r\n // Testnet\r\n 11155111: 'https://ethereum-sepolia.publicnode.com',\r\n 421614: 'https://sepolia-rollup.arbitrum.io/rpc',\r\n 11155420: 'https://optimism-sepolia.gateway.tenderly.co',\r\n 84532: 'https://sepolia.base.org',\r\n 1301: 'https://sepolia.unichain.org',\r\n 5042002: 'https://rpc.testnet.arc.network'\r\n}\r\n\r\n/** Build stable transports using CORS-friendly RPCs only (like main site's defaultRpc) */\r\nfunction buildStableTransports() {\r\n const transports: Record<number, ReturnType<typeof fallback>> = {}\r\n\r\n supportedChains.forEach((chain) => {\r\n const fallbackRpc = CORS_FRIENDLY_RPC_MAP[chain.id]\r\n if (fallbackRpc) {\r\n transports[chain.id] = fallback([http(), http(fallbackRpc)])\r\n } else {\r\n transports[chain.id] = fallback([http(), http(chain.rpcUrls?.default?.http?.[0] || '')])\r\n }\r\n })\r\n\r\n return transports\r\n}\r\n\r\n/** Stable wagmi config - never changes, like main site's singleton config */\r\nfunction getWagmiConfig() {\r\n return createConfig({\r\n chains: supportedChains,\r\n transports: buildStableTransports(),\r\n multiInjectedProviderDiscovery: false,\r\n ssr: false\r\n })\r\n}\r\n\r\nfunction WalletConnectionStateSync() {\r\n useSyncWalletConnectedStore()\r\n return null\r\n}\r\n\r\nfunction LoadingSkeleton() {\r\n const { theme } = useWidgetTheme()\r\n return (\r\n <Box\r\n display=\"flex\"\r\n flexDirection=\"column\"\r\n alignItems=\"center\"\r\n justifyContent=\"center\"\r\n w={{ base: '100%', md: '480px' }}\r\n h={{ base: '400px', md: '440px' }}\r\n borderRadius=\"24px\"\r\n bg={theme.assistBgColor}\r\n gap={4}\r\n >\r\n <Box\r\n w=\"40px\"\r\n h=\"40px\"\r\n borderRadius=\"full\"\r\n bg={theme.defaultBorderColor}\r\n opacity={0.4}\r\n animation=\"pulse 1.5s ease-in-out infinite\"\r\n />\r\n <Text fontSize=\"14px\" color={theme.defaultTextColor}>\r\n Loading chains and tokens...\r\n </Text>\r\n </Box>\r\n )\r\n}\r\n\r\nfunction ChainsAndTokensLoader({ children, config }: { children: React.ReactNode; config?: WidgetConfig }) {\r\n const { data } = useChainsAndTokens(true)\r\n const { setChains, setSlippagePolicies } = useChainsStore()\r\n const { setTokens } = useTokensStore()\r\n const initialDataRef = React.useRef(false)\r\n\r\n const allChains = useMemo(() => {\r\n if (!data?.chains) return null\r\n const l = [...data.chains]\r\n if (data.deposit_platforms?.prediction?.chains) l.push(...data.deposit_platforms.prediction.chains)\r\n return l\r\n }, [data])\r\n\r\n const allTokens = useMemo(() => {\r\n if (!data?.tokens) return null\r\n const l = [...data.tokens]\r\n if (data.deposit_platforms?.prediction?.tokens) l.push(...data.deposit_platforms.prediction.tokens)\r\n return l\r\n }, [data])\r\n\r\n // Filter chains/tokens based on config\r\n const filteredChains = useMemo(() => {\r\n if (!allChains) return null\r\n const fromChains = config?.from?.chains\r\n const toChains = config?.to?.chains\r\n if (!fromChains?.length && !toChains?.length) return allChains\r\n\r\n const allowedSet = new Set<number>()\r\n fromChains?.forEach(id => allowedSet.add(id))\r\n toChains?.forEach(id => allowedSet.add(id))\r\n return allChains.filter(c => allowedSet.has(c.chain_id))\r\n }, [allChains, config?.from?.chains, config?.to?.chains])\r\n\r\n const filteredTokens = useMemo(() => {\r\n if (!allTokens) return null\r\n const fromTokenConfig = config?.from?.chainTokens\r\n const toTokenConfig = config?.to?.chainTokens\r\n if (!fromTokenConfig && !toTokenConfig) return allTokens\r\n\r\n // Build set of allowed {chainId, address} pairs\r\n const allowedSet = new Set<string>()\r\n const addTokens = (tc: Record<number, { chainId: number; address: string }[]> | undefined) => {\r\n if (!tc) return\r\n for (const entries of Object.values(tc)) {\r\n for (const t of entries) {\r\n allowedSet.add(`${t.chainId}:${t.address.toLowerCase()}`)\r\n }\r\n }\r\n }\r\n addTokens(fromTokenConfig)\r\n addTokens(toTokenConfig)\r\n\r\n if (allowedSet.size === 0) return allTokens\r\n return allTokens.filter(t => allowedSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }, [allTokens, config?.from?.chainTokens, config?.to?.chainTokens])\r\n\r\n React.useEffect(() => {\r\n if (filteredChains && !initialDataRef.current) { setChains(filteredChains); if (data?.slippage_policies) setSlippagePolicies(data.slippage_policies) }\r\n if (filteredTokens && !initialDataRef.current) setTokens(filteredTokens)\r\n if (filteredChains && filteredTokens) initialDataRef.current = true\r\n }, [filteredChains, filteredTokens, data, setChains, setTokens, setSlippagePolicies])\r\n\r\n const isReady = filteredChains && filteredTokens\r\n\r\n if (!isReady) {\r\n return (\r\n <LoadingSkeleton />\r\n )\r\n }\r\n\r\n return (\r\n <FavoritesProvider>\r\n <TokenFavoritesProvider>\r\n <WalletConnectionStateSync />\r\n {children}\r\n </TokenFavoritesProvider>\r\n </FavoritesProvider>\r\n )\r\n}\r\n\r\nconst DEFAULT_ENVIRONMENT_ID = 'f217660e-2cec-470b-a8f4-ac655b16f802'\r\n\r\nexport interface WheelXProviderProps { config?: WidgetConfig; children: React.ReactNode }\r\n\r\nconst solanaRpcUrl = 'https://mainnet.helius-rpc.com/?api-key=7337bed2-6c3a-472f-b06f-9b2be0e1392f'\r\n\r\nexport const WheelXProvider: React.FC<WheelXProviderProps> = ({ config, children }) => {\r\n const queryClient = useMemo(() => new QueryClient(), [])\r\n const evmNetworks = useMemo(() => supportedChains.map(chain => ({\r\n chainId: chain.id, networkId: chain.id, name: chain.name,\r\n nativeCurrency: { name: chain.nativeCurrency.name, symbol: chain.nativeCurrency.symbol, decimals: chain.nativeCurrency.decimals },\r\n rpcUrls: chain.rpcUrls?.default?.http?.length ? [...chain.rpcUrls.default.http] : [],\r\n blockExplorerUrls: chain.blockExplorers?.default?.url ? [chain.blockExplorers.default.url] : []\r\n } as unknown as EvmNetwork)), [])\r\n\r\n const solanaConnectors = useMemo(() => SolanaWalletConnectorsWithConfig({ customRpcUrls: { solana: [solanaRpcUrl] } }), [])\r\n\r\n const dynamicSettings = useMemo(() => ({\r\n environmentId: config?.dynamicEnvironmentId || DEFAULT_ENVIRONMENT_ID,\r\n walletConnectors: [EthereumWalletConnectors, solanaConnectors],\r\n enableConnectOnlyFallback: false,\r\n initialAuthenticationMode: 'connect-only' as const,\r\n mobileExperience: 'redirect' as const,\r\n deepLinkPreference: 'universal' as const,\r\n defaultNumberOfWalletsToShow: 25,\r\n overrides: { evmNetworks }\r\n }), [evmNetworks, solanaConnectors, config?.dynamicEnvironmentId])\r\n\r\n const wagmiConfig = useMemo(() => getWagmiConfig(), [])\r\n\r\n return (\r\n <WidgetThemeProvider theme={config?.theme}>\r\n <QueryClientProvider client={queryClient}>\r\n <DynamicContextProvider settings={dynamicSettings}>\r\n <WagmiProvider config={wagmiConfig}>\r\n <DynamicWagmiConnector>\r\n <ChainsAndTokensLoader config={config}>{children}</ChainsAndTokensLoader>\r\n </DynamicWagmiConnector>\r\n </WagmiProvider>\r\n </DynamicContextProvider>\r\n </QueryClientProvider>\r\n </WidgetThemeProvider>\r\n )\r\n}\r\n","import { useMutation } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios, { AxiosError } from 'axios'\n\nexport interface QuoteRequest {\n from_chain: number\n to_chain: number\n from_token: string\n to_token: string\n from_address: string\n to_address: string\n amount: string\n slippage?: number\n to_platform_id: number\n}\nexport interface routesItem {\n name: string\n logo: string\n}\ninterface QuoteResponse {\n request_id?: string\n amount_out: string\n approve?: {\n token: string\n spender: string\n amount: bigint\n } | null\n\n router_type?: string\n points: number | string\n\n estimated_time: number\n fee: string\n min_receive: string\n price_impact: {\n bridge_fee: string\n dst_gas_fee: string\n swap_fee: string\n before_discount_fee: string\n discount_percentage?: string\n }\n recipient: string\n router: string\n slippage: number\n quote_message: string | null\n tx: {\n chainId: number\n data: `0x${string}`\n to: `0x${string}`\n value: string\n gas?: bigint | null\n maxFeePerGas?: bigint | undefined\n maxPriorityFeePerGas?: bigint | undefined\n message?: string\n sender?: string\n tx?: string\n }\n routes?: routesItem[]\n}\n\ninterface ErrorResponse {\n detail: string\n}\n\ninterface ErrorResponse2 {\n detail: {\n msg: string\n }[]\n}\n\nexport type QuoteErrorType =\n | 'business_error'\n | 'http_error'\n | 'network_error'\n | 'timeout'\n | 'unknown_error'\n\nexport interface QuoteMutationError extends Error {\n httpStatus?: number\n hasResponseBody?: boolean\n errorType?: QuoteErrorType\n detail?: string\n code?: string\n}\n\nconst createQuoteMutationError = (\n message: string,\n extra: Partial<QuoteMutationError>\n): QuoteMutationError => {\n const quoteError = new Error(message) as QuoteMutationError\n quoteError.httpStatus = extra.httpStatus\n quoteError.hasResponseBody = extra.hasResponseBody\n quoteError.errorType = extra.errorType\n quoteError.detail = extra.detail\n quoteError.code = extra.code\n return quoteError\n}\n\nconst getErrorDetail = (data: unknown): string => {\n if (typeof data === 'string') {\n return data\n }\n\n if (data && typeof data === 'object') {\n const detail = (data as { detail?: unknown }).detail\n if (typeof detail === 'string') {\n return detail\n }\n }\n\n return ''\n}\n\nexport const useGetQuote = (signal?: AbortSignal) =>\n useMutation({\n mutationFn: async (requestBody: QuoteRequest) => {\n try {\n const res = await axios.post<QuoteResponse>(\n `${BASE_API_URL}/v1/quote`,\n {\n ...requestBody,\n quote_only: true\n },\n {\n headers: { 'Content-Type': 'application/json' },\n signal\n }\n )\n\n return res.data\n } catch (error) {\n if (error instanceof AxiosError) {\n if (error.code === 'ERR_CANCELED') {\n return null\n }\n\n if (error.response?.status === 400) {\n const errorData = error.response?.data as ErrorResponse\n throw createQuoteMutationError(errorData.detail, {\n httpStatus: 400,\n hasResponseBody: true,\n errorType: 'business_error',\n detail: errorData.detail,\n code: error.code\n })\n }\n\n if (error.response?.status === 422) {\n const errorData = error.response?.data as ErrorResponse2\n const detail = errorData.detail[0]?.msg || 'Validation failed'\n throw createQuoteMutationError(detail, {\n httpStatus: 422,\n hasResponseBody: true,\n errorType: 'business_error',\n detail,\n code: error.code\n })\n }\n\n if (!error.response) {\n const isTimeout =\n error.code === 'ECONNABORTED' ||\n error.message.toLowerCase().includes('timeout')\n const message = error.message || 'Network Error'\n throw createQuoteMutationError(message, {\n httpStatus: 0,\n hasResponseBody: false,\n errorType: isTimeout ? 'timeout' : 'network_error',\n detail: message,\n code: error.code\n })\n }\n\n const detail = getErrorDetail(error.response.data)\n const message = detail || error.message || 'Failed to get quote'\n throw createQuoteMutationError(message, {\n httpStatus: error.response.status,\n hasResponseBody: !!error.response.data,\n errorType: 'http_error',\n detail,\n code: error.code\n })\n }\n\n throw error\n }\n }\n })\n","import { useQuery } from '@tanstack/react-query'\nimport { BASE_API_URL } from './consts'\nimport axios from 'axios'\nimport { TokenInfo } from './useChainsAndTokens'\nimport { isAddress } from 'viem'\n\nexport async function getTokenInfo(value?: string, chainId?: number) {\n const url = `${BASE_API_URL}/v1/token-info`\n const res = await axios.get<TokenInfo[]>(url, {\n params: {\n address: value,\n chain_id: chainId,\n limit: 50\n }\n })\n\n return res.data\n}\n\nexport const useTokenInfo = ({\n value,\n chainId\n}: {\n value?: string\n chainId?: number\n}) => {\n const result = useQuery({\n queryKey: ['tokenInfo', value, chainId],\n queryFn: () => getTokenInfo(value, chainId),\n enabled: !!value && !!chainId\n })\n return result\n}\n\nexport const useTokenInfoBySymbol = ({\n value,\n chainId,\n hasSymbol\n}: {\n value?: string\n chainId?: number\n hasSymbol?: boolean\n}) => {\n const result = useQuery({\n queryKey: ['tokenInfoBySymbol', value, chainId],\n queryFn: () => getTokenInfo(value, chainId),\n enabled: !!value && isAddress(value) && hasSymbol\n })\n return result\n}\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport axios from 'axios'\r\n\r\nexport interface UsdPriceInfo {\r\n chainIndex: string\r\n tokenAddress: `0x${string}`\r\n time: string\r\n price: string\r\n}\r\n\r\ninterface UsdPriceRequest {\r\n chain_index: string\r\n token: `0x${string}`\r\n}\r\n\r\ntype UsdPriceResponse = UsdPriceInfo\r\n\r\nasync function getUsdPrice(\r\n tokens?: UsdPriceRequest[]\r\n): Promise<UsdPriceResponse[]> {\r\n const url = `${BASE_API_URL}/v1/token-price`\r\n const res = await axios.post<UsdPriceResponse[]>(url, tokens)\r\n return res.data\r\n}\r\n\r\nexport const useUsdPrice = (tokens?: UsdPriceRequest[]) => {\r\n return useQuery({\r\n queryKey: ['usdPrice', tokens],\r\n queryFn: () => getUsdPrice(tokens),\r\n enabled: !!tokens,\r\n retry: 4,\r\n retryDelay: 1_000\r\n })\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\n\r\nexport interface HyperliquidBalanceRes {\r\n code?: number\r\n message?: string | unknown\r\n withdrawable: string | null\r\n}\r\n\r\nexport const getHyperliquidBalance = async (\r\n address: `0x${string}` | undefined\r\n): Promise<HyperliquidBalanceRes> => {\r\n try {\r\n const response = await fetch('https://api.hyperliquid.xyz/info', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ type: 'clearinghouseState', user: address })\r\n })\r\n return await response.json()\r\n } catch (error: unknown) {\r\n return { code: 1, message: error, withdrawable: null }\r\n }\r\n}\r\n\r\nexport const useHyperliquidBalance = (\r\n address: `0x${string}` | undefined,\r\n enabled: boolean\r\n) => {\r\n return useQuery<HyperliquidBalanceRes, Error>({\r\n queryKey: ['getHyperliquidBalance', address],\r\n queryFn: () => getHyperliquidBalance(address),\r\n enabled: enabled && !!address,\r\n retry: 1,\r\n staleTime: 5 * 60 * 1000,\r\n refetchInterval: (query) => {\r\n if (query?.state?.data?.withdrawable === null) {\r\n return 1_000\r\n }\r\n return false\r\n }\r\n })\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport { TokenInfo } from './useChainsAndTokens'\r\nimport axios from 'axios'\r\nimport { useState, useEffect } from 'react'\r\n\r\nexport type OrderStatus = 'Open' | 'Filled' | 'Refund' | 'Failed'\r\n\r\nexport interface OrderDetail {\r\n data: string\r\n fill_block: number | null\r\n fill_timestamp: string | null\r\n fill_tx_hash: `0x${string}` | null\r\n from_amount: string\r\n from_chain: number\r\n from_token: string\r\n open_block: number\r\n open_timestamp: string\r\n open_tx_hash: string\r\n order_id: string\r\n status: OrderStatus\r\n to_address: string\r\n to_chain: number\r\n to_token: string\r\n to_amount: string\r\n amount_out?: string\r\n from_token_info: TokenInfo | null\r\n to_token_info: TokenInfo | null\r\n points: number\r\n reward_type: string\r\n reward_value: object\r\n to_platform_id: number\r\n}\r\n\r\nexport async function getOrderDetail(orderId: string) {\r\n const res = await axios.get<OrderDetail>(\r\n `${BASE_API_URL}/v1/order/${orderId}`\r\n )\r\n\r\n return res.data\r\n}\r\n\r\nexport const useIntervalGetOrderDetail = ({\r\n orderId,\r\n enabled = true\r\n}: {\r\n orderId: string | null\r\n enabled?: boolean\r\n}) => {\r\n const result = useQuery({\r\n queryKey: ['orderDetail', orderId],\r\n queryFn: () => getOrderDetail(orderId ?? ''),\r\n refetchInterval: 1_000,\r\n refetchOnMount: false,\r\n enabled: !!orderId && enabled\r\n })\r\n return result\r\n}\r\n\r\nexport const useIntervalGetOrderDetailPlus = ({\r\n orderId,\r\n enabled = true,\r\n maxRefetchAttempts = 50\r\n}: {\r\n orderId: string | null\r\n enabled?: boolean\r\n maxRefetchAttempts?: number\r\n}) => {\r\n const [attemptCount, setAttemptCount] = useState(0)\r\n const [shouldStop, setShouldStop] = useState(false)\r\n\r\n const queryEnabled =\r\n !!orderId && enabled && !shouldStop && attemptCount < maxRefetchAttempts\r\n\r\n const result = useQuery({\r\n queryKey: ['orderDetail', orderId],\r\n queryFn: () => getOrderDetail(orderId ?? ''),\r\n refetchInterval: () => {\r\n if (attemptCount >= maxRefetchAttempts || shouldStop) {\r\n return false\r\n }\r\n return 1000\r\n },\r\n refetchOnMount: false,\r\n retry: false,\r\n enabled: queryEnabled\r\n })\r\n\r\n useEffect(() => {\r\n if (result.isFetching) {\r\n setAttemptCount((prev) => prev + 1)\r\n }\r\n }, [result.isFetching])\r\n\r\n useEffect(() => {\r\n if (\r\n attemptCount >= maxRefetchAttempts &&\r\n result?.data?.status !== 'Filled'\r\n ) {\r\n setShouldStop(true)\r\n console.log(\r\n `The polling has reached its maximum number (${maxRefetchAttempts} times), but no result of the required field has been obtained`\r\n )\r\n }\r\n if (result?.data?.status === 'Filled') {\r\n setShouldStop(true)\r\n }\r\n }, [attemptCount, maxRefetchAttempts, result.data, orderId])\r\n\r\n return {\r\n ...result,\r\n attemptCount,\r\n shouldStop\r\n }\r\n}\r\n","import { useQuery } from '@tanstack/react-query'\r\nimport { BASE_API_URL } from './consts'\r\nimport axios from 'axios'\r\nimport { TokenInfoWithBalance } from './useChainsAndTokens'\r\n\r\nexport interface TokenBalance {\r\n balance: string\r\n chain_id: number\r\n platform_id?: number\r\n price: string\r\n token: TokenInfoWithBalance\r\n}\r\n\r\nexport async function getTokenBalance(address?: `0x${string}`) {\r\n const url = `${BASE_API_URL}/v1/token-balances`\r\n const res = await axios.get<TokenBalance[]>(url, { params: { address } })\r\n return res.data\r\n}\r\n\r\nexport async function getSolanaTokenBalance(address?: string) {\r\n if (!address) return []\r\n const url = `${BASE_API_URL}/v1/token-balances`\r\n const res = await axios.get<TokenBalance[]>(url, { params: { address } })\r\n return res.data\r\n}\r\n\r\nexport async function getAllTokenBalances(\r\n evmAddress?: string,\r\n solanaAddress?: string\r\n) {\r\n const [evmBalances, solanaBalances] = await Promise.all([\r\n evmAddress ? getTokenBalance(evmAddress as `0x${string}`) : Promise.resolve([]),\r\n solanaAddress ? getSolanaTokenBalance(solanaAddress) : Promise.resolve([])\r\n ])\r\n return [...(evmBalances || []), ...(solanaBalances || [])]\r\n}\r\n\r\nexport const useTokenBalance = (address?: `0x${string}`) => {\r\n return useQuery({\r\n queryKey: ['tokenBalance', address],\r\n queryFn: () => getTokenBalance(address),\r\n enabled: !!address\r\n })\r\n}\r\n\r\nexport const useAllTokenBalance = (\r\n evmAddress?: string,\r\n solanaAddress?: string\r\n) => {\r\n return useQuery({\r\n queryKey: ['allTokenBalance', evmAddress, solanaAddress],\r\n queryFn: () => getAllTokenBalances(evmAddress, solanaAddress),\r\n enabled: !!evmAddress || !!solanaAddress\r\n })\r\n}\r\n","import { create } from 'zustand'\n\ninterface DifferentAddressProp {\n differentAddress: `0x${string}` | undefined | string\n setDifferentAddress: (address: `0x${string}` | undefined | string) => void\n isDepositPlatformToken: boolean\n setIsDepositPlatformToken: (isDepositPlatformToken: boolean) => void\n}\nexport const useDifferentAddressStore = create<DifferentAddressProp>((set) => ({\n differentAddress: undefined,\n setDifferentAddress: (differentAddress) => set({ differentAddress }),\n isDepositPlatformToken: false,\n setIsDepositPlatformToken: (isDepositPlatformToken) =>\n set({ isDepositPlatformToken })\n}))\n","import { useCallback } from 'react'\nimport {\n useDynamicContext,\n useDynamicModals,\n useIsLoggedIn\n} from '@dynamic-labs/sdk-react-core'\n\nexport const useWalletConnectModal = () => {\n const { setShowAuthFlow } = useDynamicContext()\n const { setShowLinkNewWalletModal } = useDynamicModals()\n const isLoggedIn = useIsLoggedIn()\n\n const openModal = useCallback(() => {\n if (isLoggedIn) {\n setShowLinkNewWalletModal(true)\n return\n }\n\n setShowAuthFlow(true)\n }, [isLoggedIn, setShowAuthFlow, setShowLinkNewWalletModal])\n\n return {\n openModal,\n openConnectModal: openModal\n }\n}\n","import { Fraction, RoundingMode } from 'bi-fraction'\n\ninterface FormatTokenAmountProps {\n amount: Fraction\n decimals?: number\n fixedDecimals?: number\n useGroupSeparator?: boolean\n}\n\nexport const formatTokenAmount = ({\n amount,\n decimals = 18,\n fixedDecimals = 6,\n useGroupSeparator = true\n}: FormatTokenAmountProps) => {\n const isZeroDecimals = decimals === 0\n const _fixedDecimals = decimals > 6 ? fixedDecimals : 6\n\n const result = amount.shr(decimals).toFixed(isZeroDecimals ? 18 : decimals)\n\n const [integerPart, decimalPart] = result.split('.')\n\n if (!decimalPart || decimalPart === '0') {\n return integerPart\n }\n\n const firstNonZeroIndex = decimalPart.search(/[1-9]/)\n if (firstNonZeroIndex === -1) {\n return integerPart\n }\n\n if (firstNonZeroIndex >= _fixedDecimals) {\n const displayDecimals = firstNonZeroIndex + 3\n return useGroupSeparator\n ? amount\n .shr(decimals)\n .toFormat({\n decimalPlaces: displayDecimals,\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n : amount\n .shr(decimals)\n .toFixed(displayDecimals, {\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n }\n\n return useGroupSeparator\n ? amount\n .shr(decimals)\n .toFormat({\n decimalPlaces: _fixedDecimals,\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n : amount\n .shr(decimals)\n .toFixed(_fixedDecimals, {\n roundingMode: RoundingMode.ROUND_DOWN,\n trailingZeros: false\n })\n .replace(/\\.?0+$/, '')\n}\n\nexport const formatDate = (dateString: string) => {\n const dateTime = new Date(dateString)\n const month = String(dateTime.getUTCMonth() + 1).padStart(2, '0')\n const day = String(dateTime.getUTCDate()).padStart(2, '0')\n const year = dateTime.getUTCFullYear()\n const hours = String(dateTime.getUTCHours()).padStart(2, '0')\n const minutes = String(dateTime.getUTCMinutes()).padStart(2, '0')\n const seconds = String(dateTime.getUTCSeconds()).padStart(2, '0')\n\n const formattedTime = `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`\n\n return formattedTime\n}\n\nexport const dateFormatter = (isoString: string) => {\n const date = new Date(isoString)\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n const year = date.getFullYear()\n const hours = String(date.getHours()).padStart(2, '0')\n const minutes = String(date.getMinutes()).padStart(2, '0')\n const seconds = String(date.getSeconds()).padStart(2, '0')\n return `${month}/${day}/${year} ${hours}:${minutes}:${seconds}`\n}\n","export const sliceAddress = (\n address?: `0x${string}` | string,\n startLength: number = 4,\n endLength: number = 4\n) => {\n if (!address) return ''\n\n if (address.length <= startLength + endLength) {\n return address\n }\n\n return `${address.slice(0, startLength)}...${address.slice(-endLength)}`\n}\n","const SLIPPAGE = 'slippage'\n\nexport const getLocalStorage = (key: string): string => {\n if (typeof window !== 'undefined') {\n return window.localStorage.getItem(key) as string\n }\n return null as unknown as string\n}\n\nconst removeLocalStorage = (key: string): void => {\n if (typeof window !== 'undefined') {\n window.localStorage.removeItem(key)\n }\n}\n\nconst setLocalStorage = (key: string, value: string): void => {\n if (typeof window !== 'undefined') {\n window.localStorage.setItem(key, value)\n }\n}\n\ninterface StoreData {\n [key: string]: object\n}\n\nclass Store {\n private key: string\n\n constructor(storageKey: string = SLIPPAGE) {\n this.key = storageKey\n }\n\n private getStorageData(): StoreData {\n const data = getLocalStorage(this.key)\n return data ? JSON.parse(data) : {}\n }\n\n private setStorageData(data: StoreData): void {\n setLocalStorage(this.key, JSON.stringify(data))\n }\n\n public get(label: string): any | null {\n const data = this.getStorageData()\n return data[label] || null\n }\n\n public set(label: string, obj: object): void {\n const data = this.getStorageData()\n data[label] = {\n ...data[label],\n ...obj\n }\n this.setStorageData(data)\n }\n\n public remove(label: string): void {\n const data = this.getStorageData()\n delete data[label]\n this.setStorageData(data)\n }\n\n public clear(): void {\n removeLocalStorage(this.key)\n }\n}\n\nexport const slippageStore = new Store()\n\nexport default Store\n","import { TokenInfo } from '../api/useChainsAndTokens'\n\ntype SolanaWalletAdapterNetwork = 'mainnet' | 'devnet' | 'testnet'\nexport interface SolanaChainConfig {\n platform_id: number\n chain_id: number\n name: string\n network: string\n symbol: string\n decimals: number\n rpcUrl: string\n explorerUrl?: string\n walletAdapterNetwork: SolanaWalletAdapterNetwork\n}\n\nexport const SOLANA_MAINNET: SolanaChainConfig = {\n platform_id: 0,\n chain_id: 1151111081099710,\n name: 'Solana',\n network: 'mainnet',\n symbol: 'SOL',\n decimals: 9,\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n explorerUrl: 'https://solscan.io/',\n walletAdapterNetwork: 'mainnet'\n}\n\nexport const isSolanaChain = (chain_id?: number): boolean => {\n return chain_id === SOLANA_MAINNET.chain_id\n}\nexport const addIsSolanaProperty = (tokenInfo: TokenInfo): TokenInfo => {\n if (isSolanaChain(tokenInfo.chain_id)) {\n return { ...tokenInfo, isSolana: true }\n }\n return tokenInfo\n}\n","export const toRegex = /^\\/[a-zA-Z0-9]+$/\r\nexport const toAndTokenRegex = /^\\/(?!from)[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\nexport const fromRegex = /^\\/from&[a-zA-Z0-9-+]+$/\r\nexport const fromAndTokenRegex = /^\\/from&[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\nexport const fromAndToRegex = /^\\/[a-zA-Z0-9-+]+\\/[a-zA-Z0-9-+]+$/\r\nexport const fromAndTokenAndToAndTokenRegex =\r\n /^\\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+\\/[a-zA-Z0-9-+]+&[a-zA-Z0-9-+.₮Ï]+$/\r\n\r\nconst allRegexPatterns = [\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex\r\n]\r\nexport function matchesAnyPatternUsingArray(inputString: string): boolean {\r\n return allRegexPatterns.some((regex) => regex.test(inputString))\r\n}\r\n","import { TokenInfo } from '../api'\r\nimport Store from './localstorage'\r\n\r\nconst TOKEN_SELECTION = 'tokenSelection'\r\n\r\nexport interface CachedTokenSelection {\r\n from: TokenInfo\r\n to: TokenInfo\r\n}\r\n\r\nexport const tokenSelectionStore = new Store(TOKEN_SELECTION)\r\n","export type QuoteEventErrorType =\n | 'business_error'\n | 'http_error'\n | 'network_error'\n | 'timeout'\n | 'unknown_error'\n\ntype GtagEventParams = Record<string, string | number | boolean | null>\n\ninterface QuoteErrorLike {\n message?: string\n httpStatus?: number\n hasResponseBody?: boolean\n errorType?: QuoteEventErrorType\n}\n\nconst shouldEnableDebugMode = () => {\n if (typeof window === 'undefined') {\n return false\n }\n\n return new URLSearchParams(window.location.search).get('debugview') === '1'\n}\n\nconst trackEvent = (eventName: string, params: GtagEventParams) => {\n if (typeof window === 'undefined') {\n return\n }\n\n const eventParams = shouldEnableDebugMode()\n ? { ...params, debug_mode: true }\n : params\n window.gtag?.('event', eventName, eventParams)\n}\n\nexport const createTraceId = () => {\n if (\n typeof crypto !== 'undefined' &&\n typeof crypto.randomUUID === 'function'\n ) {\n return crypto.randomUUID()\n }\n\n return `trace_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`\n}\n\nexport const maskAddress = (address?: string, head = 6, tail = 4) => {\n if (!address) return ''\n if (address.length <= head + tail) return address\n return `${address.slice(0, head)}...${address.slice(-tail)}`\n}\n\nexport const trackQuoteRequest = (params: GtagEventParams) => {\n trackEvent('quote_request_start', params)\n}\n\nexport const trackQuoteSuccess = (params: GtagEventParams) => {\n trackEvent('quote_request_success', params)\n}\n\nexport const trackQuoteError = (params: GtagEventParams) => {\n trackEvent('quote_request_error', params)\n}\n\nexport const resolveQuoteErrorMeta = (\n error: unknown,\n fallbackMessage = 'Failed to get quote'\n) => {\n const unknownError = (error || {}) as QuoteErrorLike\n const errorMessage = unknownError.message || fallbackMessage\n\n let errorType = unknownError.errorType\n if (!errorType) {\n if (errorMessage.toLowerCase().includes('timeout')) {\n errorType = 'timeout'\n } else if (\n errorMessage === 'Network Error' ||\n (unknownError.httpStatus === undefined &&\n unknownError.hasResponseBody === false)\n ) {\n errorType = 'network_error'\n } else if (\n typeof unknownError.httpStatus === 'number' &&\n unknownError.httpStatus > 0\n ) {\n errorType = 'http_error'\n } else {\n errorType = 'unknown_error'\n }\n }\n\n return {\n errorType,\n httpStatus: unknownError.httpStatus ?? 0,\n hasResponseBody: unknownError.hasResponseBody ?? false,\n errorMessage\n }\n}\n","export { formatTokenAmount, formatDate, dateFormatter } from './format'\r\nexport { sliceAddress } from './address'\r\nexport { getLocalStorage, slippageStore } from './localstorage'\r\nexport { useEvmAddress } from './wallet'\r\nexport type { SolanaChainConfig } from './solana'\r\nexport {\r\n SOLANA_MAINNET,\r\n isSolanaChain,\r\n addIsSolanaProperty\r\n} from './solana'\r\nexport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from './shortLinkRegex'\r\nexport type { CachedTokenSelection } from './tokenSelectionCache'\r\nexport { tokenSelectionStore } from './tokenSelectionCache'\r\nexport type { QuoteEventErrorType } from './quoteAnalytics'\r\nexport {\r\n createTraceId,\r\n maskAddress,\r\n trackQuoteRequest,\r\n trackQuoteSuccess,\r\n trackQuoteError,\r\n resolveQuoteErrorMeta\r\n} from './quoteAnalytics'\r\n\r\n// Utilities ported from main site\r\nimport { mainnet, base, soneium, polygon, arbitrum, optimism } from 'wagmi/chains'\r\nimport { getLocalStorage } from './localstorage'\r\nimport { isSolanaChain, SOLANA_MAINNET } from './solana'\r\n\r\n/* eslint-disable @typescript-eslint/no-explicit-any */\r\n\r\n// --- Logger (with timestamp, warn/error always log, info/log/debug only when enabled) ---\r\nconst LOG_ENABLE = (typeof process !== 'undefined' && (process.env as any).NEXT_LOG_ENABLE) || undefined\r\n\r\nconst logWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n if (LOG_ENABLE === 'true') {\r\n const timestamp = new Date().toLocaleString()\r\n console.log(`[${timestamp}]`, message, ...optionalParams)\r\n }\r\n}\r\n\r\nconst infoWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n if (LOG_ENABLE === 'true') {\r\n const timestamp = new Date().toLocaleString()\r\n console.info(`[${timestamp}]`, message, ...optionalParams)\r\n }\r\n}\r\n\r\nconst warnWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.warn(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nconst errorWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.error(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nconst debugWithTimestamp = (message?: any, ...optionalParams: any[]) => {\r\n const timestamp = new Date().toLocaleString()\r\n console.debug(`[${timestamp}]`, message, ...optionalParams)\r\n}\r\n\r\nexport const logger = {\r\n log: logWithTimestamp,\r\n info: infoWithTimestamp,\r\n warn: warnWithTimestamp,\r\n error: errorWithTimestamp,\r\n debug: debugWithTimestamp\r\n}\r\n\r\n// --- enableTestnet (check localStorage) ---\r\nexport function enableTestnet() {\r\n const enableTestnet = getLocalStorage('enableTestnet') === 'true'\r\n if (enableTestnet) return true\r\n return (typeof process !== 'undefined' && (process.env as any).NEXT_PUBLIC_ENABLE_TESTNETS === 'true')\r\n}\r\n\r\n// --- getTxLink (generate blockchain explorer URL) ---\r\nconst wagmiSupportedChains = [mainnet, base, soneium, polygon, arbitrum, optimism]\r\n\r\nexport const getTxLink = (txHash: string, chainId: number) => {\r\n if (isSolanaChain(chainId)) {\r\n return `${SOLANA_MAINNET.explorerUrl}/tx/${txHash}`\r\n }\r\n const chain = wagmiSupportedChains.find((c) => c.id === chainId)\r\n const explorer = chain?.blockExplorers?.default?.url\r\n return explorer ? `${explorer}/tx/${txHash}` : ''\r\n}\r\n\r\n/* eslint-enable @typescript-eslint/no-explicit-any */\r\n\r\nexport const debounce = (fn: (...args: unknown[]) => void, ms: number) => {\r\n let timeoutId: ReturnType<typeof setTimeout>\r\n return (...args: unknown[]) => {\r\n clearTimeout(timeoutId)\r\n timeoutId = setTimeout(() => fn(...args), ms)\r\n }\r\n}\r\n\r\nexport const openFunctionHash =\r\n '0x3448bbc2203c608599ad448eeb1007cea04b788ac631f9f558e8dd01a3c27b3d'\r\n\r\nexport const uniqueArray = (array: string[]): string[] => {\r\n return array.filter(\r\n (item, index, self) => index === self.findIndex((t) => t === item)\r\n )\r\n}\r\n\r\nexport interface ApproveInfo {\r\n spender: string\r\n amount: bigint\r\n token: string\r\n}\r\n\r\nexport function isApproveValid(approve: ApproveInfo | null): boolean {\r\n return (\r\n approve != null &&\r\n typeof approve === 'object' &&\r\n Object.keys(approve).length > 0 &&\r\n approve.amount !== undefined &&\r\n approve.spender !== undefined &&\r\n approve.token !== undefined\r\n )\r\n}\r\n\r\nexport function isValidWeb3TokenAddress(address: string) {\r\n if (typeof address !== 'string' || !address.startsWith('0x')) {\r\n return false\r\n }\r\n const hexPart = address.substring(2)\r\n const hexRegex = /^[0-9A-Fa-f]{40}$/\r\n return hexRegex.test(hexPart)\r\n}\r\n","// Toast stubs for Chakra UI v3 (createStandaloneToast removed in v3)\r\nconst createToastStub = () => ({\r\n success: (_opts: any) => {},\r\n error: (_opts: any) => {},\r\n warning: (_opts: any) => {},\r\n info: (_opts: any) => {},\r\n loading: (_opts: any) => {},\r\n create: (_opts: any) => '',\r\n remove: (_id: string) => {},\r\n isActive: (_id: string) => false,\r\n closeAll: () => {},\r\n close: (_id: string) => {}\r\n})\r\n\r\nexport const toaster = createToastStub()\r\nexport const bottomToaster = createToastStub()\r\nexport const topToaster = createToastStub()\r\n","import { create } from 'zustand'\n\ninterface TxStateContextStore {\n fromTxHash: `0x${string}` | null\n toTxHash: `0x${string}` | null\n setFromTxHash: (fromTxHash: `0x${string}` | null) => void\n setToTxHash: (toTxHash: `0x${string}` | null) => void\n resetTxState: () => void\n startTrading: boolean\n setStartTrading: (startTrading: boolean) => void\n userCancelsTransaction: boolean\n setUserCancelsTransaction: (userCancelsTransaction: boolean) => void\n fromValue?: string | null\n setFromValue?: (fromValue: string | null) => void\n tryAgain?: boolean\n setTryAgain: (tryAgain: boolean) => void\n solanaFromTxHash: string | null\n setSolanaFromTxHash: (hash: string | null) => void\n isSolanaTransaction: boolean\n setIsSolanaTransaction: (isSolana: boolean) => void\n}\n\nconst initialState = {\n fromTxHash: null,\n toTxHash: null,\n startTrading: false,\n solanaFromTxHash: null,\n isSolanaTransaction: false\n}\n\nexport const useTxStateContextStore = create<TxStateContextStore>((set) => ({\n ...initialState,\n setFromTxHash: (fromTxHash) => set({ fromTxHash }),\n setToTxHash: (toTxHash) => set({ toTxHash }),\n resetTxState: () => set(initialState),\n setStartTrading: (startTrading) => set({ startTrading }),\n userCancelsTransaction: false,\n setUserCancelsTransaction: (userCancelsTransaction) =>\n set({ userCancelsTransaction }),\n setFromValue: (fromValue) => set({ fromValue }),\n setTryAgain: (tryAgain) => set({ tryAgain }),\n setSolanaFromTxHash: (solanaFromTxHash) => set({ solanaFromTxHash }),\n setIsSolanaTransaction: (isSolanaTransaction) => set({ isSolanaTransaction })\n}))\n","import { TokenInfo } from '../api'\r\n\r\ntype SolanaWalletAdapterNetwork = 'mainnet' | 'devnet' | 'testnet'\r\nexport interface SolanaChainConfig {\r\n platform_id: number\r\n chain_id: number\r\n name: string\r\n network: string // (mainnet/devnet/testnet)\r\n symbol: string // (SOL)\r\n decimals: number // (9)\r\n rpcUrl: string // RPC\r\n explorerUrl?: string // URL\r\n walletAdapterNetwork: SolanaWalletAdapterNetwork // wallet-adapter\r\n}\r\n\r\n/**\r\n * Solana mainnet\r\n */\r\nexport const SOLANA_MAINNET: SolanaChainConfig = {\r\n platform_id: 0,\r\n chain_id: 1151111081099710,\r\n name: 'Solana',\r\n network: 'mainnet',\r\n symbol: 'SOL',\r\n decimals: 9,\r\n rpcUrl: 'https://api.mainnet-beta.solana.com',\r\n explorerUrl: 'https://solscan.io/',\r\n walletAdapterNetwork: 'mainnet'\r\n}\r\n\r\nexport const isSolanaChain = (chain_id?: number): boolean => {\r\n return chain_id === SOLANA_MAINNET.chain_id\r\n}\r\nexport const addIsSolanaProperty = (tokenInfo: TokenInfo): TokenInfo => {\r\n if (isSolanaChain(tokenInfo.chain_id)) {\r\n return { ...tokenInfo, isSolana: true }\r\n }\r\n return tokenInfo\r\n}\r\n","import { useEffect, useMemo, useRef, useState } from 'react'\r\nimport { zeroAddress } from 'viem'\r\nimport { soneium, base } from 'viem/chains'\r\nimport { create } from 'zustand'\r\n\r\nimport { TokenInfo, useTokenInfoBySymbol } from '../../api'\r\nimport { useTxStateContextStore } from './useTxStateContextStore'\r\nimport { isValidWeb3TokenAddress } from '../../utils'\r\nimport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from '../../utils/shortLinkRegex'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useTokensStore } from '../../stores/chainsStore'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\n\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport {\r\n tokenSelectionStore,\r\n CachedTokenSelection\r\n} from '../../utils/tokenSelectionCache'\r\nimport { WidgetConfig } from '../../types'\r\n\r\n// ChainInfo short type for name matching\r\ninterface ChainInfoShort {\r\n name: string\r\n chain_id: number\r\n}\r\n\r\nfunction findItemByName(\r\n arr: Array<ChainInfoShort>,\r\n targetName: string\r\n): [boolean, ChainInfoShort | undefined] {\r\n const foundItem = arr.find(\r\n (item) =>\r\n item.name.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase()\r\n )\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nfunction findItemBySymbol(\r\n arr: Array<TokenInfo>,\r\n targetName: string,\r\n chainId: number | undefined,\r\n platform_id?: number | undefined\r\n): [boolean, TokenInfo | undefined] {\r\n const foundItem = arr.find((item) => {\r\n if (platform_id && platform_id > 0) {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.platform_id === platform_id\r\n )\r\n } else {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.chain_id === chainId\r\n )\r\n }\r\n })\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nexport interface SwapState {\r\n fromTokenInfo: TokenInfo\r\n toTokenInfo: TokenInfo\r\n fromAmount: string\r\n toAmount: string\r\n slippage?: string\r\n fromAmountToUsd?: string | null\r\n toAmountToUsd?: string | null\r\n isShortLink?: boolean\r\n shortLink?: string\r\n transactionType?: string\r\n autoSlippage?: number | undefined\r\n tradeType?: string | null\r\n}\r\n\r\ninterface SwapAndBridgeContextStore extends SwapState {\r\n setFromTokenInfo: (tokenInfo: TokenInfo) => void\r\n setToTokenInfo: (tokenInfo: TokenInfo) => void\r\n setFromAmount: (amount: string) => void\r\n setToAmount: (amount: string) => void\r\n switchTokens: () => void\r\n resetState: () => void\r\n setAmounts: (fromAmount: string, toAmount: string) => void\r\n resetAmounts: () => void\r\n setSlippage: (slippage?: string) => void\r\n setFromAmountToUsd: (value: string | null) => void\r\n setToAmountToUsd: (value: string | null) => void\r\n setIsShortLink: (value: boolean) => void\r\n setShortLink: (value: string) => void\r\n setTransactionType: (value: string) => void\r\n setAutoSlippage: (value: number | undefined) => void\r\n}\r\n\r\nconst DEFAULT_FROM_TOKEN: TokenInfo = {\r\n name: 'Base',\r\n address: zeroAddress,\r\n chain_id: base.id,\r\n decimals: 18,\r\n symbol: 'ETH',\r\n logo: 'https://wheelx.fi/images/tokens/eth.png',\r\n tags: ['pin']\r\n}\r\n\r\nconst DEFAULT_TO_TOKEN: TokenInfo = {\r\n name: 'ETH',\r\n address: zeroAddress,\r\n chain_id: soneium.id,\r\n decimals: 18,\r\n symbol: 'ETH',\r\n logo: 'https://wheelx.fi/images/tokens/eth.png',\r\n tags: ['pin']\r\n}\r\n\r\nconst initialState: SwapState = {\r\n fromTokenInfo: DEFAULT_FROM_TOKEN,\r\n toTokenInfo: DEFAULT_TO_TOKEN,\r\n fromAmount: '',\r\n toAmount: '',\r\n fromAmountToUsd: '',\r\n toAmountToUsd: '',\r\n transactionType: '',\r\n autoSlippage: undefined\r\n}\r\n\r\nexport const useSwapAndBridgeContextStore = create<SwapAndBridgeContextStore>()(\r\n (set, get) => ({\r\n ...initialState,\r\n\r\n setFromTokenInfo: (tokenInfo: TokenInfo) => {\r\n const { toTokenInfo, fromTokenInfo } = get()\r\n useDifferentAddressStore.getState().setDifferentAddress(undefined)\r\n const enhancedTokenInfo = {\r\n ...tokenInfo,\r\n isSolana: isSolanaChain(tokenInfo.chain_id)\r\n }\r\n if (\r\n tokenInfo.address === toTokenInfo.address &&\r\n tokenInfo.chain_id === toTokenInfo.chain_id\r\n ) {\r\n set({\r\n fromTokenInfo: enhancedTokenInfo,\r\n toTokenInfo: fromTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n } else {\r\n set({\r\n fromTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n }\r\n },\r\n\r\n setToTokenInfo: (tokenInfo: TokenInfo) => {\r\n const { fromTokenInfo, toTokenInfo } = get()\r\n useDifferentAddressStore.getState().setDifferentAddress(undefined)\r\n const enhancedTokenInfo = {\r\n ...tokenInfo,\r\n isSolana: isSolanaChain(tokenInfo.chain_id)\r\n }\r\n if (\r\n tokenInfo.address === fromTokenInfo.address &&\r\n tokenInfo.chain_id === fromTokenInfo.chain_id\r\n ) {\r\n set({\r\n fromTokenInfo: toTokenInfo,\r\n toTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n } else {\r\n set({\r\n toTokenInfo: enhancedTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n }\r\n },\r\n\r\n setFromAmount: (fromAmount: string) => set({ fromAmount }),\r\n setToAmount: (toAmount: string) => set({ toAmount }),\r\n switchTokens: () => {\r\n const { fromTokenInfo, toTokenInfo } = get()\r\n set({\r\n fromTokenInfo: toTokenInfo,\r\n toTokenInfo: fromTokenInfo,\r\n fromAmount: '',\r\n toAmount: ''\r\n })\r\n },\r\n resetState: () => set(initialState),\r\n setAmounts: (fromAmount: string, toAmount: string) =>\r\n set({ fromAmount, toAmount }),\r\n resetAmounts: () => set({ fromAmount: '', toAmount: '' }),\r\n setSlippage: (slippage) => set({ slippage }),\r\n setFromAmountToUsd: (fromAmountToUsd) => set({ fromAmountToUsd }),\r\n setToAmountToUsd: (toAmountToUsd) => set({ toAmountToUsd }),\r\n setIsShortLink: (isShortLink) => set({ isShortLink }),\r\n setShortLink: (shortLink) => set({ shortLink }),\r\n setTransactionType: (transactionType) => set({ transactionType }),\r\n setAutoSlippage: (autoSlippage) => set({ autoSlippage })\r\n })\r\n)\r\n\r\nexport const useInitSwapAndBridgeState = (config?: WidgetConfig) => {\r\n const {\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setIsShortLink,\r\n setShortLink,\r\n setFromAmount,\r\n setToAmount\r\n } = useSwapAndBridgeContextStore()\r\n const { setDifferentAddress } = useDifferentAddressStore()\r\n const { tokens } = useTokensStore()\r\n const { chains } = useChainsStore()\r\n const address = useEvmAddress()\r\n const { resetTxState } = useTxStateContextStore()\r\n const hasInitialized = useRef(false)\r\n\r\n const currentPathname = useMemo(() => {\r\n if (typeof window === 'undefined') return '/'\r\n return window.location.pathname\r\n }, [])\r\n\r\n const pathname = currentPathname\r\n\r\n useEffect(() => {\r\n if (hasInitialized.current) return\r\n // Wait until chains and tokens are loaded from API before applying defaults\r\n if (!chains || !tokens) return\r\n\r\n // Apply config defaults if provided\r\n if (config?.from?.defaultChainId && chains && tokens) {\r\n const fromChain = chains.find((c) => c.chain_id === config.from?.defaultChainId)\r\n if (fromChain) {\r\n let defaultToken: TokenInfo | undefined\r\n if (config.from?.defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === config.from?.defaultToken?.chainId &&\r\n t.address.toLowerCase() === config.from?.defaultToken?.address.toLowerCase()\r\n )\r\n }\r\n if (!defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === fromChain.chain_id &&\r\n t.address.toLowerCase() === fromChain.eth_token.toLowerCase()\r\n )\r\n }\r\n if (defaultToken) {\r\n setFromTokenInfo(defaultToken)\r\n }\r\n }\r\n }\r\n\r\n if (config?.to?.defaultChainId && chains && tokens) {\r\n const toChain = chains.find((c) => c.chain_id === config.to?.defaultChainId)\r\n if (toChain) {\r\n let defaultToken: TokenInfo | undefined\r\n if (config.to?.defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === config.to?.defaultToken?.chainId &&\r\n t.address.toLowerCase() === config.to?.defaultToken?.address.toLowerCase()\r\n )\r\n }\r\n if (!defaultToken) {\r\n defaultToken = tokens.find(\r\n (t) =>\r\n t.chain_id === toChain.chain_id &&\r\n t.address.toLowerCase() === toChain.eth_token.toLowerCase()\r\n )\r\n }\r\n if (defaultToken) {\r\n setToTokenInfo(defaultToken)\r\n }\r\n }\r\n }\r\n\r\n // Parse short link from pathname\r\n if (matchesAnyPatternUsingArray(pathname) && chains && tokens) {\r\n setIsShortLink(true)\r\n setShortLink(pathname)\r\n try {\r\n const decodedPath = decodeURIComponent(pathname)\r\n // Match /fromChain&fromToken/toChain&toToken\r\n const match = decodedPath.match(\r\n /^\\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)\\/([a-zA-Z0-9-+]+)&([a-zA-Z0-9-+.₮Ï]+)$/\r\n )\r\n if (match) {\r\n const [, fromChainName, fromTokenSymbol, toChainName, toTokenSymbol] = match\r\n const [, foundFromChain] = findItemByName(\r\n chains as unknown as ChainInfoShort[],\r\n fromChainName\r\n )\r\n const [, foundToChain] = findItemByName(\r\n chains as unknown as ChainInfoShort[],\r\n toChainName\r\n )\r\n if (foundFromChain && foundToChain && tokens) {\r\n const [, foundFromToken] = findItemBySymbol(\r\n tokens,\r\n fromTokenSymbol,\r\n foundFromChain.chain_id\r\n )\r\n const [, foundToToken] = findItemBySymbol(\r\n tokens,\r\n toTokenSymbol,\r\n foundToChain.chain_id\r\n )\r\n if (foundFromToken && foundToToken) {\r\n setFromTokenInfo(foundFromToken)\r\n setToTokenInfo(foundToToken)\r\n }\r\n }\r\n }\r\n } catch {\r\n // ignore parse errors\r\n }\r\n }\r\n\r\n // Restore from cache\r\n const cached = tokenSelectionStore.get(address || 'default') as\r\n | CachedTokenSelection\r\n | undefined\r\n if (cached?.from && cached?.to && !matchesAnyPatternUsingArray(pathname)) {\r\n setFromTokenInfo(cached.from)\r\n setToTokenInfo(cached.to)\r\n }\r\n\r\n hasInitialized.current = true\r\n\r\n return () => {\r\n setFromAmount('')\r\n setToAmount('')\r\n setDifferentAddress(undefined)\r\n resetTxState()\r\n }\r\n }, [\r\n pathname,\r\n address,\r\n chains,\r\n tokens,\r\n config,\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setIsShortLink,\r\n setShortLink,\r\n setFromAmount,\r\n setToAmount,\r\n setDifferentAddress,\r\n resetTxState\r\n ])\r\n}\r\n\r\nexport const useResetSwapAndBridgeState = () => {\r\n const {\r\n resetState\r\n } = useSwapAndBridgeContextStore()\r\n const { resetTxState } = useTxStateContextStore()\r\n const { setDifferentAddress } = useDifferentAddressStore()\r\n const prevPathnameRef = useRef<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n const currentPathname = window.location.pathname\r\n if (\r\n prevPathnameRef.current !== null &&\r\n prevPathnameRef.current !== currentPathname\r\n ) {\r\n resetState()\r\n resetTxState()\r\n setDifferentAddress(undefined)\r\n }\r\n prevPathnameRef.current = currentPathname\r\n }, []) // Only runs once on mount\r\n}\r\n","import { useCallback, useRef, useState } from 'react'\nimport {\n useAccount,\n useChainId,\n useConfig,\n useReconnect,\n type Config,\n type Connector\n} from 'wagmi'\nimport type { Chain } from 'wagmi/chains'\n\ninterface EIP1193Provider {\n request: (args: { method: string; params?: unknown[] }) => Promise<unknown>\n isMetaMask?: boolean\n isConnected?: () => boolean\n isBraveWallet?: boolean\n isTokenPocket?: boolean\n}\n\ninterface EthereumProvider extends EIP1193Provider {\n providers?: EthereumProvider[]\n}\n\nconst logger = {\n error: (...args: unknown[]) => console.error(...args)\n}\n\nexport const useGuardChain = (\n callback: () => void,\n requiredChainId: number\n) => {\n const [isSwitching, setIsSwitching] = useState(false)\n\n const cb = useRef(callback)\n cb.current = callback\n\n const chainId = useChainId()\n const config = useConfig()\n const { connector } = useAccount()\n const { reconnectAsync } = useReconnect()\n\n return {\n isSwitching,\n sendTx: useCallback(async () => {\n if (chainId !== requiredChainId) {\n try {\n setIsSwitching(true)\n await connectRequiredChain(config, requiredChainId, connector)\n\n try {\n await reconnectAsync()\n } catch {\n // continue\n }\n\n await new Promise((resolve) => setTimeout(resolve, 500))\n setIsSwitching(false)\n cb.current()\n } catch (error) {\n setIsSwitching(false)\n logger.error('switch chain error', error)\n throw new Error(\n `Failed to switch to ${getChainName(config, requiredChainId)}. Please switch manually in your wallet.`\n )\n }\n } else {\n if (!connector) {\n try {\n await reconnectAsync()\n await new Promise((resolve) => setTimeout(resolve, 300))\n } catch {\n // continue\n }\n }\n cb.current()\n }\n }, [chainId, config, requiredChainId, connector, reconnectAsync])\n }\n}\n\nfunction getChainName(config: Config, chainId: number): string {\n const chain = config.chains.find((c: Chain) => c.id === chainId)\n return chain?.name || `Chain ${chainId}`\n}\n\nasync function connectRequiredChain(\n config: Config,\n chainId: number,\n connector: Connector | undefined\n) {\n const chain = config.chains.find((c: Chain) => c.id === chainId)\n if (!chain) {\n throw new Error(`Chain with id ${chainId} not found in config`)\n }\n\n let provider: EIP1193Provider | undefined\n\n if (connector) {\n try {\n if (connector.id && connector.name) {\n provider = (await connector.getProvider?.()) as EIP1193Provider | undefined\n }\n } catch {\n // continue to fallback\n }\n }\n\n if (!provider) {\n const ethereum = (window as unknown as { ethereum?: EthereumProvider })\n .ethereum\n if (ethereum?.providers && Array.isArray(ethereum.providers)) {\n provider = ethereum.providers.find(\n (p: EthereumProvider) => (p as { isOkxWallet?: boolean }).isOkxWallet\n )\n if (!provider) {\n provider = ethereum.providers.find(\n (p: EthereumProvider) =>\n p.isMetaMask && !p.isBraveWallet && !p.isTokenPocket\n )\n }\n if (!provider) {\n provider = ethereum.providers[0]\n }\n } else {\n provider = ethereum\n }\n }\n\n if (!provider) {\n throw new Error('No wallet provider found')\n }\n\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: `0x${chainId.toString(16)}` }]\n })\n } catch (switchError: unknown) {\n if ((switchError as { code?: number })?.code === 4902) {\n const addChainParams = {\n chainId: `0x${chainId.toString(16)}`,\n chainName: chain.name,\n nativeCurrency: {\n name: chain.nativeCurrency.name,\n symbol: chain.nativeCurrency.symbol,\n decimals: 18\n },\n rpcUrls: chain.rpcUrls.default.http,\n blockExplorerUrls: chain.blockExplorers?.default\n ? [chain.blockExplorers.default.url]\n : []\n }\n\n try {\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [addChainParams]\n })\n } catch (addError: unknown) {\n throw addError\n }\n } else {\n throw switchError\n }\n }\n}\n","import { useCallback, useRef } from 'react'\nimport { create } from 'zustand'\n\ninterface RefreshLoadingState {\n isLoading: boolean\n setIsLoading: (isLoading: boolean) => void\n}\n\nconst useRefreshLoadingStore = create<RefreshLoadingState>((set) => ({\n isLoading: false,\n setIsLoading: (isLoading) => set({ isLoading })\n}))\n\nexport const useRefreshLoading = () => {\n const { isLoading, setIsLoading } = useRefreshLoadingStore()\n\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null)\n const autoRestoreTimer = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const startLoading = useCallback(() => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n\n if (autoRestoreTimer.current) {\n clearTimeout(autoRestoreTimer.current)\n autoRestoreTimer.current = null\n }\n\n if (!isLoading) {\n setIsLoading(true)\n\n timer.current = setTimeout(() => {\n setIsLoading(false)\n timer.current = null\n }, 1500)\n } else {\n setIsLoading(false)\n\n autoRestoreTimer.current = setTimeout(() => {\n setIsLoading(true)\n autoRestoreTimer.current = null\n\n timer.current = setTimeout(() => {\n setIsLoading(false)\n timer.current = null\n }, 1500)\n }, 200)\n }\n }, [isLoading, setIsLoading])\n\n return { isLoading, startLoading }\n}\n","import { useMemo } from 'react'\r\nimport { useQuery } from '@tanstack/react-query'\r\nimport {\r\n createPublicClient,\r\n erc20Abi,\r\n formatUnits,\r\n http,\r\n type PublicClient\r\n} from 'viem'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\n\r\nconst FRONTEND_MAX_RETRY_COUNT = 3\r\nconst REQUEST_TIMEOUT = 4000\r\nconst BALANCE_REFETCH_INTERVAL = 12000\r\n\r\nconst chainRpcMode = new Map<number, 'frontend' | 'backend'>()\r\n\r\n// Default RPC URLs for common chains (used as frontend fallback)\r\nconst defaultRpc: Record<number, string> = {}\r\n\r\ninterface Props {\r\n chainId: number\r\n tokenAddress?: `0x${string}`\r\n connectAddress?: `0x${string}`\r\n}\r\n\r\ninterface BalanceResult {\r\n decimals: number\r\n formatted: string\r\n symbol: string\r\n value: bigint\r\n}\r\n\r\nconst getBalanceByClient = async (\r\n client: PublicClient,\r\n address: `0x${string}`,\r\n tokenAddress?: `0x${string}`\r\n): Promise<BalanceResult> => {\r\n if (tokenAddress) {\r\n const [value, decimals, symbol] = await Promise.all([\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'balanceOf',\r\n args: [address]\r\n }) as Promise<bigint>,\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'decimals'\r\n }) as Promise<number>,\r\n client.readContract({\r\n address: tokenAddress,\r\n abi: erc20Abi,\r\n functionName: 'symbol'\r\n }) as Promise<string>\r\n ])\r\n\r\n return {\r\n decimals,\r\n formatted: formatUnits(value, decimals),\r\n symbol,\r\n value\r\n }\r\n }\r\n\r\n const value = await client.getBalance({ address })\r\n return {\r\n decimals: 18,\r\n formatted: formatUnits(value, 18),\r\n symbol: 'ETH',\r\n value\r\n }\r\n}\r\n\r\nexport const useTokenBalance = ({\r\n chainId,\r\n tokenAddress,\r\n connectAddress\r\n}: Props) => {\r\n const address = useEvmAddress()\r\n const { chains } = useChainsStore()\r\n\r\n const currentAddress = connectAddress ?? address\r\n const backendRpcUrl = useMemo(\r\n () => chains?.find((chain) => chain.chain_id === chainId)?.rpc_url,\r\n [chains, chainId]\r\n )\r\n\r\n const { data: balance } = useQuery<BalanceResult>({\r\n queryKey: [\r\n 'token-balance-with-rpc-fallback',\r\n currentAddress,\r\n chainId,\r\n tokenAddress,\r\n backendRpcUrl\r\n ],\r\n enabled: Boolean(currentAddress && chainId),\r\n queryFn: async () => {\r\n const walletAddress = currentAddress as `0x${string}`\r\n const frontendRpcUrl = defaultRpc[chainId]\r\n const preferBackend = chainRpcMode.get(chainId) === 'backend'\r\n let lastError: unknown\r\n\r\n if (!preferBackend && frontendRpcUrl) {\r\n const frontendClient = createPublicClient({\r\n transport: http(frontendRpcUrl, {\r\n retryCount: 0,\r\n timeout: REQUEST_TIMEOUT\r\n })\r\n })\r\n\r\n for (let i = 0; i < FRONTEND_MAX_RETRY_COUNT; i++) {\r\n try {\r\n const result = await getBalanceByClient(\r\n frontendClient,\r\n walletAddress,\r\n tokenAddress\r\n )\r\n chainRpcMode.set(chainId, 'frontend')\r\n return result\r\n } catch (error) {\r\n lastError = error\r\n }\r\n }\r\n }\r\n\r\n if (backendRpcUrl) {\r\n const backendClient = createPublicClient({\r\n transport: http(backendRpcUrl, {\r\n retryCount: 0,\r\n timeout: REQUEST_TIMEOUT\r\n })\r\n })\r\n const result = await getBalanceByClient(\r\n backendClient,\r\n walletAddress,\r\n tokenAddress\r\n )\r\n chainRpcMode.set(chainId, 'backend')\r\n return result\r\n }\r\n\r\n throw lastError ?? new Error('No available RPC URL for balance query')\r\n },\r\n retry: 0,\r\n refetchInterval: BALANCE_REFETCH_INTERVAL\r\n })\r\n\r\n return balance\r\n}\r\n","import { useEffect, useMemo, useState } from 'react'\r\nimport { ChainEnum, useRpcProviders, useTokenBalances } from '@dynamic-labs/sdk-react-core'\r\nimport { Connection, PublicKey } from '@solana/web3.js'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\n\r\nconst SOL_MINT_ADDRESS = 'So11111111111111111111111111111111111111112'\r\nconst SOL_NATIVE_ADDRESS = '11111111111111111111111111111111'\r\nconst SOLANA_MAINNET_NETWORK_ID = 101\r\n\r\ninterface SolanaTokenBalance {\r\n decimals: number\r\n value: bigint\r\n formatted: string\r\n symbol: string\r\n}\r\n\r\nconst normalizeAddress = (value?: string) => (value ?? '').trim().toLowerCase()\r\n\r\nconst formatRawBalance = (raw: bigint, decimals: number) => {\r\n if (decimals <= 0) return raw.toString()\r\n\r\n const rawStr = raw.toString()\r\n const negative = rawStr.startsWith('-')\r\n const unsigned = negative ? rawStr.slice(1) : rawStr\r\n const padded = unsigned.padStart(decimals + 1, '0')\r\n const intPart = padded.slice(0, -decimals)\r\n const fracPart = padded.slice(-decimals).replace(/0+$/, '')\r\n\r\n const formatted = fracPart ? `${intPart}.${fracPart}` : intPart\r\n return negative ? `-${formatted}` : formatted\r\n}\r\n\r\nconst selectSolanaConnection = (providers: unknown) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: Connection\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: solanaProviders?.[0]?.provider ?? null\r\n }\r\n}\r\n\r\nexport const useSolanaTokenBalance = (\r\n tokenMintAddress?: string,\r\n isEnabled: boolean = true\r\n) => {\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { defaultProvider: connection } = useRpcProviders(selectSolanaConnection)\r\n\r\n const normalizedTokenMint = normalizeAddress(tokenMintAddress)\r\n const isSolToken =\r\n !tokenMintAddress ||\r\n normalizedTokenMint === normalizeAddress(SOL_MINT_ADDRESS) ||\r\n normalizedTokenMint === normalizeAddress(SOL_NATIVE_ADDRESS)\r\n\r\n const {\r\n tokenBalances,\r\n isLoading,\r\n isError,\r\n error,\r\n fetchAccountBalances\r\n } = useTokenBalances({\r\n accountAddress: solanaWalletAddress || undefined,\r\n chainName: ChainEnum.Sol,\r\n networkId: SOLANA_MAINNET_NETWORK_ID,\r\n includeNativeBalance: true,\r\n includeFiat: true,\r\n tokenAddresses: isSolToken || !tokenMintAddress ? undefined : [tokenMintAddress],\r\n filterSpamTokens: false\r\n })\r\n\r\n const [rpcData, setRpcData] = useState<SolanaTokenBalance | null>(null)\r\n const [rpcLoading, setRpcLoading] = useState(false)\r\n const [rpcError, setRpcError] = useState<Error | null>(null)\r\n\r\n useEffect(() => {\r\n let cancelled = false\r\n\r\n const fetchByRpc = async () => {\r\n if (!isEnabled || !solanaWalletAddress || !connection) {\r\n setRpcData(null)\r\n setRpcError(null)\r\n setRpcLoading(false)\r\n return\r\n }\r\n\r\n setRpcLoading(true)\r\n setRpcError(null)\r\n\r\n try {\r\n const owner = new PublicKey(solanaWalletAddress)\r\n\r\n if (isSolToken) {\r\n const lamports = await connection.getBalance(owner)\r\n if (cancelled) return\r\n\r\n setRpcData({\r\n decimals: 9,\r\n value: BigInt(lamports),\r\n formatted: formatRawBalance(BigInt(lamports), 9),\r\n symbol: 'SOL'\r\n })\r\n return\r\n }\r\n\r\n if (!tokenMintAddress) {\r\n if (!cancelled) setRpcData(null)\r\n return\r\n }\r\n\r\n const mint = new PublicKey(tokenMintAddress)\r\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(owner, {\r\n mint\r\n })\r\n\r\n if (cancelled) return\r\n\r\n let totalRaw = 0n\r\n let decimals = 0\r\n\r\n for (const account of tokenAccounts.value) {\r\n const parsed = account.account.data.parsed?.info?.tokenAmount\r\n if (!parsed) continue\r\n\r\n const amountStr = String(parsed.amount ?? '0')\r\n totalRaw += BigInt(amountStr)\r\n decimals = Number(parsed.decimals ?? decimals)\r\n }\r\n\r\n setRpcData({\r\n decimals,\r\n value: totalRaw,\r\n formatted: formatRawBalance(totalRaw, decimals),\r\n symbol: ''\r\n })\r\n } catch (err) {\r\n if (!cancelled) {\r\n setRpcData(null)\r\n setRpcError(err instanceof Error ? err : new Error('Failed to fetch Solana balance'))\r\n }\r\n } finally {\r\n if (!cancelled) setRpcLoading(false)\r\n }\r\n }\r\n\r\n fetchByRpc()\r\n\r\n return () => {\r\n cancelled = true\r\n }\r\n }, [connection, isEnabled, isSolToken, solanaWalletAddress, tokenMintAddress])\r\n\r\n const dynamicData = useMemo<SolanaTokenBalance | null>(() => {\r\n if (!isEnabled || !solanaWalletAddress) return null\r\n\r\n if (isSolToken) {\r\n const native = tokenBalances.find((item) => item.isNative)\r\n if (!native) {\r\n return {\r\n decimals: 9,\r\n value: 0n,\r\n formatted: '0',\r\n symbol: 'SOL'\r\n }\r\n }\r\n\r\n return {\r\n decimals: native.decimals,\r\n value: BigInt(Math.floor(native.rawBalance || 0)),\r\n formatted: String(native.balance ?? 0),\r\n symbol: native.symbol || 'SOL'\r\n }\r\n }\r\n\r\n const targetToken = tokenBalances.find(\r\n (item) => normalizeAddress(item.address) === normalizedTokenMint\r\n )\r\n\r\n if (!targetToken) {\r\n return {\r\n decimals: 0,\r\n value: 0n,\r\n formatted: '0',\r\n symbol: ''\r\n }\r\n }\r\n\r\n return {\r\n decimals: targetToken.decimals,\r\n value: BigInt(Math.floor(targetToken.rawBalance || 0)),\r\n formatted: String(targetToken.balance ?? 0),\r\n symbol: targetToken.symbol || ''\r\n }\r\n }, [isEnabled, isSolToken, normalizedTokenMint, solanaWalletAddress, tokenBalances])\r\n\r\n const data = useMemo(() => {\r\n if (!isEnabled || !solanaWalletAddress) return null\r\n if (rpcData) return rpcData\r\n return dynamicData\r\n }, [dynamicData, isEnabled, rpcData, solanaWalletAddress])\r\n\r\n return {\r\n data,\r\n isLoading: isLoading || rpcLoading,\r\n isError: isError || Boolean(rpcError),\r\n error: rpcError || (error ? new Error(error) : null),\r\n refetch: async () => {\r\n await Promise.all([fetchAccountBalances(true)])\r\n }\r\n }\r\n}\r\n\r\nexport const useSolanaTokenUsdPrice = (tokenMintAddress?: string) => {\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const normalizedTokenMint = normalizeAddress(tokenMintAddress)\r\n const isSolToken =\r\n !!tokenMintAddress &&\r\n (normalizedTokenMint === normalizeAddress(SOL_MINT_ADDRESS) ||\r\n normalizedTokenMint === normalizeAddress(SOL_NATIVE_ADDRESS))\r\n\r\n const { tokenBalances, isLoading, isError, error, fetchAccountBalances } =\r\n useTokenBalances({\r\n accountAddress: solanaWalletAddress || undefined,\r\n chainName: ChainEnum.Sol,\r\n networkId: SOLANA_MAINNET_NETWORK_ID,\r\n includeNativeBalance: true,\r\n includeFiat: true,\r\n tokenAddresses:\r\n !tokenMintAddress || isSolToken ? undefined : [tokenMintAddress],\r\n filterSpamTokens: false\r\n })\r\n\r\n const data = useMemo<number>(() => {\r\n if (!tokenMintAddress) return 0\r\n\r\n if (isSolToken) {\r\n const native = tokenBalances.find((item) => item.isNative)\r\n return Number(native?.price || 0)\r\n }\r\n\r\n const targetToken = tokenBalances.find(\r\n (item) => normalizeAddress(item.address) === normalizedTokenMint\r\n )\r\n return Number(targetToken?.price || 0)\r\n }, [isSolToken, normalizedTokenMint, tokenBalances, tokenMintAddress])\r\n\r\n return {\r\n data,\r\n isLoading,\r\n isError,\r\n error: error ? new Error(error) : null,\r\n refetch: () => fetchAccountBalances(true)\r\n }\r\n}\r\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport {\r\n useDynamicContext,\r\n useRpcProviders,\r\n useUserWallets\r\n} from '@dynamic-labs/sdk-react-core'\r\n\r\nimport {\r\n Transaction,\r\n VersionedTransaction,\r\n VersionedMessage,\r\n SendOptions,\r\n PublicKey,\r\n SystemProgram,\r\n LAMPORTS_PER_SOL,\r\n Connection\r\n} from '@solana/web3.js'\r\n\r\n\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { logger } from '../../utils'\r\n\r\nexport interface SolanaTransactionInfo {\r\n message: string\r\n sender: string\r\n}\r\n\r\nexport interface SendSolanaTransactionOptions {\r\n txMessage?: string\r\n txSender?: string\r\n recipient?: string\r\n amount?: number\r\n waitForConfirmation?: boolean\r\n onSuccess?: (signature: string) => void\r\n onError?: (error: Error) => void\r\n}\r\n\r\nexport interface SolanaTransactionState {\r\n isLoading: boolean\r\n signature: string | null\r\n error: string | null\r\n isConfirmed: boolean\r\n}\r\n\r\ntype SolanaTransactionErrorCode =\r\n | 'SOL_WALLET_NOT_CONNECTED'\r\n | 'SOL_NETWORK_UNAVAILABLE'\r\n | 'SOL_DYNAMIC_SIGNER_UNAVAILABLE'\r\n | 'SOL_DYNAMIC_SIGN_REJECTED'\r\n | 'SOL_DYNAMIC_SEND_FAILED'\r\n | 'SOL_DYNAMIC_INVALID_SIGNATURE'\r\n | 'SOL_TX_PARAMS_INVALID'\r\n | 'SOL_CHAIN_ENV_MISMATCH'\r\n | 'SOL_RUNTIME_CONTEXT_CHANGED'\r\n | 'SOL_TX_EXECUTE_FAILED'\r\n\r\ntype SolanaTransactionError = Error & {\r\n code: SolanaTransactionErrorCode\r\n cause?: unknown\r\n}\r\n\r\ntype DynamicSolanaSigner = {\r\n signAndSendTransaction?: (\r\n tx: Transaction | VersionedTransaction,\r\n options?: SendOptions\r\n ) => Promise<unknown>\r\n signTransaction?: <T extends Transaction | VersionedTransaction>(\r\n tx: T\r\n ) => Promise<T>\r\n publicKey?: unknown\r\n address?: unknown\r\n getAddress?: () => Promise<unknown>\r\n}\r\n\r\ntype DynamicSolanaWalletLike = {\r\n chain?: string | null\r\n address?: string | null\r\n publicKey?: string | null\r\n connector?: unknown\r\n walletConnector?: unknown\r\n}\r\n\r\nexport type SolanaTransactionType = 'cross-chain' | 'same-chain' | 'transfer'\r\n\r\nexport const useSolanaTransaction = () => {\r\n const { defaultProvider: connection } = useRpcProviders((providers) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: unknown\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: (solanaProviders?.[0]?.provider ?? null) as Connection | null\r\n }\r\n })\r\n\r\n\r\n const { primaryWallet } = useDynamicContext()\r\n const userWallets = useUserWallets()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const effectivePublicKey = useMemo(() => {\r\n if (solanaWalletAddress) {\r\n try {\r\n return new PublicKey(solanaWalletAddress)\r\n } catch {\r\n return null\r\n }\r\n }\r\n return null\r\n }, [solanaWalletAddress])\r\n\r\n\r\n const [state, setState] = useState<SolanaTransactionState>({\r\n isLoading: false,\r\n signature: null,\r\n error: null,\r\n isConfirmed: false\r\n })\r\n const dynamicSignerRef = useRef<DynamicSolanaSigner | null>(null)\r\n const expectedSolanaNetwork = 'mainnet'\r\n\r\n const createTxError = useCallback(\r\n (\r\n code: SolanaTransactionErrorCode,\r\n message: string,\r\n cause?: unknown\r\n ): SolanaTransactionError => {\r\n const error = new Error(`[${code}] ${message}`) as SolanaTransactionError\r\n error.code = code\r\n if (cause !== undefined) {\r\n error.cause = cause\r\n }\r\n return error\r\n },\r\n []\r\n )\r\n\r\n const mapDynamicSignerError = useCallback(\r\n (error: unknown): SolanaTransactionError => {\r\n if (\r\n error instanceof Error &&\r\n 'code' in error &&\r\n typeof (error as { code?: unknown }).code === 'string'\r\n ) {\r\n return error as SolanaTransactionError\r\n }\r\n\r\n const message =\r\n error instanceof Error\r\n ? `${error.name}: ${error.message}`\r\n : typeof error === 'string'\r\n ? error\r\n : ''\r\n const normalized = message.toLowerCase()\r\n\r\n if (\r\n normalized.includes('reject') ||\r\n normalized.includes('denied') ||\r\n normalized.includes('cancel')\r\n ) {\r\n return createTxError(\r\n 'SOL_DYNAMIC_SIGN_REJECTED',\r\n 'User rejected the Solana wallet sign/send request',\r\n error\r\n )\r\n }\r\n\r\n if (\r\n normalized.includes('walletnotselectederror') ||\r\n normalized.includes('wallet not selected') ||\r\n normalized.includes('not connected') ||\r\n normalized.includes('no signer')\r\n ) {\r\n return createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'No available Dynamic Solana signer found. Please reconnect your Solana wallet',\r\n error\r\n )\r\n }\r\n\r\n return createTxError(\r\n 'SOL_DYNAMIC_SEND_FAILED',\r\n 'Dynamic Solana transaction failed to send. Please try again later',\r\n error\r\n )\r\n },\r\n [createTxError]\r\n )\r\n\r\n const extractSignature = useCallback(\r\n (result: unknown): string => {\r\n if (typeof result === 'string' && result.length > 0) {\r\n return result\r\n }\r\n\r\n if (result && typeof result === 'object') {\r\n const candidate = result as {\r\n signature?: unknown\r\n txid?: unknown\r\n hash?: unknown\r\n }\r\n\r\n if (\r\n typeof candidate.signature === 'string' &&\r\n candidate.signature.length > 0\r\n ) {\r\n return candidate.signature\r\n }\r\n\r\n if (typeof candidate.txid === 'string' && candidate.txid.length > 0) {\r\n return candidate.txid\r\n }\r\n\r\n if (typeof candidate.hash === 'string' && candidate.hash.length > 0) {\r\n return candidate.hash\r\n }\r\n }\r\n\r\n throw createTxError(\r\n 'SOL_DYNAMIC_INVALID_SIGNATURE',\r\n 'Dynamic returned an invalid transaction signature format'\r\n )\r\n },\r\n [createTxError]\r\n )\r\n\r\n const connectedDynamicSolanaWallet = useMemo(() => {\r\n return userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as unknown as DynamicSolanaWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as (DynamicSolanaWalletLike & { connector?: unknown }) | undefined\r\n }, [userWallets])\r\n\r\n const extractAddressFromUnknown = useCallback(\r\n (value: unknown): string | null => {\r\n if (!value) return null\r\n if (typeof value === 'string') {\r\n const trimmed = value.trim()\r\n return trimmed.length > 0 ? trimmed : null\r\n }\r\n\r\n if (value instanceof PublicKey) {\r\n return value.toBase58()\r\n }\r\n\r\n if (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n 'toBase58' in value &&\r\n typeof (value as { toBase58?: unknown }).toBase58 === 'function'\r\n ) {\r\n try {\r\n const parsed = (value as { toBase58: () => string }).toBase58()\r\n return parsed.length > 0 ? parsed : null\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return null\r\n },\r\n []\r\n )\r\n\r\n const resolveDynamicWalletAddress = useCallback(() => {\r\n return (\r\n extractAddressFromUnknown(connectedDynamicSolanaWallet?.address) ||\r\n extractAddressFromUnknown(connectedDynamicSolanaWallet?.publicKey) ||\r\n extractAddressFromUnknown(\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.address\r\n ) ||\r\n extractAddressFromUnknown(\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.publicKey\r\n )\r\n )\r\n }, [connectedDynamicSolanaWallet, primaryWallet, extractAddressFromUnknown])\r\n\r\n type RuntimeSnapshot = {\r\n walletAddress: string | null\r\n dynamicWalletAddress: string | null\r\n }\r\n\r\n const takeRuntimeSnapshot = useCallback((): RuntimeSnapshot => {\r\n return {\r\n walletAddress: effectivePublicKey?.toBase58() ?? null,\r\n dynamicWalletAddress: resolveDynamicWalletAddress()\r\n }\r\n }, [\r\n effectivePublicKey,\r\n resolveDynamicWalletAddress\r\n ])\r\n\r\n const assertSnapshotConsistent = useCallback(\r\n (baseline: RuntimeSnapshot, phase: string) => {\r\n const current = takeRuntimeSnapshot()\r\n const walletChanged = baseline.walletAddress !== current.walletAddress\r\n const dynamicWalletChanged =\r\n baseline.dynamicWalletAddress !== current.dynamicWalletAddress\r\n\r\n if (walletChanged || dynamicWalletChanged) {\r\n throw createTxError(\r\n 'SOL_RUNTIME_CONTEXT_CHANGED',\r\n `Wallet or network context changed during ${phase}. Please retry`\r\n )\r\n }\r\n },\r\n [createTxError, takeRuntimeSnapshot]\r\n )\r\n\r\n const getDynamicSolanaSigner = useCallback(async () => {\r\n if (dynamicSignerRef.current) {\r\n return dynamicSignerRef.current\r\n }\r\n\r\n const connectorCandidates = [\r\n connectedDynamicSolanaWallet?.connector,\r\n connectedDynamicSolanaWallet?.walletConnector,\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)?.connector,\r\n (primaryWallet as unknown as DynamicSolanaWalletLike | null)\r\n ?.walletConnector\r\n ]\r\n\r\n for (const candidate of connectorCandidates) {\r\n if (!candidate) continue\r\n\r\n const candidateWithSigner = candidate as DynamicSolanaSigner & {\r\n getSigner?: () => Promise<unknown>\r\n }\r\n\r\n if (\r\n typeof candidateWithSigner.signAndSendTransaction === 'function' ||\r\n typeof candidateWithSigner.signTransaction === 'function'\r\n ) {\r\n dynamicSignerRef.current = candidateWithSigner\r\n return candidateWithSigner\r\n }\r\n\r\n if (typeof candidateWithSigner.getSigner === 'function') {\r\n const signer = (await Promise.race([\r\n candidateWithSigner.getSigner(),\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), 1500)\r\n })\r\n ])) as DynamicSolanaSigner | undefined\r\n\r\n if (\r\n signer &&\r\n (typeof signer.signAndSendTransaction === 'function' ||\r\n typeof signer.signTransaction === 'function')\r\n ) {\r\n dynamicSignerRef.current = signer\r\n return signer\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }, [connectedDynamicSolanaWallet, primaryWallet])\r\n\r\n const resolveSignerAddress = useCallback(\r\n async (signer: DynamicSolanaSigner): Promise<string | null> => {\r\n const fromPublicKey = extractAddressFromUnknown(signer.publicKey)\r\n if (fromPublicKey) return fromPublicKey\r\n\r\n const fromAddress = extractAddressFromUnknown(signer.address)\r\n if (fromAddress) return fromAddress\r\n\r\n if (typeof signer.getAddress === 'function') {\r\n try {\r\n const maybeAddress = await Promise.race([\r\n signer.getAddress(),\r\n new Promise<undefined>((resolve) => {\r\n setTimeout(() => resolve(undefined), 400)\r\n })\r\n ])\r\n return extractAddressFromUnknown(maybeAddress)\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n return null\r\n },\r\n [extractAddressFromUnknown]\r\n )\r\n\r\n const assertSignerMatchesWallet = useCallback(\r\n async (signer: DynamicSolanaSigner, walletAddress: string) => {\r\n const signerAddress = await resolveSignerAddress(signer)\r\n if (!signerAddress) return\r\n\r\n if (signerAddress !== walletAddress) {\r\n throw createTxError(\r\n 'SOL_RUNTIME_CONTEXT_CHANGED',\r\n 'Dynamic signer account does not match the connected wallet'\r\n )\r\n }\r\n },\r\n [createTxError, resolveSignerAddress]\r\n )\r\n\r\n useEffect(() => {\r\n dynamicSignerRef.current = null\r\n }, [connectedDynamicSolanaWallet, primaryWallet, solanaWalletAddress])\r\n\r\n useEffect(() => {\r\n if (!effectivePublicKey || !connectedDynamicSolanaWallet) return\r\n\r\n void getDynamicSolanaSigner().catch(() => undefined)\r\n }, [effectivePublicKey, connectedDynamicSolanaWallet, getDynamicSolanaSigner])\r\n\r\n const validateWallet = useCallback((): { valid: boolean; error?: Error } => {\r\n if (!effectivePublicKey) {\r\n return {\r\n valid: false,\r\n error: createTxError(\r\n 'SOL_WALLET_NOT_CONNECTED',\r\n 'Please connect a Solana wallet first'\r\n )\r\n }\r\n }\r\n if (!connection) {\r\n return {\r\n valid: false,\r\n error: createTxError(\r\n 'SOL_NETWORK_UNAVAILABLE',\r\n 'Solana network connection is unavailable'\r\n )\r\n }\r\n }\r\n\r\n return { valid: true }\r\n }, [effectivePublicKey, connection, createTxError])\r\n\r\n /**\r\n * Parse transaction - supports full VersionedTransaction (from res.tx.tx)\r\n * Priority: Try to parse as complete VersionedTransaction, then VersionedMessage, finally Legacy\r\n */\r\n const parseTransaction = useCallback(\r\n (message: string, walletAddress: string) => {\r\n const messageBuffer = Buffer.from(message, 'base64')\r\n\r\n // Priority: Parse complete VersionedTransaction (from backend's tx field)\r\n try {\r\n const transaction = VersionedTransaction.deserialize(messageBuffer)\r\n\r\n // If transaction contains signatures, check if signatures are valid\r\n if (transaction.signatures.length > 0) {\r\n const hasValidSignatures = transaction.signatures.some((sig) => {\r\n if (!sig || sig.length === 0) return false\r\n const allZeros = sig.every((byte) => byte === 0)\r\n const allOnes = sig.every((byte) => byte === 1)\r\n if (allZeros || allOnes) return false\r\n return true\r\n })\r\n\r\n if (hasValidSignatures) {\r\n return {\r\n transaction,\r\n type: 'versioned' as const,\r\n isPresigned: true\r\n }\r\n }\r\n }\r\n\r\n return { transaction, type: 'versioned' as const, isPresigned: false }\r\n } catch {\r\n // Ignore parsing error, try next method\r\n }\r\n\r\n // Alternative: Parse VersionedMessage (from old API)\r\n try {\r\n const versionedMessage = VersionedMessage.deserialize(messageBuffer)\r\n const transaction = new VersionedTransaction(versionedMessage)\r\n return { transaction, type: 'versioned' as const }\r\n } catch {\r\n // Ignore parsing error, try next method\r\n }\r\n\r\n // Final attempt: Legacy Transaction\r\n try {\r\n const legacyTx = Transaction.from(messageBuffer)\r\n legacyTx.feePayer = new PublicKey(walletAddress)\r\n return {\r\n transaction: legacyTx,\r\n type: 'legacy' as const,\r\n isPresigned: false\r\n }\r\n } catch (_legacyError) {\r\n throw new Error('Invalid transaction message format,' + _legacyError)\r\n }\r\n },\r\n []\r\n )\r\n\r\n /**\r\n * Wait for transaction confirmation\r\n */\r\n const confirmTransaction = useCallback(\r\n async (\r\n signature: string,\r\n commitment: 'confirmed' | 'finalized' = 'confirmed'\r\n ): Promise<boolean> => {\r\n if (!connection) throw new Error('Connection not available')\r\n\r\n const isTransientRpcError = (error: unknown) => {\r\n const message =\r\n error instanceof Error\r\n ? `${error.name}: ${error.message}`.toLowerCase()\r\n : typeof error === 'string'\r\n ? error.toLowerCase()\r\n : ''\r\n\r\n return (\r\n message.includes('failed to fetch') ||\r\n message.includes('network request failed') ||\r\n message.includes('fetcherror') ||\r\n message.includes('timeout') ||\r\n message.includes('503')\r\n )\r\n }\r\n\r\n try {\r\n const response = await connection.getSignatureStatus(signature)\r\n\r\n if (!response || !response.value) {\r\n return false\r\n }\r\n\r\n const status = response.value\r\n\r\n if (status?.err) {\r\n throw new Error(`Transaction failed: ${JSON.stringify(status.err)}`)\r\n }\r\n\r\n if (\r\n status?.confirmationStatus === commitment ||\r\n status?.confirmationStatus === 'finalized'\r\n ) {\r\n return true\r\n }\r\n } catch (error) {\r\n if (!isTransientRpcError(error)) {\r\n throw error\r\n }\r\n }\r\n\r\n // Poll for transaction confirmation\r\n return new Promise((resolve) => {\r\n const interval = setInterval(async () => {\r\n try {\r\n const pollResponse = await connection.getSignatureStatus(signature)\r\n\r\n if (!pollResponse || !pollResponse.value) {\r\n return\r\n }\r\n\r\n const newStatus = pollResponse.value\r\n\r\n if (newStatus?.err) {\r\n clearInterval(interval)\r\n resolve(false)\r\n return\r\n }\r\n\r\n if (\r\n newStatus?.confirmationStatus === commitment ||\r\n newStatus?.confirmationStatus === 'finalized'\r\n ) {\r\n clearInterval(interval)\r\n resolve(true)\r\n }\r\n } catch {\r\n // Polling errors do not immediately reject, continue waiting\r\n }\r\n }, 1000)\r\n\r\n setTimeout(() => {\r\n clearInterval(interval)\r\n resolve(false)\r\n }, 60000)\r\n })\r\n },\r\n [connection]\r\n )\r\n\r\n const executeTransaction = useCallback(\r\n async (options: SendSolanaTransactionOptions) => {\r\n const {\r\n txMessage,\r\n txSender,\r\n waitForConfirmation = true,\r\n onSuccess,\r\n onError\r\n } = options\r\n\r\n const validation = validateWallet()\r\n if (!validation.valid) {\r\n const error = validation.error!\r\n setState((prev) => ({\r\n ...prev,\r\n error: error.message,\r\n isLoading: false\r\n }))\r\n onError?.(error)\r\n throw error\r\n }\r\n\r\n const walletAddress = effectivePublicKey!.toBase58()\r\n const senderAddress = txSender || walletAddress\r\n const txStartAt = Date.now()\r\n const runtimeSnapshot = takeRuntimeSnapshot()\r\n const activeConnection = connection\r\n\r\n if (!activeConnection) {\r\n throw createTxError(\r\n 'SOL_NETWORK_UNAVAILABLE',\r\n 'Solana network connection is unavailable'\r\n )\r\n }\r\n\r\n\r\n try {\r\n setState((prev) => ({ ...prev, isLoading: true, error: null }))\r\n assertSnapshotConsistent(runtimeSnapshot, 'pre-send validation')\r\n\r\n let transaction: Transaction | VersionedTransaction\r\n\r\n if (txMessage) {\r\n const parsed = parseTransaction(txMessage, senderAddress)\r\n transaction = parsed.transaction\r\n\r\n // Save whether pre-signed\r\n const isPresigned = (\r\n parsed as typeof parsed & { isPresigned?: boolean }\r\n ).isPresigned\r\n ;(\r\n transaction as VersionedTransaction & { isPresigned?: boolean }\r\n ).isPresigned = isPresigned\r\n } else {\r\n throw createTxError(\r\n 'SOL_TX_PARAMS_INVALID',\r\n 'Please provide a transaction message or transfer parameters'\r\n )\r\n }\r\n\r\n let signature: string\r\n\r\n const sendViaDynamic = async (\r\n tx: Transaction | VersionedTransaction\r\n ): Promise<string> => {\r\n assertSnapshotConsistent(runtimeSnapshot, 'dynamic signer resolve')\r\n const dynamicSigner = await getDynamicSolanaSigner()\r\n\r\n if (!dynamicSigner) {\r\n throw createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'No available Dynamic Solana signer found. Please reconnect your Solana wallet'\r\n )\r\n }\r\n\r\n await assertSignerMatchesWallet(dynamicSigner, walletAddress)\r\n assertSnapshotConsistent(runtimeSnapshot, 'wallet signature request')\r\n\r\n try {\r\n if (typeof dynamicSigner.signAndSendTransaction === 'function') {\r\n const sendResult = await dynamicSigner.signAndSendTransaction(\r\n tx,\r\n {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n }\r\n )\r\n const resolvedSignature = extractSignature(sendResult)\r\n return resolvedSignature\r\n }\r\n\r\n if (typeof dynamicSigner.signTransaction === 'function') {\r\n const signedTx = await dynamicSigner.signTransaction(tx)\r\n const sendSignature =\r\n signedTx instanceof VersionedTransaction\r\n ? await activeConnection.sendRawTransaction(\r\n signedTx.serialize(),\r\n {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n }\r\n )\r\n : await activeConnection.sendRawTransaction(\r\n (signedTx as Transaction).serialize(),\r\n { skipPreflight: true, maxRetries: 3 }\r\n )\r\n\r\n\r\n return sendSignature\r\n }\r\n\r\n throw createTxError(\r\n 'SOL_DYNAMIC_SIGNER_UNAVAILABLE',\r\n 'Dynamic Solana signer does not support transaction signing interfaces'\r\n )\r\n } catch (error) {\r\n throw mapDynamicSignerError(error)\r\n }\r\n }\r\n\r\n if (transaction instanceof VersionedTransaction) {\r\n const isPresigned =\r\n (transaction as VersionedTransaction & { isPresigned?: boolean })\r\n .isPresigned === true\r\n\r\n if (isPresigned && transaction.signatures.length > 0) {\r\n signature = await activeConnection.sendTransaction(transaction, {\r\n skipPreflight: true,\r\n maxRetries: 3\r\n })\r\n\r\n } else {\r\n signature = await sendViaDynamic(transaction)\r\n }\r\n } else {\r\n signature = await sendViaDynamic(transaction)\r\n }\r\n\r\n assertSnapshotConsistent(runtimeSnapshot, 'transaction submission')\r\n\r\n logger.info('[SolanaTx] submitted', {\r\n signature,\r\n submitDurationMs: Date.now() - txStartAt\r\n })\r\n\r\n let isConfirmed = false\r\n if (waitForConfirmation) {\r\n const confirmStartAt = Date.now()\r\n isConfirmed = await confirmTransaction(signature)\r\n logger.info('[SolanaTx] confirmation finished', {\r\n signature,\r\n isConfirmed,\r\n confirmDurationMs: Date.now() - confirmStartAt\r\n })\r\n }\r\n\r\n assertSnapshotConsistent(runtimeSnapshot, 'post-confirmation')\r\n\r\n setState({\r\n isLoading: false,\r\n signature,\r\n error: null,\r\n isConfirmed\r\n })\r\n\r\n onSuccess?.(signature)\r\n\r\n return { signature, isConfirmed }\r\n } catch (error: unknown) {\r\n const err =\r\n error instanceof Error &&\r\n 'code' in error &&\r\n typeof (error as { code?: unknown }).code === 'string'\r\n ? (error as SolanaTransactionError)\r\n : createTxError(\r\n 'SOL_TX_EXECUTE_FAILED',\r\n error instanceof Error\r\n ? error.message\r\n : typeof error === 'string'\r\n ? error\r\n : 'Solana transaction execution failed',\r\n error\r\n )\r\n\r\n logger.error('[SolanaTx] execute failed', {\r\n durationMs: Date.now() - txStartAt,\r\n code: err.code,\r\n message: err.message,\r\n cause: err.cause\r\n })\r\n\r\n setState((prev) => ({\r\n ...prev,\r\n isLoading: false,\r\n error: err.message\r\n }))\r\n onError?.(err)\r\n throw err\r\n }\r\n },\r\n [\r\n connection,\r\n createTxError,\r\n effectivePublicKey,\r\n validateWallet,\r\n parseTransaction,\r\n confirmTransaction,\r\n getDynamicSolanaSigner,\r\n extractSignature,\r\n mapDynamicSignerError,\r\n takeRuntimeSnapshot,\r\n assertSnapshotConsistent,\r\n assertSignerMatchesWallet\r\n ]\r\n )\r\n\r\n const sendFromQuote = useCallback(\r\n async (\r\n txMessage: string,\r\n txSender?: string,\r\n options?: {\r\n waitForConfirmation?: boolean\r\n onSuccess?: (signature: string) => void\r\n onError?: (error: Error) => void\r\n }\r\n ) => {\r\n return executeTransaction({\r\n txMessage,\r\n txSender,\r\n waitForConfirmation: options?.waitForConfirmation ?? true,\r\n onSuccess: options?.onSuccess,\r\n onError: options?.onError\r\n })\r\n },\r\n [executeTransaction]\r\n )\r\n\r\n const resetState = useCallback(() => {\r\n setState({\r\n isLoading: false,\r\n signature: null,\r\n error: null,\r\n isConfirmed: false\r\n })\r\n }, [])\r\n\r\n return {\r\n sendTransaction: executeTransaction,\r\n sendFromQuote,\r\n state,\r\n isConnected: !!effectivePublicKey,\r\n walletAddress: effectivePublicKey?.toBase58() || null,\r\n validateWallet,\r\n resetState,\r\n connection\r\n }\r\n}\r\n","import { useState, useEffect } from 'react'\nimport { useWaitForTransactionReceipt } from 'wagmi'\n\ninterface RpcError {\n name?: string | undefined\n message?: string\n code?: string | number\n}\n\nexport function useRetryAbleTransactionReceipt(\n hash: `0x${string}` | undefined,\n chain_id: number,\n maxRetries = 6\n) {\n const [retryCount, setRetryCount] = useState(0)\n const [shouldRetry, setShouldRetry] = useState(false)\n const [lastError, setLastError] = useState<RpcError | null>(null)\n\n const result = useWaitForTransactionReceipt({\n hash: hash || undefined,\n chainId: chain_id\n })\n\n useEffect(() => {\n // Check if it's an RPC error or other retryable error\n if (result.isError) {\n const error = result.error as RpcError\n setLastError(error)\n\n // Check if error type is RPC error or network error\n const isRpcError =\n error?.name === 'UnknownRpcError' ||\n error?.message?.includes('RPC endpoint') ||\n error?.message?.includes('HTTP client error') ||\n error?.code === 'NETWORK_ERROR' ||\n error?.code === 'TIMEOUT'\n\n // Check if it's user rejected error, such errors should not be retried\n const isUserRejected =\n error?.code === 4001 ||\n error?.message?.includes('user rejected') ||\n error?.message?.includes('rejected the transaction')\n\n // Max retries not reached and it's a retryable error\n if (retryCount < maxRetries && isRpcError && !isUserRejected) {\n console.warn(\n `RPC error detected, preparing retry ${retryCount + 1}/${maxRetries}...`,\n error.message\n )\n\n const delay = 1000 * Math.pow(2, retryCount) // Exponential backoff: 1s, 2s, 4s...\n const timer = setTimeout(() => {\n setRetryCount((prev) => prev + 1)\n setShouldRetry((prev) => !prev) // Trigger retry\n }, delay)\n\n return () => clearTimeout(timer)\n } else if (retryCount >= maxRetries) {\n console.log(\n `Failed to get transaction receipt, max retry count reached (${maxRetries} times)`,\n error\n )\n } else if (isUserRejected) {\n console.log('User rejected transaction, no retry', error)\n }\n }\n }, [result.isError, result.error, retryCount, maxRetries])\n\n // Reset retry count on success\n useEffect(() => {\n if (result.isSuccess) {\n setRetryCount(0)\n setLastError(null)\n }\n }, [result.isSuccess])\n\n // Return directly if no hash\n if (!hash) {\n return {\n ...result,\n retryCount: 0,\n isMaxRetriesExceeded: false,\n lastError: null\n }\n }\n\n return {\n ...result,\n retryCount,\n shouldRetry,\n isMaxRetriesExceeded: result.isError && retryCount >= maxRetries,\n lastError\n }\n}\n","import type { ChainInfo, FeeLevel, SlippagePolicy, TokenInfo } from '../../api/useChainsAndTokens'\r\n\r\nexport const DEFAULT_AUTO_REFETCH_INTERVAL = 30\r\n\r\nexport const nullAddress = '0x0000000000000000000000000000000000000000'\r\n\r\n/**\r\n * ========== ETH-to-ETH Bridge Config ==========\r\n * Values in basis points (bips, 1 = 0.01%)\r\n */\r\n/** ETH-to-ETH cross-chain bridge slippage (bips, 0 = let API decide) */\r\nexport const ETH_TO_ETH_BRIDGE_SLIPPAGE = 0\r\nexport const ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL = 15\r\n\r\nexport const isETHtoETHBridge = (\r\n fromToken: TokenInfo,\r\n toToken: TokenInfo,\r\n chains: ChainInfo[] | null\r\n): boolean => {\r\n if (!chains) return false\r\n\r\n const fromChain = chains.find((c) => c.chain_id === fromToken.chain_id)\r\n const toChain = chains.find((c) => c.chain_id === toToken.chain_id)\r\n\r\n if (!fromChain || !toChain) return false\r\n\r\n const fromIsEth = fromToken.address.toLowerCase() === fromChain.eth_token.toLowerCase()\r\n const toIsEth = toToken.address.toLowerCase() === toChain.eth_token.toLowerCase()\r\n const isDifferentChain = fromToken.chain_id !== toToken.chain_id\r\n\r\n return fromIsEth && toIsEth && isDifferentChain\r\n}\r\n\r\n/**\r\n * ========== Stablecoin Config ==========\r\n */\r\n\r\n/** Stablecoin vs Stablecoin - Same-chain Swap default slippage (bips, 10 = 0.1%) */\r\nexport const STABLECOIN_SAME_CHAIN_SLIPPAGE = 10\r\n\r\n/** Stablecoin vs Stablecoin - Cross-chain Swap default slippage (bips, 50 = 0.5%) */\r\nexport const STABLECOIN_CROSS_CHAIN_SLIPPAGE = 50\r\n\r\n/** Stablecoin pair quote polling interval (seconds), 30s when both are stablecoins */\r\nexport const STABLECOIN_REFRESH_INTERVAL = 30\r\n\r\n/**\r\n * Check if a token is a stablecoin (based on categories field from API)\r\n */\r\nexport function isStablecoin(tokenInfo: TokenInfo | undefined | null): boolean {\r\n if (!tokenInfo?.categories) return false\r\n return tokenInfo.categories.includes('stablecoin')\r\n}\r\n\r\n/**\r\n * Get stablecoin-specific config (returns config only when both tokens are stablecoins).\r\n * If either is not a stablecoin, returns null to fall through to fee_level slippage_policies logic.\r\n */\r\nexport function getStablecoinAdjustment(\r\n fromTokenInfo: TokenInfo | undefined | null,\r\n toTokenInfo: TokenInfo | undefined | null,\r\n isBridge: boolean\r\n): { slippage: number; refreshInterval: number } | null {\r\n if (!fromTokenInfo || !toTokenInfo) return null\r\n\r\n // Both must be stablecoins\r\n if (!isStablecoin(fromTokenInfo) || !isStablecoin(toTokenInfo)) {\r\n return null\r\n }\r\n\r\n // Both stablecoins: same-chain 0.1%, cross-chain 0.5%, refresh 30s\r\n return {\r\n slippage: isBridge\r\n ? STABLECOIN_CROSS_CHAIN_SLIPPAGE\r\n : STABLECOIN_SAME_CHAIN_SLIPPAGE,\r\n refreshInterval: STABLECOIN_REFRESH_INTERVAL\r\n }\r\n}\r\n\r\n/**\r\n * Match slippage_policy by bridge, from_fee_level, and to_fee_level.\r\n */\r\nexport function matchSlippagePolicy(\r\n policies: SlippagePolicy[] | null,\r\n isBridge: boolean,\r\n fromFeeLevel: FeeLevel,\r\n toFeeLevel: FeeLevel\r\n): SlippagePolicy | null {\r\n if (!policies || policies.length === 0) return null\r\n\r\n return (\r\n policies.find(\r\n (p) =>\r\n p.bridge === isBridge &&\r\n p.from_fee_level === fromFeeLevel &&\r\n p.to_fee_level === toFeeLevel\r\n ) || null\r\n )\r\n}\r\n\r\n/**\r\n * Get the refresh interval (seconds) from the matched policy, default 30s.\r\n */\r\nexport function getRefreshInterval(\r\n policy: SlippagePolicy | null\r\n): number {\r\n return policy?.refresh_interval ?? 30\r\n}\r\n\r\n/**\r\n * Get the default slippage (bips) from the matched policy.\r\n * Fallback values: same-chain swap=100, cross-chain swap=200.\r\n */\r\nexport function getDefaultSlippage(\r\n policy: SlippagePolicy | null,\r\n isBridge: boolean,\r\n isSameChain: boolean\r\n): number {\r\n if (policy) return policy.default_slippage\r\n\r\n // Fallback: keep old hardcoded values for compatibility\r\n if (!isBridge && isSameChain) return 100 // swapAutoSlippage\r\n if (isBridge) return 200 // crossChainSwapAutoSlippage (bridge=true)\r\n return 0 // bridgeAutoSlippage - should rarely hit this\r\n}\r\n\r\nexport const hyperliquidChainId = 998\r\n","import { Fraction } from 'bi-fraction'\n\nexport const calculateSlippage = (slippage?: string) => {\n if (!slippage) return\n // console.log('--------######slippage######------:', slippage)\n const slippageFraction = new Fraction(slippage)\n\n if (slippageFraction.eq(0)) return\n return Number(slippageFraction.mul(100).toFixed(0))\n}\n\nexport const formatSlippage = (slippage: number) => {\n return new Fraction(slippage).div(100).toFixed(2)\n}\n","export function debounce<T extends (...args: unknown[]) => void>(\n func: T,\n wait: number\n): (...args: Parameters<T>) => void {\n let timeout: NodeJS.Timeout | null = null\n\n return (...args: Parameters<T>) => {\n if (timeout) clearTimeout(timeout)\n timeout = setTimeout(() => {\n func(...args)\n }, wait)\n }\n}\n","interface SaveDayItem { name: string; chainId: number; day: number }\n\nexport const saveDay: SaveDayItem[] = [\n { name: 'Blast', chainId: 81457, day: 8 },\n { name: 'Bob', chainId: 60808, day: 5 },\n { name: 'Celo', chainId: 42220, day: 7 },\n { name: 'Gravity', chainId: 1625, day: 7 },\n { name: 'Hashkey Chain', chainId: 177, day: 7 },\n { name: 'Ink', chainId: 57073, day: 7 },\n { name: 'Lisk', chainId: 1135, day: 7 },\n { name: 'Mode', chainId: 34443, day: 7 },\n { name: 'opBNB', chainId: 204, day: 7 },\n { name: 'RARI', chainId: 1380012617, day: 8 },\n { name: 'Unichain', chainId: 130, day: 7 },\n { name: 'Worldchain', chainId: 480, day: 7 },\n { name: 'Zora', chainId: 7777777, day: 7 }\n]\n\nexport const lottery_from_chains: number[] = [1868, 56, 8453, 57073, 130, 999, 42161, 196, 59144, 1101]\n","import type {\n Account,\n Chain,\n Client,\n PublicActions,\n RpcSchema,\n Transport,\n WalletActions,\n} from 'viem'\n\n/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction<\n transport extends Transport,\n chain extends Chain | undefined,\n account extends Account | undefined,\n rpcSchema extends RpcSchema | undefined,\n extended extends { [key: string]: unknown },\n client extends Client<transport, chain, account, rpcSchema, extended>,\n parameters,\n returnType,\n>(\n client: client,\n actionFn: (_: any, parameters: parameters) => returnType,\n // Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n // meaning that `actionFn.name` will not always work. For that case, the consumer\n // needs to pass the name explicitly.\n name: keyof PublicActions | keyof WalletActions,\n): (parameters: parameters) => returnType {\n const action_implicit = client[actionFn.name]\n if (typeof action_implicit === 'function')\n return action_implicit as (params: parameters) => returnType\n\n const action_explicit = client[name]\n if (typeof action_explicit === 'function')\n return action_explicit as (params: parameters) => returnType\n\n return (params) => actionFn(client, params)\n}\n","export const version = '2.22.1'\n","import { version } from '../version.js'\n\nexport const getVersion = () => `@wagmi/core@${version}`\n","import type { Compute, OneOf } from '../types/utils.js'\nimport { getVersion } from '../utils/getVersion.js'\n\nexport type ErrorType<name extends string = 'Error'> = Error & { name: name }\n\ntype BaseErrorOptions = Compute<\n OneOf<{ details?: string | undefined } | { cause: BaseError | Error }> & {\n docsPath?: string | undefined\n docsSlug?: string | undefined\n metaMessages?: string[] | undefined\n }\n>\n\nexport type BaseErrorType = BaseError & { name: 'WagmiCoreError' }\nexport class BaseError extends Error {\n details: string\n docsPath?: string | undefined\n metaMessages?: string[] | undefined\n shortMessage: string\n\n override name = 'WagmiCoreError'\n get docsBaseUrl() {\n return 'https://wagmi.sh/core'\n }\n get version() {\n return getVersion()\n }\n\n constructor(shortMessage: string, options: BaseErrorOptions = {}) {\n super()\n\n const details =\n options.cause instanceof BaseError\n ? options.cause.details\n : options.cause?.message\n ? options.cause.message\n : options.details!\n const docsPath =\n options.cause instanceof BaseError\n ? options.cause.docsPath || options.docsPath\n : options.docsPath\n\n this.message = [\n shortMessage || 'An error occurred.',\n '',\n ...(options.metaMessages ? [...options.metaMessages, ''] : []),\n ...(docsPath\n ? [\n `Docs: ${this.docsBaseUrl}${docsPath}.html${\n options.docsSlug ? `#${options.docsSlug}` : ''\n }`,\n ]\n : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: ${this.version}`,\n ].join('\\n')\n\n if (options.cause) this.cause = options.cause\n this.details = details\n this.docsPath = docsPath\n this.metaMessages = options.metaMessages\n this.shortMessage = shortMessage\n }\n\n walk(fn?: (err: unknown) => boolean) {\n return this.#walk(this, fn)\n }\n\n #walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if ((err as Error).cause) return this.#walk((err as Error).cause, fn)\n return err\n }\n}\n","import type { Address } from 'viem'\n\nimport type { Connector } from '../createConfig.js'\nimport { BaseError } from './base.js'\n\nexport type ChainNotConfiguredErrorType = ChainNotConfiguredError & {\n name: 'ChainNotConfiguredError'\n}\nexport class ChainNotConfiguredError extends BaseError {\n override name = 'ChainNotConfiguredError'\n constructor() {\n super('Chain not configured.')\n }\n}\n\nexport type ConnectorAlreadyConnectedErrorType =\n ConnectorAlreadyConnectedError & {\n name: 'ConnectorAlreadyConnectedError'\n }\nexport class ConnectorAlreadyConnectedError extends BaseError {\n override name = 'ConnectorAlreadyConnectedError'\n constructor() {\n super('Connector already connected.')\n }\n}\n\nexport type ConnectorNotConnectedErrorType = ConnectorNotConnectedError & {\n name: 'ConnectorNotConnectedError'\n}\nexport class ConnectorNotConnectedError extends BaseError {\n override name = 'ConnectorNotConnectedError'\n constructor() {\n super('Connector not connected.')\n }\n}\n\nexport type ConnectorNotFoundErrorType = ConnectorNotFoundError & {\n name: 'ConnectorNotFoundError'\n}\nexport class ConnectorNotFoundError extends BaseError {\n override name = 'ConnectorNotFoundError'\n constructor() {\n super('Connector not found.')\n }\n}\n\nexport type ConnectorAccountNotFoundErrorType =\n ConnectorAccountNotFoundError & {\n name: 'ConnectorAccountNotFoundError'\n }\nexport class ConnectorAccountNotFoundError extends BaseError {\n override name = 'ConnectorAccountNotFoundError'\n constructor({\n address,\n connector,\n }: {\n address: Address\n connector: Connector\n }) {\n super(`Account \"${address}\" not found for connector \"${connector.name}\".`)\n }\n}\n\nexport type ConnectorChainMismatchErrorType = ConnectorAccountNotFoundError & {\n name: 'ConnectorChainMismatchError'\n}\nexport class ConnectorChainMismatchError extends BaseError {\n override name = 'ConnectorChainMismatchError'\n constructor({\n connectionChainId,\n connectorChainId,\n }: {\n connectionChainId: number\n connectorChainId: number\n }) {\n super(\n `The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`,\n {\n metaMessages: [\n `Current Chain ID: ${connectorChainId}`,\n `Expected Chain ID: ${connectionChainId}`,\n ],\n },\n )\n }\n}\n\nexport type ConnectorUnavailableReconnectingErrorType =\n ConnectorUnavailableReconnectingError & {\n name: 'ConnectorUnavailableReconnectingError'\n }\nexport class ConnectorUnavailableReconnectingError extends BaseError {\n override name = 'ConnectorUnavailableReconnectingError'\n constructor({ connector }: { connector: { name: string } }) {\n super(`Connector \"${connector.name}\" unavailable while reconnecting.`, {\n details: [\n 'During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.',\n 'All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.',\n 'This error commonly occurs for connectors that asynchronously inject after reconnection has already started.',\n ].join(' '),\n })\n }\n}\n","import {\n type Account,\n type Address,\n type BaseErrorType,\n type Client,\n createClient,\n custom,\n} from 'viem'\nimport { getAddress, parseAccount } from 'viem/utils'\n\nimport type { Config, Connection } from '../createConfig.js'\nimport type { ErrorType } from '../errors/base.js'\nimport {\n ConnectorAccountNotFoundError,\n type ConnectorAccountNotFoundErrorType,\n ConnectorChainMismatchError,\n type ConnectorChainMismatchErrorType,\n ConnectorNotConnectedError,\n type ConnectorNotConnectedErrorType,\n ConnectorUnavailableReconnectingError,\n type ConnectorUnavailableReconnectingErrorType,\n} from '../errors/config.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute } from '../types/utils.js'\n\nexport type GetConnectorClientParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n ChainIdParameter<config, chainId> &\n ConnectorParameter & {\n /**\n * Account to use for the client.\n *\n * - `Account | Address`: An Account MUST exist on the connector.\n * - `null`: Account MAY NOT exist on the connector. This is useful for\n * actions that can infer the account from the connector (e.g. sending a\n * call without a connected account – the user will be prompted to select\n * an account within the wallet).\n */\n account?: Address | Account | null | undefined\n /**\n * Assert that the current chain ID matches the connector's chain ID.\n */\n assertChainId?: boolean | undefined\n }\n>\n\nexport type GetConnectorClientReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n Client<\n config['_internal']['transports'][chainId],\n Extract<config['chains'][number], { id: chainId }>,\n Account\n >\n>\n\nexport type GetConnectorClientErrorType =\n | ConnectorAccountNotFoundErrorType\n | ConnectorChainMismatchErrorType\n | ConnectorNotConnectedErrorType\n | ConnectorUnavailableReconnectingErrorType\n // base\n | BaseErrorType\n | ErrorType\n\n/** https://wagmi.sh/core/api/actions/getConnectorClient */\nexport async function getConnectorClient<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: GetConnectorClientParameters<config, chainId> = {},\n): Promise<GetConnectorClientReturnType<config, chainId>> {\n const { assertChainId = true } = parameters\n\n // Get connection\n let connection: Connection | undefined\n if (parameters.connector) {\n const { connector } = parameters\n if (\n config.state.status === 'reconnecting' &&\n !connector.getAccounts &&\n !connector.getChainId\n )\n throw new ConnectorUnavailableReconnectingError({ connector })\n\n const [accounts, chainId] = await Promise.all([\n connector.getAccounts().catch((e) => {\n if (parameters.account === null) return []\n throw e\n }),\n connector.getChainId(),\n ])\n connection = {\n accounts: accounts as readonly [Address, ...Address[]],\n chainId,\n connector,\n }\n } else connection = config.state.connections.get(config.state.current!)\n if (!connection) throw new ConnectorNotConnectedError()\n\n const chainId = parameters.chainId ?? connection.chainId\n\n // Check connector using same chainId as connection\n const connectorChainId = await connection.connector.getChainId()\n if (assertChainId && connectorChainId !== chainId)\n throw new ConnectorChainMismatchError({\n connectionChainId: chainId,\n connectorChainId,\n })\n\n // If connector has custom `getClient` implementation\n type Return = GetConnectorClientReturnType<config, chainId>\n const connector = connection.connector\n if (connector.getClient)\n return connector.getClient({ chainId }) as unknown as Return\n\n // Default using `custom` transport\n const account = parseAccount(parameters.account ?? connection.accounts[0]!)\n if (account) account.address = getAddress(account.address) // TODO: Checksum address as part of `parseAccount`?\n\n // If account was provided, check that it exists on the connector\n if (\n parameters.account &&\n !connection.accounts.some(\n (x) => x.toLowerCase() === account.address.toLowerCase(),\n )\n )\n throw new ConnectorAccountNotFoundError({\n address: account.address,\n connector,\n })\n\n const chain = config.chains.find((chain) => chain.id === chainId)\n const provider = (await connection.connector.getProvider({ chainId })) as {\n request(...args: any): Promise<any>\n }\n\n return createClient({\n account,\n chain,\n name: 'Connector Client',\n transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }),\n }) as Return\n}\n","import type { Abi, ContractFunctionArgs, ContractFunctionName } from 'viem'\nimport {\n type ReadContractErrorType as viem_ReadContractErrorType,\n type ReadContractParameters as viem_ReadContractParameters,\n type ReadContractReturnType as viem_ReadContractReturnType,\n readContract as viem_readContract,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type ReadContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n config extends Config = Config,\n> = viem_ReadContractParameters<abi, functionName, args> &\n ChainIdParameter<config>\n\nexport type ReadContractReturnType<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'pure' | 'view'\n > = ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<\n abi,\n 'pure' | 'view',\n functionName\n > = ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n> = viem_ReadContractReturnType<abi, functionName, args>\n\nexport type ReadContractErrorType = viem_ReadContractErrorType\n\n/** https://wagmi.sh/core/api/actions/readContract */\nexport function readContract<\n config extends Config,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'pure' | 'view'>,\n args extends ContractFunctionArgs<abi, 'pure' | 'view', functionName>,\n>(\n config: config,\n parameters: ReadContractParameters<abi, functionName, args, config>,\n): Promise<ReadContractReturnType<abi, functionName, args>> {\n const { chainId, ...rest } = parameters\n const client = config.getClient({ chainId })\n const action = getAction(client, viem_readContract, 'readContract')\n return action(rest as any)\n}\n","import type { Chain } from 'viem'\nimport { hexToString } from 'viem'\nimport {\n call,\n getTransaction,\n type WaitForTransactionReceiptErrorType as viem_WaitForTransactionReceiptErrorType,\n type WaitForTransactionReceiptParameters as viem_WaitForTransactionReceiptParameters,\n type WaitForTransactionReceiptReturnType as viem_WaitForTransactionReceiptReturnType,\n waitForTransactionReceipt as viem_waitForTransactionReceipt,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { SelectChains } from '../types/chain.js'\nimport type { ChainIdParameter } from '../types/properties.js'\nimport type { Compute, IsNarrowable } from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\n\nexport type WaitForTransactionReceiptParameters<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n> = Compute<\n viem_WaitForTransactionReceiptParameters & ChainIdParameter<config, chainId>\n>\n\nexport type WaitForTransactionReceiptReturnType<\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n ///\n chains extends readonly Chain[] = SelectChains<config, chainId>,\n> = Compute<\n {\n [key in keyof chains]: viem_WaitForTransactionReceiptReturnType<\n IsNarrowable<chains[key], Chain> extends true ? chains[key] : undefined\n > & { chainId: chains[key]['id'] }\n }[number]\n>\n\nexport type WaitForTransactionReceiptErrorType =\n viem_WaitForTransactionReceiptErrorType\n\nexport async function waitForTransactionReceipt<\n config extends Config,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: WaitForTransactionReceiptParameters<config, chainId>,\n): Promise<WaitForTransactionReceiptReturnType<config, chainId>> {\n const { chainId, timeout = 0, ...rest } = parameters\n\n const client = config.getClient({ chainId })\n const action = getAction(\n client,\n viem_waitForTransactionReceipt,\n 'waitForTransactionReceipt',\n )\n const receipt = await action({ ...rest, timeout })\n\n if (receipt.status === 'reverted') {\n const action_getTransaction = getAction(\n client,\n getTransaction,\n 'getTransaction',\n )\n const { from: account, ...txn } = await action_getTransaction({\n hash: receipt.transactionHash,\n })\n const action_call = getAction(client, call, 'call')\n const code = await action_call({\n ...(txn as any),\n account,\n data: txn.input,\n gasPrice: txn.type !== 'eip1559' ? txn.gasPrice : undefined,\n maxFeePerGas: txn.type === 'eip1559' ? txn.maxFeePerGas : undefined,\n maxPriorityFeePerGas:\n txn.type === 'eip1559' ? txn.maxPriorityFeePerGas : undefined,\n })\n const reason = code?.data\n ? hexToString(`0x${code.data.substring(138)}`)\n : 'unknown reason'\n throw new Error(reason)\n }\n\n return {\n ...receipt,\n chainId: client.chain.id,\n } as WaitForTransactionReceiptReturnType<config, chainId>\n}\n","import type {\n Abi,\n Account,\n Chain,\n Client,\n ContractFunctionArgs,\n ContractFunctionName,\n} from 'viem'\nimport {\n type WriteContractErrorType as viem_WriteContractErrorType,\n type WriteContractParameters as viem_WriteContractParameters,\n type WriteContractReturnType as viem_WriteContractReturnType,\n writeContract as viem_writeContract,\n} from 'viem/actions'\n\nimport type { Config } from '../createConfig.js'\nimport type { BaseErrorType, ErrorType } from '../errors/base.js'\nimport type { SelectChains } from '../types/chain.js'\nimport type {\n ChainIdParameter,\n ConnectorParameter,\n} from '../types/properties.js'\nimport type { Compute, UnionCompute } from '../types/utils.js'\nimport { getAction } from '../utils/getAction.js'\nimport {\n type GetConnectorClientErrorType,\n getConnectorClient,\n} from './getConnectorClient.js'\n\nexport type WriteContractParameters<\n abi extends Abi | readonly unknown[] = Abi,\n functionName extends ContractFunctionName<\n abi,\n 'nonpayable' | 'payable'\n > = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n > = ContractFunctionArgs<abi, 'nonpayable' | 'payable', functionName>,\n config extends Config = Config,\n chainId extends\n config['chains'][number]['id'] = config['chains'][number]['id'],\n ///\n allFunctionNames = ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n chains extends readonly Chain[] = SelectChains<config, chainId>,\n> = UnionCompute<\n {\n // TODO: Should use `UnionStrictOmit<..., 'chain'>` on `viem_WriteContractParameters` result instead\n // temp workaround that doesn't affect runtime behavior for https://github.com/wevm/wagmi/issues/3981\n [key in keyof chains]: viem_WriteContractParameters<\n abi,\n functionName,\n args,\n chains[key],\n Account,\n chains[key],\n allFunctionNames\n >\n }[number] &\n Compute<ChainIdParameter<config, chainId>> &\n ConnectorParameter & {\n /** @deprecated */\n __mode?: 'prepared'\n }\n>\n\nexport type WriteContractReturnType = viem_WriteContractReturnType\n\nexport type WriteContractErrorType =\n // getConnectorClient()\n | GetConnectorClientErrorType\n // base\n | BaseErrorType\n | ErrorType\n // viem\n | viem_WriteContractErrorType\n\n/** https://wagmi.sh/core/api/actions/writeContract */\nexport async function writeContract<\n config extends Config,\n const abi extends Abi | readonly unknown[],\n functionName extends ContractFunctionName<abi, 'nonpayable' | 'payable'>,\n args extends ContractFunctionArgs<\n abi,\n 'nonpayable' | 'payable',\n functionName\n >,\n chainId extends config['chains'][number]['id'],\n>(\n config: config,\n parameters: WriteContractParameters<abi, functionName, args, config, chainId>,\n): Promise<WriteContractReturnType> {\n const { account, chainId, connector, ...request } = parameters\n\n let client: Client\n if (typeof account === 'object' && account?.type === 'local')\n client = config.getClient({ chainId })\n else\n client = await getConnectorClient(config, {\n account: account ?? undefined,\n assertChainId: false,\n chainId,\n connector,\n })\n\n const action = getAction(client, viem_writeContract, 'writeContract')\n const hash = await action({\n ...(request as any),\n ...(account ? { account } : {}),\n chain: chainId ? { id: chainId } : null,\n })\n\n return hash\n}\n","import {\r\n writeContract,\r\n waitForTransactionReceipt,\r\n readContract\r\n} from '@wagmi/core'\r\nimport { erc20Abi } from 'viem'\r\nimport { Config } from 'wagmi'\r\n\r\ninterface Props {\r\n chainId: number\r\n tokenAddress: `0x${string}`\r\n owner?: `0x${string}`\r\n spender?: `0x${string}`\r\n}\r\n\r\ninterface PropsWithAmount extends Props {\r\n amount: bigint\r\n}\r\n\r\nexport const getErc20Approval = (config: Config) => {\r\n const getAllowance = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender\r\n }: Props) => {\r\n if (!owner || !spender) {\r\n return BigInt(0)\r\n }\r\n const allowance = await readContract(config, {\r\n abi: erc20Abi,\r\n address: tokenAddress,\r\n functionName: 'allowance',\r\n chainId,\r\n args: [owner, spender]\r\n })\r\n return allowance\r\n }\r\n\r\n const isNeedApprove = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n }: PropsWithAmount) => {\r\n if (!owner || !spender || !tokenAddress) {\r\n return false\r\n }\r\n const allowance = await getAllowance({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender\r\n })\r\n return allowance < amount\r\n }\r\n\r\n const approve = async ({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n }: PropsWithAmount) => {\r\n if (!owner || !spender || !tokenAddress) {\r\n return false\r\n }\r\n const tx = await writeContract(config, {\r\n abi: erc20Abi,\r\n address: tokenAddress,\r\n functionName: 'approve',\r\n chainId,\r\n args: [spender, amount]\r\n })\r\n const receipt = await waitForTransactionReceipt(config, {\r\n hash: tx,\r\n chainId\r\n })\r\n if (receipt.status === 'success') {\r\n return true\r\n } else {\r\n return false\r\n }\r\n }\r\n\r\n return {\r\n getAllowance,\r\n isNeedApprove,\r\n approve\r\n }\r\n}\r\n","import { Fraction } from 'bi-fraction'\r\n\r\nexport {\r\n DEFAULT_AUTO_REFETCH_INTERVAL,\r\n nullAddress,\r\n ETH_TO_ETH_BRIDGE_SLIPPAGE,\r\n ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL,\r\n isETHtoETHBridge,\r\n getStablecoinAdjustment,\r\n matchSlippagePolicy,\r\n getDefaultSlippage,\r\n getRefreshInterval,\r\n hyperliquidChainId\r\n} from './consts'\r\nexport { calculateSlippage, formatSlippage } from './slippage'\r\nexport { debounce } from './debounce'\r\nexport { saveDay, lottery_from_chains } from './defaultData'\r\nexport { retry } from './retry'\r\nexport { getErc20Approval } from './getErc20Approval'\r\n\r\nimport type { TokenInfo, SlippagePolicy } from '../../api'\r\n\r\n// Stubs for exports used by component code\r\nexport const getOrderedTokensChainNormal = (tokens: any[]) => tokens\r\nexport const getOrderedTokensChainSearch = (tokens: any[]) => tokens\r\nexport const getOrderedTokensAssets = (tokens: any[]) => tokens\r\nexport const mergeAndDeduplicate = <T>(a: T[], b: T[], key: string = ''): T[] => [...a, ...b]\r\n\r\n/** Stablecoin vs Stablecoin - Same-chain warn slippage (bips, 5 = 0.05%) */\r\nconst STABLECOIN_SAME_CHAIN_WARN_SLIPPAGE = 5\r\n/** Stablecoin vs Stablecoin - Cross-chain warn slippage (bips, 20 = 0.2%) */\r\nconst STABLECOIN_CROSS_CHAIN_WARN_SLIPPAGE = 20\r\n/** High slippage warning threshold (bips, 300 = 3%) */\r\nexport const HIGH_SLIPPAGE_WARN_THRESHOLD = 300\r\n\r\n/** Check if a token is a stablecoin */\r\nexport function isStablecoin(tokenInfo: TokenInfo | undefined | null): boolean {\r\n if (!tokenInfo?.categories) return false\r\n return tokenInfo.categories.includes('stablecoin')\r\n}\r\n\r\n/**\r\n * Get the low slippage warning threshold (bips). Values below this trigger a warning.\r\n * Priority: ETH-to-ETH > stablecoin > fee_level policy > 0 (no warning)\r\n */\r\nexport function getLowSlippageWarnThreshold(\r\n fromTokenInfo: TokenInfo | undefined | null,\r\n toTokenInfo: TokenInfo | undefined | null,\r\n matchedPolicy: SlippagePolicy | null,\r\n isETHtoETH = false\r\n): number {\r\n if (!fromTokenInfo || !toTokenInfo) return 0\r\n if (isETHtoETH) return 0\r\n\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n\r\n if (isStablecoin(fromTokenInfo) && isStablecoin(toTokenInfo)) {\r\n return isBridge\r\n ? STABLECOIN_CROSS_CHAIN_WARN_SLIPPAGE\r\n : STABLECOIN_SAME_CHAIN_WARN_SLIPPAGE\r\n }\r\n\r\n if (matchedPolicy?.min_slippage !== undefined) {\r\n return matchedPolicy.min_slippage\r\n }\r\n\r\n return 0\r\n}\r\n\r\n// Re-export formatTokenAmount from src/utils\r\nexport { formatTokenAmount } from '../../utils'\r\n\r\nexport const formatDecimalNum = (val: string | number | undefined, fixed = 6) => {\r\n if (val === undefined || val === null || val === '') return ''\r\n const num = Number(val)\r\n if (isNaN(num)) return ''\r\n return num.toFixed(fixed).replace(/\\.?0+$/, '')\r\n}\r\n\r\nexport const formatSmallNumber = (val: string | number): string => {\r\n const num = Number(val)\r\n if (isNaN(num)) return '0'\r\n if (num === 0) return '0'\r\n if (num >= 0.000001) {\r\n return num.toFixed(6).replace(/\\.?0+$/, '')\r\n }\r\n return '<0.000001'\r\n}\r\n\r\nexport const toSubscriptNumber = (n: number): string => {\r\n const subscripts = ['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']\r\n return String(n)\r\n .split('')\r\n .map((d) => subscripts[Number(d)] || d)\r\n .join('')\r\n}\r\n\r\nexport const extractVPathSegment = (): string => {\r\n if (typeof window === 'undefined') return ''\r\n const pathname = window.location.pathname\r\n const match = pathname.match(/^\\/v\\/([a-zA-Z0-9-+]+)/)\r\n return match ? match[1] : ''\r\n}\r\n\r\nexport const isValueInArray = <T>(value: T, array: T[]): boolean => {\r\n return array.includes(value)\r\n}\r\n\r\nexport const toUSDCBigint = (value: string, decimals: number): bigint => {\r\n try {\r\n const fraction = new Fraction(value)\r\n return BigInt(fraction.shl(decimals).toFixed(0))\r\n } catch {\r\n return BigInt(0)\r\n }\r\n}\r\n\r\nexport function toBigInt(\r\n balance: string | number,\r\n decimals: number = 6\r\n): bigint {\r\n const balanceStr = typeof balance === 'number' ? balance.toString() : balance\r\n const [integerPart, decimalPart = ''] = balanceStr.split('.')\r\n\r\n const integerBigInt = BigInt(integerPart)\r\n const neededDecimalDigits = Math.min(decimalPart.length, decimals)\r\n const trimmedDecimal = decimalPart.slice(0, neededDecimalDigits)\r\n const paddedDecimal = trimmedDecimal.padEnd(decimals, '0')\r\n const decimalBigInt = BigInt(paddedDecimal)\r\n\r\n const multiplier = BigInt(10 ** decimals)\r\n return integerBigInt * multiplier + decimalBigInt\r\n}\r\n","// Auto-generated inline SVG React components\n// SVG inner HTML is rendered directly inside <svg> elements\n// Supports currentColor via SVG's native color inheritance\nimport { createElement } from 'react'\n\nexport function BackIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 41 41',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M8.42041 20.4997L7.7133 19.7926L7.0062 20.4997L7.7133 21.2068L8.42041 20.4997ZM28.4204 21.4997C28.9727 21.4997 29.4204 21.052 29.4204 20.4997C29.4204 19.9474 28.9727 19.4997 28.4204 19.4997V21.4997ZM15.0871 13.833L14.38 13.1259L7.7133 19.7926L8.42041 20.4997L9.12752 21.2068L15.7942 14.5401L15.0871 13.833ZM8.42041 20.4997L7.7133 21.2068L14.38 27.8734L15.0871 27.1663L15.7942 26.4592L9.12752 19.7926L8.42041 20.4997ZM8.42041 20.4997V21.4997H28.4204V20.4997V19.4997H8.42041V20.4997Z\"\n fill=\"currentColor\" />` }\n })\n}\n\nexport function ArrowRightIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 46 47',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"23.0434\" cy=\"23.5005\" r=\"22.9565\" fill=\"currentColor\" />\n <path\n 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\"\n fill=\"white\" />` }\n })\n}\n\nexport function ArrowDownIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 28 28',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M22.1663 9.91699L13.9997 18.0837L5.83301 9.91699\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" fill=\"none\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function ArrowFillRightIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M15.6694 11.3079L9.41205 6.09346C8.89099 5.65924 8.0999 6.02976 8.0999 6.70803V16.292C8.0999 16.9702 8.89099 17.3408 9.41205 16.9065L15.6694 11.6921C15.7894 11.5921 15.7894 11.4079 15.6694 11.3079Z\"\n fill=\"#8143FF\" />` }\n })\n}\n\nexport function LinkIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M6.58694 4.5C6.58694 4.22385 6.36309 4 6.08693 4H3.08692C2.53462 4 2.08691 4.4477 2.08691 5V11.5C2.08691 12.0523 2.53462 12.5 3.08692 12.5H9.58695C10.1393 12.5 10.587 12.0523 10.587 11.5V8.5C10.587 8.22385 10.3631 8 10.087 8C9.8108 8 9.58695 8.22385 9.58695 8.5V11.5H3.08692V5H6.08693C6.36309 5 6.58694 4.77615 6.58694 4.5Z\"\n fill=\"#81728C\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M10.3798 3.5H8.58689C8.31074 3.5 8.08689 3.27615 8.08689 3C8.08689 2.72385 8.31074 2.5 8.58689 2.5H11.5869C11.8631 2.5 12.0869 2.72385 12.0869 3V6C12.0869 6.27615 11.8631 6.5 11.5869 6.5C11.3108 6.5 11.0869 6.27615 11.0869 6V4.2071L6.29398 9C6.09873 9.19525 5.78214 9.19525 5.58688 9C5.39163 8.80475 5.39163 8.48815 5.58688 8.2929L10.3798 3.5Z\"\n fill=\"#81728C\" />` }\n })\n}\n\nexport function TimeIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 14',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<g clip-path=\"url(#clip0_2125_393)\">\n <path d=\"M7 14C10.866 14 14 10.866 14 7C14 3.13401 10.866 0 7 0C3.13401 0 0 3.13401 0 7C0 10.866 3.13401 14 7 14Z\"\n fill=\"#00CBB3\" />\n <path d=\"M7 4.5V7L9.54 9.96\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </g>\n <defs>\n <clipPath id=\"clip0_2125_393\">\n <rect width=\"14\" height=\"14\" fill=\"white\" />\n </clipPath>\n </defs>` }\n })\n}\n\nexport function DateIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<rect x=\"0.0869141\" y=\"0.5\" width=\"14\" height=\"14\" rx=\"7\" fill=\"#00C4FF\" />\n <path\n d=\"M3.08691 6.83301C3.08691 5.8902 3.08691 5.41879 3.37981 5.1259C3.6727 4.83301 4.1441 4.83301 5.08691 4.83301H9.08693C10.0297 4.83301 10.5011 4.83301 10.794 5.1259C11.0869 5.41879 11.0869 5.8902 11.0869 6.83301V8.49968C11.0869 9.44248 11.0869 9.91389 10.794 10.2068C10.5011 10.4997 10.0297 10.4997 9.08694 10.4997H5.08692C4.14411 10.4997 3.6727 10.4997 3.37981 10.2068C3.08691 9.91389 3.08691 9.44248 3.08691 8.49967V6.83301Z\"\n stroke=\"white\" />\n <path d=\"M3.53125 7.05566H10.6424\" stroke=\"white\" stroke-linecap=\"round\" />\n <path d=\"M5.08691 4.5L5.08691 5.27778\" stroke=\"white\" stroke-linecap=\"round\" />\n <path d=\"M9.08691 4.5L9.08691 5.27778\" stroke=\"white\" stroke-linecap=\"round\" />` }\n })\n}\n\nexport function MoneyIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 15 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<rect x=\"0.0869141\" y=\"0.5\" width=\"14\" height=\"14\" rx=\"7\" fill=\"#FFAE00\" />\n <path\n d=\"M10.6254 5.88477H3.54845C3.29355 5.88477 3.08691 6.09141 3.08691 6.3463V10.0386C3.08691 10.2935 3.29355 10.5002 3.54845 10.5002H10.6254C10.8803 10.5002 11.0869 10.2935 11.0869 10.0386V6.3463C11.0869 6.09141 10.8803 5.88477 10.6254 5.88477Z\"\n stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M8.47138 5.88462V4.96154C8.47138 4.83913 8.42275 4.72174 8.3362 4.63518C8.24964 4.54863 8.13225 4.5 8.00984 4.5H6.16369C6.04128 4.5 5.92389 4.54863 5.83733 4.63518C5.75078 4.72174 5.70215 4.83913 5.70215 4.96154V5.88462\"\n stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M7.67619 7.57723C7.65593 7.5199 7.62466 7.46777 7.58493 7.42338C7.50042 7.32895 7.37761 7.26953 7.24091 7.26953H6.88366C6.65613 7.26953 6.47168 7.45399 6.47168 7.68152C6.47168 7.87513 6.60649 8.04261 6.79562 8.08399L7.33954 8.20297C7.55143 8.24932 7.70246 8.43709 7.70246 8.65399C7.70246 8.90887 7.49582 9.11569 7.24091 9.11569H6.93322C6.73226 9.11569 6.5613 8.98724 6.49794 8.808\"\n stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.08691 7.26916V6.80762\" stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M7.08691 9.57677V9.11523\" stroke=\"white\" stroke-width=\"0.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function RewardsIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 15',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<g clip-path=\"url(#clip0_2496_20928)\">\n<path d=\"M7 14.7451C10.866 14.7451 14 11.6111 14 7.74512C14 3.87912 10.866 0.745117 7 0.745117C3.13401 0.745117 0 3.87912 0 7.74512C0 11.6111 3.13401 14.7451 7 14.7451Z\" fill=\"#FF4267\"/>\n<path d=\"M4.875 7.62012L6.75 9.49512L8.625 7.62012M4.5 5.74512L3 7.99512L6.75 11.7451L10.5 7.99512L9 5.74512H4.5Z\" stroke=\"white\" stroke-linecap=\"round\"/>\n</g>\n<defs>\n<clipPath id=\"clip0_2496_20928\">\n<rect width=\"14\" height=\"14\" fill=\"white\" transform=\"translate(0 0.745117)\"/>\n</clipPath>\n</defs>` }\n })\n}\n\nexport function PlusIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 25 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M17.5 3C19.7091 3 21.5 4.79086 21.5 7V17C21.5 19.2091 19.7091 21 17.5 21H7.5C5.29086 21 3.5 19.2091 3.5 17V7C3.5 4.79086 5.29086 3 7.5 3H17.5ZM11.5 7V11H7.5V13H11.5V17H13.5V13H17.5V11H13.5V7H11.5Z\"\n fill=\"white\" />` }\n })\n}\n\nexport function RoutesIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5H6.79c-.39-.88-1.26-1.5-2.29-1.5a2.5 2.5 0 0 0 0 5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5a2.5 2.5 0 0 0 0-5z\"\n fill=\"rgba(135,111,143,1)\"\n ></path>` }\n })\n}\n\nexport function InfoIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 14 14',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M7 0C10.8655 0 14 3.13373 14 7C14 10.8655 10.8655 14 7 14C3.13373 14 0 10.8655 0 7C0 3.13373 3.13373 0 7 0Z\"\n fill=\"currentColor\" />\n <path d=\"M6.99654 4.12793V7.47204\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.99569 9.87252H7.00326\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function WalletIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n d=\"M21.4504 13.6398V14.6398C21.4504 14.7707 21.3991 14.8964 21.3075 14.9899C21.2159 15.0833 21.0912 15.1372 20.9604 15.1398H19.5004C18.9704 15.1398 18.4904 14.7498 18.4504 14.2298C18.4204 13.9198 18.5404 13.6298 18.7404 13.4298C18.8309 13.336 18.9398 13.2619 19.0602 13.212C19.1806 13.1621 19.31 13.1375 19.4404 13.1398H20.9504C21.2404 13.1498 21.4504 13.3698 21.4504 13.6398Z\"\n fill=\"currentColor\" />\n <path\n d=\"M17.9902 12.69C17.4902 13.18 17.2502 13.91 17.4502 14.67C17.7102 15.6 18.6202 16.19 19.5802 16.19H20.4502C21.0002 16.19 21.4502 16.64 21.4502 17.19V17.38C21.4502 19.45 19.7602 21.14 17.6902 21.14H6.2102C4.1402 21.14 2.4502 19.45 2.4502 17.38V10.65C2.4502 9.41996 3.0402 8.32996 3.9502 7.64996C4.5802 7.16996 5.3602 6.88996 6.2102 6.88996H17.6902C19.7602 6.88996 21.4502 8.57996 21.4502 10.65V11.09C21.4502 11.64 21.0002 12.09 20.4502 12.09H19.4302C18.8702 12.09 18.3602 12.31 17.9902 12.69ZM16.2002 4.81996C16.4702 5.08996 16.2402 5.50996 15.8602 5.50996L8.1802 5.49996C7.7402 5.49996 7.5102 4.95996 7.8302 4.64996L9.4502 3.01996C10.1102 2.36654 11.0014 2 11.9302 2C12.8589 2 13.7502 2.36654 14.4102 3.01996L16.1602 4.78996C16.1702 4.79996 16.1902 4.80996 16.2002 4.81996Z\"\n fill=\"currentColor\" />` }\n })\n}\n\nexport function SwitchIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 46 46',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"22.9565\" cy=\"22.9565\" r=\"22.9565\" fill=\"currentColor\" />\n <path\n d=\"M20.131 14.002C20.5837 14.002 20.9553 14.3761 21.0001 14.8555L21.005 14.9521V31.3359C21.005 31.861 20.6139 32.287 20.131 32.2871C19.8537 32.287 19.6066 32.1466 19.4464 31.9277C19.4182 31.9018 19.3901 31.8747 19.3634 31.8457L14.7599 26.8398C14.3363 26.3792 14.2691 25.7043 14.6105 25.333C14.9519 24.9618 15.5725 25.0348 15.9962 25.4951L19.256 29.0391V14.9521L19.2609 14.8555C19.3057 14.3761 19.6783 14.0021 20.131 14.002ZM26.0411 14C26.3154 14.0001 26.5605 14.1377 26.7208 14.3525C26.7508 14.3798 26.7804 14.4087 26.8087 14.4395L31.4122 19.4453C31.8358 19.906 31.903 20.5808 31.5616 20.9521C31.2201 21.3232 30.5996 21.2504 30.1759 20.79L26.9161 17.2461V31.335L26.9112 31.4316C26.8664 31.911 26.4938 32.285 26.0411 32.2852C25.5885 32.2849 25.2168 31.9109 25.172 31.4316L25.1671 31.335V14.9512C25.1671 14.4262 25.5584 14.0003 26.0411 14Z\"\n fill=\"white\" />` }\n })\n}\n\nexport function SettingsIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 21 22',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M18.4138 7.00571L17.831 5.99429C17.3379 5.13846 16.2451 4.84323 15.3881 5.33429V5.33429C14.9802 5.5746 14.4934 5.64278 14.0351 5.52379C13.5768 5.4048 13.1847 5.10842 12.9452 4.7C12.7912 4.4404 12.7084 4.14472 12.7052 3.84286V3.84286C12.7191 3.35889 12.5366 2.88991 12.1991 2.54275C11.8616 2.19558 11.398 1.9998 10.9138 2H9.73952C9.26519 1.99999 8.81041 2.18901 8.47581 2.52521C8.14121 2.86142 7.95438 3.3171 7.95666 3.79143V3.79143C7.94261 4.77075 7.14466 5.55724 6.16524 5.55714C5.86337 5.55401 5.56769 5.47122 5.30809 5.31714V5.31714C4.4511 4.82608 3.35833 5.12132 2.86524 5.97714L2.23952 7.00571C1.74702 7.86047 2.03824 8.95254 2.89095 9.44857V9.44857C3.44523 9.76858 3.78667 10.36 3.78667 11C3.78667 11.64 3.44523 12.2314 2.89095 12.5514V12.5514C2.03932 13.0441 1.74778 14.1335 2.23952 14.9857V14.9857L2.83095 16.0057C3.06199 16.4226 3.44963 16.7302 3.90809 16.8605C4.36656 16.9908 4.85805 16.9331 5.27381 16.7V16.7C5.68252 16.4615 6.16956 16.3962 6.62668 16.5185C7.0838 16.6408 7.47312 16.9407 7.70809 17.3514C7.86217 17.611 7.94496 17.9067 7.94809 18.2086V18.2086C7.94809 19.198 8.75014 20 9.73952 20H10.9138C11.8998 20 12.7005 19.2032 12.7052 18.2171V18.2171C12.7029 17.7413 12.8909 17.2843 13.2274 16.9479C13.5639 16.6114 14.0208 16.4234 14.4967 16.4257C14.7978 16.4338 15.0923 16.5162 15.3538 16.6657V16.6657C16.2086 17.1582 17.3006 16.867 17.7967 16.0143V16.0143L18.4138 14.9857C18.6527 14.5757 18.7183 14.0874 18.596 13.6288C18.4737 13.1703 18.1737 12.7795 17.7624 12.5429V12.5429C17.3511 12.3062 17.051 11.9154 16.9288 11.4569C16.8065 10.9984 16.8721 10.51 17.111 10.1C17.2663 9.82879 17.4912 9.60391 17.7624 9.44857V9.44857C18.61 8.95281 18.9005 7.86712 18.4138 7.01429V7.01429V7.00571Z\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" />\n <circle cx=\"10.3309\" cy=\"10.9998\" r=\"2.46857\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\" stroke=\"currentColor\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function CloseIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M14.3955 9.59489L9.60352 14.3869\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path d=\"M14.3976 14.3898L9.60156 9.5928\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n d=\"M16.335 2.7502H7.66598C4.64498 2.7502 2.75098 4.8892 2.75098 7.9162V16.0842C2.75098 19.1112 4.63598 21.2502 7.66598 21.2502H16.334C19.365 21.2502 21.251 19.1112 21.251 16.0842V7.9162C21.251 4.8892 19.365 2.7502 16.335 2.7502Z\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\" />` }\n })\n}\n\nexport function AllIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 32 32',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M16 5.333c8.1 0 14.667 3.581 14.667 8v5.333c0 4.419-6.567 8-14.667 8-7.956 0-14.432-3.455-14.66-7.764l-0.007-0.236v-5.333c0-4.419 6.567-8 14.667-8zM16 21.333c-4.96 0-9.347-1.343-12-3.4v0.733c0 2.509 5.177 5.333 12 5.333 6.68 0 11.784-2.707 11.993-5.176l0.007-0.157 0.001-0.733c-2.653 2.056-7.040 3.4-12.001 3.4zM16 8c-6.823 0-12 2.824-12 5.333s5.177 5.333 12 5.333 12-2.824 12-5.333c0-2.509-5.177-5.333-12-5.333z\"\n ></path>` }\n })\n}\n\nexport function StablecoinIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '64 64 896 896',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm22.3 665.2l.2 31.7c0 4.4-3.6 8.1-8 8.1h-28.4c-4.4 0-8-3.6-8-8v-31.4C401.3 723 359.5 672.4 355 617.4c-.4-4.7 3.3-8.7 8-8.7h46.2c3.9 0 7.3 2.8 7.9 6.6 5.1 31.7 29.8 55.4 74.1 61.3V533.9l-24.7-6.3c-52.3-12.5-102.1-45.1-102.1-112.7 0-72.9 55.4-112.1 126.2-119v-33c0-4.4 3.6-8 8-8h28.1c4.4 0 8 3.6 8 8v32.7c68.5 6.9 119.9 46.9 125.9 109.2.5 4.7-3.2 8.8-8 8.8h-44.9c-4 0-7.4-3-7.9-6.9-4-29.2-27.4-53-65.5-58.2v134.3l25.4 5.9c64.8 16 108.9 47 108.9 116.4 0 75.3-56 117.3-134.3 124.1zM426.6 410.3c0 25.4 15.7 45.1 49.5 57.3 4.7 1.9 9.4 3.4 15 5v-124c-36.9 4.7-64.5 25.4-64.5 61.7zm116.5 135.2c-2.8-.6-5.6-1.3-8.8-2.2V677c42.6-3.8 72-27.2 72-66.4 0-30.7-15.9-50.7-63.2-65.1z\"\n ></path>` }\n })\n}\n\nexport function StockIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 44.8 44.8',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <path\n fill=\"currentColor\"\n d=\"M44.8,22.4c0,1.1,0,2.2-.2,3.2h-3.2c.2-1,.3-2.1.3-3.2-.1-10.6-8.7-19.2-19.3-19.2S3.2,11.8,3.2,22.4s8.6,19.2,19.2,19.2h11.5c-3.4,2-7.3,3.2-11.5,3.2C10,44.8,0,34.7,0,22.4S10,0,22.4,0s22.4,10,22.4,22.4ZM32,35.2h-9.6c-7.1,0-12.8-5.7-12.8-12.8s5.7-12.8,12.8-12.8,12.8,5.7,12.8,12.8-.1,2.2-.4,3.2h3.3c.2-1,.3-2.1.3-3.2,0-8.8-7.2-16-16-16S6.4,13.6,6.4,22.4s7.2,16,16,16h15.6c1-1,2-2.1,2.8-3.2h-8.8ZM37,28.8h-14.7c-3.5,0-6.4-2.9-6.4-6.4s2.9-6.4,6.4-6.4,6.4,2.9,6.4,6.4-.3,2.3-.9,3.2h3.5c.4-1,.5-2.1.5-3.2,0-5.3-4.3-9.6-9.6-9.6s-9.6,4.3-9.6,9.6,4.3,9.6,9.6,9.6h20.4c.5-1,.9-2.1,1.2-3.2h-6.8Z\"\n />` }\n })\n}\n\nexport function XStockIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 800 801',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M800 6.00637C800 2.78947 797.392 0.181652 794.175 0.181652L533.333 0.181641L400 133.515L266.667 0.181652H5.82473C2.60782 0.181652 6.4736e-06 2.78947 6.4736e-06 6.00638V266.848L133.333 400.182L1.14018e-05 533.515L0 794.357C-1.40616e-07 797.574 2.60782 800.182 5.82472 800.182H266.667L400 666.848L533.333 800.182H794.175C797.392 800.182 800 797.574 800 794.357V533.515L666.667 400.182L800 266.848V6.00637Z\"\n />` }\n })\n}\n\nexport function LikedIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 512 512',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path\n fill=\"currentColor\"\n d=\"M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5 199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z\"\n ></path>` }\n })\n}\n\nexport function SearchIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<circle cx=\"11.4171\" cy=\"11.4171\" r=\"8.41714\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" fill=\"none\" />\n <path d=\"M17.2715 17.7085L20.5715 20.9999\" stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />` }\n })\n}\n\nexport function AIIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 48 48',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <path\n fill=\"currentColor\"\n d=\"M41,42H7V11h15v-2h-3v-4h5v2-2h5v4h-3v2h15v31ZM11,38h26V15H11v23ZM47,32h-4v-11h4v11ZM5,32H1v-11h4v11ZM32,29h-5v-5h5v5ZM21,29h-5v-5h5v5Z\"\n />` }\n })\n}\n\nexport function DingIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 1024 1024',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<?xml version=\"1.0\" standalone=\"no\"?><!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"><path d=\"M951.296 424.96L1024 352.256 671.744 0 599.04 72.704l70.144 70.656-168.96 168.96a296.96 296.96 0 0 0-286.72 75.264L143.36 458.24 72.704 387.584 0 460.8l245.248 245.248-139.776 139.776 72.704 72.704 140.288-140.288L563.2 1024l72.704-72.704-70.144-70.656 70.144-70.144a296.96 296.96 0 0 0 75.776-287.232l168.96-168.96z\" fill=\"#d4237a\" p-id=\"21051\"></path>` }\n })\n}\n\nexport function MetamaskIcon(props: any = {}) {\n return createElement('svg', {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n width: props.size || 16,\n height: props.size || 16,\n ...props,\n style: { display: 'inline-block', verticalAlign: 'middle', ...(props.style || {}) },\n dangerouslySetInnerHTML: { __html: `<path d=\"M21.0041 2.61084L13.2002 8.43117L14.6433 4.99725L21.0041 2.61084Z\" fill=\"#E2761B\" />\n <path\n d=\"M2.98857 2.61084L10.7297 8.4863L9.3572 4.99725L2.98857 2.61084ZM18.1964 16.1024L16.118 19.3L20.565 20.5286L21.8435 16.1732L18.1964 16.1024ZM2.16504 16.1732L3.43563 20.5286L7.88269 19.3L5.80426 16.1024L2.16504 16.1732Z\"\n fill=\"#E4761B\" />\n <path\n d=\"M7.63179 10.6993L6.39258 12.5817L10.8083 12.7786L10.6514 8.01363L7.63179 10.6993ZM16.3612 10.6993L13.3024 7.9585L13.2004 12.7786L17.6083 12.5817L16.3612 10.6993ZM7.88277 19.2999L10.5338 18.0003L8.24356 16.2046L7.88277 19.2999ZM13.4592 18.0003L16.1181 19.2999L15.7494 16.2046L13.4592 18.0003Z\"\n fill=\"#E4761B\" />\n <path\n d=\"M16.1181 19.3L13.4593 18.0005L13.671 19.7411L13.6475 20.4735L16.1181 19.3ZM7.88281 19.3L10.3534 20.4735L10.3377 19.7411L10.5338 18.0005L7.88281 19.3Z\"\n fill=\"#D7C1B3\" />\n <path\n d=\"M10.3924 15.055L8.18066 14.4013L9.74145 13.6846L10.3924 15.055ZM13.6003 15.055L14.2513 13.6846L15.8199 14.4013L13.6003 15.055Z\"\n fill=\"#233447\" />\n <path\n d=\"M7.88214 19.3002L8.25861 16.1026L5.80371 16.1735L7.88214 19.3002ZM15.741 16.1026L16.1174 19.3002L18.1959 16.1735L15.741 16.1026ZM17.6076 12.582L13.1998 12.7789L13.6076 15.0551L14.2586 13.6847L15.8272 14.4014L17.6076 12.582ZM8.18018 14.4014L9.74881 13.6847L10.3919 15.0551L10.8076 12.7789L6.39195 12.582L8.18018 14.4014Z\"\n fill=\"#CD6116\" />\n <path\n d=\"M6.39258 12.582L8.24356 16.205L8.18081 14.4014L6.39258 12.582ZM15.8279 14.4014L15.7494 16.205L17.6083 12.582L15.8279 14.4014ZM10.8083 12.7789L10.3926 15.0551L10.9102 17.7408L11.0279 14.2045L10.8083 12.7789ZM13.2004 12.7789L12.9887 14.1966L13.0828 17.7408L13.6083 15.0551L13.2004 12.7789Z\"\n fill=\"#E4751F\" />\n <path\n d=\"M13.6081 15.0551L13.0826 17.7408L13.4591 18.0007L15.7493 16.205L15.8277 14.4014L13.6081 15.0551ZM8.18066 14.4014L8.24341 16.205L10.5336 18.0007L10.9101 17.7408L10.3924 15.0551L8.18066 14.4014Z\"\n fill=\"#F6851B\" />\n <path\n d=\"M13.6475 20.4733L13.671 19.7409L13.475 19.5676H10.5181L10.3377 19.7409L10.3534 20.4733L7.88281 19.2998L8.74556 20.0086L10.4946 21.2294H13.4985L15.2554 20.0086L16.1181 19.2998L13.6475 20.4733Z\"\n fill=\"#C0AD9E\" />\n <path\n d=\"M13.4585 18.0006L13.082 17.7407H10.9095L10.533 18.0006L10.3369 19.7412L10.5173 19.5679H13.4742L13.6702 19.7412L13.4585 18.0006Z\"\n fill=\"#161616\" />\n <path\n d=\"M21.3333 8.80922L22 5.59583L21.0039 2.61084L13.4588 8.23427L16.3608 10.6994L20.4627 11.9045L21.3725 10.8412L20.9804 10.5577L21.6078 9.98273L21.1216 9.60469L21.749 9.12425L21.3333 8.80922ZM2 5.59583L2.66667 8.80922L2.24314 9.12425L2.87059 9.60469L2.39216 9.98273L3.01961 10.5577L2.62745 10.8412L3.52941 11.9045L7.63137 10.6994L10.5333 8.23427L2.98824 2.61084L2 5.59583Z\"\n fill=\"#763D16\" />\n <path\n d=\"M20.4631 11.9043L16.3611 10.6993L17.6082 12.5816L15.7494 16.2046L18.1964 16.173H21.8435L20.4631 11.9043ZM7.63171 10.6993L3.52974 11.9043L2.16504 16.173H5.80426L8.24347 16.2046L6.39249 12.5816L7.63171 10.6993ZM13.2003 12.7785L13.4592 8.23409L14.6513 4.99707H9.3572L10.5337 8.23409L10.8082 12.7785L10.9023 14.2119L10.9101 17.7404H13.0827L13.0984 14.2119L13.2003 12.7785Z\"\n fill=\"#F6851B\" />` }\n })\n}\n\n// Data URI for loader.svg — use in CSS mask-image: url(...)\nexport const loaderSvgUrl = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMiIgaGVpZ2h0PSIyMiIgdmlld0JveD0iMCAwIDIyIDIyIiBmaWxsPSJub25lIj4NCjxwYXRoIGQ9Ik0zLjIwODI1IDEuODMzMjVDMy4xMTY1OSAxLjgzMzI1IDIuOTMyODkgMS44MzI4OSAyLjg0MTIzIDEuOTI0NTZDMi43NDk1NiAyLjEwNzg5IDIuNzQ5NTYgMi40NzUyOCAyLjg0MTIzIDIuNjU4NjFMNC42MTAxMSA0LjQyNzQ5QzIuODkxNTkgNi4xMTQyNSAxLjgzMzI1IDguNDQ4OTggMS44MzMyNSAxMC45OTk5QzEuODMzMjUgMTYuMDcyMSA1LjkyNzcgMjAuMTY2NiAxMC45OTk5IDIwLjE2NjZDMTYuMDcyMSAyMC4xNjY2IDIwLjE2NjYgMTYuMDcyMSAyMC4xNjY2IDEwLjk5OTlDMjAuMTY2NiA2LjMxODI4IDE2LjU5ODQgMi40Mzg4IDEyLjAxODYgMS45Mjk5M0MxMS45ODgzIDEuOTI2NjIgMTEuOTU3OCAxLjkyNDgzIDExLjkyNzMgMS45MjQ1NkMxMS42OTE4IDEuOTIxMjYgMTEuNDY0IDIuMDA4NzcgMTEuMjkxMiAyLjE2ODk0QzExLjExODQgMi4zMjkxIDExLjAxNCAyLjU0OTYzIDEwLjk5OTUgMi43ODQ3N0MxMC45ODUgMy4wMTk5MSAxMS4wNjE1IDMuMjUxNjEgMTEuMjEzMyAzLjQzMThDMTEuMzY1IDMuNjExOTkgMTEuNTgwNCAzLjcyNjg0IDExLjgxNDUgMy43NTI1MkMxNS40ODQ3IDQuMTYwMzIgMTguMzMzMyA3LjI0ODIzIDE4LjMzMzMgMTAuOTk5OUMxOC4zMzMzIDE1LjA5NDQgMTUuMDk0NCAxOC4zMzMzIDEwLjk5OTkgMTguMzMzM0M2LjkwNTQ3IDE4LjMzMzMgMy42NjY1OSAxNS4wOTQ0IDMuNjY2NTkgMTAuOTk5OUMzLjY2NjU5IDguOTQzNzkgNC41MTk1IDcuMDY5ODggNS45MDI3NSA1LjcyMDEzTDcuNDI0NTYgNy4yNDE5NEM3LjYwNzg5IDcuMzMzNjEgNy45NzUyOCA3LjMzMzYxIDguMTU4NjEgNy4yNDE5NEM4LjI1MDI4IDcuMTUwMjggOC4yNDk5MiA2Ljk2NjU5IDguMjQ5OTIgNi44NzQ5MlYzLjU4MjQ0VjIuNzQ5OTJDOC4yNDk5MiAyLjE5OTkyIDcuODgzMjUgMS44MzMyNSA3LjMzMzI1IDEuODMzMjVIMy4yMDgyNVoiIGZpbGw9IiMwMDAiLz4NCjwvc3ZnPg=='\n\n// Default export for backward compatibility\nexport default function Icon(props: any = {}) {\n return createElement('span', {\n style: { display: 'inline-block', width: props.size || 16, height: props.size || 16 },\n ...props\n })\n}\n","import { chakra, defineRecipe } from '@chakra-ui/react'\r\n\r\nconst headingRecipe = defineRecipe({\r\n variants: {\r\n variant: {\r\n heading5: { fontWeight: 700, fontSize: '26px', lineHeight: '26px' },\r\n heading6: { fontWeight: 700, fontSize: '24px', lineHeight: '24px' },\r\n heading7: { fontWeight: 600, fontSize: '22px', lineHeight: '22px' },\r\n heading8: { fontWeight: 600, fontSize: '20px', lineHeight: '20px' },\r\n heading9: { fontWeight: 600, fontSize: '18px', lineHeight: '18px' },\r\n heading10: { fontWeight: 600, fontSize: '16px', lineHeight: '16px' },\r\n heading11: { fontWeight: 600, fontSize: '14px', lineHeight: '14px' },\r\n heading12: { fontWeight: 600, fontSize: '12px', lineHeight: '12px' },\r\n heading13: { fontWeight: 600, fontSize: '10px', lineHeight: '10px' }\r\n }\r\n }\r\n})\r\n\r\nconst textRecipe = defineRecipe({\r\n variants: {\r\n variant: {\r\n content3: { fontWeight: 400, fontSize: '28px', lineHeight: '28px' },\r\n content4: { fontWeight: 400, fontSize: '24px', lineHeight: '24px' },\r\n content5: { fontWeight: 400, fontSize: '22px', lineHeight: '22px' },\r\n content6: { fontWeight: 400, fontSize: '18px', lineHeight: '18px' },\r\n 'content6_1': { fontWeight: 400, fontSize: '16px', lineHeight: '16px' },\r\n content7: { fontWeight: 400, fontSize: '14px', lineHeight: '14px' },\r\n 'content7_2': { fontWeight: 400, fontSize: '14px', lineHeight: 1.4 },\r\n content8: { fontWeight: 400, fontSize: '12px', lineHeight: '12px' },\r\n 'content8_2': { fontWeight: 400, fontSize: '12px', lineHeight: 1.4 },\r\n content9: { fontWeight: 400, fontSize: '10px', lineHeight: '10px' }\r\n }\r\n }\r\n})\r\n\r\nexport const Heading = chakra('h2', headingRecipe)\r\nexport const Text = chakra('p', textRecipe)\r\n","import {\r\n Box,\r\n Portal,\r\n useDisclosure,\r\n Tooltip as ChakraTooltip\r\n} from '@chakra-ui/react'\r\nimport type { BoxProps } from '@chakra-ui/react'\r\nimport * as React from 'react'\r\n\r\n// Detect if device supports touch\r\nconst isTouchDevice = () => {\r\n if (typeof window === 'undefined') return false\r\n return (\r\n 'ontouchstart' in window ||\r\n navigator.maxTouchPoints > 0\r\n )\r\n}\r\n\r\nexport interface TooltipProps extends ChakraTooltip.RootProps {\r\n showArrow?: boolean\r\n portalled?: boolean\r\n portalRef?: React.RefObject<HTMLElement>\r\n content: React.ReactNode\r\n contentProps?: ChakraTooltip.ContentProps\r\n disabled?: boolean\r\n}\r\n\r\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\r\n function Tooltip(props, ref) {\r\n const {\r\n showArrow,\r\n children,\r\n disabled,\r\n portalled = true,\r\n content,\r\n contentProps,\r\n portalRef,\r\n ...rest\r\n } = props\r\n\r\n if (disabled) return children\r\n\r\n return (\r\n <ChakraTooltip.Root {...rest}>\r\n <ChakraTooltip.Trigger asChild>{children}</ChakraTooltip.Trigger>\r\n <Portal disabled={!portalled} container={portalRef}>\r\n <ChakraTooltip.Positioner>\r\n <ChakraTooltip.Content\r\n ref={ref}\r\n color={'black'}\r\n css={{\r\n '--tooltip-bg': 'white'\r\n }}\r\n {...contentProps}\r\n >\r\n {showArrow && (\r\n <ChakraTooltip.Arrow>\r\n <ChakraTooltip.ArrowTip />\r\n </ChakraTooltip.Arrow>\r\n )}\r\n {content}\r\n </ChakraTooltip.Content>\r\n </ChakraTooltip.Positioner>\r\n </Portal>\r\n </ChakraTooltip.Root>\r\n )\r\n }\r\n)\r\n\r\ntype MobileTooltipProps = TooltipProps & {\r\n boxProps?: BoxProps\r\n}\r\n\r\nexport const tooltip = Tooltip\r\nexport const MobileTooltip = (props: MobileTooltipProps) => {\r\n const { boxProps, ...tooltipProps } = props\r\n const { open, onOpen, onClose, onToggle } = useDisclosure()\r\n const [isTouch, setIsTouch] = React.useState(false)\r\n const triggerRef = React.useRef<HTMLDivElement>(null)\r\n\r\n React.useEffect(() => {\r\n setIsTouch(isTouchDevice())\r\n }, [])\r\n\r\n // Close tooltip when clicking outside (for touch devices)\r\n React.useEffect(() => {\r\n if (!isTouch || !open) return\r\n\r\n const handleClickOutside = (e: MouseEvent | TouchEvent) => {\r\n if (\r\n triggerRef.current &&\r\n !triggerRef.current.contains(e.target as Node)\r\n ) {\r\n onClose()\r\n }\r\n }\r\n\r\n // Delay to avoid immediate close from the same click\r\n const timer = setTimeout(() => {\r\n document.addEventListener('click', handleClickOutside)\r\n document.addEventListener('touchstart', handleClickOutside)\r\n }, 0)\r\n\r\n return () => {\r\n clearTimeout(timer)\r\n document.removeEventListener('click', handleClickOutside)\r\n document.removeEventListener('touchstart', handleClickOutside)\r\n }\r\n }, [isTouch, open, onClose])\r\n\r\n return (\r\n <Tooltip open={open} {...tooltipProps}>\r\n <Box\r\n ref={triggerRef}\r\n onClick={isTouch ? onToggle : onOpen}\r\n onMouseLeave={isTouch ? undefined : onClose}\r\n onMouseEnter={isTouch ? undefined : onOpen}\r\n {...boxProps}\r\n fontSize={0}\r\n >\r\n {props.children}\r\n </Box>\r\n </Tooltip>\r\n )\r\n}\r\n","import { Box, BoxProps } from '@chakra-ui/react'\r\nimport { PropsWithChildren } from 'react'\r\n\r\nexport const BoxWithBg = ({\r\n children,\r\n ...props\r\n}: PropsWithChildren<BoxProps>) => {\r\n return (\r\n <Box w={'100%'} bg={'#F5F6FF'} borderRadius={'16px'} p={3} {...props}>\r\n {children}\r\n </Box>\r\n )\r\n}\r\n","'use client'\r\nimport { Image as ChakraImage, type ImageProps } from '@chakra-ui/react'\r\nexport const OptimizedImage = (props: ImageProps) => <ChakraImage {...props} />\r\n","export const isNeedTwoApprove = (\r\n fromTokenAddress: string,\r\n fromChainId: number\r\n): boolean => {\r\n const USDT_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7'\r\n const ETHEREUM_CHAIN_ID = 1\r\n return (\r\n fromTokenAddress.toLowerCase() === USDT_ADDRESS.toLowerCase() &&\r\n fromChainId === ETHEREUM_CHAIN_ID\r\n )\r\n}\r\n\r\nexport const useUSDTHandler = () => {\r\n return {\r\n needsTwoApproval: false,\r\n isProcessingSecondApproval: false\r\n }\r\n}\r\n","'use client'\r\n\r\nimport {\r\n VStack,\r\n Button,\r\n Icon,\r\n ConditionalValue,\r\n Image,\r\n HStack,\r\n Spinner,\r\n Box\r\n} from '@chakra-ui/react'\r\nimport { useWalletConnectModal } from './hooks/useWalletConnectModal'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nimport { Fraction } from 'bi-fraction'\r\n// import { parseEther } from 'ethers'\r\nimport { useState, useMemo, useCallback, useEffect, useRef } from 'react'\r\nimport { parseUnits } from 'viem'\r\nimport {\r\n BaseError,\r\n useAccount,\r\n useConfig,\r\n useConnectors,\r\n useReconnect,\r\n useSendTransaction\r\n // usePublicClient,\r\n // useWalletClient\r\n} from 'wagmi'\r\n\r\nimport { logger } from '../utils'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { slippageStore } from '../utils'\r\n\r\nimport { toaster } from './ui/toaster'\r\n\r\nimport {\r\n useGuardChain,\r\n useSwapAndBridgeContextStore,\r\n useTxStateContextStore,\r\n useRefreshLoading\r\n} from './hooks'\r\nimport {\r\n getErc20Approval,\r\n calculateSlippage,\r\n extractVPathSegment,\r\n matchSlippagePolicy,\r\n isETHtoETHBridge\r\n} from './utils'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { WalletIcon } from './icons'\r\nimport { Heading, Text } from './ui'\r\nimport { useUSDTHandler } from './utils/twoApprove'\r\n// import { bottomToaster } from './ui/toaster'\r\nimport { useChainsStore } from './hooks'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useSolanaTransaction } from './hooks/useSolanaSendTransaction'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { QuoteRequestWithToTokenDecimals } from './MainForm'\r\n\r\ninterface Props {\r\n isFetching: boolean\r\n insufficientBalance?: boolean\r\n data: `0x${string}` | null\r\n contractAddress: `0x${string}` | null\r\n stopAutoRefetch: () => void\r\n errorMessage: string | null\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n backApprove?: boolean\r\n router_type?: string | null | undefined\r\n txValue?: string | null\r\n isInsufficientBalance?: boolean\r\n quoteMessage: string | null | undefined\r\n solanaTxMessage?: string\r\n lockRequestId: () => void\r\n clearLockedRequestId: () => void\r\n lockedRequestId: string | null\r\n currentRequestId: string | undefined | null\r\n getQuote: (params: QuoteRequestWithToTokenDecimals) => Promise<void>\r\n}\r\n\r\ninterface TxGasInfo {\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n}\r\n\r\ntype DynamicWalletLike = {\r\n address?: string | null\r\n chain?: string | null\r\n}\r\n\r\nconst buttonStyles = {\r\n w: '100%',\r\n h: {\r\n base: '40px',\r\n md: '56px'\r\n },\r\n colorPalette: 'wheel'\r\n}\r\n\r\nconst buttonHeadingVariant: ConditionalValue<'heading11' | 'heading9'> = {\r\n base: 'heading11',\r\n md: 'heading9'\r\n}\r\n\r\nconst USDT_MAINNET_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7'\r\n\r\nexport const FormButton = ({\r\n isFetching,\r\n insufficientBalance = false,\r\n data,\r\n contractAddress,\r\n stopAutoRefetch,\r\n errorMessage,\r\n gas,\r\n maxFeePerGas,\r\n maxPriorityFeePerGas,\r\n backApprove,\r\n router_type,\r\n isInsufficientBalance,\r\n quoteMessage,\r\n txValue,\r\n solanaTxMessage,\r\n lockRequestId,\r\n clearLockedRequestId,\r\n lockedRequestId,\r\n getQuote,\r\n currentRequestId\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const {\r\n address: wagmiAddress,\r\n connector,\r\n isConnected: isWagmiConnected\r\n } = useAccount()\r\n const { reconnectAsync } = useReconnect()\r\n const userWallets = useUserWallets()\r\n const dynamicEvmWalletAddress = useMemo(() => {\r\n const dynamicEvmWallet = userWallets.find((wallet) => {\r\n const chain = String(\r\n (wallet as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as DynamicWalletLike | undefined\r\n\r\n return (dynamicEvmWallet?.address as `0x${string}` | undefined) || undefined\r\n }, [userWallets])\r\n const effectiveEvmAddress = useMemo(\r\n () => address || wagmiAddress || dynamicEvmWalletAddress || undefined,\r\n [address, wagmiAddress, dynamicEvmWalletAddress]\r\n )\r\n const { openModal, openConnectModal } = useWalletConnectModal()\r\n const slippage = address ? slippageStore.get(address) : undefined\r\n const { startLoading } = useRefreshLoading()\r\n\r\n const config = useConfig()\r\n\r\n const {\r\n fromTokenInfo,\r\n fromAmount,\r\n toAmount,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n toTokenInfo\r\n } = useSwapAndBridgeContextStore()\r\n const {\r\n setFromTxHash,\r\n setSolanaFromTxHash,\r\n setIsSolanaTransaction,\r\n setUserCancelsTransaction\r\n } = useTxStateContextStore()\r\n\r\n // console.log('####### slippage #######:',slippage)\r\n // console.log('####### lockedRequestId #######:',lockedRequestId)\r\n // console.log('####### currentRequestId #######:',currentRequestId)\r\n\r\n const [isApproving, setIsApproving] = useState(false)\r\n const [lossTwenty, setLossTwenty] = useState(false)\r\n const [lossFifty, setLossFifty] = useState(false)\r\n const {\r\n handleApprove\r\n // error: approveError\r\n } = useUSDTHandler(fromTokenInfo.chain_id)\r\n\r\n const { isSelectPredictionChain, slippagePolicies, chains } = useChainsStore()\r\n const { differentAddress } = useDifferentAddressStore()\r\n\r\n const {\r\n solanaWalletAddress,\r\n isSolanaWalletConnected,\r\n isEthWalletConnected,\r\n evmWalletConnectorId\r\n } = useWalletConnectedStore()\r\n\r\n const connectors = useConnectors()\r\n\r\n // const { publicKey: walletPublicKey, connected: walletConnected } = useWallet()\r\n\r\n // const solanaConnected = walletConnected || !!solanaWalletAddress\r\n // Use walletPublicKey first; fall back to solanaWalletAddress from Zustand store\r\n // to handle cases where WalletProvider Context has not yet synced after connect\r\n // const publicKey = walletPublicKey\r\n // ? walletPublicKey\r\n // : solanaWalletAddress\r\n // ? (() => {\r\n // try {\r\n // return new PublicKey(solanaWalletAddress)\r\n // } catch {\r\n // return null\r\n // }\r\n // })()\r\n // : null\r\n\r\n // console.log('solanaConnected:', solanaConnected, 'publicKey:', publicKey)\r\n\r\n // Memoized validations\r\n const hasEvmUiWallet = Boolean(\r\n effectiveEvmAddress || isEthWalletConnected || isWagmiConnected\r\n )\r\n\r\n // Check if we have a valid EVM wallet for executing transactions\r\n // This includes:\r\n // 1) wagmi connected with connector, or\r\n // 2) stored evmWalletConnectorId found in connectors, or\r\n // 3) user has EVM address and there are available connectors (handles wallet switch scenarios)\r\n const hasEvmExecutionWallet = Boolean(\r\n effectiveEvmAddress &&\r\n ((isWagmiConnected && connector) ||\r\n (evmWalletConnectorId &&\r\n connectors.some((c) => c.id === evmWalletConnectorId)) ||\r\n (isEthWalletConnected && connectors.length > 0))\r\n )\r\n\r\n const validations = useMemo(() => {\r\n const fromAmountFraction = new Fraction(fromAmount || '0')\r\n const hasValidAmounts =\r\n parseFloat(fromAmount) &&\r\n parseFloat(toAmount) &&\r\n fromAmountFraction.gt(new Fraction('0'))\r\n // const isDifferentChain = fromTokenInfo.chain_id !== toTokenInfo.chain_id\r\n\r\n return {\r\n hasValidAmounts,\r\n // isDifferentChain,\r\n canSwap: hasValidAmounts && !isFetching\r\n // canSwap: isDifferentChain && hasValidAmounts && !isFetching\r\n }\r\n }, [fromAmount, toAmount, isFetching])\r\n\r\n // ——— Slippage Warning Logic ———\r\n\r\n /** Matched fee_level policy */\r\n const matchedPolicy = useMemo(() => {\r\n if (!fromTokenInfo || !toTokenInfo || !slippagePolicies) return null\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n return matchSlippagePolicy(slippagePolicies, isBridge, fromFeeLevel, toFeeLevel)\r\n }, [fromTokenInfo, toTokenInfo, slippagePolicies])\r\n\r\n /** Whether this is an ETH-to-ETH cross-chain bridge */\r\n const isETHtoETH = useMemo(\r\n () => isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains),\r\n [fromTokenInfo, toTokenInfo, chains]\r\n )\r\n\r\n /** Number of notice rounds from matched policy, defaults to 2 */\r\n const noticeRounds = useMemo(\r\n () => matchedPolicy?.notice_rounds ?? 2,\r\n [matchedPolicy]\r\n )\r\n\r\n /** Track how many quote rounds have passed since the user clicked confirm */\r\n const [quoteRoundCount, setQuoteRoundCount] = useState(0)\r\n const prevCurrentRequestIdRef = useRef(currentRequestId)\r\n\r\n // Reset count when lockedRequestId is cleared (transaction dismissed)\r\n useEffect(() => {\r\n if (!lockedRequestId) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setQuoteRoundCount(0)\r\n prevCurrentRequestIdRef.current = currentRequestId\r\n }\r\n // currentRequestId used only to update ref, intentionally omitted from deps\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [lockedRequestId])\r\n\r\n // Increment / reset count each time currentRequestId changes\r\n useEffect(() => {\r\n // Skip if request_id hasn't actually changed\r\n if (currentRequestId === prevCurrentRequestIdRef.current) return\r\n prevCurrentRequestIdRef.current = currentRequestId\r\n\r\n // Lock cleared → new quote cycle started → reset count\r\n if (!lockedRequestId || !currentRequestId) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setQuoteRoundCount(0)\r\n return\r\n }\r\n\r\n // Skip the initial quote (matches the locked request_id)\r\n if (currentRequestId === lockedRequestId) return\r\n\r\n // Increment count for each new quote round while locked\r\n setQuoteRoundCount((prev) => prev + 1)\r\n }, [currentRequestId, lockedRequestId])\r\n\r\n /** Quote round limit exceeded warning (only when locked request is active) */\r\n const showQuoteRoundWarning = useMemo(\r\n () =>\r\n Boolean(lockedRequestId) &&\r\n quoteRoundCount >= noticeRounds &&\r\n !isETHtoETH,\r\n [lockedRequestId, quoteRoundCount, noticeRounds, isETHtoETH]\r\n )\r\n\r\n const handleTransactionSuccess = useCallback(\r\n (hash: `0x${string}`) => {\r\n console.log(\r\n '[Transaction] User confirmed transaction in wallet, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setFromTxHash(hash)\r\n setUserCancelsTransaction(false)\r\n console.log('[Transaction] Quote polling stopped, tx hash:', hash)\r\n },\r\n [setFromTxHash, setUserCancelsTransaction, stopAutoRefetch]\r\n )\r\n\r\n const handleTransactionError = useCallback(\r\n async (error: Error) => {\r\n logger.error('Transaction error:', error)\r\n setUserCancelsTransaction(true)\r\n console.log(\r\n '[Transaction] User rejected or transaction failed, clearing locked request_id and refetching quote...'\r\n )\r\n clearLockedRequestId()\r\n\r\n // Trigger refresh animation immediately\r\n startLoading()\r\n\r\n // Refetch quote immediately after user cancels transaction\r\n const vCode = extractVPathSegment()\r\n const fromAddress = fromTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : effectiveEvmAddress || ''\r\n\r\n const toAddress = toTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : differentAddress || effectiveEvmAddress || ''\r\n\r\n if (fromAddress && fromAmount) {\r\n console.log(\r\n '[Transaction] Refetching quote after transaction rejection...'\r\n )\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n toaster.create({\r\n description:\r\n (error as BaseError)?.shortMessage ||\r\n error.message ||\r\n 'Transaction failed',\r\n type: 'error'\r\n })\r\n },\r\n [\r\n setUserCancelsTransaction,\r\n clearLockedRequestId,\r\n startLoading,\r\n getQuote,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n effectiveEvmAddress,\r\n solanaWalletAddress,\r\n differentAddress,\r\n slippage\r\n ]\r\n )\r\n\r\n const { sendTransaction, isPending } = useSendTransaction({\r\n mutation: {\r\n onSuccess: handleTransactionSuccess,\r\n onError: handleTransactionError\r\n }\r\n })\r\n\r\n const { approve, isNeedApprove } = getErc20Approval(config)\r\n\r\n // const publicClient = usePublicClient()\r\n // const { data: walletClient } = useWalletClient()\r\n\r\n const executeSwapWithData = useCallback(async () => {\r\n if (!data || !contractAddress) {\r\n throw new Error('Data or contract address not available')\r\n }\r\n\r\n let txOwner = effectiveEvmAddress\r\n // Try to find the correct connector with the following priority:\r\n // 1. Stored evmWalletConnectorId matching a wagmi connector\r\n // 2. Current wagmi connector from useAccount\r\n // 3. First available connector from connectors list (for newly connected wallets)\r\n let txConnector = evmWalletConnectorId\r\n ? connectors.find((c) => c.id === evmWalletConnectorId)\r\n : null\r\n\r\n if (!txConnector && connector) {\r\n txConnector = connector\r\n }\r\n\r\n // If still no connector but user has an EVM address connected, try to find any available connector\r\n if (!txConnector && effectiveEvmAddress && connectors.length > 0) {\r\n // Try to find the connector that matches the current connected state\r\n // This handles the case where user switched wallets and wagmi state is not fully synced\r\n txConnector = connectors[0]\r\n console.log(\r\n '[Transaction] Using first available connector as fallback:',\r\n txConnector?.id\r\n )\r\n }\r\n\r\n if (!hasEvmExecutionWallet || !txOwner || !txConnector) {\r\n try {\r\n console.log('[Transaction] Attempting to reconnect wallet...')\r\n const connections = await reconnectAsync()\r\n const latestConnection = connections.find(\r\n (item) => item.accounts?.length\r\n )\r\n\r\n if (latestConnection?.accounts?.[0]) {\r\n txOwner = latestConnection.accounts[0] as `0x${string}`\r\n }\r\n if (latestConnection?.connector) {\r\n txConnector = latestConnection.connector\r\n }\r\n } catch (reconnectError) {\r\n logger.error('Reconnect EVM wallet failed:', reconnectError)\r\n }\r\n }\r\n\r\n // Fallback: if wagmi connectors list is empty but Dynamic shows an EVM wallet,\r\n // re-trigger the Dynamic auth flow so DynamicWagmiConnector can bridge to wagmi\r\n if (!txConnector && effectiveEvmAddress && isEthWalletConnected) {\r\n console.log('[Transaction] Connectors empty but wallet detected, triggering Dynamic reconnect...')\r\n openModal()\r\n setUserCancelsTransaction(true)\r\n toaster.create({\r\n description: 'Please reconnect your EVM wallet and try again',\r\n type: 'info'\r\n })\r\n return\r\n }\r\n\r\n if (!txOwner || !txConnector) {\r\n setUserCancelsTransaction(true)\r\n openConnectModal()\r\n toaster.create({\r\n description: 'Please reconnect EVM wallet and try again',\r\n type: 'error'\r\n })\r\n return\r\n }\r\n\r\n try {\r\n // const isErc20Token = fromTokenInfo.address !== zeroAddress\r\n // if (isErc20Token && backApprove) {\r\n const isEthereumUSDT =\r\n fromTokenInfo.chain_id === 1 &&\r\n fromTokenInfo.address.toLowerCase() ===\r\n USDT_MAINNET_ADDRESS.toLowerCase()\r\n\r\n if (backApprove) {\r\n const chainId = fromTokenInfo.chain_id\r\n const tokenAddress = fromTokenInfo.address\r\n const owner = txOwner\r\n\r\n const spender = contractAddress\r\n const amount = parseUnits(fromAmount, fromTokenInfo.decimals)\r\n setIsApproving(true)\r\n // Keep quote polling during approval process\r\n console.log(\r\n '[Approve] Starting approval process, quote polling will continue...'\r\n )\r\n // After approval, continue polling until user confirms transaction in wallet\r\n try {\r\n if (isEthereumUSDT) {\r\n console.log('[Approve] Using Ethereum USDT double approval')\r\n await handleApprove(tokenAddress, spender, amount)\r\n } else {\r\n const _isNeedApprove = await isNeedApprove({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n })\r\n if (_isNeedApprove) {\r\n console.log('[Approve] Approval needed, executing approve...')\r\n await approve({\r\n chainId,\r\n tokenAddress,\r\n owner,\r\n spender,\r\n amount\r\n })\r\n } else {\r\n console.log('[Approve] No approval needed, skipping approve')\r\n }\r\n }\r\n // Quote polling continues, will stop when user confirms transaction in wallet\r\n console.log(\r\n '[Approve] Approval completed, waiting 2 seconds before executing transaction...'\r\n )\r\n console.log(\r\n '[Approve] Quote polling continues until user confirms transaction in wallet'\r\n )\r\n const delayStart = Date.now()\r\n await new Promise((resolve) => setTimeout(resolve, 2000))\r\n console.log(\r\n `[Approve] Wait complete (${Date.now() - delayStart}ms), executing transaction now`\r\n )\r\n } finally {\r\n setIsApproving(false)\r\n }\r\n }\r\n // For all transactions (approve and non-approve), quote polling will continue\r\n // until user confirms the transaction in wallet\r\n console.log(\r\n '[Transaction] Preparing transaction, quote polling continues...'\r\n )\r\n const transactionOptions = {\r\n to: contractAddress,\r\n data: data,\r\n value: BigInt(txValue || '0')\r\n // value: isErc20Token ? undefined : parseEther(fromAmount)\r\n }\r\n const tx: TxGasInfo = {}\r\n if (gas && gas > 0) {\r\n tx.gas = gas\r\n }\r\n if (maxFeePerGas && maxFeePerGas > 0) {\r\n tx.maxFeePerGas = maxFeePerGas\r\n }\r\n if (maxPriorityFeePerGas && maxPriorityFeePerGas > 0) {\r\n tx.maxPriorityFeePerGas = maxPriorityFeePerGas\r\n }\r\n sendTransaction(\r\n Object.assign({}, transactionOptions, tx, { connector: txConnector })\r\n )\r\n\r\n // sendTransaction({\r\n // to: contractAddress,\r\n // data: data,\r\n // value: isErc20Token ? undefined : parseEther(fromAmount)\r\n // })\r\n } catch (error) {\r\n logger.error('Failed to create swap order:', error)\r\n setUserCancelsTransaction(true)\r\n clearLockedRequestId()\r\n toaster.create({\r\n description:\r\n (error as BaseError)?.shortMessage ||\r\n (error as Error)?.message ||\r\n 'Failed to create swap order',\r\n type: 'error'\r\n })\r\n setIsApproving(false)\r\n }\r\n }, [\r\n effectiveEvmAddress,\r\n approve,\r\n backApprove,\r\n connector,\r\n connectors,\r\n contractAddress,\r\n data,\r\n evmWalletConnectorId,\r\n fromAmount,\r\n fromTokenInfo.address,\r\n fromTokenInfo.chain_id,\r\n fromTokenInfo.decimals,\r\n gas,\r\n handleApprove,\r\n hasEvmExecutionWallet,\r\n isEthWalletConnected,\r\n isNeedApprove,\r\n maxFeePerGas,\r\n maxPriorityFeePerGas,\r\n openConnectModal,\r\n openModal,\r\n reconnectAsync,\r\n sendTransaction,\r\n setUserCancelsTransaction,\r\n clearLockedRequestId,\r\n txValue\r\n ])\r\n\r\n const { sendTx: handleSwap, isSwitching } = useGuardChain(\r\n executeSwapWithData,\r\n fromTokenInfo.chain_id\r\n )\r\n\r\n const buttonText = useMemo(() => {\r\n if (router_type) {\r\n if (router_type === 'wrap') {\r\n return !backApprove ? 'Wrap' : 'Approve & Wrap'\r\n } else if (router_type === 'unwrap') {\r\n return !backApprove ? 'Unwrap' : 'Approve & Unwrap'\r\n } else if (router_type === 'swap') {\r\n return !backApprove ? 'Swap' : 'Approve & Swap'\r\n } else {\r\n return !backApprove ? 'Bridge' : 'Approve & Bridge'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [router_type, backApprove])\r\n\r\n const buttonLoadingText = useMemo(() => {\r\n if (router_type) {\r\n if (router_type === 'wrap') {\r\n return !backApprove\r\n ? 'Wrapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Wrapping'\r\n } else if (router_type === 'unwrap') {\r\n return !backApprove\r\n ? 'Unwrapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Unwrapping'\r\n } else if (router_type === 'swap') {\r\n return !backApprove\r\n ? 'Swapping'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Swapping'\r\n } else {\r\n return !backApprove\r\n ? 'Bridging'\r\n : isSwitching || isApproving\r\n ? 'Approving'\r\n : 'Bridging'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [isApproving, backApprove, isSwitching, router_type])\r\n\r\n const renderButtonTopWarningMessage = (txt: string) => {\r\n return (\r\n <Box\r\n as={'div'}\r\n color={'#81728c'}\r\n backgroundColor={'rgba(255, 210, 0, .1)'}\r\n border={'1px solid rgba(255, 210, 0, 1)'}\r\n minHeight={'18px'}\r\n lineHeight={1.5}\r\n padding={'6px 15px 6px 36px'}\r\n // lineHeight={'30px'}\r\n textAlign={'left'}\r\n fontSize={'12px'}\r\n borderRadius={'4px'}\r\n w={'100%'}\r\n marginBottom={'10px'}\r\n position={'relative'}\r\n // alignItems={'flex-start'}\r\n // justifyContent={'center'}\r\n // gap={0}\r\n >\r\n <Image\r\n src={'https://wheelx.fi/images/jth.png'}\r\n alt=\"error\"\r\n w={'14px'}\r\n h={'14px'}\r\n marginRight={'4px'}\r\n display={'inline'}\r\n position={'absolute'}\r\n left={'15px'}\r\n top={'8px'}\r\n ></Image>\r\n <Box>{txt}</Box>\r\n </Box>\r\n )\r\n }\r\n\r\n const renderLossWarning = () => {\r\n if (fromAmountToUsd && toAmountToUsd) {\r\n const fromPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const toPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (fromPrice > 50 && fromPrice > toPrice) {\r\n const loss = -(toPrice - fromPrice) / fromPrice\r\n if (loss >= 0.2) {\r\n renderButtonTopWarningMessage(\r\n 'The current price impact is relatively high'\r\n )\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n\r\n const {\r\n sendFromQuote,\r\n state: { isLoading: isSolanaTxLoading }\r\n } = useSolanaTransaction()\r\n\r\n useEffect(() => {\r\n if (fromAmountToUsd && toAmountToUsd) {\r\n const fromPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const toPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (fromPrice > 50 && fromPrice > +toPrice) {\r\n const loss = -(toPrice - fromPrice) / fromPrice\r\n if (loss < 0.2) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setLossTwenty(false)\r\n setLossFifty(false)\r\n } else if (loss >= 0.2 && loss < 0.5) {\r\n setLossTwenty(true)\r\n setLossFifty(false)\r\n } else {\r\n setLossTwenty(false)\r\n setLossFifty(true)\r\n }\r\n }\r\n }\r\n }, [fromAmountToUsd, toAmountToUsd])\r\n\r\n const renderSolanaWalletConnectButton = () => {\r\n return (\r\n <Button {...buttonStyles} onClick={openModal}>\r\n <Icon w={'24px'} h={'24px'} as={WalletIcon} />\r\n <Heading variant={buttonHeadingVariant}>Connect Solana Wallet</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const renderEvmWalletConnectButton = (name?: string) => {\r\n return (\r\n <Button {...buttonStyles} onClick={openConnectModal}>\r\n <Icon w={'24px'} h={'24px'} as={WalletIcon} />\r\n <Heading variant={buttonHeadingVariant}>\r\n Connect {name ? name : ''} Wallet\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n const getSolanaErrorToastMessage = (error: Error) => {\r\n const message = error.message || 'Solana transaction failed'\r\n const matched = message.match(/\\[(SOL_[A-Z_]+)\\]/)\r\n const code = matched?.[1]\r\n\r\n switch (code) {\r\n case 'SOL_WALLET_NOT_CONNECTED':\r\n case 'SOL_DYNAMIC_SIGNER_UNAVAILABLE':\r\n return 'No available Solana signing wallet detected. Please reconnect and try again'\r\n case 'SOL_DYNAMIC_SIGN_REJECTED':\r\n return 'You cancelled the wallet signature request. Please initiate the transaction again'\r\n case 'SOL_DYNAMIC_INVALID_SIGNATURE':\r\n return 'The wallet returned an invalid signature. Please try again later'\r\n case 'SOL_NETWORK_UNAVAILABLE':\r\n return 'Solana network connection is unavailable. Please check your network and try again'\r\n case 'SOL_DYNAMIC_SEND_FAILED':\r\n return 'Transaction submission failed. Please try again later'\r\n case 'SOL_TX_PARAMS_INVALID':\r\n return 'Invalid transaction parameters. Please refresh the quote and try again'\r\n default:\r\n return message\r\n }\r\n }\r\n\r\n const handleSolanaSwap = async () => {\r\n // Check Solana wallet connection status before initiating transaction\r\n if (!isSolanaWalletConnected || !solanaWalletAddress) {\r\n setUserCancelsTransaction(true)\r\n toaster.create({\r\n description: 'Please reconnect Solana wallet and try again',\r\n type: 'error'\r\n })\r\n openModal()\r\n return\r\n }\r\n\r\n console.log(\r\n '[Solana Transaction] Preparing transaction, quote polling continues...'\r\n )\r\n await sendFromQuote(\r\n solanaTxMessage || '', // Get from quote API\r\n solanaWalletAddress || '',\r\n {\r\n onSuccess: (signature) => {\r\n // console.log('Transaction successful:', signature)\r\n console.log(\r\n '[Solana Transaction] User confirmed transaction in wallet, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setSolanaFromTxHash(signature)\r\n setIsSolanaTransaction(true)\r\n setUserCancelsTransaction(false)\r\n console.log(\r\n '[Solana Transaction] Quote polling stopped, signature:',\r\n signature\r\n )\r\n console.log(\r\n '[Solana Transaction] Using locked request_id:',\r\n lockedRequestId\r\n )\r\n },\r\n onError: async (error) => {\r\n console.log(\r\n '[Solana Transaction] Transaction failed or rejected, stopping quote polling...'\r\n )\r\n stopAutoRefetch()\r\n setUserCancelsTransaction(true)\r\n console.log(\r\n '[Solana Transaction] Clearing locked request_id and refetching quote...'\r\n )\r\n clearLockedRequestId()\r\n\r\n // Trigger refresh animation immediately\r\n startLoading()\r\n\r\n // Refetch quote immediately after user cancels transaction\r\n const vCode = extractVPathSegment()\r\n const fromAddress = solanaWalletAddress || ''\r\n\r\n const toAddress = toTokenInfo.isSolana\r\n ? solanaWalletAddress || ''\r\n : differentAddress || effectiveEvmAddress || ''\r\n\r\n if (fromAddress && fromAmount) {\r\n console.log(\r\n '[Solana Transaction] Refetching quote after transaction rejection...'\r\n )\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n toaster.create({\r\n description: getSolanaErrorToastMessage(error),\r\n type: 'error'\r\n })\r\n }\r\n }\r\n )\r\n }\r\n\r\n const renderButton = () => {\r\n if (errorMessage || quoteMessage) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content7'\r\n }}\r\n color={theme.disabledButtonText}\r\n >\r\n {errorMessage || quoteMessage}\r\n </Text>\r\n </Button>\r\n )\r\n }\r\n\r\n if (\r\n (fromTokenInfo.isSolana || toTokenInfo.isSolana) &&\r\n !solanaWalletAddress\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n\r\n if (!fromTokenInfo.isSolana && !hasEvmUiWallet) {\r\n return renderEvmWalletConnectButton('EVM')\r\n }\r\n\r\n if (!hasEvmUiWallet && !solanaWalletAddress) {\r\n if (\r\n (fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n return renderEvmWalletConnectButton()\r\n } else if (!hasEvmUiWallet && solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && !toTokenInfo.isSolana) ||\r\n (!fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderEvmWalletConnectButton('EVM')\r\n }\r\n } else if (hasEvmUiWallet && !solanaWalletAddress) {\r\n // Check if user selected Solana token but hasn't connected Solana wallet\r\n if (fromTokenInfo.isSolana || toTokenInfo.isSolana) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n if (\r\n (fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (!fromTokenInfo.isSolana && toTokenInfo.isSolana) ||\r\n (fromTokenInfo.isSolana && !toTokenInfo.isSolana)\r\n ) {\r\n return renderSolanaWalletConnectButton()\r\n }\r\n }\r\n\r\n // Check fetching state before other validations to show loading state during retry\r\n if (isFetching || (fromAmount && !toAmount)) {\r\n return (\r\n <Button\r\n {...buttonStyles}\r\n disabled\r\n // loading\r\n loadingText={''}\r\n bg={theme.disabledButtonBg}\r\n >\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>\r\n <HStack gap={0}>\r\n <HStack\r\n w={'28px'}\r\n h={'28px'}\r\n position={'relative'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n gap={0}\r\n top={'-1px'}\r\n marginRight={'5px'}\r\n >\r\n <Image\r\n display={'block'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n <Text\r\n position={'absolute'}\r\n w={'28px'}\r\n h={'28px'}\r\n top={0}\r\n left={0}\r\n border={`3px solid ${theme.disabledButtonText}`}\r\n borderRadius={'100%'}\r\n boxSizing={'border-box'}\r\n ></Text>\r\n </HStack>\r\n <Text>AI is Thinking the Best Price</Text>\r\n </HStack>\r\n {/* Fetching Best Price */}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (isSelectPredictionChain && !differentAddress) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>Enter Address</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (!validations.hasValidAmounts) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>Enter Amount</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (insufficientBalance || isInsufficientBalance) {\r\n return (\r\n <Button {...buttonStyles} disabled bg={theme.disabledButtonBg}>\r\n <Heading variant={buttonHeadingVariant} color={theme.disabledButtonText}>\r\n {quoteMessage ? quoteMessage : 'Insufficient Balance'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const isSolanaSwapFlow =\r\n fromTokenInfo.isSolana && Boolean(solanaWalletAddress)\r\n const isLoading =\r\n isPending ||\r\n isSwitching ||\r\n isApproving ||\r\n (isSolanaSwapFlow && isSolanaTxLoading)\r\n return (\r\n <Button\r\n {...buttonStyles}\r\n onClick={() => {\r\n if (isLoading) return\r\n // Quote polling will continue until user confirms transaction in wallet\r\n console.log(\r\n '[Button] User clicked confirm button, quote polling continues...'\r\n )\r\n // Lock the current request_id when user clicks the button\r\n lockRequestId()\r\n console.log('[Button] Locked request_id:', lockedRequestId)\r\n\r\n if (isSolanaSwapFlow) {\r\n void handleSolanaSwap()\r\n } else {\r\n handleSwap()\r\n }\r\n }}\r\n disabled={!validations.canSwap || lossFifty || isLoading}\r\n bg={isLoading ? theme.normalButtonBg : theme.highlightButtonBg}\r\n color={isLoading ? theme.normalButtonText : theme.highlightButtonText}\r\n loading={isLoading}\r\n spinner={<Spinner size=\"sm\" color={isLoading ? theme.normalButtonText : theme.highlightButtonText} />}\r\n loadingText={\r\n <Heading variant={buttonHeadingVariant} color={isLoading ? theme.normalButtonText : theme.highlightButtonText}>\r\n {isSolanaSwapFlow && isSolanaTxLoading\r\n ? `${buttonLoadingText}...`\r\n : buttonLoadingText}\r\n </Heading>\r\n }\r\n >\r\n <Heading variant={buttonHeadingVariant} color={isLoading ? theme.normalButtonText : theme.highlightButtonText}>{buttonText}</Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <VStack w={'100%'} gap={0}>\r\n {showQuoteRoundWarning &&\r\n renderButtonTopWarningMessage(\r\n 'Confirm in wallet may cause the transaction to fail. You can consider canceling and resubmitting the transaction.'\r\n )}\r\n {renderLossWarning()}\r\n {renderButton()}\r\n </VStack>\r\n <Image\r\n display={'none'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n </>\r\n )\r\n}\r\n","import { ChainInfo, TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { FavoriteItem } from './FavoritesContext'\r\n\r\nexport function getOrderedTokens(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const aIsDin = a.token_type === 'preset'\r\n const bIsDin = b.token_type === 'preset'\r\n\r\n if (aIsDin && !bIsDin) return -1\r\n if (!aIsDin && bIsDin) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function getOrderedTokensAssets(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null,\r\n propertyName?: string\r\n) {\r\n // console.log('###### assets sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n if (propertyName === 'platform_id') {\r\n return token.platform_id === selectedChain\r\n }\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n if (a.usdPrice === null && b.usdPrice === null) {\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') return -1\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') return 1\r\n if (a.balance === 'NaN' && b.balance === 'NaN') return 0\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n return 0\r\n }\r\n\r\n if (a.usdPrice === null) return 1\r\n if (b.usdPrice === null) return -1\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const firstCharA = a.name.toLowerCase()\r\n const firstCharB = b.name.toLowerCase()\r\n if (firstCharA < firstCharB) return -1\r\n if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\nexport function getOrderedTokensChainNormal(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null,\r\n propertyName?: string\r\n) {\r\n // console.log('###### chain normal sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n if (propertyName === 'platform_id') {\r\n return token.platform_id === selectedChain\r\n }\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function getOrderedTokensChainSearch(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n // console.log('###### chain search sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.chain_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n const aIsDin = a.token_type === 'preset'\r\n const bIsDin = b.token_type === 'preset'\r\n\r\n if (aIsDin && !bIsDin) return -1\r\n if (!aIsDin && bIsDin) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\n\r\nexport function processChains(\r\n favorites: FavoriteItem[],\r\n allNetworks: ChainInfo[]\r\n) {\r\n const favoriteNetworkIds = new Set(favorites.map((fav) => fav.networkId))\r\n const favoriteChains = allNetworks.filter((network) =>\r\n favoriteNetworkIds.has(network.chain_id)\r\n )\r\n const nonFavoriteChains = allNetworks.filter(\r\n (network) => !favoriteNetworkIds.has(network.chain_id)\r\n )\r\n return { favoriteChains, nonFavoriteChains }\r\n}\r\n\r\nexport function mergeAndDeduplicateChains(\r\n arr1: ChainInfo[],\r\n arr2: ChainInfo[]\r\n): ChainInfo[] {\r\n const networkMap = new Map<number, ChainInfo>()\r\n const combinedArray = [...arr1, ...arr2]\r\n combinedArray.forEach((network) => {\r\n if (!networkMap.has(network.chain_id)) {\r\n networkMap.set(network.chain_id, network)\r\n }\r\n })\r\n return Array.from(networkMap.values())\r\n}\r\n\r\nexport function mergeAndDeduplicate(arr1: TokenInfo[], arr2: TokenInfo[]) {\r\n const mergedArray = [...arr1, ...arr2]\r\n const map = new Map()\r\n\r\n for (const item of mergedArray) {\r\n const key = `${item.address}-${item.chain_id}`\r\n if (!map.has(key)) {\r\n map.set(key, item)\r\n } else {\r\n const existingItem = map.get(key)\r\n const existingHasPreset = existingItem.token_type === 'preset'\r\n const currentHasPreset = item.token_type === 'preset'\r\n if (existingHasPreset && !currentHasPreset) {\r\n continue\r\n } else if (!existingHasPreset && currentHasPreset) {\r\n map.set(key, item)\r\n } else {\r\n continue\r\n }\r\n }\r\n }\r\n\r\n return Array.from(map.values())\r\n}\r\n\r\nexport function filterTokenByType(\r\n items: TokenInfo[],\r\n searchString: string\r\n): TokenInfo[] {\r\n return items.filter((item) => item.categories?.includes(searchString))\r\n}\r\n\r\nexport function filterTokenUnType(\r\n items: TokenInfo[],\r\n excludeTypes: string | string[]\r\n): TokenInfo[] {\r\n const typesToExclude = Array.isArray(excludeTypes) ? excludeTypes : [excludeTypes]\r\n return items.filter((item) => {\r\n if (!item.categories) return true\r\n return !typesToExclude.some(type => item.categories?.includes(type))\r\n })\r\n}\r\n\r\nexport function getOrderedTokensChainPrediction(\r\n tokens?: TokenInfoWithBalance[],\r\n selectedChain?: number | null\r\n) {\r\n // console.log('###### chain normal sort ##########')\r\n return tokens\r\n ?.filter((token) => {\r\n if (!selectedChain) return true\r\n return token.platform_id === selectedChain\r\n })\r\n .sort((a, b) => {\r\n // pin tokens should be at the first\r\n const aIsPin = a.tags.includes('pin')\r\n const bIsPin = b.tags.includes('pin')\r\n if (aIsPin && !bIsPin) return -1\r\n if (!aIsPin && bIsPin) return 1\r\n\r\n //\r\n const aIsTop = a.tags.includes('top')\r\n const bIsTop = b.tags.includes('top')\r\n\r\n if (aIsTop && !bIsTop) return -1\r\n if (!aIsTop && bIsTop) return 1\r\n\r\n // no pin / top tokens, order by usd balance\r\n if (a.usdPrice && b.usdPrice && a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n const aBalance = new Fraction(a.usdPrice).mul(a.balance)\r\n const bBalance = new Fraction(b.usdPrice).mul(b.balance)\r\n if (aBalance.gt(bBalance)) return -1\r\n if (aBalance.lt(bBalance)) return 1\r\n }\r\n\r\n // if usd price is not available, order by balance amount\r\n if (a.balance && b.balance) {\r\n if (a.balance === 'NaN' && b.balance !== 'NaN') {\r\n return -1\r\n }\r\n if (a.balance !== 'NaN' && b.balance === 'NaN') {\r\n return 1\r\n }\r\n if (a.balance === 'NaN' && b.balance === 'NaN') {\r\n return 0\r\n }\r\n if (new Fraction(a.balance).gt(new Fraction(b.balance))) return -1\r\n if (new Fraction(a.balance).lt(new Fraction(b.balance))) return 1\r\n }\r\n\r\n if (a.balance && !b.balance) return -1\r\n if (!a.balance && b.balance) return 1\r\n\r\n // const firstCharA = a.name.toLowerCase()\r\n // const firstCharB = b.name.toLowerCase()\r\n // if (firstCharA < firstCharB) return -1\r\n // if (firstCharA > firstCharB) return 1\r\n\r\n return 0\r\n })\r\n}\r\nexport const enableTestnet = () => false \r\n","export const mainnet: { tokens: number[], chains: number[], id: number } = { tokens: [], chains: [], id: 1 }\r\n","export const monad: { tokens: number[], chains: number[], id: number } = { tokens: [], chains: [], id: 10143 }\r\n","export const stable: { tokens: number[], id: number } = { tokens: [], id: 1 }\r\n","import {\r\n ChainsAndTokens,\r\n mergeTokensWithCompositeKey,\r\n TokenBalance,\r\n TokenInfoWithBalance\r\n} from '../../../api'\r\nimport { enableTestnet } from '../utils'\r\nimport { useCallback, useMemo, useState } from 'react'\r\nimport { base, baseSepolia, sepolia, bsc, soneium, ink } from 'viem/chains'\r\nimport { mainnet } from '../../../consts/mainnet'\r\nimport { getOrderedTokensChainNormal } from '../utils'\r\nimport { monad } from '../../../consts/monad'\r\nimport { stable } from '../../../consts/stable'\r\n// import { plasma } from '../consts/plasma'\r\n\r\ninterface Props {\r\n data?: ChainsAndTokens\r\n selectedChain: number | null\r\n userBalances?: TokenBalance[]\r\n selectedChainByPlatformId?: number | null\r\n allowedChainIds?: number[]\r\n allowedTokenSet?: Set<string> | null\r\n}\r\n\r\nexport const popularChainsIds: number[] = enableTestnet()\r\n ? [sepolia.id, baseSepolia.id]\r\n : [mainnet.id, base.id, ink.id, bsc.id, monad.id, soneium.id, stable.id]\r\n\r\nexport const useChainsAndTokensForSelect = ({\r\n data,\r\n selectedChain,\r\n userBalances,\r\n selectedChainByPlatformId,\r\n allowedChainIds,\r\n allowedTokenSet\r\n}: Props) => {\r\n // const chains = data?.chains || []\r\n // const tokensData = data?.tokens || []\r\n // const predictionChains = data?.deposit_platforms?.prediction?.chains || []\r\n // const predictionTokens = data?.deposit_platforms?.prediction?.tokens || []\r\n\r\n const rawChains = useMemo(\r\n () => [\r\n ...(data?.chains || []),\r\n ...(data?.deposit_platforms?.prediction?.chains || [])\r\n ],\r\n [data?.chains, data?.deposit_platforms?.prediction?.chains]\r\n )\r\n\r\n // Filter chains to the allowed set (if config restricts them)\r\n const allChains = useMemo(() => {\r\n if (!allowedChainIds || allowedChainIds.length === 0) return rawChains\r\n const allowedSet = new Set(allowedChainIds)\r\n return rawChains.filter(c => allowedSet.has(c.chain_id))\r\n }, [rawChains, allowedChainIds])\r\n\r\n const rawTokens = useMemo(\r\n () => [\r\n ...(data?.tokens || []),\r\n ...(data?.deposit_platforms?.prediction?.tokens || [])\r\n ],\r\n [data?.tokens, data?.deposit_platforms?.prediction?.tokens]\r\n )\r\n\r\n // Filter tokens to the allowed set (if config restricts them)\r\n const allTokens = useMemo(() => {\r\n if (!allowedTokenSet) return rawTokens\r\n return rawTokens.filter(t => allowedTokenSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }, [rawTokens, allowedTokenSet])\r\n\r\n const [searchChainsValue, setSearchChainsValue] = useState('')\r\n const [searchTokensValue, setSearchTokensValue] = useState('')\r\n\r\n const handleSearchChains = (value: string) => {\r\n setSearchChainsValue(value)\r\n }\r\n\r\n const handleSearchTokens = (value: string) => {\r\n setSearchTokensValue(value)\r\n }\r\n\r\n const resetSearch = useCallback(() => {\r\n setSearchChainsValue('')\r\n setSearchTokensValue('')\r\n }, [])\r\n\r\n const popularChains = useMemo(\r\n () =>\r\n (allChains ?? [])\r\n .filter((chain) => chain.is_popular === true)\r\n .sort((a, b) => {\r\n const nameA = a.name.toLowerCase()\r\n const nameB = b.name.toLowerCase()\r\n if (nameA < nameB) return -1\r\n if (nameA > nameB) return 1\r\n return 0\r\n }),\r\n [allChains]\r\n )\r\n // console.log('popularChains: ', popularChains)\r\n\r\n const currentChain = useMemo(() => {\r\n if (selectedChainByPlatformId) {\r\n return allChains?.find(\r\n (chain) => chain.platform_id === selectedChainByPlatformId\r\n )\r\n } else {\r\n return allChains?.find((chain) => chain.chain_id === selectedChain)\r\n }\r\n }, [allChains, selectedChain])\r\n\r\n const searchChains = useMemo(() => {\r\n return allChains?.filter((chain) => {\r\n if (searchChainsValue === '') return false\r\n return (\r\n chain.name.toLowerCase().includes(searchChainsValue.toLowerCase()) ||\r\n chain.chain_id.toString().includes(searchChainsValue.toLowerCase())\r\n )\r\n })\r\n }, [allChains, searchChainsValue])\r\n\r\n // A-Z\r\n const orderedChains = useMemo(\r\n () =>\r\n allChains\r\n ?.filter((chain) => !chain.is_popular)\r\n .sort((a, b) => {\r\n const firstCharA = a.name.toLowerCase()\r\n const firstCharB = b.name.toLowerCase()\r\n if (firstCharA < firstCharB) return -1\r\n if (firstCharA > firstCharB) return 1\r\n // if (a.name < b.name) return -1\r\n // if (a.name > b.name) return 1\r\n return 0\r\n }),\r\n [allChains]\r\n )\r\n\r\n // const [tokensWithBalances, setTokensWithBalances] = useState<\r\n // TokenInfoWithBalance[] | undefined\r\n // >(allTokens)\r\n\r\n // const [tokensAndBalances, setTokensAndBalances] = useState<\r\n // TokenInfoWithBalance[] | undefined\r\n // >(allTokens)\r\n\r\n // useEffect(() => {\r\n // // console.log('tokensData: ', tokensData, userBalances)\r\n // if (allTokens) {\r\n // if (userBalances) {\r\n // const tokensWithBalances = allTokens.map((token) => {\r\n // const balance = userBalances.find(\r\n // (balance) =>\r\n // balance.chain_id === token.chain_id &&\r\n // balance.token.address === token.address\r\n // )\r\n // return {\r\n // ...token,\r\n // balance: balance?.balance,\r\n // usdPrice: balance?.price\r\n // }\r\n // })\r\n // return setTokensWithBalances(tokensWithBalances)\r\n // }\r\n // setTokensWithBalances(allTokens)\r\n // }\r\n // }, [allTokens, userBalances])\r\n\r\n // useEffect(() => {\r\n // if (tokensWithBalances?.length && userBalances?.length) {\r\n // const newUserBalances: TokenInfoWithBalance[] | undefined = []\r\n // userBalances.map((item) => {\r\n // const newItem = {\r\n // ...item.token,\r\n // balance: item?.balance,\r\n // usdPrice: item?.price\r\n // }\r\n // newUserBalances.push(newItem)\r\n // })\r\n // const merged = mergeTokensWithCompositeKey(\r\n // newUserBalances,\r\n // tokensWithBalances\r\n // )\r\n // setTokensAndBalances(merged)\r\n // } else {\r\n // setTokensAndBalances(tokensWithBalances)\r\n // }\r\n // }, [tokensWithBalances, userBalances])\r\n\r\n const tokensWithBalances = useMemo(() => {\r\n if (!allTokens) return undefined\r\n if (userBalances) {\r\n return allTokens.map((token) => {\r\n const balance = userBalances.find(\r\n (balance) =>\r\n balance.chain_id === token.chain_id &&\r\n balance.token.address === token.address\r\n )\r\n return {\r\n ...token,\r\n balance: balance?.balance,\r\n usdPrice: balance?.price\r\n }\r\n })\r\n }\r\n return allTokens\r\n }, [allTokens, userBalances])\r\n\r\n const tokensAndBalances = useMemo(() => {\r\n let result: TokenInfoWithBalance[] | undefined\r\n if (tokensWithBalances?.length && userBalances?.length) {\r\n const newUserBalances: TokenInfoWithBalance[] | undefined = []\r\n userBalances.forEach((item) => {\r\n const newItem = {\r\n ...item.token,\r\n balance: item?.balance,\r\n usdPrice: item?.price\r\n }\r\n newUserBalances.push(newItem)\r\n })\r\n result = mergeTokensWithCompositeKey(newUserBalances, tokensWithBalances)\r\n } else {\r\n result = tokensWithBalances\r\n }\r\n // Re-apply config token filter after merge (user balances may introduce tokens not in config)\r\n if (result && allowedTokenSet) {\r\n result = result.filter(t => allowedTokenSet.has(`${t.chain_id}:${t.address.toLowerCase()}`))\r\n }\r\n return result\r\n }, [tokensWithBalances, userBalances, allowedTokenSet])\r\n\r\n // console.log('###### all tokensWithBalances #######:', tokensWithBalances)\r\n // console.log('###### all tokensAndBalances #######:', tokensAndBalances)\r\n\r\n const tokens = useMemo(() => {\r\n if (currentChain?.platform_id && currentChain.platform_id > 0) {\r\n return getOrderedTokensChainNormal(\r\n tokensAndBalances,\r\n currentChain.platform_id,\r\n 'platform_id'\r\n )\r\n } else {\r\n return getOrderedTokensChainNormal(tokensAndBalances, selectedChain)\r\n }\r\n }, [selectedChain, tokensAndBalances, currentChain])\r\n\r\n // console.log(\r\n // '#### selectedChain ######: ',\r\n // selectedChain,\r\n // tokens,\r\n // tokensAndBalances\r\n // )\r\n\r\n return {\r\n popularChains,\r\n orderedChains,\r\n searchChains,\r\n tokens,\r\n searchChainsValue,\r\n searchTokensValue,\r\n handleSearchChains,\r\n handleSearchTokens,\r\n resetSearch,\r\n allChains\r\n }\r\n}\r\n","import { create } from 'zustand'\r\n\r\ninterface UserHasSelectedFromNetwork {\r\n userHasSelectedFromNetwork: boolean\r\n setUserHasSelectedFromNetwork: (userHasSelectedFromNetwork: boolean) => void\r\n}\r\n\r\nexport const useUserHasSelectedFromNetwork = create<UserHasSelectedFromNetwork>(\r\n (set) => ({\r\n userHasSelectedFromNetwork: false,\r\n setUserHasSelectedFromNetwork: (userHasSelectedFromNetwork) =>\r\n set({ userHasSelectedFromNetwork })\r\n })\r\n)\r\n","import { TokenInfoWithBalance, useTokenInfo } from '../../../api'\r\nimport { useMemo } from 'react'\r\nimport {\r\n getOrderedTokensChainSearch,\r\n getOrderedTokensAssets,\r\n mergeAndDeduplicate\r\n} from '../../utils'\r\n\r\ninterface Props {\r\n searchTokensValue: string\r\n selectedChain?: number | null\r\n allTokens?: TokenInfoWithBalance[]\r\n}\r\n\r\nexport const useSearchTokens = ({\r\n searchTokensValue,\r\n selectedChain,\r\n allTokens\r\n}: Props) => {\r\n const { data: searchTokenInfoResult, isLoading: isLoadingSearchTokenInfo } =\r\n useTokenInfo({\r\n value: searchTokensValue,\r\n chainId: selectedChain ?? undefined\r\n })\r\n\r\n const newAllToken = useMemo(\r\n () =>\r\n allTokens?.map((token) => ({\r\n ...token,\r\n token_type: 'preset' as const\r\n })),\r\n [allTokens]\r\n )\r\n\r\n const searchTokensInfo = useMemo(() => {\r\n if (!searchTokensValue) {\r\n return undefined\r\n }\r\n\r\n if (searchTokenInfoResult) {\r\n const tokenWithBalances = searchTokenInfoResult.map((token) => {\r\n const balance = newAllToken?.find(\r\n (balance) =>\r\n balance.chain_id === token.chain_id &&\r\n balance.address === token.address\r\n )\r\n return {\r\n ...token,\r\n balance: balance?.balance,\r\n usdPrice: balance?.usdPrice\r\n }\r\n })\r\n\r\n const filteredTokens = newAllToken?.filter((token) => {\r\n return token.symbol\r\n .toLowerCase()\r\n .includes(searchTokensValue.toLowerCase())\r\n })\r\n\r\n if (filteredTokens) {\r\n const newArr = mergeAndDeduplicate(tokenWithBalances, filteredTokens)\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(newArr, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(newArr, selectedChain)\r\n }\r\n } else {\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(tokenWithBalances, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(tokenWithBalances, selectedChain)\r\n }\r\n }\r\n } else {\r\n const filteredTokens = newAllToken?.filter((token) => {\r\n if (searchTokensValue === '') return true\r\n return token.symbol\r\n .toLowerCase()\r\n .includes(searchTokensValue.toLowerCase())\r\n })\r\n if (!selectedChain) {\r\n return getOrderedTokensAssets(filteredTokens, selectedChain)\r\n } else {\r\n return getOrderedTokensChainSearch(filteredTokens, selectedChain)\r\n }\r\n }\r\n }, [newAllToken, searchTokenInfoResult, searchTokensValue, selectedChain])\r\n\r\n return {\r\n searchTokensInfo,\r\n isLoadingSearchTokenInfo\r\n }\r\n}\r\n","import { Box, Icon } from '@chakra-ui/react'\r\nimport { MdOutlineStarOutline, MdOutlineStarPurple500 } from 'react-icons/md'\r\nimport { useFavoritesContext } from './FavoritesContext'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface FavoriteButtonProps {\r\n networkId: number\r\n networkName?: string\r\n}\r\n\r\nexport const FavoriteButton: React.FC<FavoriteButtonProps> = ({\r\n networkId,\r\n networkName\r\n}) => {\r\n const { theme } = useWidgetTheme()\r\n const { isFavorite, addFavorite, removeFavorite } = useFavoritesContext()\r\n const favorited = isFavorite(networkId)\r\n\r\n const handleToggleFavorite = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n try {\r\n if (favorited) {\r\n removeFavorite(networkId)\r\n } else {\r\n addFavorite(networkId, networkName)\r\n }\r\n } catch (error) {\r\n console.error('Error toggling favorite:', error)\r\n }\r\n }\r\n\r\n return (\r\n <Box\r\n onClick={handleToggleFavorite}\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"pointer\"\r\n >\r\n {!favorited ? (\r\n <Icon\r\n as={MdOutlineStarOutline}\r\n fontSize=\"16px\"\r\n color={theme.weakTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n ) : (\r\n <Icon\r\n as={MdOutlineStarPurple500}\r\n fontSize=\"16px\"\r\n color={theme.highlightTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n )}\r\n </Box>\r\n )\r\n}\r\n","import { Box, HStack, Icon, Image, useBreakpointValue } from '@chakra-ui/react'\r\n\r\nimport { Text } from '../ui'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { ArrowFillRightIcon } from '../icons'\r\nimport { DingIcon } from '../icons'\r\nimport { useEffect, useState } from 'react'\r\nimport { FavoriteButton } from './FavoriteButton'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n chainId: number\r\n isSelected?: boolean\r\n isPopular?: boolean\r\n onClick: () => void\r\n isSelectingFromToken: boolean\r\n isPredictionChain?: boolean\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n}\r\nexport const Network = ({\r\n chainId,\r\n isSelected,\r\n onClick,\r\n isPopular,\r\n isSelectingFromToken,\r\n isPredictionChain,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains, setIsSelectPredictionChain } = useChainsStore()\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n const [isFromTestnet, setIsFromTestnet] = useState(false)\r\n const [isToTestnet, setIsToTestnet] = useState(false)\r\n\r\n const isMobile = useBreakpointValue({ base: true, md: false })\r\n const [isStarVisible, setIsStarVisible] = useState(false)\r\n const [isPopularIconShow, setIsPopularIconShow] = useState(false)\r\n const address = useEvmAddress()\r\n\r\n const handleClick = () => {\r\n const currentChainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n \r\n // Reset testnet limit based on what network is being selected\r\n if (currentChainInfo?.is_testnet) {\r\n // If clicking a testnet, re-enable the testnet limit\r\n setDisableTestnetLimit(false)\r\n } else {\r\n // If clicking a non-testnet, disable the testnet limit\r\n setDisableTestnetLimit(true)\r\n }\r\n \r\n onClick()\r\n if (isPredictionChain) {\r\n setIsSelectPredictionChain(true)\r\n } else {\r\n if (!isSelectingFromToken) {\r\n setIsSelectPredictionChain(false)\r\n }\r\n }\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(true)\r\n setIsPopularIconShow(true)\r\n }\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(false)\r\n setIsPopularIconShow(false)\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isMobile) {\r\n setIsStarVisible(true)\r\n setIsPopularIconShow(true)\r\n }\r\n }, [isMobile])\r\n\r\n useEffect(() => {\r\n if (disableTestnetLimit) {\r\n setIsToTestnet(false)\r\n setIsFromTestnet(false)\r\n return\r\n }\r\n const currentChainId = chainInfo?.chain_id\r\n const isCurrentChainTestnet = chainInfo?.is_testnet\r\n \r\n if (!isSelectingFromToken) {\r\n // When selecting to token, check if from is a testnet\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n const isFromChainTestnet = fromChainInfo?.is_testnet\r\n\r\n if (isFromChainTestnet) {\r\n if (isCurrentChainTestnet && currentChainId === fromChainId) {\r\n setIsToTestnet(false)\r\n } else if (!isCurrentChainTestnet || currentChainId !== fromChainId) {\r\n setIsToTestnet(true)\r\n }\r\n }\r\n } else {\r\n // When selecting from token, check if to is a testnet\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n const isToChainTestnet = toChainInfo?.is_testnet\r\n\r\n if (isToChainTestnet) {\r\n if (isCurrentChainTestnet && currentChainId === toChainId) {\r\n setIsFromTestnet(false)\r\n } else if (!isCurrentChainTestnet || currentChainId !== toChainId) {\r\n setIsFromTestnet(true)\r\n }\r\n }\r\n }\r\n }, [\r\n isSelectingFromToken,\r\n fromChainId,\r\n toChainId,\r\n chainInfo,\r\n disableTestnetLimit,\r\n chains\r\n ])\r\n\r\n if (chainInfo) {\r\n if (!chainInfo.outbound && isSelectingFromToken) {\r\n return null\r\n }\r\n if (!chainInfo.inbound && !isSelectingFromToken) {\r\n return null\r\n }\r\n }\r\n\r\n return (\r\n <HStack\r\n px={2}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={handleClick}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n data-selected={isSelected ? 'true' : 'false'}\r\n opacity={isToTestnet || isFromTestnet ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelected ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelected ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={['100%', '82%']}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <Image\r\n src={chainInfo?.chain_icon || `https://wheelx.fi/images/networks/${chainId}.png`}\r\n w={'24px'}\r\n h={'24px'}\r\n alt={chainInfo?.name}\r\n borderRadius={'full'}\r\n />\r\n <Text\r\n variant={{\r\n base: 'content7',\r\n md: 'content6_1'\r\n }}\r\n lineClamp=\"1\"\r\n flex={1}\r\n w={0}\r\n whiteSpace={'nowrap'}\r\n overflow={'hidden'}\r\n textOverflow={'ellipsis'}\r\n display={'flex'}\r\n color={theme.defaultTextColor}\r\n >\r\n {chainInfo?.name}\r\n {chainInfo?.chain_id === 1151111081099710 && (\r\n <Image\r\n src=\"https://wheelx.fi/images/new.png\"\r\n alt=\"new\"\r\n w={'22px'}\r\n marginLeft={'3px'}\r\n borderRadius={'3px'}\r\n objectFit={'contain'}\r\n ></Image>\r\n )}\r\n </Text>\r\n {isStarVisible && address && !isPopular && !isPredictionChain && (\r\n <FavoriteButton networkId={chainId} networkName={chainInfo?.name} />\r\n )}\r\n {isPopularIconShow && isPopular && (\r\n <Box\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"default\"\r\n >\r\n <Icon\r\n as={DingIcon}\r\n fontSize=\"14px\"\r\n width={'14px'}\r\n h={'14px'}\r\n color={theme.highlightTextColor}\r\n transition=\"opacity 0.2s ease-in-out\"\r\n />\r\n </Box>\r\n )}\r\n </HStack>\r\n {isSelected && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )\r\n}\r\n","import { TokenInfo } from '../../api'\r\n\r\nexport interface ChainInfoShort {\r\n name: string\r\n rpc_url: string\r\n rpc_fallback: string[]\r\n chain_icon: string\r\n chain_id: number\r\n platform_id?: number\r\n}\r\nexport function countLeadingZerosAfterDecimal(numStr: string): number {\r\n if (!numStr.includes('.')) return 0\r\n\r\n const [, decimalPart] = numStr.split('.')\r\n const firstNonZeroIndex = decimalPart.search(/[1-9]/)\r\n\r\n if (firstNonZeroIndex === -1) return 0\r\n return firstNonZeroIndex\r\n}\r\nexport function findItemByName(\r\n arr: Array<ChainInfoShort>,\r\n targetName: string\r\n): [boolean, ChainInfoShort | undefined] {\r\n const foundItem = arr.find(\r\n (item) =>\r\n item.name.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase()\r\n )\r\n return [foundItem !== undefined, foundItem]\r\n}\r\nexport function findItemBySymbol(\r\n arr: Array<TokenInfo>,\r\n targetName: string,\r\n chainId: number | undefined,\r\n platform_id?: number | undefined\r\n): [boolean, TokenInfo | undefined] {\r\n const foundItem = arr.find((item) => {\r\n if (platform_id && platform_id > 0) {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.platform_id === platform_id\r\n )\r\n } else {\r\n return (\r\n item.symbol.replace(/\\s+/g, '').toLowerCase() ===\r\n targetName.replace(/\\s+/g, '').toLowerCase() &&\r\n item.chain_id === chainId\r\n )\r\n }\r\n })\r\n return [foundItem !== undefined, foundItem]\r\n}\r\n\r\nexport function getBaseUrl(): string {\r\n return window.location.origin + window.location.pathname\r\n}\r\n\r\n/**\r\n * Formats a number with appropriate units (K for thousands, M for millions),\r\n * displaying integers without decimal parts for whole numbers and removing trailing zeros in decimals.\r\n * @param num - The number to be formatted.\r\n * @returns The formatted string with unit suffix if applicable.\r\n */\r\nexport function formatNumberWithUnits(num: number): string {\r\n if (num < 100000) {\r\n // For numbers less than 100,000: display integers directly, decimals as-is but remove trailing zeros\r\n const numStr = num.toString()\r\n return numStr.includes('.') ? numStr.replace(/\\.?0+$/, '') : numStr\r\n } else if (num < 1000000) {\r\n // Between 100,000 and 1,000,000: convert to K (thousands) unit\r\n const valueInK = num / 1000\r\n // Display as XK for integers, X.XXK for decimals (remove trailing zeros)\r\n const formatted =\r\n valueInK % 1 === 0\r\n ? `${valueInK}K`\r\n : `${valueInK.toFixed(2)}K`.replace(/\\.?0+K$/, 'K')\r\n return formatted\r\n } else {\r\n // For 1,000,000 and above: convert to M (millions) unit\r\n const valueInM = num / 1000000\r\n // Display as XM for integers, X.XXXM for decimals (remove trailing zeros)\r\n const formatted =\r\n valueInM % 1 === 0\r\n ? `${valueInM}M`\r\n : `${valueInM.toFixed(3)}M`.replace(/\\.?0+M$/, 'M')\r\n return formatted\r\n }\r\n}\r\n\r\n/**\r\n * Formats a numeric string to have at most 3 decimal places with rounding.\r\n * Preserves existing decimals if less than or equal to 3, shows integer if no decimals.\r\n * @param numericString - The string representation of the number to format.\r\n * @returns Formatted string with appropriate decimal places (rounded if necessary).\r\n * @throws Error if the input string is not a valid number.\r\n */\r\nexport function formatDecimalStringWithRounding(numericString: string): string {\r\n // Convert the input string to a number\r\n const numberValue = parseFloat(numericString)\r\n\r\n // Check if the conversion resulted in a valid number\r\n if (isNaN(numberValue)) {\r\n throw new Error(\r\n 'Invalid numeric string provided. Input must be a valid number.'\r\n )\r\n }\r\n\r\n // Find the position of the decimal point in the original string\r\n const decimalIndex = numericString.indexOf('.')\r\n\r\n // If there's no decimal point, return the string as it represents an integer\r\n if (decimalIndex === -1) {\r\n return numericString\r\n }\r\n\r\n // Calculate the number of decimal places in the original string\r\n const decimalPlaces = numericString.length - decimalIndex - 1\r\n\r\n let result: string\r\n\r\n // If there are 3 or fewer decimal places, use the original string\r\n if (decimalPlaces <= 3) {\r\n result = numericString\r\n } else {\r\n // Use toFixed(3) to round and keep exactly 3 decimal places\r\n result = numberValue.toFixed(3)\r\n }\r\n\r\n // Remove trailing zeros after the decimal point[6,8](@ref)\r\n // If all decimals are zeros, remove the decimal point as well\r\n result = result.replace(/(\\.\\d*?[1-9])0+$|\\.0+$/, '$1')\r\n\r\n return result\r\n}\r\n","'use client'\r\nimport { formatTokenAmount } from '../utils'\r\nimport { countLeadingZerosAfterDecimal } from './utils'\r\nimport { Heading } from '../ui'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\ninterface Props extends React.ComponentProps<typeof Heading> {\r\n amount: Fraction\r\n prefix?: string\r\n suffix?: string\r\n decimals?: number\r\n}\r\n\r\nexport const TokenAmountHeading = ({\r\n amount,\r\n decimals,\r\n prefix,\r\n suffix,\r\n ...props\r\n}: Props) => {\r\n const _amount = formatTokenAmount({\r\n amount,\r\n decimals\r\n })\r\n\r\n const leadingZeros = countLeadingZerosAfterDecimal(_amount)\r\n if (leadingZeros > 5) {\r\n return (\r\n <Heading variant={'heading8'} {...props} as=\"div\">\r\n {prefix} {_amount.slice(0, 3)}\r\n <span\r\n style={{\r\n display: 'inline-block',\r\n transform: 'scale(0.6) translateY(8px)'\r\n }}\r\n >\r\n {leadingZeros}\r\n </span>\r\n {_amount.slice(leadingZeros + 2)} {suffix}\r\n </Heading>\r\n )\r\n }\r\n\r\n return (\r\n <Heading variant={'heading11'} {...props} as=\"div\">\r\n {prefix} {_amount} {suffix}\r\n </Heading>\r\n )\r\n}\r\n","'use client'\r\nimport { formatTokenAmount } from '../utils'\r\nimport { countLeadingZerosAfterDecimal } from './utils'\r\nimport { Text } from '../ui'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\ninterface Props extends React.ComponentProps<typeof Text> {\r\n amount: Fraction\r\n prefix?: string\r\n suffix?: string\r\n decimals?: number\r\n}\r\n\r\nexport const TokenAmountText = ({\r\n amount,\r\n decimals,\r\n prefix,\r\n suffix,\r\n ...props\r\n}: Props) => {\r\n const _amount = formatTokenAmount({\r\n amount,\r\n decimals\r\n })\r\n\r\n const leadingZeros = countLeadingZerosAfterDecimal(_amount)\r\n if (leadingZeros > 5) {\r\n return (\r\n <Text variant={'content8'} {...props}>\r\n {prefix} {_amount.slice(0, 3)}\r\n <span\r\n style={{\r\n display: 'inline-block',\r\n transform: 'scale(0.6) translateY(8px)'\r\n }}\r\n >\r\n {leadingZeros}\r\n </span>\r\n {_amount.slice(leadingZeros + 2)} {suffix}\r\n </Text>\r\n )\r\n }\r\n\r\n return (\r\n <Text variant={'content7'} {...props}>\r\n {prefix} {_amount} {suffix}\r\n </Text>\r\n )\r\n}\r\n","import { Box, BoxProps, ConditionalValue } from '@chakra-ui/react'\r\nimport { OptimizedImage } from '../ui/OptimizedImage'\r\n\r\nconst chainsInfo: Record<number, any> = {}\r\nimport { TokenInfo } from '../../api'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\ninterface TokenIconProps extends BoxProps {\r\n smallW?: ConditionalValue<number | string> | undefined\r\n smallH?: ConditionalValue<number | string> | undefined\r\n smallT?: ConditionalValue<number | string> | undefined\r\n smallB?: ConditionalValue<number | string> | undefined\r\n smallL?: ConditionalValue<number | string> | undefined\r\n smallR?: ConditionalValue<number | string> | undefined\r\n tokenInfo?: TokenInfo | null\r\n customChainLogo?: string\r\n priority?: boolean\r\n}\r\n\r\nexport const TokenIconWithNetworkLogo = ({\r\n tokenInfo,\r\n customChainLogo,\r\n w = {\r\n base: '28px',\r\n md: '32px'\r\n },\r\n h = {\r\n base: '28px',\r\n md: '32px'\r\n },\r\n smallW = {\r\n base: 3,\r\n md: 4\r\n },\r\n smallH = {\r\n base: 3,\r\n md: 4\r\n },\r\n smallB = -1,\r\n smallR = 0,\r\n pr = {\r\n base: '4px',\r\n md: '8px'\r\n },\r\n priority = false,\r\n ...props\r\n}: TokenIconProps) => {\r\n const { name, chain_id, logo } = tokenInfo ?? {}\r\n const { chains } = useChainsStore()\r\n const chain = chains?.find((chain) => chain.chain_id === chain_id)\r\n\r\n // console.log('logo: ', logo, 'name:', name)\r\n\r\n return (\r\n <Box\r\n pos={'relative'}\r\n w={w}\r\n h={h}\r\n pr={pr}\r\n boxSizing={'content-box'}\r\n {...props}\r\n >\r\n <OptimizedImage\r\n w={w}\r\n h={h}\r\n borderRadius={'full'}\r\n src={logo || `https://wheelx.fi/images/default-token-icon.png`}\r\n alt={name || ''}\r\n objectFit=\"cover\"\r\n priority={priority}\r\n />\r\n <OptimizedImage\r\n pos={'absolute'}\r\n bottom={smallB ? smallB : -1}\r\n right={smallR ? smallR : 0}\r\n src={\r\n customChainLogo\r\n ? customChainLogo\r\n : chain?.chain_icon || (chain_id ? chainsInfo[chain_id]?.icon : '')\r\n }\r\n alt={chain?.name ?? ''}\r\n w={smallW}\r\n h={smallH}\r\n borderRadius={'full'}\r\n border={'1px solid white'}\r\n bg={'white'}\r\n objectFit=\"cover\"\r\n />\r\n </Box>\r\n )\r\n}\r\n","import { Box, Icon } from '@chakra-ui/react'\r\n// import { MdOutlineStarOutline, MdOutlineStarPurple500 } from 'react-icons/md'\r\nimport { MdFavorite, MdFavoriteBorder } from 'react-icons/md'\r\nimport { useTokenFavoritesContext } from './TokenFavoritesContext'\r\nimport { TokenInfo } from '../../api'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface FavoriteButtonProps {\r\n tokenInfo: TokenInfo\r\n}\r\n\r\nexport const TokenFavoriteButton: React.FC<FavoriteButtonProps> = ({\r\n tokenInfo\r\n}) => {\r\n const { theme } = useWidgetTheme()\r\n const {\r\n chain_id: chainId,\r\n address: tokenAddress,\r\n symbol,\r\n decimals,\r\n logo,\r\n name,\r\n tags\r\n } = tokenInfo\r\n const { isFavorite, addFavorite, removeFavorite } = useTokenFavoritesContext()\r\n const favorited = isFavorite(chainId, tokenAddress)\r\n\r\n const handleToggleFavorite = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n e.preventDefault()\r\n try {\r\n if (favorited) {\r\n removeFavorite(chainId, tokenAddress)\r\n } else {\r\n addFavorite(chainId, tokenAddress, symbol, decimals, logo, name, tags)\r\n }\r\n } catch (error) {\r\n console.error('Error toggling favorite:', error)\r\n }\r\n }\r\n\r\n return (\r\n <Box\r\n onClick={handleToggleFavorite}\r\n w={'22px'}\r\n h={'22px'}\r\n backgroundColor={'transparent'}\r\n cursor=\"pointer\"\r\n >\r\n {!favorited ? (\r\n <Icon\r\n as={MdFavoriteBorder}\r\n fontSize=\"16px\"\r\n color={theme.weakTextColor}\r\n marginLeft={'4px'}\r\n />\r\n ) : (\r\n <Icon\r\n as={MdFavorite}\r\n fontSize=\"16px\"\r\n marginLeft={'4px'}\r\n color={theme.highlightTextColor}\r\n />\r\n )}\r\n </Box>\r\n )\r\n}\r\n","import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n ReactNode,\r\n useCallback\r\n} from 'react'\r\nimport { useAccount } from 'wagmi'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { isLocalStorageSupported } from './storageUtils'\r\nimport { Tag } from '../../api/useChainsAndTokens'\r\n\r\nexport interface TokenSearchHistoryItem {\r\n chain_id: number\r\n address: `0x${string}`\r\n symbol: string\r\n decimals: number\r\n logo: string\r\n name: string\r\n timestamp?: number\r\n tags: Tag[]\r\n categories?: string[]\r\n}\r\n\r\ninterface TokenSearchHistoryContextType {\r\n searchHistory: TokenSearchHistoryItem[]\r\n addSearchHistory: (\r\n chainId: number,\r\n tokenAddress: `0x${string}`,\r\n symbol: string,\r\n decimals: number,\r\n logo: string,\r\n name: string,\r\n tags: Tag[]\r\n ) => void\r\n removeSearchHistory: (chainId: number, tokenAddress: string) => void\r\n isSearchHistory: (chainId: number, tokenAddress: string) => boolean\r\n clearSearchHistory: () => void\r\n isLoading: boolean\r\n walletAddress: string | undefined\r\n storageError: string | null\r\n}\r\n\r\nconst TokenSearchHistoryContext = createContext<TokenSearchHistoryContextType>({\r\n searchHistory: [],\r\n addSearchHistory: () => {},\r\n removeSearchHistory: () => {},\r\n isSearchHistory: () => false,\r\n clearSearchHistory: () => {},\r\n isLoading: true,\r\n walletAddress: undefined,\r\n storageError: null\r\n})\r\n\r\ninterface TokenSearchHistoryProviderProps {\r\n children: ReactNode\r\n}\r\n\r\nexport const TokenSearchHistoryProvider: React.FC<\r\n TokenSearchHistoryProviderProps\r\n> = ({ children }) => {\r\n const address = useEvmAddress()\r\n const { isConnected } = useAccount()\r\n const [searchHistory, setSearchHistory] = useState<TokenSearchHistoryItem[]>(\r\n []\r\n )\r\n const [isLoading, setIsLoading] = useState(true)\r\n const [storageError, setStorageError] = useState<string | null>(null)\r\n\r\n const getStorageKey = useCallback((): string | null => {\r\n if (!address) return null\r\n return `web3-token-searchHistory-${address.toLowerCase()}`\r\n }, [address])\r\n\r\n useEffect(() => {\r\n const loadSearchHistory = async () => {\r\n if (!address) {\r\n setSearchHistory([])\r\n setIsLoading(false)\r\n return\r\n }\r\n\r\n try {\r\n const storageKey = getStorageKey()\r\n if (!storageKey) {\r\n setIsLoading(false)\r\n return\r\n }\r\n\r\n const stored = localStorage.getItem(storageKey)\r\n if (stored) {\r\n const parsedSearchHistory = JSON.parse(\r\n stored\r\n ) as TokenSearchHistoryItem[]\r\n setSearchHistory(parsedSearchHistory)\r\n }\r\n } catch (error) {\r\n console.error('Failed to load searchHistory from localStorage:', error)\r\n setSearchHistory([])\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n loadSearchHistory()\r\n }, [address, getStorageKey])\r\n\r\n const saveSearchHistory = (newSearchHistory: TokenSearchHistoryItem[]) => {\r\n if (typeof window === 'undefined') return\r\n\r\n if (!isLocalStorageSupported()) {\r\n setStorageError('you browser can not using local storage')\r\n return\r\n }\r\n\r\n const storageKey = getStorageKey()\r\n if (!storageKey) return\r\n\r\n try {\r\n localStorage.setItem(storageKey, JSON.stringify(newSearchHistory))\r\n setSearchHistory(newSearchHistory)\r\n } catch (error) {\r\n console.error('Failed to save searchHistory to localStorage:', error)\r\n }\r\n }\r\n\r\n const addSearchHistory = (\r\n chainId: number,\r\n tokenAddress: `0x${string}`,\r\n symbol: string,\r\n decimals: number,\r\n logo: string,\r\n name: string,\r\n tags: Tag[]\r\n ) => {\r\n if (!isConnected || !address) {\r\n console.warn('Cannot add favorite: No wallet connected')\r\n return\r\n }\r\n const existingIndex = searchHistory.findIndex(\r\n (fav) => fav.chain_id === chainId && fav.address === tokenAddress\r\n )\r\n\r\n if (existingIndex === -1) {\r\n const newSearchHistory: TokenSearchHistoryItem = {\r\n chain_id: chainId,\r\n address: tokenAddress,\r\n symbol,\r\n decimals,\r\n logo,\r\n name,\r\n tags: tags,\r\n timestamp: Date.now()\r\n }\r\n const updatedSearchHistory = [...searchHistory, newSearchHistory]\r\n saveSearchHistory(updatedSearchHistory)\r\n }\r\n }\r\n\r\n const removeSearchHistory = (chainId: number, tokenAddress: string) => {\r\n if (!isConnected || !address) {\r\n console.warn('Cannot remove favorite: No wallet connected')\r\n return\r\n }\r\n\r\n // const updatedSearchHistory = searchHistory.filter(\r\n // (fav) => !(fav.chainId === chainId && fav.tokenAddress === tokenAddress)\r\n // )\r\n // saveSearchHistory(updatedSearchHistory)\r\n setSearchHistory((prevSearchHistory) => {\r\n const updatedSearchHistory = prevSearchHistory.filter(\r\n (fav) => !(fav.chain_id === chainId && fav.address === tokenAddress)\r\n )\r\n saveSearchHistory(updatedSearchHistory)\r\n return updatedSearchHistory\r\n })\r\n }\r\n\r\n const isSearchHistory = (chainId: number, tokenAddress: string): boolean => {\r\n return searchHistory.some(\r\n (fav) => fav.chain_id === chainId && fav.address === tokenAddress\r\n )\r\n }\r\n\r\n const clearSearchHistory = () => {\r\n if (!isConnected || !address) return\r\n\r\n const storageKey = getStorageKey()\r\n if (!storageKey) return\r\n\r\n try {\r\n localStorage.removeItem(storageKey)\r\n setSearchHistory([])\r\n } catch (error) {\r\n console.error('Failed to clear searchHistory:', error)\r\n }\r\n }\r\n\r\n const contextValue: TokenSearchHistoryContextType = {\r\n searchHistory,\r\n addSearchHistory,\r\n removeSearchHistory,\r\n isSearchHistory,\r\n clearSearchHistory,\r\n isLoading,\r\n storageError,\r\n walletAddress: address\r\n }\r\n\r\n return (\r\n <TokenSearchHistoryContext.Provider value={contextValue}>\r\n {children}\r\n </TokenSearchHistoryContext.Provider>\r\n )\r\n}\r\n\r\nexport const useTokenSearchHistoryContext = () => {\r\n const context = useContext(TokenSearchHistoryContext)\r\n if (context === undefined) {\r\n throw new Error(\r\n 'useSearchHistoryContext must be used within a token SearchHistoryProvider'\r\n )\r\n }\r\n return context\r\n}\r\n","import { HStack, Image, useBreakpointValue, VStack } from '@chakra-ui/react'\r\n\r\nimport { TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { sliceAddress } from '../../utils'\r\n\r\nimport { Heading, Text } from '../ui'\r\n\r\nimport { Fraction } from 'bi-fraction'\r\nimport { TokenAmountHeading, TokenIconWithNetworkLogo } from '../commons'\r\nimport { TokenFavoriteButton } from './TokenFavoriteButton'\r\nimport { useEffect, useState } from 'react'\r\n// import { useAccount } from 'wagmi'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useTokenSearchHistoryContext } from './SearchHistoryContext'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useMemo } from 'react'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\ninterface Props {\r\n tokenInfo: TokenInfoWithBalance\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n isSelectAll?: boolean\r\n isSearchResult?: boolean\r\n isSelectingFromToken: boolean\r\n}\r\nexport const TokenAndAddress = ({\r\n tokenInfo,\r\n onSelectToken,\r\n isSelectAll,\r\n isSearchResult,\r\n isSelectingFromToken\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { address, symbol, tags } = tokenInfo\r\n const userAddress = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { chains } = useChainsStore()\r\n\r\n // Check if user has any wallet connected (EVM or Solana)\r\n const hasConnectedWallet = !!(userAddress || solanaWalletAddress)\r\n\r\n const isPinToken = tags?.includes('pin')\r\n const isCertToken = tags?.includes('cert')\r\n\r\n const isMobile = useBreakpointValue({ base: true, md: false })\r\n const [isStarVisible, setIsStarVisible] = useState(false)\r\n const { addSearchHistory } = useTokenSearchHistoryContext()\r\n const [tokenNotIn, setTokenNotIn] = useState(false)\r\n const [tokenNotOut, setTokenNotOut] = useState(false)\r\n const [hideBalance, setHideBalance] = useState(true)\r\n const { setIsDepositPlatformToken, setDifferentAddress } =\r\n useDifferentAddressStore()\r\n\r\n const currentChainInfo = useMemo(() => {\r\n return chains?.find((chain) => chain.chain_id === tokenInfo.chain_id)\r\n }, [chains, tokenInfo])\r\n\r\n // console.log('### userAddress ####:', userAddress)\r\n\r\n const handleMouseEnter = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(true)\r\n }\r\n }\r\n\r\n const handleMouseLeave = () => {\r\n if (!isMobile) {\r\n setIsStarVisible(false)\r\n }\r\n }\r\n\r\n const handleClick = () => {\r\n if (isSearchResult) {\r\n const { chain_id, address, symbol, decimals, logo, name, tags } =\r\n tokenInfo\r\n addSearchHistory(chain_id, address, symbol, decimals, logo, name, tags)\r\n }\r\n if (tokenNotOut) {\r\n return\r\n }\r\n if (tokenNotIn) {\r\n return\r\n }\r\n onSelectToken(tokenInfo)\r\n const { solanaWalletAddress } = useWalletConnectedStore.getState()\r\n const isSolanaToken = isSolanaChain(tokenInfo.chain_id)\r\n\r\n // console.log('###tokenInfo####:', tokenInfo)\r\n if (tokenInfo?.platform_id && tokenInfo.platform_id > 0) {\r\n setIsDepositPlatformToken(true)\r\n setDifferentAddress(undefined)\r\n } else {\r\n if (!isSelectingFromToken) {\r\n setIsDepositPlatformToken(false)\r\n if (userAddress || solanaWalletAddress) {\r\n if (isSolanaToken && solanaWalletAddress) {\r\n // console.log(\r\n // '######### Setting different address for Solana token #########',\r\n // solanaWalletAddress\r\n // )\r\n setDifferentAddress(solanaWalletAddress)\r\n } else {\r\n setDifferentAddress(userAddress)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (currentChainInfo) {\r\n if (!currentChainInfo.outbound && isSelectingFromToken) {\r\n setTokenNotOut(true)\r\n } else {\r\n setTokenNotOut(false)\r\n }\r\n\r\n if (!currentChainInfo.inbound && !isSelectingFromToken) {\r\n setTokenNotIn(true)\r\n } else {\r\n setTokenNotIn(false)\r\n }\r\n\r\n if (tokenInfo?.platform_id && tokenInfo.platform_id > 0) {\r\n setHideBalance(true)\r\n } else {\r\n setHideBalance(false)\r\n }\r\n }\r\n }, [currentChainInfo, isSelectingFromToken])\r\n\r\n useEffect(() => {\r\n if (isMobile) {\r\n setIsStarVisible(true)\r\n }\r\n }, [isMobile])\r\n // const isTopToken = tags.includes('top')\r\n\r\n if (tokenNotIn || tokenNotOut) {\r\n return null\r\n }\r\n\r\n return (\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n cursor={'pointer'}\r\n onClick={handleClick}\r\n p={2}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n flexShrink={0}\r\n onMouseEnter={handleMouseEnter}\r\n onMouseLeave={handleMouseLeave}\r\n >\r\n <HStack flexShrink={0} flex={1} w={0}>\r\n <TokenIconWithNetworkLogo tokenInfo={tokenInfo} />\r\n <VStack gap={1} align={'start'} flex={1} w={0}>\r\n <HStack gap={0} w={'100%'} h={'20px'} overflow={'hidden'}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n maxW={'70%'}\r\n overflow={'hidden'}\r\n textOverflow={'ellipsis'}\r\n whiteSpace={'nowrap'}\r\n >\r\n {symbol}\r\n </Heading>\r\n {isPinToken && (\r\n <Image\r\n src={'https://wheelx.fi/images/gas.png'}\r\n w={'14px'}\r\n h={'14px'}\r\n alt={'pin'}\r\n marginLeft={'3px'}\r\n />\r\n )}\r\n {isCertToken && (\r\n <Image\r\n src={'https://wheelx.fi/images/verified.png'}\r\n w={'14px'}\r\n h={'14px'}\r\n alt={'cert'}\r\n marginLeft={'3px'}\r\n />\r\n )}\r\n {isStarVisible &&\r\n hasConnectedWallet &&\r\n !isSelectAll &&\r\n !hideBalance && (\r\n <TokenFavoriteButton\r\n // chainId={tokenInfo.chain_id}\r\n // tokenAddress={tokenInfo.address}\r\n tokenInfo={tokenInfo}\r\n />\r\n )}\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n {sliceAddress(address)}\r\n {/* - {isPinToken ? 'Pin' : 'no pin'} -\r\n {isTopToken ? 'Top' : 'no top'} */}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n {hasConnectedWallet && !hideBalance && (\r\n <VStack gap={1} align={'end'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(\r\n tokenInfo.balance\r\n ? tokenInfo.balance !== 'NaN'\r\n ? tokenInfo.balance\r\n : 0\r\n : 0\r\n ).shl(tokenInfo.decimals)}\r\n decimals={tokenInfo.decimals}\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n />\r\n\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n {tokenInfo.usdPrice &&\r\n tokenInfo.balance &&\r\n tokenInfo.balance !== 'NaN' ? (\r\n <>\r\n $\r\n {new Fraction(tokenInfo.balance)\r\n .mul(tokenInfo.usdPrice)\r\n .toFormat({\r\n decimalPlaces: 2,\r\n trailingZeros: false\r\n })}\r\n </>\r\n ) : null}\r\n </Text>\r\n </VStack>\r\n )}\r\n </HStack>\r\n )\r\n}\r\n","import { HStack, Icon, Spinner, VStack, Image } from '@chakra-ui/react'\r\nimport { TokenAndAddress } from './TokenAndAddress'\r\nimport { TokenInfo, TokenInfoWithBalance } from '../../api'\r\nimport { TokenBalance } from '../../api'\r\nimport { Text } from '../ui'\r\n// import { use, useMemo } from 'react'\r\nimport {\r\n filterTokenByType,\r\n filterTokenUnType,\r\n getOrderedTokensAssets\r\n} from './utils'\r\nimport { useEffect, useMemo, useState } from 'react'\r\nimport { useTokenFavoritesContext } from './TokenFavoritesContext'\r\nimport { useTokenSearchHistoryContext } from './SearchHistoryContext'\r\n\r\nimport { AllIcon } from '../icons'\r\nimport { StablecoinIcon } from '../icons'\r\nimport { StockIcon } from '../icons'\r\nimport { XStockIcon } from '../icons'\r\nimport { LikedIcon } from '../icons'\r\nimport { SearchIcon } from '../icons'\r\nimport { AIIcon } from '../icons'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { isSolanaChain } from '../../consts/solana'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\nconst deduplicateByAddressAndChainId = (tokens: TokenInfo[]): TokenInfo[] => {\r\n const addressMap = new Map<string, TokenInfo>()\r\n return tokens.filter((token) => {\r\n const key = `${token.address}-${token.chain_id.toString()}`\r\n if (addressMap.has(key)) {\r\n return false\r\n }\r\n addressMap.set(key, token)\r\n return true\r\n })\r\n}\r\n\r\nconst tabList = [\r\n {\r\n name: 'All',\r\n type: 'all',\r\n icon: AllIcon\r\n },\r\n {\r\n name: 'AI',\r\n type: 'ai',\r\n icon: AIIcon\r\n },\r\n {\r\n name: 'Stablecoin',\r\n type: 'stablecoin',\r\n icon: StablecoinIcon\r\n },\r\n {\r\n name: 'Stock',\r\n type: 'stock',\r\n icon: StockIcon\r\n },\r\n {\r\n name: 'xStocks',\r\n type: 'xstocks',\r\n icon: XStockIcon\r\n },\r\n {\r\n name: 'Liked',\r\n type: 'liked',\r\n icon: LikedIcon\r\n },\r\n {\r\n name: 'Searched',\r\n type: 'history',\r\n icon: SearchIcon\r\n }\r\n]\r\n\r\ninterface Props {\r\n isLoading: boolean\r\n isSelectAll: boolean\r\n userBalances?: TokenBalance[]\r\n tokens?: TokenInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n chainId?: number | null\r\n resetSearch: () => void\r\n searchTokensValue: string\r\n isSelectingFromToken: boolean\r\n}\r\n\r\nexport const TokenList = ({\r\n isLoading,\r\n isSelectAll,\r\n userBalances,\r\n tokens,\r\n searchTokensInfo,\r\n onSelectToken,\r\n chainId,\r\n resetSearch,\r\n searchTokensValue,\r\n isSelectingFromToken\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const userTokens = useMemo(() => {\r\n return userBalances?.map((balance) => {\r\n return {\r\n ...balance.token,\r\n balance: balance.balance,\r\n usdPrice: balance.price\r\n }\r\n })\r\n }, [userBalances])\r\n\r\n const { favorites } = useTokenFavoritesContext()\r\n const { searchHistory } = useTokenSearchHistoryContext()\r\n const [currentTab, setCurrentTab] = useState('all')\r\n const [showTab, setShowTab] = useState(false)\r\n // const [showStablecoin, setShowStablecoin] = useState(false)\r\n // const [showStock, setShowStock] = useState(false)\r\n const address = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n const { isSelectPredictionChain } = useChainsStore()\r\n const isSolana = isSolanaChain(chainId || undefined)\r\n\r\n // Check if user has any wallet connected (EVM or Solana)\r\n const hasConnectedWallet = !!(address || solanaWalletAddress)\r\n\r\n const currentChainFavTokens = useMemo(() => {\r\n if (currentTab !== 'liked') {\r\n return []\r\n }\r\n return favorites?.filter((fav) => fav.chain_id === chainId)\r\n }, [currentTab, favorites, chainId])\r\n\r\n useEffect(() => {\r\n setCurrentTab('all')\r\n }, [chainId])\r\n\r\n useEffect(() => {\r\n if (!searchTokensValue) {\r\n setCurrentTab('all')\r\n }\r\n }, [searchTokensValue])\r\n\r\n const currentChainSearchHistory = useMemo(() => {\r\n if (currentTab !== 'history') {\r\n return []\r\n }\r\n return searchHistory?.filter((fav) => fav.chain_id === chainId)\r\n }, [currentTab, searchHistory, chainId])\r\n const currentTokens = useMemo(() => {\r\n if (\r\n currentTab === 'stock' ||\r\n currentTab === 'xstocks' ||\r\n currentTab === 'stablecoin' ||\r\n currentTab === 'ai'\r\n ) {\r\n return filterTokenByType(tokens || [], currentTab)\r\n }\r\n return []\r\n }, [currentTab, tokens])\r\n\r\n const AllTokens = useMemo(() => {\r\n if (currentTab !== 'all') {\r\n return []\r\n }\r\n return filterTokenUnType(tokens || [], ['stock', 'xstocks'])\r\n }, [currentTab, tokens])\r\n\r\n const isHasStablecoin = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('stablecoin')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n const isHasStock = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('stock')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n const isHasXStock = useMemo(() => {\r\n const findToken = tokens?.find((token) =>\r\n token.categories?.includes('xstocks')\r\n )\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n const isHasAI = useMemo(() => {\r\n const findToken = tokens?.find((token) => token.categories?.includes('ai'))\r\n if (findToken) {\r\n return true\r\n }\r\n return false\r\n }, [tokens])\r\n\r\n // console.log('#### tokens ######:', tokens)\r\n\r\n const render = () => {\r\n if (isLoading) {\r\n return (\r\n <HStack w={'100%'} h={'50px'} justify={'center'} align={'center'}>\r\n <Spinner />\r\n </HStack>\r\n )\r\n }\r\n\r\n if (searchTokensInfo) {\r\n if (searchTokensInfo.length > 0) {\r\n if (isSelectAll) {\r\n return searchTokensInfo.map((token, index) => {\r\n if (token.balance) {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n }\r\n })\r\n } else {\r\n return searchTokensInfo.map((token, index) => {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSearchResult={true}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n })\r\n }\r\n } else {\r\n return (\r\n <HStack w={'100%'} h={'50px'} justify={'center'} align={'center'}>\r\n <Text\r\n color={theme.weakTextColor}\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n >\r\n No results\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n }\r\n\r\n if (isSelectAll) {\r\n return getOrderedTokensAssets(userTokens)?.map((token, index) => {\r\n return (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n )\r\n })\r\n } else {\r\n let newTokens = AllTokens\r\n if (currentTab === 'liked') {\r\n newTokens = currentChainFavTokens\r\n } else if (currentTab === 'history') {\r\n newTokens = currentChainSearchHistory\r\n } else if (\r\n currentTab === 'stablecoin' ||\r\n currentTab === 'stock' ||\r\n currentTab === 'xstocks' ||\r\n currentTab === 'ai'\r\n ) {\r\n newTokens = currentTokens\r\n }\r\n if (newTokens.length === 0) {\r\n return (\r\n <VStack\r\n height={'300px'}\r\n justifyContent={'center'}\r\n gap={4}\r\n alignItems={'center'}\r\n background={theme.defaultBgColor}\r\n borderRadius={'20px'}\r\n w={'100%'}\r\n >\r\n <Image src=\"https://wheelx.fi/images/no_data.png\" alt=\"no data\" w={'120px'}></Image>\r\n </VStack>\r\n )\r\n }\r\n return deduplicateByAddressAndChainId(newTokens)?.map((token, index) => (\r\n <TokenAndAddress\r\n key={`${token.chain_id}-${token.address}-${index}`}\r\n tokenInfo={token}\r\n isSelectAll={isSelectAll}\r\n onSelectToken={onSelectToken}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n ))\r\n }\r\n }\r\n\r\n const renderTab = () => {\r\n if (!showTab) {\r\n return null\r\n }\r\n return (\r\n <HStack w={'100%'} p={2} overflowX={'auto'} overflowY={'hidden'}>\r\n {tabList.map((item, index) => {\r\n if (!hasConnectedWallet) {\r\n if (item.type === 'liked' || item.type === 'history') {\r\n return null\r\n }\r\n }\r\n if (item.type === 'stablecoin' && !isHasStablecoin) {\r\n return null\r\n }\r\n if (item.type === 'stock' && !isHasStock) {\r\n return null\r\n }\r\n if (item.type === 'xstocks' && !isHasXStock && !isSolana) {\r\n return null\r\n }\r\n if (item.type === 'ai' && !isHasAI) {\r\n return null\r\n }\r\n\r\n return (\r\n <HStack\r\n key={index}\r\n onClick={() => {\r\n setCurrentTab(item.type)\r\n resetSearch()\r\n }}\r\n color={currentTab === item.type ? theme.highlightTextColor : theme.weakTextColor}\r\n backgroundColor={currentTab === item.type ? theme.highlightBgColor : theme.assistBgColor}\r\n h={'26px'}\r\n padding={'0 9px'}\r\n borderRadius={'5px'}\r\n fontSize={'12px'}\r\n cursor={'pointer'}\r\n >\r\n <Icon as={item.icon} boxSize={'14px'} />\r\n <Text>{item.name}</Text>\r\n </HStack>\r\n )\r\n })}\r\n </HStack>\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (!isSelectAll) {\r\n if (!hasConnectedWallet) {\r\n if (!isHasStock && !isHasStablecoin && !isHasAI) {\r\n setShowTab(false)\r\n } else {\r\n setShowTab(true)\r\n }\r\n } else {\r\n setShowTab(true)\r\n }\r\n } else {\r\n setShowTab(false)\r\n }\r\n if (isSelectPredictionChain) {\r\n setShowTab(false)\r\n }\r\n }, [hasConnectedWallet, isSelectAll, isHasStablecoin, isHasStock, tokens])\r\n\r\n // useEffect(() => {\r\n // if (isHasStablecoin) {\r\n // setShowStablecoin(true)\r\n // } else {\r\n // setShowStablecoin(false)\r\n // }\r\n // }, [isHasStablecoin])\r\n // useEffect(() => {\r\n // if (isHasStock) {\r\n // setShowStock(true)\r\n // } else {\r\n // setShowStock(false)\r\n // }\r\n // }, [isHasStock])\r\n\r\n useEffect(() => {\r\n if (searchTokensInfo) {\r\n setCurrentTab('')\r\n }\r\n }, [searchTokensInfo])\r\n\r\n return (\r\n <VStack gap={0} w={'100%'} h={'100%'}>\r\n {renderTab()}\r\n <VStack\r\n gap={0}\r\n w={'100%'}\r\n flex={1}\r\n h={0}\r\n overflowX={'hidden'}\r\n overflowY={'auto'}\r\n >\r\n {render()}\r\n </VStack>\r\n </VStack>\r\n )\r\n}\r\n","import { InputGroup, Input, Icon } from '@chakra-ui/react'\r\nimport { SearchIcon } from '../icons'\r\nimport { useCallback, useEffect, useState } from 'react'\r\nimport { debounce } from '../../utils'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n placeholder?: string\r\n value: string\r\n onChange: (value: string) => void\r\n}\r\n\r\nexport const SearchInput = ({ placeholder, value, onChange }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const [localValue, setLocalValue] = useState(value)\r\n\r\n const debouncedOnChange = useCallback(debounce(onChange, 500), [onChange])\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const inputValue = e.target.value\r\n setLocalValue(inputValue)\r\n debouncedOnChange(inputValue)\r\n }\r\n\r\n useEffect(() => {\r\n setLocalValue(value)\r\n }, [value])\r\n\r\n return (\r\n <InputGroup\r\n startElement={\r\n <Icon\r\n as={SearchIcon}\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n />\r\n }\r\n startElementProps={{\r\n pl: 2.5\r\n }}\r\n px={2}\r\n pb={2}\r\n >\r\n <Input\r\n placeholder={placeholder}\r\n px={2}\r\n border={'1px solid'}\r\n borderColor={theme.weakTextColor}\r\n borderRadius={'12px'}\r\n fontSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n h={'40px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n _focus={{\r\n borderColor: theme.highlightBorderColor,\r\n outlineWidth: '0px'\r\n }}\r\n value={localValue}\r\n onChange={handleChange}\r\n />\r\n </InputGroup>\r\n )\r\n}\r\n","import { HStack, Image, VStack } from '@chakra-ui/react'\r\n\r\nexport const AllChainsIcon = () => {\r\n return (\r\n <VStack w={'24px'} h={'24px'} gap={1}>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/networks/1.png'}\r\n alt=\"ethereum\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n <Image\r\n src={'https://wheelx.fi/images/networks/56.png'}\r\n alt=\"bnb\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n </HStack>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/networks/8453.png'}\r\n alt=\"base\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n <Image\r\n src={'https://wheelx.fi/images/networks/42161.png'}\r\n alt=\"arbitrum\"\r\n w=\"10px\"\r\n h=\"10px\"\r\n borderRadius={'full'}\r\n />\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","import {\r\n VStack,\r\n Box,\r\n Image,\r\n HStack,\r\n InputGroup,\r\n Icon,\r\n Input\r\n} from '@chakra-ui/react'\r\n\r\nimport { Network } from './Network'\r\nimport { Text } from '../ui'\r\nimport { BackIcon } from '../icons'\r\nimport { SearchIcon } from '../icons'\r\nimport { ArrowDownIcon } from '../icons'\r\nimport { ArrowFillRightIcon } from '../icons'\r\nimport {\r\n Dispatch,\r\n memo,\r\n SetStateAction,\r\n useMemo,\r\n useState,\r\n useRef,\r\n useEffect\r\n} from 'react'\r\nimport {\r\n ChainInfo,\r\n TokenBalance,\r\n TokenInfo,\r\n TokenInfoWithBalance\r\n} from '../../api'\r\nimport { TokenList } from './TokenList'\r\nimport { SearchInput } from './SearchInput'\r\nimport { AllChainsIcon } from './AllChainsIcon'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n popularChains?: ChainInfo[]\r\n orderedChains?: ChainInfo[]\r\n orderedPredictionChains?: ChainInfo[]\r\n favChains?: ChainInfo[]\r\n tokens?: TokenInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n userBalances?: TokenBalance[]\r\n isLoading: boolean\r\n searchChainsValue: string\r\n searchTokensValue: string\r\n selectedChain: number | null\r\n selectedPlatform: number\r\n selectedChainInfo?: ChainInfo\r\n isSelectAll: boolean\r\n isMobileChainsOpen: boolean\r\n chainId: number | null\r\n isSelectingFromToken: boolean\r\n handleSearchChains: (value: string) => void\r\n handleSearchTokens: (value: string) => void\r\n handleSelectChains: (chainId: number, platformId: number) => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n handleSelectAll: () => void\r\n resetSearch: () => void\r\n setIsMobileChainsOpen: Dispatch<SetStateAction<boolean>>\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n isPreconfigured?: boolean\r\n}\r\n\r\nconst arePropsEqual = (prevProps: Props, nextProps: Props) => {\r\n return (\r\n prevProps.isMobileChainsOpen === nextProps.isMobileChainsOpen &&\r\n prevProps.searchTokensValue === nextProps.searchTokensValue &&\r\n prevProps.isSelectAll === nextProps.isSelectAll &&\r\n prevProps.isLoading === nextProps.isLoading &&\r\n prevProps.searchChainsValue === nextProps.searchChainsValue &&\r\n JSON.stringify(prevProps.selectedChainInfo) ===\r\n JSON.stringify(nextProps.selectedChainInfo) &&\r\n JSON.stringify(prevProps.popularChains) ===\r\n JSON.stringify(nextProps.popularChains) &&\r\n JSON.stringify(prevProps.orderedChains) ===\r\n JSON.stringify(nextProps.orderedChains) &&\r\n JSON.stringify(prevProps.favChains) ===\r\n JSON.stringify(nextProps.favChains) &&\r\n JSON.stringify(prevProps.tokens) === JSON.stringify(nextProps.tokens) &&\r\n JSON.stringify(prevProps.userBalances) ===\r\n JSON.stringify(nextProps.userBalances) &&\r\n JSON.stringify(prevProps.searchTokensInfo) ===\r\n JSON.stringify(nextProps.searchTokensInfo)\r\n )\r\n}\r\n\r\nexport const MobileContent = memo(function MobileContent({\r\n isMobileChainsOpen,\r\n searchTokensValue,\r\n isSelectAll,\r\n selectedChain,\r\n selectedPlatform,\r\n selectedChainInfo,\r\n handleSearchTokens,\r\n handleSearchChains,\r\n handleSelectChains,\r\n setIsMobileChainsOpen,\r\n onSelectToken,\r\n searchChainsValue,\r\n popularChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n favChains,\r\n tokens,\r\n userBalances,\r\n searchTokensInfo,\r\n isLoading,\r\n handleSelectAll,\r\n chainId,\r\n resetSearch,\r\n isSelectingFromToken,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit,\r\n isPreconfigured\r\n}: Props) {\r\n const { theme } = useWidgetTheme()\r\n const [isMobileSearchFocused, setIsMobileSearchFocused] = useState(false)\r\n const isShowChainsWithAssets = useMemo(\r\n () => userBalances && userBalances.length > 0,\r\n [userBalances]\r\n )\r\n\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains } = useChainsStore()\r\n\r\n const isChainsWithAssetsDisabled = useMemo(() => {\r\n if (disableTestnetLimit) return false\r\n\r\n if (isSelectingFromToken) {\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n return toChainInfo?.is_testnet === true\r\n } else {\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n return fromChainInfo?.is_testnet === true\r\n }\r\n }, [isSelectingFromToken, fromChainId, toChainId, disableTestnetLimit, chains])\r\n\r\n const listContainerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (!isMobileChainsOpen || !listContainerRef.current) return\r\n const timeoutId = setTimeout(() => {\r\n const selectedElement = listContainerRef.current?.querySelector(\r\n '[data-selected=\"true\"]'\r\n ) as HTMLElement\r\n\r\n if (selectedElement && listContainerRef.current) {\r\n const container = listContainerRef.current\r\n const elementTop = selectedElement.offsetTop\r\n const elementHeight = selectedElement.offsetHeight\r\n const containerHeight = container.clientHeight\r\n\r\n const scrollTop = elementTop - containerHeight / 2 + elementHeight / 2\r\n\r\n container.scrollTo({\r\n top: scrollTop,\r\n behavior: 'smooth'\r\n })\r\n }\r\n }, 100)\r\n\r\n return () => clearTimeout(timeoutId)\r\n }, [\r\n selectedChain,\r\n selectedPlatform,\r\n popularChains,\r\n favChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n searchChainsValue,\r\n isMobileChainsOpen\r\n ])\r\n\r\n return (\r\n <VStack w={'100%'} h={'100%'} align={'start'} gap={0} hideFrom={'md'}>\r\n {!isMobileChainsOpen && !isPreconfigured && (\r\n <Box w={'100%'} px={2} pb={2}>\r\n <HStack\r\n w={'100%'}\r\n border={'1px solid'}\r\n borderColor={isMobileSearchFocused ? theme.highlightBorderColor : theme.weakTextColor}\r\n boxSizing={'border-box'}\r\n justifyContent={'space-between'}\r\n >\r\n <InputGroup\r\n startElement={\r\n <Icon\r\n as={SearchIcon}\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n />\r\n }\r\n startElementProps={{\r\n pl: '9px'\r\n }}\r\n >\r\n <Input\r\n placeholder=\"Search for a token or contract address\"\r\n px={2}\r\n border={'none'}\r\n fontSize={'12px'}\r\n h={'38px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n _focusVisible={{\r\n outlineWidth: '0px'\r\n }}\r\n onFocus={() => setIsMobileSearchFocused(true)}\r\n onBlur={() => setIsMobileSearchFocused(false)}\r\n value={searchTokensValue}\r\n onChange={(e) => handleSearchTokens(e.target.value)}\r\n />\r\n </InputGroup>\r\n <HStack\r\n gap={1}\r\n cursor={'pointer'}\r\n onClick={() => setIsMobileChainsOpen(true)}\r\n pr={1}\r\n >\r\n {isSelectAll ? (\r\n <AllChainsIcon />\r\n ) : (\r\n <Box w={'24px'} h={'24px'}>\r\n <Image\r\n src={selectedChainInfo?.chain_icon}\r\n alt={selectedChainInfo?.name}\r\n width={'100%'}\r\n height={'100%'}\r\n borderRadius={'50%'}\r\n objectFit={'cover'}\r\n />\r\n </Box>\r\n )}\r\n <Icon as={ArrowDownIcon} boxSize={'16px'} color={theme.defaultTextColor} />\r\n </HStack>\r\n </HStack>\r\n </Box>\r\n )}\r\n {isMobileChainsOpen ? (\r\n <VStack w={'100%'} h={'100%'} align={'start'} gap={0}>\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search chains\"\r\n value={searchChainsValue}\r\n onChange={(value) => handleSearchChains(value)}\r\n />\r\n )}\r\n\r\n {/* chains list */}\r\n <Box\r\n flex={1}\r\n overflowY={'auto'}\r\n w={'100%'}\r\n overscrollBehavior={'contain'}\r\n ref={listContainerRef}\r\n >\r\n {!isPreconfigured && isShowChainsWithAssets && (\r\n <HStack\r\n px={2}\r\n mb={4}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={() => {\r\n // if (isChainsWithAssetsDisabled) return\r\n setDisableTestnetLimit(true)\r\n handleSelectAll()\r\n setIsMobileChainsOpen(false)\r\n }}\r\n opacity={isChainsWithAssetsDisabled ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelectAll ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelectAll ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={'82%'}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <AllChainsIcon />\r\n <Text\r\n variant={'content6_1'}\r\n color={theme.defaultTextColor}\r\n whiteSpace={'nowrap'}\r\n >\r\n Chains with assets\r\n </Text>\r\n </HStack>\r\n {isSelectAll && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Popular\r\n </Text>\r\n )}\r\n <VStack w={'100%'} align={'start'} gap={0}>\r\n {popularChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'popular-chains'}\r\n chainId={chain.chain_id}\r\n isPopular={true}\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isPredictionChain={false}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n {favChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'fav-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isPredictionChain={chain?.platform_id != null ? true : false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </VStack>\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Chains (A-Z)\r\n </Text>\r\n )}\r\n <VStack w={'100%'} align={'start'} gap={0}>\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet !== true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </VStack>\r\n {!isSelectingFromToken && !isPreconfigured && (\r\n <>\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Prediction\r\n </Text>\r\n {orderedPredictionChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'prediction-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={true}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Testnet\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() => {\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n setIsMobileChainsOpen(false)\r\n }}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </Box>\r\n </VStack>\r\n ) : (\r\n // tokens list\r\n <Box flex={1} overflowY={'auto'} w={'100%'}>\r\n {/* <Text px={2} color={'#81728C'} variant={'content7'} my={2}>\r\n Suggested tokens\r\n </Text> */}\r\n <TokenList\r\n isLoading={isLoading}\r\n isSelectAll={isSelectAll}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n tokens={tokens}\r\n onSelectToken={onSelectToken}\r\n chainId={chainId}\r\n resetSearch={resetSearch}\r\n searchTokensValue={searchTokensValue}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n </Box>\r\n )}\r\n {/* for mobile close chains list */}\r\n {isMobileChainsOpen && (\r\n <Icon\r\n pos={'absolute'}\r\n boxSize={'24px'}\r\n as={BackIcon}\r\n left={4}\r\n top={3.5}\r\n color={theme.weakTextColor}\r\n cursor={'pointer'}\r\n onClick={() => {\r\n setIsMobileChainsOpen(false)\r\n if (userBalances && userBalances.length > 0) {\r\n handleSelectAll()\r\n }\r\n }}\r\n />\r\n )}\r\n </VStack>\r\n )\r\n}, arePropsEqual)\r\n","import { HStack, VStack, Icon } from '@chakra-ui/react'\r\n\r\nimport { ArrowFillRightIcon } from '../icons'\r\n\r\nimport { Network } from './Network'\r\nimport { Text } from '../ui'\r\nimport {\r\n ChainInfo,\r\n TokenBalance,\r\n TokenInfo,\r\n TokenInfoWithBalance\r\n} from '../../api'\r\nimport { TokenList } from './TokenList'\r\nimport { SearchInput } from './SearchInput'\r\nimport { useMemo } from 'react'\r\nimport { AllChainsIcon } from './AllChainsIcon'\r\nimport { useRef, useEffect } from 'react'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n popularChains?: ChainInfo[]\r\n orderedChains?: ChainInfo[]\r\n favChains?: ChainInfo[]\r\n searchChains?: ChainInfo[]\r\n searchTokensInfo?: TokenInfoWithBalance[]\r\n tokens?: TokenInfo[]\r\n orderedPredictionChains?: ChainInfo[]\r\n predictionTokens?: TokenInfo[]\r\n userBalances?: TokenBalance[]\r\n isLoading: boolean\r\n searchChainsValue: string\r\n searchTokensValue: string\r\n selectedChain: number | null\r\n selectedPlatform: number\r\n isSelectAll: boolean\r\n chainId: number | null\r\n isSelectingFromToken: boolean\r\n handleSearchChains: (value: string) => void\r\n handleSearchTokens: (value: string) => void\r\n handleSelectChains: (chainId: number, platformId: number) => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n handleSelectAll: () => void\r\n resetSearch: () => void\r\n disableTestnetLimit: boolean\r\n setDisableTestnetLimit: (value: boolean) => void\r\n isPreconfigured?: boolean\r\n}\r\nexport const DesktopContent = ({\r\n isLoading,\r\n searchChainsValue,\r\n handleSearchChains,\r\n isSelectAll,\r\n popularChains,\r\n orderedChains,\r\n favChains,\r\n searchChains,\r\n orderedPredictionChains,\r\n // predictionTokens,\r\n tokens,\r\n userBalances,\r\n searchTokensInfo,\r\n selectedChain,\r\n selectedPlatform,\r\n handleSelectChains,\r\n searchTokensValue,\r\n handleSearchTokens,\r\n onSelectToken,\r\n isSelectingFromToken,\r\n handleSelectAll,\r\n chainId,\r\n resetSearch,\r\n disableTestnetLimit,\r\n setDisableTestnetLimit,\r\n isPreconfigured\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const isShowChainsWithAssets = useMemo(\r\n () => userBalances && userBalances.length > 0,\r\n [userBalances]\r\n )\r\n\r\n const { fromTokenInfo, toTokenInfo } = useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const { chains } = useChainsStore()\r\n\r\n const isChainsWithAssetsDisabled = useMemo(() => {\r\n if (disableTestnetLimit) return false\r\n\r\n if (isSelectingFromToken) {\r\n const toChainInfo = chains?.find((chain) => chain.chain_id === toChainId)\r\n return toChainInfo?.is_testnet === true\r\n } else {\r\n const fromChainInfo = chains?.find((chain) => chain.chain_id === fromChainId)\r\n return fromChainInfo?.is_testnet === true\r\n }\r\n }, [isSelectingFromToken, fromChainId, toChainId, disableTestnetLimit, chains])\r\n\r\n // console.log('isSelectingFromToken:', tokens)\r\n const listContainerRef = useRef<HTMLDivElement>(null)\r\n\r\n useEffect(() => {\r\n if (!listContainerRef.current) return\r\n\r\n const timeoutId = setTimeout(() => {\r\n const selectedElement = listContainerRef.current?.querySelector(\r\n '[data-selected=\"true\"]'\r\n ) as HTMLElement\r\n\r\n if (selectedElement && listContainerRef.current) {\r\n const container = listContainerRef.current\r\n const elementTop = selectedElement.offsetTop\r\n const elementHeight = selectedElement.offsetHeight\r\n const containerHeight = container.clientHeight\r\n\r\n const scrollTop = elementTop - containerHeight / 2 + elementHeight / 2\r\n\r\n container.scrollTo({\r\n top: scrollTop,\r\n behavior: 'smooth'\r\n })\r\n }\r\n }, 100)\r\n\r\n return () => clearTimeout(timeoutId)\r\n }, [\r\n selectedChain,\r\n selectedPlatform,\r\n popularChains,\r\n favChains,\r\n orderedChains,\r\n orderedPredictionChains,\r\n searchChainsValue,\r\n searchChains\r\n ])\r\n\r\n // console.log('order chains', orderedChains)\r\n\r\n return (\r\n <HStack w={'100%'} h={'100%'} align={'start'} gap={0} hideBelow={'md'}>\r\n {/* left side */}\r\n <VStack\r\n w={'40%'}\r\n h={'100%'}\r\n py={3.5}\r\n borderRadius={'24px 0 0 24px'}\r\n bg={theme.assistBgColor}\r\n align={'start'}\r\n maxW={'236px'}\r\n >\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search chains\"\r\n value={searchChainsValue}\r\n onChange={(value) => handleSearchChains(value)}\r\n />\r\n )}\r\n\r\n <VStack\r\n align={'start'}\r\n gap={0}\r\n w={'100%'}\r\n overflowY={'auto'}\r\n ref={listContainerRef}\r\n >\r\n {!isPreconfigured && isShowChainsWithAssets && (\r\n <HStack\r\n px={2}\r\n mb={4}\r\n w={'100%'}\r\n _hover={{ bg: theme.highlightBgColor }}\r\n transition={'all 0.2s ease-in-out'}\r\n cursor={'pointer'}\r\n gap={1}\r\n onClick={() => {\r\n // if (isChainsWithAssetsDisabled) return\r\n setDisableTestnetLimit(true)\r\n handleSelectAll()\r\n }}\r\n opacity={isChainsWithAssetsDisabled ? '0.35' : '1'}\r\n >\r\n <HStack\r\n boxSizing={'content-box'}\r\n border={'1px solid'}\r\n borderColor={isSelectAll ? theme.highlightBorderColor : 'transparent'}\r\n bg={isSelectAll ? theme.highlightBgColor : 'transparent'}\r\n borderRadius={'12px'}\r\n w={'82%'}\r\n px={2}\r\n py={'7px'}\r\n >\r\n <AllChainsIcon />\r\n <Text\r\n variant={'content6_1'}\r\n color={theme.defaultTextColor}\r\n whiteSpace={'nowrap'}\r\n >\r\n Chains with assets\r\n </Text>\r\n </HStack>\r\n {isSelectAll && <Icon as={ArrowFillRightIcon} />}\r\n </HStack>\r\n )}\r\n\r\n {searchChainsValue ? (\r\n <>\r\n {searchChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'search-chains'}\r\n chainId={chain.chain_id}\r\n isSelectingFromToken={isSelectingFromToken}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n ) : (\r\n <>\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} mb={2}>\r\n Popular\r\n </Text>\r\n )}\r\n {popularChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'popular-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n isPopular={true}\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n\r\n {favChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'fav-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={chain?.platform_id != null ? true : false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Chains (A-Z)\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === false)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n {!isSelectingFromToken && !isPreconfigured && (\r\n <>\r\n <Text\r\n px={2}\r\n color={theme.weakTextColor}\r\n variant={'content7'}\r\n my={2}\r\n >\r\n Prediction\r\n </Text>\r\n {orderedPredictionChains?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'prediction-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(\r\n chain.chain_id,\r\n chain.platform_id || 0\r\n )\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={true}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n {!isPreconfigured && (\r\n <Text px={2} color={theme.weakTextColor} variant={'content7'} my={2}>\r\n Testnet\r\n </Text>\r\n )}\r\n {orderedChains\r\n ?.filter((chain) => chain.is_testnet === true)\r\n ?.map((chain) => (\r\n <Network\r\n key={chain.chain_id + 'ordered-chains'}\r\n chainId={chain.chain_id}\r\n // isSelected={selectedChain === chain.chain_id}\r\n isSelected={\r\n selectedPlatform\r\n ? selectedPlatform === chain.platform_id\r\n : selectedChain === chain.chain_id\r\n }\r\n onClick={() =>\r\n handleSelectChains(chain.chain_id, chain.platform_id || 0)\r\n }\r\n isSelectingFromToken={isSelectingFromToken}\r\n isPredictionChain={false}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n />\r\n ))}\r\n </>\r\n )}\r\n </VStack>\r\n </VStack>\r\n\r\n {/* right side */}\r\n <VStack flex={1} py={3.5} align={'start'} h={'100%'} w={0}>\r\n {!isPreconfigured && (\r\n <SearchInput\r\n placeholder=\"Search for a token or contract address\"\r\n value={searchTokensValue}\r\n onChange={(value) => handleSearchTokens(value)}\r\n />\r\n )}\r\n\r\n <VStack align={'start'} gap={3} w={'100%'} overflowY={'auto'} pr={1}>\r\n {/* <Text color={'brand-grey4'} variant={'content7'} px={2}>\r\n Suggested tokens\r\n </Text> */}\r\n\r\n <TokenList\r\n isLoading={isLoading}\r\n isSelectAll={isSelectAll}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n tokens={tokens}\r\n chainId={chainId}\r\n onSelectToken={onSelectToken}\r\n resetSearch={resetSearch}\r\n searchTokensValue={searchTokensValue}\r\n isSelectingFromToken={isSelectingFromToken}\r\n />\r\n </VStack>\r\n </VStack>\r\n </HStack>\r\n )\r\n}\r\n","import { Dialog, Portal, VStack, Icon } from '@chakra-ui/react'\r\nimport { memo, useCallback, useEffect, useMemo, useState } from 'react'\r\n\r\nimport {\r\n // ChainInfo,\r\n TokenInfo,\r\n useChainsAndTokens,\r\n useAllTokenBalance\r\n} from '../../api'\r\n\r\nimport { Heading } from '../ui'\r\nimport { BackIcon } from '../icons'\r\n\r\nimport {\r\n useChainsAndTokensForSelect,\r\n useUserHasSelectedFromNetwork,\r\n useSearchTokens\r\n} from './hooks'\r\nimport { CloseIcon } from '../icons'\r\nimport { MobileContent } from './MobileContent'\r\nimport { DesktopContent } from './DesktopContent'\r\nimport { useEvmAddress } from '../../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from '../hooks'\r\nimport { useDifferentAddressStore } from '../../stores/differentAddress'\r\nimport { useFavoritesContext } from './FavoritesContext'\r\nimport { processChains } from './utils'\r\nimport { useWalletConnectedStore } from '../../stores/walletStore'\r\nimport { useChainsStore } from '../../stores/chainsStore'\r\nimport { useWidgetTheme } from '../../theme/ThemeProvider'\r\nimport type { WidgetConfig } from '../../types'\r\ninterface SelectTokenModalProps {\r\n isOpen: boolean\r\n isSelectingFromToken: boolean\r\n onClose: () => void\r\n onSelectToken: (tokenInfo: TokenInfo) => void\r\n config?: WidgetConfig\r\n}\r\n\r\nconst isValidEvmAddress = (\r\n address: string | undefined\r\n): address is `0x${string}` => {\r\n return address !== undefined && /^0x[a-fA-F0-9]{40}$/.test(address)\r\n}\r\n\r\nconst SelectTokenModal = ({\r\n isOpen,\r\n isSelectingFromToken,\r\n onClose,\r\n onSelectToken,\r\n config\r\n}: SelectTokenModalProps) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const { fromTokenInfo, toTokenInfo, isShortLink, shortLink } =\r\n useSwapAndBridgeContextStore()\r\n const fromChainId = fromTokenInfo?.chain_id\r\n const toChainId = toTokenInfo?.chain_id\r\n const toChainPlatformId = toTokenInfo?.platform_id || 0\r\n const { differentAddress } = useDifferentAddressStore()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const { data, isLoading: isLoadingChains } = useChainsAndTokens()\r\n // const chains = data?.chains\r\n\r\n const isArcTestnetShortLink = useMemo(() => {\r\n return isShortLink && shortLink?.toLowerCase() === '/arctestnet'\r\n }, [isShortLink, shortLink])\r\n\r\n const {\r\n data: userBalances,\r\n isLoading: isLoadingUserBalances,\r\n refetch: refetchUserBalances\r\n } = useAllTokenBalance(address, solanaWalletAddress || undefined)\r\n\r\n // const { data: userDifferentAddressBalances } =\r\n // useTokenBalance(differentAddress)\r\n const { data: userDifferentAddressBalances } = useAllTokenBalance(\r\n isValidEvmAddress(differentAddress) ? differentAddress : undefined,\r\n solanaWalletAddress || undefined\r\n )\r\n\r\n // when modal is open, refetch user balances\r\n useEffect(() => {\r\n if (isOpen && (address || solanaWalletAddress)) {\r\n refetchUserBalances()\r\n }\r\n }, [isOpen, address, solanaWalletAddress])\r\n\r\n const [isSelectAll, setIsSelectAll] = useState(false)\r\n const [selectedChain, setSelectedChain] = useState<number | null>(null)\r\n const [selectedChainByPlatformId, setSelectedChainByPlatformId] = useState<\r\n number | null\r\n >(null)\r\n\r\n // Compute allowed chain IDs based on config side\r\n const allowedChainIds = useMemo(() => {\r\n const sideChains = isSelectingFromToken ? config?.from?.chains : config?.to?.chains\r\n return sideChains?.length ? sideChains : undefined\r\n }, [isSelectingFromToken, config?.from?.chains, config?.to?.chains])\r\n\r\n // When config restricts chains/tokens, show simplified view (no categories, no search)\r\n const isPreconfigured = useMemo(() => {\r\n return isSelectingFromToken\r\n ? !!(config?.from?.chains?.length || config?.from?.chainTokens)\r\n : !!(config?.to?.chains?.length || config?.to?.chainTokens)\r\n }, [isSelectingFromToken, config?.from?.chains, config?.from?.chainTokens, config?.to?.chains, config?.to?.chainTokens])\r\n\r\n // Build allowed token set from config (chainTokens), keyed by \"chainId:address\"\r\n const allowedTokenSet = useMemo(() => {\r\n const tokenConfig = isSelectingFromToken ? config?.from?.chainTokens : config?.to?.chainTokens\r\n if (!tokenConfig) return null\r\n const set = new Set<string>()\r\n for (const entries of Object.values(tokenConfig)) {\r\n for (const t of entries) {\r\n set.add(`${t.chainId}:${t.address.toLowerCase()}`)\r\n }\r\n }\r\n return set.size > 0 ? set : null\r\n }, [isSelectingFromToken, config?.from?.chainTokens, config?.to?.chainTokens])\r\n\r\n const {\r\n popularChains,\r\n orderedChains,\r\n searchChains,\r\n tokens,\r\n searchChainsValue,\r\n searchTokensValue,\r\n handleSearchChains,\r\n handleSearchTokens,\r\n resetSearch,\r\n allChains\r\n } = useChainsAndTokensForSelect({\r\n data,\r\n selectedChain,\r\n allowedChainIds,\r\n allowedTokenSet,\r\n userBalances:\r\n isSelectingFromToken === false && differentAddress\r\n ? userDifferentAddressBalances\r\n : userBalances,\r\n selectedChainByPlatformId\r\n })\r\n const { favorites } = useFavoritesContext()\r\n\r\n const { searchTokensInfo, isLoadingSearchTokenInfo } = useSearchTokens({\r\n searchTokensValue,\r\n selectedChain,\r\n allTokens: tokens\r\n })\r\n\r\n const { userHasSelectedFromNetwork, setUserHasSelectedFromNetwork } =\r\n useUserHasSelectedFromNetwork()\r\n\r\n const { chains } = useChainsStore()\r\n const [disableTestnetLimit, setDisableTestnetLimit] = useState(false)\r\n\r\n const [tempSelectAll, setTempSelectAll] = useState(false)\r\n const [tempSelectedChain, setTempSelectedChain] = useState<number | null>(\r\n null\r\n )\r\n const [tempSelectedPlatformId, setTempSelectedPlatformId] = useState<\r\n number | null\r\n >(null)\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // Check if the currently selected network is a testnet\r\n const isCurrentChainTestnet = (chainId: number | undefined) => {\r\n if (!chainId) return false\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n return chainInfo?.is_testnet === true\r\n }\r\n\r\n const fromTestnet = isCurrentChainTestnet(fromChainId)\r\n const toTestnet = isCurrentChainTestnet(toChainId)\r\n\r\n if (isSelectingFromToken) {\r\n setDisableTestnetLimit(!toTestnet)\r\n } else {\r\n setDisableTestnetLimit(!fromTestnet)\r\n }\r\n \r\n if (tempSelectAll) {\r\n const shouldRestoreTestnet = isSelectingFromToken\r\n ? isCurrentChainTestnet(toChainId)\r\n : isCurrentChainTestnet(fromChainId)\r\n\r\n if (shouldRestoreTestnet && tempSelectedChain !== null) {\r\n setIsSelectAll(false)\r\n setSelectedChain(tempSelectedChain)\r\n if (tempSelectedPlatformId !== null) {\r\n setSelectedChainByPlatformId(tempSelectedPlatformId)\r\n }\r\n setTempSelectAll(false)\r\n setTempSelectedChain(null)\r\n setTempSelectedPlatformId(null)\r\n }\r\n }\r\n\r\n if (isSelectingFromToken) {\r\n if (isLoadingUserBalances) return\r\n if (isArcTestnetShortLink) {\r\n // Keep original Arc testnet short link logic\r\n setIsSelectAll(false)\r\n const arcTestnetChain = chains?.find((chain) => chain.chain_id === 78600 && chain.is_testnet === true)\r\n if (arcTestnetChain) {\r\n setSelectedChain(arcTestnetChain.chain_id)\r\n }\r\n } else if (\r\n userBalances &&\r\n userBalances.length > 0 &&\r\n !userHasSelectedFromNetwork &&\r\n !tempSelectAll &&\r\n !allowedChainIds // Don't select-all when config restricts chains\r\n ) {\r\n setIsSelectAll(true)\r\n setSelectedChain(null)\r\n } else {\r\n setIsSelectAll(false)\r\n setSelectedChain(fromChainId)\r\n }\r\n } else {\r\n setIsSelectAll(false)\r\n setSelectedChain(toChainId)\r\n setSelectedChainByPlatformId(toChainPlatformId)\r\n }\r\n }\r\n }, [isOpen, fromChainId, toChainId, isSelectingFromToken, isLoadingUserBalances, chains, tempSelectAll, tempSelectedChain, tempSelectedPlatformId, isArcTestnetShortLink, userBalances, userHasSelectedFromNetwork, toChainPlatformId, allowedChainIds])\r\n\r\n const { favoriteChains, nonFavoriteChains } = useMemo(() => {\r\n return processChains(favorites, orderedChains || [])\r\n }, [favorites, orderedChains])\r\n\r\n const normalChains = useMemo(() => {\r\n return nonFavoriteChains.filter(\r\n (item) => !item.hasOwnProperty('platform_id')\r\n )\r\n }, [nonFavoriteChains])\r\n\r\n const predictionChains = useMemo(() => {\r\n return nonFavoriteChains.filter((item) =>\r\n item.hasOwnProperty('platform_id')\r\n )\r\n }, [nonFavoriteChains])\r\n\r\n const handleSelectChains = useCallback(\r\n (chainId: number, platformId: number | undefined) => {\r\n if (isSelectingFromToken) {\r\n setUserHasSelectedFromNetwork(true)\r\n }\r\n setIsSelectAll(false)\r\n setSelectedChain(chainId)\r\n setSelectedChainByPlatformId(platformId || null)\r\n },\r\n [isSelectingFromToken, setUserHasSelectedFromNetwork]\r\n )\r\n\r\n const handleSelectAll = useCallback(() => {\r\n setTempSelectedChain(selectedChain)\r\n setTempSelectedPlatformId(selectedChainByPlatformId)\r\n setTempSelectAll(true)\r\n\r\n setUserHasSelectedFromNetwork(false)\r\n setIsSelectAll(true)\r\n setSelectedChain(null)\r\n }, [setUserHasSelectedFromNetwork, selectedChain, selectedChainByPlatformId])\r\n\r\n const handleClose = useCallback(() => {\r\n onClose()\r\n setTimeout(() => {\r\n resetSearch()\r\n setIsMobileChainsOpen(false)\r\n }, 100)\r\n }, [onClose, resetSearch])\r\n\r\n const _onSelectToken = useCallback(\r\n (tokenInfo: TokenInfo) => {\r\n setTempSelectAll(false)\r\n setTempSelectedChain(null)\r\n setTempSelectedPlatformId(null)\r\n\r\n onSelectToken(tokenInfo)\r\n handleClose()\r\n },\r\n [handleClose, onSelectToken]\r\n )\r\n\r\n // mobile search\r\n const [isMobileChainsOpen, setIsMobileChainsOpen] = useState(false)\r\n\r\n const selectedChainInfo = allChains?.find((chain) => {\r\n if (selectedChainByPlatformId) {\r\n return chain.platform_id === selectedChainByPlatformId\r\n } else {\r\n return chain.chain_id === selectedChain\r\n }\r\n })\r\n\r\n // console.log('selectedChainInfo', selectedChainInfo)\r\n\r\n return (\r\n <Dialog.Root\r\n open={isOpen}\r\n onOpenChange={handleClose}\r\n placement={'center'}\r\n trapFocus={false}\r\n scrollBehavior=\"outside\"\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner px={4}>\r\n <Dialog.Content\r\n pos={'relative'}\r\n p={{\r\n base: 2,\r\n md: 4\r\n }}\r\n maxW={{\r\n base: '430px',\r\n md: '700px'\r\n }}\r\n borderRadius={'24px'}\r\n boxShadow={'0px 12px 36px 0px #007B9D59'}\r\n h={'min(85vh, 756px)'}\r\n bg={theme.defaultBgColor}\r\n >\r\n <VStack\r\n gap={{\r\n base: 6\r\n }}\r\n w={'100%'}\r\n h={'100%'}\r\n alignItems={'center'}\r\n >\r\n <Dialog.Header justifyContent={'center'}>\r\n <Heading\r\n variant={{\r\n base: 'heading10',\r\n md: 'heading8'\r\n }}\r\n mt={1.5}\r\n color={theme.defaultTextColor}\r\n >\r\n Select {isSelectingFromToken ? '\"From\"' : '\"To\"'} chain and\r\n token\r\n </Heading>\r\n </Dialog.Header>\r\n\r\n <Dialog.Body flex={1} w={'100%'} overflow={'hidden'}>\r\n {/* desktop */}\r\n <DesktopContent\r\n isLoading={\r\n isLoadingUserBalances ||\r\n isLoadingChains ||\r\n isLoadingSearchTokenInfo\r\n }\r\n searchChainsValue={searchChainsValue}\r\n handleSearchChains={handleSearchChains}\r\n isSelectAll={isSelectAll}\r\n selectedChain={selectedChain}\r\n selectedPlatform={selectedChainByPlatformId || 0}\r\n handleSelectAll={handleSelectAll}\r\n handleSelectChains={handleSelectChains}\r\n searchTokensValue={searchTokensValue}\r\n handleSearchTokens={handleSearchTokens}\r\n onSelectToken={_onSelectToken}\r\n popularChains={popularChains}\r\n orderedChains={normalChains}\r\n favChains={favoriteChains}\r\n orderedPredictionChains={predictionChains}\r\n tokens={tokens}\r\n userBalances={userBalances}\r\n searchChains={searchChains}\r\n searchTokensInfo={searchTokensInfo}\r\n isSelectingFromToken={isSelectingFromToken}\r\n chainId={selectedChain}\r\n resetSearch={resetSearch}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n isPreconfigured={isPreconfigured}\r\n />\r\n\r\n {/* mobile */}\r\n <MobileContent\r\n isLoading={\r\n isLoadingUserBalances ||\r\n isLoadingChains ||\r\n isLoadingSearchTokenInfo\r\n }\r\n isSelectAll={isSelectAll}\r\n isMobileChainsOpen={isMobileChainsOpen}\r\n searchTokensValue={searchTokensValue}\r\n searchChainsValue={searchChainsValue}\r\n handleSearchTokens={handleSearchTokens}\r\n handleSearchChains={handleSearchChains}\r\n handleSelectChains={handleSelectChains}\r\n handleSelectAll={handleSelectAll}\r\n setIsMobileChainsOpen={setIsMobileChainsOpen}\r\n onSelectToken={_onSelectToken}\r\n popularChains={popularChains}\r\n orderedChains={normalChains}\r\n favChains={favoriteChains}\r\n tokens={tokens}\r\n selectedChainInfo={selectedChainInfo}\r\n userBalances={userBalances}\r\n searchTokensInfo={searchTokensInfo}\r\n chainId={selectedChain}\r\n selectedChain={selectedChain}\r\n selectedPlatform={selectedChainByPlatformId || 0}\r\n orderedPredictionChains={predictionChains}\r\n resetSearch={resetSearch}\r\n isSelectingFromToken={isSelectingFromToken}\r\n disableTestnetLimit={disableTestnetLimit}\r\n setDisableTestnetLimit={setDisableTestnetLimit}\r\n isPreconfigured={isPreconfigured}\r\n />\r\n </Dialog.Body>\r\n </VStack>\r\n\r\n <Dialog.CloseTrigger\r\n left={4}\r\n top={3.5}\r\n right={'auto'}\r\n color={theme.weakTextColor}\r\n cursor={'pointer'}\r\n hideBelow={'md'}\r\n >\r\n <Icon boxSize={'40px'} as={BackIcon} />\r\n </Dialog.CloseTrigger>\r\n {/* do not use asChild, the ios 10 will not show the close icon */}\r\n <Dialog.CloseTrigger\r\n top={3}\r\n right={3}\r\n left={'auto'}\r\n cursor={'pointer'}\r\n hideFrom={'md'}\r\n >\r\n <Icon boxSize={'24px'} color={theme.weakTextColor} as={CloseIcon} />\r\n </Dialog.CloseTrigger>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n )\r\n}\r\n\r\nexport default memo(SelectTokenModal)\r\n","import { HStack, VStack } from '@chakra-ui/react'\r\n\r\nimport { TokenInfo } from '../api'\r\nimport { useChainsStore } from './hooks'\r\n\r\nimport { TokenIconWithNetworkLogo } from './commons/TokenIconWithNetworkLogo'\r\nimport { Heading, Text } from './ui'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n tokenInfo: TokenInfo\r\n priority?: boolean\r\n}\r\n\r\nexport const TokenInfoCom = ({ tokenInfo, priority = false }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { chain_id, symbol, platform_id } = tokenInfo\r\n\r\n const { chains } = useChainsStore()\r\n const chainInfo = chains?.find((chain) => {\r\n if (platform_id && platform_id > 0) {\r\n return chain.platform_id === platform_id\r\n } else {\r\n return chain.chain_id === chain_id\r\n }\r\n })\r\n\r\n // console.log('#######chainInfo#########:', chainInfo)\r\n\r\n return (\r\n <HStack>\r\n <TokenIconWithNetworkLogo\r\n tokenInfo={tokenInfo}\r\n customChainLogo={chainInfo?.chain_icon}\r\n priority={priority}\r\n />\r\n <VStack align={'start'} gap={1} flex={1}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n lineClamp={1}\r\n wordBreak={'break-all'}\r\n >\r\n {symbol}\r\n </Heading>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n lineClamp={1}\r\n wordBreak={'break-all'}\r\n >\r\n {chainInfo?.name}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n )\r\n}\r\n","import { Button, HStack, Icon, Input, Image, Box } from '@chakra-ui/react'\r\nimport { VStack } from '@chakra-ui/react'\r\nimport { useCallback, useEffect, useMemo, useState } from 'react'\r\nimport { Fraction } from 'bi-fraction'\r\n\r\nimport { TokenInfo } from '../api'\r\n\r\nimport { TokenInfoCom } from './TokenInfoCom'\r\n\r\nimport { ArrowDownIcon } from './icons'\r\nimport { Heading, Text } from './ui'\r\nimport { debounce, hyperliquidChainId, toBigInt } from './utils'\r\nimport { formatTokenAmount, sliceAddress } from '../utils'\r\nimport { zeroAddress } from 'viem'\r\nimport { WalletIcon as DynamicWalletIcon } from '@dynamic-labs/wallet-book'\r\n\r\nimport { useEvmAddress } from '../utils/wallet'\r\n\r\nimport { useSwapAndBridgeContextStore, useTokenBalance } from './hooks'\r\nimport { isSolanaChain } from '../consts/solana'\r\nimport { FiEdit } from 'react-icons/fi'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\n// import { MetamaskIcon } from './icons'\r\nimport { useHyperliquidBalance } from '../api/useHyperliquid'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useUserWallets } from '@dynamic-labs/sdk-react-core'\r\nimport { useWalletConnectModal } from './hooks/useWalletConnectModal'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nimport { IoAddCircleOutline } from 'react-icons/io5'\r\n\r\nimport {\r\n useSolanaTokenUsdPrice,\r\n useSolanaTokenBalance\r\n} from './hooks/useSolanaTokenBalance'\r\n\r\nconst defaultIcon = 'https://wheelx.fi/images/wallet-icon/wallet2.png'\r\n\r\ntype DynamicWalletLike = {\r\n chain?: string | null\r\n key?: string | null\r\n name?: string | null\r\n walletName?: string | null\r\n connector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n walletConnector?: {\r\n id?: string | null\r\n key?: string | null\r\n } | null\r\n}\r\n\r\nconst normalizeWalletKey = (value?: string | null) =>\r\n value?.toLowerCase().trim().replace(/\\s+/g, '') || null\r\n\r\nconst getWalletBookKey = (wallet?: DynamicWalletLike) => {\r\n if (!wallet) return null\r\n\r\n const candidates = [\r\n wallet.key,\r\n wallet.connector?.key,\r\n wallet.walletConnector?.key,\r\n wallet.connector?.id,\r\n wallet.walletConnector?.id,\r\n wallet.name,\r\n wallet.walletName\r\n ]\r\n\r\n for (const candidate of candidates) {\r\n const normalized = normalizeWalletKey(candidate)\r\n if (normalized) return normalized\r\n }\r\n\r\n return null\r\n}\r\n\r\ninterface TokenSelectAndInputProps {\r\n\r\n text: 'From' | 'To'\r\n onClick: () => void\r\n amount: string\r\n onChange: (value: string) => void\r\n userBalance: Fraction\r\n tokenInfo: TokenInfo\r\n usdPrice?: Fraction\r\n totalGasFee?: bigint\r\n isLoadingFeeData?: boolean\r\n isInsufficientBalance?: boolean\r\n onOpenDialog?: () => void\r\n}\r\n\r\nexport const TokenSelectAndInput = ({\r\n text,\r\n tokenInfo,\r\n onClick,\r\n amount,\r\n onChange,\r\n userBalance,\r\n usdPrice,\r\n totalGasFee,\r\n isLoadingFeeData,\r\n isInsufficientBalance,\r\n onOpenDialog\r\n}: TokenSelectAndInputProps) => {\r\n const address = useEvmAddress()\r\n const userWallets = useUserWallets()\r\n const { openModal, openConnectModal } = useWalletConnectModal()\r\n const { theme } = useWidgetTheme()\r\n\r\n\r\n\r\n\r\n const [isFocused, setIsFocused] = useState(false)\r\n\r\n const [isNative, setIsNative] = useState(false)\r\n // set value to state immediately to avoid the input value is not updated immediately when use debounce\r\n const [value, setValue] = useState(amount)\r\n const {\r\n setFromAmountToUsd,\r\n setToAmountToUsd,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n fromTokenInfo,\r\n toTokenInfo\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n setValue(amount)\r\n }, [amount])\r\n\r\n const isFrom = text === 'From'\r\n const { differentAddress, isDepositPlatformToken } =\r\n useDifferentAddressStore()\r\n\r\n const toTokenDifferentAddressBalance = useTokenBalance({\r\n chainId: tokenInfo.chain_id,\r\n tokenAddress:\r\n tokenInfo.address === zeroAddress ? undefined : tokenInfo.address,\r\n connectAddress: differentAddress\r\n ? (differentAddress as `0x${string}`)\r\n : address\r\n })\r\n\r\n const [isToHyperChain, setIsToHyperChain] = useState(false)\r\n\r\n const { data: toTokenBalanceHyperBack } = useHyperliquidBalance(\r\n differentAddress ? (differentAddress as `0x${string}`) : address,\r\n isToHyperChain\r\n )\r\n\r\n const toTokenBalanceHyper = {\r\n decimals: 6,\r\n formatted: toTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n toTokenBalanceHyperBack?.withdrawable\r\n ? toTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }\r\n\r\n useEffect(() => {\r\n if (!isFrom) {\r\n if (tokenInfo.chain_id === hyperliquidChainId) {\r\n setIsToHyperChain(true)\r\n } else {\r\n setIsToHyperChain(false)\r\n }\r\n }\r\n }, [tokenInfo, isFrom])\r\n\r\n const toDifferentAddressBalance = isToHyperChain\r\n ? new Fraction(toTokenBalanceHyper?.value ?? 0n)\r\n : new Fraction(toTokenDifferentAddressBalance?.value ?? 0n)\r\n const differentAddressBalance = formatTokenAmount({\r\n amount: toDifferentAddressBalance,\r\n decimals: tokenInfo.decimals\r\n })\r\n\r\n const connectedEvmWallet = useMemo(\r\n () =>\r\n userWallets.find((item) => {\r\n const chain = String(\r\n (item as unknown as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('evm')\r\n }) as unknown as DynamicWalletLike | undefined,\r\n [userWallets]\r\n )\r\n\r\n const connectedSolanaWallet = useMemo(\r\n () =>\r\n userWallets.find((item) => {\r\n const chain = String(\r\n (item as unknown as DynamicWalletLike).chain ?? ''\r\n ).toLowerCase()\r\n return chain.includes('sol')\r\n }) as unknown as DynamicWalletLike | undefined,\r\n [userWallets]\r\n )\r\n\r\n const evmWalletKey = useMemo(\r\n () => getWalletBookKey(connectedEvmWallet),\r\n [connectedEvmWallet]\r\n )\r\n\r\n const solanaWalletKey = useMemo(\r\n () => getWalletBookKey(connectedSolanaWallet),\r\n [connectedSolanaWallet]\r\n )\r\n\r\n const walletIcon = useMemo(\r\n () => (\r\n <Box\r\n boxSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n borderRadius={'full'}\r\n overflow={'hidden'}\r\n bg={'white'}\r\n >\r\n {evmWalletKey ? (\r\n <DynamicWalletIcon\r\n walletKey={evmWalletKey}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n ) : (\r\n <Image src={defaultIcon} alt=\"connector\" w={'100%'} h={'100%'} />\r\n )}\r\n </Box>\r\n ),\r\n [evmWalletKey]\r\n )\r\n\r\n const renderSolanaWalletIcon = useCallback(() => {\r\n return (\r\n <Box\r\n boxSize={{\r\n base: '12px',\r\n md: '14px'\r\n }}\r\n borderRadius={'full'}\r\n overflow={'hidden'}\r\n bg={'white'}\r\n >\r\n {solanaWalletKey ? (\r\n <DynamicWalletIcon\r\n walletKey={solanaWalletKey}\r\n style={{ width: '100%', height: '100%' }}\r\n />\r\n ) : (\r\n <Image src={defaultIcon} alt=\"connector\" w={'100%'} h={'100%'} />\r\n )}\r\n </Box>\r\n )\r\n }, [solanaWalletKey])\r\n\r\n\r\n useEffect(() => {\r\n if (isFrom) {\r\n const { tags } = tokenInfo\r\n if (tags.includes('native')) {\r\n setIsNative(true)\r\n } else {\r\n setIsNative(false)\r\n }\r\n }\r\n }, [tokenInfo, isFrom])\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const debouncedOnChange = useCallback(debounce(onChange, 500), [onChange])\r\n\r\n const handleValueChange = useCallback(\r\n (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value\r\n if (value === '.') {\r\n setValue('0.')\r\n return\r\n }\r\n if (value === '' || /^\\d*\\.?\\d*$/.test(value)) {\r\n // set value to state immediately\r\n setValue(value)\r\n // debounce the onChange function\r\n const isSame = new Fraction(value).eq(amount)\r\n if (!isSame) {\r\n debouncedOnChange(value)\r\n }\r\n }\r\n },\r\n [amount, debouncedOnChange]\r\n )\r\n\r\n const handleFocus = useCallback(() => {\r\n setIsFocused(true)\r\n }, [])\r\n\r\n const handleBlur = useCallback(() => {\r\n setIsFocused(false)\r\n }, [])\r\n\r\n const handleQuickInput = useCallback(\r\n async (value: string) => {\r\n const plusGasFee = new Fraction('0.00008')\r\n .shl(tokenInfo.decimals)\r\n .add(totalGasFee ?? 0n)\r\n\r\n const maxValue =\r\n (tokenInfo.address === zeroAddress || isNative) &&\r\n userBalance.gt(plusGasFee)\r\n ? userBalance.sub(plusGasFee)\r\n : userBalance\r\n\r\n const _value = value === '50%' ? userBalance.div(2) : maxValue\r\n if (value === 'Max' && isLoadingFeeData) {\r\n return\r\n }\r\n const _amount = formatTokenAmount({\r\n amount: _value,\r\n decimals: tokenInfo.decimals,\r\n useGroupSeparator: false\r\n })\r\n if (_amount !== amount) {\r\n onChange(_amount)\r\n }\r\n },\r\n [\r\n amount,\r\n isLoadingFeeData,\r\n isNative,\r\n onChange,\r\n tokenInfo.address,\r\n tokenInfo.decimals,\r\n totalGasFee,\r\n userBalance\r\n ]\r\n )\r\n\r\n const balance = formatTokenAmount({\r\n amount: userBalance,\r\n decimals: tokenInfo.decimals\r\n })\r\n\r\n // useEffect(() => {\r\n // if (isFrom) {\r\n // console.log('######userBalance.gt(0)######:', userBalance.gt(0))\r\n // console.log('######isFrom######:', isFrom)\r\n // }\r\n // }, [isFrom, userBalance])\r\n\r\n // const usdValue =\r\n // usdPrice && amount && usdPrice.gt(0)\r\n // ? new Fraction(amount).mul(usdPrice).toFormat({\r\n // decimalPlaces: 2\r\n // })\r\n // : null\r\n\r\n const { data: solanaUsdPrice } = useSolanaTokenUsdPrice(\r\n tokenInfo.isSolana ? tokenInfo.address : undefined\r\n )\r\n\r\n const usdValue = useMemo(() => {\r\n if (tokenInfo.isSolana && solanaUsdPrice && amount) {\r\n return (parseFloat(amount) * solanaUsdPrice).toFixed(2)\r\n }\r\n // EVM\r\n if (usdPrice && amount && usdPrice.gt(0)) {\r\n return new Fraction(amount).mul(usdPrice).toFormat({\r\n decimalPlaces: 2\r\n })\r\n }\r\n return null\r\n }, [tokenInfo.isSolana, solanaUsdPrice, amount, usdPrice])\r\n\r\n const isNativeSOL =\r\n tokenInfo.isSolana &&\r\n (tokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n String(tokenInfo.address) === '11111111111111111111111111111111')\r\n\r\n\r\n\r\n // Solana\r\n const { data: solanaBalance } = useSolanaTokenBalance(\r\n isNativeSOL\r\n ? undefined\r\n : tokenInfo.isSolana\r\n ? tokenInfo.address\r\n : undefined,\r\n tokenInfo.isSolana\r\n )\r\n\r\n const displayBalance = useMemo(() => {\r\n if (!isFrom && tokenInfo.isSolana && solanaBalance) {\r\n return solanaBalance.formatted\r\n }\r\n return differentAddressBalance\r\n }, [isFrom, tokenInfo.isSolana, solanaBalance, differentAddressBalance])\r\n\r\n useEffect(() => {\r\n if (isFrom) {\r\n setFromAmountToUsd(usdValue)\r\n } else {\r\n setToAmountToUsd(usdValue)\r\n }\r\n }, [isFrom, setFromAmountToUsd, setToAmountToUsd, usdValue])\r\n\r\n const renderLossWarning = () => {\r\n if (!isFrom && fromAmountToUsd && toAmountToUsd) {\r\n if (+fromAmountToUsd > 50 && +fromAmountToUsd > +toAmountToUsd) {\r\n const loss = -(+toAmountToUsd - +fromAmountToUsd) / +fromAmountToUsd\r\n if (loss >= 0.1) {\r\n // console.log('###loss###:', loss)\r\n return (\r\n <Text\r\n as={'span'}\r\n color={'#ff4267'}\r\n >{` (-${(loss * 100).toFixed(2)}%)`}</Text>\r\n )\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n return <></>\r\n }\r\n\r\n const FiEditDom = () => {\r\n return (\r\n <FiEdit\r\n cursor={'pointer'}\r\n width={'16px'}\r\n height={'16px'}\r\n color={theme.weakTextColor}\r\n onClick={() => {\r\n onOpenDialog?.()\r\n }}\r\n />\r\n )\r\n }\r\n\r\n const renderSolanaAddress = (currentAddress: string) => {\r\n // Only use differentAddress if it's a Solana-format address (not EVM 0x...).\r\n // TokenAndAddress.tsx may set differentAddress to the EVM wallet address\r\n // for Solana tokens when Solana is not yet connected, which we must ignore.\r\n const isSolanaDiff = differentAddress && !differentAddress.startsWith('0x')\r\n const displayAddress = isSolanaDiff ? differentAddress : currentAddress\r\n const isCustomDiff =\r\n isSolanaDiff && differentAddress !== currentAddress\r\n return (\r\n <HStack gap={1}>\r\n {renderSolanaWalletIcon()}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.highlightBgColor}\r\n padding={'2px'}\r\n color={isCustomDiff ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(displayAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n\r\n const renderEvmAddress = (currentAddress: string) => {\r\n const isDifferent =\r\n differentAddress &&\r\n differentAddress.toLowerCase() !== currentAddress.toLowerCase()\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.highlightBgColor}\r\n padding={'2px'}\r\n color={isDifferent ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : currentAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n\r\n const renderDifferentAddress = () => {\r\n if ((address || solanaWalletAddress) && !isFrom) {\r\n if (isDepositPlatformToken) {\r\n if (differentAddress) {\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n padding={'2px'}\r\n color={differentAddress ? theme.highlightTextColor : theme.defaultTextColor}\r\n >\r\n {sliceAddress(differentAddress)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n return (\r\n <HStack gap={1}>\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.weakTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n onClick={() => {\r\n onOpenDialog?.()\r\n }}\r\n >\r\n Enter Address\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n if (address && !solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id)) ||\r\n (fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id))\r\n ) {\r\n return (\r\n <HStack\r\n gap={1}\r\n onClick={() => {\r\n openModal?.()\r\n }}\r\n cursor={'pointer'}\r\n >\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.defaultTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n >\r\n Connect Wallet\r\n </Text>\r\n <IoAddCircleOutline\r\n style={{\r\n width: '14px',\r\n height: '14px',\r\n color: theme.weakTextColor\r\n }}\r\n />\r\n </HStack>\r\n )\r\n }\r\n } else if (!address && solanaWalletAddress) {\r\n if (\r\n (!fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id)) ||\r\n (fromTokenInfo.isSolana && isSolanaChain(toTokenInfo.chain_id))\r\n ) {\r\n return renderSolanaAddress(solanaWalletAddress)\r\n } else {\r\n return (\r\n <HStack\r\n gap={1}\r\n onClick={() => {\r\n openConnectModal()\r\n }}\r\n cursor={'pointer'}\r\n >\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n color={theme.defaultTextColor}\r\n padding={'2px 6px'}\r\n borderRadius={'14px'}\r\n cursor={'pointer'}\r\n >\r\n Connect Wallet\r\n </Text>\r\n <IoAddCircleOutline\r\n style={{\r\n width: '14px',\r\n height: '14px',\r\n color: theme.weakTextColor\r\n }}\r\n />\r\n </HStack>\r\n )\r\n }\r\n } else if (address && solanaWalletAddress) {\r\n if (isSolanaChain(toTokenInfo.chain_id)) {\r\n return renderSolanaAddress(solanaWalletAddress)\r\n }\r\n return renderEvmAddress(address)\r\n }\r\n\r\n return (\r\n <HStack gap={1}>\r\n {walletIcon}\r\n <Text\r\n variant={'content8'}\r\n backgroundColor={theme.assistBgColor}\r\n padding={'2px'}\r\n color={\r\n differentAddress &&\r\n differentAddress.toLowerCase() !== address?.toLowerCase()\r\n ? theme.highlightTextColor\r\n : theme.defaultTextColor\r\n }\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : address)}\r\n </Text>\r\n {FiEditDom()}\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n return (\r\n <VStack\r\n align={'start'}\r\n w={'100%'}\r\n bg={theme.assistBgColor}\r\n px={{\r\n base: 2,\r\n md: 4\r\n }}\r\n paddingBottom={{\r\n base: isFrom ? 2 : 7,\r\n md: isFrom ? 3 : 8\r\n }}\r\n paddingTop={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '8px',\r\n md: '16px'\r\n }}\r\n gap={'0'}\r\n >\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n color={theme.weakTextColor}\r\n marginBottom={[2]}\r\n >\r\n <Heading variant={'heading11'} height={'18px'} color={theme.weakTextColor}>\r\n {text}\r\n </Heading>\r\n\r\n {address || (tokenInfo.isSolana && solanaWalletAddress) ? (\r\n <>\r\n {isFrom &&\r\n ((tokenInfo.isSolana && solanaBalance) || userBalance.gt(0)) ? (\r\n <HStack color={theme.defaultTextColor}>\r\n <Button\r\n variant={'outline'}\r\n minW={'30px'}\r\n h={{\r\n base: '18px'\r\n }}\r\n borderRadius={'4px'}\r\n border={'1px solid'}\r\n borderColor={theme.highlightTextColor}\r\n onClick={() => handleQuickInput('50%')}\r\n >\r\n <Text variant={'content9'} color={theme.highlightTextColor}>50%</Text>\r\n </Button>\r\n <Button\r\n minW={'30px'}\r\n h={{\r\n base: '18px'\r\n }}\r\n borderRadius={'4px'}\r\n bg={theme.highlightButtonBg}\r\n onClick={() => handleQuickInput('Max')}\r\n >\r\n <Text variant={'content9'} color={theme.highlightButtonText}>Max</Text>\r\n </Button>\r\n <Text variant={'content8'} color={theme.weakTextColor}>\r\n Balance:{' '}\r\n {tokenInfo.isSolana && solanaBalance\r\n ? solanaBalance.formatted\r\n : balance}\r\n </Text>\r\n </HStack>\r\n ) : (\r\n <></>\r\n )}\r\n </>\r\n ) : null}\r\n {renderDifferentAddress()}\r\n </HStack>\r\n\r\n <HStack\r\n w={'100%'}\r\n justify={'space-between'}\r\n align={'center'}\r\n gap={{\r\n base: 2.5,\r\n md: 6\r\n }}\r\n >\r\n <HStack\r\n gap={{\r\n base: 1,\r\n md: 3\r\n }}\r\n onClick={onClick}\r\n cursor={'pointer'}\r\n justify={'space-between'}\r\n px={{\r\n base: 1.5,\r\n md: 2.5\r\n }}\r\n py={{\r\n base: 2.5\r\n }}\r\n bg={theme.highlightBgColor}\r\n borderRadius={{\r\n base: '8px',\r\n md: '12px'\r\n }}\r\n w={'50%'}\r\n >\r\n\r\n <TokenInfoCom tokenInfo={tokenInfo} priority />\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '24px'\r\n }}\r\n color={theme.defaultTextColor}\r\n as={ArrowDownIcon}\r\n />\r\n </HStack>\r\n\r\n <VStack\r\n w={'50%'}\r\n pb={2}\r\n h={{\r\n base: '48px',\r\n md: '52px'\r\n }}\r\n border={'1px solid'}\r\n borderColor={isFocused ? theme.highlightBorderColor : theme.defaultBorderColor}\r\n bg={theme.defaultBgColor}\r\n borderRadius={{\r\n base: '8px',\r\n md: '12px'\r\n }}\r\n align={'flex-end'}\r\n position={'relative'}\r\n >\r\n <Input\r\n id={`${text.toLowerCase()}-input`}\r\n px={{\r\n base: 2,\r\n md: 3\r\n }}\r\n textAlign={'right'}\r\n fontWeight={'600'}\r\n fontSize={{\r\n base: '16px',\r\n md: '18px'\r\n }}\r\n _placeholder={{\r\n color: 'brand-grey3'\r\n }}\r\n onBlur={handleBlur}\r\n onFocus={handleFocus}\r\n disabled={!isFrom}\r\n color={isInsufficientBalance ? 'red' : theme.defaultTextColor}\r\n _disabled={{\r\n color: theme.weakTextColor,\r\n opacity: 1\r\n }}\r\n border={'none'}\r\n _focus={{\r\n outlineWidth: '0px'\r\n }}\r\n placeholder=\"0\"\r\n onChange={handleValueChange}\r\n value={value}\r\n inputMode=\"decimal\"\r\n type=\"text\"\r\n autoComplete=\"off\"\r\n />\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.weakTextColor}\r\n pos={'absolute'}\r\n right={{\r\n base: 2,\r\n md: 3\r\n }}\r\n bottom={'5px'}\r\n >\r\n {usdValue ? `~$${usdValue}` : null}\r\n {renderLossWarning()}\r\n </Text>\r\n </VStack>\r\n </HStack>\r\n <HStack\r\n w={'100%'}\r\n justify={'flex-end'}\r\n color={theme.weakTextColor}\r\n height={'18px'}\r\n overflow={'hidden'}\r\n lineHeight={'18px'}\r\n position={'absolute'}\r\n bottom={['6px', '8px']}\r\n left={0}\r\n paddingRight={[2, 4]}\r\n >\r\n {!isFrom && !isDepositPlatformToken && (\r\n <>\r\n {tokenInfo.isSolana\r\n ? solanaWalletAddress && (\r\n <Text variant={'content8'}>Balance: {displayBalance}</Text>\r\n )\r\n : address && (\r\n <Text variant={'content8'}>Balance: {displayBalance}</Text>\r\n )}\r\n </>\r\n )}\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","'use client'\r\nimport { HStack, VStack, Icon, Box } from '@chakra-ui/react'\r\nimport { Heading, Text } from './ui'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { FaGasPump } from 'react-icons/fa6'\r\n// import { PiWaveSineFill } from 'react-icons/pi'\r\nimport { TokenInfo } from '../api'\r\nimport { useEffect, useState } from 'react'\r\n\r\ninterface TipsContentProps {\r\n priceImpact: {\r\n bridgeFee: string\r\n dstGasFee: string\r\n swapFee: string\r\n before_discount_fee: string\r\n discount_percentage: string | undefined\r\n }\r\n toTokenInfo: TokenInfo\r\n fromTokenInfo: TokenInfo\r\n router_type: string | null | undefined\r\n fromAmountToUsd: string | null | undefined\r\n toAmountToUsd: string | null | undefined\r\n points?: number | 0 | string\r\n}\r\n\r\nexport const TipsContent = ({\r\n priceImpact,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n // router_type,\r\n fromAmountToUsd,\r\n toAmountToUsd,\r\n points\r\n}: TipsContentProps) => {\r\n const { chain_id: toChainId /*symbol: toTokenSymbol*/ } = toTokenInfo\r\n const { chain_id: fromChainId /*symbol: fromTokenSymbol*/ } = fromTokenInfo\r\n const totalPriceImpact = new Fraction(priceImpact.bridgeFee)\r\n .add(priceImpact.dstGasFee)\r\n .add(priceImpact.swapFee)\r\n\r\n const [hasDiscount, setHasDiscount] = useState(false)\r\n\r\n useEffect(() => {\r\n if (priceImpact) {\r\n if (\r\n priceImpact.before_discount_fee &&\r\n priceImpact.before_discount_fee !== priceImpact.swapFee &&\r\n // priceImpact.swapFee !== '0' &&\r\n priceImpact.before_discount_fee !== '0'\r\n ) {\r\n setHasDiscount(true)\r\n } else {\r\n setHasDiscount(false)\r\n }\r\n }\r\n }, [priceImpact])\r\n\r\n const renderTotalPriceImpact = () => {\r\n if (toAmountToUsd === null) {\r\n return '-'\r\n }\r\n // only exact match 0, return free, if 0.00000 is not free\r\n if (\r\n priceImpact.bridgeFee === '0' &&\r\n priceImpact.dstGasFee === '0' &&\r\n priceImpact.swapFee === '0'\r\n ) {\r\n return 'Free'\r\n }\r\n\r\n const priceImpactValue = +totalPriceImpact.toFormat({ decimalPlaces: 2 })\r\n const sif = +swapImpactFee()\r\n // console.log('priceImpactValue:', priceImpactValue, 'sif:', sif)\r\n const total = -priceImpactValue + -sif\r\n\r\n if (total < 0) {\r\n return `-$${(-total).toFixed(2)}`\r\n }\r\n return `+$${total.toFixed(2)}`\r\n }\r\n // const renderTotalPriceImpact = () => {\r\n // // only exact match 0, return free, if 0.00000 is not free\r\n // if (\r\n // +fromAmountToUsd - +toAmountToUsd === 0 ||\r\n // +fromAmountToUsd - +toAmountToUsd < 0\r\n // ) {\r\n // return 'Free'\r\n // }\r\n // return `-$${(+fromAmountToUsd - +toAmountToUsd).toFixed(2)} `\r\n // }\r\n\r\n const renderDiscount = (beforeFee: string, afterFee: string) => {\r\n if (beforeFee && afterFee) {\r\n return (\r\n <HStack gap={0}>\r\n <Box color={'brand-purple'} marginRight={'3px'}>\r\n -${new Fraction(afterFee).toFormat({ decimalPlaces: 2 })}\r\n </Box>\r\n <Box textDecoration={'line-through'} color=\"gray\">\r\n ${new Fraction(beforeFee).toFormat({ decimalPlaces: 2 })}\r\n </Box>\r\n {renderDiscountPercentage()}\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderDiscountPercentage = () => {\r\n if (priceImpact.discount_percentage) {\r\n return (\r\n <Box\r\n color={'#000'}\r\n backgroundColor={'#ffd400'}\r\n width={'30px'}\r\n borderRadius={'4px'}\r\n textAlign={'center'}\r\n fontSize={'10px'}\r\n marginLeft={'3px'}\r\n >\r\n {priceImpact.discount_percentage}%\r\n </Box>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderFee = (fee: string) => {\r\n if (fee === '0') {\r\n return (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -${new Fraction(fee).toFormat({ decimalPlaces: 2 })}\r\n </Text>\r\n )\r\n }\r\n\r\n const swapImpactFee = () => {\r\n const i = fromAmountToUsd ? +fromAmountToUsd.replace(/,/g, '') : 0\r\n const o = toAmountToUsd ? +toAmountToUsd.replace(/,/g, '') : 0\r\n const fee = +totalPriceImpact.toFormat({ decimalPlaces: 2 })\r\n const fio = i - (o + fee)\r\n return fio.toFixed(2)\r\n }\r\n\r\n const renderSwapImpactFee = () => {\r\n const sif = +swapImpactFee()\r\n if (toAmountToUsd === null) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -\r\n </Text>\r\n )\r\n }\r\n // console.log('sif:', sif)\r\n if (sif > 0 || sif === 0) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n -${sif}\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey1'}\r\n >\r\n +${-sif}\r\n </Text>\r\n )\r\n }\r\n\r\n // if (\r\n // router_type === 'bridge' &&\r\n // fromTokenSymbol === 'ETH' &&\r\n // toTokenSymbol === 'ETH'\r\n // ) {\r\n // // console.log('Cross-chain only (ETH only)')\r\n // return (\r\n // <VStack p={4}>\r\n // <Heading\r\n // variant={{\r\n // base: 'heading13',\r\n // md: 'heading12'\r\n // }}\r\n // borderBottom={'1px solid #B5B5B5'}\r\n // pb={2}\r\n // w={'100%'}\r\n // textAlign={'center'}\r\n // >\r\n // Total Price Impact: {renderTotalPriceImpact()}\r\n // </Heading>\r\n // {/* <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // Provider Fee\r\n // </Text>\r\n // {renderFee(priceImpact.swapFee)}\r\n // </HStack> */}\r\n // <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // Dst. Gas Fee\r\n // </Text>\r\n // <HStack gap={1}>\r\n // {priceImpact.dstGasFee !== '0' && (\r\n // <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n // )}\r\n // {renderFee(priceImpact.dstGasFee)}\r\n // </HStack>\r\n // </HStack>\r\n // <HStack justify={'space-between'} w={'100%'}>\r\n // <Text\r\n // variant={{\r\n // base: 'content9',\r\n // md: 'content8'\r\n // }}\r\n // color={'brand-grey4'}\r\n // >\r\n // WheelX Fee\r\n // </Text>\r\n // {points === '0' ? (\r\n // <Text\r\n // variant={'content9'}\r\n // color={'white'}\r\n // bg={'#00CBB3'}\r\n // p={'3px'}\r\n // borderRadius={'4px'}\r\n // >\r\n // Free\r\n // </Text>\r\n // ) : hasDiscount ? (\r\n // renderDiscount(\r\n // priceImpact.before_discount_fee,\r\n // priceImpact.bridgeFee + priceImpact.swapFee\r\n // )\r\n // ) : (\r\n // <>\r\n // {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n // {renderDiscountPercentage()}\r\n // </>\r\n // )}\r\n // </HStack>\r\n // </VStack>\r\n // )\r\n // }\r\n if (fromChainId === toChainId) {\r\n return (\r\n <VStack p={4}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading12'\r\n }}\r\n borderBottom={'1px solid #B5B5B5'}\r\n pb={2}\r\n w={'100%'}\r\n textAlign={'center'}\r\n >\r\n Total Price Impact: {renderTotalPriceImpact()}\r\n </Heading>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Swap Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {/* {\r\n <Icon\r\n boxSize={'10px'}\r\n as={PiWaveSineFill}\r\n color={'#c1c8cd'}\r\n position={'relative'}\r\n left={'1px'}\r\n />\r\n } */}\r\n {renderSwapImpactFee()}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n WheelX Fee\r\n </Text>\r\n {points === '0' && !fromTokenInfo.isSolana ? (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n ) : hasDiscount ? (\r\n renderDiscount(\r\n priceImpact.before_discount_fee,\r\n priceImpact.bridgeFee + priceImpact.swapFee\r\n )\r\n ) : (\r\n <>\r\n {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n {renderDiscountPercentage()}\r\n </>\r\n )}\r\n </HStack>\r\n {/* <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Gas Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack> */}\r\n </VStack>\r\n )\r\n }\r\n return (\r\n <VStack p={4}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading12'\r\n }}\r\n borderBottom={'1px solid #B5B5B5'}\r\n pb={2}\r\n w={'100%'}\r\n textAlign={'center'}\r\n >\r\n Total Price Impact: {renderTotalPriceImpact()}\r\n </Heading>\r\n\r\n {/* <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Provider Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack> */}\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Swap Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {/* {\r\n <Icon\r\n boxSize={'10px'}\r\n as={PiWaveSineFill}\r\n color={'#c1c8cd'}\r\n position={'relative'}\r\n left={'1px'}\r\n />\r\n } */}\r\n {renderSwapImpactFee()}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n Dst. Gas Fee\r\n </Text>\r\n <HStack gap={1}>\r\n {priceImpact.dstGasFee !== '0' && (\r\n <Icon boxSize={'10px'} as={FaGasPump} color={'#c1c8cd'} />\r\n )}\r\n {renderFee(priceImpact.dstGasFee)}\r\n </HStack>\r\n </HStack>\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'brand-grey4'}\r\n >\r\n WheelX Fee\r\n </Text>\r\n {points === '0' && !fromTokenInfo.isSolana ? (\r\n <Text\r\n variant={'content9'}\r\n color={'white'}\r\n bg={'#00CBB3'}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n ) : hasDiscount ? (\r\n renderDiscount(\r\n priceImpact.before_discount_fee,\r\n priceImpact.bridgeFee + priceImpact.swapFee\r\n )\r\n ) : (\r\n <>\r\n {renderFee(priceImpact.bridgeFee + priceImpact.swapFee)}\r\n {renderDiscountPercentage()}\r\n </>\r\n )}\r\n </HStack>\r\n </VStack>\r\n )\r\n}\r\n","import {\r\n Collapsible,\r\n HStack,\r\n Icon,\r\n VStack,\r\n ConditionalValue,\r\n Image,\r\n Box\r\n} from '@chakra-ui/react'\r\nimport { useState } from 'react'\r\n// import { FaGasPump } from 'react-icons/fa6'\r\n\r\nimport { MobileTooltip } from './ui/tooltip'\r\nimport { ArrowDownIcon } from './icons'\r\nimport { RoutesIcon } from './icons'\r\nimport { TimeIcon } from './icons'\r\nimport { InfoIcon } from './icons'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { Text } from './ui'\r\nimport { TokenAmountText } from './commons'\r\nimport { formatTokenAmount, sliceAddress } from '../utils'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { formatDecimalNum, formatSlippage } from './utils'\r\nimport { TipsContent } from './TipsContent'\r\nimport { useMemo } from 'react'\r\nimport { saveDay } from './utils/defaultData'\r\nimport { IoIosFlash } from 'react-icons/io'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\nexport interface routesItem {\r\n name: string\r\n logo: string\r\n}\r\n\r\nexport interface TxInfoProps {\r\n priceImpact: {\r\n bridgeFee: string\r\n dstGasFee: string\r\n swapFee: string\r\n before_discount_fee: string\r\n discount_percentage: string | undefined\r\n }\r\n slippage: number\r\n minReceive: string\r\n\r\n estimatedTime: number\r\n recipient: string\r\n router: string\r\n points: number | string\r\n\r\n amountOut: string\r\n fromTokenInUsd?: Fraction\r\n router_type: string | null | undefined\r\n routes?: routesItem[] | undefined\r\n}\r\n\r\nconst textVariant: ConditionalValue<'content8' | 'content7'> = {\r\n base: 'content8',\r\n md: 'content7'\r\n}\r\n\r\nexport const TxInfo = ({\r\n priceImpact,\r\n slippage,\r\n minReceive,\r\n estimatedTime,\r\n recipient,\r\n router,\r\n points,\r\n amountOut,\r\n fromTokenInUsd,\r\n router_type,\r\n routes\r\n}: TxInfoProps) => {\r\n const { theme } = useWidgetTheme()\r\n const [open, setOpen] = useState(false)\r\n const {\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n toAmountToUsd,\r\n fromAmountToUsd\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const [isRateReversed, setIsRateReversed] = useState(false)\r\n\r\n // console.log('###### routes ######:', routes)\r\n\r\n const toAmountInUnit = new Fraction(fromAmount).eq(0)\r\n ? '0'\r\n : formatTokenAmount({\r\n amount: new Fraction(amountOut)\r\n .shr(toTokenInfo.decimals)\r\n .div(new Fraction(fromAmount)),\r\n decimals: 0,\r\n fixedDecimals: toTokenInfo.decimals > 6 ? 6 : 2\r\n })\r\n\r\n const fromAmountInUnit =\r\n toAmountInUnit !== '0'\r\n ? formatDecimalNum(1 / parseFloat(toAmountInUnit.replace(/,/g, '')), 6)\r\n : '0'\r\n\r\n const toAmountInUnitNumber = parseFloat(toAmountInUnit.replace(/,/g, ''))\r\n const toAmountInUnitStr =\r\n toAmountInUnit !== '0' ? formatDecimalNum(toAmountInUnitNumber, 6) : '0'\r\n\r\n const renderPriceImpactPercentage = () => {\r\n if (\r\n priceImpact.bridgeFee === '0' &&\r\n priceImpact.dstGasFee === '0' &&\r\n priceImpact.swapFee === '0'\r\n ) {\r\n return (\r\n <Text\r\n variant={'content9'}\r\n color={theme.highlightButtonText}\r\n bg={theme.highlightButtonBg}\r\n p={'3px'}\r\n borderRadius={'4px'}\r\n >\r\n Free\r\n </Text>\r\n )\r\n }\r\n\r\n if (toAmountToUsd && fromAmountToUsd && fromTokenInUsd) {\r\n const inPrice = Number(fromAmountToUsd.replace(/,/g, ''))\r\n const outPrice = Number(toAmountToUsd.replace(/,/g, ''))\r\n if (outPrice > inPrice) {\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n {`+${(((outPrice - inPrice) / inPrice) * 100).toFixed(2)}%`}\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n {`-${(((inPrice - outPrice) / inPrice) * 100).toFixed(2)}%`}\r\n </Text>\r\n )\r\n }\r\n // use usd: (in - out) / in\r\n return (\r\n <Text variant={textVariant} color={theme.defaultTextColor}>\r\n -\r\n </Text>\r\n )\r\n }\r\n\r\n const renderSoneiumScore = useMemo(() => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Soneium Score\r\n </Text>\r\n <Text variant={textVariant}>+ 1</Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }, [fromTokenInfo.chain_id, toTokenInfo.chain_id, theme.weakTextColor])\r\n\r\n const renderSoneiumScoreTop = () => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack\r\n border={'1px solid #000'}\r\n gap={0}\r\n padding={'0 5px'}\r\n h={'18px'}\r\n borderRadius={'18px'}\r\n fontSize={'12px'}\r\n alignItems={'center'}\r\n >\r\n <Text\r\n variant={textVariant}\r\n fontSize={['10px', '12px']}\r\n whiteSpace={'nowrap'}\r\n >\r\n + 1\r\n </Text>\r\n <Image\r\n w={['12px', '12px']}\r\n // h={'12px'}\r\n src=\"https://wheelx.fi/images/soneium.png\"\r\n alt={'badge'}\r\n margin={'0 2px'}\r\n ></Image>\r\n <Text variant={textVariant} fontSize={['10px', '12px']}>\r\n Score\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }\r\n\r\n const handleRateDisplayClick = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n setIsRateReversed(!isRateReversed)\r\n }\r\n\r\n // useEffect(() => {\r\n // console.log('----toAmountInUnit----:', toAmountInUnit)\r\n // }, [toAmountInUnit])\r\n\r\n const renderSaveDay = () => {\r\n if (fromTokenInfo.chain_id === toTokenInfo.chain_id) return null\r\n const currentSaveDay = saveDay.find(\r\n (item) => item.chainId === fromTokenInfo.chain_id\r\n )\r\n if (currentSaveDay) {\r\n return (\r\n <HStack\r\n border={'1px solid #000'}\r\n gap={0}\r\n padding={'0 5px'}\r\n h={'18px'}\r\n borderRadius={'18px'}\r\n fontSize={['8px', '10px']}\r\n whiteSpace={'nowrap'}\r\n alignItems={'center'}\r\n >\r\n <IoIosFlash />\r\n Save {currentSaveDay.day}D\r\n </HStack>\r\n )\r\n }\r\n return null\r\n }\r\n\r\n const renderAiRouter = () => {\r\n if (routes && routes?.length > 0) {\r\n const length = routes.length\r\n return (\r\n <HStack gap={0}>\r\n {routes.map((item, index) => {\r\n return (\r\n <HStack key={index} gap={0}>\r\n {item.logo && (\r\n <Image\r\n src={item.logo}\r\n alt={item.name}\r\n title={item.name}\r\n w={'14px'}\r\n h={'14px'}\r\n borderRadius={'full'}\r\n />\r\n )}\r\n {index !== length - 1 && (\r\n <Icon\r\n as={RoutesIcon}\r\n margin={'0 4px'}\r\n boxSize={'12px'}\r\n ></Icon>\r\n )}\r\n </HStack>\r\n )\r\n })}\r\n </HStack>\r\n )\r\n }\r\n return <Text variant={textVariant}>{router}</Text>\r\n }\r\n\r\n return (\r\n <Collapsible.Root\r\n open={open}\r\n w={'100%'}\r\n bg={theme.assistBgColor}\r\n borderRadius={'8px'}\r\n px={2}\r\n py={1.5}\r\n >\r\n <Collapsible.Trigger w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'} color={theme.defaultTextColor}>\r\n <HStack\r\n gap={1}\r\n onClick={handleRateDisplayClick}\r\n cursor=\"pointer\"\r\n userSelect=\"none\"\r\n >\r\n <Image\r\n src={'https://wheelx.fi/images/switch.png'}\r\n alt=\"switch\"\r\n w={'14px'}\r\n h={'14px'}\r\n />\r\n <Text variant={textVariant} whiteSpace={'nowrap'}>\r\n {isRateReversed\r\n ? `1 ${toTokenInfo.symbol} = ${fromAmountInUnit} ${fromTokenInfo.symbol}`\r\n : `1 ${fromTokenInfo.symbol} = ${toAmountInUnitStr} ${toTokenInfo.symbol}`}\r\n </Text>\r\n </HStack>\r\n <HStack>\r\n {!open && renderSoneiumScoreTop()}\r\n {!open && renderSaveDay()}\r\n <Icon\r\n transition={'all 0.3s ease-in-out'}\r\n transform={open ? 'rotate(180deg)' : undefined}\r\n boxSize={'14px'}\r\n onClick={() => setOpen(!open)}\r\n >\r\n <ArrowDownIcon />\r\n </Icon>\r\n </HStack>\r\n </HStack>\r\n </Collapsible.Trigger>\r\n <Collapsible.Content w={'100%'} pb={1.5} color={theme.defaultTextColor}>\r\n <VStack w={'100%'} align={'start'} fontSize={'xs'} gap={3}>\r\n <VStack bg={theme.defaultBgColor} p={3} borderRadius={'12px'} w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Price Impact\r\n </Text>\r\n <HStack gap={1}>\r\n {renderPriceImpactPercentage()}\r\n <MobileTooltip\r\n contentProps={{\r\n boxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.1)'\r\n }}\r\n content={\r\n <TipsContent\r\n priceImpact={priceImpact}\r\n toTokenInfo={toTokenInfo}\r\n router_type={router_type}\r\n fromTokenInfo={fromTokenInfo}\r\n fromAmountToUsd={fromAmountToUsd}\r\n toAmountToUsd={toAmountToUsd}\r\n points={points}\r\n />\r\n }\r\n openDelay={100}\r\n closeDelay={100}\r\n interactive\r\n >\r\n <Icon boxSize={'10px'} as={InfoIcon} color={'#c1c8cd'} />\r\n </MobileTooltip>\r\n </HStack>\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Slippage\r\n </Text>\r\n <Text variant={textVariant}>{formatSlippage(slippage)}%</Text>\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Min. Received\r\n </Text>\r\n <HStack gap={1}>\r\n <TokenAmountText\r\n amount={new Fraction(minReceive)}\r\n decimals={toTokenInfo.decimals}\r\n suffix={toTokenInfo.symbol}\r\n />\r\n </HStack>\r\n </HStack>\r\n </VStack>\r\n\r\n <VStack bg={theme.defaultBgColor} p={3} borderRadius={'12px'} w={'100%'}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Estimated Time\r\n </Text>\r\n <HStack gap={1}>\r\n <Icon boxSize={'14px'}>\r\n <TimeIcon />\r\n </Icon>\r\n <Text variant={textVariant}>~{estimatedTime}s</Text>\r\n </HStack>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n Recipient Address\r\n </Text>\r\n <Text variant={textVariant}>{sliceAddress(recipient)}</Text>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <Text variant={textVariant} color={theme.weakTextColor}>\r\n AI Router\r\n </Text>\r\n {renderAiRouter()}\r\n </HStack>\r\n {renderSoneiumScore}\r\n </VStack>\r\n </VStack>\r\n </Collapsible.Content>\r\n </Collapsible.Root>\r\n )\r\n}\r\n","'use client'\r\nimport {\r\n Box,\r\n Button,\r\n Dialog,\r\n HStack,\r\n Icon,\r\n Input,\r\n Portal,\r\n VStack\r\n} from '@chakra-ui/react'\r\nimport { Heading } from './ui/componentRecipes/heading'\r\nimport { CloseIcon } from './icons'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\n\r\nimport { isAddress } from 'viem'\r\nimport { bottomToaster } from './ui/toaster'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { IoClose } from 'react-icons/io5'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { sliceAddress } from '../utils'\r\nimport { BsFillClipboardMinusFill } from 'react-icons/bs'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n/**\r\n *\r\n * @param address\r\n * @returns\r\n */\r\nexport function isValidEVMAddress(address: string): boolean {\r\n if (\r\n !address ||\r\n typeof address !== 'string' ||\r\n !address.startsWith('0x') ||\r\n address.length !== 42\r\n ) {\r\n return false\r\n }\r\n return isAddress(address)\r\n}\r\n\r\n/**\r\n * Validate Solana address: base58 encoded, length 32-44 characters\r\n */\r\nexport function isValidSolanaAddress(address: string): boolean {\r\n if (!address || typeof address !== 'string') return false\r\n const base58Regex = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/\r\n return base58Regex.test(address)\r\n}\r\n\r\ninterface DifferentAddressDialogProps {\r\n isOpen: boolean\r\n onClose: () => void\r\n onSaveCallback?: () => void\r\n}\r\n\r\ninterface DifferentAddressDialogInnerProps {\r\n isOpen: boolean\r\n onClose: () => void\r\n onSaveCallback?: () => void\r\n differentAddress: string | undefined\r\n setDifferentAddress: (address: string | undefined) => void\r\n isDepositPlatformToken: boolean\r\n isSolanaTarget: boolean\r\n defaultWalletAddress: string\r\n /** Primary wallet address used as localStorage key suffix.\r\n * Priority: EVM > Solana. Empty if no wallet connected. */\r\n primaryWalletAddress: string\r\n}\r\n\r\nconst DifferentAddressDialogInner = ({\r\n isOpen,\r\n onClose,\r\n onSaveCallback,\r\n differentAddress,\r\n setDifferentAddress,\r\n isDepositPlatformToken,\r\n isSolanaTarget,\r\n defaultWalletAddress,\r\n primaryWalletAddress\r\n}: DifferentAddressDialogInnerProps) => {\r\n const { theme } = useWidgetTheme()\r\n // Compute the default input value when the dialog mounts (opens)\r\n const defaultInputValue: `0x${string}` | undefined | string = (() => {\r\n // For Solana target, ignore EVM-format differentAddress (set by\r\n // TokenAndAddress.tsx when Solana wallet was not yet connected)\r\n if (\r\n isSolanaTarget &&\r\n differentAddress &&\r\n differentAddress.startsWith('0x')\r\n ) {\r\n return defaultWalletAddress || undefined\r\n }\r\n if (differentAddress) return differentAddress\r\n if (!isDepositPlatformToken && defaultWalletAddress)\r\n return defaultWalletAddress\r\n return undefined\r\n })()\r\n\r\n const [isAddressError, setIsAddressError] = useState(false)\r\n const [isFocused, setIsFocused] = useState(false)\r\n const [inputValue, setInputValue] = useState<\r\n `0x${string}` | undefined | string\r\n >(defaultInputValue)\r\n const inputRef = useRef<HTMLInputElement>(null)\r\n\r\n // Recent different addresses (max 4 total: 2 EVM + 2 Solana) persisted in localStorage.\r\n // Key is scoped per primary wallet address to isolate records across wallets.\r\n const RECENT_ADDRESSES_KEY = primaryWalletAddress\r\n ? `wheelx_recent_different_addresses_${primaryWalletAddress.toLowerCase()}`\r\n : ''\r\n\r\n interface RecentAddressEntry {\r\n address: string\r\n type: 'evm' | 'solana'\r\n }\r\n\r\n const detectAddressType = (addr: string): 'evm' | 'solana' =>\r\n addr.startsWith('0x') ? 'evm' : 'solana'\r\n\r\n const getRecentAddresses = (): RecentAddressEntry[] => {\r\n if (typeof window === 'undefined' || !RECENT_ADDRESSES_KEY) {\r\n return []\r\n }\r\n try {\r\n const stored = localStorage.getItem(RECENT_ADDRESSES_KEY)\r\n if (!stored) return []\r\n const parsed = JSON.parse(stored)\r\n if (!Array.isArray(parsed) || parsed.length === 0) return []\r\n // Migrate old string[] format to { address, type }[]\r\n if (typeof parsed[0] === 'string') {\r\n const migrated: RecentAddressEntry[] = (parsed as string[]).map(\r\n (addr) => ({\r\n address: addr,\r\n type: detectAddressType(addr)\r\n })\r\n )\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(migrated))\r\n return migrated\r\n }\r\n return parsed as RecentAddressEntry[]\r\n } catch (e) {\r\n console.error('[RecentAddr] getRecentAddresses error:', e)\r\n return []\r\n }\r\n }\r\n\r\n const [recentAddresses, setRecentAddresses] =\r\n useState<RecentAddressEntry[]>(getRecentAddresses)\r\n\r\n const addRecentAddress = useCallback(\r\n (addr: string) => {\r\n if (!RECENT_ADDRESSES_KEY) {\r\n return\r\n }\r\n try {\r\n const stored = localStorage.getItem(RECENT_ADDRESSES_KEY)\r\n const existing: RecentAddressEntry[] = stored ? JSON.parse(stored) : []\r\n const addrType = detectAddressType(addr)\r\n // Separate existing entries by type, remove duplicate of the new address\r\n const evmEntries = existing.filter(\r\n (e) =>\r\n e.type === 'evm' && e.address.toLowerCase() !== addr.toLowerCase()\r\n )\r\n const solanaEntries = existing.filter(\r\n (e) => e.type === 'solana' && e.address !== addr\r\n )\r\n\r\n if (addrType === 'evm') {\r\n const newEntry: RecentAddressEntry = { address: addr, type: 'evm' }\r\n const updatedEvm: RecentAddressEntry[] = [\r\n newEntry,\r\n ...evmEntries\r\n ].slice(0, 2)\r\n // Preserve EVM entries first to keep recently-used EVM at top\r\n const updated: RecentAddressEntry[] = [\r\n ...updatedEvm,\r\n ...solanaEntries\r\n ]\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(updated))\r\n setRecentAddresses(updated)\r\n } else {\r\n const newEntry: RecentAddressEntry = { address: addr, type: 'solana' }\r\n const updatedSolana: RecentAddressEntry[] = [\r\n newEntry,\r\n ...solanaEntries\r\n ].slice(0, 2)\r\n const updated: RecentAddressEntry[] = [\r\n ...evmEntries,\r\n ...updatedSolana\r\n ]\r\n localStorage.setItem(RECENT_ADDRESSES_KEY, JSON.stringify(updated))\r\n setRecentAddresses(updated)\r\n }\r\n } catch (e) {\r\n console.error('[RecentAddr] addRecentAddress error:', e)\r\n }\r\n },\r\n [RECENT_ADDRESSES_KEY]\r\n )\r\n\r\n // Filter displayed addresses by the current target chain type\r\n const displayedAddresses = useMemo(\r\n () =>\r\n recentAddresses.filter((e) =>\r\n isSolanaTarget ? e.type === 'solana' : e.type === 'evm'\r\n ),\r\n [recentAddresses, isSolanaTarget]\r\n )\r\n\r\n const handleSelectRecentAddress = useCallback((addr: string) => {\r\n setInputValue(addr)\r\n setIsAddressError(false)\r\n }, [])\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n const value = e.target.value\r\n setInputValue(value || undefined)\r\n if (isAddressError && value) {\r\n setIsAddressError(false)\r\n }\r\n }\r\n\r\n const handleClearInput = useCallback(() => {\r\n setInputValue(undefined)\r\n setIsAddressError(false)\r\n setTimeout(() => {\r\n inputRef.current?.focus()\r\n }, 0)\r\n }, [])\r\n\r\n const handleFocus = useCallback(() => {\r\n setIsFocused(true)\r\n setIsAddressError(false)\r\n }, [])\r\n\r\n const handleBlur = useCallback(() => {\r\n setIsFocused(false)\r\n }, [])\r\n\r\n const handleClose = useCallback(() => {\r\n setInputValue(undefined)\r\n setIsAddressError(false)\r\n onClose?.()\r\n }, [onClose])\r\n\r\n const onSave = useCallback(() => {\r\n if (!inputValue || inputValue.trim() === '') {\r\n setIsAddressError(false)\r\n setDifferentAddress(undefined)\r\n handleClose()\r\n onSaveCallback?.()\r\n return\r\n }\r\n const trimmed = inputValue.trim()\r\n if (isSolanaTarget) {\r\n if (isValidSolanaAddress(trimmed)) {\r\n setIsAddressError(false)\r\n setDifferentAddress(trimmed)\r\n // Record this address if it differs from the connected wallet address\r\n // (skip recording for Prediction / deposit-platform tokens)\r\n if (\r\n !isDepositPlatformToken &&\r\n defaultWalletAddress &&\r\n trimmed !== defaultWalletAddress\r\n ) {\r\n addRecentAddress(trimmed)\r\n }\r\n handleClose()\r\n onSaveCallback?.()\r\n } else {\r\n setIsAddressError(true)\r\n }\r\n } else {\r\n if (isValidEVMAddress(trimmed)) {\r\n setIsAddressError(false)\r\n setDifferentAddress(trimmed)\r\n // Record this address if it differs from the connected wallet address\r\n // (skip recording for Prediction / deposit-platform tokens)\r\n const shouldRecord =\r\n !isDepositPlatformToken &&\r\n defaultWalletAddress &&\r\n trimmed.toLowerCase() !== defaultWalletAddress.toLowerCase()\r\n if (shouldRecord) {\r\n addRecentAddress(trimmed)\r\n }\r\n handleClose()\r\n onSaveCallback?.()\r\n } else {\r\n setIsAddressError(true)\r\n }\r\n }\r\n }, [\r\n inputValue,\r\n isSolanaTarget,\r\n setDifferentAddress,\r\n handleClose,\r\n onSaveCallback,\r\n addRecentAddress,\r\n defaultWalletAddress,\r\n isDepositPlatformToken\r\n ])\r\n\r\n useEffect(() => {\r\n if (isAddressError) {\r\n bottomToaster.error({\r\n description: isSolanaTarget\r\n ? 'This address is not a valid Solana address.'\r\n : 'This address is not a EVM address.',\r\n duration: 3000\r\n })\r\n }\r\n }, [isAddressError, isSolanaTarget])\r\n\r\n return (\r\n <Dialog.Root\r\n open={isOpen}\r\n onOpenChange={handleClose}\r\n placement={'center'}\r\n trapFocus={false}\r\n scrollBehavior=\"outside\"\r\n >\r\n <Portal>\r\n <Dialog.Backdrop />\r\n <Dialog.Positioner px={4}>\r\n <Dialog.Content w={['100%', '480px']} bgColor={theme.assistBgColor}>\r\n <Dialog.Header justifyContent={'center'}>\r\n <Heading\r\n variant={{\r\n base: 'heading10',\r\n md: 'heading8'\r\n }}\r\n mt={1.5}\r\n padding={'20px 0'}\r\n color={theme.defaultTextColor}\r\n fontSize={'18px'}\r\n >\r\n To Address\r\n </Heading>\r\n </Dialog.Header>\r\n <Dialog.Body>\r\n <VStack>\r\n <HStack w=\"100%\" marginBottom={'10px'}>\r\n <Box margin={'0 15px'} flex={1} position={'relative'}>\r\n <Input\r\n placeholder={\r\n isSolanaTarget\r\n ? 'Please enter the Solana address'\r\n : 'Please enter the EVM address'\r\n }\r\n w={'100%'}\r\n paddingLeft={'15px'}\r\n _placeholder={{\r\n color: theme.weakTextColor\r\n }}\r\n color={isAddressError ? 'red' : theme.defaultTextColor}\r\n borderColor={\r\n isFocused\r\n ? theme.highlightBorderColor\r\n : isAddressError\r\n ? 'red'\r\n : theme.weakTextColor\r\n }\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n outline={'none'}\r\n ref={inputRef}\r\n value={inputValue || ''}\r\n onChange={handleInputChange}\r\n fontSize={['11px', '12px', '14px']}\r\n />\r\n {inputValue && (\r\n <Box\r\n onClick={handleClearInput}\r\n width={'14px'}\r\n height={'14px'}\r\n position={'absolute'}\r\n top={'50%'}\r\n right={'10px'}\r\n transform={'translateY(-50%)'}\r\n cursor={'pointer'}\r\n >\r\n <IoClose color={theme.weakTextColor} />\r\n </Box>\r\n )}\r\n </Box>\r\n </HStack>\r\n {!isDepositPlatformToken &&\r\n primaryWalletAddress &&\r\n displayedAddresses.length > 0 && (\r\n <VStack\r\n w=\"calc(100% - 30px)\"\r\n margin=\"0 15px\"\r\n marginBottom=\"12px\"\r\n gap=\"10px\"\r\n align=\"stretch\"\r\n >\r\n <Box fontSize=\"12px\" color={theme.weakTextColor} marginBottom=\"2px\">\r\n Recent Addresses\r\n </Box>\r\n <HStack\r\n w={'100%'}\r\n justifyContent={'flex-start'}\r\n >\r\n {displayedAddresses.map((entry, index) => (\r\n <Box\r\n key={index}\r\n cursor=\"pointer\"\r\n padding=\"8px 12px\"\r\n borderRadius=\"8px\"\r\n backgroundColor={theme.defaultBgColor}\r\n _hover={{ backgroundColor: theme.highlightBgColor }}\r\n width={['40%', '40%', 'calc(33.33333% - 10px)']}\r\n onClick={() =>\r\n handleSelectRecentAddress(entry.address)\r\n }\r\n >\r\n <HStack\r\n fontSize=\"14px\"\r\n color={theme.defaultTextColor}\r\n fontFamily=\"monospace\"\r\n >\r\n <BsFillClipboardMinusFill\r\n size={'12px'}\r\n color={theme.weakTextColor}\r\n />\r\n {sliceAddress(entry.address, 5, 4)}\r\n </HStack>\r\n </Box>\r\n ))}\r\n </HStack>\r\n </VStack>\r\n )}\r\n <HStack\r\n w={'100%'}\r\n padding={'0 15px'}\r\n paddingBottom={'21px'}\r\n gap=\"10px\"\r\n // justifyContent={'space-between'}\r\n >\r\n <Button\r\n // flex={1}\r\n // margin={'0 15px'}\r\n // w={'calc(50% - 15px)'}\r\n flex={1}\r\n backgroundColor={theme.highlightBgColor}\r\n color={theme.defaultTextColor}\r\n onClick={handleClose}\r\n >\r\n Cancel\r\n </Button>\r\n <Button\r\n flex={1}\r\n backgroundColor={theme.highlightButtonBg}\r\n color={theme.highlightButtonText}\r\n onClick={onSave}\r\n >\r\n Save\r\n </Button>\r\n </HStack>\r\n </VStack>\r\n </Dialog.Body>\r\n <Dialog.CloseTrigger\r\n top={3}\r\n right={3}\r\n left={'auto'}\r\n cursor={'pointer'}\r\n >\r\n <Icon boxSize={'24px'} color={theme.weakTextColor} as={CloseIcon} />\r\n </Dialog.CloseTrigger>\r\n </Dialog.Content>\r\n </Dialog.Positioner>\r\n </Portal>\r\n </Dialog.Root>\r\n )\r\n}\r\n\r\nconst DifferentAddressDialog = ({\r\n isOpen,\r\n onClose,\r\n onSaveCallback\r\n}: DifferentAddressDialogProps) => {\r\n const address = useEvmAddress()\r\n const { setDifferentAddress, differentAddress, isDepositPlatformToken } =\r\n useDifferentAddressStore()\r\n\r\n const { toTokenInfo } = useSwapAndBridgeContextStore()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const isSolanaTarget = !!toTokenInfo?.isSolana\r\n\r\n // Default wallet address for the current target chain\r\n const defaultWalletAddress = isSolanaTarget\r\n ? solanaWalletAddress || ''\r\n : address || ''\r\n\r\n // Primary wallet address for scoping recent address records in localStorage.\r\n // - Both wallets connected: key follows the To token chain (EVM→EVM, Solana→Solana)\r\n // - Only one wallet connected: use whichever is connected\r\n // - Empty if no wallet is connected.\r\n const primaryWalletAddress = (() => {\r\n const evmAddr = (address || '').toLowerCase()\r\n const solAddr = (solanaWalletAddress || '').toLowerCase()\r\n if (evmAddr && solAddr) {\r\n return isSolanaTarget ? solAddr : evmAddr\r\n }\r\n if (evmAddr) return evmAddr\r\n if (solAddr) return solAddr\r\n return ''\r\n })()\r\n\r\n // Increment a counter each time the dialog opens, using it as the key on\r\n // DifferentAddressDialogInner so the inner component remounts with fresh state.\r\n // This is the React-recommended \"resetting state with a key\" pattern.\r\n const [openCount, setOpenCount] = useState(0)\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n // eslint-disable-next-line react-hooks/set-state-in-effect\r\n setOpenCount((c) => c + 1)\r\n }\r\n // Simple counter increment to trigger key-based remount of the inner\r\n // component — this is the React-recommended \"reset state with a key\"\r\n // pattern. No multi-state sync is performed here.\r\n }, [isOpen])\r\n\r\n return (\r\n <DifferentAddressDialogInner\r\n key={openCount}\r\n isOpen={isOpen}\r\n onClose={onClose}\r\n onSaveCallback={onSaveCallback}\r\n differentAddress={differentAddress}\r\n setDifferentAddress={setDifferentAddress}\r\n isDepositPlatformToken={isDepositPlatformToken}\r\n isSolanaTarget={isSolanaTarget}\r\n defaultWalletAddress={defaultWalletAddress}\r\n primaryWalletAddress={primaryWalletAddress}\r\n />\r\n )\r\n}\r\n\r\nexport default DifferentAddressDialog\r\n","import { VStack, Icon } from '@chakra-ui/react'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { useState, useMemo, useCallback, useEffect } from 'react'\r\nimport { parseUnits, zeroAddress } from 'viem'\r\nimport { useEstimateFeesPerGas } from 'wagmi'\r\nimport { useEvmAddress } from '../utils/wallet'\r\n\r\nimport { TokenInfo, useUsdPrice } from '../api'\r\nimport type { WidgetConfig } from '../types'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\n\r\nimport { FormButton } from './FormButton'\r\nimport { useSwapAndBridgeContextStore, useTokenBalance } from './hooks'\r\nimport SelectTokenModal from './SelectTokenModal'\r\nimport { TokenSelectAndInput } from './TokenSelectAndInput'\r\nimport { SwitchIcon } from './icons'\r\nimport { TxInfo } from './TxInfo'\r\nimport { formatTokenAmount, slippageStore } from '../utils'\r\nimport { tokenSelectionStore } from '../utils/tokenSelectionCache'\r\nimport {\r\n calculateSlippage,\r\n extractVPathSegment,\r\n toBigInt,\r\n hyperliquidChainId\r\n} from './utils'\r\nimport {\r\n initialQuoteInfo,\r\n QuoteInfo,\r\n QuoteRequestWithToTokenDecimals\r\n} from './MainForm'\r\nimport {\r\n toRegex,\r\n toAndTokenRegex,\r\n fromRegex,\r\n fromAndTokenRegex,\r\n fromAndToRegex,\r\n fromAndTokenAndToAndTokenRegex,\r\n matchesAnyPatternUsingArray\r\n} from '../utils/shortLinkRegex'\r\nimport { findItemByName, findItemBySymbol } from './commons/utils'\r\nimport { useChainsStore, useTokensStore } from './hooks'\r\nimport DifferentAddressDialog from './DifferentAddressDialog'\r\nimport { useHyperliquidBalance } from '../api/useHyperliquid'\r\nimport { soneium, base } from 'wagmi/chains'\r\nimport {\r\n useSolanaTokenBalance\r\n // useSolanaTokenUsdPrice\r\n} from './hooks/useSolanaTokenBalance'\r\n// import { isSolanaChain } from '../consts/solana'\r\n\r\ninterface Props {\r\n getQuote: (params: QuoteRequestWithToTokenDecimals) => Promise<void>\r\n quoteInfo: QuoteInfo\r\n setQuoteInfo: (quoteInfo: QuoteInfo) => void\r\n stopAutoRefetch: () => void\r\n lockRequestId: () => void\r\n clearLockedRequestId: () => void\r\n lockedRequestId: string | null\r\n refetchQuote: () => void\r\n config?: WidgetConfig\r\n}\r\n\r\nexport const FormBody = ({\r\n getQuote,\r\n quoteInfo,\r\n setQuoteInfo,\r\n stopAutoRefetch,\r\n lockRequestId,\r\n clearLockedRequestId,\r\n lockedRequestId,\r\n refetchQuote,\r\n config\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const {\r\n fromAmount,\r\n toAmount,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n setFromTokenInfo,\r\n setToTokenInfo,\r\n setFromAmount,\r\n setToAmount,\r\n switchTokens,\r\n autoSlippage,\r\n slippage: customSlippage\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { chains } = useChainsStore()\r\n const { tokens } = useTokensStore()\r\n\r\n // console.log('######quoteInfo######:', quoteInfo)\r\n\r\n const [isFromHyperChain, setIsFromHyperChain] = useState(false)\r\n const [isToHyperChain, setIsToHyperChain] = useState(false)\r\n\r\n const pathname =\r\n typeof window !== 'undefined' ? window.location.pathname : ''\r\n const replaceLink = useCallback((url: string) => {\r\n if (typeof window !== 'undefined') {\r\n window.history.replaceState(null, '', url)\r\n }\r\n }, [])\r\n\r\n const updateSearchParams = useCallback(\r\n (params: Record<string, string>) => {\r\n if (typeof window === 'undefined') return\r\n\r\n const searchParams = window?.location?.search\r\n const newParams = new URLSearchParams(searchParams)\r\n Object.entries(params).forEach(([key, value]) => {\r\n newParams.set(key, value)\r\n })\r\n const newPath = decodeURIComponent(pathname.replace(/\\/+$/, ''))\r\n // console.log('-------------newPath-----------:', newPath)\r\n if (tokens && chains && matchesAnyPatternUsingArray(newPath)) {\r\n if (toRegex.test(newPath)) {\r\n // record to chain id and token address\r\n const [exists, chainsInfo] = findItemByName(\r\n chains || [],\r\n newPath.replace('/', '')\r\n )\r\n if (!exists) return\r\n const foundItem = tokens.find(\r\n (item) => item.chain_id === chainsInfo?.chain_id\r\n )\r\n if (foundItem) {\r\n newParams.set('to_chain', foundItem.chain_id.toString())\r\n newParams.set('to_token', foundItem.address.toString())\r\n }\r\n } else if (toAndTokenRegex.test(newPath)) {\r\n const arr = newPath.replace('/', '').split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[0])\r\n if (!exists) return\r\n const [result, foundItem] = findItemBySymbol(\r\n tokens,\r\n arr[1],\r\n chainsInfo?.chain_id\r\n )\r\n if (!result) return\r\n if (result && foundItem) {\r\n newParams.set('to_chain', foundItem.chain_id.toString())\r\n newParams.set('to_token', foundItem.address.toString())\r\n }\r\n } else if (fromRegex.test(newPath)) {\r\n // record from chain id and token address\r\n const arr = newPath.split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[1])\r\n if (!exists) return\r\n const foundItem = tokens.find(\r\n (item) => item.chain_id === chainsInfo?.chain_id\r\n )\r\n if (foundItem) {\r\n newParams.set('from_chain', foundItem.chain_id.toString())\r\n newParams.set('from_token', foundItem.address.toString())\r\n }\r\n } else if (fromAndTokenRegex.test(newPath)) {\r\n const arr = newPath.replace('/', '').split('&')\r\n const [exists, chainsInfo] = findItemByName(chains, arr[0])\r\n if (!exists) return\r\n const [result, foundItem] = findItemBySymbol(\r\n tokens,\r\n arr[1],\r\n chainsInfo?.chain_id\r\n )\r\n if (!result) return\r\n if (result && foundItem) {\r\n newParams.set('from_chain', foundItem.chain_id.toString())\r\n newParams.set('from_token', foundItem.address.toString())\r\n }\r\n } else if (fromAndToRegex.test(newPath)) {\r\n const arr = newPath.split('/')\r\n const [resultFrom, fromChainsInfo] = findItemByName(chains, arr[1])\r\n if (!resultFrom) return\r\n const foundFromItem = tokens.find(\r\n (item) => item.chain_id === fromChainsInfo?.chain_id\r\n )\r\n if (!foundFromItem) return\r\n newParams.set('from_chain', foundFromItem.chain_id.toString())\r\n newParams.set('from_token', foundFromItem.address.toString())\r\n const [resultTo, toChainsInfo] = findItemByName(chains, arr[2])\r\n if (!resultTo) return\r\n const foundToItem = tokens.find(\r\n (item) => item.chain_id === toChainsInfo?.chain_id\r\n )\r\n if (!foundToItem) return\r\n newParams.set('to_chain', foundToItem.chain_id.toString())\r\n newParams.set('to_token', foundToItem.address.toString())\r\n } else if (fromAndTokenAndToAndTokenRegex.test(newPath)) {\r\n const arr = newPath.split('/')\r\n const arrFrom = arr[1].split('&')\r\n const [resultFrom, fromChainsInfo] = findItemByName(\r\n chains,\r\n arrFrom[0]\r\n )\r\n if (!resultFrom) return\r\n const [resultFromToken, fromTokenInfo] = findItemBySymbol(\r\n tokens,\r\n arrFrom[1],\r\n fromChainsInfo?.chain_id\r\n )\r\n if (!resultFromToken) return\r\n const arrTo = arr[2].split('&')\r\n const [resultTo, toChainsInfo] = findItemByName(chains, arrTo[0])\r\n if (!resultTo) return\r\n const [resultToToken, toTokenInfo] = findItemBySymbol(\r\n tokens,\r\n arrTo[1],\r\n toChainsInfo?.chain_id\r\n )\r\n if (!resultToToken) return\r\n if (fromTokenInfo && toTokenInfo) {\r\n newParams.set('to_chain', toTokenInfo.chain_id.toString())\r\n newParams.set('to_token', toTokenInfo.address.toString())\r\n newParams.set('from_chain', fromTokenInfo.chain_id.toString())\r\n newParams.set('from_token', fromTokenInfo.address.toString())\r\n }\r\n }\r\n }\r\n replaceLink(`${pathname.replace(pathname, '')}/?${newParams.toString()}`)\r\n },\r\n [pathname, replaceLink, chains, tokens]\r\n )\r\n\r\n const [isModalOpen, setIsModalOpen] = useState(false)\r\n const [isDifferentAddressDialogOpen, setIsDifferentAddressDialogOpen] =\r\n useState(false)\r\n const [isSelectingFromToken, setIsSelectingFromToken] = useState(false)\r\n const [isInsufficientBalance, setIsInsufficientBalance] = useState(false)\r\n\r\n const address = useEvmAddress()\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n // When wallet is connected, use stored slippage from localStorage\r\n // When wallet is not connected, use customSlippage from zustand store if set\r\n const slippage = address\r\n ? slippageStore.get(address)\r\n : customSlippage !== undefined\r\n ? { value: customSlippage }\r\n : undefined\r\n\r\n // console.log('######slippage######:', slippage)\r\n\r\n // Token balances\r\n const fromTokenBalanceNormal = useTokenBalance({\r\n chainId: fromTokenInfo.chain_id,\r\n tokenAddress:\r\n fromTokenInfo.address === zeroAddress ? undefined : fromTokenInfo.address\r\n })\r\n const toTokenBalanceNormal = useTokenBalance({\r\n chainId: toTokenInfo.chain_id,\r\n tokenAddress:\r\n toTokenInfo.address === zeroAddress ? undefined : toTokenInfo.address\r\n })\r\n\r\n const { data: fromTokenBalanceHyperBack } = useHyperliquidBalance(\r\n address,\r\n isFromHyperChain\r\n )\r\n const { data: toTokenBalanceHyperBack } = useHyperliquidBalance(\r\n address,\r\n isToHyperChain\r\n )\r\n\r\n const fromTokenBalanceHyper = useMemo(() => ({\r\n decimals: 6,\r\n formatted: fromTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n fromTokenBalanceHyperBack?.withdrawable\r\n ? fromTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }), [fromTokenBalanceHyperBack?.withdrawable])\r\n\r\n const toTokenBalanceHyper = useMemo(() => ({\r\n decimals: 6,\r\n formatted: toTokenBalanceHyperBack?.withdrawable,\r\n symbol: 'USDC',\r\n value: toBigInt(\r\n toTokenBalanceHyperBack?.withdrawable\r\n ? toTokenBalanceHyperBack?.withdrawable\r\n : '0',\r\n 6\r\n )\r\n }), [toTokenBalanceHyperBack?.withdrawable])\r\n\r\n // const fromTokenBalance = isFromHyperChain\r\n // ? fromTokenBalanceHyper\r\n // : fromTokenBalanceNormal\r\n\r\n // const toTokenBalance = isToHyperChain\r\n // ? toTokenBalanceHyper\r\n // : toTokenBalanceNormal\r\n\r\n // console.log('######## fromTokenInfo ########:', fromTokenInfo)\r\n // console.log('######## toTokenInfo ########:', toTokenInfo)\r\n // console.log('######## fromTokenBalance ########:', fromTokenBalance)\r\n // console.log('######## toTokenBalance ########:', toTokenBalance)\r\n\r\n useEffect(() => {\r\n if (fromTokenInfo.chain_id === hyperliquidChainId) {\r\n setIsFromHyperChain(true)\r\n } else {\r\n setIsFromHyperChain(false)\r\n }\r\n }, [fromTokenInfo])\r\n useEffect(() => {\r\n if (toTokenInfo.chain_id === hyperliquidChainId) {\r\n setIsToHyperChain(true)\r\n } else {\r\n setIsToHyperChain(false)\r\n }\r\n }, [toTokenInfo])\r\n\r\n // console.log('######## fromTokenBalanceHyper ########:', fromTokenBalanceHyper)\r\n\r\n const { data: feeData, isFetching: isLoadingFeeData } = useEstimateFeesPerGas(\r\n {\r\n chainId: fromTokenInfo.chain_id\r\n }\r\n )\r\n // fixed gas limit 500_000n\r\n const totalGasFee = feeData ? 500_000n * feeData.maxFeePerGas : 0n\r\n const { differentAddress, setDifferentAddress } = useDifferentAddressStore()\r\n // console.log('######## differentAddress ########:', differentAddress)\r\n\r\n // Determine from address based on chain type\r\n const fromAddress = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }, [fromTokenInfo.isSolana, solanaWalletAddress, address])\r\n\r\n // Determine to address based on chain type\r\n const toAddress = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }, [toTokenInfo.isSolana, solanaWalletAddress, differentAddress, address])\r\n\r\n const isFromNativeSOL =\r\n fromTokenInfo.isSolana &&\r\n (fromTokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n (fromTokenInfo.address as string) === '11111111111111111111111111111111')\r\n\r\n const isToNativeSOL =\r\n toTokenInfo.isSolana &&\r\n (toTokenInfo.symbol?.toUpperCase() === 'SOL' ||\r\n (toTokenInfo.address as string) === '11111111111111111111111111111111')\r\n\r\n const fromTokenBalanceSolana = useSolanaTokenBalance(\r\n isFromNativeSOL\r\n ? undefined\r\n : fromTokenInfo.isSolana\r\n ? fromTokenInfo.address\r\n : undefined,\r\n fromTokenInfo.isSolana\r\n )\r\n const toTokenBalanceSolana = useSolanaTokenBalance(\r\n isToNativeSOL\r\n ? undefined\r\n : toTokenInfo.isSolana\r\n ? toTokenInfo.address\r\n : undefined,\r\n toTokenInfo.isSolana\r\n )\r\n\r\n const fromTokenBalance = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return fromTokenBalanceSolana.data\r\n ? {\r\n decimals: fromTokenBalanceSolana.data.decimals,\r\n value: fromTokenBalanceSolana.data.value,\r\n formatted: fromTokenBalanceSolana.data.formatted\r\n }\r\n : undefined\r\n }\r\n return isFromHyperChain ? fromTokenBalanceHyper : fromTokenBalanceNormal\r\n }, [\r\n fromTokenInfo.isSolana,\r\n fromTokenBalanceSolana.data,\r\n isFromHyperChain,\r\n fromTokenBalanceHyper,\r\n fromTokenBalanceNormal\r\n ])\r\n\r\n const toTokenBalance = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return toTokenBalanceSolana.data\r\n ? {\r\n decimals: toTokenBalanceSolana.data.decimals,\r\n value: toTokenBalanceSolana.data.value,\r\n formatted: toTokenBalanceSolana.data.formatted\r\n }\r\n : undefined\r\n }\r\n return isToHyperChain ? toTokenBalanceHyper : toTokenBalanceNormal\r\n }, [\r\n toTokenInfo.isSolana,\r\n toTokenBalanceSolana.data,\r\n isToHyperChain,\r\n toTokenBalanceHyper,\r\n toTokenBalanceNormal\r\n ])\r\n\r\n // Memoized balance calculations\r\n const balanceInfo = useMemo(() => {\r\n const fromBalance = new Fraction(fromTokenBalance?.value ?? 0n)\r\n const toBalance = new Fraction(toTokenBalance?.value ?? 0n)\r\n\r\n // console.log('######toBalance######:', toBalance)\r\n // console.log('######fromBalance######:', fromBalance)\r\n\r\n const fromAmountFraction = new Fraction(fromAmount)\r\n\r\n const insufficientBalance =\r\n !!fromAmount &&\r\n fromAmountFraction.gt(fromBalance.shr(fromTokenInfo.decimals))\r\n\r\n return {\r\n fromBalance,\r\n toBalance,\r\n insufficientBalance\r\n }\r\n }, [\r\n fromAmount,\r\n fromTokenBalance?.value,\r\n fromTokenInfo.decimals,\r\n toTokenBalance?.value\r\n ])\r\n\r\n const balance = formatTokenAmount({\r\n amount: balanceInfo.fromBalance,\r\n decimals: fromTokenInfo.decimals\r\n })\r\n\r\n useEffect(() => {\r\n const plusGasFee = new Fraction('0.00008')\r\n .shl(fromTokenInfo.decimals)\r\n .add(totalGasFee ?? 0n)\r\n const { tags } = fromTokenInfo\r\n const isNative = tags?.includes('native')\r\n // console.log('###native###:', balance, fromAmount)\r\n if (\r\n (fromTokenInfo.address == zeroAddress || isNative) &&\r\n balanceInfo.fromBalance.lt(plusGasFee)\r\n ) {\r\n setIsInsufficientBalance(true)\r\n } else {\r\n setIsInsufficientBalance(false)\r\n }\r\n if (+balance < +fromAmount) {\r\n setIsInsufficientBalance(true)\r\n } else {\r\n setIsInsufficientBalance(false)\r\n }\r\n }, [balanceInfo, fromAmount, fromTokenInfo, totalGasFee, balance])\r\n\r\n // Event handlers\r\n const handleOpenTokenModal = (isFromToken: boolean) => {\r\n setIsSelectingFromToken(isFromToken)\r\n setIsModalOpen(true)\r\n }\r\n\r\n const handleCloseModal = useCallback(() => {\r\n setIsModalOpen(false)\r\n }, [])\r\n const handleCloseDifferentAddressDialog = useCallback(() => {\r\n setIsDifferentAddressDialogOpen(false)\r\n }, [])\r\n const handleOpenDifferentAddressDialog = useCallback(() => {\r\n setIsDifferentAddressDialogOpen(true)\r\n }, [])\r\n\r\n const { data: usdPrice } = useUsdPrice([\r\n {\r\n chain_index: fromTokenInfo.chain_id.toString(),\r\n token: fromTokenInfo.address\r\n },\r\n {\r\n chain_index: toTokenInfo.chain_id.toString(),\r\n token: toTokenInfo.address\r\n }\r\n ])\r\n const fromTokenUsdPrice = useMemo(() => {\r\n if (!usdPrice?.[0]?.price) return undefined\r\n return new Fraction(usdPrice[0].price)\r\n }, [usdPrice])\r\n const toTokenUsdPrice = useMemo(() => {\r\n if (!usdPrice?.[1]?.price) return undefined\r\n return new Fraction(usdPrice[1].price)\r\n }, [usdPrice])\r\n\r\n const fromTokenInUsd = useMemo(() => {\r\n if (\r\n !fromTokenUsdPrice ||\r\n fromTokenUsdPrice.eq(0) ||\r\n !fromAmount ||\r\n new Fraction(fromAmount).eq(0)\r\n )\r\n return\r\n return new Fraction(fromAmount).mul(fromTokenUsdPrice)\r\n }, [fromAmount, fromTokenUsdPrice])\r\n\r\n // Save current token selection to cache (only when EVM wallet connected, not shortLink, and tokens are library tokens)\r\n const saveTokenSelection = useCallback(() => {\r\n const { isEthWalletConnected, evmWalletAddress } =\r\n useWalletConnectedStore.getState()\r\n const {\r\n isShortLink: shortLinkFlag,\r\n fromTokenInfo: fti,\r\n toTokenInfo: tti\r\n } = useSwapAndBridgeContextStore.getState()\r\n\r\n if (!isEthWalletConnected || !evmWalletAddress || shortLinkFlag) return\r\n\r\n const fromInLibrary = tokens?.some(\r\n (t) => t.chain_id === fti.chain_id && t.address === fti.address\r\n )\r\n const toInLibrary = tokens?.some(\r\n (t) => t.chain_id === tti.chain_id && t.address === tti.address\r\n )\r\n\r\n if (fromInLibrary && toInLibrary) {\r\n tokenSelectionStore.set(evmWalletAddress, {\r\n from: fti,\r\n to: tti\r\n })\r\n }\r\n }, [tokens])\r\n\r\n // const handleSelectToken = useCallback(\r\n // (tokenInfo: TokenInfo) => {\r\n // const params: Record<string, string> = {}\r\n // // console.log('######Selected Token######:', tokenInfo)\r\n // if (isSelectingFromToken) {\r\n // setFromTokenInfo(tokenInfo)\r\n // params.from_chain = tokenInfo.chain_id.toString()\r\n // params.from_token = tokenInfo.address\r\n // } else {\r\n // setToTokenInfo(tokenInfo)\r\n // params.to_chain = tokenInfo.chain_id.toString()\r\n // params.to_token = tokenInfo.address\r\n // }\r\n // updateSearchParams(params)\r\n // handleCloseModal()\r\n // setQuoteInfo(initialQuoteInfo)\r\n // },\r\n // [\r\n // handleCloseModal,\r\n // isSelectingFromToken,\r\n // setFromTokenInfo,\r\n // setQuoteInfo,\r\n // setToTokenInfo,\r\n // updateSearchParams\r\n // ]\r\n // )\r\n\r\n const handleSelectToken = useCallback(\r\n (tokenInfo: TokenInfo) => {\r\n const params: Record<string, string> = {}\r\n\r\n // Check if the currently selected network is a testnet\r\n const isTestnetChain = (chainId: number) => {\r\n const chainInfo = chains?.find((chain) => chain.chain_id === chainId)\r\n return chainInfo?.is_testnet === true\r\n }\r\n\r\n if (isSelectingFromToken) {\r\n // Selecting FROM token\r\n setFromTokenInfo(tokenInfo)\r\n params.from_chain = tokenInfo.chain_id.toString()\r\n params.from_token = tokenInfo.address\r\n\r\n // If a testnet token is selected\r\n if (isTestnetChain(tokenInfo.chain_id)) {\r\n // Need to set to to a different token on the same testnet\r\n // If user selected native token, find another token for to\r\n // If user selected non-native token, use native token for to\r\n \r\n const isNativeToken = tokenInfo.tags?.includes('native') || tokenInfo.address === zeroAddress\r\n \r\n if (isNativeToken) {\r\n // User selected native token as from, find another token for to\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setToTokenInfo(otherToken)\r\n params.to_chain = otherToken.chain_id.toString()\r\n params.to_token = otherToken.address\r\n }\r\n } else {\r\n // User selected non-native token as from, use native token for to\r\n const nativeToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n (t.tags?.includes('native') || t.address === zeroAddress)\r\n )\r\n \r\n if (\r\n nativeToken &&\r\n (nativeToken.chain_id !== toTokenInfo?.chain_id ||\r\n nativeToken.address !== toTokenInfo?.address)\r\n ) {\r\n setToTokenInfo(nativeToken)\r\n params.to_chain = nativeToken.chain_id.toString()\r\n params.to_token = nativeToken.address\r\n } else if (!nativeToken) {\r\n // If no native token exists, select any other token from the same network\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setToTokenInfo(otherToken)\r\n params.to_chain = otherToken.chain_id.toString()\r\n params.to_token = otherToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // If a non-testnet network is selected but to is a testnet, reset to to default network\r\n if (toTokenInfo && isTestnetChain(toTokenInfo.chain_id)) {\r\n const baseEthToken = tokens?.find(\r\n (t) => t.chain_id === base.id && t.symbol === 'ETH'\r\n )\r\n if (baseEthToken) {\r\n setToTokenInfo(baseEthToken)\r\n params.to_chain = baseEthToken.chain_id.toString()\r\n params.to_token = baseEthToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // Selecting TO token\r\n setToTokenInfo(tokenInfo)\r\n params.to_chain = tokenInfo.chain_id.toString()\r\n params.to_token = tokenInfo.address\r\n\r\n // If a testnet token is selected\r\n if (isTestnetChain(tokenInfo.chain_id)) {\r\n // Need to set from to a different token on the same testnet\r\n // If user selected native token, find another token for from\r\n // If user selected non-native token, use native token for from\r\n \r\n const isNativeToken = tokenInfo.tags?.includes('native') || tokenInfo.address === zeroAddress\r\n \r\n if (isNativeToken) {\r\n // User selected native token as to, find another token for from\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setFromTokenInfo(otherToken)\r\n params.from_chain = otherToken.chain_id.toString()\r\n params.from_token = otherToken.address\r\n }\r\n } else {\r\n // User selected non-native token as to, use native token for from\r\n const nativeToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n (t.tags?.includes('native') || t.address === zeroAddress)\r\n )\r\n \r\n if (\r\n nativeToken &&\r\n (nativeToken.chain_id !== fromTokenInfo?.chain_id ||\r\n nativeToken.address !== fromTokenInfo?.address)\r\n ) {\r\n setFromTokenInfo(nativeToken)\r\n params.from_chain = nativeToken.chain_id.toString()\r\n params.from_token = nativeToken.address\r\n } else if (!nativeToken) {\r\n // If no native token exists, select any other token from the same network\r\n const otherToken = tokens?.find(\r\n (t) =>\r\n t.chain_id === tokenInfo.chain_id &&\r\n t.address !== tokenInfo.address\r\n )\r\n if (otherToken) {\r\n setFromTokenInfo(otherToken)\r\n params.from_chain = otherToken.chain_id.toString()\r\n params.from_token = otherToken.address\r\n }\r\n }\r\n }\r\n } else {\r\n // If a non-testnet network is selected but from is a testnet, reset from to default network\r\n if (fromTokenInfo && isTestnetChain(fromTokenInfo.chain_id)) {\r\n const soneiumEthToken = tokens?.find(\r\n (t) => t.chain_id === soneium.id && t.symbol === 'ETH'\r\n )\r\n if (soneiumEthToken) {\r\n setFromTokenInfo(soneiumEthToken)\r\n params.from_chain = soneiumEthToken.chain_id.toString()\r\n params.from_token = soneiumEthToken.address\r\n }\r\n }\r\n }\r\n }\r\n\r\n updateSearchParams(params)\r\n handleCloseModal()\r\n setQuoteInfo(initialQuoteInfo)\r\n saveTokenSelection()\r\n },\r\n [\r\n handleCloseModal,\r\n isSelectingFromToken,\r\n setFromTokenInfo,\r\n setQuoteInfo,\r\n setToTokenInfo,\r\n updateSearchParams,\r\n tokens,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n chains,\r\n saveTokenSelection\r\n ]\r\n )\r\n\r\n const handleSwitchTokens = async () => {\r\n if (toTokenInfo.chain_id === hyperliquidChainId) {\r\n return\r\n }\r\n // Reset quoteInfo first to prevent showing stale UI with wrong token info\r\n setQuoteInfo(initialQuoteInfo)\r\n\r\n const _fromTokenInfo = toTokenInfo\r\n const _toTokenInfo = fromTokenInfo\r\n const _fromAmount = toAmount\r\n\r\n // Clear differentAddress on token switch to avoid stale address being displayed\r\n setDifferentAddress(undefined)\r\n switchTokens()\r\n updateSearchParams({\r\n from_chain: _fromTokenInfo.chain_id.toString(),\r\n from_token: _fromTokenInfo.address,\r\n to_chain: _toTokenInfo.chain_id.toString(),\r\n to_token: _toTokenInfo.address\r\n })\r\n\r\n // Determine from address based on chain type\r\n const _fromAddress = () => {\r\n if (_fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }\r\n\r\n // Determine to address based on chain type\r\n const _toAddress = () => {\r\n if (_toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }\r\n\r\n const vCode = extractVPathSegment()\r\n // console.log('##########vCode#########:', vCode)\r\n await getQuote({\r\n from_chain: _fromTokenInfo.chain_id,\r\n to_chain: _toTokenInfo.chain_id,\r\n from_token: _fromTokenInfo.address ?? '',\r\n to_token: _toTokenInfo.address ?? '',\r\n from_address: _fromAddress(),\r\n to_address: _toAddress(),\r\n amount: parseUnits(_fromAmount, _fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: _toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: _toTokenInfo.platform_id || 0\r\n })\r\n saveTokenSelection()\r\n }\r\n\r\n const handleFromAmountChange = async (value: string) => {\r\n clearLockedRequestId()\r\n setFromAmount(value)\r\n setToAmount('')\r\n if (!value) {\r\n setQuoteInfo(initialQuoteInfo)\r\n return\r\n }\r\n const vCode = extractVPathSegment()\r\n // setQuoteInfo({ ...initialQuoteInfo, isFetching: true })\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(value, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value) || autoSlippage,\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n const handleToAmountChange = (value: string) => {\r\n // console.log('######Set toAmount######: ', value)\r\n setToAmount(value)\r\n }\r\n\r\n useEffect(() => {\r\n const refetchQuote = async () => {\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n if (fromAddress && fromAmount) {\r\n refetchQuote()\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [differentAddress, fromAddress, toAddress])\r\n\r\n return (\r\n <>\r\n <VStack\r\n w={'100%'}\r\n align={'start'}\r\n pos={'relative'}\r\n gap={{\r\n base: 2.5,\r\n md: 4\r\n }}\r\n >\r\n <TokenSelectAndInput\r\n text=\"From\"\r\n tokenInfo={fromTokenInfo}\r\n onClick={() => handleOpenTokenModal(true)}\r\n amount={fromAmount}\r\n onChange={handleFromAmountChange}\r\n userBalance={balanceInfo.fromBalance}\r\n isInsufficientBalance={isInsufficientBalance}\r\n usdPrice={fromTokenUsdPrice}\r\n totalGasFee={totalGasFee}\r\n isLoadingFeeData={isLoadingFeeData}\r\n />\r\n\r\n <Icon\r\n pos={'absolute'}\r\n top={'50%'}\r\n left={'50%'}\r\n transform={['translate(-50%, -100%)', 'translate(-50%, -82.5%)']}\r\n cursor={\r\n toTokenInfo.chain_id === hyperliquidChainId ? 'default' : 'pointer'\r\n }\r\n onClick={handleSwitchTokens}\r\n color={theme.weakTextColor}\r\n boxSize={{\r\n base: '20px',\r\n md: '30px'\r\n }}\r\n as={SwitchIcon}\r\n opacity={toTokenInfo.chain_id === hyperliquidChainId ? '0.5' : '1'}\r\n />\r\n\r\n <TokenSelectAndInput\r\n text=\"To\"\r\n tokenInfo={toTokenInfo}\r\n onClick={() => handleOpenTokenModal(false)}\r\n amount={toAmount}\r\n onChange={handleToAmountChange}\r\n userBalance={balanceInfo.toBalance}\r\n usdPrice={toTokenUsdPrice}\r\n isInsufficientBalance={isInsufficientBalance}\r\n onOpenDialog={handleOpenDifferentAddressDialog}\r\n />\r\n </VStack>\r\n\r\n <FormButton\r\n errorMessage={quoteInfo.error}\r\n isFetching={quoteInfo.isFetching}\r\n data={quoteInfo.data}\r\n gas={quoteInfo.gas}\r\n router_type={quoteInfo?.router_type}\r\n txValue={quoteInfo?.tx_value}\r\n quoteMessage={quoteInfo?.quote_message}\r\n backApprove={quoteInfo.backApprove}\r\n maxFeePerGas={quoteInfo.maxFeePerGas}\r\n maxPriorityFeePerGas={quoteInfo.maxPriorityFeePerGas}\r\n contractAddress={quoteInfo.contractAddress}\r\n insufficientBalance={balanceInfo.insufficientBalance}\r\n stopAutoRefetch={stopAutoRefetch}\r\n isInsufficientBalance={isInsufficientBalance}\r\n solanaTxMessage={quoteInfo.solanaTxMessage}\r\n lockRequestId={lockRequestId}\r\n currentRequestId={quoteInfo.request_id}\r\n clearLockedRequestId={clearLockedRequestId}\r\n lockedRequestId={lockedRequestId}\r\n getQuote={getQuote}\r\n />\r\n\r\n <SelectTokenModal\r\n isOpen={isModalOpen}\r\n isSelectingFromToken={isSelectingFromToken}\r\n onClose={handleCloseModal}\r\n config={config}\r\n\r\n onSelectToken={handleSelectToken}\r\n />\r\n {quoteInfo.info && fromAmount && toAmount && (\r\n <TxInfo\r\n {...quoteInfo.info}\r\n fromTokenInUsd={fromTokenInUsd}\r\n router_type={quoteInfo.router_type}\r\n routes={quoteInfo.routes}\r\n />\r\n )}\r\n <DifferentAddressDialog\r\n isOpen={isDifferentAddressDialogOpen}\r\n onClose={handleCloseDifferentAddressDialog}\r\n onSaveCallback={refetchQuote}\r\n ></DifferentAddressDialog>\r\n </>\r\n )\r\n}\r\n","import {\r\n Box,\r\n Button,\r\n HStack,\r\n Icon,\r\n // Image,\r\n Input,\r\n InputGroup,\r\n Popover,\r\n Portal\r\n} from '@chakra-ui/react'\r\n\r\nimport { MobileTooltip } from './ui/tooltip'\r\nimport { SettingsIcon } from './icons'\r\nimport { InfoIcon } from './icons'\r\nimport { useSwapAndBridgeContextStore } from './hooks'\r\nimport { Heading, Text } from './ui'\r\nimport { slippageStore } from '../utils'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { useCallback, useEffect, useMemo, useState } from 'react'\r\nimport { Props } from './FormTop'\r\nimport { useChainsStore } from './hooks'\r\nimport { FaTriangleExclamation } from \"react-icons/fa6\";\r\nimport {\r\n matchSlippagePolicy,\r\n isETHtoETHBridge,\r\n getLowSlippageWarnThreshold,\r\n HIGH_SLIPPAGE_WARN_THRESHOLD,\r\n isStablecoin\r\n} from './utils/index'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n/** Preset slippage percentages (displayed as %) */\r\nconst PRESET_VALUES = ['0.1', '0.5', '1', '2']\r\n\r\n/** Convert bips to a percentage string. E.g. 10 → '0.1', 50 → '0.5' */\r\nconst bipsToPercent = (bips: number): string => (bips / 100).toString()\r\n\r\nexport const SlippageSettings = ({ refetchQuote }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const address = useEvmAddress()\r\n const {\r\n slippage,\r\n setSlippage,\r\n fromTokenInfo,\r\n toTokenInfo,\r\n autoSlippage\r\n } = useSwapAndBridgeContextStore()\r\n const { slippagePolicies, chains } = useChainsStore()\r\n\r\n // --- Track which preset was explicitly clicked (null = input-typed or no selection) ---\r\n const [activePreset, setActivePreset] = useState<string | null>(null)\r\n\r\n // --- Load stored slippage on mount / address change ---\r\n useEffect(() => {\r\n /* eslint-disable react-hooks/set-state-in-effect */\r\n if (address) {\r\n const storedSlippage = slippageStore.get(address)\r\n if (storedSlippage && storedSlippage.value) {\r\n const parsed = parseFloat(storedSlippage.value).toString()\r\n setSlippage(parsed)\r\n // If stored value matches a preset, treat it as preset-selected\r\n setActivePreset(PRESET_VALUES.includes(parsed) ? parsed : null)\r\n } else {\r\n setSlippage(undefined)\r\n setActivePreset(null)\r\n }\r\n }\r\n /* eslint-enable react-hooks/set-state-in-effect */\r\n }, [address, setSlippage])\r\n\r\n // --- Debug: log fromTokenInfo and toTokenInfo details ---\r\n // useEffect(() => {\r\n // console.log('[SlippageSettings] fromTokenInfo:', {\r\n // name: fromTokenInfo?.name,\r\n // symbol: fromTokenInfo?.symbol,\r\n // address: fromTokenInfo?.address,\r\n // chain_id: fromTokenInfo?.chain_id,\r\n // decimals: fromTokenInfo?.decimals,\r\n // fee_level: fromTokenInfo?.fee_level,\r\n // categories: fromTokenInfo?.categories,\r\n // tags: fromTokenInfo?.tags\r\n // })\r\n // console.log('[SlippageSettings] toTokenInfo:', {\r\n // name: toTokenInfo?.name,\r\n // symbol: toTokenInfo?.symbol,\r\n // address: toTokenInfo?.address,\r\n // chain_id: toTokenInfo?.chain_id,\r\n // decimals: toTokenInfo?.decimals,\r\n // fee_level: toTokenInfo?.fee_level,\r\n // categories: toTokenInfo?.categories,\r\n // tags: toTokenInfo?.tags\r\n // })\r\n // }, [fromTokenInfo, toTokenInfo])\r\n\r\n // --- Match policy based on current token pair ---\r\n const matchedPolicy = useMemo(() => {\r\n if (!fromTokenInfo || !toTokenInfo) return null\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n return matchSlippagePolicy(\r\n slippagePolicies,\r\n isBridge,\r\n fromFeeLevel,\r\n toFeeLevel\r\n )\r\n }, [fromTokenInfo, toTokenInfo, slippagePolicies])\r\n\r\n // --- ETH-to-ETH cross-chain bridge check ---\r\n const isETHtoETH = useMemo(\r\n () => isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains),\r\n [fromTokenInfo, toTokenInfo, chains]\r\n )\r\n\r\n // --- Stablecoin pair detection ---\r\n const isStablecoinPair = useMemo(\r\n () =>\r\n isStablecoin(fromTokenInfo) && isStablecoin(toTokenInfo),\r\n [fromTokenInfo, toTokenInfo]\r\n )\r\n\r\n // --- Same chain check ---\r\n const isSameChain = useMemo(\r\n () =>\r\n fromTokenInfo?.chain_id !== undefined &&\r\n toTokenInfo?.chain_id !== undefined &&\r\n fromTokenInfo.chain_id === toTokenInfo.chain_id,\r\n [fromTokenInfo, toTokenInfo]\r\n )\r\n\r\n // --- Which preset (if any) corresponds to autoSlippage (the recommended value) ---\r\n const autoPresetValue = useMemo(() => {\r\n if (autoSlippage === undefined) return null\r\n const autoPercent = bipsToPercent(autoSlippage)\r\n return PRESET_VALUES.includes(autoPercent) ? autoPercent : null\r\n }, [autoSlippage])\r\n\r\n // --- Effective slippage in bips for the currently active value ---\r\n const effectiveSlippageBips = useMemo(() => {\r\n if (slippage !== undefined) {\r\n return Math.round(parseFloat(slippage) * 100)\r\n }\r\n return 0\r\n }, [slippage])\r\n\r\n // --- Low slippage warning threshold (bips) ---\r\n // Stablecoin pair uses fixed thresholds; others use fee_level policy or 0\r\n const lowSlippageWarnThreshold = useMemo(() => {\r\n if (isStablecoinPair) {\r\n // Same-chain stablecoin: min 0.05% (5 bips), cross-chain: min 0.2% (20 bips)\r\n return isSameChain ? 5 : 20\r\n }\r\n return getLowSlippageWarnThreshold(\r\n fromTokenInfo,\r\n toTokenInfo,\r\n matchedPolicy,\r\n isETHtoETH\r\n )\r\n }, [isStablecoinPair, isSameChain, fromTokenInfo, toTokenInfo, matchedPolicy, isETHtoETH])\r\n\r\n // --- Max slippage warning threshold (bips) ---\r\n // Stablecoin: 3% (300 bips); others from policy or 3% fallback\r\n const maxSlippageWarnThreshold = useMemo(() => {\r\n if (isStablecoinPair) {\r\n return 300 // 3% for stablecoin\r\n }\r\n return matchedPolicy?.max_slippage ?? HIGH_SLIPPAGE_WARN_THRESHOLD\r\n }, [isStablecoinPair, matchedPolicy])\r\n\r\n // --- Show low slippage warning (only when user has explicitly set a value) ---\r\n const showLowSlippageWarning = useMemo(\r\n () =>\r\n slippage !== undefined &&\r\n lowSlippageWarnThreshold > 0 &&\r\n effectiveSlippageBips > 0 &&\r\n effectiveSlippageBips < lowSlippageWarnThreshold,\r\n [slippage, lowSlippageWarnThreshold, effectiveSlippageBips]\r\n )\r\n\r\n // --- Show high slippage warning (only when user has explicitly set a value) ---\r\n const showHighSlippageWarning = useMemo(() => {\r\n if (slippage === undefined || isETHtoETH) return false\r\n return effectiveSlippageBips > maxSlippageWarnThreshold\r\n }, [slippage, isETHtoETH, effectiveSlippageBips, maxSlippageWarnThreshold])\r\n\r\n // --- Yellow dot on settings icon when slippage is too high or too low ---\r\n const showYellowDot = useMemo(() => {\r\n if (slippage === undefined || isETHtoETH) return false\r\n if (effectiveSlippageBips <= 0) return false\r\n return (\r\n effectiveSlippageBips < lowSlippageWarnThreshold ||\r\n effectiveSlippageBips > maxSlippageWarnThreshold\r\n )\r\n }, [\r\n slippage,\r\n isETHtoETH,\r\n effectiveSlippageBips,\r\n lowSlippageWarnThreshold,\r\n maxSlippageWarnThreshold\r\n ])\r\n\r\n // --- Warning message text ---\r\n const warningMessage = useMemo(() => {\r\n if (showLowSlippageWarning) {\r\n return 'Slippage is a bit too low, which may cause the transaction to fail or prevent wallet confirmation.'\r\n }\r\n if (showHighSlippageWarning) {\r\n return 'Your slippage tolerance might be high. Consider adjusting it to avoid front-running risks.'\r\n }\r\n return null\r\n }, [showLowSlippageWarning, showHighSlippageWarning])\r\n\r\n // --- Input display value (defaults to empty when no user selection) ---\r\n const inputValue = useMemo(() => {\r\n if (slippage !== undefined) return slippage.toString()\r\n return ''\r\n }, [slippage])\r\n\r\n // --- Whether current slippage value came from custom input (not a preset click) ---\r\n const isCustomInput = useMemo(() => {\r\n return activePreset === null && slippage !== undefined\r\n }, [activePreset, slippage])\r\n\r\n // --- Handlers ---\r\n const handlePresetClick = useCallback(\r\n (value: string) => {\r\n setActivePreset(value)\r\n setSlippage(value)\r\n if (address) {\r\n slippageStore.set(address, { value })\r\n }\r\n if (value) {\r\n refetchQuote({ slippageValue: value })\r\n }\r\n },\r\n [address, setSlippage, refetchQuote]\r\n )\r\n\r\n const handleInputChange = useCallback(\r\n (value: string) => {\r\n if (value === '' || /^\\d*(\\.\\d{0,2})?$/.test(value)) {\r\n setActivePreset(null)\r\n setSlippage(value)\r\n if (address) {\r\n slippageStore.set(address, { value })\r\n }\r\n if (value) {\r\n refetchQuote({ slippageValue: value })\r\n }\r\n }\r\n },\r\n [address, setSlippage, refetchQuote]\r\n )\r\n\r\n const handleAutoClick = useCallback(() => {\r\n setActivePreset(null)\r\n setSlippage(undefined)\r\n if (address) {\r\n slippageStore.remove(address)\r\n }\r\n // Use slippagePolicies default for this token pair\r\n if (fromTokenInfo && toTokenInfo && autoSlippage !== undefined) {\r\n refetchQuote({\r\n isAutoSlippage: true,\r\n slippageValue: (autoSlippage / 100).toString()\r\n })\r\n }\r\n }, [address, setSlippage, refetchQuote, fromTokenInfo, toTokenInfo, autoSlippage])\r\n\r\n return (\r\n <Popover.Root positioning={{ placement: 'bottom-end' }} autoFocus={false}>\r\n <Popover.Trigger>\r\n <Box position=\"relative\" cursor=\"pointer\">\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '22px'\r\n }}\r\n as={SettingsIcon}\r\n />\r\n {showYellowDot && (\r\n <Box\r\n position=\"absolute\"\r\n top=\"-2px\"\r\n right=\"-2px\"\r\n w=\"8px\"\r\n h=\"8px\"\r\n borderRadius=\"full\"\r\n bg=\"#FCCA00\"\r\n />\r\n )}\r\n </Box>\r\n </Popover.Trigger>\r\n <Portal>\r\n <Popover.Positioner>\r\n <Popover.Content\r\n w={['90vw', '450px', '450px']}\r\n // boxShadow={'0px 4px 12px 0px #545AB4'}\r\n borderRadius={'12px'}\r\n background={theme.assistBgColor}\r\n >\r\n <Popover.Body\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n >\r\n <Popover.Title>\r\n <HStack color={theme.weakTextColor} paddingBottom={'10px'} position={'relative'}>\r\n <Heading\r\n variant={{\r\n base: 'heading13',\r\n md: 'heading11'\r\n }}\r\n >\r\n Slippage Tolerance\r\n </Heading>\r\n <MobileTooltip\r\n contentProps={{\r\n boxShadow: '0px 0px 10px 0px rgba(0, 0, 0, 0.1)'\r\n }}\r\n content={\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n p={4}\r\n lineHeight={1.2}\r\n color={theme.weakTextColor}\r\n >\r\n If the price changes unfavorably by more than the\r\n entered percentage, the transaction will be reverted.\r\n </Text>\r\n }\r\n openDelay={100}\r\n closeDelay={100}\r\n interactive\r\n >\r\n <Icon boxSize={'10px'} as={InfoIcon} color={theme.weakTextColor} />\r\n </MobileTooltip>\r\n <Button\r\n h={'26px'}\r\n border={'1px solid'}\r\n borderColor={slippage === undefined ? theme.highlightBorderColor : theme.weakTextColor}\r\n bg={slippage === undefined ? theme.highlightButtonBg : theme.defaultBgColor}\r\n color={slippage === undefined ? theme.highlightButtonText : theme.weakTextColor}\r\n px={2}\r\n py={0.5}\r\n variant={'outline'}\r\n borderRadius={'4px'}\r\n onClick={handleAutoClick}\r\n position={'absolute'}\r\n top={0}\r\n right={0}\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n >\r\n Auto\r\n </Text>\r\n </Button>\r\n </HStack>\r\n </Popover.Title>\r\n\r\n <HStack mt={2} flexWrap={'wrap'} gap={2} justifyContent={'space-between'} marginBottom={'10px'}>\r\n {PRESET_VALUES.map((presetValue) => {\r\n const isSelected = activePreset === presetValue\r\n const isRecommended =\r\n slippage === undefined && presetValue === autoPresetValue\r\n\r\n return (\r\n <Button\r\n key={presetValue}\r\n h={'34px'}\r\n w={'64px'}\r\n border={'1px solid'}\r\n borderColor={\r\n isSelected || isRecommended ? theme.highlightBorderColor : theme.weakTextColor\r\n }\r\n bg={\r\n isSelected || isRecommended ? theme.highlightButtonBg : theme.defaultBgColor\r\n }\r\n color={\r\n isSelected || isRecommended ? theme.highlightButtonText : theme.defaultTextColor\r\n }\r\n px={2}\r\n py={0.5}\r\n variant={'outline'}\r\n borderRadius={'10px'}\r\n onClick={() => handlePresetClick(presetValue)}\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n >\r\n {presetValue}%\r\n </Text>\r\n </Button>\r\n )\r\n })}\r\n\r\n <InputGroup\r\n w={'76px'}\r\n endElement={'%'}\r\n endElementProps={{\r\n pr: 2,\r\n fontSize: {\r\n base: '10px',\r\n md: '12px'\r\n }\r\n }}\r\n >\r\n <Input\r\n id=\"slippage-input\"\r\n width=\"76px\"\r\n borderRadius={'10px'}\r\n h={'34px'}\r\n px={3}\r\n style={{ paddingInlineEnd: 20 }}\r\n placeholder={'Custom'}\r\n color={theme.defaultTextColor}\r\n _placeholder={{ color: theme.weakTextColor }}\r\n fontSize={{\r\n base: '10px',\r\n md: '12px'\r\n }}\r\n fontWeight={400}\r\n textAlign={'center'}\r\n borderColor={isCustomInput ? theme.highlightBorderColor : theme.weakTextColor}\r\n _focus={{\r\n borderColor: theme.highlightBorderColor,\r\n outlineWidth: '0px'\r\n }}\r\n autoComplete=\"off\"\r\n inputMode=\"decimal\"\r\n type=\"text\"\r\n value={inputValue}\r\n onChange={(e) => handleInputChange(e.target.value)}\r\n />\r\n </InputGroup>\r\n </HStack>\r\n\r\n {warningMessage && (\r\n <Box\r\n // color={'#81728c'}\r\n // backgroundColor={'rgba(255, 210, 0, .1)'}\r\n // border={'1px solid rgba(255, 210, 0, 1)'}\r\n minHeight={'18px'}\r\n lineHeight={1.5}\r\n padding={'6px 0 6px 21px'}\r\n textAlign={'left'}\r\n fontSize={'12px'}\r\n borderRadius={'4px'}\r\n w={'100%'}\r\n mt={2}\r\n position={'relative'}\r\n color={'#FCCA00'}\r\n >\r\n {/* <Image\r\n src={'https://wheelx.fi/images/jth.png'}\r\n alt=\"warning\"\r\n /> */}\r\n <Box\r\n w={'14px'}\r\n h={'14px'}\r\n display={'inline'}\r\n position={'absolute'}\r\n left={'2px'}\r\n top={'8px'}\r\n >\r\n <FaTriangleExclamation color={'#FCCA00'} />\r\n </Box>\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n lineHeight={1.5}\r\n >\r\n {warningMessage}\r\n </Text>\r\n </Box>\r\n )}\r\n </Popover.Body>\r\n </Popover.Content>\r\n </Popover.Positioner>\r\n </Portal>\r\n </Popover.Root>\r\n )\r\n}\r\n","import { Box, HStack } from '@chakra-ui/react'\r\n\r\nimport { SlippageSettings } from './SlippageSettings'\r\nimport { Heading } from './ui'\r\nimport { useRefreshLoading } from './hooks/useRefreshLoading'\r\nimport { loaderSvgUrl } from './icons'\r\nimport { QuoteInfo } from './MainForm'\r\nimport { useState, useEffect } from 'react'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\nexport interface RefetchQuoteParams {\r\n slippageValue?: string\r\n isAutoSlippage?: boolean\r\n}\r\n\r\nexport interface Props {\r\n refetchQuote: (params?: RefetchQuoteParams) => void\r\n quoteInfo?: QuoteInfo\r\n clearLockedRequestId?: () => void\r\n refreshInterval?: number\r\n hideCountdown?: boolean\r\n}\r\nexport const FormTop = ({\r\n refetchQuote,\r\n quoteInfo,\r\n clearLockedRequestId,\r\n refreshInterval = 30,\r\n hideCountdown = false\r\n}: Props) => {\r\n const { isLoading: isLoadingRefresh } = useRefreshLoading()\r\n const { theme } = useWidgetTheme()\r\n\r\n const isPolling = Boolean(quoteInfo?.request_id && !isLoadingRefresh)\r\n const [countdown, setCountdown] = useState(refreshInterval)\r\n\r\n useEffect(() => {\r\n if (!isPolling) return\r\n\r\n let seconds = refreshInterval\r\n setCountdown(seconds)\r\n\r\n const timer = setInterval(() => {\r\n seconds -= 1\r\n if (seconds <= 0) {\r\n setCountdown(0)\r\n clearInterval(timer)\r\n return\r\n }\r\n setCountdown(seconds)\r\n }, 1000)\r\n\r\n return () => {\r\n clearInterval(timer)\r\n }\r\n }, [isPolling, refreshInterval])\r\n\r\n const handleRefreshClick = () => {\r\n if (clearLockedRequestId) {\r\n clearLockedRequestId()\r\n }\r\n refetchQuote()\r\n }\r\n\r\n return (\r\n <HStack justify={'space-between'} w={'100%'}>\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n Bridge & Swap\r\n </Heading>\r\n <HStack color={theme.weakTextColor || '#81728C'}>\r\n <HStack\r\n w={'24px'}\r\n h={'24px'}\r\n display={'flex'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n background={'transparent'}\r\n position={'relative'}\r\n >\r\n <Box\r\n w=\"22px\"\r\n h=\"22px\"\r\n position=\"relative\"\r\n maskImage={`url(${loaderSvgUrl})`}\r\n maskPosition={'center center'}\r\n maskRepeat={'no-repeat'}\r\n maskSize={'100%'}\r\n top={'1px'}\r\n cursor={'pointer'}\r\n onClick={handleRefreshClick}\r\n className=\"animation-loading\"\r\n animationName={isLoadingRefresh ? 'keyframes-loading' : undefined}\r\n >\r\n <svg\r\n height=\"24\"\r\n width=\"24\"\r\n style={{\r\n backgroundColor: theme.weakTextColor ||'#81728C',\r\n stroke: 'rgb(185, 206, 252)',\r\n strokeDasharray: '0, 101',\r\n fill: 'none',\r\n transform: 'translate(-50%, -50%) rotate(-91deg)',\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n width: '22px',\r\n height: '22px',\r\n transition: 'background-color 0.15ms',\r\n animation:\r\n isLoadingRefresh || !quoteInfo?.request_id\r\n ? undefined\r\n : `svg_loader ${refreshInterval}s linear 0s infinite normal`\r\n }}\r\n >\r\n <circle cx=\"50%\" cy=\"50%\" r=\"50%\" strokeWidth=\"100%\"></circle>\r\n </svg>\r\n </Box>\r\n <Box\r\n position={'absolute'}\r\n pointerEvents={'none'}\r\n w={'100%'}\r\n h={'100%'}\r\n top={0}\r\n left={0}\r\n textAlign={'center'}\r\n lineHeight={'28px'}\r\n fontSize={'10px'}\r\n color={countdown <= 10 ? theme.defaultTextColor : theme.highlightTextColor}\r\n >\r\n {isPolling && !hideCountdown && countdown > 0 ? countdown : ''}\r\n </Box>\r\n </HStack>\r\n <SlippageSettings refetchQuote={refetchQuote} />\r\n </HStack>\r\n </HStack>\r\n )\r\n}\r\n","import React, { useState, useEffect, useCallback, useRef } from 'react'\r\nimport { Text } from './ui'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\ninterface Props {\r\n stop: boolean\r\n onTick?: (seconds: number) => void\r\n}\r\n\r\nconst Timer = ({ stop, onTick }: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const [seconds, setSeconds] = useState<number>(0)\r\n const [isRunning, setIsRunning] = useState<boolean>(false)\r\n const timer = useRef<NodeJS.Timeout | null>(null)\r\n\r\n const formatTime = (totalSeconds: number): string => {\r\n return `${totalSeconds} s`\r\n }\r\n\r\n const startTimer = useCallback(() => {\r\n if (!isRunning) {\r\n setIsRunning(true)\r\n setSeconds(0)\r\n }\r\n }, [isRunning])\r\n\r\n useEffect(() => {\r\n startTimer()\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (onTick) {\r\n onTick(seconds)\r\n }\r\n }, [seconds, onTick])\r\n\r\n useEffect(() => {\r\n if (isRunning) {\r\n timer.current = setInterval(() => {\r\n setSeconds((prev) => prev + 1)\r\n }, 1000)\r\n }\r\n\r\n return () => {\r\n if (timer.current) {\r\n clearInterval(timer.current)\r\n }\r\n }\r\n }, [isRunning])\r\n\r\n useEffect(() => {\r\n if (stop) {\r\n setIsRunning(false)\r\n if (timer.current) {\r\n clearInterval(timer.current)\r\n timer.current = null\r\n }\r\n }\r\n }, [stop])\r\n\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n {formatTime(seconds)}\r\n </Text>\r\n )\r\n}\r\n\r\nexport default Timer\r\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Success = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"animation-success\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Wheel = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"animation-wheel\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { Box, BoxProps } from '@chakra-ui/react'\n\nexport const Failure = ({ ...props }: BoxProps) => {\n return (\n <Box\n w={{\n base: '96px',\n md: '140px'\n }}\n h={{\n base: '96px',\n md: '140px'\n }}\n {...props}\n >\n <svg viewBox=\"0, 0, 280, 280\" style={{ width: '100%' }}>\n <foreignObject width=\"280\" height=\"280\">\n <div className=\"failure\"></div>\n </foreignObject>\n </svg>\n </Box>\n )\n}\n","import { VStack, HStack, Icon, Button, Image, Link } from '@chakra-ui/react'\r\nimport { useMemo, useState, useEffect } from 'react'\r\nimport type { Connection } from '@solana/web3.js'\r\nimport { useRpcProviders } from '@dynamic-labs/sdk-react-core'\r\n\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\n\r\nimport { useIntervalGetOrderDetailPlus } from '../api/useIntervalGetOrderDetail'\r\nimport {\r\n formatDate,\r\n getTxLink,\r\n logger,\r\n openFunctionHash,\r\n sliceAddress,\r\n formatTokenAmount\r\n} from '../utils'\r\n\r\nimport { useSwapAndBridgeContextStore, useTxStateContextStore } from './hooks'\r\nimport { BackIcon } from './icons'\r\nimport { BoxWithBg } from './ui/BoxWithBg'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\nimport { ArrowRightIcon } from './icons'\r\nimport { LinkIcon } from './icons'\r\nimport { TimeIcon } from './icons'\r\nimport { DateIcon } from './icons'\r\nimport { MoneyIcon } from './icons'\r\nimport { Text, Heading } from './ui'\r\nimport { PlusIcon } from './icons'\r\nimport { TokenAmountHeading, TokenIconWithNetworkLogo } from './commons'\r\nimport { Fraction } from 'bi-fraction'\r\nimport Timer from './Timer'\r\nimport { useConfig } from 'wagmi'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { Success, Wheel, Failure } from './animations'\r\nimport { topToaster } from './ui/toaster'\r\nimport { useRetryAbleTransactionReceipt } from './hooks/useRetryAbleTransactionReceipt'\r\nimport { hyperliquidChainId } from './utils/consts'\r\nimport { useChainsStore } from '../stores/chainsStore'\r\n\r\n// Solana transaction confirmation hook\r\nconst useSolanaTransactionConfirmation = (\r\n signature: string | null,\r\n connection: Connection | null\r\n) => {\r\n const [status, setStatus] = useState<'pending' | 'confirmed' | 'failed'>(\r\n 'pending'\r\n )\r\n const [isLoading, setIsLoading] = useState(false)\r\n\r\n useEffect(() => {\r\n if (!signature || !connection) return\r\n\r\n const checkConfirmation = async () => {\r\n setIsLoading(true)\r\n try {\r\n const response = await connection.getSignatureStatuses([signature], {\r\n searchTransactionHistory: true\r\n })\r\n\r\n const value = response?.value?.[0]\r\n\r\n if (!value) {\r\n setStatus('pending')\r\n return\r\n }\r\n\r\n if (value.err) {\r\n setStatus('failed')\r\n } else if (\r\n value.confirmationStatus === 'confirmed' ||\r\n value.confirmationStatus === 'finalized'\r\n ) {\r\n setStatus('confirmed')\r\n } else {\r\n setStatus('pending')\r\n }\r\n } catch (error) {\r\n const message =\r\n error instanceof Error ? error.message.toLowerCase() : String(error)\r\n\r\n // Transient RPC/network issue: keep pending and continue polling\r\n if (\r\n message.includes('failed to fetch') ||\r\n message.includes('timeout')\r\n ) {\r\n setStatus('pending')\r\n } else {\r\n logger.error('Solana transaction confirmation error:', error)\r\n setStatus('failed')\r\n }\r\n } finally {\r\n setIsLoading(false)\r\n }\r\n }\r\n\r\n checkConfirmation()\r\n\r\n const interval = setInterval(checkConfirmation, 3000)\r\n\r\n // Max waiting 3 minutes. If still pending, mark failed to avoid infinite pending UI.\r\n const timeout = setTimeout(() => {\r\n clearInterval(interval)\r\n setStatus((prev) => (prev === 'pending' ? 'failed' : prev))\r\n setIsLoading(false)\r\n }, 180000)\r\n\r\n return () => {\r\n clearInterval(interval)\r\n clearTimeout(timeout)\r\n }\r\n }, [signature, connection])\r\n\r\n return { status, isLoading }\r\n}\r\n\r\n// Get Solana transaction link\r\nconst getSolanaTxLink = (signature: string) => {\r\n return `https://solscan.io/tx/${signature}`\r\n}\r\n\r\ninterface Props {\r\n resetQuoteInfo: () => void\r\n request_id: string | null\r\n routerType?: string | null | undefined\r\n points?: number | 0 | string\r\n clearLockedRequestId: () => void\r\n}\r\n\r\nexport const TxState = ({\r\n resetQuoteInfo,\r\n request_id,\r\n routerType,\r\n clearLockedRequestId\r\n}: Props) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTokenInfo, toTokenInfo, fromAmount, toAmount, resetAmounts, setToAmount } =\r\n useSwapAndBridgeContextStore()\r\n\r\n const {\r\n fromTxHash,\r\n solanaFromTxHash,\r\n toTxHash,\r\n resetTxState,\r\n setToTxHash,\r\n setUserCancelsTransaction,\r\n isSolanaTransaction\r\n } = useTxStateContextStore()\r\n\r\n // Get current transaction hash (EVM or Solana)\r\n // const currentTxHash = isSolanaTransaction ? solanaFromTxHash : fromTxHash\r\n\r\n const isSameChainSwap = useMemo(() => {\r\n return fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n }, [fromTokenInfo.chain_id, toTokenInfo.chain_id])\r\n\r\n const now = useMemo(() => {\r\n return formatDate(new Date().toISOString())\r\n }, [])\r\n const [enabled, setEnabled] = useState(false)\r\n const [orderId, setOrderId] = useState<string | null>(request_id)\r\n const [isSameChainSwapSuccess, setIsSameChainSwapSuccess] = useState(false)\r\n const [timeOut, setTimeOut] = useState(false)\r\n const [isTransactionBlocked, setIsTransactionBlocked] = useState(false)\r\n const [currentTime, setCurrentTime] = useState(0)\r\n const { differentAddress, setDifferentAddress } = useDifferentAddressStore()\r\n const { chains } = useChainsStore()\r\n const toChainInfo = chains?.find((chain) => {\r\n if (toTokenInfo.platform_id && toTokenInfo.platform_id > 0) {\r\n return chain.platform_id === toTokenInfo.platform_id\r\n } else {\r\n return chain.chain_id === toTokenInfo.chain_id\r\n }\r\n })\r\n\r\n // Solana connection (Dynamic)\r\n const { defaultProvider: connection } = useRpcProviders((providers) => {\r\n const solanaProviders = (\r\n providers as\r\n | {\r\n solana?: Array<{\r\n provider?: Connection\r\n }>\r\n }\r\n | undefined\r\n )?.solana\r\n\r\n return {\r\n defaultProvider: solanaProviders?.[0]?.provider ?? null\r\n }\r\n })\r\n\r\n // Solana transaction confirmation status\r\n const { status: solanaStatus, isLoading: solanaIsLoading } =\r\n useSolanaTransactionConfirmation(solanaFromTxHash, connection)\r\n\r\n const resetLocalState = () => {\r\n setEnabled(false)\r\n setOrderId(null)\r\n setIsSameChainSwapSuccess(false)\r\n }\r\n\r\n useEffect(() => {\r\n return () => {\r\n resetLocalState()\r\n }\r\n }, [])\r\n\r\n // Cleanup Solana state (only on unmount, not on re-render)\r\n useEffect(() => {\r\n return () => {\r\n // Don't reset here, let user click back button to reset state\r\n // setIsSolanaTransaction(false)\r\n }\r\n }, [])\r\n\r\n const address = useEvmAddress()\r\n\r\n const {\r\n data: orderDetail,\r\n isError\r\n } = useIntervalGetOrderDetailPlus({\r\n orderId,\r\n enabled,\r\n maxRefetchAttempts: 200\r\n })\r\n\r\n const config = useConfig()\r\n\r\n const {\r\n data: receipt,\r\n isError: isReceiptError,\r\n error,\r\n isPending,\r\n isSuccess,\r\n isFetched,\r\n status: evmStatus,\r\n isMaxRetriesExceeded\r\n } = useRetryAbleTransactionReceipt(\r\n fromTxHash || undefined,\r\n fromTokenInfo.chain_id,\r\n 6\r\n )\r\n\r\n // Derive receipt status from external sources instead of using state+effect\r\n const receiptStatus = useMemo(() => {\r\n if (isSolanaTransaction) {\r\n if (solanaStatus === 'confirmed') return 'success'\r\n if (solanaStatus === 'failed') return 'failed'\r\n return null\r\n }\r\n // EVM: derived from transaction receipt\r\n if (receipt?.status === 'success') return 'success'\r\n if (receipt?.status === 'reverted') return 'failed'\r\n return null\r\n }, [isSolanaTransaction, solanaStatus, receipt?.status])\r\n\r\n useEffect(() => {\r\n console.log(\r\n 'isReceiptError:',\r\n isReceiptError,\r\n 'error:',\r\n error,\r\n 'isPending:',\r\n isPending,\r\n 'isSuccess:',\r\n isSuccess,\r\n 'isFetched:',\r\n isFetched,\r\n 'status:',\r\n evmStatus,\r\n 'solanaStatus:',\r\n solanaStatus\r\n )\r\n }, [\r\n error,\r\n isFetched,\r\n isMaxRetriesExceeded,\r\n isPending,\r\n isReceiptError,\r\n isSuccess,\r\n evmStatus,\r\n solanaStatus\r\n ])\r\n\r\n useEffect(() => {\r\n if (isError) {\r\n console.log('get order detail error:', isError)\r\n }\r\n }, [isError])\r\n\r\n useEffect(() => {\r\n if (timeOut && isTransactionBlocked) {\r\n topToaster.error({\r\n description: `This transaction is stuck on the source network. Please go to the wallet's activity section to speed up or cancel the transaction.`\r\n })\r\n }\r\n }, [isTransactionBlocked, timeOut])\r\n\r\n // Handle Solana transaction success logic\r\n useEffect(() => {\r\n // console.log('🔄 Solana transaction status change:', {\r\n // isSolanaTransaction,\r\n // solanaFromTxHash,\r\n // solanaStatus,\r\n // isSameChainSwap,\r\n // request_id\r\n // })\r\n\r\n if (isSolanaTransaction && solanaFromTxHash) {\r\n if (solanaStatus === 'confirmed') {\r\n // console.log(\r\n // '✅ Solana transaction confirmed, setting status to success'\r\n // )\r\n\r\n // Start order API polling (both same-chain and cross-chain)\r\n const orderIdValue = request_id\r\n if (orderIdValue) {\r\n queueMicrotask(() => {\r\n setOrderId(orderIdValue)\r\n setEnabled(true)\r\n })\r\n } else {\r\n console.warn('⚠️ [Solana] request_id is empty, cannot start order polling. Check if quote API returned request_id for this swap.')\r\n }\r\n } else if (solanaStatus === 'failed') {\r\n // console.log('❌ Solana transaction failed')\r\n queueMicrotask(() => {\r\n setTimeOut(true)\r\n })\r\n } else if (solanaStatus === 'pending') {\r\n console.log('⏳ Solana transaction waiting for confirmation...')\r\n }\r\n } else {\r\n console.log('⚠️ Condition not met:', {\r\n isSolanaTransaction,\r\n solanaFromTxHash\r\n })\r\n }\r\n }, [\r\n isSolanaTransaction,\r\n solanaFromTxHash,\r\n solanaStatus,\r\n request_id\r\n ])\r\n\r\n // EVM transaction handling logic\r\n useEffect(() => {\r\n async function getOrderId() {\r\n try {\r\n if (!fromTxHash || isSolanaTransaction) return\r\n\r\n logger.info('Bridge transaction receipt:', receipt)\r\n\r\n const log = receipt?.logs?.find(\r\n (log: { topics: string[] }) => log.topics[0] === openFunctionHash\r\n )\r\n const orderIdOld = log?.topics[1]\r\n const orderId = request_id || orderIdOld\r\n if (orderId && receipt?.status === 'success') {\r\n setTimeOut(false)\r\n setOrderId(orderId)\r\n setEnabled(true)\r\n setTimeOut(false)\r\n }\r\n } catch (error) {\r\n logger.error('Transaction confirmation failed:', error)\r\n resetLocalState()\r\n }\r\n }\r\n\r\n if (fromTxHash && !isSolanaTransaction) {\r\n getOrderId()\r\n }\r\n }, [\r\n config,\r\n request_id,\r\n fromTokenInfo.chain_id,\r\n fromTxHash,\r\n receipt,\r\n isSolanaTransaction\r\n ])\r\n\r\n useEffect(() => {\r\n if (orderDetail?.status === 'Filled') {\r\n // For same-chain swaps, fill_tx_hash may be null since there's no cross-chain fill tx.\r\n // Use the source tx hash as fallback because source tx IS the target tx on the same chain.\r\n queueMicrotask(() => {\r\n setEnabled(false)\r\n setToTxHash(\r\n orderDetail.fill_tx_hash ||\r\n (isSameChainSwap\r\n ? isSolanaTransaction\r\n ? (solanaFromTxHash as unknown as `0x${string}`)\r\n : fromTxHash\r\n : null)\r\n )\r\n })\r\n }\r\n if (orderDetail?.status === 'Failed') {\r\n queueMicrotask(() => {\r\n setEnabled(false)\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [orderDetail, setToTxHash, isSameChainSwap, fromTxHash, isSolanaTransaction, solanaFromTxHash])\r\n\r\n // Update toAmount when orderDetail returns amount_out or to_amount.\r\n // Both fields are raw token units; must format to human-readable value first.\r\n useEffect(() => {\r\n const rawAmount = orderDetail?.to_amount || orderDetail?.amount_out\r\n if (rawAmount) {\r\n const formatted = formatTokenAmount({\r\n amount: new Fraction(rawAmount),\r\n decimals: toTokenInfo.decimals,\r\n useGroupSeparator: false\r\n })\r\n setToAmount(formatted)\r\n }\r\n }, [orderDetail?.amount_out, orderDetail?.to_amount, setToAmount, toTokenInfo.decimals])\r\n\r\n const onBack = () => {\r\n setUserCancelsTransaction(false)\r\n setTimeOut(false)\r\n setIsTransactionBlocked(false)\r\n resetTxState()\r\n resetAmounts()\r\n resetQuoteInfo()\r\n resetLocalState()\r\n setDifferentAddress(undefined)\r\n clearLockedRequestId()\r\n }\r\n\r\n const handleTimerTick = (secs: number) => {\r\n setCurrentTime(secs)\r\n }\r\n\r\n // Determine if transaction is successful (supports both EVM and Solana)\r\n // const isTransactionSuccess = useMemo(() => {\r\n // if (isSolanaTransaction) {\r\n // return solanaStatus === 'confirmed'\r\n // }\r\n // return receiptStatus === 'success'\r\n // }, [isSolanaTransaction, solanaStatus, receiptStatus])\r\n\r\n // Determine if transaction is in progress\r\n const isTransactionPending = useMemo(() => {\r\n if (isSolanaTransaction) {\r\n return solanaStatus === 'pending' || solanaIsLoading\r\n }\r\n return isPending\r\n }, [isSolanaTransaction, solanaStatus, solanaIsLoading, isPending])\r\n\r\n useEffect(() => {\r\n if (isTransactionPending && currentTime >= 300) {\r\n queueMicrotask(() => {\r\n setIsTransactionBlocked(true)\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [currentTime, isTransactionPending])\r\n\r\n useEffect(() => {\r\n if (isFetched && evmStatus === 'error') {\r\n queueMicrotask(() => {\r\n setTimeOut(true)\r\n })\r\n }\r\n }, [evmStatus, isFetched])\r\n\r\n const renderAnimation = () => {\r\n if (timeOut || receiptStatus === 'failed') {\r\n return <Failure />\r\n }\r\n if (!!toTxHash) {\r\n return <Success />\r\n }\r\n\r\n return <Wheel />\r\n }\r\n\r\n const renderFromTxHash = () => {\r\n // Solana transaction link\r\n if (isSolanaTransaction && solanaFromTxHash) {\r\n // console.log('renderFromTxHash - Solana:', {\r\n // isSolanaTransaction,\r\n // solanaFromTxHash,\r\n // solanaStatus,\r\n // receiptStatus\r\n // })\r\n\r\n if (solanaStatus === 'confirmed') {\r\n // console.log('✅ Rendering Solana transaction hash link')\r\n return (\r\n <Link href={getSolanaTxLink(solanaFromTxHash)} target=\"_blank\">\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(solanaFromTxHash)}{' '}\r\n <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n )\r\n }\r\n if (solanaStatus === 'failed') {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ff4267'}\r\n >\r\n Failed\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#0890FE'}\r\n >\r\n • Depositing...\r\n </Text>\r\n )\r\n }\r\n\r\n // EVM transaction link\r\n if (fromTxHash && receiptStatus === 'success') {\r\n return (\r\n <Link\r\n href={getTxLink(fromTxHash, fromTokenInfo.chain_id)}\r\n target=\"_blank\"\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(fromTxHash)} <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n )\r\n }\r\n if ((fromTxHash && receiptStatus === 'failed') || isFetched) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ff4267'}\r\n >\r\n Failed\r\n </Text>\r\n )\r\n }\r\n if (isTransactionBlocked) {\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#ffd200'}\r\n >\r\n Pending\r\n </Text>\r\n )\r\n }\r\n return (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'#0890FE'}\r\n >\r\n • Depositing...\r\n </Text>\r\n )\r\n }\r\n\r\n const buttonDoingAndFinishText = useMemo(() => {\r\n const isCompleted = !!toTxHash\r\n if (routerType) {\r\n if (routerType === 'wrap') {\r\n return !isCompleted ? 'Wrapping' : 'Wrap'\r\n } else if (routerType === 'unwrap') {\r\n return !isCompleted ? 'Unwrapping' : 'Unwrap'\r\n } else if (routerType === 'swap') {\r\n return !isCompleted ? 'Swapping' : 'Swap'\r\n } else {\r\n return !isCompleted ? 'Bridging' : 'Bridge'\r\n }\r\n } else {\r\n return 'Error'\r\n }\r\n }, [routerType, toTxHash])\r\n\r\n const renderButton = () => {\r\n const isCompleted = !!toTxHash\r\n const isDisabled = !isCompleted\r\n\r\n let buttonContent\r\n if (isCompleted) {\r\n buttonContent = (\r\n <HStack gap={1}>\r\n <Icon\r\n boxSize={{\r\n base: '16px',\r\n md: '24px'\r\n }}\r\n as={PlusIcon}\r\n />\r\n New {buttonDoingAndFinishText}\r\n </HStack>\r\n )\r\n } else {\r\n buttonContent = <>{buttonDoingAndFinishText}</>\r\n }\r\n\r\n if (isTransactionBlocked) {\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n fontSize={'12px'}\r\n fontWeight={'400'}\r\n >\r\n {'This transaction is stuck on the source network'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n if (timeOut && !isTransactionBlocked) {\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {'Try Again'}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n return (\r\n <Button\r\n w={'100%'}\r\n h={{\r\n base: '40px',\r\n md: '56px'\r\n }}\r\n disabled={isDisabled}\r\n colorPalette={'wheel'}\r\n onClick={onBack}\r\n borderRadius={'12px'}\r\n loading={!isCompleted}\r\n loadingText={\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {buttonContent}\r\n </Heading>\r\n }\r\n >\r\n <Heading\r\n variant={{\r\n base: 'heading11',\r\n md: 'heading9'\r\n }}\r\n >\r\n {buttonContent}\r\n </Heading>\r\n </Button>\r\n )\r\n }\r\n\r\n const renderSoneium = () => {\r\n if (\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id !== 1868) ||\r\n (fromTokenInfo.chain_id === 1868 && toTokenInfo.chain_id === 1868)\r\n ) {\r\n return (\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Image\r\n src={'https://wheelx.fi/images/badge5.png'}\r\n alt={'badge'}\r\n width={['14px', '14px']}\r\n ></Image>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Soneium Score\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n + 1\r\n </Text>\r\n </HStack>\r\n )\r\n }\r\n return <></>\r\n }\r\n\r\n return (\r\n <>\r\n <VStack\r\n gap={{\r\n base: 2,\r\n md: 4\r\n }}\r\n w={'100%'}\r\n >\r\n <Icon\r\n pos={'absolute'}\r\n top={4}\r\n left={4}\r\n onClick={onBack}\r\n cursor={'pointer'}\r\n as={BackIcon}\r\n boxSize={{\r\n base: '24px',\r\n md: '40px'\r\n }}\r\n color={theme.weakTextColor}\r\n />\r\n {renderAnimation()}\r\n <BoxWithBg\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '10px',\r\n md: '16px'\r\n }}\r\n w={'100%'}\r\n backgroundColor={theme.assistBgColor}\r\n >\r\n <HStack w={'100%'} justify={'space-between'} gap={1}>\r\n <BoxWithBg\r\n bg={theme.defaultBgColor}\r\n borderRadius={'12px'}\r\n px={{\r\n base: 1,\r\n md: 2\r\n }}\r\n py={2}\r\n flex={1}\r\n >\r\n <HStack gap={1}>\r\n <TokenIconWithNetworkLogo tokenInfo={fromTokenInfo} />\r\n <VStack gap={1} align={'start'} flex={1} whiteSpace={'nowrap'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(fromAmount).shl(\r\n fromTokenInfo.decimals\r\n )}\r\n decimals={fromTokenInfo.decimals}\r\n variant={{\r\n base: 'heading12',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n suffix={fromTokenInfo.symbol}\r\n lineClamp={1}\r\n />\r\n {renderFromTxHash()}\r\n </VStack>\r\n </HStack>\r\n </BoxWithBg>\r\n <Icon\r\n boxSize={{\r\n base: '20px',\r\n md: '32px'\r\n }}\r\n color={theme.weakTextColor}\r\n as={ArrowRightIcon}\r\n />\r\n <BoxWithBg\r\n bg={theme.defaultBgColor}\r\n borderRadius={'12px'}\r\n px={{\r\n base: 1,\r\n md: 2\r\n }}\r\n py={2}\r\n flex={1}\r\n >\r\n <HStack gap={1}>\r\n <TokenIconWithNetworkLogo\r\n tokenInfo={toTokenInfo}\r\n customChainLogo={toChainInfo?.chain_icon}\r\n />\r\n <VStack gap={1} align={'start'} flex={1} whiteSpace={'nowrap'}>\r\n <TokenAmountHeading\r\n amount={new Fraction(toAmount).shl(toTokenInfo.decimals)}\r\n decimals={toTokenInfo.decimals}\r\n variant={{\r\n base: 'heading12',\r\n md: 'heading10'\r\n }}\r\n color={theme.defaultTextColor}\r\n suffix={toTokenInfo.symbol}\r\n lineClamp={1}\r\n />\r\n {isSameChainSwap ? (\r\n <>{renderFromTxHash()}</>\r\n ) : (\r\n <>\r\n {toTxHash ? (\r\n <Link\r\n href={getTxLink(\r\n toTxHash,\r\n toTokenInfo.chain_id === hyperliquidChainId\r\n ? 999\r\n : toTokenInfo.chain_id\r\n )}\r\n target=\"_blank\"\r\n >\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={theme.highlightTextColor}\r\n >\r\n • {sliceAddress(toTxHash)}{' '}\r\n <Icon boxSize={'14px'} as={LinkIcon} />\r\n </Text>\r\n </Link>\r\n ) : (\r\n <Text\r\n variant={{\r\n base: 'content9',\r\n md: 'content8'\r\n }}\r\n color={'state-warning'}\r\n >\r\n • Receiving...\r\n </Text>\r\n )}\r\n </>\r\n )}\r\n </VStack>\r\n </HStack>\r\n </BoxWithBg>\r\n </HStack>\r\n </BoxWithBg>\r\n\r\n <BoxWithBg\r\n p={{\r\n base: 2,\r\n md: 3\r\n }}\r\n borderRadius={{\r\n base: '12px',\r\n md: '16px'\r\n }}\r\n backgroundColor={theme.assistBgColor}\r\n >\r\n <VStack w={'100%'} fontSize={'xs'} gap={3}>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={DateIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Date\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n >\r\n {now}\r\n </Text>\r\n </HStack>\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={TimeIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Transfer Time\r\n </Text>\r\n </HStack>\r\n <Timer\r\n stop={isSameChainSwapSuccess || !!toTxHash || timeOut}\r\n onTick={handleTimerTick}\r\n />\r\n </HStack>\r\n\r\n <HStack w={'100%'} justify={'space-between'}>\r\n <HStack gap={1}>\r\n <Icon as={MoneyIcon} />\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.weakTextColor}\r\n >\r\n Recipient\r\n </Text>\r\n </HStack>\r\n <Text\r\n variant={{\r\n base: 'content8',\r\n md: 'content7'\r\n }}\r\n color={theme.defaultTextColor}\r\n title={`${differentAddress}`}\r\n >\r\n {sliceAddress(differentAddress ? differentAddress : address)}\r\n </Text>\r\n </HStack>\r\n {renderSoneium()}\r\n </VStack>\r\n </BoxWithBg>\r\n {renderButton()}\r\n </VStack>\r\n </>\r\n )\r\n}\r\n","'use client'\r\nimport type { WidgetConfig } from '../types'\r\nexport type WheelXWidgetProps = { config?: WidgetConfig }\r\nexport type { TxInfoProps, routesItem } from './TxInfo'\r\nexport type { RefetchQuoteParams } from './FormTop'\r\nimport { VStack, Image, Box } from '@chakra-ui/react'\r\n\r\nimport { FormBody } from './FormBody'\r\nimport { FormTop } from './FormTop'\r\nimport {\r\n useInitSwapAndBridgeState,\r\n useResetSwapAndBridgeState,\r\n useSwapAndBridgeContextStore,\r\n useTxStateContextStore\r\n} from './hooks'\r\nimport { TxState } from './TxState'\r\nimport { QuoteRequest, useGetQuote } from '../api'\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\r\nimport { Fraction } from 'bi-fraction'\r\nimport { formatTokenAmount, slippageStore, isApproveValid } from '../utils'\r\nimport {\r\n createTraceId,\r\n // maskAddress,\r\n resolveQuoteErrorMeta,\r\n trackQuoteError,\r\n trackQuoteRequest,\r\n trackQuoteSuccess\r\n} from '../utils/quoteAnalytics'\r\n\r\nimport { TxInfoProps, routesItem } from './TxInfo'\r\nimport { useEvmAddress } from '../utils/wallet'\r\nimport { parseUnits } from 'viem'\r\nimport {\r\n calculateSlippage,\r\n extractVPathSegment,\r\n nullAddress,\r\n matchSlippagePolicy,\r\n getDefaultSlippage,\r\n getRefreshInterval,\r\n getStablecoinAdjustment,\r\n isETHtoETHBridge,\r\n ETH_TO_ETH_BRIDGE_SLIPPAGE,\r\n ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL\r\n} from './utils'\r\nimport type { FeeLevel } from '../api/useChainsAndTokens'\r\nimport { RefetchQuoteParams } from './FormTop'\r\nimport { useRefreshLoading } from './hooks/useRefreshLoading'\r\n\r\nimport { useDifferentAddressStore } from '../stores/differentAddress'\r\nimport { useChainsStore } from './hooks'\r\nimport { useWalletConnectedStore } from '../stores/walletStore'\r\nimport { useWidgetTheme } from '../theme/ThemeProvider'\r\n\r\n\r\nimport { Text } from './ui'\r\nexport interface QuoteInfo {\r\n isFetching: boolean\r\n error: string | null\r\n data: `0x${string}` | null\r\n contractAddress: `0x${string}` | null\r\n info: TxInfoProps | null\r\n request_id?: string | null\r\n gas?: bigint | null\r\n maxFeePerGas?: bigint | undefined\r\n maxPriorityFeePerGas?: bigint | undefined\r\n backApprove?: boolean\r\n router_type?: string | null\r\n tx_value?: string | null\r\n points?: number | 0 | string\r\n quote_message?: string | null\r\n routes?: routesItem[]\r\n solanaTxMessage?: string\r\n solanaTxSender?: string\r\n}\r\n\r\nexport interface QuoteRequestWithToTokenDecimals extends QuoteRequest {\r\n toTokenDecimals: number\r\n isAutoRefetch?: boolean\r\n affiliation?: string | null\r\n}\r\n\r\nexport const initialQuoteInfo: QuoteInfo = {\r\n isFetching: false,\r\n error: null,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null,\r\n backApprove: false,\r\n router_type: null\r\n}\r\n\r\nexport const MainForm = ({ config }: WheelXWidgetProps) => {\r\n const { theme } = useWidgetTheme()\r\n const { fromTxHash, solanaFromTxHash } = useTxStateContextStore()\r\n useResetSwapAndBridgeState()\r\n useInitSwapAndBridgeState(config)\r\n\r\n const { startLoading } = useRefreshLoading()\r\n const {\r\n fromTokenInfo,\r\n toTokenInfo,\r\n fromAmount,\r\n setToAmount,\r\n setAutoSlippage,\r\n autoSlippage,\r\n slippage: customSlippage,\r\n resetAmounts\r\n } = useSwapAndBridgeContextStore()\r\n\r\n const { solanaWalletAddress } = useWalletConnectedStore()\r\n\r\n const [quoteInfo, setQuoteInfo] = useState<QuoteInfo>(initialQuoteInfo)\r\n const [lockedRequestId, setLockedRequestId] = useState<string | null>(null)\r\n // const [currentRequestId, setCurrentRequestId] = useState<string | null>(null)\r\n const address = useEvmAddress()\r\n // When wallet is connected, use stored slippage or fallback to autoSlippage\r\n // When wallet is not connected, use customSlippage from zustand store if set, otherwise use autoSlippage\r\n const slippage = address\r\n ? slippageStore.get(address)\r\n ? slippageStore.get(address)\r\n : autoSlippage\r\n : customSlippage !== undefined\r\n ? { value: customSlippage }\r\n : autoSlippage\r\n\r\n const abortControllerRef = useRef(new AbortController())\r\n const [abortSignal, setAbortSignal] = useState<AbortSignal | undefined>(undefined)\r\n\r\n useEffect(() => {\r\n setAbortSignal(abortControllerRef.current.signal)\r\n }, [])\r\n\r\n const { mutateAsync } = useGetQuote(abortSignal)\r\n\r\n const cancelMutation = () => {\r\n abortControllerRef.current.abort()\r\n abortControllerRef.current = new AbortController()\r\n setAbortSignal(abortControllerRef.current.signal)\r\n // setQuoteInfo(initialQuoteInfo)\r\n }\r\n const [routerType, setRouterType] = useState<string | undefined | null>(null)\r\n const [points, setPoints] = useState<number | 0 | string>(0)\r\n const [refreshInterval, setRefreshInterval] = useState<number>(30)\r\n const refreshIntervalRef = useRef<number>(30)\r\n const timerRef = useRef<NodeJS.Timeout | null>(null)\r\n const isQuoteStoppedRef = useRef(false)\r\n const { differentAddress } = useDifferentAddressStore()\r\n const { chains, slippagePolicies } = useChainsStore()\r\n const prevAddressRef = useRef<string | undefined>(address)\r\n const prevSolanaAddressRef = useRef<string | undefined>(solanaWalletAddress)\r\n const isWalletChangingRef = useRef(false)\r\n\r\n const fromAddress = useMemo(() => {\r\n if (fromTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return address || ''\r\n }, [fromTokenInfo.isSolana, solanaWalletAddress, address])\r\n\r\n const toAddress = useMemo(() => {\r\n if (toTokenInfo.isSolana) {\r\n return solanaWalletAddress || ''\r\n }\r\n return differentAddress || address || ''\r\n }, [toTokenInfo.isSolana, solanaWalletAddress, differentAddress, address])\r\n\r\n useEffect(() => {\r\n if (\r\n timerRef.current &&\r\n (new Fraction(fromAmount).eq(0) || fromTxHash || solanaFromTxHash || address)\r\n ) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n return () => {\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n }\r\n }, [fromAmount, fromTxHash, solanaFromTxHash, address])\r\n\r\n const clearLockedRequestId = () => {\r\n setLockedRequestId(null)\r\n }\r\n\r\n // Clear amounts and request_id when wallet address changes\r\n useEffect(() => {\r\n const prevAddress = prevAddressRef.current\r\n const prevSolanaAddress = prevSolanaAddressRef.current\r\n\r\n // Only clear if address actually changed (not on initial mount)\r\n if (\r\n (prevAddress !== undefined || prevSolanaAddress !== undefined) &&\r\n (address !== prevAddress || solanaWalletAddress !== prevSolanaAddress)\r\n ) {\r\n // Mark that wallet is changing to prevent getQuote from being called\r\n isWalletChangingRef.current = true\r\n\r\n // Cancel any ongoing quote requests\r\n cancelMutation()\r\n\r\n // Stop auto polling timer\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n\r\n // Clear amounts and request_id\r\n resetAmounts()\r\n clearLockedRequestId()\r\n\r\n // Reset quote info\r\n setQuoteInfo(initialQuoteInfo)\r\n }\r\n\r\n // Update refs for next comparison\r\n prevAddressRef.current = address\r\n prevSolanaAddressRef.current = solanaWalletAddress\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [address, solanaWalletAddress])\r\n\r\n const stopAutoRefetch = useCallback(() => {\r\n isQuoteStoppedRef.current = true\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n }, [])\r\n\r\n const lockRequestId = useCallback(() => {\r\n const currentRequestId = quoteInfo.request_id\r\n if (currentRequestId) {\r\n setLockedRequestId(currentRequestId)\r\n }\r\n }, [quoteInfo.request_id])\r\n\r\n // const getEffectiveRequestId = useCallback(() => {\r\n // return lockedRequestId || quoteInfo.request_id\r\n // }, [lockedRequestId, quoteInfo.request_id])\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const getQuoteRef = useRef<(...args: any[]) => Promise<any>>(null)\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const getQuote = useCallback<(params: QuoteRequestWithToTokenDecimals) => Promise<any>>(\r\n async ({\r\n toTokenDecimals,\r\n isAutoRefetch,\r\n ...params\r\n }) => {\r\n // For user-initiated requests (not auto-refetch), reset the wallet changing flag\r\n if (!isAutoRefetch) {\r\n isWalletChangingRef.current = false\r\n } else {\r\n // For auto-refetch, check if wallet is changing\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n }\r\n\r\n // TypeScript limitation with rest spread in intersection types\r\n const p = params as unknown as QuoteRequest & { affiliation?: string | null }\r\n const isAutoRefetchRequest = Boolean(isAutoRefetch)\r\n const traceId = createTraceId()\r\n const requestStartedAt = Date.now()\r\n\r\n try {\r\n if (!isAutoRefetch) {\r\n cancelMutation()\r\n }\r\n if (!parseFloat(p.amount)) return\r\n\r\n trackQuoteRequest({\r\n trace_id: traceId,\r\n from_chain: p.from_chain,\r\n to_chain: p.to_chain,\r\n from_token: `address:${String(p.from_token).toLowerCase()}`,\r\n to_token: `address:${String(p.to_token).toLowerCase()}`,\r\n from_address: `address:${String(p.from_address).toLowerCase()}`,\r\n to_address: `address:${String(p.to_address).toLowerCase()}`,\r\n amount: `amount:${String(p.amount)}`,\r\n slippage: p.slippage ?? 0,\r\n to_platform_id: p.to_platform_id,\r\n quote_only: true,\r\n affiliation: p.affiliation || '',\r\n is_auto_refetch: isAutoRefetchRequest\r\n })\r\n\r\n setQuoteInfo((prevQuoteInfo) => ({\r\n ...prevQuoteInfo,\r\n isFetching: true\r\n }))\r\n if (timerRef.current) {\r\n clearTimeout(timerRef.current)\r\n timerRef.current = null\r\n }\r\n // Reset quote stop flag on manual refetch (non-auto), so polling can resume\r\n if (!isAutoRefetchRequest) {\r\n isQuoteStoppedRef.current = false\r\n }\r\n\r\n const res = await mutateAsync({ ...p })\r\n // Check if wallet changed during the request\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (res) {\r\n const latencyMs = Date.now() - requestStartedAt\r\n const routeNames = Array.isArray(res.routes)\r\n ? res.routes.map((route: { name: string }) => route.name).join('|')\r\n : ''\r\n\r\n trackQuoteSuccess({\r\n trace_id: traceId,\r\n request_id: res.request_id || '',\r\n amount_out: `amount:${String(res.amount_out || '')}`,\r\n fee: res.fee || '',\r\n slippage: res.slippage ?? 0,\r\n min_receive: res.min_receive || '',\r\n estimated_time: res.estimated_time ?? 0,\r\n router_type: res.router_type || '',\r\n router: res.router || '',\r\n points: Number(res.points || 0),\r\n tx_to: res.tx?.to || '',\r\n tx_value: res.tx?.value || '',\r\n tx_chain_id: res.tx?.chainId || 0,\r\n tx_gas: Number(res.tx?.gas || 0),\r\n approve_token: res.approve?.token || '',\r\n approve_spender: res.approve?.spender || '',\r\n approve_amount: String(res.approve?.amount ?? ''),\r\n recipient: res.recipient || '',\r\n route_names: routeNames,\r\n route_count: Array.isArray(res.routes) ? res.routes.length : 0,\r\n price_impact_bridge_fee: res.price_impact?.bridge_fee || '',\r\n price_impact_swap_fee: res.price_impact?.swap_fee || '',\r\n price_impact_dst_gas_fee: res.price_impact?.dst_gas_fee || '',\r\n latency_ms: latencyMs,\r\n is_auto_refetch: isAutoRefetchRequest,\r\n amount: `amount:${String(p.amount)}`\r\n })\r\n\r\n const toAmount = formatTokenAmount({\r\n amount: new Fraction(res.amount_out),\r\n decimals: toTokenDecimals,\r\n useGroupSeparator: false\r\n })\r\n const contractAddress = res.tx?.to || null\r\n const data = res.tx?.data || null\r\n setToAmount(toAmount)\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: null,\r\n data,\r\n contractAddress,\r\n request_id: res.request_id,\r\n gas: res.tx?.gas || null,\r\n maxFeePerGas: res.tx?.maxFeePerGas || undefined,\r\n maxPriorityFeePerGas: res.tx?.maxFeePerGas || undefined,\r\n tx_value: res.tx?.value || null,\r\n router_type: res.router_type,\r\n routes: res.routes,\r\n solanaTxMessage: res.tx?.tx,\r\n solanaTxSender: res.tx?.sender,\r\n quote_message: res.quote_message,\r\n backApprove: isApproveValid(res.approve || null),\r\n info: {\r\n priceImpact: {\r\n bridgeFee: res.price_impact.bridge_fee,\r\n dstGasFee: res.price_impact.dst_gas_fee,\r\n swapFee: res.price_impact.swap_fee,\r\n before_discount_fee: res.price_impact.before_discount_fee,\r\n discount_percentage: res.price_impact.discount_percentage\r\n },\r\n points: res.points,\r\n slippage: res.slippage,\r\n minReceive: res.min_receive,\r\n estimatedTime: res.estimated_time,\r\n recipient: res.recipient,\r\n router: res.router,\r\n amountOut: res.amount_out,\r\n router_type: res.router_type\r\n }\r\n })\r\n setRouterType(res.router_type)\r\n setPoints(res.points)\r\n // Check again before starting polling\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (p.from_address !== nullAddress && !isQuoteStoppedRef.current) {\r\n timerRef.current = setTimeout(async () => {\r\n // Check if wallet changed before auto-refetch\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n await getQuoteRef.current!({\r\n ...p,\r\n toTokenDecimals,\r\n isAutoRefetch: true\r\n })\r\n }, refreshIntervalRef.current * 1000)\r\n }\r\n }\r\n } catch (error) {\r\n const { errorMessage, errorType, hasResponseBody, httpStatus } =\r\n resolveQuoteErrorMeta(error)\r\n\r\n const isBusinessError =\r\n errorType === 'business_error' ||\r\n errorMessage === 'No available router' ||\r\n errorMessage.includes('No available') ||\r\n errorMessage.includes('not available') ||\r\n errorMessage.includes('insufficient') ||\r\n errorMessage.includes('Invalid')\r\n\r\n trackQuoteError({\r\n trace_id: traceId,\r\n error_type: isBusinessError ? 'business_error' : errorType,\r\n http_status: httpStatus,\r\n error_message: errorMessage,\r\n has_response_body: hasResponseBody,\r\n latency_ms: Date.now() - requestStartedAt,\r\n is_auto_refetch: isAutoRefetchRequest,\r\n from_chain: p.from_chain,\r\n to_chain: p.to_chain,\r\n from_token: `address:${String(p.from_token).toLowerCase()}`,\r\n to_token: `address:${String(p.to_token).toLowerCase()}`,\r\n from_address: `address:${String(p.from_address).toLowerCase()}`,\r\n to_address: `address:${String(p.to_address).toLowerCase()}`,\r\n amount: `amount:${String(p.amount)}`\r\n })\r\n\r\n if (isBusinessError) {\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: null,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null,\r\n quote_message: errorMessage\r\n })\r\n } else {\r\n // Check if wallet changed before starting error polling\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n if (p.from_address !== nullAddress && !isQuoteStoppedRef.current) {\r\n setQuoteInfo((prev) => ({\r\n ...prev,\r\n isFetching: true,\r\n error: null,\r\n quote_message: null\r\n }))\r\n timerRef.current = setTimeout(async () => {\r\n // Check if wallet changed before auto-refetch\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n await getQuoteRef.current!({\r\n ...p,\r\n toTokenDecimals,\r\n isAutoRefetch: true\r\n })\r\n }, refreshIntervalRef.current * 1000)\r\n } else {\r\n setQuoteInfo({\r\n isFetching: false,\r\n error: errorMessage,\r\n data: null,\r\n contractAddress: null,\r\n info: null,\r\n request_id: null\r\n })\r\n }\r\n }\r\n }\r\n },\r\n [mutateAsync, setToAmount, startLoading]\r\n )\r\n\r\n useEffect(() => {\r\n getQuoteRef.current = getQuote\r\n }, [getQuote])\r\n\r\n const refetchQuote = useCallback(\r\n async ({ slippageValue, isAutoSlippage }: RefetchQuoteParams = {}) => {\r\n // Check if wallet is changing\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n startLoading()\r\n if (!fromAmount) return\r\n const vCode = extractVPathSegment()\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress || nullAddress,\r\n to_address: toAddress || nullAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n affiliation: vCode,\r\n slippage: isAutoSlippage\r\n ? slippageValue && slippageValue !== '0'\r\n ? calculateSlippage(slippageValue)\r\n : slippageValue === '0'\r\n ? 0\r\n : undefined\r\n : calculateSlippage(slippageValue || slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n },\r\n [\r\n startLoading,\r\n fromAmount,\r\n fromAddress,\r\n getQuote,\r\n fromTokenInfo.chain_id,\r\n fromTokenInfo.address,\r\n fromTokenInfo.decimals,\r\n toTokenInfo.chain_id,\r\n toTokenInfo.address,\r\n toTokenInfo.decimals,\r\n toTokenInfo.platform_id,\r\n toAddress,\r\n slippage?.value\r\n ]\r\n )\r\n\r\n // useEffect(() => {\r\n // if (fromTokenInfo && toTokenInfo) {\r\n // if (fromTokenInfo.chain_id === toTokenInfo.chain_id) {\r\n // setAutoSlippage(swapAutoSlippage)\r\n // } else {\r\n // const fromChainInfo = chains?.find(\r\n // (chain) => chain.chain_id === fromTokenInfo.chain_id\r\n // )\r\n // const toChainInfo = chains?.find(\r\n // (chain) => chain.chain_id === toTokenInfo.chain_id\r\n // )\r\n // const from_eth = fromTokenInfo.address == fromChainInfo?.eth_token\r\n // const to_eth = toTokenInfo.address == toChainInfo?.eth_token\r\n // if (from_eth && to_eth) {\r\n // setAutoSlippage(bridgeAutoSlippage)\r\n // } else {\r\n // setAutoSlippage(crossChainSwapAutoSlippage)\r\n // }\r\n // }\r\n // }\r\n // }, [fromTokenInfo, toTokenInfo, chains, setAutoSlippage])\r\n\r\n // Sync refreshInterval ref so getQuote always uses the latest value\r\n useEffect(() => {\r\n refreshIntervalRef.current = refreshInterval\r\n }, [refreshInterval])\r\n\r\n useEffect(() => {\r\n if (fromTokenInfo && toTokenInfo) {\r\n const isSameChain = fromTokenInfo.chain_id === toTokenInfo.chain_id\r\n const isBridge = !isSameChain\r\n\r\n let newSlippage: number\r\n let newRefreshInterval: number\r\n\r\n // ① Highest priority: ETH-to-ETH cross-chain bridge\r\n if (isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains)) {\r\n newSlippage = ETH_TO_ETH_BRIDGE_SLIPPAGE\r\n newRefreshInterval = ETH_TO_ETH_BRIDGE_REFRESH_INTERVAL\r\n }\r\n // ② Stablecoin pair\r\n else if (getStablecoinAdjustment(fromTokenInfo, toTokenInfo, isBridge)) {\r\n const stableAdjustment = getStablecoinAdjustment(\r\n fromTokenInfo,\r\n toTokenInfo,\r\n isBridge\r\n )!\r\n newSlippage = stableAdjustment.slippage\r\n newRefreshInterval = stableAdjustment.refreshInterval\r\n }\r\n // ③ fee_level policy matching\r\n else {\r\n const fromFeeLevel: FeeLevel =\r\n (fromTokenInfo.fee_level as FeeLevel) ?? null\r\n const toFeeLevel: FeeLevel =\r\n (toTokenInfo.fee_level as FeeLevel) ?? null\r\n\r\n const matchedPolicy = matchSlippagePolicy(\r\n slippagePolicies,\r\n isBridge,\r\n fromFeeLevel,\r\n toFeeLevel\r\n )\r\n\r\n newSlippage = getDefaultSlippage(\r\n matchedPolicy,\r\n isBridge,\r\n isSameChain\r\n )\r\n\r\n newRefreshInterval = getRefreshInterval(matchedPolicy)\r\n }\r\n\r\n // Only update when slippage value actually changes\r\n if (autoSlippage !== newSlippage) {\r\n setAutoSlippage(newSlippage)\r\n }\r\n\r\n // Update refresh interval when it changes\r\n if (refreshInterval !== newRefreshInterval) {\r\n setRefreshInterval(newRefreshInterval)\r\n }\r\n }\r\n }, [\r\n fromTokenInfo,\r\n toTokenInfo,\r\n slippagePolicies,\r\n chains,\r\n setAutoSlippage,\r\n autoSlippage,\r\n refreshInterval\r\n ])\r\n\r\n useEffect(() => {\r\n async function _getQuote() {\r\n if (!fromAddress || !fromAmount) return\r\n const vCode = extractVPathSegment()\r\n await getQuote({\r\n from_chain: fromTokenInfo.chain_id,\r\n to_chain: toTokenInfo.chain_id,\r\n from_token: fromTokenInfo.address,\r\n to_token: toTokenInfo.address,\r\n from_address: fromAddress,\r\n to_address: toAddress,\r\n amount: parseUnits(fromAmount, fromTokenInfo.decimals).toString(),\r\n slippage: calculateSlippage(slippage?.value),\r\n toTokenDecimals: toTokenInfo.decimals,\r\n affiliation: vCode,\r\n to_platform_id: toTokenInfo.platform_id || 0\r\n })\r\n }\r\n\r\n // Skip getQuote if wallet is changing (amounts were just cleared)\r\n if (isWalletChangingRef.current) {\r\n return\r\n }\r\n\r\n if (fromAddress && fromAmount) {\r\n _getQuote()\r\n }\r\n // do not pass fromAmount to deps, it will call getQuote every time fromAmount changes, which is not what we want\r\n // only call getQuote when address changes\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [fromAddress, toAddress])\r\n\r\n\r\n\r\n const renderContent = () => {\r\n if (fromTxHash || solanaFromTxHash) {\r\n return (\r\n <>\r\n <TxState\r\n resetQuoteInfo={() => setQuoteInfo(initialQuoteInfo)}\r\n request_id={lockedRequestId || quoteInfo?.request_id || ''}\r\n routerType={routerType}\r\n points={points}\r\n clearLockedRequestId={clearLockedRequestId}\r\n />\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <FormTop\r\n refetchQuote={refetchQuote}\r\n quoteInfo={quoteInfo}\r\n clearLockedRequestId={clearLockedRequestId}\r\n refreshInterval={refreshInterval}\r\n hideCountdown={isETHtoETHBridge(fromTokenInfo, toTokenInfo, chains)}\r\n />\r\n <FormBody\r\n getQuote={getQuote}\r\n quoteInfo={quoteInfo}\r\n setQuoteInfo={setQuoteInfo}\r\n stopAutoRefetch={stopAutoRefetch}\r\n lockRequestId={lockRequestId}\r\n clearLockedRequestId={clearLockedRequestId}\r\n lockedRequestId={lockedRequestId}\r\n refetchQuote={refetchQuote}\r\n config={config}\r\n />\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n <VStack\r\n w={'100%'}\r\n flexDirection={['column-reverse', 'column-reverse', 'row']}\r\n alignItems={['center', 'center', 'flex-start']}\r\n justifyContent={['center', 'center', 'center']}\r\n paddingTop={['0', '0', '0px']}\r\n >\r\n {/* KLine removed */}\r\n {/* Trending removed */}\r\n <Box w={['100%', 'auto']}>\r\n <VStack\r\n pos={'relative'}\r\n bg={theme.defaultBgColor|| 'white'}\r\n // boxShadow={'0px 12px 36px 0px #007B9D59'}\r\n border={`1px solid ${theme.defaultBorderColor}`}\r\n px={{\r\n base: 2.5,\r\n md: 4\r\n }}\r\n py={{\r\n base: 4\r\n }}\r\n borderRadius={{\r\n base: '16px',\r\n md: '24px'\r\n }}\r\n w={{\r\n base: '100%',\r\n sm: '430px',\r\n md: '480px'\r\n }}\r\n align={'start'}\r\n gap={4}\r\n id={'js_main_form'}\r\n >\r\n {renderContent()}\r\n {/* preload images */}\r\n <Image\r\n display={'none'}\r\n src={'https://wheelx.fi/images/wheel-sprites.png'}\r\n alt=\"wheel\"\r\n />\r\n <Image\r\n display={'none'}\r\n src={'https://wheelx.fi/images/success-sprites.png'}\r\n alt=\"success\"\r\n />\r\n </VStack>\r\n <Box\r\n marginTop={'20px'}\r\n w={{\r\n base: '100%',\r\n sm: '430px',\r\n md: '480px'\r\n }}\r\n >\r\n {/* Banner removed */}\r\n </Box>\r\n <Box marginTop={'30px'} fontSize={'14px'}>\r\n <a\r\n href={\r\n 'https://github.com/wheelx-fi/wheelx-contracts/blob/main/audits/ABDK_WheelX_WheelXContracts_v_1_0.pdf'\r\n }\r\n target=\"_blank\"\r\n >\r\n <Text\r\n color={'#5D6270'}\r\n display={'flex'}\r\n alignItems={'center'}\r\n justifyContent={'center'}\r\n >\r\n Audited By{' '}\r\n <Image\r\n display={'block'}\r\n width={'70px'}\r\n height={'28px'}\r\n marginLeft={'2px'}\r\n objectFit={'contain'}\r\n src={'https://wheelx.fi/images/adbk.png'}\r\n alt=\"\"\r\n ></Image>\r\n </Text>\r\n </a>\r\n </Box>\r\n </Box>\r\n </VStack>\r\n <Image\r\n display={'none'}\r\n src=\"https://wheelx.fi/images/ai_bot.gif?max_age=14400\"\r\n alt={'ai_bot'}\r\n w={'26px'}\r\n h={'26px'}\r\n ></Image>\r\n </>\r\n )\r\n}\r\n\r\nexport const WheelXWidget = MainForm\r\n"]}
|