@compass-labs/widgets 0.1.3 → 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.d.mts +5 -17
- package/dist/index.d.ts +5 -17
- package/dist/index.js +90 -127
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -127
- 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/contexts/ApiContext.tsx","../src/contexts/ChainContext.tsx","../src/contexts/WalletContext.tsx","../src/contexts/EarnAccountContext.tsx","../src/theme/presets.ts","../src/theme/css-variables.ts","../src/theme/context.tsx","../src/provider/CompassProvider.tsx","../src/shared/ChainSwitcher.tsx","../src/shared/WalletStatus.tsx","../src/shared/ActionModal.tsx","../src/shared/PnLSummary.tsx","../src/utils/format.ts","../src/shared/TokenSelector.tsx","../src/shared/DepositWithdrawForm.tsx","../src/shared/TransactionHistory.tsx","../src/shared/EarnAccountGuard.tsx","../src/shared/AccountBalancesModal.tsx","../src/shared/EarnAccountBalance.tsx","../src/components/VaultsList/VaultCard.tsx","../src/components/VaultsList/useVaultsData.ts","../src/components/VaultsList/VaultsList.tsx","../src/components/AaveMarketsList/useAaveData.ts","../src/components/AaveMarketsList/AaveMarketsList.tsx","../src/components/PendleMarketsList/usePendleData.ts","../src/components/PendleMarketsList/PendleMarketsList.tsx","../src/components/SwapWidget/useSwapQuote.ts","../src/components/SwapWidget/SwapWidget.tsx","../src/components/CompassEarnWidget/CompassEarnWidget.tsx","../src/constants.ts"],"names":["createContext","useMemo","jsx","useContext","useState","base","useEffect","jsxs","formatUSD","ChevronDown","useQueryClient","useQuery","useCallback","Loader2","X","Wallet","Fragment","ArrowDownLeft","ArrowUpRight","formatAPY","formatTVL","Search","TrendingUp","SlidersHorizontal","AlertCircle","mainnet","arbitrum"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport { CompassApiSDK } from '@compass-labs/api-sdk';\n\n/**\n * Context value for the API context\n */\nexport interface ApiContextValue {\n /** The API key used to authenticate with Compass API */\n apiKey: string;\n /** The Compass API SDK client instance */\n client: CompassApiSDK;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\ninterface ApiProviderProps {\n children: ReactNode;\n apiKey: string;\n /** Optional API base URL override */\n serverURL?: string;\n}\n\n/**\n * Provider component that manages the Compass API client.\n */\nexport function ApiProvider({ children, apiKey, serverURL }: ApiProviderProps) {\n const client = useMemo(() => {\n return new CompassApiSDK({\n apiKeyAuth: apiKey,\n serverURL: serverURL || 'https://api.compasslabs.ai',\n });\n }, [apiKey, serverURL]);\n\n const value = useMemo<ApiContextValue>(\n () => ({\n apiKey,\n client,\n }),\n [apiKey, client]\n );\n\n return (\n <ApiContext.Provider value={value}>\n {children}\n </ApiContext.Provider>\n );\n}\n\n/**\n * Hook to access the Compass API client and API key.\n */\nexport function useCompassApi(): ApiContextValue {\n const context = useContext(ApiContext);\n if (!context) {\n throw new Error('useCompassApi must be used within a CompassProvider');\n }\n return context;\n}\n\n// Alias for compatibility with widgets_ui code\nexport const useEmbeddableApi = useCompassApi;\n\nexport { ApiContext };\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, useEffect, type ReactNode } from 'react';\nimport { mainnet, base, arbitrum, type Chain } from 'viem/chains';\nimport type { SupportedChain } from '../provider/types';\n\nexport interface ChainConfig {\n viemChain: Chain;\n name: string;\n icon: string;\n}\n\ninterface ChainContextValue {\n chainId: SupportedChain;\n setChainId: (chain: SupportedChain) => void;\n setChain: (chain: SupportedChain) => void; // Alias for compatibility\n chain: ChainConfig;\n}\n\nconst ChainContext = createContext<ChainContextValue | null>(null);\n\nconst CHAIN_CONFIG: Record<SupportedChain, ChainConfig> = {\n ethereum: {\n viemChain: mainnet,\n name: 'Ethereum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n viemChain: base,\n name: 'Base',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n viemChain: arbitrum,\n name: 'Arbitrum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n};\n\ninterface ChainProviderProps {\n children: ReactNode;\n defaultChain: SupportedChain;\n}\n\nexport function ChainProvider({ children, defaultChain }: ChainProviderProps) {\n const [chainId, setChainIdState] = useState<SupportedChain>(defaultChain);\n\n // Load from localStorage on mount\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const stored = localStorage.getItem('compass-chain');\n if (stored && stored in CHAIN_CONFIG) {\n setChainIdState(stored as SupportedChain);\n }\n }, []);\n\n const setChainId = (newChainId: SupportedChain) => {\n setChainIdState(newChainId);\n if (typeof window !== 'undefined') {\n localStorage.setItem('compass-chain', newChainId);\n }\n };\n\n const chain = useMemo(() => CHAIN_CONFIG[chainId], [chainId]);\n\n return (\n <ChainContext.Provider value={{ chainId, setChainId, setChain: setChainId, chain }}>\n {children}\n </ChainContext.Provider>\n );\n}\n\nexport function useCompassChain(): ChainContextValue {\n const context = useContext(ChainContext);\n if (!context) {\n throw new Error('useCompassChain must be used within a CompassProvider');\n }\n return context;\n}\n\n// Alias for compatibility with widgets_ui code\nexport const useChain = useCompassChain;\n\nexport { ChainContext };\n","'use client';\n\n/**\n * Wallet Context for Compass Widgets\n *\n * Provides wallet state and signing capabilities to widget components.\n * Customers bring their own wallet by passing a WalletAdapter to CompassProvider.\n */\n\nimport {\n createContext,\n useContext,\n type ReactNode,\n} from 'react';\nimport type { Address } from 'viem';\nimport type { WalletAdapter, TypedDataToSign } from '../provider/types';\n\n/**\n * Wallet Context value interface\n */\nexport interface WalletContextValue {\n /** Connected wallet address, or null if not connected */\n address: Address | null;\n /** Whether a wallet is connected */\n isConnected: boolean;\n /** Current chain ID the wallet is connected to */\n walletChainId: number | undefined;\n /** Sign EIP-712 typed data - throws if wallet not connected */\n signTypedData: (data: TypedDataToSign) => Promise<string>;\n /** Switch chain - may not be available depending on wallet adapter */\n switchChain: ((chainId: number) => Promise<void>) | null;\n /** Trigger wallet connection - may not be available depending on wallet adapter */\n login: (() => void) | null;\n /** Disconnect wallet - may not be available depending on wallet adapter */\n logout: (() => Promise<void>) | null;\n}\n\nconst WalletContext = createContext<WalletContextValue | null>(null);\n\n/**\n * Default context value when no wallet is provided\n */\nconst disconnectedWallet: WalletContextValue = {\n address: null,\n isConnected: false,\n walletChainId: undefined,\n signTypedData: async () => {\n throw new Error('No wallet connected. Please connect a wallet first.');\n },\n switchChain: null,\n login: null,\n logout: null,\n};\n\ninterface WalletProviderProps {\n children: ReactNode;\n wallet?: WalletAdapter;\n}\n\n/**\n * Provider component for wallet functionality\n */\nexport function WalletProvider({ children, wallet }: WalletProviderProps) {\n const value: WalletContextValue = wallet\n ? {\n address: wallet.address,\n isConnected: wallet.address !== null,\n walletChainId: wallet.chainId,\n signTypedData: wallet.signTypedData,\n switchChain: wallet.switchChain ?? null,\n login: wallet.login ?? null,\n logout: wallet.logout ?? null,\n }\n : disconnectedWallet;\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n </WalletContext.Provider>\n );\n}\n\n/**\n * Hook to access the wallet context\n */\nexport function useCompassWallet(): WalletContextValue {\n const context = useContext(WalletContext);\n\n if (!context) {\n return disconnectedWallet;\n }\n\n return context;\n}\n\n// Alias for compatibility\nexport const useEmbeddableWallet = useCompassWallet;\n\nexport { WalletContext };\n","'use client';\n\n/**\n * Earn Account Context for Compass Widgets\n *\n * Manages the user's Earn account (Safe wallet) state:\n * - Checks if account exists when wallet connects\n * - Provides account creation functionality\n * - All widgets check this before allowing deposit/withdraw operations\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { Address } from 'viem';\nimport { useEmbeddableWallet } from './WalletContext';\nimport { useChain } from './ChainContext';\n\nexport interface EarnAccountContextValue {\n /** The user's earn account address (Safe wallet) */\n earnAccountAddress: Address | null;\n /** Whether the earn account has been deployed on-chain */\n isDeployed: boolean;\n /** Whether we're checking the account status */\n isChecking: boolean;\n /** Whether we're creating the account */\n isCreating: boolean;\n /** Error from checking or creating */\n error: Error | null;\n /** Create the earn account (gas sponsored) */\n createAccount: () => Promise<Address>;\n /** Refresh account status */\n refetch: () => void;\n}\n\nconst EarnAccountContext = createContext<EarnAccountContextValue | null>(null);\n\ninterface EarnAccountProviderProps {\n children: ReactNode;\n}\n\nexport function EarnAccountProvider({ children }: EarnAccountProviderProps) {\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n const queryClient = useQueryClient();\n\n const [isCreating, setIsCreating] = useState(false);\n const [createError, setCreateError] = useState<Error | null>(null);\n\n // Check earn account status when wallet is connected\n const {\n data: accountData,\n isLoading: isChecking,\n error: checkError,\n refetch,\n } = useQuery({\n queryKey: ['earnAccount', address, chainId],\n queryFn: async () => {\n if (!address) return null;\n\n const response = await fetch(\n `/api/compass/earn-account/check?owner=${address}&chain=${chainId}`\n );\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || 'Failed to check earn account');\n }\n\n return response.json() as Promise<{\n earnAccountAddress: string;\n isDeployed: boolean;\n needsCreation: boolean;\n }>;\n },\n enabled: !!address,\n staleTime: 60 * 1000, // 1 minute\n refetchOnMount: true,\n });\n\n // Create earn account\n const createAccount = useCallback(async (): Promise<Address> => {\n if (!address) {\n throw new Error('No wallet connected');\n }\n\n if (accountData?.isDeployed) {\n return accountData.earnAccountAddress as Address;\n }\n\n setIsCreating(true);\n setCreateError(null);\n\n try {\n const response = await fetch('/api/compass/create-account', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n }),\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || 'Failed to create earn account');\n }\n\n const result = await response.json();\n\n // Invalidate the query to refetch account status\n await queryClient.invalidateQueries({\n queryKey: ['earnAccount', address, chainId],\n });\n\n return result.earnAccountAddress as Address;\n } catch (error) {\n const err = error instanceof Error ? error : new Error('Unknown error');\n setCreateError(err);\n throw err;\n } finally {\n setIsCreating(false);\n }\n }, [address, chainId, accountData, queryClient]);\n\n const value: EarnAccountContextValue = {\n earnAccountAddress: (accountData?.earnAccountAddress as Address) || null,\n isDeployed: accountData?.isDeployed ?? false,\n isChecking,\n isCreating,\n error: checkError instanceof Error ? checkError : createError,\n createAccount,\n refetch,\n };\n\n return (\n <EarnAccountContext.Provider value={value}>\n {children}\n </EarnAccountContext.Provider>\n );\n}\n\n/**\n * Hook to access earn account state and actions\n */\nexport function useEarnAccount(): EarnAccountContextValue {\n const context = useContext(EarnAccountContext);\n\n if (!context) {\n throw new Error('useEarnAccount must be used within a CompassProvider');\n }\n\n return context;\n}\n\nexport { EarnAccountContext };\n","/**\n * Theme Presets for Compass Embeddable Widgets\n *\n * This module provides 6 pre-configured theme presets covering various\n * visual styles and accessibility needs:\n *\n * - compass-dark/light: Brand themes with indigo primary and glassmorphism\n * - minimal-dark/light: Flat design with sharp corners and no shadows\n * - high-contrast-dark/light: Accessible themes with bold colors and larger text\n */\n\nimport type { CompassTheme, ThemePresetName } from './types';\n\n// ============================================================================\n// Shared Typography & Spacing Configurations\n// ============================================================================\n\nconst baseTypography = {\n fontFamily:\n 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontFamilyMono:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n heading: {\n fontSize: '1.5rem',\n lineHeight: 1.2,\n fontWeight: 600,\n letterSpacing: '-0.02em',\n },\n subheading: {\n fontSize: '1.125rem',\n lineHeight: 1.3,\n fontWeight: 500,\n letterSpacing: '-0.01em',\n },\n body: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n fontWeight: 400,\n },\n caption: {\n fontSize: '0.75rem',\n lineHeight: 1.4,\n fontWeight: 400,\n },\n label: {\n fontSize: '0.75rem',\n lineHeight: 1.2,\n fontWeight: 500,\n letterSpacing: '0.02em',\n },\n};\n\nconst highContrastTypography = {\n ...baseTypography,\n heading: {\n fontSize: '1.75rem',\n lineHeight: 1.2,\n fontWeight: 700,\n letterSpacing: '-0.02em',\n },\n subheading: {\n fontSize: '1.25rem',\n lineHeight: 1.3,\n fontWeight: 600,\n letterSpacing: '-0.01em',\n },\n body: {\n fontSize: '1rem',\n lineHeight: 1.6,\n fontWeight: 400,\n },\n caption: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n fontWeight: 400,\n },\n label: {\n fontSize: '0.875rem',\n lineHeight: 1.2,\n fontWeight: 600,\n letterSpacing: '0.02em',\n },\n};\n\nconst baseSpacing = {\n unit: '4px',\n containerPadding: '1.5rem',\n cardPadding: '1.25rem',\n inputPadding: '0.75rem 1rem',\n};\n\nconst baseTransitions = {\n fast: '150ms ease-out',\n normal: '200ms ease-out',\n slow: '300ms ease-out',\n};\n\n// ============================================================================\n// Compass Dark Theme\n// ============================================================================\n\n/**\n * Compass Dark Theme\n *\n * Matches wallet-earn styling: deep space dark theme with indigo/purple accents,\n * subtle blue undertones in surfaces, and glassmorphism effects.\n */\nexport const compassDark: CompassTheme = {\n name: 'compass-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n // wallet-earn: --background: #050507\n background: '#050507',\n // wallet-earn: --surface-1: #0c0c10, --surface-2: #12121a\n surface: '#0c0c10',\n surfaceHover: '#12121a',\n overlay: 'rgba(0, 0, 0, 0.7)',\n },\n brand: {\n // wallet-earn: --accent-primary: #6366f1, --accent-secondary: #8b5cf6\n primary: '#6366f1',\n primaryHover: '#818cf8',\n primaryText: '#ffffff',\n secondary: '#8b5cf6',\n secondaryHover: '#a78bfa',\n },\n text: {\n // wallet-earn: --foreground: #f4f4f5, text-zinc-400: #a1a1aa, text-zinc-500: #71717a\n text: '#f4f4f5',\n textSecondary: '#a1a1aa',\n textTertiary: '#71717a',\n },\n borders: {\n // wallet-earn: --border-subtle: rgba(255,255,255,0.06), --border-default: rgba(255,255,255,0.1)\n border: 'rgba(255, 255, 255, 0.08)',\n borderHover: 'rgba(255, 255, 255, 0.12)',\n borderFocus: '#6366f1',\n },\n semantic: {\n success: {\n // wallet-earn: --success: #10b981\n DEFAULT: '#10b981',\n muted: 'rgba(16, 185, 129, 0.15)',\n },\n warning: {\n DEFAULT: '#f59e0b',\n muted: 'rgba(245, 158, 11, 0.15)',\n },\n error: {\n // wallet-earn: --error: #ef4444\n DEFAULT: '#ef4444',\n muted: 'rgba(239, 68, 68, 0.15)',\n },\n info: {\n DEFAULT: '#6366f1',\n muted: 'rgba(99, 102, 241, 0.15)',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Compass Light Theme\n// ============================================================================\n\n/**\n * Compass Light Theme\n *\n * Light version with indigo primary, white background, and subtle shadows.\n */\nexport const compassLight: CompassTheme = {\n name: 'compass-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#f8fafc',\n surfaceHover: '#f1f5f9',\n overlay: 'rgba(0, 0, 0, 0.5)',\n },\n brand: {\n primary: '#6366f1',\n primaryHover: '#4f46e5',\n primaryText: '#ffffff',\n secondary: '#4f46e5',\n secondaryHover: '#4338ca',\n },\n text: {\n text: '#0f172a',\n textSecondary: '#475569',\n textTertiary: '#94a3b8',\n },\n borders: {\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n },\n semantic: {\n success: {\n DEFAULT: '#16a34a',\n muted: '#dcfce7',\n },\n warning: {\n DEFAULT: '#d97706',\n muted: '#fef3c7',\n },\n error: {\n DEFAULT: '#dc2626',\n muted: '#fee2e2',\n },\n info: {\n DEFAULT: '#2563eb',\n muted: '#dbeafe',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.05)',\n md: '0 4px 12px rgba(0, 0, 0, 0.08)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.12)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Minimal Dark Theme\n// ============================================================================\n\n/**\n * Minimal Dark Theme\n *\n * Dark with white/gray primary, flat design, sharp/smaller corners, no shadows.\n */\nexport const minimalDark: CompassTheme = {\n name: 'minimal-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n background: '#0a0a0a',\n surface: '#171717',\n surfaceHover: '#262626',\n overlay: 'rgba(0, 0, 0, 0.8)',\n },\n brand: {\n primary: '#ffffff',\n primaryHover: '#e5e5e5',\n primaryText: '#0a0a0a',\n secondary: '#a3a3a3',\n secondaryHover: '#d4d4d4',\n },\n text: {\n text: '#fafafa',\n textSecondary: '#a3a3a3',\n textTertiary: '#525252',\n },\n borders: {\n border: '#262626',\n borderHover: '#404040',\n borderFocus: '#ffffff',\n },\n semantic: {\n success: {\n DEFAULT: '#4ade80',\n muted: 'rgba(74, 222, 128, 0.1)',\n },\n warning: {\n DEFAULT: '#fbbf24',\n muted: 'rgba(251, 191, 36, 0.1)',\n },\n error: {\n DEFAULT: '#f87171',\n muted: 'rgba(248, 113, 113, 0.1)',\n },\n info: {\n DEFAULT: '#60a5fa',\n muted: 'rgba(96, 165, 250, 0.1)',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n md: '0.25rem',\n lg: '0.375rem',\n xl: '0.5rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n },\n blur: {\n sm: '0',\n md: '0',\n lg: '0',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Minimal Light Theme\n// ============================================================================\n\n/**\n * Minimal Light Theme\n *\n * Light with black/gray primary, flat design, sharp corners, no shadows.\n */\nexport const minimalLight: CompassTheme = {\n name: 'minimal-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#fafafa',\n surfaceHover: '#f5f5f5',\n overlay: 'rgba(0, 0, 0, 0.6)',\n },\n brand: {\n primary: '#0a0a0a',\n primaryHover: '#262626',\n primaryText: '#ffffff',\n secondary: '#525252',\n secondaryHover: '#404040',\n },\n text: {\n text: '#0a0a0a',\n textSecondary: '#525252',\n textTertiary: '#a3a3a3',\n },\n borders: {\n border: '#e5e5e5',\n borderHover: '#d4d4d4',\n borderFocus: '#0a0a0a',\n },\n semantic: {\n success: {\n DEFAULT: '#16a34a',\n muted: '#f0fdf4',\n },\n warning: {\n DEFAULT: '#ca8a04',\n muted: '#fefce8',\n },\n error: {\n DEFAULT: '#dc2626',\n muted: '#fef2f2',\n },\n info: {\n DEFAULT: '#2563eb',\n muted: '#eff6ff',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n md: '0.25rem',\n lg: '0.375rem',\n xl: '0.5rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n },\n blur: {\n sm: '0',\n md: '0',\n lg: '0',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// High Contrast Dark Theme\n// ============================================================================\n\n/**\n * High Contrast Dark Theme\n *\n * Dark with blue primary (#3b82f6), stronger borders, larger text for accessibility.\n */\nexport const highContrastDark: CompassTheme = {\n name: 'high-contrast-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n background: '#000000',\n surface: '#0a0a0a',\n surfaceHover: '#1a1a1a',\n overlay: 'rgba(0, 0, 0, 0.9)',\n },\n brand: {\n primary: '#3b82f6',\n primaryHover: '#60a5fa',\n primaryText: '#ffffff',\n secondary: '#60a5fa',\n secondaryHover: '#93c5fd',\n },\n text: {\n text: '#ffffff',\n textSecondary: '#e5e5e5',\n textTertiary: '#a3a3a3',\n },\n borders: {\n border: '#404040',\n borderHover: '#525252',\n borderFocus: '#3b82f6',\n },\n semantic: {\n success: {\n DEFAULT: '#22c55e',\n muted: 'rgba(34, 197, 94, 0.2)',\n },\n warning: {\n DEFAULT: '#fbbf24',\n muted: 'rgba(251, 191, 36, 0.2)',\n },\n error: {\n DEFAULT: '#ef4444',\n muted: 'rgba(239, 68, 68, 0.2)',\n },\n info: {\n DEFAULT: '#3b82f6',\n muted: 'rgba(59, 130, 246, 0.2)',\n },\n },\n },\n typography: highContrastTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n full: '9999px',\n },\n borderWidth: '2px',\n },\n effects: {\n shadow: {\n sm: '0 1px 3px rgba(0, 0, 0, 0.5)',\n md: '0 4px 12px rgba(0, 0, 0, 0.6)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.7)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// High Contrast Light Theme\n// ============================================================================\n\n/**\n * High Contrast Light Theme\n *\n * Light with bold blue primary, bold borders, larger text for accessibility.\n */\nexport const highContrastLight: CompassTheme = {\n name: 'high-contrast-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#f5f5f5',\n surfaceHover: '#e5e5e5',\n overlay: 'rgba(0, 0, 0, 0.7)',\n },\n brand: {\n primary: '#1d4ed8',\n primaryHover: '#1e40af',\n primaryText: '#ffffff',\n secondary: '#1e40af',\n secondaryHover: '#1e3a8a',\n },\n text: {\n text: '#000000',\n textSecondary: '#1a1a1a',\n textTertiary: '#525252',\n },\n borders: {\n border: '#525252',\n borderHover: '#404040',\n borderFocus: '#1d4ed8',\n },\n semantic: {\n success: {\n DEFAULT: '#15803d',\n muted: '#dcfce7',\n },\n warning: {\n DEFAULT: '#a16207',\n muted: '#fef9c3',\n },\n error: {\n DEFAULT: '#b91c1c',\n muted: '#fee2e2',\n },\n info: {\n DEFAULT: '#1d4ed8',\n muted: '#dbeafe',\n },\n },\n },\n typography: highContrastTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n full: '9999px',\n },\n borderWidth: '2px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.1)',\n md: '0 4px 8px rgba(0, 0, 0, 0.15)',\n lg: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Theme Presets Map & Default Export\n// ============================================================================\n\n/**\n * Map of all available theme presets by name\n */\nexport const themePresets: Record<ThemePresetName, CompassTheme> = {\n 'compass-dark': compassDark,\n 'compass-light': compassLight,\n 'minimal-dark': minimalDark,\n 'minimal-light': minimalLight,\n 'high-contrast-dark': highContrastDark,\n 'high-contrast-light': highContrastLight,\n};\n\n/**\n * Default theme preset\n */\nexport const defaultTheme: CompassTheme = compassDark;\n","/**\n * CSS Variable Generation Utilities for Compass Embeddable Widgets\n *\n * This module provides functions to convert theme objects to CSS custom properties,\n * enabling runtime theming and CSS-based styling of widget components.\n */\n\nimport type {\n CompassTheme,\n ThemeColors,\n ThemeTypography,\n ThemeSpacing,\n ThemeShape,\n ThemeEffects,\n TypographyScale,\n SemanticColor,\n} from './types';\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Convert a camelCase string to kebab-case for CSS variable names.\n *\n * @example\n * camelToKebab('surfaceHover') // => 'surface-hover'\n * camelToKebab('primaryText') // => 'primary-text'\n * camelToKebab('fontFamilyMono') // => 'font-family-mono'\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Create a CSS variable name with the compass prefix.\n */\nfunction cssVar(category: string, name: string): string {\n return `--compass-${category}-${camelToKebab(name)}`;\n}\n\n/**\n * Create a CSS variable name with nested path.\n */\nfunction cssVarPath(category: string, ...parts: string[]): string {\n const kebabParts = parts.map(camelToKebab).join('-');\n return `--compass-${category}-${kebabParts}`;\n}\n\n// ============================================================================\n// Color Variable Generation\n// ============================================================================\n\n/**\n * Convert theme colors to CSS variables.\n */\nfunction colorsToCssVariables(colors: ThemeColors): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Background colors - use direct names (surface, background, etc.)\n for (const [key, value] of Object.entries(colors.backgrounds)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Brand colors - use direct names (primary, secondary, etc.)\n for (const [key, value] of Object.entries(colors.brand)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Text colors\n for (const [key, value] of Object.entries(colors.text)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Border colors\n for (const [key, value] of Object.entries(colors.borders)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Semantic colors (success, warning, error, info)\n for (const [semantic, colorObj] of Object.entries(colors.semantic)) {\n const semanticColor = colorObj as SemanticColor;\n vars[cssVarPath('color', semantic)] = semanticColor.DEFAULT;\n vars[cssVarPath('color', semantic, 'muted')] = semanticColor.muted;\n }\n\n return vars;\n}\n\n// ============================================================================\n// Typography Variable Generation\n// ============================================================================\n\n/**\n * Convert a typography scale to CSS variables.\n */\nfunction typographyScaleToCssVariables(\n name: string,\n scale: TypographyScale\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n vars[cssVarPath('font', name, 'size')] = scale.fontSize;\n vars[cssVarPath('font', name, 'line-height')] = String(scale.lineHeight);\n vars[cssVarPath('font', name, 'weight')] = String(scale.fontWeight);\n\n if (scale.letterSpacing) {\n vars[cssVarPath('font', name, 'letter-spacing')] = scale.letterSpacing;\n }\n\n return vars;\n}\n\n/**\n * Convert theme typography to CSS variables.\n */\nfunction typographyToCssVariables(\n typography: ThemeTypography\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Font families\n vars['--compass-font-family'] = typography.fontFamily;\n vars['--compass-font-family-mono'] = typography.fontFamilyMono;\n\n // Typography scales\n const scales: (keyof ThemeTypography)[] = [\n 'heading',\n 'subheading',\n 'body',\n 'caption',\n 'label',\n ];\n\n for (const scaleName of scales) {\n const scale = typography[scaleName];\n if (typeof scale === 'object' && 'fontSize' in scale) {\n Object.assign(\n vars,\n typographyScaleToCssVariables(scaleName, scale as TypographyScale)\n );\n }\n }\n\n return vars;\n}\n\n// ============================================================================\n// Spacing Variable Generation\n// ============================================================================\n\n/**\n * Convert theme spacing to CSS variables.\n */\nfunction spacingToCssVariables(spacing: ThemeSpacing): Record<string, string> {\n const vars: Record<string, string> = {};\n\n vars['--compass-spacing-unit'] = spacing.unit;\n vars['--compass-spacing-container'] = spacing.containerPadding;\n vars['--compass-spacing-card'] = spacing.cardPadding;\n vars['--compass-spacing-input'] = spacing.inputPadding;\n\n return vars;\n}\n\n// ============================================================================\n// Shape Variable Generation\n// ============================================================================\n\n/**\n * Convert theme shape (border radius, border width) to CSS variables.\n */\nfunction shapeToCssVariables(shape: ThemeShape): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Border radius scale\n for (const [key, value] of Object.entries(shape.borderRadius)) {\n vars[cssVarPath('radius', key)] = value;\n }\n\n // Border width\n vars['--compass-border-width'] = shape.borderWidth;\n\n return vars;\n}\n\n// ============================================================================\n// Effects Variable Generation\n// ============================================================================\n\n/**\n * Convert theme effects (shadows, blur, transitions) to CSS variables.\n */\nfunction effectsToCssVariables(effects: ThemeEffects): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Shadows\n for (const [key, value] of Object.entries(effects.shadow)) {\n vars[cssVarPath('shadow', key)] = value;\n }\n\n // Blur\n for (const [key, value] of Object.entries(effects.blur)) {\n vars[cssVarPath('blur', key)] = value;\n }\n\n // Transitions\n for (const [key, value] of Object.entries(effects.transition)) {\n vars[cssVarPath('transition', key)] = value;\n }\n\n return vars;\n}\n\n// ============================================================================\n// Main Export Functions\n// ============================================================================\n\n/**\n * Convert a complete CompassTheme object to CSS custom properties.\n *\n * This generates a flat object of CSS variable names to values that can be\n * used to style components with CSS custom properties.\n *\n * @example\n * const vars = themeToCssVariables(compassDarkTheme);\n * // Returns:\n * // {\n * // '--compass-color-bg-background': '#0a0a0a',\n * // '--compass-color-bg-surface': '#141414',\n * // '--compass-color-brand-primary': '#6366f1',\n * // '--compass-font-family': 'Inter, sans-serif',\n * // '--compass-spacing-unit': '4px',\n * // '--compass-radius-md': '8px',\n * // '--compass-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n * // ...\n * // }\n */\nexport function themeToCssVariables(\n theme: CompassTheme\n): Record<string, string> {\n return {\n // Theme metadata\n '--compass-theme-name': theme.name,\n '--compass-theme-mode': theme.mode,\n\n // Color variables\n ...colorsToCssVariables(theme.colors),\n\n // Typography variables\n ...typographyToCssVariables(theme.typography),\n\n // Spacing variables\n ...spacingToCssVariables(theme.spacing),\n\n // Shape variables (border radius)\n ...shapeToCssVariables(theme.shape),\n\n // Effects variables (shadows, blur, transitions)\n ...effectsToCssVariables(theme.effects),\n };\n}\n\n/**\n * Generate a CSS string with theme variables inside a selector.\n *\n * This is useful for injecting theme variables into a style tag or\n * generating scoped CSS for widgets embedded in parent pages.\n *\n * @param theme - The CompassTheme to convert\n * @param selector - CSS selector to scope variables (default: '.compass-widget')\n * @returns CSS string with variables defined inside the selector\n *\n * @example\n * const css = injectCssVariables(compassDarkTheme);\n * // Returns:\n * // .compass-widget {\n * // --compass-color-bg-background: #0a0a0a;\n * // --compass-color-bg-surface: #141414;\n * // ...\n * // }\n *\n * @example\n * // Custom selector for a specific widget instance\n * const css = injectCssVariables(theme, '#my-widget');\n * // Returns:\n * // #my-widget {\n * // --compass-color-bg-background: #0a0a0a;\n * // ...\n * // }\n */\nexport function injectCssVariables(\n theme: CompassTheme,\n selector: string = '.compass-widget'\n): string {\n const variables = themeToCssVariables(theme);\n\n const variableLines = Object.entries(variables)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${variableLines}\\n}`;\n}\n\n/**\n * Generate CSS variables as an inline style object.\n *\n * This is useful for applying theme variables directly to a React component's\n * style prop without needing a style tag.\n *\n * @param theme - The CompassTheme to convert\n * @returns Object suitable for use as React style prop\n *\n * @example\n * const style = themeToCssVariablesStyle(compassDarkTheme);\n * return <div style={style} className=\"compass-widget\">...</div>;\n */\nexport function themeToCssVariablesStyle(\n theme: CompassTheme\n): React.CSSProperties {\n const variables = themeToCssVariables(theme);\n\n // Convert to React CSSProperties format\n // CSS custom properties need to use the cssText approach or type assertion\n return variables as unknown as React.CSSProperties;\n}\n","// lib/theme/context.tsx\n'use client';\n\nimport {\n createContext,\n useContext,\n useMemo,\n useEffect,\n useState,\n type ReactNode,\n} from 'react';\nimport type { CompassTheme, ThemeInput, DeepPartial } from './types';\nimport { themePresets, defaultTheme } from './presets';\nimport { injectCssVariables } from './css-variables';\n\ninterface ThemeContextValue {\n theme: CompassTheme;\n setTheme: (input: ThemeInput) => void;\n cssVariables: string;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nfunction deepMerge<T extends object>(target: T, source: DeepPartial<T>): T {\n const result = { ...target };\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = target[key];\n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(\n targetValue as object,\n sourceValue as DeepPartial<typeof targetValue>\n );\n } else if (sourceValue !== undefined) {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n }\n return result;\n}\n\nfunction resolveTheme(input: ThemeInput | undefined): CompassTheme {\n if (!input) return defaultTheme;\n\n if (typeof input === 'string') {\n return themePresets[input] ?? defaultTheme;\n }\n\n if ('preset' in input) {\n const base = themePresets[input.preset] ?? defaultTheme;\n return input.overrides ? deepMerge(base, input.overrides) : base;\n }\n\n // Full theme object\n return input;\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n theme?: ThemeInput;\n}\n\nexport function ThemeProvider({ children, theme: initialTheme }: ThemeProviderProps) {\n const [themeInput, setThemeInput] = useState<ThemeInput | undefined>(initialTheme);\n\n const theme = useMemo(() => resolveTheme(themeInput), [themeInput]);\n const cssVariables = useMemo(() => injectCssVariables(theme, '.compass-widget'), [theme]);\n\n // Inject CSS variables into document\n useEffect(() => {\n const styleId = 'compass-theme-variables';\n let styleEl = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = styleId;\n document.head.appendChild(styleEl);\n }\n\n styleEl.textContent = cssVariables;\n\n return () => {\n // Don't remove on cleanup - other widgets may still need it\n };\n }, [cssVariables]);\n\n const value = useMemo(\n () => ({\n theme,\n setTheme: setThemeInput,\n cssVariables,\n }),\n [theme, cssVariables]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport { useMemo, type ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { ApiProvider } from '../contexts/ApiContext';\nimport { ChainProvider } from '../contexts/ChainContext';\nimport { WalletProvider } from '../contexts/WalletContext';\nimport { EarnAccountProvider } from '../contexts/EarnAccountContext';\nimport { ThemeProvider } from '../theme/context';\nimport type { ThemeInput } from '../theme/types';\nimport type { SupportedChain, WalletAdapter } from './types';\n\nexport interface CompassProviderProps {\n children: ReactNode;\n /** Compass API key - required for all API calls */\n apiKey: string;\n /** Default chain to use */\n defaultChain?: SupportedChain;\n /** Theme preset name, preset with overrides, or full theme object */\n theme?: ThemeInput;\n /**\n * Wallet adapter for signing transactions\n *\n * Bring your own wallet by implementing the WalletAdapter interface\n * with your wallet library of choice (wagmi, viem, ethers, etc.)\n *\n * @example\n * ```tsx\n * import { useAccount, useSignTypedData } from 'wagmi';\n *\n * const { address } = useAccount();\n * const { signTypedDataAsync } = useSignTypedData();\n *\n * <CompassProvider\n * apiKey=\"your-key\"\n * wallet={{\n * address: address ?? null,\n * signTypedData: signTypedDataAsync,\n * }}\n * >\n * <VaultsList />\n * </CompassProvider>\n * ```\n */\n wallet?: WalletAdapter;\n}\n\nexport function CompassProvider({\n children,\n apiKey,\n defaultChain = 'base',\n theme,\n wallet,\n}: CompassProviderProps) {\n // Create a stable query client\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 2 * 60 * 1000, // 2 minutes\n refetchOnWindowFocus: false,\n },\n },\n }),\n []\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <ThemeProvider theme={theme}>\n <ApiProvider apiKey={apiKey}>\n <ChainProvider defaultChain={defaultChain}>\n <WalletProvider wallet={wallet}>\n <EarnAccountProvider>\n <div className=\"compass-widget\">\n {children}\n </div>\n </EarnAccountProvider>\n </WalletProvider>\n </ChainProvider>\n </ApiProvider>\n </ThemeProvider>\n </QueryClientProvider>\n );\n}\n","'use client';\n\nimport { useChain, type ChainConfig } from '../contexts/ChainContext';\nimport type { SupportedChain } from '../provider/types';\n\nconst SUPPORTED_CHAINS: SupportedChain[] = ['ethereum', 'base', 'arbitrum'];\n\nexport function ChainSwitcher() {\n const { chainId, setChain, chain } = useChain();\n\n // Build chain configs from context\n const chainConfigs: Record<SupportedChain, ChainConfig> = {\n ethereum: {\n viemChain: chain.viemChain,\n name: 'Ethereum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n viemChain: chain.viemChain,\n name: 'Base',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n viemChain: chain.viemChain,\n name: 'Arbitrum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n };\n\n return (\n <div className=\"flex gap-1 p-1 rounded-lg\" style={{ backgroundColor: 'var(--compass-color-surface)' }}>\n {SUPPORTED_CHAINS.map((id) => {\n const config = chainConfigs[id];\n const isActive = chainId === id;\n\n return (\n <button\n key={id}\n onClick={() => setChain(id)}\n className=\"flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-all\"\n style={{\n backgroundColor: isActive ? 'var(--compass-color-primary)' : 'transparent',\n color: isActive ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n }}\n >\n <img src={config.icon} alt={config.name} className=\"w-4 h-4\" />\n <span>{config.name}</span>\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { Wallet, LogOut } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\n\ninterface WalletStatusProps {\n /** Show full address or truncated */\n showFullAddress?: boolean;\n /** Show logout button when connected */\n showLogout?: boolean;\n /** Compact mode - just icon and minimal text */\n compact?: boolean;\n /** Callback when user clicks connect (optional - for apps that handle their own wallet connection) */\n onConnect?: () => void;\n /** Callback when user clicks disconnect (optional - for apps that handle their own wallet connection) */\n onDisconnect?: () => void;\n}\n\nfunction truncateAddress(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\n/**\n * Displays the connected wallet status with optional login/logout functionality.\n *\n * Uses login/logout from the WalletAdapter by default if provided.\n * You can override with `onConnect` and `onDisconnect` props if your app\n * handles wallet connection separately.\n */\nexport function WalletStatus({\n showFullAddress = false,\n showLogout = true,\n compact = false,\n onConnect,\n onDisconnect,\n}: WalletStatusProps) {\n const { address, isConnected, login, logout } = useCompassWallet();\n\n // Use props if provided, otherwise fall back to context\n const connectFn = onConnect ?? login;\n const disconnectFn = onDisconnect ?? logout;\n\n // Not connected - show connect button if callback provided\n if (!isConnected || !address) {\n if (connectFn !== null) {\n return (\n <button\n onClick={() => connectFn()}\n className={`flex items-center gap-2 rounded-lg font-medium transition-colors hover:opacity-90 ${compact ? 'px-2 py-1.5' : 'px-4 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n <Wallet size={compact ? 14 : 16} />\n {!compact && <span className=\"text-sm\">Connect Wallet</span>}\n </button>\n );\n }\n\n return (\n <div\n className={`flex items-center gap-2 rounded-lg ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <Wallet size={compact ? 14 : 16} />\n {!compact && <span className=\"text-sm\">Not connected</span>}\n </div>\n );\n }\n\n // Connected - show address and optional logout\n return (\n <div\n className={`flex items-center gap-2 rounded-lg ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <div\n className=\"w-2 h-2 rounded-full flex-shrink-0\"\n style={{ backgroundColor: 'var(--compass-color-success)' }}\n />\n <span\n className={`font-mono whitespace-nowrap ${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text)' }}\n >\n {showFullAddress ? address : truncateAddress(address)}\n </span>\n {showLogout && disconnectFn !== null && (\n <button\n onClick={() => disconnectFn()}\n className={`rounded hover:bg-white/10 transition-all flex-shrink-0 ${compact ? 'p-1' : 'p-1.5'}`}\n title=\"Disconnect wallet\"\n >\n <LogOut size={14} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\n\ninterface ActionModalProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n}\n\nexport function ActionModal({ isOpen, onClose, title, children }: ActionModalProps) {\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: 'var(--compass-color-overlay)' }}\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className=\"relative w-full max-w-md mx-4 rounded-xl overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3 border-b\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <h2\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-subheading)',\n color: 'var(--compass-color-text)',\n }}\n >\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md transition-colors hover:opacity-70\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\n\ninterface PositionPnL {\n unrealizedPnl: string;\n realizedPnl: string;\n totalPnl: string;\n totalDeposited: string;\n}\n\ninterface PnLSummaryProps {\n pnl: PositionPnL | null | undefined;\n tokenSymbol: string;\n tokenPrice: number;\n}\n\nexport function PnLSummary({ pnl, tokenSymbol, tokenPrice }: PnLSummaryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (!pnl) return null;\n\n const unrealizedPnl = parseFloat(pnl.unrealizedPnl || '0');\n const realizedPnl = parseFloat(pnl.realizedPnl || '0');\n const totalPnl = parseFloat(pnl.totalPnl || '0');\n const totalDeposited = parseFloat(pnl.totalDeposited || '0');\n\n if (totalDeposited === 0) return null;\n\n const formatPnL = (value: number) => {\n const prefix = value >= 0 ? '+' : '';\n return `${prefix}${value.toFixed(4)}`;\n };\n\n const formatUSD = (value: number) => {\n const usdValue = value * tokenPrice;\n const prefix = usdValue >= 0 ? '+$' : '-$';\n return `${prefix}${Math.abs(usdValue).toFixed(2)}`;\n };\n\n const pnlColor = (value: number) =>\n value >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)';\n\n return (\n <div className=\"flex flex-col w-full mt-2\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 rounded-lg border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Performance\n </span>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{ color: pnlColor(totalPnl) }}\n >\n {formatPnL(totalPnl)} {tokenSymbol}\n </span>\n <ChevronDown\n size={16}\n className={`transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </div>\n </button>\n\n {isExpanded && (\n <div\n className=\"mt-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Unrealized P&L */}\n <div className=\"flex flex-col\">\n <span\n className=\"text-[10px] font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Unrealized P&L\n </span>\n <span\n className=\"text-sm font-bold font-mono\"\n style={{ color: pnlColor(unrealizedPnl) }}\n >\n {formatPnL(unrealizedPnl)}\n </span>\n <span className=\"text-[10px] font-mono\" style={{ color: pnlColor(unrealizedPnl) }}>\n {formatUSD(unrealizedPnl)}\n </span>\n </div>\n\n {/* Realized P&L */}\n <div className=\"flex flex-col\">\n <span\n className=\"text-[10px] font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Realized P&L\n </span>\n <span\n className=\"text-sm font-bold font-mono\"\n style={{ color: pnlColor(realizedPnl) }}\n >\n {formatPnL(realizedPnl)}\n </span>\n <span className=\"text-[10px] font-mono\" style={{ color: pnlColor(realizedPnl) }}>\n {formatUSD(realizedPnl)}\n </span>\n </div>\n </div>\n\n {/* Total Summary */}\n <div\n className=\"flex items-center justify-between mt-3 pt-3 border-t\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Total P&L\n </span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold font-mono\" style={{ color: pnlColor(totalPnl) }}>\n {formatPnL(totalPnl)} {tokenSymbol}\n </span>\n <span className=\"text-xs font-mono\" style={{ color: pnlColor(totalPnl) }}>\n ({formatUSD(totalPnl)})\n </span>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Format utilities for displaying token amounts\n */\n\n/**\n * Format a number for display, up to 6 decimals, trimmed\n */\nexport function formatAmount(value: number | string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '0';\n return parseFloat(num.toFixed(6)).toString();\n}\n\n/**\n * Format for display with token symbol\n */\nexport function formatTokenAmount(value: number | string, symbol: string): string {\n return `${formatAmount(value)} ${symbol}`;\n}\n\n/**\n * Format USD value\n */\nexport function formatUSD(value: number | string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '$0.00';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(num);\n}\n\n/**\n * Truncate address for display\n */\nexport function truncateAddress(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n","'use client';\n\nimport { useState, useRef, useEffect } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { formatAmount } from '../utils/format';\n\nexport interface TokenSelectorProps {\n /** Available tokens to select from */\n tokens: string[];\n /** Currently selected token */\n selectedToken: string;\n /** Callback when token is selected */\n onSelect: (token: string) => void;\n /** Token balances keyed by symbol */\n balances?: Record<string, string>;\n /** Whether to show balances in dropdown */\n showBalances?: boolean;\n /** Disable the selector */\n disabled?: boolean;\n}\n\nexport function TokenSelector({\n tokens,\n selectedToken,\n onSelect,\n balances,\n showBalances = true,\n disabled = false,\n}: TokenSelectorProps) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (token: string) => {\n onSelect(token);\n setIsOpen(false);\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n {/* Trigger Button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className=\"flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors min-w-[120px]\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: isOpen ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <span className=\"font-medium flex-1 text-left\">{selectedToken}</span>\n <ChevronDown\n size={16}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </button>\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className=\"absolute z-50 mt-1 w-full min-w-[160px] rounded-lg border overflow-y-auto\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n boxShadow: 'var(--compass-shadow-lg)',\n maxHeight: '200px',\n }}\n >\n {tokens.map((token) => {\n const balance = balances?.[token];\n const isSelected = token === selectedToken;\n\n return (\n <button\n key={token}\n type=\"button\"\n onClick={() => handleSelect(token)}\n className=\"w-full px-3 py-2 flex items-center justify-between transition-colors\"\n style={{\n backgroundColor: isSelected\n ? 'var(--compass-color-primary-muted)'\n : 'transparent',\n color: 'var(--compass-color-text)',\n }}\n onMouseEnter={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'var(--compass-color-surface-hover)';\n }\n }}\n onMouseLeave={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <span className=\"font-medium\">{token}</span>\n {showBalances && balance && (\n <span\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(balance)}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, AlertCircle, ArrowRight } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { TokenSelector } from './TokenSelector';\nimport { formatAmount } from '../utils/format';\n\ntype ActionType = 'deposit' | 'withdraw';\ntype VenueType = 'VAULT' | 'AAVE' | 'PENDLE_PT';\n\ninterface DepositWithdrawFormProps {\n venueType: VenueType;\n venueAddress: string;\n /** The token the venue accepts */\n venueToken: string;\n /** Available tokens for deposits (enables swap if different from venueToken) */\n depositTokens?: string[];\n positionBalance?: string;\n onSuccess?: (action: ActionType, amount: string, txHash: string) => void;\n onError?: (error: Error) => void;\n}\n\nexport function DepositWithdrawForm({\n venueType,\n venueAddress,\n venueToken,\n depositTokens = ['SBC', 'AUSD', 'USDC', 'USDT', 'WETH', 'DAI'],\n positionBalance = '0',\n onSuccess,\n onError,\n}: DepositWithdrawFormProps) {\n const [activeTab, setActiveTab] = useState<ActionType>('deposit');\n const [selectedToken, setSelectedToken] = useState(venueToken);\n const [amount, setAmount] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [statusMessage, setStatusMessage] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const { address, isConnected, signTypedData, switchChain } = useCompassWallet();\n const { chainId, chain } = useChain();\n const { earnAccountAddress } = useEarnAccount();\n const queryClient = useQueryClient();\n\n // Determine if we need to swap\n const needsSwap = activeTab === 'deposit' && selectedToken !== venueToken;\n\n // Fetch the earn account's token balance for the selected token\n const { data: tokenBalance } = useQuery({\n queryKey: ['earnAccountTokenBalance', chainId, earnAccountAddress, selectedToken],\n queryFn: async () => {\n if (!earnAccountAddress) return '0';\n try {\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${chainId}&tokens=${selectedToken}`\n );\n if (!response.ok) return '0';\n const data = await response.json();\n return data.balances?.[selectedToken]?.balance || '0';\n } catch {\n return '0';\n }\n },\n enabled: !!earnAccountAddress && !!address,\n staleTime: 10 * 1000,\n });\n\n const availableBalance = tokenBalance || '0';\n const maxBalance = activeTab === 'deposit' ? availableBalance : positionBalance;\n\n const handleQuickAmount = useCallback(\n (percentage: number) => {\n const max = parseFloat(maxBalance);\n if (isNaN(max)) return;\n setAmount(formatAmount(max * percentage));\n },\n [maxBalance]\n );\n\n const handleSubmit = useCallback(async () => {\n if (!address || !amount) return;\n\n setIsSubmitting(true);\n setStatusMessage('Preparing transaction...');\n setError(null);\n\n try {\n // Switch wallet to the correct chain if needed\n const targetChainId = chain.viemChain.id;\n if (switchChain) {\n setStatusMessage('Switching network...');\n try {\n await switchChain(targetChainId);\n } catch {\n throw new Error(`Please switch your wallet to ${chain.name} to continue`);\n }\n }\n\n const isDeposit = activeTab === 'deposit';\n\n if (isDeposit && needsSwap) {\n // Step 1: Get swap quote to know the output amount\n setStatusMessage('Getting swap quote...');\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${chainId}&tokenIn=${selectedToken}&tokenOut=${venueToken}&amountIn=${amount}`\n );\n\n if (!quoteResponse.ok) {\n const errorData = await quoteResponse.json();\n throw new Error(errorData.error || 'Failed to get swap quote');\n }\n\n const quoteData = await quoteResponse.json();\n const estimatedOutput = quoteData.estimatedAmountOut;\n\n if (!estimatedOutput || parseFloat(estimatedOutput) <= 0) {\n throw new Error('Invalid swap quote - no output amount');\n }\n\n // Apply 1% slippage buffer to the deposit amount\n const depositAmount = (parseFloat(estimatedOutput) * 0.99).toString();\n\n // Step 2: Build bundle with specific amounts\n setStatusMessage('Preparing swap and deposit...');\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: venueToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue:\n venueType === 'VAULT'\n ? { type: 'VAULT', vaultAddress: venueAddress }\n : venueType === 'AAVE'\n ? { type: 'AAVE', token: venueToken }\n : { type: 'PENDLE_PT', marketAddress: venueAddress },\n amount: depositAmount,\n },\n },\n ];\n\n const prepareResponse = await fetch('/api/compass/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n actions: bundleActions,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errorData = await prepareResponse.json();\n throw new Error(errorData.error || 'Failed to prepare bundle');\n }\n\n const { eip712, normalizedTypes, domain, message } = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing swap and deposit...');\n\n const executeResponse = await fetch('/api/compass/bundle/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n eip712,\n signature,\n chain: chainId,\n }),\n });\n\n if (!executeResponse.ok) {\n const errorData = await executeResponse.json();\n throw new Error(errorData.error || 'Failed to execute bundle');\n }\n\n const { txHash } = await executeResponse.json();\n\n setStatusMessage('Transaction successful!');\n onSuccess?.(activeTab, amount, txHash);\n setAmount('');\n } else {\n // Use existing manage endpoint for direct deposit/withdraw\n const prepareEndpoint = isDeposit\n ? '/api/compass/deposit/prepare'\n : '/api/compass/withdraw/prepare';\n const executeEndpoint = isDeposit\n ? '/api/compass/deposit/execute'\n : '/api/compass/withdraw/execute';\n\n const prepareBody: Record<string, unknown> = {\n amount,\n token: venueToken,\n owner: address,\n chain: chainId,\n venueType,\n };\n\n if (venueType === 'VAULT') {\n prepareBody.vaultAddress = venueAddress;\n } else if (venueType === 'PENDLE_PT') {\n prepareBody.marketAddress = venueAddress;\n prepareBody.maxSlippagePercent = 1.0;\n }\n\n setStatusMessage('Getting transaction data...');\n const prepareResponse = await fetch(prepareEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(prepareBody),\n });\n\n if (!prepareResponse.ok) {\n const errorData = await prepareResponse.json();\n throw new Error(errorData.error || 'Failed to prepare transaction');\n }\n\n const { eip712, normalizedTypes, domain, message } = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing transaction...');\n const executeResponse = await fetch(executeEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n eip712,\n signature,\n chain: chainId,\n }),\n });\n\n if (!executeResponse.ok) {\n const errorData = await executeResponse.json();\n throw new Error(errorData.error || 'Failed to execute transaction');\n }\n\n const { txHash } = await executeResponse.json();\n\n setStatusMessage('Transaction successful!');\n onSuccess?.(activeTab, amount, txHash);\n setAmount('');\n }\n\n // Invalidate queries\n queryClient.invalidateQueries({ queryKey: ['earnAccountTokenBalance'] });\n queryClient.invalidateQueries({ queryKey: ['vaults'] });\n queryClient.invalidateQueries({ queryKey: ['aaveMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['pendleMarkets'] });\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (err) {\n console.error('Transaction failed:', err);\n const errorMessage = err instanceof Error ? err.message : 'Transaction failed';\n setError(errorMessage);\n onError?.(err as Error);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n address,\n amount,\n chainId,\n chain,\n activeTab,\n needsSwap,\n selectedToken,\n venueToken,\n venueType,\n venueAddress,\n signTypedData,\n switchChain,\n queryClient,\n onSuccess,\n onError,\n ]);\n\n if (!isConnected) {\n return (\n <div\n className=\"flex flex-col items-center gap-3 py-6 px-4 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <AlertCircle size={24} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <p\n className=\"text-sm text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Connect your wallet to deposit or withdraw\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Tab Switcher */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n {(['deposit', 'withdraw'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => {\n setActiveTab(tab);\n setSelectedToken(venueToken);\n setError(null);\n setStatusMessage('');\n }}\n className=\"flex-1 py-2 rounded-md text-sm font-medium capitalize transition-all\"\n style={{\n backgroundColor: activeTab === tab ? 'var(--compass-color-surface)' : 'transparent',\n color: activeTab === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Token Selector (only for deposits) */}\n {activeTab === 'deposit' && (\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n From Token\n </label>\n <TokenSelector\n tokens={depositTokens}\n selectedToken={selectedToken}\n onSelect={setSelectedToken}\n disabled={isSubmitting}\n />\n </div>\n )}\n\n {/* Swap Indicator */}\n {needsSwap && (\n <div\n className=\"flex items-center gap-2 p-2 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n <ArrowRight size={14} />\n <span>\n Swaps {selectedToken} to {venueToken}, then deposits\n </span>\n </div>\n )}\n\n {/* Amount Input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available: {formatAmount(maxBalance)} {activeTab === 'deposit' ? selectedToken : venueToken}\n </span>\n </div>\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => {\n setAmount(e.target.value);\n setError(null);\n }}\n placeholder=\"0.00\"\n className=\"flex-1 bg-transparent outline-none text-lg font-mono\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {activeTab === 'deposit' ? selectedToken : venueToken}\n </span>\n </div>\n </div>\n\n {/* Quick Amount Buttons */}\n <div className=\"flex gap-2\">\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n className=\"flex-1 py-1.5 rounded-md text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 rounded-lg text-sm text-center\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Submit Button */}\n <button\n onClick={handleSubmit}\n disabled={isSubmitting || !amount || parseFloat(amount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n {isSubmitting && <Loader2 size={18} className=\"animate-spin\" />}\n {isSubmitting\n ? 'Processing...'\n : needsSwap\n ? `Swap & ${activeTab === 'deposit' ? 'Deposit' : 'Withdraw'}`\n : activeTab === 'deposit'\n ? 'Deposit'\n : 'Withdraw'}\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown, ArrowDownLeft, ArrowUpRight, ExternalLink } from 'lucide-react';\nimport { useChain } from '../contexts/ChainContext';\n\ninterface DepositEvent {\n amount: string;\n blockNumber: number;\n txHash: string;\n}\n\ninterface WithdrawalEvent {\n amount: string;\n blockNumber: number;\n txHash: string;\n}\n\ninterface TransactionHistoryProps {\n deposits?: DepositEvent[];\n withdrawals?: WithdrawalEvent[];\n tokenSymbol: string;\n}\n\nfunction getExplorerUrl(txHash: string, chainId: string): string {\n const explorers: Record<string, string> = {\n ethereum: 'https://etherscan.io/tx/',\n arbitrum: 'https://arbiscan.io/tx/',\n base: 'https://basescan.org/tx/',\n };\n return `${explorers[chainId] || explorers.ethereum}${txHash}`;\n}\n\nexport function TransactionHistory({\n deposits = [],\n withdrawals = [],\n tokenSymbol,\n}: TransactionHistoryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const { chainId } = useChain();\n\n // Combine and sort all events by block number (most recent first)\n type HistoryEvent =\n | { type: 'deposit'; event: DepositEvent }\n | { type: 'withdrawal'; event: WithdrawalEvent };\n\n const allEvents: HistoryEvent[] = [\n ...deposits.map((d) => ({ type: 'deposit' as const, event: d })),\n ...withdrawals.map((w) => ({ type: 'withdrawal' as const, event: w })),\n ].sort((a, b) => b.event.blockNumber - a.event.blockNumber);\n\n if (allEvents.length === 0) return null;\n\n return (\n <div className=\"flex flex-col w-full\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 rounded-lg border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Transaction History ({allEvents.length})\n </span>\n <ChevronDown\n size={16}\n className={`transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </button>\n\n {isExpanded && (\n <div\n className=\"mt-2 max-h-48 overflow-y-auto rounded-lg border\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <div>\n {allEvents.map((item, index) => (\n <div\n key={`${item.type}-${item.event.txHash}-${index}`}\n className=\"flex items-center justify-between px-3 py-2\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderTop: index > 0 ? '1px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div className=\"flex items-center gap-2\">\n {item.type === 'deposit' ? (\n <div\n className=\"p-1 rounded-full\"\n style={{ backgroundColor: 'var(--compass-color-success-muted)' }}\n >\n <ArrowDownLeft size={12} style={{ color: 'var(--compass-color-success)' }} />\n </div>\n ) : (\n <div\n className=\"p-1 rounded-full\"\n style={{ backgroundColor: 'var(--compass-color-warning-muted)' }}\n >\n <ArrowUpRight size={12} style={{ color: 'var(--compass-color-warning)' }} />\n </div>\n )}\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {item.type === 'deposit' ? 'Deposit' : 'Withdrawal'}\n </span>\n <span\n className=\"text-[10px]\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Block #{item.event.blockNumber.toLocaleString()}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-right\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{\n color: item.type === 'deposit'\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-warning)',\n }}\n >\n {item.type === 'deposit' ? '+' : '-'}\n {parseFloat(item.event.amount).toFixed(4)} {tokenSymbol}\n </span>\n </div>\n <a\n href={getExplorerUrl(item.event.txHash, chainId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-1 rounded hover:opacity-70 transition-opacity\"\n title=\"View on explorer\"\n >\n <ExternalLink\n size={12}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </a>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n/**\n * EarnAccountGuard Component\n *\n * Ensures an earn account exists before allowing operations.\n * Shows a creation prompt if the account doesn't exist.\n */\n\nimport { useState, type ReactNode } from 'react';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { Loader2 } from 'lucide-react';\n\ninterface EarnAccountGuardProps {\n children: ReactNode;\n /** What to show while checking account status */\n loadingComponent?: ReactNode;\n /** Custom component to show when account needs creation */\n createAccountComponent?: ReactNode;\n}\n\nexport function EarnAccountGuard({\n children,\n loadingComponent,\n createAccountComponent,\n}: EarnAccountGuardProps) {\n const { isConnected, login } = useEmbeddableWallet();\n const { isDeployed, isChecking, isCreating, createAccount, error } = useEarnAccount();\n const [createError, setCreateError] = useState<string | null>(null);\n\n // Not connected - prompt to connect\n if (!isConnected) {\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n }}\n >\n <p className=\"text-sm mb-4\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Connect your wallet to continue\n </p>\n {login && (\n <button\n onClick={login}\n className=\"px-4 py-2 rounded-lg font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n Connect Wallet\n </button>\n )}\n </div>\n );\n }\n\n // Checking account status\n if (isChecking) {\n if (loadingComponent) {\n return <>{loadingComponent}</>;\n }\n\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <Loader2\n size={24}\n className=\"animate-spin mx-auto mb-3\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Checking account status...\n </p>\n </div>\n );\n }\n\n // Account exists - render children\n if (isDeployed) {\n return <>{children}</>;\n }\n\n // Account needs creation\n if (createAccountComponent) {\n return <>{createAccountComponent}</>;\n }\n\n const handleCreate = async () => {\n setCreateError(null);\n try {\n await createAccount();\n } catch (err) {\n setCreateError(err instanceof Error ? err.message : 'Failed to create account');\n }\n };\n\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n {/* Icon */}\n <div\n className=\"w-12 h-12 rounded-full flex items-center justify-center mx-auto mb-4\"\n style={{ backgroundColor: 'var(--compass-color-primary)', opacity: 0.15 }}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--compass-color-primary)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83\" />\n </svg>\n </div>\n\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Create Your Earn Account\n </h3>\n\n <p\n className=\"text-sm mb-6 max-w-xs mx-auto\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n To start earning, we need to create a secure smart wallet for you. This is a one-time setup with no gas fees.\n </p>\n\n {(error || createError) && (\n <p\n className=\"text-sm mb-4\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n {createError || (error instanceof Error ? error.message : 'An error occurred')}\n </p>\n )}\n\n <button\n onClick={handleCreate}\n disabled={isCreating}\n className=\"px-6 py-3 rounded-lg font-medium transition-all inline-flex items-center gap-2\"\n style={{\n backgroundColor: isCreating ? 'var(--compass-color-surface-hover)' : 'var(--compass-color-primary)',\n color: isCreating ? 'var(--compass-color-text-secondary)' : 'var(--compass-color-primary-text)',\n cursor: isCreating ? 'not-allowed' : 'pointer',\n }}\n >\n {isCreating && (\n <Loader2 size={16} className=\"animate-spin\" />\n )}\n {isCreating ? 'Creating...' : 'Create Account'}\n </button>\n\n <p\n className=\"text-xs mt-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored by Compass\n </p>\n </div>\n );\n}\n","'use client';\n\nimport { X, Loader2, Coins } from 'lucide-react';\nimport { useEffect } from 'react';\nimport { formatAmount, formatUSD } from '../utils/format';\n\nexport interface TokenBalance {\n symbol: string;\n balance: string;\n usdValue: string;\n}\n\nexport interface AccountBalancesModalProps {\n isOpen: boolean;\n onClose: () => void;\n balances: TokenBalance[];\n totalUsdValue: string;\n isLoading?: boolean;\n earnAccountAddress?: string;\n}\n\nexport function AccountBalancesModal({\n isOpen,\n onClose,\n balances,\n totalUsdValue,\n isLoading = false,\n earnAccountAddress,\n}: AccountBalancesModalProps) {\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: 'var(--compass-color-overlay)' }}\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className=\"relative w-full max-w-md mx-4 rounded-xl overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3 border-b\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <h2\n className=\"font-semibold flex items-center gap-2\"\n style={{\n fontSize: 'var(--compass-font-size-subheading)',\n color: 'var(--compass-color-text)',\n }}\n >\n <Coins size={20} />\n Account Balances\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md transition-colors hover:opacity-70\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {isLoading ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2\n size={24}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n ) : balances.length === 0 ? (\n <div\n className=\"text-center py-8\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No token balances found\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {/* Token List */}\n {balances.map((token) => (\n <div\n key={token.symbol}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-3\">\n {/* Token Icon Placeholder */}\n <div\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n {token.symbol.slice(0, 2)}\n </div>\n <div>\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {token.symbol}\n </div>\n <div\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(token.balance)}\n </div>\n </div>\n </div>\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(token.usdValue)}\n </div>\n </div>\n ))}\n\n {/* Total */}\n <div\n className=\"flex items-center justify-between p-3 mt-2 rounded-lg border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n backgroundColor: 'var(--compass-color-surface)',\n }}\n >\n <span\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Total Balance\n </span>\n <span\n className=\"font-bold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n </div>\n </div>\n )}\n\n {/* Account Address */}\n {earnAccountAddress && (\n <div\n className=\"mt-4 pt-4 border-t text-center\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Earn Account: {earnAccountAddress.slice(0, 6)}...{earnAccountAddress.slice(-4)}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Wallet, ArrowUpRight, ArrowDownLeft, Loader2 } from 'lucide-react';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { ActionModal } from './ActionModal';\nimport { TokenSelector } from './TokenSelector';\nimport { formatAmount, formatUSD } from '../utils/format';\nimport { AccountBalancesModal, TokenBalance } from './AccountBalancesModal';\n\ntype TransferAction = 'deposit' | 'withdraw';\ntype TransferState =\n | 'idle'\n | 'checking_approval'\n | 'awaiting_approval_signature'\n | 'approving'\n | 'awaiting_transfer_signature'\n | 'transferring'\n | 'success'\n | 'error';\n\nexport interface EarnAccountBalanceProps {\n /** Compact mode - just show total USD value */\n compact?: boolean;\n /** Callback when transfer completes */\n onTransferComplete?: (\n action: TransferAction,\n token: string,\n amount: string,\n txHash: string\n ) => void;\n}\n\n// Supported tokens for funding earn account\nconst TRANSFER_TOKENS = ['USDC'];\n\nexport function EarnAccountBalance({\n compact = false,\n onTransferComplete,\n}: EarnAccountBalanceProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [activeAction, setActiveAction] = useState<TransferAction>('deposit');\n const [selectedToken, setSelectedToken] = useState(TRANSFER_TOKENS[0]);\n const [amount, setAmount] = useState('');\n const [transferState, setTransferState] = useState<TransferState>('idle');\n const [statusMessage, setStatusMessage] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n const { address, isConnected, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { chainId, chain } = useChain();\n const { earnAccountAddress, isDeployed } = useEarnAccount();\n const queryClient = useQueryClient();\n\n // Fetch earn account balances (all tokens)\n const { data: balanceData, isLoading: balancesLoading } = useQuery({\n queryKey: ['earnAccountBalances', chainId, address],\n queryFn: async () => {\n if (!address) return null;\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${chainId}`\n );\n if (!response.ok) {\n throw new Error('Failed to fetch balances');\n }\n return response.json() as Promise<{\n earnAccountAddress: string;\n balances: Record<string, { balance: string; usdValue: string }>;\n totalUsdValue: string;\n }>;\n },\n enabled: !!address && isDeployed,\n staleTime: 30 * 1000,\n });\n\n // Fetch EOA balances for deposits (wallet token balances)\n const { data: eoaBalances } = useQuery({\n queryKey: ['eoaBalances', chainId, address, TRANSFER_TOKENS.join(',')],\n queryFn: async () => {\n if (!address) return {};\n const balances: Record<string, string> = {};\n\n // Fetch balance for each transfer token from the token balance API\n for (const token of TRANSFER_TOKENS) {\n try {\n const response = await fetch(\n `/api/compass/token/balance?chain=${chainId}&token=${token}&address=${address}`\n );\n if (response.ok) {\n const data = await response.json();\n balances[token] = data.balance || '0';\n }\n } catch {\n // Ignore errors for individual tokens\n }\n }\n return balances;\n },\n enabled: !!address && activeAction === 'deposit',\n staleTime: 30 * 1000,\n });\n\n const earnBalances = balanceData?.balances || {};\n\n // Get total USD value from API response\n const totalUsdValue = parseFloat(balanceData?.totalUsdValue || '0');\n\n // Transform balances for modal display, filtering out zero USD value tokens\n const tokenBalances: TokenBalance[] = Object.entries(earnBalances)\n .filter(([, data]) => {\n const usdVal = parseFloat(data.usdValue || '0');\n return usdVal > 0;\n })\n .map(([symbol, data]) => ({\n symbol,\n balance: data.balance || '0',\n usdValue: data.usdValue || '0',\n }));\n\n // Get just the balance amounts for transfer operations (keyed by symbol)\n const earnBalanceAmounts: Record<string, string> = {};\n for (const [symbol, data] of Object.entries(earnBalances)) {\n earnBalanceAmounts[symbol] = data.balance;\n }\n\n const resetForm = useCallback(() => {\n setAmount('');\n setTransferState('idle');\n setStatusMessage('');\n setError(null);\n }, []);\n\n const handleOpenModal = () => {\n resetForm();\n setIsModalOpen(true);\n };\n\n const handleCloseModal = () => {\n setIsModalOpen(false);\n resetForm();\n };\n\n const handleActionChange = (action: TransferAction) => {\n setActiveAction(action);\n setAmount('');\n setError(null);\n };\n\n const getMaxBalance = () => {\n if (activeAction === 'deposit') {\n return eoaBalances?.[selectedToken] || '0';\n }\n return earnBalanceAmounts[selectedToken] || '0';\n };\n\n const handleQuickAmount = (percentage: number) => {\n const max = parseFloat(getMaxBalance());\n if (isNaN(max)) return;\n setAmount(formatAmount(max * percentage));\n };\n\n const handleTransfer = useCallback(async () => {\n if (!address || !amount || !signTypedData) return;\n\n setError(null);\n\n try {\n // Check and switch wallet to the correct chain if needed\n const targetChainId = chain.viemChain.id;\n\n // If wallet chain ID is known and doesn't match target, we need to switch\n if (walletChainId !== undefined && walletChainId !== targetChainId) {\n if (!switchChain) {\n throw new Error(`Please switch your wallet to ${chain.name} (chain ID ${targetChainId}) to continue. Your wallet is currently on chain ID ${walletChainId}.`);\n }\n\n setStatusMessage(`Switching network to ${chain.name}...`);\n try {\n await switchChain(targetChainId);\n // Note: After switchChain, the wallet adapter should update walletChainId\n // but this might not be immediate. The signing will fail with a clear error\n // if the chain wasn't switched properly.\n } catch (switchError) {\n // If user rejects chain switch, show helpful error\n throw new Error(`Please switch your wallet to ${chain.name} to continue. Your wallet is on chain ID ${walletChainId}, but ${chain.name} requires chain ID ${targetChainId}.`);\n }\n } else if (switchChain && walletChainId === undefined) {\n // Wallet chain ID unknown - try to switch anyway as a precaution\n setStatusMessage('Switching network...');\n try {\n await switchChain(targetChainId);\n } catch (switchError) {\n throw new Error(`Please switch your wallet to ${chain.name} to continue`);\n }\n }\n\n if (activeAction === 'deposit') {\n // Check if approval needed\n setTransferState('checking_approval');\n setStatusMessage('Checking token approval...');\n\n const approveResponse = await fetch('/api/compass/transfer/approve', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n token: selectedToken,\n }),\n });\n\n if (!approveResponse.ok) {\n const errData = await approveResponse.json();\n throw new Error(errData.error || 'Failed to check approval');\n }\n\n const approvalData = await approveResponse.json();\n\n if (!approvalData.approved) {\n if (approvalData.requiresTransaction) {\n throw new Error('This token requires a transaction-based approval. Please approve manually.');\n }\n\n // Need signature for approval\n setTransferState('awaiting_approval_signature');\n setStatusMessage('Please sign the approval...');\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setTransferState('approving');\n setStatusMessage('Executing approval...');\n\n const executeApprovalResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712: approvalData.eip712,\n signature: approvalSignature,\n }),\n });\n\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n }\n }\n\n // Prepare transfer\n setTransferState('awaiting_transfer_signature');\n setStatusMessage('Preparing transfer...');\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n token: selectedToken,\n amount,\n action: activeAction.toUpperCase(),\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transfer');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStatusMessage('Please sign the transfer...');\n\n const transferSignature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n setTransferState('transferring');\n setStatusMessage('Executing transfer...');\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712: prepareData.eip712,\n signature: transferSignature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n\n const { txHash } = await executeResponse.json();\n\n setTransferState('success');\n setStatusMessage('Transfer successful!');\n\n onTransferComplete?.(activeAction, selectedToken, amount, txHash);\n\n // Invalidate queries\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['eoaBalances'] });\n\n // Reset after delay\n setTimeout(() => {\n resetForm();\n }, 2000);\n } catch (err) {\n console.error('Transfer failed:', err);\n setTransferState('error');\n setError(err instanceof Error ? err.message : 'Transfer failed');\n }\n }, [\n address,\n amount,\n activeAction,\n selectedToken,\n chainId,\n chain,\n walletChainId,\n signTypedData,\n switchChain,\n queryClient,\n onTransferComplete,\n resetForm,\n ]);\n\n if (!isConnected) {\n return null;\n }\n\n const isProcessing = transferState !== 'idle' && transferState !== 'success' && transferState !== 'error';\n\n // Show loading or \"not deployed\" state\n if (!isDeployed) {\n return (\n <div\n className={`flex items-center gap-2 rounded-lg border ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Wallet size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n <span\n className={`${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No Earn Account\n </span>\n </div>\n );\n }\n\n return (\n <>\n {/* Clickable Balance Display */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n className={`flex items-center gap-2 rounded-lg border transition-colors hover:border-[var(--compass-color-primary)] ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n cursor: 'pointer',\n }}\n >\n <Wallet size={compact ? 14 : 16} style={{ color: 'var(--compass-color-primary)' }} />\n {balancesLoading ? (\n <Loader2 size={compact ? 12 : 14} className=\"animate-spin\" style={{ color: 'var(--compass-color-text-secondary)' }} />\n ) : (\n <span\n className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n )}\n </button>\n\n {/* Fund Button */}\n <button\n onClick={handleOpenModal}\n className={`rounded-md font-medium transition-colors ${compact ? 'px-2 py-1 text-xs' : 'px-3 py-1.5 text-sm'}`}\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n Fund\n </button>\n\n {/* Account Balances Modal */}\n <AccountBalancesModal\n isOpen={isBalancesModalOpen}\n onClose={() => setIsBalancesModalOpen(false)}\n balances={tokenBalances}\n totalUsdValue={totalUsdValue.toString()}\n isLoading={balancesLoading}\n earnAccountAddress={earnAccountAddress ?? undefined}\n />\n\n {/* Transfer Modal */}\n <ActionModal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n title=\"Transfer Funds\"\n >\n <div className=\"flex flex-col gap-4\">\n {/* Action Tabs */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n {(['deposit', 'withdraw'] as const).map((action) => (\n <button\n key={action}\n onClick={() => handleActionChange(action)}\n disabled={isProcessing}\n className=\"flex-1 py-2 rounded-md text-sm font-medium capitalize transition-all flex items-center justify-center gap-2\"\n style={{\n backgroundColor:\n activeAction === action ? 'var(--compass-color-surface)' : 'transparent',\n color:\n activeAction === action\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {action === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : (\n <ArrowUpRight size={14} />\n )}\n {action}\n </button>\n ))}\n </div>\n\n {/* Token Selector */}\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Token\n </label>\n <TokenSelector\n tokens={TRANSFER_TOKENS}\n selectedToken={selectedToken}\n onSelect={setSelectedToken}\n balances={activeAction === 'deposit' ? eoaBalances : earnBalanceAmounts}\n disabled={isProcessing}\n />\n </div>\n\n {/* Amount Input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available: {formatAmount(getMaxBalance())} {selectedToken}\n </span>\n </div>\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => {\n setAmount(e.target.value);\n setError(null);\n }}\n placeholder=\"0.00\"\n disabled={isProcessing}\n className=\"flex-1 bg-transparent outline-none text-lg font-mono\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {selectedToken}\n </span>\n </div>\n </div>\n\n {/* Quick Amount Buttons */}\n <div className=\"flex gap-2\">\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n disabled={isProcessing}\n className=\"flex-1 py-1.5 rounded-md text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 rounded-lg text-sm text-center\"\n style={{\n backgroundColor:\n transferState === 'success'\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted)',\n color:\n transferState === 'success'\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Submit Button */}\n <button\n onClick={handleTransfer}\n disabled={isProcessing || !amount || parseFloat(amount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n {isProcessing && <Loader2 size={18} className=\"animate-spin\" />}\n {isProcessing\n ? 'Processing...'\n : activeAction === 'deposit'\n ? 'Deposit to Earn Account'\n : 'Withdraw to Wallet'}\n </button>\n\n {/* Gas Sponsorship Note */}\n <p\n className=\"text-xs text-center\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored by Compass\n </p>\n </div>\n </ActionModal>\n </>\n );\n}\n","'use client';\n\nimport { TrendingUp } from 'lucide-react';\nimport type { VaultData, UserVaultPosition, ApyPeriod } from './types';\n\ninterface VaultCardProps {\n vault: VaultData & { userPosition?: UserVaultPosition };\n showApy: boolean;\n apyPeriods: ApyPeriod[];\n showTvl: boolean;\n showUserPosition: boolean;\n onClick: () => void;\n}\n\nfunction formatTVL(tvl: string | null): string {\n if (!tvl) return '$0';\n const num = parseFloat(tvl);\n if (isNaN(num)) return '$0';\n if (num >= 1_000_000_000) return `$${(num / 1_000_000_000).toFixed(2)}B`;\n if (num >= 1_000_000) return `$${(num / 1_000_000).toFixed(2)}M`;\n if (num >= 1_000) return `$${(num / 1_000).toFixed(2)}K`;\n return `$${num.toFixed(2)}`;\n}\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n const num = parseFloat(apy);\n if (isNaN(num)) return '0.00%';\n return `${num.toFixed(2)}%`;\n}\n\nexport function VaultCard({\n vault,\n showApy,\n apyPeriods,\n showTvl,\n showUserPosition,\n onClick,\n}: VaultCardProps) {\n const getApyValue = (period: ApyPeriod): string | null => {\n switch (period) {\n case '7d': return vault.apy7d;\n case '30d': return vault.apy30d;\n case '90d': return vault.apy90d;\n }\n };\n\n const primaryApy = getApyValue(apyPeriods[0] || '7d');\n const hasPosition = vault.userPosition && parseFloat(vault.userPosition.balance) > 0;\n\n return (\n <button\n onClick={onClick}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Vault Info */}\n <div className=\"flex flex-col gap-1\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {vault.name}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {vault.assetSymbol}\n </span>\n </div>\n\n {/* Right: APY */}\n {showApy && (\n <div className=\"flex items-center gap-1\">\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(primaryApy)}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: TVL and Position */}\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n {showTvl && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n TVL\n </span>\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatTVL(vault.tvlUsd)}\n </span>\n </div>\n )}\n\n {showUserPosition && hasPosition && (\n <div className=\"flex flex-col items-end\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Your Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(vault.userPosition!.balance).toFixed(4)} {vault.assetSymbol}\n </span>\n </div>\n )}\n </div>\n </button>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { VaultData, UserVaultPosition, SortOption } from './types';\n\ninterface UseVaultsDataOptions {\n sortBy?: SortOption;\n assetFilter?: string[];\n minApy?: number;\n minTvl?: number;\n}\n\nexport function useVaultsData(options: UseVaultsDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'apy_7d', assetFilter, minApy, minTvl } = options;\n\n // Fetch vaults\n const vaultsQuery = useQuery({\n queryKey: ['vaults', chainId, sortBy, assetFilter, minApy, minTvl],\n queryFn: async (): Promise<VaultData[]> => {\n const assetSymbol = assetFilter && assetFilter.length === 1 ? assetFilter[0] : undefined;\n\n const response = await client.earn.earnVaults({\n chain: chainId as any,\n orderBy: sortBy === 'tvl' ? 'tvl_usd' : sortBy,\n direction: 'desc',\n limit: 100,\n ...(assetSymbol && { assetSymbol }),\n } as any);\n\n let vaults = ((response as any).vaults || []).map((v: any) => ({\n vaultAddress: v.vaultAddress,\n name: v.name || 'Unknown Vault',\n assetSymbol: v.assetSymbol || 'UNKNOWN',\n apy7d: v.apy7d ?? null,\n apy30d: v.apy30d ?? null,\n apy90d: v.apy90d ?? null,\n tvlUsd: v.tvlUsd ?? null,\n }));\n\n // Filter by multiple assets client-side\n if (assetFilter && assetFilter.length > 1) {\n vaults = vaults.filter((v: VaultData) =>\n assetFilter.includes(v.assetSymbol.toUpperCase())\n );\n }\n\n // Apply min APY filter\n if (minApy !== undefined && minApy > 0) {\n vaults = vaults.filter((v: VaultData) => {\n const apy = parseFloat(v.apy7d || '0');\n return apy >= minApy;\n });\n }\n\n // Apply min TVL filter\n if (minTvl !== undefined && minTvl > 0) {\n vaults = vaults.filter((v: VaultData) => {\n const tvl = parseFloat(v.tvlUsd || '0');\n return tvl >= minTvl;\n });\n }\n\n return vaults;\n },\n staleTime: 30 * 1000,\n });\n\n // Fetch user positions if connected\n const positionsQuery = useQuery({\n queryKey: ['vaultPositions', chainId, address],\n queryFn: async (): Promise<UserVaultPosition[]> => {\n if (!address) return [];\n\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n\n return ((response as any).vaults || []).map((p: any) => ({\n vaultAddress: p.vaultAddress,\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n // Merge vaults with positions\n const vaultsWithPositions = (vaultsQuery.data || []).map((vault) => {\n const position = positionsQuery.data?.find(\n (p) => p.vaultAddress.toLowerCase() === vault.vaultAddress.toLowerCase()\n );\n return { ...vault, userPosition: position };\n });\n\n return {\n vaults: vaultsWithPositions,\n isLoading: vaultsQuery.isLoading,\n isError: vaultsQuery.isError,\n error: vaultsQuery.error,\n refetch: () => {\n vaultsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { Search, Loader2, SlidersHorizontal } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { VaultCard } from './VaultCard';\nimport { useVaultsData } from './useVaultsData';\nimport type { VaultsListProps, VaultData, UserVaultPosition, SortOption } from './types';\n\n/**\n * VaultsList widget displays ERC-4626 yield vaults with APY, TVL, and user positions.\n *\n * @example\n * ```tsx\n * <VaultsList\n * showApy={true}\n * showTvl={true}\n * showUserPosition={true}\n * onVaultSelect={(vault) => console.log('Selected:', vault)}\n * />\n * ```\n */\nexport function VaultsList({\n showApy = true,\n apyPeriods = ['7d', '30d', '90d'],\n showTvl = true,\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n showSort = true,\n defaultSort = 'apy_7d',\n assetFilter,\n minApy,\n minTvl: initialMinTvl,\n showTvlFilter = true,\n onVaultSelect,\n onDeposit,\n onWithdraw,\n}: VaultsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState<SortOption>(defaultSort);\n const [selectedVault, setSelectedVault] = useState<(VaultData & { userPosition?: UserVaultPosition }) | null>(null);\n const [minTvlFilter, setMinTvlFilter] = useState<number | undefined>(initialMinTvl);\n const [showFilterPanel, setShowFilterPanel] = useState(false);\n\n const { vaults, isLoading, isError, refetch } = useVaultsData({\n sortBy,\n assetFilter,\n minApy,\n minTvl: minTvlFilter,\n });\n\n const handleMinTvlChange = useCallback((value: string) => {\n const num = parseFloat(value);\n setMinTvlFilter(isNaN(num) || num <= 0 ? undefined : num);\n }, []);\n\n // Filter by search query\n const filteredVaults = useMemo(() => {\n if (!searchQuery) return vaults;\n const query = searchQuery.toLowerCase();\n return vaults.filter(\n (v) =>\n v.name.toLowerCase().includes(query) ||\n v.assetSymbol.toLowerCase().includes(query)\n );\n }, [vaults, searchQuery]);\n\n const handleVaultClick = (vault: VaultData & { userPosition?: UserVaultPosition }) => {\n setSelectedVault(vault);\n onVaultSelect?.(vault);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onDeposit?.(selectedVault!, amount, txHash);\n } else {\n onWithdraw?.(selectedVault!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search, Sort, and Filter */}\n {(showSearch || showSort || showTvlFilter) && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-2\">\n {showSearch && (\n <div\n className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search vaults...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"px-3 py-2 rounded-lg border text-sm cursor-pointer\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n >\n <option value=\"apy_7d\">APY (7D)</option>\n <option value=\"apy_30d\">APY (30D)</option>\n <option value=\"apy_90d\">APY (90D)</option>\n <option value=\"tvl\">TVL</option>\n </select>\n )}\n\n {showTvlFilter && (\n <button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"px-3 py-2 rounded-lg border text-sm flex items-center gap-2\"\n style={{\n backgroundColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary-muted)' : 'var(--compass-color-background)',\n borderColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n }}\n >\n <SlidersHorizontal size={14} />\n Filter\n </button>\n )}\n </div>\n\n {/* TVL Filter Panel */}\n {showTvlFilter && showFilterPanel && (\n <div\n className=\"flex items-center gap-3 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <label\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Min TVL:\n </label>\n <div className=\"flex items-center gap-2\">\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>$</span>\n <input\n type=\"number\"\n placeholder=\"0\"\n value={minTvlFilter || ''}\n onChange={(e) => handleMinTvlChange(e.target.value)}\n className=\"w-24 px-2 py-1 rounded border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs px-2 py-1 rounded\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Clear\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Vault List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load vaults. Please try again.\n </div>\n ) : filteredVaults.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No vaults found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredVaults.map((vault) => (\n <VaultCard\n key={vault.vaultAddress}\n vault={vault}\n showApy={showApy}\n apyPeriods={apyPeriods}\n showTvl={showTvl}\n showUserPosition={showUserPosition}\n onClick={() => handleVaultClick(vault)}\n />\n ))}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedVault && (\n <ActionModal\n isOpen={!!selectedVault}\n onClose={() => setSelectedVault(null)}\n title={selectedVault.name}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedVault.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedVault.userPosition.pnl}\n tokenSymbol={selectedVault.assetSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedVault.userPosition?.deposits?.length || selectedVault.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedVault.userPosition?.deposits}\n withdrawals={selectedVault.userPosition?.withdrawals}\n tokenSymbol={selectedVault.assetSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"VAULT\"\n venueAddress={selectedVault.vaultAddress}\n venueToken={selectedVault.assetSymbol}\n positionBalance={selectedVault.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { AaveMarketData, UserAavePosition, SortOption } from './types';\n\ninterface UseAaveDataOptions {\n sortBy?: SortOption;\n assetFilter?: string[];\n}\n\nexport function useAaveData(options: UseAaveDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'supply_apy', assetFilter } = options;\n\n // Fetch Aave markets\n const marketsQuery = useQuery({\n queryKey: ['aaveMarkets', chainId, sortBy, assetFilter],\n queryFn: async (): Promise<AaveMarketData[]> => {\n const response = await client.earn.earnAaveMarkets({\n chain: chainId as any,\n } as any);\n\n // Response has markets as a dictionary keyed by token symbol\n // { markets: { USDC: { chains: { base: { supplyApy, address, borrowApy } } }, ... } }\n // Note: Aave API does NOT provide TVL data\n const marketsDict = (response as any).markets || {};\n let markets: AaveMarketData[] = [];\n\n for (const [symbol, tokenData] of Object.entries(marketsDict)) {\n // If assetFilter is provided, only include matching symbols\n if (assetFilter && assetFilter.length > 0) {\n if (!assetFilter.includes(symbol.toUpperCase())) {\n continue;\n }\n }\n\n const token = tokenData as any;\n const chainData = token.chains?.[chainId];\n if (chainData) {\n markets.push({\n marketAddress: chainData.address || '',\n reserveSymbol: symbol,\n underlyingSymbol: symbol,\n supplyApy: chainData.supplyApy?.toString() ?? null,\n borrowApy: chainData.borrowApy?.toString() ?? null,\n // Aave API doesn't provide TVL\n tvlUsd: null,\n });\n }\n }\n\n // Sort by supply APY (descending)\n markets.sort((a: AaveMarketData, b: AaveMarketData) => {\n return parseFloat(b.supplyApy || '0') - parseFloat(a.supplyApy || '0');\n });\n\n return markets;\n },\n staleTime: 30 * 1000,\n });\n\n // Fetch user positions\n const positionsQuery = useQuery({\n queryKey: ['aavePositions', chainId, address],\n queryFn: async (): Promise<UserAavePosition[]> => {\n if (!address) return [];\n\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n\n return ((response as any).aave || []).map((p: any) => ({\n marketAddress: p.marketAddress || '',\n reserveSymbol: p.reserveSymbol || '',\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n // Merge markets with positions\n const marketsWithPositions = (marketsQuery.data || []).map((market) => {\n const position = positionsQuery.data?.find(\n (p) => p.reserveSymbol.toLowerCase() === market.reserveSymbol.toLowerCase()\n );\n return { ...market, userPosition: position };\n });\n\n return {\n markets: marketsWithPositions,\n isLoading: marketsQuery.isLoading,\n isError: marketsQuery.isError,\n error: marketsQuery.error,\n refetch: () => {\n marketsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { Search, Loader2, TrendingUp } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { useAaveData } from './useAaveData';\nimport type { AaveMarketsListProps, AaveMarketData, UserAavePosition, SortOption } from './types';\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n const num = parseFloat(apy);\n // API returns APY already as percentage (e.g., 3.5 for 3.5%)\n return `${num.toFixed(2)}%`;\n}\n\nfunction formatTVL(tvl: string | null): string {\n if (!tvl) return '$0';\n const num = parseFloat(tvl);\n if (num >= 1_000_000_000) return `$${(num / 1_000_000_000).toFixed(2)}B`;\n if (num >= 1_000_000) return `$${(num / 1_000_000).toFixed(2)}M`;\n if (num >= 1_000) return `$${(num / 1_000).toFixed(2)}K`;\n return `$${num.toFixed(2)}`;\n}\n\n/**\n * AaveMarketsList widget displays Aave V3 lending markets with supply APY.\n *\n * @example\n * ```tsx\n * <AaveMarketsList\n * showApy={true}\n * showUserPosition={true}\n * onMarketSelect={(market) => console.log('Selected:', market)}\n * />\n * ```\n */\nexport function AaveMarketsList({\n showApy = true,\n showTvl = false, // Aave API doesn't provide TVL data\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n showSort = false, // Only one sort option (APY), so hide by default\n defaultSort = 'supply_apy',\n assetFilter,\n onMarketSelect,\n onSupply,\n onWithdraw,\n}: AaveMarketsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState<SortOption>(defaultSort);\n const [selectedMarket, setSelectedMarket] = useState<(AaveMarketData & { userPosition?: UserAavePosition }) | null>(null);\n\n const { markets, isLoading, isError, refetch } = useAaveData({ sortBy, assetFilter });\n\n const filteredMarkets = useMemo(() => {\n if (!searchQuery) return markets;\n const query = searchQuery.toLowerCase();\n return markets.filter((m) =>\n m.reserveSymbol.toLowerCase().includes(query) ||\n m.underlyingSymbol.toLowerCase().includes(query)\n );\n }, [markets, searchQuery]);\n\n const handleMarketClick = (market: AaveMarketData & { userPosition?: UserAavePosition }) => {\n setSelectedMarket(market);\n onMarketSelect?.(market);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onSupply?.(selectedMarket!, amount, txHash);\n } else {\n onWithdraw?.(selectedMarket!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search and Sort */}\n {(showSearch || showSort) && (\n <div className=\"flex gap-2\">\n {showSearch && (\n <div\n className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search markets...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"px-3 py-2 rounded-lg border text-sm cursor-pointer\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n >\n <option value=\"supply_apy\">Supply APY</option>\n </select>\n )}\n </div>\n )}\n\n {/* Market List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load Aave markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No markets found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredMarkets.map((market) => {\n const hasPosition = market.userPosition && parseFloat(market.userPosition.balance) > 0;\n return (\n <button\n key={market.marketAddress}\n onClick={() => handleMarketClick(market)}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col gap-1\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {market.underlyingSymbol}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Aave V3\n </span>\n </div>\n\n {/* Right: APY */}\n {showApy && (\n <div className=\"flex items-center gap-1\">\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(market.supplyApy)}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: TVL and Position */}\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n {showTvl && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n TVL\n </span>\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatTVL(market.tvlUsd)}\n </span>\n </div>\n )}\n\n {showUserPosition && hasPosition && (\n <div className=\"flex flex-col items-end\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Your Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(market.userPosition!.balance).toFixed(4)} {market.underlyingSymbol}\n </span>\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedMarket && (\n <ActionModal\n isOpen={!!selectedMarket}\n onClose={() => setSelectedMarket(null)}\n title={`${selectedMarket.underlyingSymbol} - Aave`}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedMarket.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedMarket.userPosition.pnl}\n tokenSymbol={selectedMarket.underlyingSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedMarket.userPosition?.deposits?.length || selectedMarket.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedMarket.userPosition?.deposits}\n withdrawals={selectedMarket.userPosition?.withdrawals}\n tokenSymbol={selectedMarket.underlyingSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"AAVE\"\n venueAddress={selectedMarket.marketAddress}\n venueToken={selectedMarket.underlyingSymbol}\n positionBalance={selectedMarket.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { PendleMarketData, UserPendlePosition, SortOption } from './types';\n\ninterface UsePendleDataOptions {\n sortBy?: SortOption;\n assetFilter?: string[];\n minTvl?: number;\n}\n\nexport function usePendleData(options: UsePendleDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'fixed_apy', assetFilter, minTvl } = options;\n\n const marketsQuery = useQuery({\n queryKey: ['pendleMarkets', chainId, sortBy, assetFilter, minTvl],\n queryFn: async (): Promise<PendleMarketData[]> => {\n // If single asset filter, pass to API for filtering\n const underlyingSymbol = assetFilter && assetFilter.length === 1 ? assetFilter[0] : undefined;\n\n // Map sortBy to API orderBy\n const orderBy = sortBy === 'tvl' ? 'tvl_usd' : 'implied_apy';\n\n const response = await client.earn.earnPendleMarkets({\n chain: chainId as any,\n orderBy,\n direction: 'desc',\n limit: 100,\n ...(underlyingSymbol && { underlyingSymbol }),\n } as any);\n\n // Response has markets as an array\n // expiry is a Unix timestamp in seconds\n const now = Date.now() / 1000; // Current time in seconds\n let markets = ((response as any).markets || [])\n .filter((m: any) => m.expiry && m.expiry > now) // Only active markets\n .map((m: any) => ({\n marketAddress: m.marketAddress || '',\n ptAddress: m.ptAddress || '',\n name: m.ptName || `PT-${m.underlyingSymbol || 'UNKNOWN'}`,\n underlyingSymbol: m.underlyingSymbol || 'UNKNOWN',\n // Use impliedApy as the main APY (this is what wallet-earn displays)\n fixedApy: m.impliedApy?.toString() ?? null,\n impliedApy: m.impliedApy?.toString() ?? null,\n tvlUsd: m.tvlUsd?.toString() ?? null,\n // Convert Unix timestamp to ISO string for display\n expiry: new Date(m.expiry * 1000).toISOString(),\n }));\n\n // If multiple asset filters provided, filter client-side (API only supports single asset)\n if (assetFilter && assetFilter.length > 1) {\n markets = markets.filter((m: PendleMarketData) =>\n assetFilter.includes(m.underlyingSymbol.toUpperCase())\n );\n }\n\n // Apply min TVL filter\n if (minTvl !== undefined && minTvl > 0) {\n markets = markets.filter((m: PendleMarketData) => {\n const tvl = parseFloat(m.tvlUsd || '0');\n return tvl >= minTvl;\n });\n }\n\n // Client-side sorting for expiry (API doesn't support this sort option)\n if (sortBy === 'expiry') {\n markets.sort((a: PendleMarketData, b: PendleMarketData) => {\n return new Date(a.expiry).getTime() - new Date(b.expiry).getTime();\n });\n }\n\n return markets;\n },\n staleTime: 30 * 1000,\n });\n\n const positionsQuery = useQuery({\n queryKey: ['pendlePositions', chainId, address],\n queryFn: async (): Promise<UserPendlePosition[]> => {\n if (!address) return [];\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n return ((response as any).pendlePt || []).map((p: any) => ({\n marketAddress: p.marketAddress || '',\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const marketsWithPositions = (marketsQuery.data || []).map((market) => {\n const position = positionsQuery.data?.find(\n (p) => p.marketAddress.toLowerCase() === market.marketAddress.toLowerCase()\n );\n return { ...market, userPosition: position };\n });\n\n return {\n markets: marketsWithPositions,\n isLoading: marketsQuery.isLoading,\n isError: marketsQuery.isError,\n error: marketsQuery.error,\n refetch: () => {\n marketsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { Search, Loader2, TrendingUp, Calendar, SlidersHorizontal } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { usePendleData } from './usePendleData';\nimport type { PendleMarketsListProps, PendleMarketData, UserPendlePosition, SortOption } from './types';\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n // API returns APY already as percentage (e.g., 3.5 for 3.5%)\n return `${parseFloat(apy).toFixed(2)}%`;\n}\n\nfunction formatExpiry(expiry: string): string {\n const date = new Date(expiry);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\nfunction formatTVL(tvl: string | null): string {\n if (!tvl) return '$0';\n const num = parseFloat(tvl);\n if (num >= 1_000_000_000) return `$${(num / 1_000_000_000).toFixed(2)}B`;\n if (num >= 1_000_000) return `$${(num / 1_000_000).toFixed(2)}M`;\n if (num >= 1_000) return `$${(num / 1_000).toFixed(2)}K`;\n return `$${num.toFixed(2)}`;\n}\n\n/**\n * PendleMarketsList widget displays Pendle fixed-yield markets.\n *\n * @example\n * ```tsx\n * <PendleMarketsList\n * showApy={true}\n * showExpiry={true}\n * showTvl={true}\n * onMarketSelect={(market) => console.log('Selected:', market)}\n * />\n * ```\n */\nexport function PendleMarketsList({\n showApy = true,\n showTvl = true,\n showExpiry = true,\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n showSort = true,\n defaultSort = 'fixed_apy',\n assetFilter,\n minTvl: initialMinTvl,\n showTvlFilter = true,\n onMarketSelect,\n onDeposit,\n onWithdraw,\n}: PendleMarketsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState<SortOption>(defaultSort);\n const [selectedMarket, setSelectedMarket] = useState<(PendleMarketData & { userPosition?: UserPendlePosition }) | null>(null);\n const [minTvlFilter, setMinTvlFilter] = useState<number | undefined>(initialMinTvl);\n const [showFilterPanel, setShowFilterPanel] = useState(false);\n\n const { markets, isLoading, isError, refetch } = usePendleData({ sortBy, assetFilter, minTvl: minTvlFilter });\n\n const handleMinTvlChange = useCallback((value: string) => {\n const num = parseFloat(value);\n setMinTvlFilter(isNaN(num) || num <= 0 ? undefined : num);\n }, []);\n\n const filteredMarkets = useMemo(() => {\n if (!searchQuery) return markets;\n const query = searchQuery.toLowerCase();\n return markets.filter((m) =>\n m.name.toLowerCase().includes(query) ||\n m.underlyingSymbol.toLowerCase().includes(query)\n );\n }, [markets, searchQuery]);\n\n const handleMarketClick = (market: PendleMarketData & { userPosition?: UserPendlePosition }) => {\n setSelectedMarket(market);\n onMarketSelect?.(market);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onDeposit?.(selectedMarket!, amount, txHash);\n } else {\n onWithdraw?.(selectedMarket!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search, Sort, and Filter */}\n {(showSearch || showSort || showTvlFilter) && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-2\">\n {showSearch && (\n <div\n className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search markets...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"px-3 py-2 rounded-lg border text-sm cursor-pointer\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n >\n <option value=\"fixed_apy\">Fixed APY</option>\n <option value=\"tvl\">TVL</option>\n <option value=\"expiry\">Expiry</option>\n </select>\n )}\n\n {showTvlFilter && (\n <button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"px-3 py-2 rounded-lg border text-sm flex items-center gap-2\"\n style={{\n backgroundColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary-muted)' : 'var(--compass-color-background)',\n borderColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n }}\n >\n <SlidersHorizontal size={14} />\n Filter\n </button>\n )}\n </div>\n\n {/* TVL Filter Panel */}\n {showTvlFilter && showFilterPanel && (\n <div\n className=\"flex items-center gap-3 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <label\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Min TVL:\n </label>\n <div className=\"flex items-center gap-2\">\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>$</span>\n <input\n type=\"number\"\n placeholder=\"0\"\n value={minTvlFilter || ''}\n onChange={(e) => handleMinTvlChange(e.target.value)}\n className=\"w-24 px-2 py-1 rounded border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs px-2 py-1 rounded\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Clear\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Market List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load Pendle markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No active markets found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredMarkets.map((market) => {\n const hasPosition = market.userPosition && parseFloat(market.userPosition.balance) > 0;\n return (\n <button\n key={market.marketAddress}\n onClick={() => handleMarketClick(market)}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col gap-1\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {market.name}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {market.underlyingSymbol}\n </span>\n </div>\n\n {/* Right: APY */}\n {showApy && (\n <div className=\"flex items-center gap-1\">\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(market.fixedApy)}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: TVL, Expiry, and Position */}\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex gap-4\">\n {showTvl && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n TVL\n </span>\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatTVL(market.tvlUsd)}\n </span>\n </div>\n )}\n\n {showExpiry && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Expiry\n </span>\n <div className=\"flex items-center gap-1\">\n <Calendar size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatExpiry(market.expiry)}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {showUserPosition && hasPosition && (\n <div className=\"flex flex-col items-end\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Your Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(market.userPosition!.balance).toFixed(4)} PT\n </span>\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedMarket && (\n <ActionModal\n isOpen={!!selectedMarket}\n onClose={() => setSelectedMarket(null)}\n title={selectedMarket.name}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedMarket.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedMarket.userPosition.pnl}\n tokenSymbol={selectedMarket.underlyingSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedMarket.userPosition?.deposits?.length || selectedMarket.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedMarket.userPosition?.deposits}\n withdrawals={selectedMarket.userPosition?.withdrawals}\n tokenSymbol={selectedMarket.underlyingSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"PENDLE_PT\"\n venueAddress={selectedMarket.marketAddress}\n venueToken={selectedMarket.underlyingSymbol}\n positionBalance={selectedMarket.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCompassWallet } from '../../contexts/WalletContext';\nimport type { SwapQuote } from './types';\n\ninterface UseSwapQuoteOptions {\n fromToken: string;\n toToken: string;\n amount: string;\n enabled?: boolean;\n}\n\nexport function useSwapQuote({ fromToken, toToken, amount, enabled = true }: UseSwapQuoteOptions) {\n const { chainId } = useChain();\n const { address } = useCompassWallet();\n\n const query = useQuery({\n queryKey: ['swapQuote', chainId, fromToken, toToken, amount, address],\n queryFn: async (): Promise<SwapQuote | null> => {\n if (!fromToken || !toToken || !amount || parseFloat(amount) <= 0 || !address) {\n return null;\n }\n\n try {\n const params = new URLSearchParams({\n owner: address,\n chain: chainId,\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: amount,\n });\n\n const response = await fetch(`/api/compass/swap/quote?${params}`);\n\n if (!response.ok) {\n const errorData = await response.json();\n // Extract the user-friendly message from the API error\n const errorMessage = errorData.message || errorData.error || 'Failed to get swap quote';\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n const outputAmount = data.estimatedAmountOut || '0';\n const inputAmountNum = parseFloat(amount);\n const outputAmountNum = parseFloat(outputAmount);\n\n return {\n inputAmount: amount,\n outputAmount,\n rate: inputAmountNum > 0 ? (outputAmountNum / inputAmountNum).toString() : '0',\n };\n } catch (error) {\n console.error('Failed to get swap quote:', error);\n throw error;\n }\n },\n enabled: enabled && !!address && !!fromToken && !!toToken && !!amount && parseFloat(amount) > 0,\n staleTime: 10 * 1000,\n refetchInterval: 15 * 1000,\n retry: 1,\n });\n\n return {\n quote: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { ArrowDownUp, Loader2, AlertCircle } from 'lucide-react';\nimport { ChainSwitcher } from '../../shared/ChainSwitcher';\nimport { WalletStatus } from '../../shared/WalletStatus';\nimport { EarnAccountBalance } from '../../shared/EarnAccountBalance';\nimport { useSwapQuote } from './useSwapQuote';\nimport { useCompassWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { SwapWidgetProps } from './types';\n\nconst DEFAULT_TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'];\n\nexport function SwapWidget({\n layout = 'full',\n defaultFromToken = 'ETH',\n defaultToToken = 'USDC',\n allowedTokens = DEFAULT_TOKENS,\n showReverseButton = true,\n showSettings = false,\n onSwapSuccess,\n onSwapError,\n}: SwapWidgetProps) {\n const [fromToken, setFromToken] = useState(defaultFromToken);\n const [toToken, setToToken] = useState(defaultToToken);\n const [fromAmount, setFromAmount] = useState('');\n const [isSwapping, setIsSwapping] = useState(false);\n const [swapStatus, setSwapStatus] = useState<string>('');\n\n const { address, isConnected, signTypedData } = useCompassWallet();\n const { chainId } = useChain();\n\n const { quote, isLoading: isQuoteLoading, error: quoteError } = useSwapQuote({\n fromToken,\n toToken,\n amount: fromAmount,\n enabled: !!fromAmount && parseFloat(fromAmount) > 0,\n });\n\n const handleReverse = useCallback(() => {\n setFromToken(toToken);\n setToToken(fromToken);\n setFromAmount('');\n }, [fromToken, toToken]);\n\n const handleSwap = useCallback(async () => {\n if (!address || !fromAmount || !quote) return;\n\n setIsSwapping(true);\n setSwapStatus('Preparing swap...');\n\n try {\n // Step 1: Call swap/prepare to get EIP-712 data for signing\n const prepareResponse = await fetch('/api/compass/swap/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: fromAmount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const error = await prepareResponse.json();\n throw new Error(error.error || 'Failed to prepare swap');\n }\n\n const prepareData = await prepareResponse.json();\n const { eip712, normalizedTypes } = prepareData;\n\n if (!eip712) {\n throw new Error('No EIP-712 data returned from prepare');\n }\n\n // Step 2: Sign the EIP-712 typed data with user's wallet\n setSwapStatus('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain: eip712.domain,\n types: normalizedTypes || eip712.types,\n primaryType: 'SafeTx',\n message: eip712.message,\n });\n\n // Step 3: Execute the swap with the signature\n setSwapStatus('Executing swap...');\n\n const executeResponse = await fetch('/api/compass/swap/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712,\n signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const error = await executeResponse.json();\n throw new Error(error.error || 'Failed to execute swap');\n }\n\n const executeData = await executeResponse.json();\n const txHash = executeData.txHash;\n\n setSwapStatus('Swap successful!');\n onSwapSuccess?.(fromToken, toToken, fromAmount, quote.outputAmount, txHash);\n setFromAmount('');\n\n // Clear status after a delay\n setTimeout(() => setSwapStatus(''), 3000);\n } catch (error) {\n console.error('Swap failed:', error);\n setSwapStatus('');\n onSwapError?.(error as Error);\n } finally {\n setIsSwapping(false);\n }\n }, [address, fromAmount, quote, chainId, fromToken, toToken, signTypedData, onSwapSuccess, onSwapError]);\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header - always show chain switcher and wallet status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {/* From Token */}\n <div className=\"p-4 rounded-xl border relative\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>From</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"flex-1 bg-transparent outline-none text-2xl font-mono min-w-0\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <select\n value={fromToken}\n onChange={(e) => setFromToken(e.target.value)}\n className=\"px-3 py-2 rounded-lg border text-sm font-medium cursor-pointer flex-shrink-0\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)' }}\n >\n {allowedTokens.filter(t => t !== toToken).map((token) => (\n <option key={token} value={token}>{token}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Reverse Button */}\n {showReverseButton && (\n <div className=\"flex justify-center -my-1 relative z-10\">\n <button\n onClick={handleReverse}\n className=\"p-2 rounded-full border transition-colors hover:opacity-80\"\n style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}\n >\n <ArrowDownUp size={16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n )}\n\n {/* To Token */}\n <div className=\"p-4 rounded-xl border\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>To</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1 text-2xl font-mono\" style={{ color: isQuoteLoading ? 'var(--compass-color-text-tertiary)' : 'var(--compass-color-text)' }}>\n {isQuoteLoading ? (\n <span className=\"flex items-center gap-2\">\n <Loader2 size={16} className=\"animate-spin\" />\n Loading...\n </span>\n ) : quote?.outputAmount ? (\n parseFloat(quote.outputAmount).toFixed(8)\n ) : (\n '0.00000000'\n )}\n </div>\n <select\n value={toToken}\n onChange={(e) => setToToken(e.target.value)}\n className=\"px-3 py-2 rounded-lg border text-sm font-medium cursor-pointer\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)' }}\n >\n {allowedTokens.filter(t => t !== fromToken).map((token) => (\n <option key={token} value={token}>{token}</option>\n ))}\n </select>\n </div>\n </div>\n </div>\n\n {/* Quote Details */}\n {quote && (\n <div className=\"flex items-center justify-between text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n <span>Rate</span>\n <span className=\"font-mono\">1 {fromToken} = {parseFloat(quote.rate).toFixed(6)} {toToken}</span>\n </div>\n )}\n\n {/* Quote Error */}\n {quoteError && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n <AlertCircle size={16} />\n <span>{quoteError.message}</span>\n </div>\n )}\n\n {/* Swap Status */}\n {swapStatus && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: swapStatus.includes('successful') ? 'var(--compass-color-success-muted)' : 'var(--compass-color-surface)',\n color: swapStatus.includes('successful') ? 'var(--compass-color-success)' : 'var(--compass-color-text-secondary)',\n }}\n >\n {!swapStatus.includes('successful') && <Loader2 size={14} className=\"animate-spin\" />}\n {swapStatus}\n </div>\n )}\n\n {/* Swap Button */}\n {!isConnected ? (\n <div\n className=\"flex flex-col items-center gap-3 py-6 px-4 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <AlertCircle size={24} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <p\n className=\"text-sm text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Connect your wallet to swap\n </p>\n </div>\n ) : (\n <button\n onClick={handleSwap}\n disabled={isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{ backgroundColor: 'var(--compass-color-primary)', color: 'var(--compass-color-primary-text)' }}\n >\n {isSwapping && <Loader2 size={18} className=\"animate-spin\" />}\n {isSwapping ? 'Swapping...' : 'Swap'}\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { VaultsList } from '../VaultsList';\nimport { AaveMarketsList } from '../AaveMarketsList';\nimport { PendleMarketsList } from '../PendleMarketsList';\nimport { SwapWidget } from '../SwapWidget';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nconst tabs: TabConfig[] = [\n { id: 'vaults', label: 'Vaults', enabled: true },\n { id: 'aave', label: 'Aave', enabled: true },\n { id: 'pendle', label: 'Pendle', enabled: true },\n { id: 'swap', label: 'Swap', enabled: true },\n];\n\nexport function CompassEarnWidget({\n defaultTab = 'vaults',\n onTabChange,\n}: CompassEarnWidgetProps) {\n const [activeTab, setActiveTab] = useState<TabId>(defaultTab);\n\n const handleTabChange = (tab: TabId) => {\n setActiveTab(tab);\n onTabChange?.(tab);\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header */}\n <h1 className=\"font-bold text-xl\" style={{ color: 'var(--compass-color-text)' }}>\n Compass Earn\n </h1>\n\n {/* Tab Bar */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => handleTabChange(tab.id)}\n className=\"flex-1 py-2 px-3 rounded-md text-sm font-medium transition-all\"\n style={{\n backgroundColor: activeTab === tab.id ? 'var(--compass-color-primary)' : 'transparent',\n color: activeTab === tab.id ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div>\n {activeTab === 'vaults' && <VaultsList />}\n {activeTab === 'aave' && <AaveMarketsList />}\n {activeTab === 'pendle' && <PendleMarketsList />}\n {activeTab === 'swap' && <SwapWidget />}\n </div>\n </div>\n );\n}\n","import { base, mainnet, arbitrum, type Chain } from 'viem/chains';\n\nexport type SupportedChainId = 'ethereum' | 'base' | 'arbitrum';\n\nexport interface ChainConfig {\n id: SupportedChainId;\n name: string;\n viemChain: Chain;\n icon: string;\n rpcUrl?: string;\n}\n\nexport const CHAINS: Record<SupportedChainId, ChainConfig> = {\n ethereum: {\n id: 'ethereum',\n name: 'Ethereum',\n viemChain: mainnet,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n id: 'base',\n name: 'Base',\n viemChain: base,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n id: 'arbitrum',\n name: 'Arbitrum',\n viemChain: arbitrum,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n};\n\nexport const DEFAULT_CHAIN: SupportedChainId = 'base';\n\nexport const TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'cbBTC', 'USDT', 'DAI', 'SBC'] as const;\nexport type SupportedToken = (typeof TOKENS)[number];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/contexts/ApiContext.tsx","../src/contexts/ChainContext.tsx","../src/contexts/WalletContext.tsx","../src/contexts/EarnAccountContext.tsx","../src/theme/presets.ts","../src/theme/css-variables.ts","../src/theme/context.tsx","../src/provider/CompassProvider.tsx","../src/shared/ChainSwitcher.tsx","../src/shared/WalletStatus.tsx","../src/shared/ActionModal.tsx","../src/shared/PnLSummary.tsx","../src/utils/format.ts","../src/shared/TokenSelector.tsx","../src/shared/DepositWithdrawForm.tsx","../src/shared/TransactionHistory.tsx","../src/shared/EarnAccountGuard.tsx","../src/shared/AccountBalancesModal.tsx","../src/shared/EarnAccountBalance.tsx","../src/components/VaultsList/VaultCard.tsx","../src/components/VaultsList/useVaultsData.ts","../src/components/VaultsList/VaultsList.tsx","../src/components/AaveMarketsList/useAaveData.ts","../src/components/AaveMarketsList/AaveMarketsList.tsx","../src/components/PendleMarketsList/usePendleData.ts","../src/components/PendleMarketsList/PendleMarketsList.tsx","../src/components/SwapWidget/useSwapQuote.ts","../src/components/SwapWidget/SwapWidget.tsx","../src/components/CompassEarnWidget/CompassEarnWidget.tsx","../src/constants.ts"],"names":["createContext","useMemo","jsx","useContext","useState","base","useEffect","jsxs","formatUSD","ChevronDown","useQueryClient","useQuery","useCallback","Loader2","X","Wallet","Fragment","ArrowDownLeft","ArrowUpRight","formatAPY","Search","TrendingUp","formatTVL","SlidersHorizontal","AlertCircle","mainnet","arbitrum"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client';\n\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport { CompassApiSDK } from '@compass-labs/api-sdk';\n\n/**\n * Context value for the API context\n */\nexport interface ApiContextValue {\n /** The API key used to authenticate with Compass API */\n apiKey: string;\n /** The Compass API SDK client instance */\n client: CompassApiSDK;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\ninterface ApiProviderProps {\n children: ReactNode;\n apiKey: string;\n /** Optional API base URL override */\n serverURL?: string;\n}\n\n/**\n * Provider component that manages the Compass API client.\n */\nexport function ApiProvider({ children, apiKey, serverURL }: ApiProviderProps) {\n const client = useMemo(() => {\n return new CompassApiSDK({\n apiKeyAuth: apiKey,\n serverURL: serverURL || 'https://api.compasslabs.ai',\n });\n }, [apiKey, serverURL]);\n\n const value = useMemo<ApiContextValue>(\n () => ({\n apiKey,\n client,\n }),\n [apiKey, client]\n );\n\n return (\n <ApiContext.Provider value={value}>\n {children}\n </ApiContext.Provider>\n );\n}\n\n/**\n * Hook to access the Compass API client and API key.\n */\nexport function useCompassApi(): ApiContextValue {\n const context = useContext(ApiContext);\n if (!context) {\n throw new Error('useCompassApi must be used within a CompassProvider');\n }\n return context;\n}\n\n// Alias for compatibility with widgets_ui code\nexport const useEmbeddableApi = useCompassApi;\n\nexport { ApiContext };\n","'use client';\n\nimport { createContext, useContext, useState, useMemo, useEffect, type ReactNode } from 'react';\nimport { mainnet, base, arbitrum, type Chain } from 'viem/chains';\nimport type { SupportedChain } from '../provider/types';\n\nexport interface ChainConfig {\n viemChain: Chain;\n name: string;\n icon: string;\n}\n\ninterface ChainContextValue {\n chainId: SupportedChain;\n setChainId: (chain: SupportedChain) => void;\n setChain: (chain: SupportedChain) => void; // Alias for compatibility\n chain: ChainConfig;\n}\n\nconst ChainContext = createContext<ChainContextValue | null>(null);\n\nconst CHAIN_CONFIG: Record<SupportedChain, ChainConfig> = {\n ethereum: {\n viemChain: mainnet,\n name: 'Ethereum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n viemChain: base,\n name: 'Base',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n viemChain: arbitrum,\n name: 'Arbitrum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n};\n\ninterface ChainProviderProps {\n children: ReactNode;\n defaultChain: SupportedChain;\n}\n\nexport function ChainProvider({ children, defaultChain }: ChainProviderProps) {\n const [chainId, setChainIdState] = useState<SupportedChain>(defaultChain);\n\n // Load from localStorage on mount\n useEffect(() => {\n if (typeof window === 'undefined') return;\n const stored = localStorage.getItem('compass-chain');\n if (stored && stored in CHAIN_CONFIG) {\n setChainIdState(stored as SupportedChain);\n }\n }, []);\n\n const setChainId = (newChainId: SupportedChain) => {\n setChainIdState(newChainId);\n if (typeof window !== 'undefined') {\n localStorage.setItem('compass-chain', newChainId);\n }\n };\n\n const chain = useMemo(() => CHAIN_CONFIG[chainId], [chainId]);\n\n return (\n <ChainContext.Provider value={{ chainId, setChainId, setChain: setChainId, chain }}>\n {children}\n </ChainContext.Provider>\n );\n}\n\nexport function useCompassChain(): ChainContextValue {\n const context = useContext(ChainContext);\n if (!context) {\n throw new Error('useCompassChain must be used within a CompassProvider');\n }\n return context;\n}\n\n// Alias for compatibility with widgets_ui code\nexport const useChain = useCompassChain;\n\nexport { ChainContext };\n","'use client';\n\n/**\n * Wallet Context for Compass Widgets\n *\n * Provides wallet state and signing capabilities to widget components.\n * Customers bring their own wallet by passing a WalletAdapter to CompassProvider.\n */\n\nimport {\n createContext,\n useContext,\n type ReactNode,\n} from 'react';\nimport type { Address } from 'viem';\nimport type { WalletAdapter, TypedDataToSign } from '../provider/types';\n\n/**\n * Wallet Context value interface\n */\nexport interface WalletContextValue {\n /** Connected wallet address, or null if not connected */\n address: Address | null;\n /** Whether a wallet is connected */\n isConnected: boolean;\n /** Current chain ID the wallet is connected to */\n walletChainId: number | undefined;\n /** Sign EIP-712 typed data - throws if wallet not connected */\n signTypedData: (data: TypedDataToSign) => Promise<string>;\n /** Switch chain - may not be available depending on wallet adapter */\n switchChain: ((chainId: number) => Promise<void>) | null;\n /** Trigger wallet connection - may not be available depending on wallet adapter */\n login: (() => void) | null;\n /** Disconnect wallet - may not be available depending on wallet adapter */\n logout: (() => Promise<void>) | null;\n}\n\nconst WalletContext = createContext<WalletContextValue | null>(null);\n\n/**\n * Default context value when no wallet is provided\n */\nconst disconnectedWallet: WalletContextValue = {\n address: null,\n isConnected: false,\n walletChainId: undefined,\n signTypedData: async () => {\n throw new Error('No wallet connected. Please connect a wallet first.');\n },\n switchChain: null,\n login: null,\n logout: null,\n};\n\ninterface WalletProviderProps {\n children: ReactNode;\n wallet?: WalletAdapter;\n}\n\n/**\n * Provider component for wallet functionality\n */\nexport function WalletProvider({ children, wallet }: WalletProviderProps) {\n const value: WalletContextValue = wallet\n ? {\n address: wallet.address,\n isConnected: wallet.address !== null,\n walletChainId: wallet.chainId,\n signTypedData: wallet.signTypedData,\n switchChain: wallet.switchChain ?? null,\n login: wallet.login ?? null,\n logout: wallet.logout ?? null,\n }\n : disconnectedWallet;\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n </WalletContext.Provider>\n );\n}\n\n/**\n * Hook to access the wallet context\n */\nexport function useCompassWallet(): WalletContextValue {\n const context = useContext(WalletContext);\n\n if (!context) {\n return disconnectedWallet;\n }\n\n return context;\n}\n\n// Alias for compatibility\nexport const useEmbeddableWallet = useCompassWallet;\n\nexport { WalletContext };\n","'use client';\n\n/**\n * Earn Account Context for Compass Widgets\n *\n * Manages the user's Earn account (Safe wallet) state:\n * - Checks if account exists when wallet connects\n * - Provides account creation functionality\n * - All widgets check this before allowing deposit/withdraw operations\n */\n\nimport {\n createContext,\n useContext,\n useState,\n useCallback,\n type ReactNode,\n} from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport type { Address } from 'viem';\nimport { useEmbeddableWallet } from './WalletContext';\nimport { useChain } from './ChainContext';\n\nexport interface EarnAccountContextValue {\n /** The user's earn account address (Safe wallet) */\n earnAccountAddress: Address | null;\n /** Whether the earn account has been deployed on-chain */\n isDeployed: boolean;\n /** Whether we're checking the account status */\n isChecking: boolean;\n /** Whether we're creating the account */\n isCreating: boolean;\n /** Error from checking or creating */\n error: Error | null;\n /** Create the earn account (gas sponsored) */\n createAccount: () => Promise<Address>;\n /** Refresh account status */\n refetch: () => void;\n}\n\nconst EarnAccountContext = createContext<EarnAccountContextValue | null>(null);\n\ninterface EarnAccountProviderProps {\n children: ReactNode;\n}\n\nexport function EarnAccountProvider({ children }: EarnAccountProviderProps) {\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n const queryClient = useQueryClient();\n\n const [isCreating, setIsCreating] = useState(false);\n const [createError, setCreateError] = useState<Error | null>(null);\n\n // Check earn account status when wallet is connected\n const {\n data: accountData,\n isLoading: isChecking,\n error: checkError,\n refetch,\n } = useQuery({\n queryKey: ['earnAccount', address, chainId],\n queryFn: async () => {\n if (!address) return null;\n\n const response = await fetch(\n `/api/compass/earn-account/check?owner=${address}&chain=${chainId}`\n );\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || 'Failed to check earn account');\n }\n\n return response.json() as Promise<{\n earnAccountAddress: string;\n isDeployed: boolean;\n needsCreation: boolean;\n }>;\n },\n enabled: !!address,\n staleTime: 60 * 1000, // 1 minute\n refetchOnMount: true,\n });\n\n // Create earn account\n const createAccount = useCallback(async (): Promise<Address> => {\n if (!address) {\n throw new Error('No wallet connected');\n }\n\n if (accountData?.isDeployed) {\n return accountData.earnAccountAddress as Address;\n }\n\n setIsCreating(true);\n setCreateError(null);\n\n try {\n const response = await fetch('/api/compass/create-account', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n }),\n });\n\n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || 'Failed to create earn account');\n }\n\n const result = await response.json();\n\n // Invalidate the query to refetch account status\n await queryClient.invalidateQueries({\n queryKey: ['earnAccount', address, chainId],\n });\n\n return result.earnAccountAddress as Address;\n } catch (error) {\n const err = error instanceof Error ? error : new Error('Unknown error');\n setCreateError(err);\n throw err;\n } finally {\n setIsCreating(false);\n }\n }, [address, chainId, accountData, queryClient]);\n\n const value: EarnAccountContextValue = {\n earnAccountAddress: (accountData?.earnAccountAddress as Address) || null,\n isDeployed: accountData?.isDeployed ?? false,\n isChecking,\n isCreating,\n error: checkError instanceof Error ? checkError : createError,\n createAccount,\n refetch,\n };\n\n return (\n <EarnAccountContext.Provider value={value}>\n {children}\n </EarnAccountContext.Provider>\n );\n}\n\n/**\n * Hook to access earn account state and actions\n */\nexport function useEarnAccount(): EarnAccountContextValue {\n const context = useContext(EarnAccountContext);\n\n if (!context) {\n throw new Error('useEarnAccount must be used within a CompassProvider');\n }\n\n return context;\n}\n\nexport { EarnAccountContext };\n","/**\n * Theme Presets for Compass Embeddable Widgets\n *\n * This module provides 6 pre-configured theme presets covering various\n * visual styles and accessibility needs:\n *\n * - compass-dark/light: Brand themes with indigo primary and glassmorphism\n * - minimal-dark/light: Flat design with sharp corners and no shadows\n * - high-contrast-dark/light: Accessible themes with bold colors and larger text\n */\n\nimport type { CompassTheme, ThemePresetName } from './types';\n\n// ============================================================================\n// Shared Typography & Spacing Configurations\n// ============================================================================\n\nconst baseTypography = {\n fontFamily:\n 'Inter, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n fontFamilyMono:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, \"Liberation Mono\", monospace',\n heading: {\n fontSize: '1.5rem',\n lineHeight: 1.2,\n fontWeight: 600,\n letterSpacing: '-0.02em',\n },\n subheading: {\n fontSize: '1.125rem',\n lineHeight: 1.3,\n fontWeight: 500,\n letterSpacing: '-0.01em',\n },\n body: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n fontWeight: 400,\n },\n caption: {\n fontSize: '0.75rem',\n lineHeight: 1.4,\n fontWeight: 400,\n },\n label: {\n fontSize: '0.75rem',\n lineHeight: 1.2,\n fontWeight: 500,\n letterSpacing: '0.02em',\n },\n};\n\nconst highContrastTypography = {\n ...baseTypography,\n heading: {\n fontSize: '1.75rem',\n lineHeight: 1.2,\n fontWeight: 700,\n letterSpacing: '-0.02em',\n },\n subheading: {\n fontSize: '1.25rem',\n lineHeight: 1.3,\n fontWeight: 600,\n letterSpacing: '-0.01em',\n },\n body: {\n fontSize: '1rem',\n lineHeight: 1.6,\n fontWeight: 400,\n },\n caption: {\n fontSize: '0.875rem',\n lineHeight: 1.5,\n fontWeight: 400,\n },\n label: {\n fontSize: '0.875rem',\n lineHeight: 1.2,\n fontWeight: 600,\n letterSpacing: '0.02em',\n },\n};\n\nconst baseSpacing = {\n unit: '4px',\n containerPadding: '1.5rem',\n cardPadding: '1.25rem',\n inputPadding: '0.75rem 1rem',\n};\n\nconst baseTransitions = {\n fast: '150ms ease-out',\n normal: '200ms ease-out',\n slow: '300ms ease-out',\n};\n\n// ============================================================================\n// Compass Dark Theme\n// ============================================================================\n\n/**\n * Compass Dark Theme\n *\n * Matches wallet-earn styling: deep space dark theme with indigo/purple accents,\n * subtle blue undertones in surfaces, and glassmorphism effects.\n */\nexport const compassDark: CompassTheme = {\n name: 'compass-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n // wallet-earn: --background: #050507\n background: '#050507',\n // wallet-earn: --surface-1: #0c0c10, --surface-2: #12121a\n surface: '#0c0c10',\n surfaceHover: '#12121a',\n overlay: 'rgba(0, 0, 0, 0.7)',\n },\n brand: {\n // wallet-earn: --accent-primary: #6366f1, --accent-secondary: #8b5cf6\n primary: '#6366f1',\n primaryHover: '#818cf8',\n primaryText: '#ffffff',\n secondary: '#8b5cf6',\n secondaryHover: '#a78bfa',\n },\n text: {\n // wallet-earn: --foreground: #f4f4f5, text-zinc-400: #a1a1aa, text-zinc-500: #71717a\n text: '#f4f4f5',\n textSecondary: '#a1a1aa',\n textTertiary: '#71717a',\n },\n borders: {\n // wallet-earn: --border-subtle: rgba(255,255,255,0.06), --border-default: rgba(255,255,255,0.1)\n border: 'rgba(255, 255, 255, 0.08)',\n borderHover: 'rgba(255, 255, 255, 0.12)',\n borderFocus: '#6366f1',\n },\n semantic: {\n success: {\n // wallet-earn: --success: #10b981\n DEFAULT: '#10b981',\n muted: 'rgba(16, 185, 129, 0.15)',\n },\n warning: {\n DEFAULT: '#f59e0b',\n muted: 'rgba(245, 158, 11, 0.15)',\n },\n error: {\n // wallet-earn: --error: #ef4444\n DEFAULT: '#ef4444',\n muted: 'rgba(239, 68, 68, 0.15)',\n },\n info: {\n DEFAULT: '#6366f1',\n muted: 'rgba(99, 102, 241, 0.15)',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Compass Light Theme\n// ============================================================================\n\n/**\n * Compass Light Theme\n *\n * Light version with indigo primary, white background, and subtle shadows.\n */\nexport const compassLight: CompassTheme = {\n name: 'compass-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#f8fafc',\n surfaceHover: '#f1f5f9',\n overlay: 'rgba(0, 0, 0, 0.5)',\n },\n brand: {\n primary: '#6366f1',\n primaryHover: '#4f46e5',\n primaryText: '#ffffff',\n secondary: '#4f46e5',\n secondaryHover: '#4338ca',\n },\n text: {\n text: '#0f172a',\n textSecondary: '#475569',\n textTertiary: '#94a3b8',\n },\n borders: {\n border: '#e2e8f0',\n borderHover: '#cbd5e1',\n borderFocus: '#6366f1',\n },\n semantic: {\n success: {\n DEFAULT: '#16a34a',\n muted: '#dcfce7',\n },\n warning: {\n DEFAULT: '#d97706',\n muted: '#fef3c7',\n },\n error: {\n DEFAULT: '#dc2626',\n muted: '#fee2e2',\n },\n info: {\n DEFAULT: '#2563eb',\n muted: '#dbeafe',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.375rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.05)',\n md: '0 4px 12px rgba(0, 0, 0, 0.08)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.12)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Minimal Dark Theme\n// ============================================================================\n\n/**\n * Minimal Dark Theme\n *\n * Dark with white/gray primary, flat design, sharp/smaller corners, no shadows.\n */\nexport const minimalDark: CompassTheme = {\n name: 'minimal-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n background: '#0a0a0a',\n surface: '#171717',\n surfaceHover: '#262626',\n overlay: 'rgba(0, 0, 0, 0.8)',\n },\n brand: {\n primary: '#ffffff',\n primaryHover: '#e5e5e5',\n primaryText: '#0a0a0a',\n secondary: '#a3a3a3',\n secondaryHover: '#d4d4d4',\n },\n text: {\n text: '#fafafa',\n textSecondary: '#a3a3a3',\n textTertiary: '#525252',\n },\n borders: {\n border: '#262626',\n borderHover: '#404040',\n borderFocus: '#ffffff',\n },\n semantic: {\n success: {\n DEFAULT: '#4ade80',\n muted: 'rgba(74, 222, 128, 0.1)',\n },\n warning: {\n DEFAULT: '#fbbf24',\n muted: 'rgba(251, 191, 36, 0.1)',\n },\n error: {\n DEFAULT: '#f87171',\n muted: 'rgba(248, 113, 113, 0.1)',\n },\n info: {\n DEFAULT: '#60a5fa',\n muted: 'rgba(96, 165, 250, 0.1)',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n md: '0.25rem',\n lg: '0.375rem',\n xl: '0.5rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n },\n blur: {\n sm: '0',\n md: '0',\n lg: '0',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Minimal Light Theme\n// ============================================================================\n\n/**\n * Minimal Light Theme\n *\n * Light with black/gray primary, flat design, sharp corners, no shadows.\n */\nexport const minimalLight: CompassTheme = {\n name: 'minimal-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#fafafa',\n surfaceHover: '#f5f5f5',\n overlay: 'rgba(0, 0, 0, 0.6)',\n },\n brand: {\n primary: '#0a0a0a',\n primaryHover: '#262626',\n primaryText: '#ffffff',\n secondary: '#525252',\n secondaryHover: '#404040',\n },\n text: {\n text: '#0a0a0a',\n textSecondary: '#525252',\n textTertiary: '#a3a3a3',\n },\n borders: {\n border: '#e5e5e5',\n borderHover: '#d4d4d4',\n borderFocus: '#0a0a0a',\n },\n semantic: {\n success: {\n DEFAULT: '#16a34a',\n muted: '#f0fdf4',\n },\n warning: {\n DEFAULT: '#ca8a04',\n muted: '#fefce8',\n },\n error: {\n DEFAULT: '#dc2626',\n muted: '#fef2f2',\n },\n info: {\n DEFAULT: '#2563eb',\n muted: '#eff6ff',\n },\n },\n },\n typography: baseTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.125rem',\n md: '0.25rem',\n lg: '0.375rem',\n xl: '0.5rem',\n full: '9999px',\n },\n borderWidth: '1px',\n },\n effects: {\n shadow: {\n sm: 'none',\n md: 'none',\n lg: 'none',\n },\n blur: {\n sm: '0',\n md: '0',\n lg: '0',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// High Contrast Dark Theme\n// ============================================================================\n\n/**\n * High Contrast Dark Theme\n *\n * Dark with blue primary (#3b82f6), stronger borders, larger text for accessibility.\n */\nexport const highContrastDark: CompassTheme = {\n name: 'high-contrast-dark',\n mode: 'dark',\n colors: {\n backgrounds: {\n background: '#000000',\n surface: '#0a0a0a',\n surfaceHover: '#1a1a1a',\n overlay: 'rgba(0, 0, 0, 0.9)',\n },\n brand: {\n primary: '#3b82f6',\n primaryHover: '#60a5fa',\n primaryText: '#ffffff',\n secondary: '#60a5fa',\n secondaryHover: '#93c5fd',\n },\n text: {\n text: '#ffffff',\n textSecondary: '#e5e5e5',\n textTertiary: '#a3a3a3',\n },\n borders: {\n border: '#404040',\n borderHover: '#525252',\n borderFocus: '#3b82f6',\n },\n semantic: {\n success: {\n DEFAULT: '#22c55e',\n muted: 'rgba(34, 197, 94, 0.2)',\n },\n warning: {\n DEFAULT: '#fbbf24',\n muted: 'rgba(251, 191, 36, 0.2)',\n },\n error: {\n DEFAULT: '#ef4444',\n muted: 'rgba(239, 68, 68, 0.2)',\n },\n info: {\n DEFAULT: '#3b82f6',\n muted: 'rgba(59, 130, 246, 0.2)',\n },\n },\n },\n typography: highContrastTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n full: '9999px',\n },\n borderWidth: '2px',\n },\n effects: {\n shadow: {\n sm: '0 1px 3px rgba(0, 0, 0, 0.5)',\n md: '0 4px 12px rgba(0, 0, 0, 0.6)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.7)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// High Contrast Light Theme\n// ============================================================================\n\n/**\n * High Contrast Light Theme\n *\n * Light with bold blue primary, bold borders, larger text for accessibility.\n */\nexport const highContrastLight: CompassTheme = {\n name: 'high-contrast-light',\n mode: 'light',\n colors: {\n backgrounds: {\n background: '#ffffff',\n surface: '#f5f5f5',\n surfaceHover: '#e5e5e5',\n overlay: 'rgba(0, 0, 0, 0.7)',\n },\n brand: {\n primary: '#1d4ed8',\n primaryHover: '#1e40af',\n primaryText: '#ffffff',\n secondary: '#1e40af',\n secondaryHover: '#1e3a8a',\n },\n text: {\n text: '#000000',\n textSecondary: '#1a1a1a',\n textTertiary: '#525252',\n },\n borders: {\n border: '#525252',\n borderHover: '#404040',\n borderFocus: '#1d4ed8',\n },\n semantic: {\n success: {\n DEFAULT: '#15803d',\n muted: '#dcfce7',\n },\n warning: {\n DEFAULT: '#a16207',\n muted: '#fef9c3',\n },\n error: {\n DEFAULT: '#b91c1c',\n muted: '#fee2e2',\n },\n info: {\n DEFAULT: '#1d4ed8',\n muted: '#dbeafe',\n },\n },\n },\n typography: highContrastTypography,\n spacing: baseSpacing,\n shape: {\n borderRadius: {\n none: '0',\n sm: '0.25rem',\n md: '0.375rem',\n lg: '0.5rem',\n xl: '0.75rem',\n full: '9999px',\n },\n borderWidth: '2px',\n },\n effects: {\n shadow: {\n sm: '0 1px 2px rgba(0, 0, 0, 0.1)',\n md: '0 4px 8px rgba(0, 0, 0, 0.15)',\n lg: '0 8px 16px rgba(0, 0, 0, 0.2)',\n },\n blur: {\n sm: '4px',\n md: '8px',\n lg: '16px',\n },\n transition: baseTransitions,\n },\n};\n\n// ============================================================================\n// Theme Presets Map & Default Export\n// ============================================================================\n\n/**\n * Map of all available theme presets by name\n */\nexport const themePresets: Record<ThemePresetName, CompassTheme> = {\n 'compass-dark': compassDark,\n 'compass-light': compassLight,\n 'minimal-dark': minimalDark,\n 'minimal-light': minimalLight,\n 'high-contrast-dark': highContrastDark,\n 'high-contrast-light': highContrastLight,\n};\n\n/**\n * Default theme preset\n */\nexport const defaultTheme: CompassTheme = compassDark;\n","/**\n * CSS Variable Generation Utilities for Compass Embeddable Widgets\n *\n * This module provides functions to convert theme objects to CSS custom properties,\n * enabling runtime theming and CSS-based styling of widget components.\n */\n\nimport type {\n CompassTheme,\n ThemeColors,\n ThemeTypography,\n ThemeSpacing,\n ThemeShape,\n ThemeEffects,\n TypographyScale,\n SemanticColor,\n} from './types';\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Convert a camelCase string to kebab-case for CSS variable names.\n *\n * @example\n * camelToKebab('surfaceHover') // => 'surface-hover'\n * camelToKebab('primaryText') // => 'primary-text'\n * camelToKebab('fontFamilyMono') // => 'font-family-mono'\n */\nexport function camelToKebab(str: string): string {\n return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Create a CSS variable name with the compass prefix.\n */\nfunction cssVar(category: string, name: string): string {\n return `--compass-${category}-${camelToKebab(name)}`;\n}\n\n/**\n * Create a CSS variable name with nested path.\n */\nfunction cssVarPath(category: string, ...parts: string[]): string {\n const kebabParts = parts.map(camelToKebab).join('-');\n return `--compass-${category}-${kebabParts}`;\n}\n\n// ============================================================================\n// Color Variable Generation\n// ============================================================================\n\n/**\n * Convert theme colors to CSS variables.\n */\nfunction colorsToCssVariables(colors: ThemeColors): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Background colors - use direct names (surface, background, etc.)\n for (const [key, value] of Object.entries(colors.backgrounds)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Brand colors - use direct names (primary, secondary, etc.)\n for (const [key, value] of Object.entries(colors.brand)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Text colors\n for (const [key, value] of Object.entries(colors.text)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Border colors\n for (const [key, value] of Object.entries(colors.borders)) {\n vars[cssVarPath('color', key)] = value;\n }\n\n // Semantic colors (success, warning, error, info)\n for (const [semantic, colorObj] of Object.entries(colors.semantic)) {\n const semanticColor = colorObj as SemanticColor;\n vars[cssVarPath('color', semantic)] = semanticColor.DEFAULT;\n vars[cssVarPath('color', semantic, 'muted')] = semanticColor.muted;\n }\n\n return vars;\n}\n\n// ============================================================================\n// Typography Variable Generation\n// ============================================================================\n\n/**\n * Convert a typography scale to CSS variables.\n */\nfunction typographyScaleToCssVariables(\n name: string,\n scale: TypographyScale\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n vars[cssVarPath('font', name, 'size')] = scale.fontSize;\n vars[cssVarPath('font', name, 'line-height')] = String(scale.lineHeight);\n vars[cssVarPath('font', name, 'weight')] = String(scale.fontWeight);\n\n if (scale.letterSpacing) {\n vars[cssVarPath('font', name, 'letter-spacing')] = scale.letterSpacing;\n }\n\n return vars;\n}\n\n/**\n * Convert theme typography to CSS variables.\n */\nfunction typographyToCssVariables(\n typography: ThemeTypography\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Font families\n vars['--compass-font-family'] = typography.fontFamily;\n vars['--compass-font-family-mono'] = typography.fontFamilyMono;\n\n // Typography scales\n const scales: (keyof ThemeTypography)[] = [\n 'heading',\n 'subheading',\n 'body',\n 'caption',\n 'label',\n ];\n\n for (const scaleName of scales) {\n const scale = typography[scaleName];\n if (typeof scale === 'object' && 'fontSize' in scale) {\n Object.assign(\n vars,\n typographyScaleToCssVariables(scaleName, scale as TypographyScale)\n );\n }\n }\n\n return vars;\n}\n\n// ============================================================================\n// Spacing Variable Generation\n// ============================================================================\n\n/**\n * Convert theme spacing to CSS variables.\n */\nfunction spacingToCssVariables(spacing: ThemeSpacing): Record<string, string> {\n const vars: Record<string, string> = {};\n\n vars['--compass-spacing-unit'] = spacing.unit;\n vars['--compass-spacing-container'] = spacing.containerPadding;\n vars['--compass-spacing-card'] = spacing.cardPadding;\n vars['--compass-spacing-input'] = spacing.inputPadding;\n\n return vars;\n}\n\n// ============================================================================\n// Shape Variable Generation\n// ============================================================================\n\n/**\n * Convert theme shape (border radius, border width) to CSS variables.\n */\nfunction shapeToCssVariables(shape: ThemeShape): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Border radius scale\n for (const [key, value] of Object.entries(shape.borderRadius)) {\n vars[cssVarPath('radius', key)] = value;\n }\n\n // Border width\n vars['--compass-border-width'] = shape.borderWidth;\n\n return vars;\n}\n\n// ============================================================================\n// Effects Variable Generation\n// ============================================================================\n\n/**\n * Convert theme effects (shadows, blur, transitions) to CSS variables.\n */\nfunction effectsToCssVariables(effects: ThemeEffects): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Shadows\n for (const [key, value] of Object.entries(effects.shadow)) {\n vars[cssVarPath('shadow', key)] = value;\n }\n\n // Blur\n for (const [key, value] of Object.entries(effects.blur)) {\n vars[cssVarPath('blur', key)] = value;\n }\n\n // Transitions\n for (const [key, value] of Object.entries(effects.transition)) {\n vars[cssVarPath('transition', key)] = value;\n }\n\n return vars;\n}\n\n// ============================================================================\n// Main Export Functions\n// ============================================================================\n\n/**\n * Convert a complete CompassTheme object to CSS custom properties.\n *\n * This generates a flat object of CSS variable names to values that can be\n * used to style components with CSS custom properties.\n *\n * @example\n * const vars = themeToCssVariables(compassDarkTheme);\n * // Returns:\n * // {\n * // '--compass-color-bg-background': '#0a0a0a',\n * // '--compass-color-bg-surface': '#141414',\n * // '--compass-color-brand-primary': '#6366f1',\n * // '--compass-font-family': 'Inter, sans-serif',\n * // '--compass-spacing-unit': '4px',\n * // '--compass-radius-md': '8px',\n * // '--compass-shadow-md': '0 4px 6px -1px rgba(0, 0, 0, 0.1)',\n * // ...\n * // }\n */\nexport function themeToCssVariables(\n theme: CompassTheme\n): Record<string, string> {\n return {\n // Theme metadata\n '--compass-theme-name': theme.name,\n '--compass-theme-mode': theme.mode,\n\n // Color variables\n ...colorsToCssVariables(theme.colors),\n\n // Typography variables\n ...typographyToCssVariables(theme.typography),\n\n // Spacing variables\n ...spacingToCssVariables(theme.spacing),\n\n // Shape variables (border radius)\n ...shapeToCssVariables(theme.shape),\n\n // Effects variables (shadows, blur, transitions)\n ...effectsToCssVariables(theme.effects),\n };\n}\n\n/**\n * Generate a CSS string with theme variables inside a selector.\n *\n * This is useful for injecting theme variables into a style tag or\n * generating scoped CSS for widgets embedded in parent pages.\n *\n * @param theme - The CompassTheme to convert\n * @param selector - CSS selector to scope variables (default: '.compass-widget')\n * @returns CSS string with variables defined inside the selector\n *\n * @example\n * const css = injectCssVariables(compassDarkTheme);\n * // Returns:\n * // .compass-widget {\n * // --compass-color-bg-background: #0a0a0a;\n * // --compass-color-bg-surface: #141414;\n * // ...\n * // }\n *\n * @example\n * // Custom selector for a specific widget instance\n * const css = injectCssVariables(theme, '#my-widget');\n * // Returns:\n * // #my-widget {\n * // --compass-color-bg-background: #0a0a0a;\n * // ...\n * // }\n */\nexport function injectCssVariables(\n theme: CompassTheme,\n selector: string = '.compass-widget'\n): string {\n const variables = themeToCssVariables(theme);\n\n const variableLines = Object.entries(variables)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${variableLines}\\n}`;\n}\n\n/**\n * Generate CSS variables as an inline style object.\n *\n * This is useful for applying theme variables directly to a React component's\n * style prop without needing a style tag.\n *\n * @param theme - The CompassTheme to convert\n * @returns Object suitable for use as React style prop\n *\n * @example\n * const style = themeToCssVariablesStyle(compassDarkTheme);\n * return <div style={style} className=\"compass-widget\">...</div>;\n */\nexport function themeToCssVariablesStyle(\n theme: CompassTheme\n): React.CSSProperties {\n const variables = themeToCssVariables(theme);\n\n // Convert to React CSSProperties format\n // CSS custom properties need to use the cssText approach or type assertion\n return variables as unknown as React.CSSProperties;\n}\n","// lib/theme/context.tsx\n'use client';\n\nimport {\n createContext,\n useContext,\n useMemo,\n useEffect,\n useState,\n type ReactNode,\n} from 'react';\nimport type { CompassTheme, ThemeInput, DeepPartial } from './types';\nimport { themePresets, defaultTheme } from './presets';\nimport { injectCssVariables } from './css-variables';\n\ninterface ThemeContextValue {\n theme: CompassTheme;\n setTheme: (input: ThemeInput) => void;\n cssVariables: string;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nfunction deepMerge<T extends object>(target: T, source: DeepPartial<T>): T {\n const result = { ...target };\n for (const key in source) {\n const sourceValue = source[key];\n const targetValue = target[key];\n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null\n ) {\n (result as Record<string, unknown>)[key] = deepMerge(\n targetValue as object,\n sourceValue as DeepPartial<typeof targetValue>\n );\n } else if (sourceValue !== undefined) {\n (result as Record<string, unknown>)[key] = sourceValue;\n }\n }\n return result;\n}\n\nfunction resolveTheme(input: ThemeInput | undefined): CompassTheme {\n if (!input) return defaultTheme;\n\n if (typeof input === 'string') {\n return themePresets[input] ?? defaultTheme;\n }\n\n if ('preset' in input) {\n const base = themePresets[input.preset] ?? defaultTheme;\n return input.overrides ? deepMerge(base, input.overrides) : base;\n }\n\n // Full theme object\n return input;\n}\n\ninterface ThemeProviderProps {\n children: ReactNode;\n theme?: ThemeInput;\n}\n\nexport function ThemeProvider({ children, theme: initialTheme }: ThemeProviderProps) {\n const [themeInput, setThemeInput] = useState<ThemeInput | undefined>(initialTheme);\n\n const theme = useMemo(() => resolveTheme(themeInput), [themeInput]);\n const cssVariables = useMemo(() => injectCssVariables(theme, '.compass-widget'), [theme]);\n\n // Inject CSS variables into document\n useEffect(() => {\n const styleId = 'compass-theme-variables';\n let styleEl = document.getElementById(styleId) as HTMLStyleElement | null;\n\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = styleId;\n document.head.appendChild(styleEl);\n }\n\n styleEl.textContent = cssVariables;\n\n return () => {\n // Don't remove on cleanup - other widgets may still need it\n };\n }, [cssVariables]);\n\n const value = useMemo(\n () => ({\n theme,\n setTheme: setThemeInput,\n cssVariables,\n }),\n [theme, cssVariables]\n );\n\n return (\n <ThemeContext.Provider value={value}>\n {children}\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n\nexport { ThemeContext };\n","'use client';\n\nimport { useMemo, type ReactNode } from 'react';\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { ApiProvider } from '../contexts/ApiContext';\nimport { ChainProvider } from '../contexts/ChainContext';\nimport { WalletProvider } from '../contexts/WalletContext';\nimport { EarnAccountProvider } from '../contexts/EarnAccountContext';\nimport { ThemeProvider } from '../theme/context';\nimport type { ThemeInput } from '../theme/types';\nimport type { SupportedChain, WalletAdapter } from './types';\n\nexport interface CompassProviderProps {\n children: ReactNode;\n /** Compass API key - required for all API calls */\n apiKey: string;\n /** Default chain to use */\n defaultChain?: SupportedChain;\n /** Theme preset name, preset with overrides, or full theme object */\n theme?: ThemeInput;\n /**\n * Wallet adapter for signing transactions\n *\n * Bring your own wallet by implementing the WalletAdapter interface\n * with your wallet library of choice (wagmi, viem, ethers, etc.)\n *\n * @example\n * ```tsx\n * import { useAccount, useSignTypedData } from 'wagmi';\n *\n * const { address } = useAccount();\n * const { signTypedDataAsync } = useSignTypedData();\n *\n * <CompassProvider\n * apiKey=\"your-key\"\n * wallet={{\n * address: address ?? null,\n * signTypedData: signTypedDataAsync,\n * }}\n * >\n * <VaultsList />\n * </CompassProvider>\n * ```\n */\n wallet?: WalletAdapter;\n}\n\nexport function CompassProvider({\n children,\n apiKey,\n defaultChain = 'base',\n theme,\n wallet,\n}: CompassProviderProps) {\n // Create a stable query client\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30 * 1000, // 30 seconds\n gcTime: 2 * 60 * 1000, // 2 minutes\n refetchOnWindowFocus: false,\n },\n },\n }),\n []\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <ThemeProvider theme={theme}>\n <ApiProvider apiKey={apiKey}>\n <ChainProvider defaultChain={defaultChain}>\n <WalletProvider wallet={wallet}>\n <EarnAccountProvider>\n <div className=\"compass-widget\">\n {children}\n </div>\n </EarnAccountProvider>\n </WalletProvider>\n </ChainProvider>\n </ApiProvider>\n </ThemeProvider>\n </QueryClientProvider>\n );\n}\n","'use client';\n\nimport { useChain, type ChainConfig } from '../contexts/ChainContext';\nimport type { SupportedChain } from '../provider/types';\n\nconst SUPPORTED_CHAINS: SupportedChain[] = ['ethereum', 'base', 'arbitrum'];\n\nexport function ChainSwitcher() {\n const { chainId, setChain, chain } = useChain();\n\n // Build chain configs from context\n const chainConfigs: Record<SupportedChain, ChainConfig> = {\n ethereum: {\n viemChain: chain.viemChain,\n name: 'Ethereum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n viemChain: chain.viemChain,\n name: 'Base',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n viemChain: chain.viemChain,\n name: 'Arbitrum',\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n };\n\n return (\n <div className=\"flex gap-1 p-1 rounded-lg\" style={{ backgroundColor: 'var(--compass-color-surface)' }}>\n {SUPPORTED_CHAINS.map((id) => {\n const config = chainConfigs[id];\n const isActive = chainId === id;\n\n return (\n <button\n key={id}\n onClick={() => setChain(id)}\n className=\"flex items-center gap-1.5 px-3 py-1.5 rounded-md text-sm font-medium transition-all\"\n style={{\n backgroundColor: isActive ? 'var(--compass-color-primary)' : 'transparent',\n color: isActive ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n }}\n >\n <img src={config.icon} alt={config.name} className=\"w-4 h-4\" />\n <span>{config.name}</span>\n </button>\n );\n })}\n </div>\n );\n}\n","'use client';\n\nimport { Wallet, LogOut } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\n\ninterface WalletStatusProps {\n /** Show full address or truncated */\n showFullAddress?: boolean;\n /** Show logout button when connected */\n showLogout?: boolean;\n /** Compact mode - just icon and minimal text */\n compact?: boolean;\n /** Callback when user clicks connect (optional - for apps that handle their own wallet connection) */\n onConnect?: () => void;\n /** Callback when user clicks disconnect (optional - for apps that handle their own wallet connection) */\n onDisconnect?: () => void;\n}\n\nfunction truncateAddress(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\n/**\n * Displays the connected wallet status with optional login/logout functionality.\n *\n * Uses login/logout from the WalletAdapter by default if provided.\n * You can override with `onConnect` and `onDisconnect` props if your app\n * handles wallet connection separately.\n */\nexport function WalletStatus({\n showFullAddress = false,\n showLogout = true,\n compact = false,\n onConnect,\n onDisconnect,\n}: WalletStatusProps) {\n const { address, isConnected, login, logout } = useCompassWallet();\n\n // Use props if provided, otherwise fall back to context\n const connectFn = onConnect ?? login;\n const disconnectFn = onDisconnect ?? logout;\n\n // Not connected - show connect button if callback provided\n if (!isConnected || !address) {\n if (connectFn !== null) {\n return (\n <button\n onClick={() => connectFn()}\n className={`flex items-center gap-2 rounded-lg font-medium transition-colors hover:opacity-90 ${compact ? 'px-2 py-1.5' : 'px-4 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n <Wallet size={compact ? 14 : 16} />\n {!compact && <span className=\"text-sm\">Connect Wallet</span>}\n </button>\n );\n }\n\n return (\n <div\n className={`flex items-center gap-2 rounded-lg ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <Wallet size={compact ? 14 : 16} />\n {!compact && <span className=\"text-sm\">Not connected</span>}\n </div>\n );\n }\n\n // Connected - show address and optional logout\n return (\n <div\n className={`flex items-center gap-2 rounded-lg ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <div\n className=\"w-2 h-2 rounded-full flex-shrink-0\"\n style={{ backgroundColor: 'var(--compass-color-success)' }}\n />\n <span\n className={`font-mono whitespace-nowrap ${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text)' }}\n >\n {showFullAddress ? address : truncateAddress(address)}\n </span>\n {showLogout && disconnectFn !== null && (\n <button\n onClick={() => disconnectFn()}\n className={`rounded hover:bg-white/10 transition-all flex-shrink-0 ${compact ? 'p-1' : 'p-1.5'}`}\n title=\"Disconnect wallet\"\n >\n <LogOut size={14} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect, type ReactNode } from 'react';\nimport { X } from 'lucide-react';\n\ninterface ActionModalProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: ReactNode;\n}\n\nexport function ActionModal({ isOpen, onClose, title, children }: ActionModalProps) {\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: 'var(--compass-color-overlay)' }}\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className=\"relative w-full max-w-md mx-4 rounded-xl overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3 border-b\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <h2\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-subheading)',\n color: 'var(--compass-color-text)',\n }}\n >\n {title}\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md transition-colors hover:opacity-70\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {children}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\n\ninterface PositionPnL {\n unrealizedPnl: string;\n realizedPnl: string;\n totalPnl: string;\n totalDeposited: string;\n}\n\ninterface PnLSummaryProps {\n pnl: PositionPnL | null | undefined;\n tokenSymbol: string;\n tokenPrice: number;\n}\n\nexport function PnLSummary({ pnl, tokenSymbol, tokenPrice }: PnLSummaryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n if (!pnl) return null;\n\n const unrealizedPnl = parseFloat(pnl.unrealizedPnl || '0');\n const realizedPnl = parseFloat(pnl.realizedPnl || '0');\n const totalPnl = parseFloat(pnl.totalPnl || '0');\n const totalDeposited = parseFloat(pnl.totalDeposited || '0');\n\n if (totalDeposited === 0) return null;\n\n const formatPnL = (value: number) => {\n const prefix = value >= 0 ? '+' : '';\n return `${prefix}${value.toFixed(4)}`;\n };\n\n const formatUSD = (value: number) => {\n const usdValue = value * tokenPrice;\n const prefix = usdValue >= 0 ? '+$' : '-$';\n return `${prefix}${Math.abs(usdValue).toFixed(2)}`;\n };\n\n const pnlColor = (value: number) =>\n value >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)';\n\n return (\n <div className=\"flex flex-col w-full mt-2\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 rounded-lg border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Performance\n </span>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{ color: pnlColor(totalPnl) }}\n >\n {formatPnL(totalPnl)} {tokenSymbol}\n </span>\n <ChevronDown\n size={16}\n className={`transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </div>\n </button>\n\n {isExpanded && (\n <div\n className=\"mt-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div className=\"grid grid-cols-2 gap-3\">\n {/* Unrealized P&L */}\n <div className=\"flex flex-col\">\n <span\n className=\"text-[10px] font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Unrealized P&L\n </span>\n <span\n className=\"text-sm font-bold font-mono\"\n style={{ color: pnlColor(unrealizedPnl) }}\n >\n {formatPnL(unrealizedPnl)}\n </span>\n <span className=\"text-[10px] font-mono\" style={{ color: pnlColor(unrealizedPnl) }}>\n {formatUSD(unrealizedPnl)}\n </span>\n </div>\n\n {/* Realized P&L */}\n <div className=\"flex flex-col\">\n <span\n className=\"text-[10px] font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Realized P&L\n </span>\n <span\n className=\"text-sm font-bold font-mono\"\n style={{ color: pnlColor(realizedPnl) }}\n >\n {formatPnL(realizedPnl)}\n </span>\n <span className=\"text-[10px] font-mono\" style={{ color: pnlColor(realizedPnl) }}>\n {formatUSD(realizedPnl)}\n </span>\n </div>\n </div>\n\n {/* Total Summary */}\n <div\n className=\"flex items-center justify-between mt-3 pt-3 border-t\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Total P&L\n </span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-bold font-mono\" style={{ color: pnlColor(totalPnl) }}>\n {formatPnL(totalPnl)} {tokenSymbol}\n </span>\n <span className=\"text-xs font-mono\" style={{ color: pnlColor(totalPnl) }}>\n ({formatUSD(totalPnl)})\n </span>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","/**\n * Format utilities for displaying token amounts\n */\n\n/**\n * Format a number for display, up to 6 decimals, trimmed\n */\nexport function formatAmount(value: number | string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '0';\n return parseFloat(num.toFixed(6)).toString();\n}\n\n/**\n * Format for display with token symbol\n */\nexport function formatTokenAmount(value: number | string, symbol: string): string {\n return `${formatAmount(value)} ${symbol}`;\n}\n\n/**\n * Format USD value\n */\nexport function formatUSD(value: number | string): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '$0.00';\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(num);\n}\n\n/**\n * Truncate address for display\n */\nexport function truncateAddress(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n","'use client';\n\nimport { useState, useRef, useEffect } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { formatAmount } from '../utils/format';\n\nexport interface TokenSelectorProps {\n /** Available tokens to select from */\n tokens: string[];\n /** Currently selected token */\n selectedToken: string;\n /** Callback when token is selected */\n onSelect: (token: string) => void;\n /** Token balances keyed by symbol */\n balances?: Record<string, string>;\n /** Whether to show balances in dropdown */\n showBalances?: boolean;\n /** Disable the selector */\n disabled?: boolean;\n}\n\nexport function TokenSelector({\n tokens,\n selectedToken,\n onSelect,\n balances,\n showBalances = true,\n disabled = false,\n}: TokenSelectorProps) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n // Close dropdown when clicking outside\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const handleSelect = (token: string) => {\n onSelect(token);\n setIsOpen(false);\n };\n\n return (\n <div className=\"relative\" ref={dropdownRef}>\n {/* Trigger Button */}\n <button\n type=\"button\"\n onClick={() => !disabled && setIsOpen(!isOpen)}\n disabled={disabled}\n className=\"flex items-center gap-2 px-3 py-2 rounded-lg border transition-colors min-w-[120px]\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: isOpen ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n }}\n >\n <span className=\"font-medium flex-1 text-left\">{selectedToken}</span>\n <ChevronDown\n size={16}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s',\n }}\n />\n </button>\n\n {/* Dropdown */}\n {isOpen && (\n <div\n className=\"absolute z-50 mt-1 w-full min-w-[160px] rounded-lg border overflow-y-auto\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n boxShadow: 'var(--compass-shadow-lg)',\n maxHeight: '200px',\n }}\n >\n {tokens.map((token) => {\n const balance = balances?.[token];\n const isSelected = token === selectedToken;\n\n return (\n <button\n key={token}\n type=\"button\"\n onClick={() => handleSelect(token)}\n className=\"w-full px-3 py-2 flex items-center justify-between transition-colors\"\n style={{\n backgroundColor: isSelected\n ? 'var(--compass-color-primary-muted)'\n : 'transparent',\n color: 'var(--compass-color-text)',\n }}\n onMouseEnter={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'var(--compass-color-surface-hover)';\n }\n }}\n onMouseLeave={(e) => {\n if (!isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n <span className=\"font-medium\">{token}</span>\n {showBalances && balance && (\n <span\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(balance)}\n </span>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, AlertCircle, ArrowRight } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { TokenSelector } from './TokenSelector';\nimport { formatAmount } from '../utils/format';\n\ntype ActionType = 'deposit' | 'withdraw';\ntype VenueType = 'VAULT' | 'AAVE' | 'PENDLE_PT';\n\ninterface DepositWithdrawFormProps {\n venueType: VenueType;\n venueAddress: string;\n /** The token the venue accepts */\n venueToken: string;\n /** Available tokens for deposits (enables swap if different from venueToken) */\n depositTokens?: string[];\n positionBalance?: string;\n onSuccess?: (action: ActionType, amount: string, txHash: string) => void;\n onError?: (error: Error) => void;\n}\n\nexport function DepositWithdrawForm({\n venueType,\n venueAddress,\n venueToken,\n depositTokens = ['SBC', 'AUSD', 'USDC', 'USDT', 'WETH', 'DAI'],\n positionBalance = '0',\n onSuccess,\n onError,\n}: DepositWithdrawFormProps) {\n const [activeTab, setActiveTab] = useState<ActionType>('deposit');\n const [selectedToken, setSelectedToken] = useState(venueToken);\n const [amount, setAmount] = useState('');\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [statusMessage, setStatusMessage] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const { address, isConnected, signTypedData, switchChain } = useCompassWallet();\n const { chainId, chain } = useChain();\n const { earnAccountAddress } = useEarnAccount();\n const queryClient = useQueryClient();\n\n // Determine if we need to swap\n const needsSwap = activeTab === 'deposit' && selectedToken !== venueToken;\n\n // Fetch the earn account's token balance for the selected token\n const { data: tokenBalance } = useQuery({\n queryKey: ['earnAccountTokenBalance', chainId, earnAccountAddress, selectedToken],\n queryFn: async () => {\n if (!earnAccountAddress) return '0';\n try {\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${chainId}&tokens=${selectedToken}`\n );\n if (!response.ok) return '0';\n const data = await response.json();\n return data.balances?.[selectedToken]?.balance || '0';\n } catch {\n return '0';\n }\n },\n enabled: !!earnAccountAddress && !!address,\n staleTime: 10 * 1000,\n });\n\n const availableBalance = tokenBalance || '0';\n const maxBalance = activeTab === 'deposit' ? availableBalance : positionBalance;\n\n const handleQuickAmount = useCallback(\n (percentage: number) => {\n const max = parseFloat(maxBalance);\n if (isNaN(max)) return;\n setAmount(formatAmount(max * percentage));\n },\n [maxBalance]\n );\n\n const handleSubmit = useCallback(async () => {\n if (!address || !amount) return;\n\n setIsSubmitting(true);\n setStatusMessage('Preparing transaction...');\n setError(null);\n\n try {\n // Switch wallet to the correct chain if needed\n const targetChainId = chain.viemChain.id;\n if (switchChain) {\n setStatusMessage('Switching network...');\n try {\n await switchChain(targetChainId);\n } catch {\n throw new Error(`Please switch your wallet to ${chain.name} to continue`);\n }\n }\n\n const isDeposit = activeTab === 'deposit';\n\n if (isDeposit && needsSwap) {\n // Step 1: Get swap quote to know the output amount\n setStatusMessage('Getting swap quote...');\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${chainId}&tokenIn=${selectedToken}&tokenOut=${venueToken}&amountIn=${amount}`\n );\n\n if (!quoteResponse.ok) {\n const errorData = await quoteResponse.json();\n throw new Error(errorData.error || 'Failed to get swap quote');\n }\n\n const quoteData = await quoteResponse.json();\n const estimatedOutput = quoteData.estimatedAmountOut;\n\n if (!estimatedOutput || parseFloat(estimatedOutput) <= 0) {\n throw new Error('Invalid swap quote - no output amount');\n }\n\n // Apply 1% slippage buffer to the deposit amount\n const depositAmount = (parseFloat(estimatedOutput) * 0.99).toString();\n\n // Step 2: Build bundle with specific amounts\n setStatusMessage('Preparing swap and deposit...');\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: venueToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue:\n venueType === 'VAULT'\n ? { type: 'VAULT', vaultAddress: venueAddress }\n : venueType === 'AAVE'\n ? { type: 'AAVE', token: venueToken }\n : { type: 'PENDLE_PT', marketAddress: venueAddress },\n amount: depositAmount,\n },\n },\n ];\n\n const prepareResponse = await fetch('/api/compass/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n actions: bundleActions,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errorData = await prepareResponse.json();\n throw new Error(errorData.error || 'Failed to prepare bundle');\n }\n\n const { eip712, normalizedTypes, domain, message } = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing swap and deposit...');\n\n const executeResponse = await fetch('/api/compass/bundle/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n eip712,\n signature,\n chain: chainId,\n }),\n });\n\n if (!executeResponse.ok) {\n const errorData = await executeResponse.json();\n throw new Error(errorData.error || 'Failed to execute bundle');\n }\n\n const { txHash } = await executeResponse.json();\n\n setStatusMessage('Transaction successful!');\n onSuccess?.(activeTab, amount, txHash);\n setAmount('');\n } else {\n // Use existing manage endpoint for direct deposit/withdraw\n const prepareEndpoint = isDeposit\n ? '/api/compass/deposit/prepare'\n : '/api/compass/withdraw/prepare';\n const executeEndpoint = isDeposit\n ? '/api/compass/deposit/execute'\n : '/api/compass/withdraw/execute';\n\n const prepareBody: Record<string, unknown> = {\n amount,\n token: venueToken,\n owner: address,\n chain: chainId,\n venueType,\n };\n\n if (venueType === 'VAULT') {\n prepareBody.vaultAddress = venueAddress;\n } else if (venueType === 'PENDLE_PT') {\n prepareBody.marketAddress = venueAddress;\n prepareBody.maxSlippagePercent = 1.0;\n }\n\n setStatusMessage('Getting transaction data...');\n const prepareResponse = await fetch(prepareEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(prepareBody),\n });\n\n if (!prepareResponse.ok) {\n const errorData = await prepareResponse.json();\n throw new Error(errorData.error || 'Failed to prepare transaction');\n }\n\n const { eip712, normalizedTypes, domain, message } = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing transaction...');\n const executeResponse = await fetch(executeEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n eip712,\n signature,\n chain: chainId,\n }),\n });\n\n if (!executeResponse.ok) {\n const errorData = await executeResponse.json();\n throw new Error(errorData.error || 'Failed to execute transaction');\n }\n\n const { txHash } = await executeResponse.json();\n\n setStatusMessage('Transaction successful!');\n onSuccess?.(activeTab, amount, txHash);\n setAmount('');\n }\n\n // Invalidate queries\n queryClient.invalidateQueries({ queryKey: ['earnAccountTokenBalance'] });\n queryClient.invalidateQueries({ queryKey: ['vaults'] });\n queryClient.invalidateQueries({ queryKey: ['aaveMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['pendleMarkets'] });\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (err) {\n console.error('Transaction failed:', err);\n const errorMessage = err instanceof Error ? err.message : 'Transaction failed';\n setError(errorMessage);\n onError?.(err as Error);\n } finally {\n setIsSubmitting(false);\n }\n }, [\n address,\n amount,\n chainId,\n chain,\n activeTab,\n needsSwap,\n selectedToken,\n venueToken,\n venueType,\n venueAddress,\n signTypedData,\n switchChain,\n queryClient,\n onSuccess,\n onError,\n ]);\n\n if (!isConnected) {\n return (\n <div\n className=\"flex flex-col items-center gap-3 py-6 px-4 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <AlertCircle size={24} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <p\n className=\"text-sm text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Connect your wallet to deposit or withdraw\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Tab Switcher */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n {(['deposit', 'withdraw'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => {\n setActiveTab(tab);\n setSelectedToken(venueToken);\n setError(null);\n setStatusMessage('');\n }}\n className=\"flex-1 py-2 rounded-md text-sm font-medium capitalize transition-all\"\n style={{\n backgroundColor: activeTab === tab ? 'var(--compass-color-surface)' : 'transparent',\n color: activeTab === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Token Selector (only for deposits) */}\n {activeTab === 'deposit' && (\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n From Token\n </label>\n <TokenSelector\n tokens={depositTokens}\n selectedToken={selectedToken}\n onSelect={setSelectedToken}\n disabled={isSubmitting}\n />\n </div>\n )}\n\n {/* Swap Indicator */}\n {needsSwap && (\n <div\n className=\"flex items-center gap-2 p-2 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n <ArrowRight size={14} />\n <span>\n Swaps {selectedToken} to {venueToken}, then deposits\n </span>\n </div>\n )}\n\n {/* Amount Input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available: {formatAmount(maxBalance)} {activeTab === 'deposit' ? selectedToken : venueToken}\n </span>\n </div>\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => {\n setAmount(e.target.value);\n setError(null);\n }}\n placeholder=\"0.00\"\n className=\"flex-1 bg-transparent outline-none text-lg font-mono\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {activeTab === 'deposit' ? selectedToken : venueToken}\n </span>\n </div>\n </div>\n\n {/* Quick Amount Buttons */}\n <div className=\"flex gap-2\">\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n className=\"flex-1 py-1.5 rounded-md text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 rounded-lg text-sm text-center\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Submit Button */}\n <button\n onClick={handleSubmit}\n disabled={isSubmitting || !amount || parseFloat(amount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n {isSubmitting && <Loader2 size={18} className=\"animate-spin\" />}\n {isSubmitting\n ? 'Processing...'\n : needsSwap\n ? `Swap & ${activeTab === 'deposit' ? 'Deposit' : 'Withdraw'}`\n : activeTab === 'deposit'\n ? 'Deposit'\n : 'Withdraw'}\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown, ArrowDownLeft, ArrowUpRight, ExternalLink } from 'lucide-react';\nimport { useChain } from '../contexts/ChainContext';\n\ninterface DepositEvent {\n amount: string;\n blockNumber: number;\n txHash: string;\n}\n\ninterface WithdrawalEvent {\n amount: string;\n blockNumber: number;\n txHash: string;\n}\n\ninterface TransactionHistoryProps {\n deposits?: DepositEvent[];\n withdrawals?: WithdrawalEvent[];\n tokenSymbol: string;\n}\n\nfunction getExplorerUrl(txHash: string, chainId: string): string {\n const explorers: Record<string, string> = {\n ethereum: 'https://etherscan.io/tx/',\n arbitrum: 'https://arbiscan.io/tx/',\n base: 'https://basescan.org/tx/',\n };\n return `${explorers[chainId] || explorers.ethereum}${txHash}`;\n}\n\nexport function TransactionHistory({\n deposits = [],\n withdrawals = [],\n tokenSymbol,\n}: TransactionHistoryProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n const { chainId } = useChain();\n\n // Combine and sort all events by block number (most recent first)\n type HistoryEvent =\n | { type: 'deposit'; event: DepositEvent }\n | { type: 'withdrawal'; event: WithdrawalEvent };\n\n const allEvents: HistoryEvent[] = [\n ...deposits.map((d) => ({ type: 'deposit' as const, event: d })),\n ...withdrawals.map((w) => ({ type: 'withdrawal' as const, event: w })),\n ].sort((a, b) => b.event.blockNumber - a.event.blockNumber);\n\n if (allEvents.length === 0) return null;\n\n return (\n <div className=\"flex flex-col w-full\">\n <button\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 rounded-lg border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Transaction History ({allEvents.length})\n </span>\n <ChevronDown\n size={16}\n className={`transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </button>\n\n {isExpanded && (\n <div\n className=\"mt-2 max-h-48 overflow-y-auto rounded-lg border\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <div>\n {allEvents.map((item, index) => (\n <div\n key={`${item.type}-${item.event.txHash}-${index}`}\n className=\"flex items-center justify-between px-3 py-2\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderTop: index > 0 ? '1px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div className=\"flex items-center gap-2\">\n {item.type === 'deposit' ? (\n <div\n className=\"p-1 rounded-full\"\n style={{ backgroundColor: 'var(--compass-color-success-muted)' }}\n >\n <ArrowDownLeft size={12} style={{ color: 'var(--compass-color-success)' }} />\n </div>\n ) : (\n <div\n className=\"p-1 rounded-full\"\n style={{ backgroundColor: 'var(--compass-color-warning-muted)' }}\n >\n <ArrowUpRight size={12} style={{ color: 'var(--compass-color-warning)' }} />\n </div>\n )}\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {item.type === 'deposit' ? 'Deposit' : 'Withdrawal'}\n </span>\n <span\n className=\"text-[10px]\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Block #{item.event.blockNumber.toLocaleString()}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-right\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{\n color: item.type === 'deposit'\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-warning)',\n }}\n >\n {item.type === 'deposit' ? '+' : '-'}\n {parseFloat(item.event.amount).toFixed(4)} {tokenSymbol}\n </span>\n </div>\n <a\n href={getExplorerUrl(item.event.txHash, chainId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-1 rounded hover:opacity-70 transition-opacity\"\n title=\"View on explorer\"\n >\n <ExternalLink\n size={12}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </a>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\n/**\n * EarnAccountGuard Component\n *\n * Ensures an earn account exists before allowing operations.\n * Shows a creation prompt if the account doesn't exist.\n */\n\nimport { useState, type ReactNode } from 'react';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { Loader2 } from 'lucide-react';\n\ninterface EarnAccountGuardProps {\n children: ReactNode;\n /** What to show while checking account status */\n loadingComponent?: ReactNode;\n /** Custom component to show when account needs creation */\n createAccountComponent?: ReactNode;\n}\n\nexport function EarnAccountGuard({\n children,\n loadingComponent,\n createAccountComponent,\n}: EarnAccountGuardProps) {\n const { isConnected, login } = useEmbeddableWallet();\n const { isDeployed, isChecking, isCreating, createAccount, error } = useEarnAccount();\n const [createError, setCreateError] = useState<string | null>(null);\n\n // Not connected - prompt to connect\n if (!isConnected) {\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n }}\n >\n <p className=\"text-sm mb-4\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Connect your wallet to continue\n </p>\n {login && (\n <button\n onClick={login}\n className=\"px-4 py-2 rounded-lg font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n Connect Wallet\n </button>\n )}\n </div>\n );\n }\n\n // Checking account status\n if (isChecking) {\n if (loadingComponent) {\n return <>{loadingComponent}</>;\n }\n\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <Loader2\n size={24}\n className=\"animate-spin mx-auto mb-3\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Checking account status...\n </p>\n </div>\n );\n }\n\n // Account exists - render children\n if (isDeployed) {\n return <>{children}</>;\n }\n\n // Account needs creation\n if (createAccountComponent) {\n return <>{createAccountComponent}</>;\n }\n\n const handleCreate = async () => {\n setCreateError(null);\n try {\n await createAccount();\n } catch (err) {\n setCreateError(err instanceof Error ? err.message : 'Failed to create account');\n }\n };\n\n return (\n <div\n className=\"compass-earn-guard p-6 text-center rounded-xl border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n {/* Icon */}\n <div\n className=\"w-12 h-12 rounded-full flex items-center justify-center mx-auto mb-4\"\n style={{ backgroundColor: 'var(--compass-color-primary)', opacity: 0.15 }}\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--compass-color-primary)\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83\" />\n </svg>\n </div>\n\n <h3\n className=\"text-lg font-semibold mb-2\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Create Your Earn Account\n </h3>\n\n <p\n className=\"text-sm mb-6 max-w-xs mx-auto\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n To start earning, we need to create a secure smart wallet for you. This is a one-time setup with no gas fees.\n </p>\n\n {(error || createError) && (\n <p\n className=\"text-sm mb-4\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n {createError || (error instanceof Error ? error.message : 'An error occurred')}\n </p>\n )}\n\n <button\n onClick={handleCreate}\n disabled={isCreating}\n className=\"px-6 py-3 rounded-lg font-medium transition-all inline-flex items-center gap-2\"\n style={{\n backgroundColor: isCreating ? 'var(--compass-color-surface-hover)' : 'var(--compass-color-primary)',\n color: isCreating ? 'var(--compass-color-text-secondary)' : 'var(--compass-color-primary-text)',\n cursor: isCreating ? 'not-allowed' : 'pointer',\n }}\n >\n {isCreating && (\n <Loader2 size={16} className=\"animate-spin\" />\n )}\n {isCreating ? 'Creating...' : 'Create Account'}\n </button>\n\n <p\n className=\"text-xs mt-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored by Compass\n </p>\n </div>\n );\n}\n","'use client';\n\nimport { X, Loader2, Coins } from 'lucide-react';\nimport { useEffect } from 'react';\nimport { formatAmount, formatUSD } from '../utils/format';\n\nexport interface TokenBalance {\n symbol: string;\n balance: string;\n usdValue: string;\n}\n\nexport interface AccountBalancesModalProps {\n isOpen: boolean;\n onClose: () => void;\n balances: TokenBalance[];\n totalUsdValue: string;\n isLoading?: boolean;\n earnAccountAddress?: string;\n}\n\nexport function AccountBalancesModal({\n isOpen,\n onClose,\n balances,\n totalUsdValue,\n isLoading = false,\n earnAccountAddress,\n}: AccountBalancesModalProps) {\n // Close on escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n\n if (isOpen) {\n document.addEventListener('keydown', handleEscape);\n document.body.style.overflow = 'hidden';\n }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n document.body.style.overflow = '';\n };\n }, [isOpen, onClose]);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n {/* Backdrop */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: 'var(--compass-color-overlay)' }}\n onClick={onClose}\n />\n\n {/* Modal */}\n <div\n className=\"relative w-full max-w-md mx-4 rounded-xl overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between px-4 py-3 border-b\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <h2\n className=\"font-semibold flex items-center gap-2\"\n style={{\n fontSize: 'var(--compass-font-size-subheading)',\n color: 'var(--compass-color-text)',\n }}\n >\n <Coins size={20} />\n Account Balances\n </h2>\n <button\n onClick={onClose}\n className=\"p-1 rounded-md transition-colors hover:opacity-70\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4\">\n {isLoading ? (\n <div className=\"flex items-center justify-center py-8\">\n <Loader2\n size={24}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n ) : balances.length === 0 ? (\n <div\n className=\"text-center py-8\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No token balances found\n </div>\n ) : (\n <div className=\"flex flex-col gap-2\">\n {/* Token List */}\n {balances.map((token) => (\n <div\n key={token.symbol}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-3\">\n {/* Token Icon Placeholder */}\n <div\n className=\"w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n {token.symbol.slice(0, 2)}\n </div>\n <div>\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {token.symbol}\n </div>\n <div\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(token.balance)}\n </div>\n </div>\n </div>\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(token.usdValue)}\n </div>\n </div>\n ))}\n\n {/* Total */}\n <div\n className=\"flex items-center justify-between p-3 mt-2 rounded-lg border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n backgroundColor: 'var(--compass-color-surface)',\n }}\n >\n <span\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Total Balance\n </span>\n <span\n className=\"font-bold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n </div>\n </div>\n )}\n\n {/* Account Address */}\n {earnAccountAddress && (\n <div\n className=\"mt-4 pt-4 border-t text-center\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Earn Account: {earnAccountAddress.slice(0, 6)}...{earnAccountAddress.slice(-4)}\n </span>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Wallet, ArrowUpRight, ArrowDownLeft, Loader2 } from 'lucide-react';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { ActionModal } from './ActionModal';\nimport { TokenSelector } from './TokenSelector';\nimport { formatAmount, formatUSD } from '../utils/format';\nimport { AccountBalancesModal, TokenBalance } from './AccountBalancesModal';\n\ntype TransferAction = 'deposit' | 'withdraw';\ntype TransferState =\n | 'idle'\n | 'checking_approval'\n | 'awaiting_approval_signature'\n | 'approving'\n | 'awaiting_transfer_signature'\n | 'transferring'\n | 'success'\n | 'error';\n\nexport interface EarnAccountBalanceProps {\n /** Compact mode - just show total USD value */\n compact?: boolean;\n /** Callback when transfer completes */\n onTransferComplete?: (\n action: TransferAction,\n token: string,\n amount: string,\n txHash: string\n ) => void;\n}\n\n// Supported tokens for funding earn account\nconst TRANSFER_TOKENS = ['USDC'];\n\nexport function EarnAccountBalance({\n compact = false,\n onTransferComplete,\n}: EarnAccountBalanceProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [activeAction, setActiveAction] = useState<TransferAction>('deposit');\n const [selectedToken, setSelectedToken] = useState(TRANSFER_TOKENS[0]);\n const [amount, setAmount] = useState('');\n const [transferState, setTransferState] = useState<TransferState>('idle');\n const [statusMessage, setStatusMessage] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n const { address, isConnected, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { chainId, chain } = useChain();\n const { earnAccountAddress, isDeployed } = useEarnAccount();\n const queryClient = useQueryClient();\n\n // Fetch earn account balances (all tokens)\n const { data: balanceData, isLoading: balancesLoading } = useQuery({\n queryKey: ['earnAccountBalances', chainId, address],\n queryFn: async () => {\n if (!address) return null;\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${chainId}`\n );\n if (!response.ok) {\n throw new Error('Failed to fetch balances');\n }\n return response.json() as Promise<{\n earnAccountAddress: string;\n balances: Record<string, { balance: string; usdValue: string }>;\n totalUsdValue: string;\n }>;\n },\n enabled: !!address && isDeployed,\n staleTime: 30 * 1000,\n });\n\n // Fetch EOA balances for deposits (wallet token balances)\n const { data: eoaBalances } = useQuery({\n queryKey: ['eoaBalances', chainId, address, TRANSFER_TOKENS.join(',')],\n queryFn: async () => {\n if (!address) return {};\n const balances: Record<string, string> = {};\n\n // Fetch balance for each transfer token from the token balance API\n for (const token of TRANSFER_TOKENS) {\n try {\n const response = await fetch(\n `/api/compass/token/balance?chain=${chainId}&token=${token}&address=${address}`\n );\n if (response.ok) {\n const data = await response.json();\n balances[token] = data.balance || '0';\n }\n } catch {\n // Ignore errors for individual tokens\n }\n }\n return balances;\n },\n enabled: !!address && activeAction === 'deposit',\n staleTime: 30 * 1000,\n });\n\n const earnBalances = balanceData?.balances || {};\n\n // Get total USD value from API response\n const totalUsdValue = parseFloat(balanceData?.totalUsdValue || '0');\n\n // Transform balances for modal display, filtering out zero USD value tokens\n const tokenBalances: TokenBalance[] = Object.entries(earnBalances)\n .filter(([, data]) => {\n const usdVal = parseFloat(data.usdValue || '0');\n return usdVal > 0;\n })\n .map(([symbol, data]) => ({\n symbol,\n balance: data.balance || '0',\n usdValue: data.usdValue || '0',\n }));\n\n // Get just the balance amounts for transfer operations (keyed by symbol)\n const earnBalanceAmounts: Record<string, string> = {};\n for (const [symbol, data] of Object.entries(earnBalances)) {\n earnBalanceAmounts[symbol] = data.balance;\n }\n\n const resetForm = useCallback(() => {\n setAmount('');\n setTransferState('idle');\n setStatusMessage('');\n setError(null);\n }, []);\n\n const handleOpenModal = () => {\n resetForm();\n setIsModalOpen(true);\n };\n\n const handleCloseModal = () => {\n setIsModalOpen(false);\n resetForm();\n };\n\n const handleActionChange = (action: TransferAction) => {\n setActiveAction(action);\n setAmount('');\n setError(null);\n };\n\n const getMaxBalance = () => {\n if (activeAction === 'deposit') {\n return eoaBalances?.[selectedToken] || '0';\n }\n return earnBalanceAmounts[selectedToken] || '0';\n };\n\n const handleQuickAmount = (percentage: number) => {\n const max = parseFloat(getMaxBalance());\n if (isNaN(max)) return;\n setAmount(formatAmount(max * percentage));\n };\n\n const handleTransfer = useCallback(async () => {\n if (!address || !amount || !signTypedData) return;\n\n setError(null);\n\n try {\n // Check and switch wallet to the correct chain if needed\n const targetChainId = chain.viemChain.id;\n\n // If wallet chain ID is known and doesn't match target, we need to switch\n if (walletChainId !== undefined && walletChainId !== targetChainId) {\n if (!switchChain) {\n throw new Error(`Please switch your wallet to ${chain.name} (chain ID ${targetChainId}) to continue. Your wallet is currently on chain ID ${walletChainId}.`);\n }\n\n setStatusMessage(`Switching network to ${chain.name}...`);\n try {\n await switchChain(targetChainId);\n // Note: After switchChain, the wallet adapter should update walletChainId\n // but this might not be immediate. The signing will fail with a clear error\n // if the chain wasn't switched properly.\n } catch (switchError) {\n // If user rejects chain switch, show helpful error\n throw new Error(`Please switch your wallet to ${chain.name} to continue. Your wallet is on chain ID ${walletChainId}, but ${chain.name} requires chain ID ${targetChainId}.`);\n }\n } else if (switchChain && walletChainId === undefined) {\n // Wallet chain ID unknown - try to switch anyway as a precaution\n setStatusMessage('Switching network...');\n try {\n await switchChain(targetChainId);\n } catch (switchError) {\n throw new Error(`Please switch your wallet to ${chain.name} to continue`);\n }\n }\n\n if (activeAction === 'deposit') {\n // Check if approval needed\n setTransferState('checking_approval');\n setStatusMessage('Checking token approval...');\n\n const approveResponse = await fetch('/api/compass/transfer/approve', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n token: selectedToken,\n }),\n });\n\n if (!approveResponse.ok) {\n const errData = await approveResponse.json();\n throw new Error(errData.error || 'Failed to check approval');\n }\n\n const approvalData = await approveResponse.json();\n\n if (!approvalData.approved) {\n if (approvalData.requiresTransaction) {\n throw new Error('This token requires a transaction-based approval. Please approve manually.');\n }\n\n // Need signature for approval\n setTransferState('awaiting_approval_signature');\n setStatusMessage('Please sign the approval...');\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setTransferState('approving');\n setStatusMessage('Executing approval...');\n\n const executeApprovalResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712: approvalData.eip712,\n signature: approvalSignature,\n }),\n });\n\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n }\n }\n\n // Prepare transfer\n setTransferState('awaiting_transfer_signature');\n setStatusMessage('Preparing transfer...');\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n token: selectedToken,\n amount,\n action: activeAction.toUpperCase(),\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transfer');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStatusMessage('Please sign the transfer...');\n\n const transferSignature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n setTransferState('transferring');\n setStatusMessage('Executing transfer...');\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712: prepareData.eip712,\n signature: transferSignature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n\n const { txHash } = await executeResponse.json();\n\n setTransferState('success');\n setStatusMessage('Transfer successful!');\n\n onTransferComplete?.(activeAction, selectedToken, amount, txHash);\n\n // Invalidate queries\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['eoaBalances'] });\n\n // Reset after delay\n setTimeout(() => {\n resetForm();\n }, 2000);\n } catch (err) {\n console.error('Transfer failed:', err);\n setTransferState('error');\n setError(err instanceof Error ? err.message : 'Transfer failed');\n }\n }, [\n address,\n amount,\n activeAction,\n selectedToken,\n chainId,\n chain,\n walletChainId,\n signTypedData,\n switchChain,\n queryClient,\n onTransferComplete,\n resetForm,\n ]);\n\n if (!isConnected) {\n return null;\n }\n\n const isProcessing = transferState !== 'idle' && transferState !== 'success' && transferState !== 'error';\n\n // Show loading or \"not deployed\" state\n if (!isDeployed) {\n return (\n <div\n className={`flex items-center gap-2 rounded-lg border ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Wallet size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n <span\n className={`${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No Earn Account\n </span>\n </div>\n );\n }\n\n return (\n <>\n {/* Clickable Balance Display */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n className={`flex items-center gap-2 rounded-lg border transition-colors hover:border-[var(--compass-color-primary)] ${compact ? 'px-2 py-1.5' : 'px-3 py-2'}`}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n cursor: 'pointer',\n }}\n >\n <Wallet size={compact ? 14 : 16} style={{ color: 'var(--compass-color-primary)' }} />\n {balancesLoading ? (\n <Loader2 size={compact ? 12 : 14} className=\"animate-spin\" style={{ color: 'var(--compass-color-text-secondary)' }} />\n ) : (\n <span\n className={`font-medium ${compact ? 'text-xs' : 'text-sm'}`}\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n )}\n </button>\n\n {/* Fund Button */}\n <button\n onClick={handleOpenModal}\n className={`rounded-md font-medium transition-colors ${compact ? 'px-2 py-1 text-xs' : 'px-3 py-1.5 text-sm'}`}\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n Fund\n </button>\n\n {/* Account Balances Modal */}\n <AccountBalancesModal\n isOpen={isBalancesModalOpen}\n onClose={() => setIsBalancesModalOpen(false)}\n balances={tokenBalances}\n totalUsdValue={totalUsdValue.toString()}\n isLoading={balancesLoading}\n earnAccountAddress={earnAccountAddress ?? undefined}\n />\n\n {/* Transfer Modal */}\n <ActionModal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n title=\"Transfer Funds\"\n >\n <div className=\"flex flex-col gap-4\">\n {/* Action Tabs */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n {(['deposit', 'withdraw'] as const).map((action) => (\n <button\n key={action}\n onClick={() => handleActionChange(action)}\n disabled={isProcessing}\n className=\"flex-1 py-2 rounded-md text-sm font-medium capitalize transition-all flex items-center justify-center gap-2\"\n style={{\n backgroundColor:\n activeAction === action ? 'var(--compass-color-surface)' : 'transparent',\n color:\n activeAction === action\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {action === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : (\n <ArrowUpRight size={14} />\n )}\n {action}\n </button>\n ))}\n </div>\n\n {/* Token Selector */}\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Token\n </label>\n <TokenSelector\n tokens={TRANSFER_TOKENS}\n selectedToken={selectedToken}\n onSelect={setSelectedToken}\n balances={activeAction === 'deposit' ? eoaBalances : earnBalanceAmounts}\n disabled={isProcessing}\n />\n </div>\n\n {/* Amount Input */}\n <div>\n <div className=\"flex items-center justify-between mb-1\">\n <label\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available: {formatAmount(getMaxBalance())} {selectedToken}\n </span>\n </div>\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => {\n setAmount(e.target.value);\n setError(null);\n }}\n placeholder=\"0.00\"\n disabled={isProcessing}\n className=\"flex-1 bg-transparent outline-none text-lg font-mono\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {selectedToken}\n </span>\n </div>\n </div>\n\n {/* Quick Amount Buttons */}\n <div className=\"flex gap-2\">\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n disabled={isProcessing}\n className=\"flex-1 py-1.5 rounded-md text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 rounded-lg text-sm text-center\"\n style={{\n backgroundColor:\n transferState === 'success'\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted)',\n color:\n transferState === 'success'\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Submit Button */}\n <button\n onClick={handleTransfer}\n disabled={isProcessing || !amount || parseFloat(amount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n }}\n >\n {isProcessing && <Loader2 size={18} className=\"animate-spin\" />}\n {isProcessing\n ? 'Processing...'\n : activeAction === 'deposit'\n ? 'Deposit to Earn Account'\n : 'Withdraw to Wallet'}\n </button>\n\n {/* Gas Sponsorship Note */}\n <p\n className=\"text-xs text-center\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored by Compass\n </p>\n </div>\n </ActionModal>\n </>\n );\n}\n","'use client';\n\nimport { TrendingUp } from 'lucide-react';\nimport type { VaultData, UserVaultPosition, SortOption } from './types';\n\ninterface VaultCardProps {\n vault: VaultData & { userPosition?: UserVaultPosition };\n showApy: boolean;\n sortBy: SortOption;\n showTvl: boolean;\n showUserPosition: boolean;\n onClick: () => void;\n}\n\nfunction formatTVL(tvl: string | null): string {\n if (!tvl) return '$0';\n const num = parseFloat(tvl);\n if (isNaN(num)) return '$0';\n if (num >= 1_000_000_000) return `$${(num / 1_000_000_000).toFixed(2)}B`;\n if (num >= 1_000_000) return `$${(num / 1_000_000).toFixed(2)}M`;\n if (num >= 1_000) return `$${(num / 1_000).toFixed(2)}K`;\n return `$${num.toFixed(2)}`;\n}\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n const num = parseFloat(apy);\n if (isNaN(num)) return '0.00%';\n return `${num.toFixed(2)}%`;\n}\n\nexport function VaultCard({\n vault,\n showApy,\n sortBy,\n showTvl,\n showUserPosition,\n onClick,\n}: VaultCardProps) {\n // Determine which APY to show based on sort selection (default to 7d if sorting by TVL)\n const getDisplayApy = (): { value: string | null; period: string } => {\n switch (sortBy) {\n case 'apy_30d':\n return { value: vault.apy30d, period: '30d' };\n case 'apy_90d':\n return { value: vault.apy90d, period: '90d' };\n case 'apy_7d':\n case 'tvl':\n default:\n return { value: vault.apy7d, period: '7d' };\n }\n };\n\n const displayApy = getDisplayApy();\n const hasPosition = vault.userPosition && parseFloat(vault.userPosition.balance) > 0;\n\n return (\n <button\n onClick={onClick}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-center justify-between\">\n {/* Left: Vault Info */}\n <div className=\"flex flex-col gap-0.5\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {vault.name}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {vault.assetSymbol}\n </span>\n </div>\n\n {/* Right: Single APY display */}\n {showApy && (\n <div className=\"flex flex-col items-end\">\n <div className=\"flex items-center gap-1.5\">\n <TrendingUp size={16} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono text-lg font-bold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(displayApy.value)}\n </span>\n </div>\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {displayApy.period} APY\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: TVL and Position */}\n {(showTvl || (showUserPosition && hasPosition)) && (\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n {showTvl && (\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n TVL\n </span>\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatTVL(vault.tvlUsd)}\n </span>\n </div>\n )}\n\n {showUserPosition && hasPosition && (\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(vault.userPosition!.balance).toFixed(4)} {vault.assetSymbol}\n </span>\n </div>\n )}\n </div>\n )}\n </button>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { VaultData, UserVaultPosition, SortOption } from './types';\n\ninterface UseVaultsDataOptions {\n sortBy?: SortOption;\n assetFilter?: string[];\n minApy?: number;\n minTvl?: number;\n}\n\nexport function useVaultsData(options: UseVaultsDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'apy_7d', assetFilter, minApy, minTvl } = options;\n\n // Fetch vaults\n const vaultsQuery = useQuery({\n queryKey: ['vaults', chainId, sortBy, assetFilter, minApy, minTvl],\n queryFn: async (): Promise<VaultData[]> => {\n const assetSymbol = assetFilter && assetFilter.length === 1 ? assetFilter[0] : undefined;\n\n const response = await client.earn.earnVaults({\n chain: chainId as any,\n orderBy: sortBy === 'tvl' ? 'tvl_usd' : sortBy,\n direction: 'desc',\n limit: 100,\n ...(assetSymbol && { assetSymbol }),\n } as any);\n\n let vaults = ((response as any).vaults || []).map((v: any) => ({\n vaultAddress: v.vaultAddress,\n name: v.name || 'Unknown Vault',\n assetSymbol: v.assetSymbol || 'UNKNOWN',\n apy7d: v.apy7d ?? null,\n apy30d: v.apy30d ?? null,\n apy90d: v.apy90d ?? null,\n tvlUsd: v.tvlUsd ?? null,\n }));\n\n // Filter by multiple assets client-side\n if (assetFilter && assetFilter.length > 1) {\n vaults = vaults.filter((v: VaultData) =>\n assetFilter.includes(v.assetSymbol.toUpperCase())\n );\n }\n\n // Apply min APY filter\n if (minApy !== undefined && minApy > 0) {\n vaults = vaults.filter((v: VaultData) => {\n const apy = parseFloat(v.apy7d || '0');\n return apy >= minApy;\n });\n }\n\n // Apply min TVL filter\n if (minTvl !== undefined && minTvl > 0) {\n vaults = vaults.filter((v: VaultData) => {\n const tvl = parseFloat(v.tvlUsd || '0');\n return tvl >= minTvl;\n });\n }\n\n return vaults;\n },\n staleTime: 30 * 1000,\n });\n\n // Fetch user positions if connected\n const positionsQuery = useQuery({\n queryKey: ['vaultPositions', chainId, address],\n queryFn: async (): Promise<UserVaultPosition[]> => {\n if (!address) return [];\n\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n\n return ((response as any).vaults || []).map((p: any) => ({\n vaultAddress: p.vaultAddress,\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n // Merge vaults with positions\n const vaultsWithPositions = (vaultsQuery.data || []).map((vault) => {\n const position = positionsQuery.data?.find(\n (p) => p.vaultAddress.toLowerCase() === vault.vaultAddress.toLowerCase()\n );\n return { ...vault, userPosition: position };\n });\n\n return {\n vaults: vaultsWithPositions,\n isLoading: vaultsQuery.isLoading,\n isError: vaultsQuery.isError,\n error: vaultsQuery.error,\n refetch: () => {\n vaultsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { Search, Loader2, SlidersHorizontal } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { VaultCard } from './VaultCard';\nimport { useVaultsData } from './useVaultsData';\nimport type { VaultsListProps, VaultData, UserVaultPosition, SortOption } from './types';\n\n/**\n * VaultsList widget displays ERC-4626 yield vaults with APY, TVL, and user positions.\n *\n * @example\n * ```tsx\n * <VaultsList\n * showApy={true}\n * showTvl={true}\n * showUserPosition={true}\n * onVaultSelect={(vault) => console.log('Selected:', vault)}\n * />\n * ```\n */\nexport function VaultsList({\n showApy = true,\n apyPeriods = ['7d', '30d', '90d'],\n showTvl = true,\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n showSort = true,\n defaultSort = 'apy_7d',\n assetFilter,\n minApy,\n minTvl: initialMinTvl,\n showTvlFilter = true,\n onVaultSelect,\n onDeposit,\n onWithdraw,\n}: VaultsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState<SortOption>(defaultSort);\n const [selectedVault, setSelectedVault] = useState<(VaultData & { userPosition?: UserVaultPosition }) | null>(null);\n const [minTvlFilter, setMinTvlFilter] = useState<number | undefined>(initialMinTvl);\n const [showFilterPanel, setShowFilterPanel] = useState(false);\n\n const { vaults, isLoading, isError, refetch } = useVaultsData({\n sortBy,\n assetFilter,\n minApy,\n minTvl: minTvlFilter,\n });\n\n const handleMinTvlChange = useCallback((value: string) => {\n const num = parseFloat(value);\n setMinTvlFilter(isNaN(num) || num <= 0 ? undefined : num);\n }, []);\n\n // Filter by search query\n const filteredVaults = useMemo(() => {\n if (!searchQuery) return vaults;\n const query = searchQuery.toLowerCase();\n return vaults.filter(\n (v) =>\n v.name.toLowerCase().includes(query) ||\n v.assetSymbol.toLowerCase().includes(query)\n );\n }, [vaults, searchQuery]);\n\n const handleVaultClick = (vault: VaultData & { userPosition?: UserVaultPosition }) => {\n setSelectedVault(vault);\n onVaultSelect?.(vault);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onDeposit?.(selectedVault!, amount, txHash);\n } else {\n onWithdraw?.(selectedVault!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search, Sort, and Filter */}\n {(showSearch || showSort || showTvlFilter) && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-2\">\n {showSearch && (\n <div\n className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search vaults...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"px-3 py-2 rounded-lg border text-sm cursor-pointer\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n >\n <option value=\"apy_7d\">APY (7D)</option>\n <option value=\"apy_30d\">APY (30D)</option>\n <option value=\"apy_90d\">APY (90D)</option>\n <option value=\"tvl\">TVL</option>\n </select>\n )}\n\n {showTvlFilter && (\n <button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"px-3 py-2 rounded-lg border text-sm flex items-center gap-2\"\n style={{\n backgroundColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary-muted)' : 'var(--compass-color-background)',\n borderColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n }}\n >\n <SlidersHorizontal size={14} />\n Filter\n </button>\n )}\n </div>\n\n {/* TVL Filter Panel */}\n {showTvlFilter && showFilterPanel && (\n <div\n className=\"flex items-center gap-3 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <label\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Min TVL:\n </label>\n <div className=\"flex items-center gap-2\">\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>$</span>\n <input\n type=\"number\"\n placeholder=\"0\"\n value={minTvlFilter || ''}\n onChange={(e) => handleMinTvlChange(e.target.value)}\n className=\"w-24 px-2 py-1 rounded border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs px-2 py-1 rounded\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Clear\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Vault List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load vaults. Please try again.\n </div>\n ) : filteredVaults.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No vaults found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredVaults.map((vault) => (\n <VaultCard\n key={vault.vaultAddress}\n vault={vault}\n showApy={showApy}\n sortBy={sortBy}\n showTvl={showTvl}\n showUserPosition={showUserPosition}\n onClick={() => handleVaultClick(vault)}\n />\n ))}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedVault && (\n <ActionModal\n isOpen={!!selectedVault}\n onClose={() => setSelectedVault(null)}\n title={selectedVault.name}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedVault.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedVault.userPosition.pnl}\n tokenSymbol={selectedVault.assetSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedVault.userPosition?.deposits?.length || selectedVault.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedVault.userPosition?.deposits}\n withdrawals={selectedVault.userPosition?.withdrawals}\n tokenSymbol={selectedVault.assetSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"VAULT\"\n venueAddress={selectedVault.vaultAddress}\n venueToken={selectedVault.assetSymbol}\n positionBalance={selectedVault.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { AaveMarketData, UserAavePosition } from './types';\n\ninterface UseAaveDataOptions {\n assetFilter?: string[];\n}\n\nexport function useAaveData(options: UseAaveDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { assetFilter } = options;\n\n // Fetch Aave markets\n const marketsQuery = useQuery({\n queryKey: ['aaveMarkets', chainId, assetFilter],\n queryFn: async (): Promise<AaveMarketData[]> => {\n const response = await client.earn.earnAaveMarkets({\n chain: chainId as any,\n } as any);\n\n // Response has markets as a dictionary keyed by token symbol\n // { markets: { USDC: { chains: { base: { supplyApy, address, borrowApy } } }, ... } }\n // Note: Aave API does NOT provide TVL data\n const marketsDict = (response as any).markets || {};\n let markets: AaveMarketData[] = [];\n\n for (const [symbol, tokenData] of Object.entries(marketsDict)) {\n // If assetFilter is provided, only include matching symbols\n if (assetFilter && assetFilter.length > 0) {\n if (!assetFilter.includes(symbol.toUpperCase())) {\n continue;\n }\n }\n\n const token = tokenData as any;\n const chainData = token.chains?.[chainId];\n if (chainData) {\n markets.push({\n marketAddress: chainData.address || '',\n reserveSymbol: symbol,\n underlyingSymbol: symbol,\n supplyApy: chainData.supplyApy?.toString() ?? null,\n borrowApy: chainData.borrowApy?.toString() ?? null,\n });\n }\n }\n\n // Sort by supply APY (descending)\n markets.sort((a: AaveMarketData, b: AaveMarketData) => {\n return parseFloat(b.supplyApy || '0') - parseFloat(a.supplyApy || '0');\n });\n\n return markets;\n },\n staleTime: 30 * 1000,\n });\n\n // Fetch user positions\n const positionsQuery = useQuery({\n queryKey: ['aavePositions', chainId, address],\n queryFn: async (): Promise<UserAavePosition[]> => {\n if (!address) return [];\n\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n\n return ((response as any).aave || []).map((p: any) => ({\n marketAddress: p.marketAddress || '',\n reserveSymbol: p.reserveSymbol || '',\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n // Merge markets with positions\n const marketsWithPositions = (marketsQuery.data || []).map((market) => {\n const position = positionsQuery.data?.find(\n (p) => p.reserveSymbol.toLowerCase() === market.reserveSymbol.toLowerCase()\n );\n return { ...market, userPosition: position };\n });\n\n return {\n markets: marketsWithPositions,\n isLoading: marketsQuery.isLoading,\n isError: marketsQuery.isError,\n error: marketsQuery.error,\n refetch: () => {\n marketsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { Search, Loader2, TrendingUp } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { useAaveData } from './useAaveData';\nimport type { AaveMarketsListProps, AaveMarketData, UserAavePosition } from './types';\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n const num = parseFloat(apy);\n // API returns APY already as percentage (e.g., 3.5 for 3.5%)\n return `${num.toFixed(2)}%`;\n}\n\n/**\n * AaveMarketsList widget displays Aave V3 lending markets with supply APY.\n *\n * @example\n * ```tsx\n * <AaveMarketsList\n * showApy={true}\n * showUserPosition={true}\n * onMarketSelect={(market) => console.log('Selected:', market)}\n * />\n * ```\n */\nexport function AaveMarketsList({\n showApy = true,\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n assetFilter,\n onMarketSelect,\n onSupply,\n onWithdraw,\n}: AaveMarketsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedMarket, setSelectedMarket] = useState<(AaveMarketData & { userPosition?: UserAavePosition }) | null>(null);\n\n const { markets, isLoading, isError, refetch } = useAaveData({ assetFilter });\n\n const filteredMarkets = useMemo(() => {\n if (!searchQuery) return markets;\n const query = searchQuery.toLowerCase();\n return markets.filter((m) =>\n m.reserveSymbol.toLowerCase().includes(query) ||\n m.underlyingSymbol.toLowerCase().includes(query)\n );\n }, [markets, searchQuery]);\n\n const handleMarketClick = (market: AaveMarketData & { userPosition?: UserAavePosition }) => {\n setSelectedMarket(market);\n onMarketSelect?.(market);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onSupply?.(selectedMarket!, amount, txHash);\n } else {\n onWithdraw?.(selectedMarket!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div\n className=\"flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search markets...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {/* Market List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load Aave markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No markets found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredMarkets.map((market) => {\n const hasPosition = market.userPosition && parseFloat(market.userPosition.balance) > 0;\n return (\n <button\n key={market.marketAddress}\n onClick={() => handleMarketClick(market)}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col gap-1\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {market.underlyingSymbol}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Aave V3\n </span>\n </div>\n\n {/* Right: APY */}\n {showApy && (\n <div className=\"flex items-center gap-1\">\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(market.supplyApy)}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: Position */}\n {showUserPosition && hasPosition && (\n <div className=\"flex items-center justify-end mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex flex-col items-end\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Your Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(market.userPosition!.balance).toFixed(4)} {market.underlyingSymbol}\n </span>\n </div>\n </div>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedMarket && (\n <ActionModal\n isOpen={!!selectedMarket}\n onClose={() => setSelectedMarket(null)}\n title={`${selectedMarket.underlyingSymbol} - Aave`}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedMarket.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedMarket.userPosition.pnl}\n tokenSymbol={selectedMarket.underlyingSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedMarket.userPosition?.deposits?.length || selectedMarket.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedMarket.userPosition?.deposits}\n withdrawals={selectedMarket.userPosition?.withdrawals}\n tokenSymbol={selectedMarket.underlyingSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"AAVE\"\n venueAddress={selectedMarket.marketAddress}\n venueToken={selectedMarket.underlyingSymbol}\n positionBalance={selectedMarket.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { PendleMarketData, UserPendlePosition, SortOption } from './types';\n\ninterface UsePendleDataOptions {\n sortBy?: SortOption;\n assetFilter?: string[];\n minTvl?: number;\n}\n\nexport function usePendleData(options: UsePendleDataOptions = {}) {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'fixed_apy', assetFilter, minTvl } = options;\n\n const marketsQuery = useQuery({\n queryKey: ['pendleMarkets', chainId, sortBy, assetFilter, minTvl],\n queryFn: async (): Promise<PendleMarketData[]> => {\n // If single asset filter, pass to API for filtering\n const underlyingSymbol = assetFilter && assetFilter.length === 1 ? assetFilter[0] : undefined;\n\n // Map sortBy to API orderBy\n const orderBy = sortBy === 'tvl' ? 'tvl_usd' : 'implied_apy';\n\n const response = await client.earn.earnPendleMarkets({\n chain: chainId as any,\n orderBy,\n direction: 'desc',\n limit: 100,\n ...(underlyingSymbol && { underlyingSymbol }),\n } as any);\n\n // Response has markets as an array\n // expiry is a Unix timestamp in seconds\n const now = Date.now() / 1000; // Current time in seconds\n let markets = ((response as any).markets || [])\n .filter((m: any) => m.expiry && m.expiry > now) // Only active markets\n .map((m: any) => ({\n marketAddress: m.marketAddress || '',\n ptAddress: m.ptAddress || '',\n name: m.ptName || `PT-${m.underlyingSymbol || 'UNKNOWN'}`,\n underlyingSymbol: m.underlyingSymbol || 'UNKNOWN',\n // Use impliedApy as the main APY (this is what wallet-earn displays)\n fixedApy: m.impliedApy?.toString() ?? null,\n impliedApy: m.impliedApy?.toString() ?? null,\n tvlUsd: m.tvlUsd?.toString() ?? null,\n // Convert Unix timestamp to ISO string for display\n expiry: new Date(m.expiry * 1000).toISOString(),\n }));\n\n // If multiple asset filters provided, filter client-side (API only supports single asset)\n if (assetFilter && assetFilter.length > 1) {\n markets = markets.filter((m: PendleMarketData) =>\n assetFilter.includes(m.underlyingSymbol.toUpperCase())\n );\n }\n\n // Apply min TVL filter\n if (minTvl !== undefined && minTvl > 0) {\n markets = markets.filter((m: PendleMarketData) => {\n const tvl = parseFloat(m.tvlUsd || '0');\n return tvl >= minTvl;\n });\n }\n\n // Client-side sorting for expiry (API doesn't support this sort option)\n if (sortBy === 'expiry') {\n markets.sort((a: PendleMarketData, b: PendleMarketData) => {\n return new Date(a.expiry).getTime() - new Date(b.expiry).getTime();\n });\n }\n\n return markets;\n },\n staleTime: 30 * 1000,\n });\n\n const positionsQuery = useQuery({\n queryKey: ['pendlePositions', chainId, address],\n queryFn: async (): Promise<UserPendlePosition[]> => {\n if (!address) return [];\n const response = await client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any);\n return ((response as any).pendlePt || []).map((p: any) => ({\n marketAddress: p.marketAddress || '',\n balance: p.balance || '0',\n pnl: p.pnl ? {\n unrealizedPnl: p.pnl.unrealizedPnl || '0',\n realizedPnl: p.pnl.realizedPnl || '0',\n totalPnl: p.pnl.totalPnl || '0',\n totalDeposited: p.pnl.totalDeposited || '0',\n } : undefined,\n deposits: (p.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n })),\n withdrawals: (p.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n })),\n }));\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const marketsWithPositions = (marketsQuery.data || []).map((market) => {\n const position = positionsQuery.data?.find(\n (p) => p.marketAddress.toLowerCase() === market.marketAddress.toLowerCase()\n );\n return { ...market, userPosition: position };\n });\n\n return {\n markets: marketsWithPositions,\n isLoading: marketsQuery.isLoading,\n isError: marketsQuery.isError,\n error: marketsQuery.error,\n refetch: () => {\n marketsQuery.refetch();\n positionsQuery.refetch();\n },\n };\n}\n","'use client';\n\nimport { useState, useMemo, useCallback } from 'react';\nimport { Search, Loader2, TrendingUp, Calendar, SlidersHorizontal } from 'lucide-react';\nimport { ChainSwitcher, WalletStatus, ActionModal, PnLSummary, DepositWithdrawForm, TransactionHistory, EarnAccountGuard, EarnAccountBalance } from '../../shared';\nimport { usePendleData } from './usePendleData';\nimport type { PendleMarketsListProps, PendleMarketData, UserPendlePosition, SortOption } from './types';\n\nfunction formatAPY(apy: string | null): string {\n if (!apy) return '0.00%';\n // API returns APY already as percentage (e.g., 3.5 for 3.5%)\n return `${parseFloat(apy).toFixed(2)}%`;\n}\n\nfunction formatExpiry(expiry: string): string {\n const date = new Date(expiry);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n}\n\nfunction formatTVL(tvl: string | null): string {\n if (!tvl) return '$0';\n const num = parseFloat(tvl);\n if (num >= 1_000_000_000) return `$${(num / 1_000_000_000).toFixed(2)}B`;\n if (num >= 1_000_000) return `$${(num / 1_000_000).toFixed(2)}M`;\n if (num >= 1_000) return `$${(num / 1_000).toFixed(2)}K`;\n return `$${num.toFixed(2)}`;\n}\n\n/**\n * PendleMarketsList widget displays Pendle fixed-yield markets.\n *\n * @example\n * ```tsx\n * <PendleMarketsList\n * showApy={true}\n * showExpiry={true}\n * showTvl={true}\n * onMarketSelect={(market) => console.log('Selected:', market)}\n * />\n * ```\n */\nexport function PendleMarketsList({\n showApy = true,\n showTvl = true,\n showExpiry = true,\n showUserPosition = true,\n showPnL = true,\n showHistory = true,\n showSearch = true,\n showSort = true,\n defaultSort = 'fixed_apy',\n assetFilter,\n minTvl: initialMinTvl,\n showTvlFilter = true,\n onMarketSelect,\n onDeposit,\n onWithdraw,\n}: PendleMarketsListProps) {\n const [searchQuery, setSearchQuery] = useState('');\n const [sortBy, setSortBy] = useState<SortOption>(defaultSort);\n const [selectedMarket, setSelectedMarket] = useState<(PendleMarketData & { userPosition?: UserPendlePosition }) | null>(null);\n const [minTvlFilter, setMinTvlFilter] = useState<number | undefined>(initialMinTvl);\n const [showFilterPanel, setShowFilterPanel] = useState(false);\n\n const { markets, isLoading, isError, refetch } = usePendleData({ sortBy, assetFilter, minTvl: minTvlFilter });\n\n const handleMinTvlChange = useCallback((value: string) => {\n const num = parseFloat(value);\n setMinTvlFilter(isNaN(num) || num <= 0 ? undefined : num);\n }, []);\n\n const filteredMarkets = useMemo(() => {\n if (!searchQuery) return markets;\n const query = searchQuery.toLowerCase();\n return markets.filter((m) =>\n m.name.toLowerCase().includes(query) ||\n m.underlyingSymbol.toLowerCase().includes(query)\n );\n }, [markets, searchQuery]);\n\n const handleMarketClick = (market: PendleMarketData & { userPosition?: UserPendlePosition }) => {\n setSelectedMarket(market);\n onMarketSelect?.(market);\n };\n\n const handleActionSuccess = (action: 'deposit' | 'withdraw', amount: string, txHash: string) => {\n if (action === 'deposit') {\n onDeposit?.(selectedMarket!, amount, txHash);\n } else {\n onWithdraw?.(selectedMarket!, amount, txHash);\n }\n refetch();\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search, Sort, and Filter */}\n {(showSearch || showSort || showTvlFilter) && (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-2\">\n {showSearch && (\n <div\n className=\"flex-1 flex items-center gap-2 px-3 py-2 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <Search size={16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <input\n type=\"text\"\n placeholder=\"Search markets...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className=\"flex-1 bg-transparent outline-none text-sm\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n </div>\n )}\n\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"px-3 py-2 rounded-lg border text-sm cursor-pointer\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n >\n <option value=\"fixed_apy\">Fixed APY</option>\n <option value=\"tvl\">TVL</option>\n <option value=\"expiry\">Expiry</option>\n </select>\n )}\n\n {showTvlFilter && (\n <button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"px-3 py-2 rounded-lg border text-sm flex items-center gap-2\"\n style={{\n backgroundColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary-muted)' : 'var(--compass-color-background)',\n borderColor: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n color: showFilterPanel || minTvlFilter ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n }}\n >\n <SlidersHorizontal size={14} />\n Filter\n </button>\n )}\n </div>\n\n {/* TVL Filter Panel */}\n {showTvlFilter && showFilterPanel && (\n <div\n className=\"flex items-center gap-3 p-3 rounded-lg border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <label\n className=\"text-sm font-medium whitespace-nowrap\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Min TVL:\n </label>\n <div className=\"flex items-center gap-2\">\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>$</span>\n <input\n type=\"number\"\n placeholder=\"0\"\n value={minTvlFilter || ''}\n onChange={(e) => handleMinTvlChange(e.target.value)}\n className=\"w-24 px-2 py-1 rounded border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs px-2 py-1 rounded\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Clear\n </button>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* Market List */}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"p-4 rounded-lg text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n Failed to load Pendle markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"p-8 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n No active markets found\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {filteredMarkets.map((market) => {\n const hasPosition = market.userPosition && parseFloat(market.userPosition.balance) > 0;\n return (\n <button\n key={market.marketAddress}\n onClick={() => handleMarketClick(market)}\n className=\"w-full p-4 rounded-xl border transition-all text-left hover:scale-[1.01]\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: hasPosition ? 'var(--compass-color-primary)' : 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col gap-1\">\n <h3\n className=\"font-semibold\"\n style={{\n fontSize: 'var(--compass-font-size-body)',\n color: 'var(--compass-color-text)',\n }}\n >\n {market.name}\n </h3>\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {market.underlyingSymbol}\n </span>\n </div>\n\n {/* Right: APY */}\n {showApy && (\n <div className=\"flex items-center gap-1\">\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span\n className=\"font-mono font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {formatAPY(market.fixedApy)}\n </span>\n </div>\n )}\n </div>\n\n {/* Bottom Row: TVL, Expiry, and Position */}\n <div className=\"flex items-center justify-between mt-3 pt-3 border-t\" style={{ borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex gap-4\">\n {showTvl && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n TVL\n </span>\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatTVL(market.tvlUsd)}\n </span>\n </div>\n )}\n\n {showExpiry && (\n <div className=\"flex flex-col\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Expiry\n </span>\n <div className=\"flex items-center gap-1\">\n <Calendar size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n <span\n className=\"font-mono text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatExpiry(market.expiry)}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {showUserPosition && hasPosition && (\n <div className=\"flex flex-col items-end\">\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Your Position\n </span>\n <span\n className=\"font-mono text-sm font-medium\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n {parseFloat(market.userPosition!.balance).toFixed(4)} PT\n </span>\n </div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n )}\n\n {/* Action Modal */}\n {selectedMarket && (\n <ActionModal\n isOpen={!!selectedMarket}\n onClose={() => setSelectedMarket(null)}\n title={selectedMarket.name}\n >\n <EarnAccountGuard>\n <div className=\"flex flex-col gap-4\">\n {/* P&L Summary */}\n {showPnL && selectedMarket.userPosition?.pnl && (\n <PnLSummary\n pnl={selectedMarket.userPosition.pnl}\n tokenSymbol={selectedMarket.underlyingSymbol}\n tokenPrice={1} // TODO: Get actual token price\n />\n )}\n\n {/* Transaction History */}\n {showHistory && (selectedMarket.userPosition?.deposits?.length || selectedMarket.userPosition?.withdrawals?.length) && (\n <TransactionHistory\n deposits={selectedMarket.userPosition?.deposits}\n withdrawals={selectedMarket.userPosition?.withdrawals}\n tokenSymbol={selectedMarket.underlyingSymbol}\n />\n )}\n\n {/* Deposit/Withdraw Form */}\n <DepositWithdrawForm\n venueType=\"PENDLE_PT\"\n venueAddress={selectedMarket.marketAddress}\n venueToken={selectedMarket.underlyingSymbol}\n positionBalance={selectedMarket.userPosition?.balance}\n onSuccess={handleActionSuccess}\n />\n </div>\n </EarnAccountGuard>\n </ActionModal>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCompassWallet } from '../../contexts/WalletContext';\nimport type { SwapQuote } from './types';\n\ninterface UseSwapQuoteOptions {\n fromToken: string;\n toToken: string;\n amount: string;\n enabled?: boolean;\n}\n\nexport function useSwapQuote({ fromToken, toToken, amount, enabled = true }: UseSwapQuoteOptions) {\n const { chainId } = useChain();\n const { address } = useCompassWallet();\n\n const query = useQuery({\n queryKey: ['swapQuote', chainId, fromToken, toToken, amount, address],\n queryFn: async (): Promise<SwapQuote | null> => {\n if (!fromToken || !toToken || !amount || parseFloat(amount) <= 0 || !address) {\n return null;\n }\n\n try {\n const params = new URLSearchParams({\n owner: address,\n chain: chainId,\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: amount,\n });\n\n const response = await fetch(`/api/compass/swap/quote?${params}`);\n\n if (!response.ok) {\n const errorData = await response.json();\n // Extract the user-friendly message from the API error\n const errorMessage = errorData.message || errorData.error || 'Failed to get swap quote';\n throw new Error(errorMessage);\n }\n\n const data = await response.json();\n const outputAmount = data.estimatedAmountOut || '0';\n const inputAmountNum = parseFloat(amount);\n const outputAmountNum = parseFloat(outputAmount);\n\n return {\n inputAmount: amount,\n outputAmount,\n rate: inputAmountNum > 0 ? (outputAmountNum / inputAmountNum).toString() : '0',\n };\n } catch (error) {\n console.error('Failed to get swap quote:', error);\n throw error;\n }\n },\n enabled: enabled && !!address && !!fromToken && !!toToken && !!amount && parseFloat(amount) > 0,\n staleTime: 10 * 1000,\n refetchInterval: 15 * 1000,\n retry: 1,\n });\n\n return {\n quote: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { ArrowDownUp, Loader2, AlertCircle } from 'lucide-react';\nimport { ChainSwitcher } from '../../shared/ChainSwitcher';\nimport { WalletStatus } from '../../shared/WalletStatus';\nimport { EarnAccountBalance } from '../../shared/EarnAccountBalance';\nimport { useSwapQuote } from './useSwapQuote';\nimport { useCompassWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { SwapWidgetProps } from './types';\n\nconst DEFAULT_TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'];\n\nexport function SwapWidget({\n layout = 'full',\n defaultFromToken = 'ETH',\n defaultToToken = 'USDC',\n allowedTokens = DEFAULT_TOKENS,\n showReverseButton = true,\n showSettings = false,\n onSwapSuccess,\n onSwapError,\n}: SwapWidgetProps) {\n const [fromToken, setFromToken] = useState(defaultFromToken);\n const [toToken, setToToken] = useState(defaultToToken);\n const [fromAmount, setFromAmount] = useState('');\n const [isSwapping, setIsSwapping] = useState(false);\n const [swapStatus, setSwapStatus] = useState<string>('');\n\n const { address, isConnected, signTypedData } = useCompassWallet();\n const { chainId } = useChain();\n\n const { quote, isLoading: isQuoteLoading, error: quoteError } = useSwapQuote({\n fromToken,\n toToken,\n amount: fromAmount,\n enabled: !!fromAmount && parseFloat(fromAmount) > 0,\n });\n\n const handleReverse = useCallback(() => {\n setFromToken(toToken);\n setToToken(fromToken);\n setFromAmount('');\n }, [fromToken, toToken]);\n\n const handleSwap = useCallback(async () => {\n if (!address || !fromAmount || !quote) return;\n\n setIsSwapping(true);\n setSwapStatus('Preparing swap...');\n\n try {\n // Step 1: Call swap/prepare to get EIP-712 data for signing\n const prepareResponse = await fetch('/api/compass/swap/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: fromAmount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const error = await prepareResponse.json();\n throw new Error(error.error || 'Failed to prepare swap');\n }\n\n const prepareData = await prepareResponse.json();\n const { eip712, normalizedTypes } = prepareData;\n\n if (!eip712) {\n throw new Error('No EIP-712 data returned from prepare');\n }\n\n // Step 2: Sign the EIP-712 typed data with user's wallet\n setSwapStatus('Please sign the transaction...');\n\n const signature = await signTypedData({\n domain: eip712.domain,\n types: normalizedTypes || eip712.types,\n primaryType: 'SafeTx',\n message: eip712.message,\n });\n\n // Step 3: Execute the swap with the signature\n setSwapStatus('Executing swap...');\n\n const executeResponse = await fetch('/api/compass/swap/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n eip712,\n signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const error = await executeResponse.json();\n throw new Error(error.error || 'Failed to execute swap');\n }\n\n const executeData = await executeResponse.json();\n const txHash = executeData.txHash;\n\n setSwapStatus('Swap successful!');\n onSwapSuccess?.(fromToken, toToken, fromAmount, quote.outputAmount, txHash);\n setFromAmount('');\n\n // Clear status after a delay\n setTimeout(() => setSwapStatus(''), 3000);\n } catch (error) {\n console.error('Swap failed:', error);\n setSwapStatus('');\n onSwapError?.(error as Error);\n } finally {\n setIsSwapping(false);\n }\n }, [address, fromAmount, quote, chainId, fromToken, toToken, signTypedData, onSwapSuccess, onSwapError]);\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header - always show chain switcher and wallet status */}\n <div className=\"flex items-center justify-between gap-2 flex-wrap\">\n <ChainSwitcher />\n <div className=\"flex items-center gap-2\">\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {/* From Token */}\n <div className=\"p-4 rounded-xl border relative\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>From</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"flex-1 bg-transparent outline-none text-2xl font-mono min-w-0\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <select\n value={fromToken}\n onChange={(e) => setFromToken(e.target.value)}\n className=\"px-3 py-2 rounded-lg border text-sm font-medium cursor-pointer flex-shrink-0\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)' }}\n >\n {allowedTokens.filter(t => t !== toToken).map((token) => (\n <option key={token} value={token}>{token}</option>\n ))}\n </select>\n </div>\n </div>\n\n {/* Reverse Button */}\n {showReverseButton && (\n <div className=\"flex justify-center -my-1 relative z-10\">\n <button\n onClick={handleReverse}\n className=\"p-2 rounded-full border transition-colors hover:opacity-80\"\n style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}\n >\n <ArrowDownUp size={16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n )}\n\n {/* To Token */}\n <div className=\"p-4 rounded-xl border\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)' }}>\n <div className=\"flex items-center justify-between mb-2\">\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>To</span>\n </div>\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1 text-2xl font-mono\" style={{ color: isQuoteLoading ? 'var(--compass-color-text-tertiary)' : 'var(--compass-color-text)' }}>\n {isQuoteLoading ? (\n <span className=\"flex items-center gap-2\">\n <Loader2 size={16} className=\"animate-spin\" />\n Loading...\n </span>\n ) : quote?.outputAmount ? (\n parseFloat(quote.outputAmount).toFixed(8)\n ) : (\n '0.00000000'\n )}\n </div>\n <select\n value={toToken}\n onChange={(e) => setToToken(e.target.value)}\n className=\"px-3 py-2 rounded-lg border text-sm font-medium cursor-pointer\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)' }}\n >\n {allowedTokens.filter(t => t !== fromToken).map((token) => (\n <option key={token} value={token}>{token}</option>\n ))}\n </select>\n </div>\n </div>\n </div>\n\n {/* Quote Details */}\n {quote && (\n <div className=\"flex items-center justify-between text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n <span>Rate</span>\n <span className=\"font-mono\">1 {fromToken} = {parseFloat(quote.rate).toFixed(6)} {toToken}</span>\n </div>\n )}\n\n {/* Quote Error */}\n {quoteError && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n <AlertCircle size={16} />\n <span>{quoteError.message}</span>\n </div>\n )}\n\n {/* Swap Status */}\n {swapStatus && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-lg text-sm\"\n style={{\n backgroundColor: swapStatus.includes('successful') ? 'var(--compass-color-success-muted)' : 'var(--compass-color-surface)',\n color: swapStatus.includes('successful') ? 'var(--compass-color-success)' : 'var(--compass-color-text-secondary)',\n }}\n >\n {!swapStatus.includes('successful') && <Loader2 size={14} className=\"animate-spin\" />}\n {swapStatus}\n </div>\n )}\n\n {/* Swap Button */}\n {!isConnected ? (\n <div\n className=\"flex flex-col items-center gap-3 py-6 px-4 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <AlertCircle size={24} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <p\n className=\"text-sm text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Connect your wallet to swap\n </p>\n </div>\n ) : (\n <button\n onClick={handleSwap}\n disabled={isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0}\n className=\"w-full py-3 rounded-lg font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{ backgroundColor: 'var(--compass-color-primary)', color: 'var(--compass-color-primary-text)' }}\n >\n {isSwapping && <Loader2 size={18} className=\"animate-spin\" />}\n {isSwapping ? 'Swapping...' : 'Swap'}\n </button>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { VaultsList } from '../VaultsList';\nimport { AaveMarketsList } from '../AaveMarketsList';\nimport { PendleMarketsList } from '../PendleMarketsList';\nimport { SwapWidget } from '../SwapWidget';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nconst tabs: TabConfig[] = [\n { id: 'vaults', label: 'Vaults', enabled: true },\n { id: 'aave', label: 'Aave', enabled: true },\n { id: 'pendle', label: 'Pendle', enabled: true },\n { id: 'swap', label: 'Swap', enabled: true },\n];\n\nexport function CompassEarnWidget({\n defaultTab = 'vaults',\n onTabChange,\n}: CompassEarnWidgetProps) {\n const [activeTab, setActiveTab] = useState<TabId>(defaultTab);\n\n const handleTabChange = (tab: TabId) => {\n setActiveTab(tab);\n onTabChange?.(tab);\n };\n\n return (\n <div className=\"flex flex-col gap-4\">\n {/* Header */}\n <h1 className=\"font-bold text-xl\" style={{ color: 'var(--compass-color-text)' }}>\n Compass Earn\n </h1>\n\n {/* Tab Bar */}\n <div\n className=\"flex gap-1 p-1 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => handleTabChange(tab.id)}\n className=\"flex-1 py-2 px-3 rounded-md text-sm font-medium transition-all\"\n style={{\n backgroundColor: activeTab === tab.id ? 'var(--compass-color-primary)' : 'transparent',\n color: activeTab === tab.id ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div>\n {activeTab === 'vaults' && <VaultsList />}\n {activeTab === 'aave' && <AaveMarketsList />}\n {activeTab === 'pendle' && <PendleMarketsList />}\n {activeTab === 'swap' && <SwapWidget />}\n </div>\n </div>\n );\n}\n","import { base, mainnet, arbitrum, type Chain } from 'viem/chains';\n\nexport type SupportedChainId = 'ethereum' | 'base' | 'arbitrum';\n\nexport interface ChainConfig {\n id: SupportedChainId;\n name: string;\n viemChain: Chain;\n icon: string;\n rpcUrl?: string;\n}\n\nexport const CHAINS: Record<SupportedChainId, ChainConfig> = {\n ethereum: {\n id: 'ethereum',\n name: 'Ethereum',\n viemChain: mainnet,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/info/logo.png',\n },\n base: {\n id: 'base',\n name: 'Base',\n viemChain: base,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/base/info/logo.png',\n },\n arbitrum: {\n id: 'arbitrum',\n name: 'Arbitrum',\n viemChain: arbitrum,\n icon: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/arbitrum/info/logo.png',\n },\n};\n\nexport const DEFAULT_CHAIN: SupportedChainId = 'base';\n\nexport const TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'cbBTC', 'USDT', 'DAI', 'SBC'] as const;\nexport type SupportedToken = (typeof TOKENS)[number];\n"]}
|