{"version":3,"file":"erc20.cjs","sources":["../../../src/utils/erc20.tsx"],"sourcesContent":["import { getAddress, isAddress } from \"viem\";\nimport type { TokenInfoWithBalance } from \"../components/erc20-token-picker/types\";\n\nconst TRUST_WALLET_CHAIN: { [chainId: number]: string } = {\n    100: \"xdai\",\n    137: \"polygon\",\n    1: \"ethereum\",\n    42161: \"arbitrum\",\n};\n\nexport const getDefaultERC20TokenLogoURL = (\n    chainId?: number,\n    address?: string,\n): string | null => {\n    if (!chainId || !address || !isAddress(address)) return null;\n    const prefix = TRUST_WALLET_CHAIN[chainId];\n    if (!prefix) return null;\n    return `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/${prefix}/assets/${getAddress(\n        address,\n    )}/logo.png`;\n};\n\nexport const filterERC20Tokens = (\n    tokens: TokenInfoWithBalance[],\n    searchQuery?: string,\n): TokenInfoWithBalance[] => {\n    if (tokens.length === 0) return [];\n    if (!searchQuery) return tokens;\n    if (isAddress(searchQuery)) {\n        const lowerCaseDebouncedSearchQuery = searchQuery.toLowerCase();\n        const tokenByAddress = tokens.find(\n            (token) =>\n                token.address.toLowerCase() === lowerCaseDebouncedSearchQuery,\n        );\n        return !!tokenByAddress ? [tokenByAddress] : [];\n    }\n    const lowercaseSearchParts = searchQuery\n        .trim()\n        .toLowerCase()\n        .split(/\\s+/)\n        .filter((s) => s.length > 0);\n    if (lowercaseSearchParts.length === 0) return tokens;\n    return tokens.filter((token) => {\n        const { symbol, name } = token;\n        return (\n            (symbol && matchesSearch(symbol, lowercaseSearchParts)) ||\n            (name && matchesSearch(name, lowercaseSearchParts))\n        );\n    });\n};\n\nconst matchesSearch = (searched: string, parts: string[]): boolean => {\n    const searchedParts = searched\n        .toLowerCase()\n        .split(/\\s+/)\n        .filter((s) => s.length > 0);\n    return parts.every(\n        (part) =>\n            part.length === 0 ||\n            searchedParts.some((searchedPart) => searchedPart.includes(part)),\n    );\n};\n\nexport const sortERC20Tokens = (\n    tokens: TokenInfoWithBalance[],\n): TokenInfoWithBalance[] => {\n    return tokens.sort((a, b) => {\n        const balanceA = a.balance;\n        const balanceB = b.balance;\n\n        let result = 0;\n        if (balanceA && balanceB)\n            result = balanceA > balanceB ? -1 : balanceA === balanceB ? 0 : 1;\n        else if (balanceA && balanceA > 0n) result = -1;\n        else if (balanceB && balanceB > 0n) result = 1;\n        if (result !== 0) return result;\n\n        if (a.symbol && b.symbol)\n            return a.symbol.toLowerCase() < b.symbol.toLowerCase() ? -1 : 1;\n        else return a.symbol ? -1 : b.symbol ? -1 : 0;\n    });\n};\n\nexport const tokenInfoWithBalanceEquals = (\n    tokenA?: TokenInfoWithBalance | null,\n    tokenB?: TokenInfoWithBalance | null,\n): boolean => {\n    return !!(\n        tokenA &&\n        tokenB &&\n        tokenA.chainId === tokenB.chainId &&\n        tokenA.address.toLowerCase() === tokenB.address.toLowerCase()\n    );\n};\n"],"names":["isAddress","getAddress"],"mappings":"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"}