{"version":3,"file":"index.mjs","names":[],"sources":["../../src/dynamic/index.ts"],"sourcesContent":["'use client';\n\nimport type { ReactNode } from 'react';\nimport type {\n  BridgeSlug,\n  ChainId,\n  ChainSlug,\n  DefiSlug,\n  DexSlug,\n  ExchangeSlug,\n  OracleSlug,\n  Ticker,\n  WalletSlug,\n} from '../meta';\nimport type { IconProps } from '../utils';\nimport { createDynamicIcon } from './DynamicIcon';\nimport { bridgeImports } from './imports/bridge';\nimport { chainImports } from './imports/chain';\nimport { coinImports } from './imports/coin';\nimport { defiImports } from './imports/defi';\nimport { dexImports } from './imports/dex';\nimport { exchangeImports } from './imports/exchange';\nimport { oracleImports } from './imports/oracle';\nimport { walletImports } from './imports/wallet';\nimport {\n  resolveBridgeExportName,\n  resolveChainExportName,\n  resolveCoinExportName,\n  resolveDefiExportName,\n  resolveDexExportName,\n  resolveExchangeExportName,\n  resolveOracleExportName,\n  resolveWalletExportName,\n} from './resolve';\n\ntype Variant = 'colored' | 'mono';\n\ninterface DynamicIconBase extends Omit<IconProps, 'ref'> {\n  /** Icon variant. Defaults to `'colored'`. */\n  variant?: Variant;\n  /** Rendered while loading or when the identifier is not recognized. */\n  fallback?: ReactNode;\n}\n\nexport interface ChainIconProps extends DynamicIconBase {\n  /** Chain slug, case-insensitive (e.g. `'ethereum'`, `'arbitrum'`). */\n  name?: ChainSlug | (string & {});\n  /** EVM chain ID (e.g. `1`, `8453`). Takes precedence over `name`. */\n  chainId?: ChainId | (number & {});\n}\n\nexport interface CoinIconProps extends DynamicIconBase {\n  /** Ticker symbol, case-insensitive (e.g. `'ETH'`, `'btc'`). */\n  symbol: Ticker | (string & {});\n}\n\nexport interface WalletIconProps extends DynamicIconBase {\n  /** Wallet name, case-insensitive (e.g. `'metamask'`, `'rabby'`). */\n  name: WalletSlug | (string & {});\n}\n\nexport interface ExchangeIconProps extends DynamicIconBase {\n  /** Exchange name, case-insensitive (e.g. `'binance'`, `'coinbase'`). */\n  name: ExchangeSlug | (string & {});\n}\n\nexport interface DefiIconProps extends DynamicIconBase {\n  /** DeFi protocol name, case-insensitive (e.g. `'aave'`, `'lido'`). */\n  name: DefiSlug | (string & {});\n}\n\nexport interface DexIconProps extends DynamicIconBase {\n  /** DEX name, case-insensitive (e.g. `'uniswap'`, `'sushiswap'`). */\n  name: DexSlug | (string & {});\n}\n\nexport interface BridgeIconProps extends DynamicIconBase {\n  /** Bridge name, case-insensitive (e.g. `'layerzero'`, `'wormhole'`). */\n  name: BridgeSlug | (string & {});\n}\n\nexport interface OracleIconProps extends DynamicIconBase {\n  /** Oracle protocol name, case-insensitive (e.g. `'pyth'`, `'band'`). */\n  name: OracleSlug | (string & {});\n}\n\nconst CHAIN_STRIP = ['name', 'chainId', 'variant', 'fallback'] as const;\nconst NAME_STRIP = ['name', 'variant', 'fallback'] as const;\nconst SYMBOL_STRIP = ['symbol', 'variant', 'fallback'] as const;\n\n/** Lazily loads a chain icon by chain ID or slug. */\nexport const ChainIcon = createDynamicIcon<ChainIconProps>(\n  resolveChainExportName,\n  chainImports,\n  CHAIN_STRIP,\n);\n\n/** Lazily loads a coin icon by ticker symbol. */\nexport const CoinIcon = createDynamicIcon<CoinIconProps>(\n  resolveCoinExportName,\n  coinImports,\n  SYMBOL_STRIP,\n);\n\n/** Lazily loads a wallet icon by name. */\nexport const WalletIcon = createDynamicIcon<WalletIconProps>(\n  resolveWalletExportName,\n  walletImports,\n  NAME_STRIP,\n);\n\n/** Lazily loads an exchange icon by name. */\nexport const ExchangeIcon = createDynamicIcon<ExchangeIconProps>(\n  resolveExchangeExportName,\n  exchangeImports,\n  NAME_STRIP,\n);\n\n/** Lazily loads a DeFi protocol icon by name. */\nexport const DefiIcon = createDynamicIcon<DefiIconProps>(\n  resolveDefiExportName,\n  defiImports,\n  NAME_STRIP,\n);\n\n/** Lazily loads a DEX icon by name. */\nexport const DexIcon = createDynamicIcon<DexIconProps>(\n  resolveDexExportName,\n  dexImports,\n  NAME_STRIP,\n);\n\n/** Lazily loads a bridge icon by name. */\nexport const BridgeIcon = createDynamicIcon<BridgeIconProps>(\n  resolveBridgeExportName,\n  bridgeImports,\n  NAME_STRIP,\n);\n\n/** Lazily loads an oracle icon by name. */\nexport const OracleIcon = createDynamicIcon<OracleIconProps>(\n  resolveOracleExportName,\n  oracleImports,\n  NAME_STRIP,\n);\n"],"mappings":";;;;;;;;;;;;AAsFA,MAAM,cAAc;CAAC;CAAQ;CAAW;CAAW;AAAU;AAC7D,MAAM,aAAa;CAAC;CAAQ;CAAW;AAAU;AACjD,MAAM,eAAe;CAAC;CAAU;CAAW;AAAU;;AAGrD,MAAa,YAAY,kBACvB,wBACA,cACA,WACF;;AAGA,MAAa,WAAW,kBACtB,uBACA,aACA,YACF;;AAGA,MAAa,aAAa,kBACxB,yBACA,eACA,UACF;;AAGA,MAAa,eAAe,kBAC1B,2BACA,iBACA,UACF;;AAGA,MAAa,WAAW,kBACtB,uBACA,aACA,UACF;;AAGA,MAAa,UAAU,kBACrB,sBACA,YACA,UACF;;AAGA,MAAa,aAAa,kBACxB,yBACA,eACA,UACF;;AAGA,MAAa,aAAa,kBACxB,yBACA,eACA,UACF"}