@compass-labs/widgets 0.1.16 → 0.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -28
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.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/EarnAccount/MarketSelector.tsx","../src/components/EarnAccount/EarningsModal.tsx","../src/components/EarnAccount/EarnAccount.tsx","../src/components/PendleMarketsList/usePendleData.ts","../src/components/PendleMarketsList/PendleMarketsList.tsx","../src/components/SwapWidget/useSwapQuote.ts","../src/components/SwapWidget/types.ts","../src/components/SwapWidget/SwapWidget.tsx","../src/components/EarnPositionsList/usePositionsData.ts","../src/components/EarnPositionsList/PositionCard.tsx","../src/components/EarnPositionsList/VenueSection.tsx","../src/components/EarnPositionsList/PositionDetailModal.tsx","../src/components/EarnPositionsList/EarnPositionsList.tsx","../src/components/CompassEarnWidget/presets.ts","../src/components/CompassEarnWidget/CompassEarnWidget.tsx","../src/constants.ts"],"names":["createContext","useMemo","CompassApiSDK","jsx","useContext","mainnet","base","arbitrum","useState","useEffect","useQueryClient","useQuery","useCallback","QueryClient","QueryClientProvider","jsxs","Wallet","LogOut","X","formatUSD","ChevronDown","useRef","AlertCircle","ArrowRight","Loader2","ArrowDownLeft","ArrowUpRight","ExternalLink","Fragment","Coins","TrendingUp","Search","SlidersHorizontal","formatAPY","formatDate","ChevronUp","formatAmount","positions","ChevronRight","Plus","Minus","Shield","CheckCircle","formatTVL","Calendar","ArrowDownUp","totalBalanceUsd","PositionCard","TrendingDown","Percent","Clock","Inbox"],"mappings":"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","file":"index.js","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 (may be empty when using server-side routes) */\n apiKey: string;\n /** The Compass API SDK client instance (may be a dummy when using server-side routes) */\n client: CompassApiSDK;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\ninterface ApiProviderProps {\n children: ReactNode;\n /** API key - optional when using server-side routes */\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 * When apiKey is not provided, a minimal client is created but all\n * data fetching should go through server-side /api/compass/* routes.\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 * @deprecated When using server-side routes, prefer using fetch to /api/compass/* instead.\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: '8px',\n containerPadding: '1rem',\n cardPadding: '12px',\n inputPadding: '0.5rem 0.75rem',\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 primaryMuted: 'rgba(99, 102, 241, 0.15)',\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 primaryMuted: 'rgba(99, 102, 241, 0.1)',\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 primaryMuted: 'rgba(255, 255, 255, 0.1)',\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 primaryMuted: 'rgba(10, 10, 10, 0.1)',\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 primaryMuted: 'rgba(59, 130, 246, 0.2)',\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 primaryMuted: 'rgba(29, 78, 216, 0.15)',\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 * Generates both old format (--compass-font-{name}-size) and\n * component-expected format (--compass-font-size-{name})\n */\nfunction typographyScaleToCssVariables(\n name: string,\n scale: TypographyScale\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Component-expected format: --compass-font-size-{name}\n vars[`--compass-font-size-${name}`] = scale.fontSize;\n vars[`--compass-font-line-height-${name}`] = String(scale.lineHeight);\n vars[`--compass-font-weight-${name}`] = String(scale.fontWeight);\n\n if (scale.letterSpacing) {\n vars[`--compass-font-letter-spacing-${name}`] = 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 // Add alias for 'small' (maps to caption)\n vars['--compass-font-size-small'] = typography.caption.fontSize;\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 - use format components expect\n for (const [key, value] of Object.entries(shape.borderRadius)) {\n if (key === 'md') {\n // Default border radius (no suffix)\n vars['--compass-border-radius'] = value;\n }\n vars[`--compass-border-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: themeProp }: ThemeProviderProps) {\n const [themeInput, setThemeInput] = useState<ThemeInput | undefined>(themeProp);\n\n // Sync internal state when prop changes\n useEffect(() => {\n setThemeInput(themeProp);\n }, [themeProp]);\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 /**\n * Compass API key - optional when using server-side API routes.\n * If not provided, all API calls will go through /api/compass/* routes.\n * @deprecated Use server-side API routes instead for better security.\n */\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\" style={{ width: '100%', minHeight: '100%' }}>\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\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\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 text-sm font-medium\"\n style={{\n backgroundColor: isActive ? 'var(--compass-color-primary)' : 'transparent',\n color: isActive ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-normal)',\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 font-medium hover:opacity-90\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <div\n className=\"w-2 h-2 flex-shrink-0\"\n style={{\n backgroundColor: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\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=\"hover:bg-white/10 flex-shrink-0\"\n title=\"Disconnect wallet\"\n style={{\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.25)' : 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-normal)',\n }}\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 overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b\"\n style={{\n borderColor: 'var(--compass-color-border)',\n padding: 'calc(var(--compass-spacing-card) * 0.75) var(--compass-spacing-card)',\n }}\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=\"hover:opacity-70\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 'var(--compass-spacing-card)' }}>\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 border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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] 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 borderRadius: 'var(--compass-border-radius-lg)',\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 immediately\n queryClient.invalidateQueries({ queryKey: ['earnAccountTokenBalance'] });\n queryClient.invalidateQueries({ queryKey: ['vaults'] });\n queryClient.invalidateQueries({ queryKey: ['aaveMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['pendleMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Tab Switcher */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\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 text-sm font-medium capitalize\"\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 borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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={{\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n className=\"flex-1 text-xs font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-fast)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"text-sm text-center\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\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 font-medium flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\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\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n <ArrowDownLeft size={12} style={{ color: 'var(--compass-color-success)' }} />\n </div>\n ) : (\n <div\n className=\"p-1\"\n style={{\n backgroundColor: 'var(--compass-color-warning-muted)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\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 hover:opacity-70 transition-opacity\"\n title=\"View on explorer\"\n style={{ borderRadius: 'var(--compass-border-radius-sm)' }}\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\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 font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Icon */}\n <div\n className=\"w-12 h-12 flex items-center justify-center mx-auto mb-4\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n opacity: 0.15,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n <svg\n width=\"28\"\n height=\"28\"\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 <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"M12 10v4M10 12h4\" />\n </svg>\n </div>\n\n <h3\n className=\"text-xl font-semibold mb-3\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Set Up Your Savings Account\n </h3>\n\n <div\n className=\"text-sm mb-6 max-w-sm mx-auto space-y-3\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <p>\n Your Earn Account is a special savings wallet that lets you earn interest on your money.\n </p>\n <p>\n <strong style={{ color: 'var(--compass-color-text)' }}>You stay in control</strong> — only you can access and move your funds. Think of it like opening a high-yield savings account, but you hold the keys.\n </p>\n <p className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n This one-time setup takes just a few seconds and costs you nothing.\n </p>\n </div>\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 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)' : 'white',\n cursor: isCreating ? 'not-allowed' : 'pointer',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n {isCreating && (\n <Loader2 size={18} className=\"animate-spin\" />\n )}\n {isCreating ? 'Setting up...' : 'Create My Savings Account'}\n </button>\n\n <p\n className=\"text-xs mt-4 max-w-xs mx-auto\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n You'll be asked to approve this transaction — this is because you're the only one who can authorize the creation of your account. Your keys, your control.\n </p>\n\n <p\n className=\"text-xs mt-2\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Free to create • No fees\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 overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b\"\n style={{\n borderColor: 'var(--compass-color-border)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75) var(--compass-spacing-card)',\n }}\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=\"hover:opacity-70\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 'var(--compass-spacing-card)' }}>\n {isLoading ? (\n <div className=\"flex items-center justify-center\" style={{ padding: 'calc(var(--compass-spacing-unit) * 2) 0' }}>\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\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2) 0' }}\n >\n No token balances found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {/* Total - Prominent at top */}\n <div\n className=\"flex items-center justify-between border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 1)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\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-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n </div>\n\n {/* Token Breakdown Label */}\n <div\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) 0',\n }}\n >\n Token Breakdown\n </div>\n\n {/* Token List */}\n {balances.map((token) => (\n <div\n key={token.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n {/* Token Icon Placeholder */}\n <div\n className=\"w-8 h-8 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 borderRadius: 'var(--compass-border-radius-full)',\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 </div>\n )}\n\n {/* Account Address */}\n {earnAccountAddress && (\n <div\n className=\"border-t text-center\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'var(--compass-spacing-card)',\n paddingTop: 'var(--compass-spacing-card)',\n }}\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 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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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={`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 borderRadius: 'var(--compass-border-radius-md)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\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 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 borderRadius: 'var(--compass-border-radius-md)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\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 text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 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 borderRadius: 'var(--compass-border-radius-lg)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\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\n className=\"flex items-center justify-between border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 2)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\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 { 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 { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'apy_7d', assetFilter, minApy, minTvl } = options;\n\n // Fetch vaults via server-side proxy\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 params = new URLSearchParams({\n chain: chainId,\n orderBy: sortBy === 'tvl' ? 'tvl_usd' : sortBy,\n direction: 'desc',\n limit: '100',\n ...(assetSymbol && { assetSymbol }),\n });\n\n const response = await fetch(`/api/compass/vaults?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch vaults');\n }\n\n const data = await response.json();\n\n let vaults = ((data 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 via server-side proxy\n const positionsQuery = useQuery({\n queryKey: ['vaultPositions', chainId, address],\n queryFn: async (): Promise<UserVaultPosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <div className=\"flex\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {showSearch && (\n <div\n className=\"flex-1 flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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=\"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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\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=\"border text-sm flex items-center\"\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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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 border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-sm)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-fast)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load vaults. Please try again.\n </div>\n ) : filteredVaults.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No vaults found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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 { 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 { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { assetFilter } = options;\n\n // Fetch Aave markets via server-side proxy\n const marketsQuery = useQuery({\n queryKey: ['aaveMarkets', chainId, assetFilter],\n queryFn: async (): Promise<AaveMarketData[]> => {\n const params = new URLSearchParams({ chain: chainId });\n\n const response = await fetch(`/api/compass/aave/markets?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch Aave markets');\n }\n\n const data = await response.json();\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 = (data 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 via server-side proxy\n const positionsQuery = useQuery({\n queryKey: ['aavePositions', chainId, address],\n queryFn: async (): Promise<UserAavePosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div\n className=\"flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load Aave markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No markets found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\n className=\"flex items-center justify-end border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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","import { useState, useMemo } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { MarketType, MarketOption } from './types';\n\ninterface MarketSelectorProps {\n markets: MarketOption[];\n selectedMarket: MarketOption | null;\n onMarketSelect: (market: MarketOption) => void;\n marketType: MarketType;\n onMarketTypeChange: (type: MarketType) => void;\n minTvl: number;\n onMinTvlChange: (tvl: number) => void;\n isLoading?: boolean;\n}\n\nconst MARKET_TYPES: { value: MarketType; label: string }[] = [\n { value: 'aave', label: 'SAFE' },\n { value: 'vaults', label: 'MODERATE' },\n { value: 'pendle', label: 'FIXED' },\n];\n\nexport function MarketSelector({\n markets,\n selectedMarket,\n onMarketSelect,\n marketType,\n onMarketTypeChange,\n minTvl,\n onMinTvlChange,\n isLoading,\n}: MarketSelectorProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const showTvl = marketType !== 'aave';\n\n const filteredMarkets = useMemo(() => {\n return markets.filter((m) => m.type === marketType && (showTvl ? m.tvl >= minTvl : true));\n }, [markets, marketType, minTvl, showTvl]);\n\n const maxTvl = useMemo(() => {\n const typeMarkets = markets.filter((m) => m.type === marketType);\n return Math.max(...typeMarkets.map((m) => m.tvl), 100_000_000);\n }, [markets, marketType]);\n\n const hasMarkets = filteredMarkets.length > 0;\n\n const formatTvl = (value: number) => {\n if (value >= 1_000_000_000) return `$${(value / 1_000_000_000).toFixed(1)}B`;\n if (value >= 1_000_000) return `$${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `$${(value / 1_000).toFixed(0)}K`;\n return `$${value}`;\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 3)',\n }}\n >\n {/* Market Type Toggle */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n Market Type\n </label>\n <div\n style={{\n display: 'flex',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n overflow: 'hidden',\n }}\n >\n {MARKET_TYPES.map((type) => (\n <button\n key={type.value}\n onClick={() => onMarketTypeChange(type.value)}\n style={{\n flex: 1,\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor:\n marketType === type.value\n ? 'var(--compass-color-primary, #6366f1)'\n : 'var(--compass-color-surface, #12121a)',\n color:\n marketType === type.value\n ? 'var(--compass-color-primary-foreground, white)'\n : 'var(--compass-color-text, #e4e4e7)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--compass-font-size-sm, 14px)',\n fontWeight: 500,\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal, all 0.2s ease)',\n }}\n >\n {type.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Market Dropdown */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n Select Market\n </label>\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => hasMarkets && setIsDropdownOpen(!isDropdownOpen)}\n disabled={!hasMarkets || isLoading}\n style={{\n width: '100%',\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2.5)',\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: hasMarkets ? 'pointer' : 'not-allowed',\n opacity: hasMarkets ? 1 : 0.5,\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <span\n style={{\n color: selectedMarket\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {isLoading\n ? 'Loading markets...'\n : !hasMarkets\n ? `No markets above ${formatTvl(minTvl)}`\n : selectedMarket\n ? selectedMarket.name\n : 'Select a market'}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--compass-spacing-unit)' }}>\n {selectedMarket && (\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n }}\n >\n {selectedMarket.apy.toFixed(2)}%\n </span>\n )}\n <ChevronDown\n size={16}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isDropdownOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'var(--compass-transition-normal)',\n }}\n />\n </div>\n </button>\n\n {/* Dropdown List */}\n {isDropdownOpen && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: 'var(--compass-spacing-unit, 8px)',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n boxShadow: 'var(--compass-shadow-lg, 0 25px 50px -12px rgba(0, 0, 0, 0.5))',\n zIndex: 50,\n maxHeight: '200px',\n overflowY: 'auto',\n }}\n >\n {filteredMarkets.map((market) => (\n <button\n key={market.id}\n onClick={() => {\n onMarketSelect(market);\n setIsDropdownOpen(false);\n }}\n style={{\n width: '100%',\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor:\n selectedMarket?.id === market.id\n ? 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.15))'\n : 'var(--compass-color-surface, #12121a)',\n border: 'none',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n cursor: 'pointer',\n textAlign: 'left',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ color: 'var(--compass-color-text)' }}>{market.name}</span>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n }}\n >\n {market.apy.toFixed(2)}% APY\n </span>\n </div>\n {(showTvl || market.expiry) && (\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n {showTvl && `TVL: ${formatTvl(market.tvl)}`}\n {showTvl && market.expiry && ' · '}\n {market.expiry && `Expires: ${market.expiry}`}\n </div>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* TVL Slider - hidden for SAFE (Aave) markets */}\n {showTvl && (\n <div>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n <label\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Min TVL\n </label>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text)',\n }}\n >\n {formatTvl(minTvl)}\n </span>\n </div>\n <input\n type=\"range\"\n min={0}\n max={maxTvl}\n step={100000}\n value={minTvl}\n onChange={(e) => onMinTvlChange(Number(e.target.value))}\n style={{\n width: '100%',\n accentColor: 'var(--compass-color-primary)',\n }}\n />\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { X, ChevronDown, ChevronUp, ExternalLink } from 'lucide-react';\nimport type { Position } from './types';\n\ninterface EarningsModalProps {\n isOpen: boolean;\n onClose: () => void;\n positions: Position[];\n totalEarned: number;\n isLoading?: boolean;\n}\n\nfunction PositionCard({ position }: { position: Position }) {\n const [isHistoryExpanded, setIsHistoryExpanded] = useState(false);\n\n const formatDate = (dateStr: string) => {\n const date = new Date(dateStr);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n };\n\n const formatShortDate = (dateStr: string) => {\n const date = new Date(dateStr);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n };\n\n return (\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n padding: 'var(--compass-spacing-card, 16px)',\n }}\n >\n {/* Position Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <span\n style={{\n fontWeight: 600,\n color: 'var(--compass-color-text)',\n fontSize: 'var(--compass-font-size-base)',\n }}\n >\n {position.marketName}\n </span>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n backgroundColor: 'var(--compass-color-success-muted)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 1.5)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n APY: {position.apy.toFixed(2)}%\n </span>\n </div>\n\n {/* Position Details */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 'calc(var(--compass-spacing-unit) * 2)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Amount\n </div>\n <div style={{ color: 'var(--compass-color-text)', fontWeight: 500 }}>\n {position.amount.toLocaleString()} {position.token}\n </div>\n </div>\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Entered\n </div>\n <div style={{ color: 'var(--compass-color-text)' }}>{formatDate(position.entryDate)}</div>\n </div>\n </div>\n\n {/* P&L Breakdown */}\n <div\n style={{\n paddingTop: 'calc(var(--compass-spacing-unit) * 2)',\n borderTop: '1px solid var(--compass-color-border)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 1.5)',\n }}\n >\n {position.pnl ? (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Unrealised P&L\n </div>\n <div\n style={{\n fontWeight: 600,\n color: position.pnl.unrealizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.unrealizedPnl >= 0 ? '+' : ''}${position.pnl.unrealizedPnl.toFixed(2)}\n </div>\n </div>\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Realised P&L\n </div>\n <div\n style={{\n fontWeight: 600,\n color: position.pnl.realizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.realizedPnl >= 0 ? '+' : ''}${position.pnl.realizedPnl.toFixed(2)}\n </div>\n </div>\n </div>\n ) : (\n <div>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Total P&L:{' '}\n </span>\n <span\n style={{\n fontWeight: 600,\n color: position.performance >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.performance >= 0 ? '+' : ''}${position.performance.toFixed(2)}\n </span>\n </div>\n )}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n {position.pnl && (\n <div>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Total:{' '}\n </span>\n <span\n style={{\n fontWeight: 600,\n color: position.pnl.totalPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.totalPnl >= 0 ? '+' : ''}${position.pnl.totalPnl.toFixed(2)}\n </span>\n </div>\n )}\n <button\n onClick={() => setIsHistoryExpanded(!isHistoryExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n padding: 'calc(var(--compass-spacing-unit) * 1) calc(var(--compass-spacing-unit) * 2)',\n backgroundColor: 'transparent',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-md)',\n cursor: 'pointer',\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n tx history\n {isHistoryExpanded ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </button>\n </div>\n </div>\n\n {/* Transaction History (Expandable) */}\n {isHistoryExpanded && position.transactions.length > 0 && (\n <div\n style={{\n marginTop: 'calc(var(--compass-spacing-unit) * 2)',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n {position.transactions.map((tx) => (\n <div\n key={tx.id}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) 0',\n borderBottom: '1px solid var(--compass-color-border)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 'calc(var(--compass-spacing-unit) * 2)' }}>\n <span\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n minWidth: '50px',\n }}\n >\n {formatShortDate(tx.date)}\n </span>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n textTransform: 'capitalize',\n }}\n >\n {tx.type}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 'calc(var(--compass-spacing-unit) * 2)' }}>\n <span\n style={{\n fontWeight: 500,\n color: tx.type === 'deposit' ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {tx.type === 'deposit' ? '+' : '-'}\n {tx.amount} {tx.token}\n </span>\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n <ExternalLink size={12} />\n </a>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function EarningsModal({ isOpen, onClose, positions, totalEarned, isLoading }: EarningsModalProps) {\n if (!isOpen) return null;\n\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'var(--compass-color-overlay, rgba(0, 0, 0, 0.75))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n padding: '1rem',\n }}\n onClick={onClose}\n >\n <div\n style={{\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-xl, 16px)',\n boxShadow: 'var(--compass-shadow-lg, 0 25px 50px -12px rgba(0, 0, 0, 0.5))',\n width: '100%',\n maxWidth: '480px',\n maxHeight: '80vh',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 'var(--compass-spacing-card, 16px)',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n }}\n >\n <h2\n style={{\n fontWeight: 600,\n fontSize: 'var(--compass-font-size-lg)',\n color: 'var(--compass-color-text)',\n margin: 0,\n }}\n >\n Your Positions\n </h2>\n <button\n onClick={onClose}\n style={{\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 'var(--compass-spacing-unit)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Total P&L Summary */}\n {(() => {\n const totalUnrealized = positions.reduce((sum, p) => sum + (p.pnl?.unrealizedPnl || 0), 0);\n const totalRealized = positions.reduce((sum, p) => sum + (p.pnl?.realizedPnl || 0), 0);\n return (\n <div\n style={{\n padding: 'var(--compass-spacing-card, 16px)',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 1.5)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Total P&L\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xl)',\n fontWeight: 600,\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalEarned >= 0 ? '+' : ''}${totalEarned.toFixed(2)}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n gap: 'calc(var(--compass-spacing-unit) * 3)',\n }}\n >\n <div>\n <div style={{ fontSize: 'var(--compass-font-size-xs)', color: 'var(--compass-color-text-tertiary)' }}>\n Unrealised\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-base)',\n fontWeight: 500,\n color: totalUnrealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalUnrealized >= 0 ? '+' : ''}${totalUnrealized.toFixed(2)}\n </div>\n </div>\n <div>\n <div style={{ fontSize: 'var(--compass-font-size-xs)', color: 'var(--compass-color-text-tertiary)' }}>\n Realised\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-base)',\n fontWeight: 500,\n color: totalRealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalRealized >= 0 ? '+' : ''}${totalRealized.toFixed(2)}\n </div>\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* Positions List */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: 'var(--compass-spacing-card, 16px)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n }}\n >\n {isLoading ? (\n <div\n style={{\n textAlign: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 6)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Loading positions...\n </div>\n ) : positions.length === 0 ? (\n <div\n style={{\n textAlign: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 6)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <p style={{ marginBottom: 'var(--compass-spacing-unit)' }}>No active positions yet</p>\n <p style={{ fontSize: 'var(--compass-font-size-sm)', color: 'var(--compass-color-text-tertiary)' }}>\n Deposit into a market to start earning\n </p>\n </div>\n ) : (\n positions.map((position) => <PositionCard key={position.id} position={position} />)\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, Plus, Minus, ArrowDownLeft, ArrowRight, Wallet, Shield, CheckCircle, ChevronDown, ChevronRight } from 'lucide-react';\nimport { WalletStatus, EarnAccountGuard, ActionModal, ChainSwitcher } from '../../shared';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { MarketSelector } from './MarketSelector';\nimport { EarningsModal } from './EarningsModal';\nimport type { EarnAccountProps, MarketType, MarketOption, Position } from './types';\n\n// Numeric EVM chain IDs for wallet switching\nconst EVM_CHAIN_IDS: Record<string, number> = {\n ethereum: 1,\n base: 8453,\n arbitrum: 42161,\n};\n\n// Supported tokens for deposits and withdrawals\nconst SUPPORTED_TOKENS = ['USDC', 'USDT', 'DAI', 'WETH', 'SBC', 'AUSD'];\n\nfunction formatCurrency(amount: string | number | null | undefined): string {\n if (!amount) return '$0.00';\n const num = typeof amount === 'string' ? parseFloat(amount) : amount;\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\nfunction formatAmount(value: string | number): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '0';\n return num.toFixed(6).replace(/\\.?0+$/, '');\n}\n\n/**\n * EarnAccount widget - A beautiful banking-style USDC savings account.\n */\nexport function EarnAccount({\n showHeader = true,\n showInterestRate = true,\n showTopUpButton = true,\n showTrustBadge = true,\n compact = true,\n title = 'Savings Account',\n onDeposit,\n onWithdraw,\n defaultMarketType = 'aave',\n defaultMinTvl = 0,\n}: EarnAccountProps) {\n const { address, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { isDeployed } = useEarnAccount();\n const { chainId: CHAIN_ID } = useChain();\n const queryClient = useQueryClient();\n const [activeTab, setActiveTab] = useState<'deposit' | 'withdraw'>('deposit');\n const [selectedToken, setSelectedToken] = useState('USDC');\n const [amount, setAmount] = useState('');\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [statusMessage, setStatusMessage] = useState('');\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n\n // Fund modal state\n const [isFundModalOpen, setIsFundModalOpen] = useState(false);\n const [fundAmount, setFundAmount] = useState('');\n const [fundToken, setFundToken] = useState('USDC');\n const [isFunding, setIsFunding] = useState(false);\n const [fundError, setFundError] = useState<string | null>(null);\n const [fundStatus, setFundStatus] = useState('');\n\n // Balances breakdown modal state\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n // Market selector state\n const [marketType, setMarketType] = useState<MarketType>(defaultMarketType);\n const [selectedMarket, setSelectedMarket] = useState<MarketOption | null>(null);\n const [minTvl, setMinTvl] = useState(defaultMinTvl);\n\n // Earnings modal state\n const [isEarningsModalOpen, setIsEarningsModalOpen] = useState(false);\n\n // Reset selected market when chain changes (markets are chain-specific)\n useEffect(() => {\n setSelectedMarket(null);\n }, [CHAIN_ID]);\n\n // Ensure the wallet is on the correct chain before signing\n const ensureCorrectChain = useCallback(async () => {\n const targetChainId = EVM_CHAIN_IDS[CHAIN_ID];\n if (!targetChainId) return;\n if (walletChainId !== undefined && walletChainId !== targetChainId) {\n if (!switchChain) {\n throw new Error(`Please switch your wallet to ${CHAIN_ID} (chain ${targetChainId})`);\n }\n await switchChain(targetChainId);\n }\n }, [walletChainId, switchChain, CHAIN_ID]);\n\n // Available tokens for funding (only EIP-2612 permit-compatible tokens for gasless transfers)\n // WETH and ETH don't support permits, so users need to swap to USDC first externally\n const FUND_TOKENS = ['USDC', 'DAI'];\n\n // Fetch wallet (EOA) balances for the selected token\n const walletBalanceQuery = useQuery({\n queryKey: ['walletBalance', CHAIN_ID, address, fundToken],\n queryFn: async () => {\n if (!address) return null;\n try {\n const response = await fetch(\n `/api/compass/token/balance?address=${address}&chain=${CHAIN_ID}&token=${fundToken}`\n );\n if (!response.ok) return null;\n const data = await response.json();\n return data;\n } catch {\n return null;\n }\n },\n enabled: !!address && isFundModalOpen,\n staleTime: 15 * 1000,\n });\n\n const walletBalance = walletBalanceQuery.data?.balance || '0';\n\n // Fetch earn account balances\n const balancesQuery = useQuery({\n queryKey: ['earnAccountBalances', CHAIN_ID, address],\n queryFn: async () => {\n if (!address) return null;\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${CHAIN_ID}`\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 // Get balance for selected token from earn account (for deposits)\n const selectedTokenBalance = balancesQuery.data?.balances?.[selectedToken]?.balance || '0';\n // Total USD value of ERC-20 tokens only (sum from filtered balances, not API total which includes protocol tokens)\n const earnAccountTotalUsd = Object.values(balancesQuery.data?.balances || {})\n .reduce((sum, b) => sum + parseFloat(b.usdValue || '0'), 0)\n .toString();\n\n // Fetch all user positions (all protocols)\n // APY and PnL are included directly in the positions API response\n const positionQuery = useQuery({\n queryKey: ['earnAccountAllPositions', CHAIN_ID, address],\n queryFn: async () => {\n if (!address) return [];\n\n const response = await fetch(`/api/compass/positions?chain=${CHAIN_ID}&owner=${address}`);\n if (!response.ok) return [];\n\n const data = await response.json();\n // Server returns { positions: [...] } with hydrated APY and PnL\n return data.positions || [];\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const allPositionData = positionQuery.data || [];\n\n // Calculate total balance (all tokens in earn account + all deposited across protocols)\n const totalDepositedBalance = allPositionData.reduce((sum: number, p: any) => sum + parseFloat(p.balanceUsd || '0'), 0);\n const earnAccountTotal = parseFloat(earnAccountTotalUsd);\n\n\n // Fetch all Aave markets for the MarketSelector\n const aaveMarketsQuery = useQuery({\n queryKey: ['allAaveMarkets', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/aave/markets?chain=${CHAIN_ID}`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const marketsDict = data.markets || {};\n\n const markets: MarketOption[] = [];\n for (const [symbol, marketData] of Object.entries(marketsDict)) {\n const chainData = (marketData as any).chains?.[CHAIN_ID];\n if (chainData) {\n markets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: symbol,\n apy: parseFloat(chainData.supplyApy || '0'),\n tvl: parseFloat(chainData.totalSupplyUsd || '0'),\n type: 'aave',\n underlyingToken: symbol,\n });\n }\n }\n return markets.sort((a, b) => b.apy - a.apy);\n },\n staleTime: 60 * 1000,\n });\n\n // Fetch Pendle markets\n const pendleMarketsQuery = useQuery({\n queryKey: ['pendleMarkets', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/pendle/markets?chain=${CHAIN_ID}&limit=200&orderBy=implied_apy&direction=desc`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const marketsList = data.markets || [];\n\n // Helper to parse expiry timestamp (handles both seconds and milliseconds)\n const parseExpiry = (expiry: any): string | undefined => {\n if (!expiry || expiry === 0) return undefined;\n const timestamp = typeof expiry === 'number' ? expiry : parseInt(expiry, 10);\n if (isNaN(timestamp) || timestamp <= 0) return undefined;\n // If timestamp is in seconds (before year 3000 in seconds = 32503680000), convert to ms\n const ms = timestamp < 32503680000 ? timestamp * 1000 : timestamp;\n const date = new Date(ms);\n // Validate the date is reasonable (after year 2000)\n if (date.getFullYear() < 2000) return undefined;\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n };\n\n return marketsList.map((m: any) => {\n const expiryStr = parseExpiry(m.expiry);\n return {\n id: `pendle-${m.marketAddress || m.address}`,\n name: m.name || `${m.underlyingSymbol || 'PT'}${expiryStr ? ` ${expiryStr}` : ''}`,\n apy: parseFloat(m.impliedApy || m.apy || '0'),\n tvl: parseFloat(m.tvlUsd || m.tvl || '0'),\n type: 'pendle' as const,\n underlyingToken: (m.underlyingSymbol || 'UNKNOWN').toUpperCase(),\n expiry: expiryStr,\n marketAddress: m.marketAddress || m.address,\n };\n });\n },\n staleTime: 60 * 1000,\n });\n\n // Fetch Morpho vaults\n const vaultsQuery = useQuery({\n queryKey: ['morphoVaults', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/vaults?chain=${CHAIN_ID}&limit=200&orderBy=apy_7d&direction=desc`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const vaultsList = data.vaults || [];\n\n return vaultsList.map((v: any) => ({\n id: `vault-${v.vaultAddress || v.address}`,\n name: v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`,\n apy: parseFloat(v.apy7d || v.apy || '0'),\n tvl: parseFloat(v.tvlUsd || v.tvl || '0'),\n type: 'vaults' as const,\n underlyingToken: (v.assetSymbol || 'UNKNOWN').toUpperCase(),\n curator: v.curatorName || v.curator,\n vaultAddress: v.vaultAddress || v.address,\n }));\n },\n staleTime: 60 * 1000,\n });\n\n // Combine all markets\n const allMarkets: MarketOption[] = [\n ...(aaveMarketsQuery.data || []),\n ...(pendleMarketsQuery.data || []),\n ...(vaultsQuery.data || []),\n ];\n\n const isMarketsLoading = aaveMarketsQuery.isLoading || pendleMarketsQuery.isLoading || vaultsQuery.isLoading;\n\n // Helper: build venue params for the manage API from a selected market\n const buildVenueParamsFromMarket = (market: MarketOption) => {\n switch (market.type) {\n case 'aave':\n return { venueType: 'AAVE' as const, token: market.underlyingToken };\n case 'vaults':\n return { venueType: 'VAULT' as const, token: market.underlyingToken, vaultAddress: market.vaultAddress };\n case 'pendle':\n return { venueType: 'PENDLE_PT' as const, token: market.underlyingToken, marketAddress: market.marketAddress, maxSlippagePercent: 1.0 };\n }\n };\n\n // Helper: build venue object for bundle actions\n const buildVenueFromMarket = (market: MarketOption) => {\n switch (market.type) {\n case 'aave':\n return { type: 'AAVE' as const, token: market.underlyingToken };\n case 'vaults':\n return { type: 'VAULT' as const, vaultAddress: market.vaultAddress };\n case 'pendle':\n return { type: 'PENDLE_PT' as const, marketAddress: market.marketAddress, token: market.underlyingToken, maxSlippagePercent: 1.0 };\n }\n };\n\n // Helper: find position balance for a selected market\n const findPositionForMarket = (positions: any[], market: MarketOption): any | undefined => {\n switch (market.type) {\n case 'aave':\n return positions.find((p: any) => p.protocol === 'aave' && p.symbol === market.underlyingToken);\n case 'vaults':\n return positions.find((p: any) => p.protocol === 'vaults' && market.vaultAddress && p.vaultAddress === market.vaultAddress);\n case 'pendle':\n return positions.find((p: any) => p.protocol === 'pendle' && market.marketAddress && p.marketAddress === market.marketAddress);\n }\n };\n\n // Build positions from hydrated server data (APY + PnL already populated)\n const positions: Position[] = allPositionData.map((pos: any, index: number) => {\n return {\n id: `pos-${index}`,\n marketType: pos.protocol as MarketType,\n marketName: pos.name,\n marketId: `${pos.protocol}-${index}`,\n amount: parseFloat(pos.balance || '0'),\n token: pos.symbol,\n apy: pos.apy || 0,\n entryDate: pos.entryTimestamp || new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),\n performance: parseFloat(pos.pnl?.totalPnl || '0'),\n pnl: pos.pnl ? {\n unrealizedPnl: parseFloat(pos.pnl.unrealizedPnl || '0'),\n realizedPnl: parseFloat(pos.pnl.realizedPnl || '0'),\n totalPnl: parseFloat(pos.pnl.totalPnl || '0'),\n } : undefined,\n transactions: [\n ...(pos.deposits || []).map((d: any, i: number) => ({\n id: `dep-${index}-${i}`,\n date: d.timestamp || new Date(Date.now() - (i + 1) * 7 * 24 * 60 * 60 * 1000).toISOString(),\n type: 'deposit' as const,\n amount: parseFloat(d.amount || '0'),\n token: pos.symbol,\n txHash: d.txHash || '',\n })),\n ...(pos.withdrawals || []).map((w: any, i: number) => ({\n id: `wit-${index}-${i}`,\n date: w.timestamp || new Date(Date.now() - i * 3 * 24 * 60 * 60 * 1000).toISOString(),\n type: 'withdraw' as const,\n amount: parseFloat(w.amount || '0'),\n token: pos.symbol,\n txHash: w.txHash || '',\n })),\n ].sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()),\n };\n });\n\n const totalEarned = positions.reduce((sum, p) => sum + p.performance, 0);\n\n // Check if we need to swap for deposit/withdraw actions\n const needsActionSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n // Check if we need to swap after transferring (for fund modal)\n const needsFundSwap = fundToken !== 'USDC';\n\n // Helper to check and get approval if needed\n const ensureTokenApproval = async (token: string): Promise<void> => {\n setFundStatus(`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: CHAIN_ID,\n token: token,\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 already approved, we're done\n if (approvalData.approved) {\n return;\n }\n\n // If requires transaction-based approval (non-EIP2612 tokens like WETH)\n if (approvalData.requiresTransaction && approvalData.transaction) {\n setFundStatus(`Approving ${token} (requires on-chain transaction)...`);\n\n // Execute the approval transaction via gas sponsor\n const executeApprovalResponse = await fetch('/api/compass/approval/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n transaction: approvalData.transaction,\n }),\n });\n\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n\n return;\n }\n\n // Need to sign permit for approval (EIP-2612 tokens)\n if (approvalData.eip712) {\n setFundStatus(`Please approve ${token} for transfers...`);\n await ensureCorrectChain();\n\n const approvalSignature = await signTypedData!({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setFundStatus(`Setting up ${token} 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: CHAIN_ID,\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 return;\n }\n\n throw new Error('Unable to approve token for transfers');\n };\n\n // Handle funding the earn account from wallet (with optional swap)\n const handleFund = useCallback(async () => {\n if (!address || !fundAmount || !signTypedData) return;\n\n setIsFunding(true);\n setFundError(null);\n\n try {\n // Step 1: Ensure token is approved for transfers\n await ensureTokenApproval(fundToken);\n\n if (needsFundSwap) {\n // Two-step process: Transfer token to Earn Account, then Swap to USDC\n\n // Step 2: Transfer token from wallet (EOA) to Earn Account\n setFundStatus(`Preparing ${fundToken} transfer...`);\n\n const transferPrepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n token: fundToken,\n amount: fundAmount,\n action: 'DEPOSIT',\n }),\n });\n\n if (!transferPrepareResponse.ok) {\n const errData = await transferPrepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transfer');\n }\n\n const transferData = await transferPrepareResponse.json();\n\n setFundStatus('Please sign the transfer...');\n await ensureCorrectChain();\n\n const transferSignature = await signTypedData({\n domain: transferData.domain,\n types: transferData.normalizedTypes,\n primaryType: transferData.primaryType,\n message: transferData.message,\n });\n\n setFundStatus(`Transferring ${fundToken}...`);\n\n const transferExecuteResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: transferData.eip712,\n signature: transferSignature,\n }),\n });\n\n if (!transferExecuteResponse.ok) {\n const errData = await transferExecuteResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n\n // Step 3: Swap token to USDC inside the Earn Account\n setFundStatus(`Swapping ${fundToken} to USDC...`);\n\n // Prepare swap bundle\n const swapBundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: fundToken,\n tokenOut: 'USDC',\n amountIn: fundAmount,\n maxSlippagePercent: 1.0,\n },\n },\n ];\n\n const swapPrepareResponse = await fetch('/api/compass/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n actions: swapBundleActions,\n }),\n });\n\n if (!swapPrepareResponse.ok) {\n const errData = await swapPrepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare swap');\n }\n\n const { eip712, normalizedTypes, domain, message } = await swapPrepareResponse.json();\n\n setFundStatus('Please sign the swap...');\n await ensureCorrectChain();\n\n const swapSignature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setFundStatus('Executing swap...');\n\n const swapExecuteResponse = 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: swapSignature,\n chain: CHAIN_ID,\n }),\n });\n\n if (!swapExecuteResponse.ok) {\n const errData = await swapExecuteResponse.json();\n throw new Error(errData.error || 'Swap failed');\n }\n\n } else {\n // Direct USDC transfer (no swap needed)\n setFundStatus('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: CHAIN_ID,\n token: 'USDC',\n amount: fundAmount,\n action: 'DEPOSIT',\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 setFundStatus('Please sign the transfer...');\n await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n setFundStatus('Transferring funds...');\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: CHAIN_ID,\n eip712: prepareData.eip712,\n signature: signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n }\n\n setFundStatus('Success! Funds added to savings.');\n setFundAmount('');\n\n // Refresh balances\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n balancesQuery.refetch();\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n setTimeout(() => {\n setIsFundModalOpen(false);\n setFundStatus('');\n setFundToken('USDC');\n }, 2000);\n } catch (err) {\n setFundError(err instanceof Error ? err.message : 'Transfer failed');\n setFundStatus('');\n } finally {\n setIsFunding(false);\n }\n }, [address, fundAmount, fundToken, needsFundSwap, signTypedData, ensureCorrectChain, queryClient, balancesQuery, CHAIN_ID]);\n\n const handleAction = async () => {\n if (!selectedMarket || !amount || parseFloat(amount) <= 0 || !address || !signTypedData) return;\n\n setIsProcessing(true);\n setError(null);\n const isDeposit = activeTab === 'deposit';\n const underlyingToken = selectedMarket.underlyingToken;\n\n try {\n let txHash: string;\n\n if (needsActionSwap) {\n // Use bundle API for swap + deposit or withdraw + swap\n if (isDeposit) {\n // Swap selectedToken to market's underlying token, then deposit\n setStatusMessage(`Getting swap quote...`);\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${CHAIN_ID}&tokenIn=${selectedToken}&tokenOut=${underlyingToken}&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 setStatusMessage(`Preparing swap and deposit...`);\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: underlyingToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue: buildVenueFromMarket(selectedMarket),\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: CHAIN_ID,\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 await ensureCorrectChain();\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: CHAIN_ID,\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 result = await executeResponse.json();\n txHash = result.txHash;\n\n } else {\n // Withdraw from market's venue, then swap underlying token to selectedToken\n setStatusMessage(`Preparing withdraw and swap...`);\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'WITHDRAW',\n venue: buildVenueFromMarket(selectedMarket),\n amount: amount,\n },\n },\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: underlyingToken,\n tokenOut: selectedToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\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: CHAIN_ID,\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 await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing withdraw and swap...');\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: CHAIN_ID,\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 result = await executeResponse.json();\n txHash = result.txHash;\n }\n } else {\n // Direct deposit/withdraw (no swap needed) - token matches market's underlying\n setStatusMessage(isDeposit ? 'Preparing deposit...' : 'Preparing withdrawal...');\n\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 venueParams = buildVenueParamsFromMarket(selectedMarket);\n\n const prepareResponse = await fetch(prepareEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n ...venueParams,\n amount: amount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transaction');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: 'SafeTx',\n message: prepareData.message,\n });\n\n setStatusMessage('Executing transaction...');\n\n const executeResponse = await fetch(executeEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: prepareData.eip712,\n signature: signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transaction failed');\n }\n\n const result = await executeResponse.json();\n txHash = result.txHash;\n }\n\n setStatusMessage('Transaction successful!');\n\n // Success - clear amount and refetch\n setAmount('');\n\n // Invalidate queries to refresh data\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n positionQuery.refetch();\n balancesQuery.refetch();\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n if (isDeposit) {\n onDeposit?.(selectedMarket, parseFloat(amount), txHash || '');\n } else {\n onWithdraw?.(selectedMarket, parseFloat(amount), txHash || '');\n }\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Transaction failed');\n setStatusMessage('');\n } finally {\n setIsProcessing(false);\n }\n };\n\n // For deposits: balance of selected token in earn account\n // For withdrawals: position balance in the selected market\n const selectedMarketPosition = selectedMarket ? findPositionForMarket(allPositionData, selectedMarket) : undefined;\n const maxAmount = activeTab === 'deposit'\n ? parseFloat(selectedTokenBalance)\n : parseFloat(selectedMarketPosition?.balance || '0');\n\n const spacing = compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)';\n const gapSize = compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'calc(var(--compass-spacing-unit) * 1.5)';\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: gapSize, fontFamily: 'var(--compass-font-family)' }}>\n {/* Header */}\n {showHeader && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-col\">\n <h2\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: 'var(--compass-font-size-subheading, 1.25rem)',\n }}\n >\n {title}\n </h2>\n </div>\n <WalletStatus compact />\n </div>\n )}\n\n {/* Chain Selector */}\n <ChainSwitcher />\n\n <EarnAccountGuard>\n {/* Main Balance Card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: compact ? 'var(--compass-spacing-card)' : 'calc(var(--compass-spacing-card) * 1.25)',\n }}\n >\n {/* Total Balance Section - Clickable to show breakdown */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n className=\"flex flex-col text-left w-full transition-opacity hover:opacity-80\"\n style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Total Balance\n </span>\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </div>\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '2rem' : '2.5rem',\n lineHeight: '1',\n }}\n >\n {formatCurrency(earnAccountTotal)}\n </span>\n </button>\n\n {/* Divider */}\n <div\n style={{\n height: '1px',\n backgroundColor: 'var(--compass-color-border)',\n margin: compact ? 'var(--compass-spacing-card) 0' : 'calc(var(--compass-spacing-card) * 1.25) 0',\n }}\n />\n\n {/* Earning Interest + APY Row - Clickable to show positions */}\n <button\n onClick={() => positions.length > 0 && setIsEarningsModalOpen(true)}\n disabled={positions.length === 0}\n className=\"flex items-center justify-between w-full text-left transition-opacity hover:opacity-80 disabled:hover:opacity-100 disabled:cursor-default\"\n >\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Earning interest{positions.length > 1 ? ` · ${positions.length} positions` : ''}\n </span>\n {positions.length > 0 && (\n <ChevronRight size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n )}\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1rem' : '1.125rem',\n }}\n >\n {formatCurrency(totalDepositedBalance)}\n </span>\n {positions.length > 0 && totalEarned !== 0 && (\n <span\n className=\"text-sm font-medium\"\n style={{\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalEarned >= 0 ? '+' : ''}{formatCurrency(totalEarned)}\n </span>\n )}\n </div>\n </div>\n\n </button>\n </div>\n\n {/* Market Selector */}\n <MarketSelector\n markets={allMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={setSelectedMarket}\n marketType={marketType}\n onMarketTypeChange={(type) => {\n setMarketType(type);\n setSelectedMarket(null);\n }}\n minTvl={minTvl}\n onMinTvlChange={setMinTvl}\n isLoading={isMarketsLoading}\n />\n\n {/* Action Tabs - Deposit/Withdraw Toggle */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\n <button\n onClick={() => { setActiveTab('deposit'); setSelectedToken('USDC'); setError(null); }}\n className=\"flex-1 flex items-center justify-center font-medium transition-all\"\n style={{\n backgroundColor: activeTab === 'deposit' ? 'var(--compass-color-surface-elevated, var(--compass-color-surface))' : 'transparent',\n color: activeTab === 'deposit' ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n border: activeTab === 'deposit' ? '1px solid var(--compass-color-border)' : '1px solid transparent',\n }}\n >\n <Plus size={compact ? 16 : 18} />\n Deposit\n </button>\n <button\n onClick={() => { setActiveTab('withdraw'); setSelectedToken('USDC'); setError(null); }}\n className=\"flex-1 flex items-center justify-center font-medium transition-all\"\n style={{\n backgroundColor: activeTab === 'withdraw' ? 'var(--compass-color-surface-elevated, var(--compass-color-surface))' : 'transparent',\n color: activeTab === 'withdraw' ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n border: activeTab === 'withdraw' ? '1px solid var(--compass-color-border)' : '1px solid transparent',\n }}\n >\n <Minus size={compact ? 16 : 18} />\n Withdraw\n </button>\n </div>\n\n {/* Amount Input with Token Selector */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n <div\n className=\"flex items-center flex-wrap\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: spacing,\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); setError(null); }}\n placeholder=\"0.00\"\n disabled={isProcessing}\n className=\"flex-1 font-medium bg-transparent outline-none\"\n style={{ color: 'var(--compass-color-text)', fontSize: compact ? '1.25rem' : '1.5rem', minWidth: 0 }}\n />\n {/* Token Dropdown */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={isProcessing}\n className=\"flex items-center font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-surface-elevated, var(--compass-color-background))',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n fontSize: compact ? '0.875rem' : '1rem',\n }}\n >\n {selectedToken}\n <ChevronDown size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-1 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n minWidth: '100px',\n }}\n >\n {SUPPORTED_TOKENS.map((token) => (\n <button\n key={token}\n onClick={() => {\n setSelectedToken(token);\n setIsTokenDropdownOpen(false);\n setError(null);\n }}\n className=\"w-full text-left font-medium transition-colors\"\n style={{\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n color: token === selectedToken ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === selectedToken ? 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))' : 'transparent',\n fontSize: compact ? '0.875rem' : '1rem',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n <button\n onClick={() => setAmount(maxAmount.toString())}\n disabled={isProcessing}\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{\n backgroundColor: 'var(--compass-color-surface-elevated, var(--compass-color-background))',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n flexShrink: 0,\n }}\n >\n MAX\n </button>\n </div>\n\n {/* Swap Indicator */}\n {needsActionSwap && (\n <div\n className=\"flex items-center text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <ArrowRight size={14} />\n <span>\n {activeTab === 'deposit'\n ? `Swaps ${selectedToken} to ${selectedMarket?.underlyingToken}, then deposits`\n : `Withdraws ${selectedMarket?.underlyingToken}, then swaps to ${selectedToken}`}\n </span>\n </div>\n )}\n\n <div className=\"flex justify-between\" style={{ padding: '0 calc(var(--compass-spacing-unit) * 0.25)' }}>\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {activeTab === 'deposit' ? `Available ${selectedToken}` : 'Available to withdraw'}\n </span>\n <span className=\"text-sm font-medium\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatAmount(maxAmount)} {activeTab === 'deposit' ? selectedToken : (selectedMarket?.underlyingToken || '—')}\n </span>\n </div>\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Action Button */}\n <button\n onClick={handleAction}\n disabled={isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount}\n className=\"w-full font-semibold transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n fontSize: compact ? '0.875rem' : '1rem',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isProcessing ? (\n <span className=\"flex items-center justify-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <Loader2 size={compact ? 16 : 20} className=\"animate-spin\" />\n Processing...\n </span>\n ) : !selectedMarket ? (\n 'Select a market'\n ) : needsActionSwap ? (\n activeTab === 'deposit' ? `Swap & Deposit` : `Withdraw & Swap`\n ) : (\n activeTab === 'deposit' ? 'Deposit funds' : 'Withdraw funds'\n )}\n </button>\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"text-sm text-center\"\n style={{\n backgroundColor: statusMessage.includes('successful')\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: statusMessage.includes('successful')\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Trust Badges */}\n {showTrustBadge && (\n <div\n className=\"flex items-center justify-center\"\n style={{\n gap: 'calc(var(--compass-spacing-unit) * 1)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <Shield size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Non-custodial\n </span>\n </div>\n <span style={{ color: 'var(--compass-color-border)' }}>|</span>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <CheckCircle size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Audited protocols\n </span>\n </div>\n </div>\n )}\n\n {/* Top Up Button */}\n {showTopUpButton && (\n <button\n onClick={() => setIsFundModalOpen(true)}\n className=\"w-full font-medium flex items-center justify-center transition-all\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <Wallet size={compact ? 16 : 18} />\n Top Up\n </button>\n )}\n </EarnAccountGuard>\n\n {/* Fund Modal */}\n <ActionModal\n isOpen={isFundModalOpen}\n onClose={() => {\n setIsFundModalOpen(false);\n setFundAmount('');\n setFundToken('USDC');\n setFundError(null);\n setFundStatus('');\n }}\n title=\"Transfer to Savings\"\n >\n <div className=\"flex flex-col gap-4\">\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Transfer tokens from your wallet to your savings account.\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Have ETH? Swap to USDC on Uniswap first, then transfer here.\n </p>\n\n {/* Token Selector */}\n <div>\n <label\n className=\"text-sm font-medium mb-2 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n From Token\n </label>\n <div\n className=\"flex gap-2 p-1 rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n {FUND_TOKENS.map((token) => (\n <button\n key={token}\n onClick={() => { setFundToken(token); setFundError(null); }}\n disabled={isFunding}\n className=\"flex-1 py-2 rounded-lg text-sm font-medium transition-all\"\n style={{\n backgroundColor: fundToken === token ? 'var(--compass-color-primary)' : 'transparent',\n color: fundToken === token ? 'white' : 'var(--compass-color-text-secondary)',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n </div>\n\n {/* Swap Indicator */}\n {needsFundSwap && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-xl text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n }}\n >\n <span>→</span>\n <span>Will swap {fundToken} to USDC, then transfer to savings</span>\n </div>\n )}\n\n {/* Amount Input */}\n <div className=\"flex flex-col gap-2\">\n <div\n className=\"flex items-center p-4 rounded-xl\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={fundAmount}\n onChange={(e) => { setFundAmount(e.target.value); setFundError(null); }}\n placeholder=\"0.00\"\n disabled={isFunding}\n className=\"flex-1 text-2xl font-bold bg-transparent outline-none\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <button\n onClick={() => setFundAmount(walletBalance)}\n disabled={isFunding || !walletBalance || walletBalance === '0'}\n className=\"text-sm font-medium px-3 py-1 rounded-lg mr-2 transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n }}\n >\n Max\n </button>\n <span\n className=\"text-sm font-medium px-3 py-1 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)'\n }}\n >\n {fundToken}\n </span>\n </div>\n\n {/* Wallet Balance Display */}\n <div className=\"flex justify-between px-1\">\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available in wallet\n </span>\n <span className=\"text-sm font-medium\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {walletBalanceQuery.isLoading ? (\n <Loader2 size={14} className=\"animate-spin inline\" />\n ) : (\n `${formatAmount(walletBalance)} ${fundToken}`\n )}\n </span>\n </div>\n </div>\n\n {/* Fund Error */}\n {fundError && (\n <div\n className=\"p-3 rounded-xl text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {fundError}\n </div>\n )}\n\n {/* Fund Status */}\n {fundStatus && !fundError && (\n <div\n className=\"p-3 rounded-xl text-sm text-center\"\n style={{\n backgroundColor: fundStatus.includes('successful')\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: fundStatus.includes('successful')\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n }}\n >\n {fundStatus}\n </div>\n )}\n\n {/* Fund Button */}\n <button\n onClick={handleFund}\n disabled={isFunding || !fundAmount || parseFloat(fundAmount) <= 0}\n className=\"w-full py-4 rounded-xl font-semibold text-lg transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n }}\n >\n {isFunding ? (\n <span className=\"flex items-center justify-center gap-2\">\n <Loader2 size={20} className=\"animate-spin\" />\n Processing...\n </span>\n ) : (\n <span className=\"flex items-center justify-center gap-2\">\n <ArrowDownLeft size={20} />\n {needsFundSwap ? `Swap ${fundToken} & Transfer` : 'Transfer to Savings'}\n </span>\n )}\n </button>\n\n <p\n className=\"text-xs text-center\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored\n </p>\n </div>\n </ActionModal>\n\n {/* Balances Breakdown Modal */}\n <ActionModal\n isOpen={isBalancesModalOpen}\n onClose={() => setIsBalancesModalOpen(false)}\n title=\"Balance Breakdown\"\n >\n <div className=\"flex flex-col gap-3\">\n {/* Earn Account Balances */}\n {balancesQuery.data?.balances && Object.keys(balancesQuery.data.balances).length > 0 ? (\n <>\n <div className=\"flex flex-col gap-2\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available in Account\n </span>\n {Object.entries(balancesQuery.data.balances).map(([symbol, data]) => (\n <div\n key={symbol}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-mono font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {formatAmount(data.balance)}\n </span>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {formatCurrency(data.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n <div\n className=\"flex items-center justify-between pt-3 mt-2\"\n style={{ borderTop: '2px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)' }}>\n Total\n </span>\n <span\n className=\"font-bold text-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatCurrency(earnAccountTotalUsd)}\n </span>\n </div>\n </>\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No tokens in account\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Earnings Modal */}\n <EarningsModal\n isOpen={isEarningsModalOpen}\n onClose={() => setIsEarningsModalOpen(false)}\n positions={positions}\n totalEarned={totalEarned}\n isLoading={positionQuery.isLoading}\n />\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\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 { 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 params = new URLSearchParams({\n chain: chainId,\n orderBy,\n direction: 'desc',\n limit: '100',\n ...(underlyingSymbol && { underlyingSymbol }),\n });\n\n const response = await fetch(`/api/compass/pendle/markets?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch Pendle markets');\n }\n\n const data = await response.json();\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 = ((data 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\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <div className=\"flex\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {showSearch && (\n <div\n className=\"flex-1 flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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=\"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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\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=\"border text-sm flex items-center\"\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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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 border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-sm)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-fast)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load Pendle markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No active markets found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\n className=\"flex items-center justify-between border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n <div className=\"flex\" style={{ gap: 'var(--compass-spacing-card)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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 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","export type SwapLayout = 'compact' | 'full';\n\nexport interface SwapQuote {\n inputAmount: string;\n outputAmount: string;\n rate: string;\n}\n\n/** Default tokens available for swapping */\nexport const DEFAULT_SWAP_TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'] as const;\n\n/**\n * Props for the SwapWidget.\n *\n * Sensible defaults are applied automatically:\n * - Full layout for maximum usability\n * - ETH → USDC as default pair (most common swap)\n * - Reverse button enabled for easy direction switching\n * - Popular DeFi tokens pre-configured\n */\nexport interface SwapWidgetProps {\n /** Widget layout size @default 'full' */\n layout?: SwapLayout;\n /** Initial \"from\" token @default 'ETH' */\n defaultFromToken?: string;\n /** Initial \"to\" token @default 'USDC' */\n defaultToToken?: string;\n /** Tokens available for selection @default ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'] */\n allowedTokens?: string[];\n /** Show swap direction button @default true */\n showReverseButton?: boolean;\n /** Show settings panel @default false */\n showSettings?: boolean;\n /** Callback after successful swap */\n onSwapSuccess?: (fromToken: string, toToken: string, fromAmount: string, toAmount: string, txHash: string) => void;\n /** Callback on swap error */\n onSwapError?: (error: Error) => void;\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';\nimport { DEFAULT_SWAP_TOKENS } from './types';\n\nexport function SwapWidget({\n layout = 'full',\n defaultFromToken = 'ETH',\n defaultToToken = 'USDC',\n allowedTokens = [...DEFAULT_SWAP_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 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header - always show chain switcher and wallet status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {/* From Token */}\n <div className=\"border relative\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-xl)', fontFamily: 'var(--compass-font-family)', padding: 'var(--compass-spacing-card)' }}>\n <div className=\"flex items-center justify-between\" style={{ marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>From</span>\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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=\"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)', borderRadius: 'var(--compass-border-radius-lg)', padding: 'var(--compass-spacing-input)' }}\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 relative z-10\" style={{ margin: 'calc(var(--compass-spacing-unit) * -0.25) 0' }}>\n <button\n onClick={handleReverse}\n className=\"border hover:opacity-80\"\n style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-full)', padding: 'calc(var(--compass-spacing-unit) * 0.5)', transition: 'var(--compass-transition-normal)' }}\n >\n <ArrowDownUp size={16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n )}\n\n {/* To Token */}\n <div className=\"border\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-xl)', fontFamily: 'var(--compass-font-family)', padding: 'var(--compass-spacing-card)' }}>\n <div className=\"flex items-center justify-between\" style={{ marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>To</span>\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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=\"border text-sm font-medium cursor-pointer\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)', borderRadius: 'var(--compass-border-radius-lg)', padding: 'var(--compass-spacing-input)' }}\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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 font-medium flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n }}\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 { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { VenuePositions, Position, VenueType } from './types';\n\n// Get earliest deposit timestamp from deposits array\nfunction getEarliestDepositTimestamp(deposits: { timestamp?: string }[]): string | undefined {\n if (deposits.length === 0) return undefined;\n const timestamps = deposits\n .map(d => d.timestamp)\n .filter((t): t is string => !!t);\n if (timestamps.length === 0) return undefined;\n return timestamps.sort()[0]; // ISO strings sort correctly\n}\n\nexport function usePositionsData() {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const positionsQuery = useQuery({\n queryKey: ['allEarnPositions', chainId, address],\n queryFn: async (): Promise<VenuePositions[]> => {\n if (!address) return [];\n\n // Fetch all data in parallel\n const [positionsResponse, vaultsResponse, aaveResponse, pendleResponse] = await Promise.all([\n client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any),\n client.earn.earnVaults({\n chain: chainId as any,\n limit: 200,\n } as any).catch(() => ({ vaults: [] })),\n client.earn.earnAaveMarkets({\n chain: chainId as any,\n } as any).catch(() => ({ markets: {} })),\n client.earn.earnPendleMarkets({\n chain: chainId as any,\n limit: 200,\n } as any).catch(() => ({ markets: [] })),\n ]);\n\n // Build vault metadata map\n const vaultsMeta = new Map<string, { name: string; assetSymbol: string; apy7d: string | null }>();\n const vaultsData = (vaultsResponse as any).vaults || [];\n for (const v of vaultsData) {\n if (v.vaultAddress) {\n vaultsMeta.set(v.vaultAddress.toLowerCase(), {\n name: v.name || 'Vault',\n assetSymbol: v.assetSymbol || 'TOKEN',\n apy7d: v.apy7d ?? null,\n });\n }\n }\n\n // Build Aave metadata map\n const aaveMeta = new Map<string, { symbol: string; supplyApy: string | null }>();\n const aaveMarketsDict = (aaveResponse as any).markets || {};\n for (const [symbol, tokenData] of Object.entries(aaveMarketsDict)) {\n const token = tokenData as any;\n const chainData = token.chains?.[chainId];\n if (chainData?.address) {\n aaveMeta.set(chainData.address.toLowerCase(), {\n symbol,\n supplyApy: chainData.supplyApy?.toString() ?? null,\n });\n }\n }\n\n // Build Pendle metadata map\n const pendleMeta = new Map<string, { name: string; underlyingSymbol: string; impliedApy: string | null }>();\n const pendleMarketsData = (pendleResponse as any).markets || [];\n for (const m of pendleMarketsData) {\n if (m.marketAddress) {\n pendleMeta.set(m.marketAddress.toLowerCase(), {\n name: m.ptName || `PT-${m.underlyingSymbol || 'Token'}`,\n underlyingSymbol: m.underlyingSymbol || 'PT',\n impliedApy: m.impliedApy?.toString() ?? null,\n });\n }\n }\n\n const venueMap = new Map<VenueType, Position[]>();\n\n // Process vault positions (Morpho) - use data from positions response\n // API returns: vault_name, underlying_symbol directly in positions\n const vaults = (positionsResponse as any).vaults || [];\n if (vaults.length > 0) {\n venueMap.set('morpho', vaults.map((v: any) => {\n const meta = vaultsMeta.get(v.vaultAddress?.toLowerCase());\n // Positions API has vaultName/vault_name and underlyingSymbol/underlying_symbol\n const vaultName = v.vaultName || v.vault_name || meta?.name || 'Vault';\n const symbol = v.underlyingSymbol || v.underlying_symbol || meta?.assetSymbol || 'TOKEN';\n return {\n id: v.vaultAddress,\n venue: 'morpho' as VenueType,\n venueName: 'Morpho Vaults',\n name: vaultName,\n assetSymbol: symbol,\n balance: v.balance || '0',\n balanceUsd: v.usdValue || v.usd_value || v.balanceUsd || '0',\n apy: meta?.apy7d ?? null,\n pnl: v.pnl ? {\n unrealizedPnl: v.pnl.unrealizedPnl || '0',\n realizedPnl: v.pnl.realizedPnl || '0',\n totalPnl: v.pnl.totalPnl || '0',\n totalDeposited: v.pnl.totalDeposited || '0',\n } : undefined,\n entryTimestamp: getEarliestDepositTimestamp(v.deposits || []),\n deposits: (v.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n timestamp: d.timestamp,\n })),\n withdrawals: (v.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Process Aave positions - API returns reserve_symbol directly\n const aavePositions = (positionsResponse as any).aave || [];\n if (aavePositions.length > 0) {\n venueMap.set('aave', aavePositions.map((a: any) => {\n const meta = aaveMeta.get(a.reserveAddress?.toLowerCase() || a.reserve_address?.toLowerCase());\n const symbol = a.reserveSymbol || a.reserve_symbol || meta?.symbol || 'TOKEN';\n return {\n id: a.reserveAddress || a.reserve_address || symbol,\n venue: 'aave' as VenueType,\n venueName: 'Aave V3',\n name: `${symbol} Supply`,\n assetSymbol: symbol,\n balance: a.balance || '0',\n balanceUsd: a.usdValue || a.usd_value || a.balanceUsd || '0',\n apy: meta?.supplyApy ?? null,\n pnl: a.pnl ? {\n unrealizedPnl: a.pnl.unrealizedPnl || '0',\n realizedPnl: a.pnl.realizedPnl || '0',\n totalPnl: a.pnl.totalPnl || '0',\n totalDeposited: a.pnl.totalDeposited || '0',\n } : undefined,\n entryTimestamp: getEarliestDepositTimestamp(a.deposits || []),\n deposits: (a.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n timestamp: d.timestamp,\n })),\n withdrawals: (a.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Process Pendle positions - API returns underlying_symbol, pt_balance\n const pendlePositions = (positionsResponse as any).pendlePt || (positionsResponse as any).pendle_pt || [];\n if (pendlePositions.length > 0) {\n venueMap.set('pendle', pendlePositions.map((p: any) => {\n const marketAddr = p.marketAddress || p.market_address;\n const meta = pendleMeta.get(marketAddr?.toLowerCase());\n const symbol = p.underlyingSymbol || p.underlying_symbol || meta?.underlyingSymbol || 'PT';\n return {\n id: marketAddr || p.ptAddress || p.pt_address,\n venue: 'pendle' as VenueType,\n venueName: 'Pendle',\n name: meta?.name || `PT-${symbol}`,\n assetSymbol: symbol,\n balance: p.ptBalance || p.pt_balance || p.balance || '0',\n balanceUsd: p.usdValue || p.usd_value || p.balanceUsd || '0',\n apy: meta?.impliedApy ?? null,\n expiry: p.expiry || undefined,\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 entryTimestamp: getEarliestDepositTimestamp(p.deposits || []),\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 timestamp: d.timestamp,\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 timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Convert to array of VenuePositions\n const result: VenuePositions[] = [];\n\n for (const [venue, positions] of venueMap) {\n if (positions.length > 0) {\n const totalBalanceUsd = positions.reduce(\n (sum, p) => sum + parseFloat(p.balanceUsd || '0'),\n 0\n );\n result.push({\n venue,\n venueName: positions[0].venueName,\n positions,\n totalBalanceUsd: totalBalanceUsd.toString(),\n });\n }\n }\n\n return result;\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const totalPositions = positionsQuery.data?.reduce(\n (sum, v) => sum + v.positions.length,\n 0\n ) || 0;\n\n const totalBalanceUsd = positionsQuery.data?.reduce(\n (sum, v) => sum + parseFloat(v.totalBalanceUsd),\n 0\n ) || 0;\n\n return {\n venuePositions: positionsQuery.data || [],\n totalPositions,\n totalBalanceUsd,\n isLoading: positionsQuery.isLoading,\n isError: positionsQuery.isError,\n error: positionsQuery.error,\n refetch: positionsQuery.refetch,\n };\n}\n","'use client';\n\nimport { TrendingUp, TrendingDown, ChevronRight } from 'lucide-react';\nimport { formatAmount, formatUSD } from '../../utils/format';\nimport type { Position } from './types';\n\ninterface PositionCardProps {\n position: Position;\n showApy?: boolean;\n showPnL?: boolean;\n onClick?: () => void;\n}\n\nexport function PositionCard({\n position,\n showApy = true,\n showPnL = true,\n onClick,\n}: PositionCardProps) {\n const pnlValue = parseFloat(position.pnl?.totalPnl || '0');\n const isPnlPositive = pnlValue >= 0;\n\n return (\n <button\n onClick={onClick}\n className=\"w-full text-left rounded-lg border p-4 transition-colors hover:opacity-90\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-center justify-between\">\n {/* Left: Name and Asset */}\n <div className=\"flex-1 min-w-0\">\n <h4\n className=\"font-medium truncate\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {position.name}\n </h4>\n <div className=\"flex items-center gap-3 mt-1 flex-wrap\">\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {position.assetSymbol}\n </span>\n\n {/* APY */}\n {showApy && position.apy && (\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {parseFloat(position.apy).toFixed(2)}% APY\n </span>\n )}\n\n {/* PnL */}\n {showPnL && position.pnl && (\n <span\n className=\"text-sm font-medium flex items-center gap-0.5\"\n style={{\n color: isPnlPositive\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-error)',\n }}\n >\n {isPnlPositive ? <TrendingUp size={12} /> : <TrendingDown size={12} />}\n {isPnlPositive ? '+' : ''}{formatUSD(position.pnl.totalPnl)}\n </span>\n )}\n </div>\n </div>\n\n {/* Right: Balance and Arrow */}\n <div className=\"flex items-center gap-2 ml-4\">\n <div className=\"text-right\">\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(position.balanceUsd)}\n </div>\n <div\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(position.balance)}\n </div>\n </div>\n <ChevronRight\n size={16}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </div>\n </div>\n </button>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { formatUSD } from '../../utils/format';\nimport { PositionCard } from './PositionCard';\nimport type { VenuePositions, Position } from './types';\n\ninterface VenueSectionProps {\n venuePositions: VenuePositions;\n defaultCollapsed?: boolean;\n showApy?: boolean;\n showPnL?: boolean;\n onPositionSelect?: (position: Position) => void;\n}\n\nexport function VenueSection({\n venuePositions,\n defaultCollapsed = false,\n showApy = true,\n showPnL = true,\n onPositionSelect,\n}: VenueSectionProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n return (\n <div\n className=\"rounded-xl border overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n {/* Section Header */}\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"w-full px-4 py-3 flex items-center justify-between\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {venuePositions.venueName}\n </span>\n <span\n className=\"text-sm px-2 py-0.5 rounded-full\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n {venuePositions.positions.length} position{venuePositions.positions.length !== 1 ? 's' : ''}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(venuePositions.totalBalanceUsd)}\n </span>\n <ChevronDown\n size={20}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isCollapsed ? 'rotate(0deg)' : 'rotate(180deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n </button>\n\n {/* Positions List */}\n {!isCollapsed && (\n <div\n className=\"px-4 pb-4 space-y-3 border-t\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <div className=\"pt-3\" />\n {venuePositions.positions.map((position) => (\n <PositionCard\n key={position.id}\n position={position}\n showApy={showApy}\n showPnL={showPnL}\n onClick={() => onPositionSelect?.(position)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect } from 'react';\nimport { X, ExternalLink, TrendingUp, TrendingDown, Clock, Percent, Calendar } from 'lucide-react';\nimport { formatAmount, formatUSD } from '../../utils/format';\nimport type { Position } from './types';\n\ninterface PositionDetailModalProps {\n position: Position;\n onClose: () => void;\n}\n\nfunction formatDuration(entryTimestamp: string | undefined): string | null {\n if (!entryTimestamp) return null;\n\n try {\n const entryDate = new Date(entryTimestamp);\n const now = new Date();\n const diffMs = now.getTime() - entryDate.getTime();\n\n if (diffMs < 0 || isNaN(diffMs)) return null;\n\n const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (days >= 365) {\n const years = Math.floor(days / 365);\n return `${years} year${years > 1 ? 's' : ''}`;\n }\n if (days >= 30) {\n const months = Math.floor(days / 30);\n return `${months} month${months > 1 ? 's' : ''}`;\n }\n if (days === 0) {\n const hours = Math.floor(diffMs / (1000 * 60 * 60));\n if (hours > 0) return `${hours} hour${hours > 1 ? 's' : ''}`;\n return 'Today';\n }\n return `${days} day${days !== 1 ? 's' : ''}`;\n } catch {\n return null;\n }\n}\n\nfunction formatDate(timestamp: string | undefined): string | null {\n if (!timestamp) return null;\n try {\n return new Date(timestamp).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n } catch {\n return null;\n }\n}\n\nfunction formatExpiryUTC(expiryTimestamp: number | undefined): string | null {\n if (!expiryTimestamp) return null;\n try {\n const date = new Date(expiryTimestamp * 1000); // Convert seconds to milliseconds\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n timeZone: 'UTC',\n });\n } catch {\n return null;\n }\n}\n\nexport function PositionDetailModal({ position, onClose }: PositionDetailModalProps) {\n const pnlValue = parseFloat(position.pnl?.totalPnl || '0');\n const isPnlPositive = pnlValue >= 0;\n const isPendle = position.venue === 'pendle';\n const duration = formatDuration(position.entryTimestamp);\n const expiryDate = formatExpiryUTC(position.expiry);\n\n // Close on escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onClose]);\n\n // Check if we have any stats to show\n const hasStats = position.apy || (isPendle && (duration || expiryDate)) || position.pnl;\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n style={{ backgroundColor: 'rgba(0, 0, 0, 0.7)' }}\n onClick={onClose}\n >\n <div\n className=\"relative w-full max-w-md rounded-xl border overflow-hidden max-h-[90vh] overflow-y-auto\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n className=\"sticky top-0 flex items-center justify-between p-4 border-b\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div>\n <h2\n className=\"font-semibold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {position.name}\n </h2>\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {position.venueName}\n </p>\n </div>\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <X size={20} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n\n {/* Balance Section */}\n <div className=\"p-4 border-b\" style={{ borderColor: 'var(--compass-color-border)' }}>\n <div className=\"text-center\">\n <p\n className=\"text-sm mb-1\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Current Balance\n </p>\n <p\n className=\"text-3xl font-bold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(position.balanceUsd)}\n </p>\n <p\n className=\"text-sm font-mono mt-1\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(position.balance)} {position.assetSymbol}\n </p>\n </div>\n </div>\n\n {/* Stats Grid - only show if we have stats */}\n {hasStats && (\n <div className=\"grid grid-cols-2 gap-3 p-4 border-b\" style={{ borderColor: 'var(--compass-color-border)' }}>\n {/* APY */}\n {position.apy && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Percent size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n APY\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {parseFloat(position.apy).toFixed(2)}%\n </p>\n </div>\n )}\n\n {/* Duration - only for Pendle */}\n {isPendle && duration && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Clock size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Duration\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {duration}\n </p>\n </div>\n )}\n\n {/* Expiry - only for Pendle */}\n {isPendle && expiryDate && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Calendar size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Expiry (UTC)\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {expiryDate}\n </p>\n </div>\n )}\n\n {/* P&L */}\n {position.pnl && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n {isPnlPositive ? (\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <TrendingDown size={14} style={{ color: 'var(--compass-color-error)' }} />\n )}\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Total P&L\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{\n color: isPnlPositive\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-error)',\n }}\n >\n {isPnlPositive ? '+' : ''}{formatUSD(position.pnl.totalPnl)}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Transaction History */}\n {(position.deposits.length > 0 || position.withdrawals.length > 0) && (\n <div className=\"p-4\">\n <h3\n className=\"font-semibold mb-3\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Transaction History\n </h3>\n\n <div className=\"space-y-2\">\n {/* Deposits */}\n {position.deposits.map((tx, i) => {\n const date = formatDate(tx.timestamp);\n return (\n <div\n key={`deposit-${i}`}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <p\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n +{formatAmount(tx.amount)} {position.assetSymbol}\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {date ? `Deposit - ${date}` : 'Deposit'}\n </p>\n </div>\n {tx.txHash && (\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <ExternalLink size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </a>\n )}\n </div>\n );\n })}\n\n {/* Withdrawals */}\n {position.withdrawals.map((tx, i) => {\n const date = formatDate(tx.timestamp);\n return (\n <div\n key={`withdraw-${i}`}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <p\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n -{formatAmount(tx.amount)} {position.assetSymbol}\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {date ? `Withdrawal - ${date}` : 'Withdrawal'}\n </p>\n </div>\n {tx.txHash && (\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <ExternalLink size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </a>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, Inbox } from 'lucide-react';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { ChainSwitcher, WalletStatus, EarnAccountBalance } from '../../shared';\nimport { formatUSD } from '../../utils/format';\nimport { usePositionsData } from './usePositionsData';\nimport { VenueSection } from './VenueSection';\nimport { PositionDetailModal } from './PositionDetailModal';\nimport type { EarnPositionsListProps, Position } from './types';\n\nexport function EarnPositionsList({\n showApy = true,\n showPnL = true,\n defaultCollapsed = [],\n onPositionSelect,\n}: EarnPositionsListProps) {\n const { isConnected } = useEmbeddableWallet();\n const { venuePositions, totalPositions, totalBalanceUsd, isLoading, isError } = usePositionsData();\n const [selectedPosition, setSelectedPosition] = useState<Position | null>(null);\n\n const handlePositionClick = (position: Position) => {\n setSelectedPosition(position);\n onPositionSelect?.(position);\n };\n\n // Render content based on state\n const renderContent = () => {\n\n // Not connected state\n if (!isConnected) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <Inbox size={48} className=\"mb-4 opacity-50\" />\n <p className=\"font-medium\">Connect your wallet</p>\n <p className=\"text-sm mt-1\">to view your earn positions</p>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2\n size={32}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n );\n }\n\n // Error state\n if (isError) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n <p className=\"font-medium\">Failed to load positions</p>\n <p className=\"text-sm mt-1\">Please try again later</p>\n </div>\n );\n }\n\n // Empty state\n if (totalPositions === 0) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <Inbox size={48} className=\"mb-4 opacity-50\" />\n <p className=\"font-medium\">No positions yet</p>\n <p className=\"text-sm mt-1\">Deposit to a vault or market to get started</p>\n </div>\n );\n }\n\n // Positions view\n return (\n <>\n {/* Summary Header */}\n <div\n className=\"flex items-center justify-between p-4 rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <h2\n className=\"font-bold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Your Positions\n </h2>\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {totalPositions} position{totalPositions !== 1 ? 's' : ''} across {venuePositions.length} venue{venuePositions.length !== 1 ? 's' : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Total Value\n </p>\n <p\n className=\"font-bold text-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalBalanceUsd)}\n </p>\n </div>\n </div>\n\n {/* Venue Sections */}\n <div className=\"space-y-4\">\n {venuePositions.map((vp) => (\n <VenueSection\n key={vp.venue}\n venuePositions={vp}\n defaultCollapsed={defaultCollapsed.includes(vp.venue)}\n showApy={showApy}\n showPnL={showPnL}\n onPositionSelect={handlePositionClick}\n />\n ))}\n </div>\n </>\n );\n };\n\n return (\n <>\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 {/* Content */}\n {renderContent()}\n </div>\n\n {/* Position Detail Modal */}\n {selectedPosition && (\n <PositionDetailModal\n position={selectedPosition}\n onClose={() => setSelectedPosition(null)}\n />\n )}\n </>\n );\n}\n","import type { FeaturePreset, TabConfig, TabId } from './types';\n\nconst allTabs: 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 // TODO: Positions tab temporarily disabled - needs more work on API response handling\n { id: 'positions', label: 'Positions', enabled: false },\n];\n\nexport function getTabsForPreset(preset: FeaturePreset): TabConfig[] {\n switch (preset) {\n case 'full':\n return allTabs;\n case 'earn-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id !== 'swap',\n }));\n case 'swap-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id === 'swap',\n }));\n case 'vaults-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id === 'vaults',\n }));\n default:\n return allTabs;\n }\n}\n\nexport function getDefaultTab(tabs: TabConfig[]): TabId {\n const enabledTab = tabs.find(t => t.enabled);\n return enabledTab?.id || 'vaults';\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { VaultsList } from '../VaultsList';\nimport { AaveMarketsList } from '../AaveMarketsList';\nimport { PendleMarketsList } from '../PendleMarketsList';\nimport { SwapWidget } from '../SwapWidget';\nimport { EarnPositionsList } from '../EarnPositionsList';\nimport { getTabsForPreset, getDefaultTab } from './presets';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nexport function CompassEarnWidget({\n preset = 'full',\n enableVaults,\n enableAave,\n enablePendle,\n enableSwap,\n enablePositions,\n defaultTab,\n showHeader = true,\n showApy = true,\n showTvl = true,\n showExpiry = true,\n showUserPosition = true,\n showPnL = true,\n showSearch = true,\n showSort = true,\n onTabChange,\n}: CompassEarnWidgetProps) {\n // Build tab configuration from preset + overrides\n const tabs = useMemo<TabConfig[]>(() => {\n const baseTabs = getTabsForPreset(preset);\n\n // Apply overrides if provided\n return baseTabs.map(tab => {\n let enabled = tab.enabled;\n if (tab.id === 'vaults' && enableVaults !== undefined) enabled = enableVaults;\n if (tab.id === 'aave' && enableAave !== undefined) enabled = enableAave;\n if (tab.id === 'pendle' && enablePendle !== undefined) enabled = enablePendle;\n if (tab.id === 'swap' && enableSwap !== undefined) enabled = enableSwap;\n if (tab.id === 'positions' && enablePositions !== undefined) enabled = enablePositions;\n return { ...tab, enabled };\n });\n }, [preset, enableVaults, enableAave, enablePendle, enableSwap, enablePositions]);\n\n const enabledTabs = tabs.filter(t => t.enabled);\n const initialTab = defaultTab && tabs.find(t => t.id === defaultTab)?.enabled\n ? defaultTab\n : getDefaultTab(tabs);\n\n const [activeTab, setActiveTab] = useState<TabId>(initialTab);\n\n const handleTabChange = (tab: TabId) => {\n setActiveTab(tab);\n onTabChange?.(tab);\n };\n\n // If only one tab is enabled, don't show tab bar\n const showTabs = enabledTabs.length > 1;\n\n return (\n <div className=\"flex flex-col\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header */}\n <h1 className=\"font-bold text-xl\" style={{ color: 'var(--compass-color-text)', fontFamily: 'var(--compass-font-family)' }}>\n Compass Earn\n </h1>\n\n {/* Tab Bar */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => handleTabChange(tab.id)}\n className=\"flex-1 text-sm font-medium\"\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 borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div>\n {activeTab === 'vaults' && (\n <VaultsList\n showApy={showApy}\n showTvl={showTvl}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n showSort={showSort}\n />\n )}\n {activeTab === 'aave' && (\n <AaveMarketsList\n showApy={showApy}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n />\n )}\n {activeTab === 'pendle' && (\n <PendleMarketsList\n showApy={showApy}\n showExpiry={showExpiry}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n showSort={showSort}\n />\n )}\n {activeTab === 'swap' && <SwapWidget />}\n {activeTab === 'positions' && (\n <EarnPositionsList\n showPnL={showPnL}\n />\n )}\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/EarnAccount/MarketSelector.tsx","../src/components/EarnAccount/EarningsModal.tsx","../src/components/EarnAccount/EarnAccount.tsx","../src/components/PendleMarketsList/usePendleData.ts","../src/components/PendleMarketsList/PendleMarketsList.tsx","../src/components/SwapWidget/useSwapQuote.ts","../src/components/SwapWidget/types.ts","../src/components/SwapWidget/SwapWidget.tsx","../src/components/EarnPositionsList/usePositionsData.ts","../src/components/EarnPositionsList/PositionCard.tsx","../src/components/EarnPositionsList/VenueSection.tsx","../src/components/EarnPositionsList/PositionDetailModal.tsx","../src/components/EarnPositionsList/EarnPositionsList.tsx","../src/components/CompassEarnWidget/presets.ts","../src/components/CompassEarnWidget/CompassEarnWidget.tsx","../src/constants.ts"],"names":["createContext","useMemo","CompassApiSDK","jsx","useContext","mainnet","base","arbitrum","useState","useEffect","useQueryClient","useQuery","useCallback","QueryClient","QueryClientProvider","jsxs","Wallet","LogOut","X","formatUSD","ChevronDown","useRef","AlertCircle","ArrowRight","Loader2","ArrowDownLeft","ArrowUpRight","ExternalLink","Fragment","Coins","TrendingUp","Search","SlidersHorizontal","formatAPY","formatDate","ChevronUp","formatAmount","positions","ChevronRight","Plus","Minus","Shield","CheckCircle","formatTVL","Calendar","ArrowDownUp","totalBalanceUsd","PositionCard","TrendingDown","Percent","Clock","Inbox"],"mappings":"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","file":"index.js","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 (may be empty when using server-side routes) */\n apiKey: string;\n /** The Compass API SDK client instance (may be a dummy when using server-side routes) */\n client: CompassApiSDK;\n}\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\ninterface ApiProviderProps {\n children: ReactNode;\n /** API key - optional when using server-side routes */\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 * When apiKey is not provided, a minimal client is created but all\n * data fetching should go through server-side /api/compass/* routes.\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 * @deprecated When using server-side routes, prefer using fetch to /api/compass/* instead.\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: '8px',\n containerPadding: '1rem',\n cardPadding: '12px',\n inputPadding: '0.5rem 0.75rem',\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 primaryMuted: 'rgba(99, 102, 241, 0.15)',\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 primaryMuted: 'rgba(99, 102, 241, 0.1)',\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 primaryMuted: 'rgba(255, 255, 255, 0.1)',\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 primaryMuted: 'rgba(10, 10, 10, 0.1)',\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 primaryMuted: 'rgba(59, 130, 246, 0.2)',\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 primaryMuted: 'rgba(29, 78, 216, 0.15)',\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 * Generates both old format (--compass-font-{name}-size) and\n * component-expected format (--compass-font-size-{name})\n */\nfunction typographyScaleToCssVariables(\n name: string,\n scale: TypographyScale\n): Record<string, string> {\n const vars: Record<string, string> = {};\n\n // Component-expected format: --compass-font-size-{name}\n vars[`--compass-font-size-${name}`] = scale.fontSize;\n vars[`--compass-font-line-height-${name}`] = String(scale.lineHeight);\n vars[`--compass-font-weight-${name}`] = String(scale.fontWeight);\n\n if (scale.letterSpacing) {\n vars[`--compass-font-letter-spacing-${name}`] = 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 // Add alias for 'small' (maps to caption)\n vars['--compass-font-size-small'] = typography.caption.fontSize;\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 - use format components expect\n for (const [key, value] of Object.entries(shape.borderRadius)) {\n if (key === 'md') {\n // Default border radius (no suffix)\n vars['--compass-border-radius'] = value;\n }\n vars[`--compass-border-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: themeProp }: ThemeProviderProps) {\n const [themeInput, setThemeInput] = useState<ThemeInput | undefined>(themeProp);\n\n // Sync internal state when prop changes\n useEffect(() => {\n setThemeInput(themeProp);\n }, [themeProp]);\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 /**\n * Compass API key - optional when using server-side API routes.\n * If not provided, all API calls will go through /api/compass/* routes.\n * @deprecated Use server-side API routes instead for better security.\n */\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\" style={{ width: '100%', minHeight: '100%' }}>\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\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\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 text-sm font-medium\"\n style={{\n backgroundColor: isActive ? 'var(--compass-color-primary)' : 'transparent',\n color: isActive ? 'var(--compass-color-primary-text)' : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-normal)',\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 font-medium hover:opacity-90\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.375) calc(var(--compass-spacing-unit) * 0.5)' : 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <div\n className=\"w-2 h-2 flex-shrink-0\"\n style={{\n backgroundColor: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\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=\"hover:bg-white/10 flex-shrink-0\"\n title=\"Disconnect wallet\"\n style={{\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.25)' : 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-normal)',\n }}\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 overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b\"\n style={{\n borderColor: 'var(--compass-color-border)',\n padding: 'calc(var(--compass-spacing-card) * 0.75) var(--compass-spacing-card)',\n }}\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=\"hover:opacity-70\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 'var(--compass-spacing-card)' }}>\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 border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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] 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 borderRadius: 'var(--compass-border-radius-lg)',\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 immediately\n queryClient.invalidateQueries({ queryKey: ['earnAccountTokenBalance'] });\n queryClient.invalidateQueries({ queryKey: ['vaults'] });\n queryClient.invalidateQueries({ queryKey: ['aaveMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['pendleMarkets'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Tab Switcher */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\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 text-sm font-medium capitalize\"\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 borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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={{\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {[0.25, 0.5, 1].map((pct) => (\n <button\n key={pct}\n onClick={() => handleQuickAmount(pct)}\n className=\"flex-1 text-xs font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.375)',\n transition: 'var(--compass-transition-fast)',\n }}\n >\n {pct === 1 ? 'Max' : `${pct * 100}%`}\n </button>\n ))}\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"text-sm text-center\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\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 font-medium flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\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\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n <ArrowDownLeft size={12} style={{ color: 'var(--compass-color-success)' }} />\n </div>\n ) : (\n <div\n className=\"p-1\"\n style={{\n backgroundColor: 'var(--compass-color-warning-muted)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\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 hover:opacity-70 transition-opacity\"\n title=\"View on explorer\"\n style={{ borderRadius: 'var(--compass-border-radius-sm)' }}\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 - show children in preview mode (wallet gate is on individual actions)\n if (!isConnected) {\n return <>{children}</>;\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Icon */}\n <div\n className=\"w-12 h-12 flex items-center justify-center mx-auto mb-4\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n opacity: 0.15,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n <svg\n width=\"28\"\n height=\"28\"\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 <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"M12 10v4M10 12h4\" />\n </svg>\n </div>\n\n <h3\n className=\"text-xl font-semibold mb-3\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Set Up Your Savings Account\n </h3>\n\n <div\n className=\"text-sm mb-6 max-w-sm mx-auto space-y-3\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <p>\n Your Earn Account is a special savings wallet that lets you earn interest on your money.\n </p>\n <p>\n <strong style={{ color: 'var(--compass-color-text)' }}>You stay in control</strong> — only you can access and move your funds. Think of it like opening a high-yield savings account, but you hold the keys.\n </p>\n <p className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n This one-time setup takes just a few seconds and costs you nothing.\n </p>\n </div>\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 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)' : 'white',\n cursor: isCreating ? 'not-allowed' : 'pointer',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n {isCreating && (\n <Loader2 size={18} className=\"animate-spin\" />\n )}\n {isCreating ? 'Setting up...' : 'Create My Savings Account'}\n </button>\n\n <p\n className=\"text-xs mt-4 max-w-xs mx-auto\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n You'll be asked to approve this transaction — this is because you're the only one who can authorize the creation of your account. Your keys, your control.\n </p>\n\n <p\n className=\"text-xs mt-2\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Free to create • No fees\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 overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n boxShadow: 'var(--compass-shadow-lg)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b\"\n style={{\n borderColor: 'var(--compass-color-border)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75) var(--compass-spacing-card)',\n }}\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=\"hover:opacity-70\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Content */}\n <div style={{ padding: 'var(--compass-spacing-card)' }}>\n {isLoading ? (\n <div className=\"flex items-center justify-center\" style={{ padding: 'calc(var(--compass-spacing-unit) * 2) 0' }}>\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\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2) 0' }}\n >\n No token balances found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {/* Total - Prominent at top */}\n <div\n className=\"flex items-center justify-between border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 1)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\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-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalUsdValue)}\n </span>\n </div>\n\n {/* Token Breakdown Label */}\n <div\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) 0',\n }}\n >\n Token Breakdown\n </div>\n\n {/* Token List */}\n {balances.map((token) => (\n <div\n key={token.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n {/* Token Icon Placeholder */}\n <div\n className=\"w-8 h-8 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 borderRadius: 'var(--compass-border-radius-full)',\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 </div>\n )}\n\n {/* Account Address */}\n {earnAccountAddress && (\n <div\n className=\"border-t text-center\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'var(--compass-spacing-card)',\n paddingTop: 'var(--compass-spacing-card)',\n }}\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 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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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={`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 borderRadius: 'var(--compass-border-radius-md)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\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 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 borderRadius: 'var(--compass-border-radius-md)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\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 text-xs font-medium transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-secondary)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"p-3 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 borderRadius: 'var(--compass-border-radius-lg)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\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\n className=\"flex items-center justify-between border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 2)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\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 { 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 { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { sortBy = 'apy_7d', assetFilter, minApy, minTvl } = options;\n\n // Fetch vaults via server-side proxy\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 params = new URLSearchParams({\n chain: chainId,\n orderBy: sortBy === 'tvl' ? 'tvl_usd' : sortBy,\n direction: 'desc',\n limit: '100',\n ...(assetSymbol && { assetSymbol }),\n });\n\n const response = await fetch(`/api/compass/vaults?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch vaults');\n }\n\n const data = await response.json();\n\n let vaults = ((data 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 via server-side proxy\n const positionsQuery = useQuery({\n queryKey: ['vaultPositions', chainId, address],\n queryFn: async (): Promise<UserVaultPosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <div className=\"flex\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {showSearch && (\n <div\n className=\"flex-1 flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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=\"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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\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=\"border text-sm flex items-center\"\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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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 border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-sm)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-fast)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load vaults. Please try again.\n </div>\n ) : filteredVaults.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No vaults found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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 { 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 { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const { assetFilter } = options;\n\n // Fetch Aave markets via server-side proxy\n const marketsQuery = useQuery({\n queryKey: ['aaveMarkets', chainId, assetFilter],\n queryFn: async (): Promise<AaveMarketData[]> => {\n const params = new URLSearchParams({ chain: chainId });\n\n const response = await fetch(`/api/compass/aave/markets?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch Aave markets');\n }\n\n const data = await response.json();\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 = (data 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 via server-side proxy\n const positionsQuery = useQuery({\n queryKey: ['aavePositions', chainId, address],\n queryFn: async (): Promise<UserAavePosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n {/* Search */}\n {showSearch && (\n <div\n className=\"flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load Aave markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No markets found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\n className=\"flex items-center justify-end border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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","import { useState, useMemo } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { MarketType, MarketOption } from './types';\n\ninterface MarketSelectorProps {\n markets: MarketOption[];\n selectedMarket: MarketOption | null;\n onMarketSelect: (market: MarketOption) => void;\n marketType: MarketType;\n onMarketTypeChange: (type: MarketType) => void;\n minTvl: number;\n onMinTvlChange: (tvl: number) => void;\n isLoading?: boolean;\n}\n\nconst MARKET_TYPES: { value: MarketType; label: string }[] = [\n { value: 'aave', label: 'SAFE' },\n { value: 'vaults', label: 'MODERATE' },\n { value: 'pendle', label: 'FIXED' },\n];\n\nexport function MarketSelector({\n markets,\n selectedMarket,\n onMarketSelect,\n marketType,\n onMarketTypeChange,\n minTvl,\n onMinTvlChange,\n isLoading,\n}: MarketSelectorProps) {\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n const showTvl = marketType !== 'aave';\n\n const filteredMarkets = useMemo(() => {\n return markets.filter((m) => m.type === marketType && (showTvl ? m.tvl >= minTvl : true));\n }, [markets, marketType, minTvl, showTvl]);\n\n const maxTvl = useMemo(() => {\n const typeMarkets = markets.filter((m) => m.type === marketType);\n return Math.max(...typeMarkets.map((m) => m.tvl), 100_000_000);\n }, [markets, marketType]);\n\n const hasMarkets = filteredMarkets.length > 0;\n\n const formatTvl = (value: number) => {\n if (value >= 1_000_000_000) return `$${(value / 1_000_000_000).toFixed(1)}B`;\n if (value >= 1_000_000) return `$${(value / 1_000_000).toFixed(1)}M`;\n if (value >= 1_000) return `$${(value / 1_000).toFixed(0)}K`;\n return `$${value}`;\n };\n\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 3)',\n }}\n >\n {/* Market Type Toggle */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n Market Type\n </label>\n <div\n style={{\n display: 'flex',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n overflow: 'hidden',\n }}\n >\n {MARKET_TYPES.map((type) => (\n <button\n key={type.value}\n onClick={() => onMarketTypeChange(type.value)}\n style={{\n flex: 1,\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor:\n marketType === type.value\n ? 'var(--compass-color-primary, #6366f1)'\n : 'var(--compass-color-surface, #12121a)',\n color:\n marketType === type.value\n ? 'var(--compass-color-primary-text, white)'\n : 'var(--compass-color-text, #e4e4e7)',\n border: 'none',\n cursor: 'pointer',\n fontSize: 'var(--compass-font-size-sm, 14px)',\n fontWeight: 500,\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal, all 0.2s ease)',\n }}\n >\n {type.label}\n </button>\n ))}\n </div>\n </div>\n\n {/* Market Dropdown */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n Select Market\n </label>\n <div style={{ position: 'relative' }}>\n <button\n onClick={() => hasMarkets && setIsDropdownOpen(!isDropdownOpen)}\n disabled={!hasMarkets || isLoading}\n style={{\n width: '100%',\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2.5)',\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n cursor: hasMarkets ? 'pointer' : 'not-allowed',\n opacity: hasMarkets ? 1 : 0.5,\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <span\n style={{\n color: selectedMarket\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n }}\n >\n {isLoading\n ? 'Loading markets...'\n : !hasMarkets\n ? `No markets above ${formatTvl(minTvl)}`\n : selectedMarket\n ? selectedMarket.name\n : 'Select a market'}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: 'var(--compass-spacing-unit)' }}>\n {selectedMarket && (\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n }}\n >\n {selectedMarket.apy.toFixed(2)}%\n </span>\n )}\n <ChevronDown\n size={16}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isDropdownOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'var(--compass-transition-normal)',\n }}\n />\n </div>\n </button>\n\n {/* Dropdown List */}\n {isDropdownOpen && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: 'var(--compass-spacing-unit, 8px)',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n boxShadow: 'var(--compass-shadow-lg, 0 25px 50px -12px rgba(0, 0, 0, 0.5))',\n zIndex: 50,\n maxHeight: '200px',\n overflowY: 'auto',\n }}\n >\n {filteredMarkets.map((market) => (\n <button\n key={market.id}\n onClick={() => {\n onMarketSelect(market);\n setIsDropdownOpen(false);\n }}\n style={{\n width: '100%',\n padding: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor:\n selectedMarket?.id === market.id\n ? 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.15))'\n : 'var(--compass-color-surface, #12121a)',\n border: 'none',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n cursor: 'pointer',\n textAlign: 'left',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n }}\n >\n <span style={{ color: 'var(--compass-color-text)' }}>{market.name}</span>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n }}\n >\n {market.apy.toFixed(2)}% APY\n </span>\n </div>\n {(showTvl || market.expiry) && (\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n {showTvl && `TVL: ${formatTvl(market.tvl)}`}\n {showTvl && market.expiry && ' · '}\n {market.expiry && `Expires: ${market.expiry}`}\n </div>\n )}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* TVL Slider - hidden for SAFE (Aave) markets */}\n {showTvl && (\n <div>\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: 'var(--compass-spacing-unit)',\n }}\n >\n <label\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Min TVL\n </label>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text)',\n }}\n >\n {formatTvl(minTvl)}\n </span>\n </div>\n <input\n type=\"range\"\n min={0}\n max={maxTvl}\n step={100000}\n value={minTvl}\n onChange={(e) => onMinTvlChange(Number(e.target.value))}\n style={{\n width: '100%',\n accentColor: 'var(--compass-color-primary)',\n }}\n />\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { X, ChevronDown, ChevronUp, ExternalLink } from 'lucide-react';\nimport type { Position } from './types';\n\ninterface EarningsModalProps {\n isOpen: boolean;\n onClose: () => void;\n positions: Position[];\n totalEarned: number;\n isLoading?: boolean;\n}\n\nfunction PositionCard({ position }: { position: Position }) {\n const [isHistoryExpanded, setIsHistoryExpanded] = useState(false);\n\n const formatDate = (dateStr: string) => {\n const date = new Date(dateStr);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n };\n\n const formatShortDate = (dateStr: string) => {\n const date = new Date(dateStr);\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n };\n\n return (\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-lg, 12px)',\n padding: 'var(--compass-spacing-card, 16px)',\n }}\n >\n {/* Position Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <span\n style={{\n fontWeight: 600,\n color: 'var(--compass-color-text)',\n fontSize: 'var(--compass-font-size-base)',\n }}\n >\n {position.marketName}\n </span>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: 'var(--compass-font-size-sm)',\n backgroundColor: 'var(--compass-color-success-muted)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 1.5)',\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n APY: {position.apy.toFixed(2)}%\n </span>\n </div>\n\n {/* Position Details */}\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 'calc(var(--compass-spacing-unit) * 2)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Amount\n </div>\n <div style={{ color: 'var(--compass-color-text)', fontWeight: 500 }}>\n {position.amount.toLocaleString()} {position.token}\n </div>\n </div>\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Entered\n </div>\n <div style={{ color: 'var(--compass-color-text)' }}>{formatDate(position.entryDate)}</div>\n </div>\n </div>\n\n {/* P&L Breakdown */}\n <div\n style={{\n paddingTop: 'calc(var(--compass-spacing-unit) * 2)',\n borderTop: '1px solid var(--compass-color-border)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 1.5)',\n }}\n >\n {position.pnl ? (\n <div\n style={{\n display: 'grid',\n gridTemplateColumns: '1fr 1fr',\n gap: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Unrealised P&L\n </div>\n <div\n style={{\n fontWeight: 600,\n color: position.pnl.unrealizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.unrealizedPnl >= 0 ? '+' : ''}${position.pnl.unrealizedPnl.toFixed(2)}\n </div>\n </div>\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Realised P&L\n </div>\n <div\n style={{\n fontWeight: 600,\n color: position.pnl.realizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.realizedPnl >= 0 ? '+' : ''}${position.pnl.realizedPnl.toFixed(2)}\n </div>\n </div>\n </div>\n ) : (\n <div>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Total P&L:{' '}\n </span>\n <span\n style={{\n fontWeight: 600,\n color: position.performance >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.performance >= 0 ? '+' : ''}${position.performance.toFixed(2)}\n </span>\n </div>\n )}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n {position.pnl && (\n <div>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Total:{' '}\n </span>\n <span\n style={{\n fontWeight: 600,\n color: position.pnl.totalPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {position.pnl.totalPnl >= 0 ? '+' : ''}${position.pnl.totalPnl.toFixed(2)}\n </span>\n </div>\n )}\n <button\n onClick={() => setIsHistoryExpanded(!isHistoryExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n padding: 'calc(var(--compass-spacing-unit) * 1) calc(var(--compass-spacing-unit) * 2)',\n backgroundColor: 'transparent',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-md)',\n cursor: 'pointer',\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n tx history\n {isHistoryExpanded ? <ChevronUp size={12} /> : <ChevronDown size={12} />}\n </button>\n </div>\n </div>\n\n {/* Transaction History (Expandable) */}\n {isHistoryExpanded && position.transactions.length > 0 && (\n <div\n style={{\n marginTop: 'calc(var(--compass-spacing-unit) * 2)',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 2)',\n }}\n >\n {position.transactions.map((tx) => (\n <div\n key={tx.id}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) 0',\n borderBottom: '1px solid var(--compass-color-border)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: 'calc(var(--compass-spacing-unit) * 2)' }}>\n <span\n style={{\n fontSize: 'var(--compass-font-size-xs)',\n color: 'var(--compass-color-text-tertiary)',\n minWidth: '50px',\n }}\n >\n {formatShortDate(tx.date)}\n </span>\n <span\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n textTransform: 'capitalize',\n }}\n >\n {tx.type}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: 'calc(var(--compass-spacing-unit) * 2)' }}>\n <span\n style={{\n fontWeight: 500,\n color: tx.type === 'deposit' ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {tx.type === 'deposit' ? '+' : '-'}\n {tx.amount} {tx.token}\n </span>\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n <ExternalLink size={12} />\n </a>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function EarningsModal({ isOpen, onClose, positions, totalEarned, isLoading }: EarningsModalProps) {\n if (!isOpen) return null;\n\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'var(--compass-color-overlay, rgba(0, 0, 0, 0.75))',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n padding: '1rem',\n }}\n onClick={onClose}\n >\n <div\n style={{\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n border: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n borderRadius: 'var(--compass-border-radius-xl, 16px)',\n boxShadow: 'var(--compass-shadow-lg, 0 25px 50px -12px rgba(0, 0, 0, 0.5))',\n width: '100%',\n maxWidth: '480px',\n maxHeight: '80vh',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 'var(--compass-spacing-card, 16px)',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n }}\n >\n <h2\n style={{\n fontWeight: 600,\n fontSize: 'var(--compass-font-size-lg)',\n color: 'var(--compass-color-text)',\n margin: 0,\n }}\n >\n Your Positions\n </h2>\n <button\n onClick={onClose}\n style={{\n backgroundColor: 'transparent',\n border: 'none',\n cursor: 'pointer',\n padding: 'var(--compass-spacing-unit)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* Total P&L Summary */}\n {(() => {\n const totalUnrealized = positions.reduce((sum, p) => sum + (p.pnl?.unrealizedPnl || 0), 0);\n const totalRealized = positions.reduce((sum, p) => sum + (p.pnl?.realizedPnl || 0), 0);\n return (\n <div\n style={{\n padding: 'var(--compass-spacing-card, 16px)',\n borderBottom: '1px solid var(--compass-color-border, rgba(255, 255, 255, 0.1))',\n backgroundColor: 'var(--compass-color-surface, #12121a)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit) * 1.5)',\n }}\n >\n <div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-sm)',\n color: 'var(--compass-color-text-secondary)',\n marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n Total P&L\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-xl)',\n fontWeight: 600,\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalEarned >= 0 ? '+' : ''}${totalEarned.toFixed(2)}\n </div>\n </div>\n <div\n style={{\n display: 'flex',\n gap: 'calc(var(--compass-spacing-unit) * 3)',\n }}\n >\n <div>\n <div style={{ fontSize: 'var(--compass-font-size-xs)', color: 'var(--compass-color-text-tertiary)' }}>\n Unrealised\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-base)',\n fontWeight: 500,\n color: totalUnrealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalUnrealized >= 0 ? '+' : ''}${totalUnrealized.toFixed(2)}\n </div>\n </div>\n <div>\n <div style={{ fontSize: 'var(--compass-font-size-xs)', color: 'var(--compass-color-text-tertiary)' }}>\n Realised\n </div>\n <div\n style={{\n fontSize: 'var(--compass-font-size-base)',\n fontWeight: 500,\n color: totalRealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalRealized >= 0 ? '+' : ''}${totalRealized.toFixed(2)}\n </div>\n </div>\n </div>\n </div>\n );\n })()}\n\n {/* Positions List */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: 'var(--compass-spacing-card, 16px)',\n display: 'flex',\n flexDirection: 'column',\n gap: 'calc(var(--compass-spacing-unit, 8px) * 2)',\n backgroundColor: 'var(--compass-color-background, #0a0a0f)',\n }}\n >\n {isLoading ? (\n <div\n style={{\n textAlign: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 6)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n Loading positions...\n </div>\n ) : positions.length === 0 ? (\n <div\n style={{\n textAlign: 'center',\n padding: 'calc(var(--compass-spacing-unit) * 6)',\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n <p style={{ marginBottom: 'var(--compass-spacing-unit)' }}>No active positions yet</p>\n <p style={{ fontSize: 'var(--compass-font-size-sm)', color: 'var(--compass-color-text-tertiary)' }}>\n Deposit into a market to start earning\n </p>\n </div>\n ) : (\n positions.map((position) => <PositionCard key={position.id} position={position} />)\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, Plus, Minus, ArrowDownLeft, ArrowRight, Wallet, Shield, CheckCircle, ChevronDown, ChevronRight } from 'lucide-react';\nimport { WalletStatus, EarnAccountGuard, ActionModal, ChainSwitcher } from '../../shared';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { MarketSelector } from './MarketSelector';\nimport { EarningsModal } from './EarningsModal';\nimport type { EarnAccountProps, MarketType, MarketOption, Position } from './types';\n\n// Numeric EVM chain IDs for wallet switching\nconst EVM_CHAIN_IDS: Record<string, number> = {\n ethereum: 1,\n base: 8453,\n arbitrum: 42161,\n};\n\n// Supported tokens for deposits and withdrawals\nconst SUPPORTED_TOKENS = ['USDC', 'USDT', 'DAI', 'WETH', 'SBC', 'AUSD'];\n\nfunction formatCurrency(amount: string | number | null | undefined): string {\n if (!amount) return '$0.00';\n const num = typeof amount === 'string' ? parseFloat(amount) : amount;\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\nfunction formatAmount(value: string | number): string {\n const num = typeof value === 'string' ? parseFloat(value) : value;\n if (isNaN(num)) return '0';\n return num.toFixed(6).replace(/\\.?0+$/, '');\n}\n\n/**\n * EarnAccount widget - A beautiful banking-style USDC savings account.\n */\nexport function EarnAccount({\n showHeader = true,\n showInterestRate = true,\n showTopUpButton = true,\n showTrustBadge = true,\n compact = true,\n title = 'Savings Account',\n onDeposit,\n onWithdraw,\n defaultMarketType = 'aave',\n defaultMinTvl = 0,\n}: EarnAccountProps) {\n const { address, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { isDeployed } = useEarnAccount();\n const { chainId: CHAIN_ID } = useChain();\n const queryClient = useQueryClient();\n const [activeTab, setActiveTab] = useState<'deposit' | 'withdraw'>('deposit');\n const [selectedToken, setSelectedToken] = useState('USDC');\n const [amount, setAmount] = useState('');\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [statusMessage, setStatusMessage] = useState('');\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n\n // Fund modal state\n const [isFundModalOpen, setIsFundModalOpen] = useState(false);\n const [fundAmount, setFundAmount] = useState('');\n const [fundToken, setFundToken] = useState('USDC');\n const [isFunding, setIsFunding] = useState(false);\n const [fundError, setFundError] = useState<string | null>(null);\n const [fundStatus, setFundStatus] = useState('');\n\n // Balances breakdown modal state\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n // Market selector state\n const [marketType, setMarketType] = useState<MarketType>(defaultMarketType);\n const [selectedMarket, setSelectedMarket] = useState<MarketOption | null>(null);\n const [minTvl, setMinTvl] = useState(defaultMinTvl);\n\n // Earnings modal state\n const [isEarningsModalOpen, setIsEarningsModalOpen] = useState(false);\n\n // Reset selected market when chain changes (markets are chain-specific)\n useEffect(() => {\n setSelectedMarket(null);\n }, [CHAIN_ID]);\n\n // Ensure the wallet is on the correct chain before signing\n const ensureCorrectChain = useCallback(async () => {\n const targetChainId = EVM_CHAIN_IDS[CHAIN_ID];\n if (!targetChainId) return;\n if (walletChainId !== undefined && walletChainId !== targetChainId) {\n if (!switchChain) {\n throw new Error(`Please switch your wallet to ${CHAIN_ID} (chain ${targetChainId})`);\n }\n await switchChain(targetChainId);\n }\n }, [walletChainId, switchChain, CHAIN_ID]);\n\n // Available tokens for funding (only EIP-2612 permit-compatible tokens for gasless transfers)\n // WETH and ETH don't support permits, so users need to swap to USDC first externally\n const FUND_TOKENS = ['USDC', 'DAI'];\n\n // Fetch wallet (EOA) balances for the selected token\n const walletBalanceQuery = useQuery({\n queryKey: ['walletBalance', CHAIN_ID, address, fundToken],\n queryFn: async () => {\n if (!address) return null;\n try {\n const response = await fetch(\n `/api/compass/token/balance?address=${address}&chain=${CHAIN_ID}&token=${fundToken}`\n );\n if (!response.ok) return null;\n const data = await response.json();\n return data;\n } catch {\n return null;\n }\n },\n enabled: !!address && isFundModalOpen,\n staleTime: 15 * 1000,\n });\n\n const walletBalance = walletBalanceQuery.data?.balance || '0';\n\n // Fetch earn account balances\n const balancesQuery = useQuery({\n queryKey: ['earnAccountBalances', CHAIN_ID, address],\n queryFn: async () => {\n if (!address) return null;\n const response = await fetch(\n `/api/compass/earn-account/balances?owner=${address}&chain=${CHAIN_ID}`\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 // Get balance for selected token from earn account (for deposits)\n const selectedTokenBalance = balancesQuery.data?.balances?.[selectedToken]?.balance || '0';\n // Total USD value of ERC-20 tokens only (sum from filtered balances, not API total which includes protocol tokens)\n const earnAccountTotalUsd = Object.values(balancesQuery.data?.balances || {})\n .reduce((sum, b) => sum + parseFloat(b.usdValue || '0'), 0)\n .toString();\n\n // Fetch all user positions (all protocols)\n // APY and PnL are included directly in the positions API response\n const positionQuery = useQuery({\n queryKey: ['earnAccountAllPositions', CHAIN_ID, address],\n queryFn: async () => {\n if (!address) return [];\n\n const response = await fetch(`/api/compass/positions?chain=${CHAIN_ID}&owner=${address}`);\n if (!response.ok) return [];\n\n const data = await response.json();\n // Server returns { positions: [...] } with hydrated APY and PnL\n return data.positions || [];\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const allPositionData = positionQuery.data || [];\n\n // Calculate total balance (all tokens in earn account + all deposited across protocols)\n const totalDepositedBalance = allPositionData.reduce((sum: number, p: any) => sum + parseFloat(p.balanceUsd || '0'), 0);\n const earnAccountTotal = parseFloat(earnAccountTotalUsd);\n\n\n // Fetch all Aave markets for the MarketSelector\n const aaveMarketsQuery = useQuery({\n queryKey: ['allAaveMarkets', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/aave/markets?chain=${CHAIN_ID}`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const marketsDict = data.markets || {};\n\n const markets: MarketOption[] = [];\n for (const [symbol, marketData] of Object.entries(marketsDict)) {\n const chainData = (marketData as any).chains?.[CHAIN_ID];\n if (chainData) {\n markets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: symbol,\n apy: parseFloat(chainData.supplyApy || '0'),\n tvl: parseFloat(chainData.totalSupplyUsd || '0'),\n type: 'aave',\n underlyingToken: symbol,\n });\n }\n }\n return markets.sort((a, b) => b.apy - a.apy);\n },\n staleTime: 60 * 1000,\n });\n\n // Fetch Pendle markets\n const pendleMarketsQuery = useQuery({\n queryKey: ['pendleMarkets', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/pendle/markets?chain=${CHAIN_ID}&limit=200&orderBy=implied_apy&direction=desc`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const marketsList = data.markets || [];\n\n // Helper to parse expiry timestamp (handles both seconds and milliseconds)\n const parseExpiry = (expiry: any): string | undefined => {\n if (!expiry || expiry === 0) return undefined;\n const timestamp = typeof expiry === 'number' ? expiry : parseInt(expiry, 10);\n if (isNaN(timestamp) || timestamp <= 0) return undefined;\n // If timestamp is in seconds (before year 3000 in seconds = 32503680000), convert to ms\n const ms = timestamp < 32503680000 ? timestamp * 1000 : timestamp;\n const date = new Date(ms);\n // Validate the date is reasonable (after year 2000)\n if (date.getFullYear() < 2000) return undefined;\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n };\n\n return marketsList.map((m: any) => {\n const expiryStr = parseExpiry(m.expiry);\n return {\n id: `pendle-${m.marketAddress || m.address}`,\n name: m.name || `${m.underlyingSymbol || 'PT'}${expiryStr ? ` ${expiryStr}` : ''}`,\n apy: parseFloat(m.impliedApy || m.apy || '0'),\n tvl: parseFloat(m.tvlUsd || m.tvl || '0'),\n type: 'pendle' as const,\n underlyingToken: (m.underlyingSymbol || 'UNKNOWN').toUpperCase(),\n expiry: expiryStr,\n marketAddress: m.marketAddress || m.address,\n };\n });\n },\n staleTime: 60 * 1000,\n });\n\n // Fetch Morpho vaults\n const vaultsQuery = useQuery({\n queryKey: ['morphoVaults', CHAIN_ID],\n queryFn: async (): Promise<MarketOption[]> => {\n const response = await fetch(`/api/compass/vaults?chain=${CHAIN_ID}&limit=200&orderBy=apy_7d&direction=desc`);\n if (!response.ok) return [];\n\n const data = await response.json();\n const vaultsList = data.vaults || [];\n\n return vaultsList.map((v: any) => ({\n id: `vault-${v.vaultAddress || v.address}`,\n name: v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`,\n apy: parseFloat(v.apy7d || v.apy || '0'),\n tvl: parseFloat(v.tvlUsd || v.tvl || '0'),\n type: 'vaults' as const,\n underlyingToken: (v.assetSymbol || 'UNKNOWN').toUpperCase(),\n curator: v.curatorName || v.curator,\n vaultAddress: v.vaultAddress || v.address,\n }));\n },\n staleTime: 60 * 1000,\n });\n\n // Combine all markets\n const allMarkets: MarketOption[] = [\n ...(aaveMarketsQuery.data || []),\n ...(pendleMarketsQuery.data || []),\n ...(vaultsQuery.data || []),\n ];\n\n const isMarketsLoading = aaveMarketsQuery.isLoading || pendleMarketsQuery.isLoading || vaultsQuery.isLoading;\n\n // Helper: build venue params for the manage API from a selected market\n const buildVenueParamsFromMarket = (market: MarketOption) => {\n switch (market.type) {\n case 'aave':\n return { venueType: 'AAVE' as const, token: market.underlyingToken };\n case 'vaults':\n return { venueType: 'VAULT' as const, token: market.underlyingToken, vaultAddress: market.vaultAddress };\n case 'pendle':\n return { venueType: 'PENDLE_PT' as const, token: market.underlyingToken, marketAddress: market.marketAddress, maxSlippagePercent: 1.0 };\n }\n };\n\n // Helper: build venue object for bundle actions\n const buildVenueFromMarket = (market: MarketOption) => {\n switch (market.type) {\n case 'aave':\n return { type: 'AAVE' as const, token: market.underlyingToken };\n case 'vaults':\n return { type: 'VAULT' as const, vaultAddress: market.vaultAddress };\n case 'pendle':\n return { type: 'PENDLE_PT' as const, marketAddress: market.marketAddress, token: market.underlyingToken, maxSlippagePercent: 1.0 };\n }\n };\n\n // Helper: find position balance for a selected market\n const findPositionForMarket = (positions: any[], market: MarketOption): any | undefined => {\n switch (market.type) {\n case 'aave':\n return positions.find((p: any) => p.protocol === 'aave' && p.symbol === market.underlyingToken);\n case 'vaults':\n return positions.find((p: any) => p.protocol === 'vaults' && market.vaultAddress && p.vaultAddress === market.vaultAddress);\n case 'pendle':\n return positions.find((p: any) => p.protocol === 'pendle' && market.marketAddress && p.marketAddress === market.marketAddress);\n }\n };\n\n // Build positions from hydrated server data (APY + PnL already populated)\n const positions: Position[] = allPositionData.map((pos: any, index: number) => {\n return {\n id: `pos-${index}`,\n marketType: pos.protocol as MarketType,\n marketName: pos.name,\n marketId: `${pos.protocol}-${index}`,\n amount: parseFloat(pos.balance || '0'),\n token: pos.symbol,\n apy: pos.apy || 0,\n entryDate: pos.entryTimestamp || new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString(),\n performance: parseFloat(pos.pnl?.totalPnl || '0'),\n pnl: pos.pnl ? {\n unrealizedPnl: parseFloat(pos.pnl.unrealizedPnl || '0'),\n realizedPnl: parseFloat(pos.pnl.realizedPnl || '0'),\n totalPnl: parseFloat(pos.pnl.totalPnl || '0'),\n } : undefined,\n transactions: [\n ...(pos.deposits || []).map((d: any, i: number) => ({\n id: `dep-${index}-${i}`,\n date: d.timestamp || new Date(Date.now() - (i + 1) * 7 * 24 * 60 * 60 * 1000).toISOString(),\n type: 'deposit' as const,\n amount: parseFloat(d.amount || '0'),\n token: pos.symbol,\n txHash: d.txHash || '',\n })),\n ...(pos.withdrawals || []).map((w: any, i: number) => ({\n id: `wit-${index}-${i}`,\n date: w.timestamp || new Date(Date.now() - i * 3 * 24 * 60 * 60 * 1000).toISOString(),\n type: 'withdraw' as const,\n amount: parseFloat(w.amount || '0'),\n token: pos.symbol,\n txHash: w.txHash || '',\n })),\n ].sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()),\n };\n });\n\n const totalEarned = positions.reduce((sum, p) => sum + p.performance, 0);\n\n // Check if we need to swap for deposit/withdraw actions\n const needsActionSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n // Check if we need to swap after transferring (for fund modal)\n const needsFundSwap = fundToken !== 'USDC';\n\n // Helper to check and get approval if needed\n const ensureTokenApproval = async (token: string): Promise<void> => {\n setFundStatus(`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: CHAIN_ID,\n token: token,\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 already approved, we're done\n if (approvalData.approved) {\n return;\n }\n\n // If requires transaction-based approval (non-EIP2612 tokens like WETH)\n if (approvalData.requiresTransaction && approvalData.transaction) {\n setFundStatus(`Approving ${token} (requires on-chain transaction)...`);\n\n // Execute the approval transaction via gas sponsor\n const executeApprovalResponse = await fetch('/api/compass/approval/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n transaction: approvalData.transaction,\n }),\n });\n\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n\n return;\n }\n\n // Need to sign permit for approval (EIP-2612 tokens)\n if (approvalData.eip712) {\n setFundStatus(`Please approve ${token} for transfers...`);\n await ensureCorrectChain();\n\n const approvalSignature = await signTypedData!({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setFundStatus(`Setting up ${token} 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: CHAIN_ID,\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 return;\n }\n\n throw new Error('Unable to approve token for transfers');\n };\n\n // Handle funding the earn account from wallet (with optional swap)\n const handleFund = useCallback(async () => {\n if (!address || !fundAmount || !signTypedData) return;\n\n setIsFunding(true);\n setFundError(null);\n\n try {\n // Step 1: Ensure token is approved for transfers\n await ensureTokenApproval(fundToken);\n\n if (needsFundSwap) {\n // Two-step process: Transfer token to Earn Account, then Swap to USDC\n\n // Step 2: Transfer token from wallet (EOA) to Earn Account\n setFundStatus(`Preparing ${fundToken} transfer...`);\n\n const transferPrepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n token: fundToken,\n amount: fundAmount,\n action: 'DEPOSIT',\n }),\n });\n\n if (!transferPrepareResponse.ok) {\n const errData = await transferPrepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transfer');\n }\n\n const transferData = await transferPrepareResponse.json();\n\n setFundStatus('Please sign the transfer...');\n await ensureCorrectChain();\n\n const transferSignature = await signTypedData({\n domain: transferData.domain,\n types: transferData.normalizedTypes,\n primaryType: transferData.primaryType,\n message: transferData.message,\n });\n\n setFundStatus(`Transferring ${fundToken}...`);\n\n const transferExecuteResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: transferData.eip712,\n signature: transferSignature,\n }),\n });\n\n if (!transferExecuteResponse.ok) {\n const errData = await transferExecuteResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n\n // Step 3: Swap token to USDC inside the Earn Account\n setFundStatus(`Swapping ${fundToken} to USDC...`);\n\n // Prepare swap bundle\n const swapBundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: fundToken,\n tokenOut: 'USDC',\n amountIn: fundAmount,\n maxSlippagePercent: 1.0,\n },\n },\n ];\n\n const swapPrepareResponse = await fetch('/api/compass/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n actions: swapBundleActions,\n }),\n });\n\n if (!swapPrepareResponse.ok) {\n const errData = await swapPrepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare swap');\n }\n\n const { eip712, normalizedTypes, domain, message } = await swapPrepareResponse.json();\n\n setFundStatus('Please sign the swap...');\n await ensureCorrectChain();\n\n const swapSignature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setFundStatus('Executing swap...');\n\n const swapExecuteResponse = 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: swapSignature,\n chain: CHAIN_ID,\n }),\n });\n\n if (!swapExecuteResponse.ok) {\n const errData = await swapExecuteResponse.json();\n throw new Error(errData.error || 'Swap failed');\n }\n\n } else {\n // Direct USDC transfer (no swap needed)\n setFundStatus('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: CHAIN_ID,\n token: 'USDC',\n amount: fundAmount,\n action: 'DEPOSIT',\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 setFundStatus('Please sign the transfer...');\n await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n setFundStatus('Transferring funds...');\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: CHAIN_ID,\n eip712: prepareData.eip712,\n signature: signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transfer failed');\n }\n }\n\n setFundStatus('Success! Funds added to savings.');\n setFundAmount('');\n\n // Refresh balances\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n balancesQuery.refetch();\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n setTimeout(() => {\n setIsFundModalOpen(false);\n setFundStatus('');\n setFundToken('USDC');\n }, 2000);\n } catch (err) {\n setFundError(err instanceof Error ? err.message : 'Transfer failed');\n setFundStatus('');\n } finally {\n setIsFunding(false);\n }\n }, [address, fundAmount, fundToken, needsFundSwap, signTypedData, ensureCorrectChain, queryClient, balancesQuery, CHAIN_ID]);\n\n const handleAction = async () => {\n if (!selectedMarket || !amount || parseFloat(amount) <= 0 || !address || !signTypedData) return;\n\n setIsProcessing(true);\n setError(null);\n const isDeposit = activeTab === 'deposit';\n const underlyingToken = selectedMarket.underlyingToken;\n\n try {\n let txHash: string;\n\n if (needsActionSwap) {\n // Use bundle API for swap + deposit or withdraw + swap\n if (isDeposit) {\n // Swap selectedToken to market's underlying token, then deposit\n setStatusMessage(`Getting swap quote...`);\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${CHAIN_ID}&tokenIn=${selectedToken}&tokenOut=${underlyingToken}&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 setStatusMessage(`Preparing swap and deposit...`);\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: underlyingToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue: buildVenueFromMarket(selectedMarket),\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: CHAIN_ID,\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 await ensureCorrectChain();\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: CHAIN_ID,\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 result = await executeResponse.json();\n txHash = result.txHash;\n\n } else {\n // Withdraw from market's venue, then swap underlying token to selectedToken\n setStatusMessage(`Preparing withdraw and swap...`);\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'WITHDRAW',\n venue: buildVenueFromMarket(selectedMarket),\n amount: amount,\n },\n },\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: underlyingToken,\n tokenOut: selectedToken,\n amountIn: amount,\n maxSlippagePercent: 1.0,\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: CHAIN_ID,\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 await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setStatusMessage('Executing withdraw and swap...');\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: CHAIN_ID,\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 result = await executeResponse.json();\n txHash = result.txHash;\n }\n } else {\n // Direct deposit/withdraw (no swap needed) - token matches market's underlying\n setStatusMessage(isDeposit ? 'Preparing deposit...' : 'Preparing withdrawal...');\n\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 venueParams = buildVenueParamsFromMarket(selectedMarket);\n\n const prepareResponse = await fetch(prepareEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n ...venueParams,\n amount: amount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare transaction');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStatusMessage('Please sign the transaction...');\n await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: 'SafeTx',\n message: prepareData.message,\n });\n\n setStatusMessage('Executing transaction...');\n\n const executeResponse = await fetch(executeEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: prepareData.eip712,\n signature: signature,\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Transaction failed');\n }\n\n const result = await executeResponse.json();\n txHash = result.txHash;\n }\n\n setStatusMessage('Transaction successful!');\n\n // Success - clear amount and refetch\n setAmount('');\n\n // Invalidate queries to refresh data\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n positionQuery.refetch();\n balancesQuery.refetch();\n\n // Events take time to be processed on-chain, so refetch positions after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, delay);\n }\n\n if (isDeposit) {\n onDeposit?.(selectedMarket, parseFloat(amount), txHash || '');\n } else {\n onWithdraw?.(selectedMarket, parseFloat(amount), txHash || '');\n }\n\n setTimeout(() => setStatusMessage(''), 3000);\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Transaction failed');\n setStatusMessage('');\n } finally {\n setIsProcessing(false);\n }\n };\n\n // For deposits: balance of selected token in earn account\n // For withdrawals: position balance in the selected market\n const selectedMarketPosition = selectedMarket ? findPositionForMarket(allPositionData, selectedMarket) : undefined;\n const maxAmount = activeTab === 'deposit'\n ? parseFloat(selectedTokenBalance)\n : parseFloat(selectedMarketPosition?.balance || '0');\n\n const spacing = compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)';\n const gapSize = compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'calc(var(--compass-spacing-unit) * 1.5)';\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: gapSize, fontFamily: 'var(--compass-font-family)' }}>\n {/* Header */}\n {showHeader && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex flex-col\">\n <h2\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: 'var(--compass-font-size-subheading, 1.25rem)',\n }}\n >\n {title}\n </h2>\n </div>\n <WalletStatus compact />\n </div>\n )}\n\n {/* Chain Selector */}\n <ChainSwitcher />\n\n <EarnAccountGuard>\n {/* Main Balance Card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: compact ? 'var(--compass-spacing-card)' : 'calc(var(--compass-spacing-card) * 1.25)',\n }}\n >\n {/* Total Balance Section - Clickable to show breakdown */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n className=\"flex flex-col text-left w-full transition-opacity hover:opacity-80\"\n style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Total Balance\n </span>\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </div>\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '2rem' : '2.5rem',\n lineHeight: '1',\n }}\n >\n {formatCurrency(earnAccountTotal)}\n </span>\n </button>\n\n {/* Divider */}\n <div\n style={{\n height: '1px',\n backgroundColor: 'var(--compass-color-border)',\n margin: compact ? 'var(--compass-spacing-card) 0' : 'calc(var(--compass-spacing-card) * 1.25) 0',\n }}\n />\n\n {/* Earning Interest + APY Row - Clickable to show positions */}\n <button\n onClick={() => positions.length > 0 && setIsEarningsModalOpen(true)}\n disabled={positions.length === 0}\n className=\"flex items-center justify-between w-full text-left transition-opacity hover:opacity-80 disabled:hover:opacity-100 disabled:cursor-default\"\n >\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Earning interest{positions.length > 1 ? ` · ${positions.length} positions` : ''}\n </span>\n {positions.length > 0 && (\n <ChevronRight size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n )}\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1rem' : '1.125rem',\n }}\n >\n {formatCurrency(totalDepositedBalance)}\n </span>\n {positions.length > 0 && totalEarned !== 0 && (\n <span\n className=\"text-sm font-medium\"\n style={{\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {totalEarned >= 0 ? '+' : ''}{formatCurrency(totalEarned)}\n </span>\n )}\n </div>\n </div>\n\n </button>\n </div>\n\n {/* Market Selector */}\n <MarketSelector\n markets={allMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={setSelectedMarket}\n marketType={marketType}\n onMarketTypeChange={(type) => {\n setMarketType(type);\n setSelectedMarket(null);\n }}\n minTvl={minTvl}\n onMinTvlChange={setMinTvl}\n isLoading={isMarketsLoading}\n />\n\n {/* Action Tabs - Deposit/Withdraw Toggle */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\n <button\n onClick={() => { setActiveTab('deposit'); setSelectedToken('USDC'); setError(null); }}\n className=\"flex-1 flex items-center justify-center font-medium transition-all\"\n style={{\n backgroundColor: activeTab === 'deposit' ? 'var(--compass-color-surface-elevated, var(--compass-color-surface))' : 'transparent',\n color: activeTab === 'deposit' ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n border: activeTab === 'deposit' ? '1px solid var(--compass-color-border)' : '1px solid transparent',\n }}\n >\n <Plus size={compact ? 16 : 18} />\n Deposit\n </button>\n <button\n onClick={() => { setActiveTab('withdraw'); setSelectedToken('USDC'); setError(null); }}\n className=\"flex-1 flex items-center justify-center font-medium transition-all\"\n style={{\n backgroundColor: activeTab === 'withdraw' ? 'var(--compass-color-surface-elevated, var(--compass-color-surface))' : 'transparent',\n color: activeTab === 'withdraw' ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n border: activeTab === 'withdraw' ? '1px solid var(--compass-color-border)' : '1px solid transparent',\n }}\n >\n <Minus size={compact ? 16 : 18} />\n Withdraw\n </button>\n </div>\n\n {/* Amount Input with Token Selector */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\n <div\n className=\"flex items-center flex-wrap\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: spacing,\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); setError(null); }}\n placeholder=\"0.00\"\n disabled={isProcessing}\n className=\"flex-1 font-medium bg-transparent outline-none\"\n style={{ color: 'var(--compass-color-text)', fontSize: compact ? '1.25rem' : '1.5rem', minWidth: 0 }}\n />\n {/* Token Dropdown */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={isProcessing}\n className=\"flex items-center font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-surface-elevated, var(--compass-color-background))',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n fontSize: compact ? '0.875rem' : '1rem',\n }}\n >\n {selectedToken}\n <ChevronDown size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-1 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 4px 12px rgba(0,0,0,0.15)',\n minWidth: '100px',\n }}\n >\n {SUPPORTED_TOKENS.map((token) => (\n <button\n key={token}\n onClick={() => {\n setSelectedToken(token);\n setIsTokenDropdownOpen(false);\n setError(null);\n }}\n className=\"w-full text-left font-medium transition-colors\"\n style={{\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n color: token === selectedToken ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === selectedToken ? 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))' : 'transparent',\n fontSize: compact ? '0.875rem' : '1rem',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n <button\n onClick={() => setAmount(maxAmount.toString())}\n disabled={isProcessing}\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{\n backgroundColor: 'var(--compass-color-surface-elevated, var(--compass-color-background))',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n flexShrink: 0,\n }}\n >\n MAX\n </button>\n </div>\n\n {/* Swap Indicator */}\n {needsActionSwap && (\n <div\n className=\"flex items-center text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <ArrowRight size={14} />\n <span>\n {activeTab === 'deposit'\n ? `Swaps ${selectedToken} to ${selectedMarket?.underlyingToken}, then deposits`\n : `Withdraws ${selectedMarket?.underlyingToken}, then swaps to ${selectedToken}`}\n </span>\n </div>\n )}\n\n <div className=\"flex justify-between\" style={{ padding: '0 calc(var(--compass-spacing-unit) * 0.25)' }}>\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {activeTab === 'deposit' ? `Available ${selectedToken}` : 'Available to withdraw'}\n </span>\n <span className=\"text-sm font-medium\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatAmount(maxAmount)} {activeTab === 'deposit' ? selectedToken : (selectedMarket?.underlyingToken || '—')}\n </span>\n </div>\n </div>\n\n {/* Error Display */}\n {error && (\n <div\n className=\"text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {error}\n </div>\n )}\n\n {/* Action Button */}\n <button\n onClick={handleAction}\n disabled={isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount}\n className=\"w-full font-semibold transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n fontSize: compact ? '0.875rem' : '1rem',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isProcessing ? (\n <span className=\"flex items-center justify-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <Loader2 size={compact ? 16 : 20} className=\"animate-spin\" />\n Processing...\n </span>\n ) : !selectedMarket ? (\n 'Select a market'\n ) : needsActionSwap ? (\n activeTab === 'deposit' ? `Swap & Deposit` : `Withdraw & Swap`\n ) : (\n activeTab === 'deposit' ? 'Deposit funds' : 'Withdraw funds'\n )}\n </button>\n\n {/* Status Message */}\n {statusMessage && !error && (\n <div\n className=\"text-sm text-center\"\n style={{\n backgroundColor: statusMessage.includes('successful')\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: statusMessage.includes('successful')\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n {statusMessage}\n </div>\n )}\n\n {/* Trust Badges */}\n {showTrustBadge && (\n <div\n className=\"flex items-center justify-center\"\n style={{\n gap: 'calc(var(--compass-spacing-unit) * 1)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.5)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <Shield size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Non-custodial\n </span>\n </div>\n <span style={{ color: 'var(--compass-color-border)' }}>|</span>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <CheckCircle size={compact ? 14 : 16} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Audited protocols\n </span>\n </div>\n </div>\n )}\n\n {/* Top Up Button */}\n {showTopUpButton && (\n <button\n onClick={() => setIsFundModalOpen(true)}\n className=\"w-full font-medium flex items-center justify-center transition-all\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: compact ? 'calc(var(--compass-spacing-unit) * 0.75)' : 'var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <Wallet size={compact ? 16 : 18} />\n Top Up\n </button>\n )}\n </EarnAccountGuard>\n\n {/* Fund Modal */}\n <ActionModal\n isOpen={isFundModalOpen}\n onClose={() => {\n setIsFundModalOpen(false);\n setFundAmount('');\n setFundToken('USDC');\n setFundError(null);\n setFundStatus('');\n }}\n title=\"Transfer to Savings\"\n >\n <div className=\"flex flex-col gap-4\">\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Transfer tokens from your wallet to your savings account.\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Have ETH? Swap to USDC on Uniswap first, then transfer here.\n </p>\n\n {/* Token Selector */}\n <div>\n <label\n className=\"text-sm font-medium mb-2 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n From Token\n </label>\n <div\n className=\"flex gap-2 p-1 rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n {FUND_TOKENS.map((token) => (\n <button\n key={token}\n onClick={() => { setFundToken(token); setFundError(null); }}\n disabled={isFunding}\n className=\"flex-1 py-2 rounded-lg text-sm font-medium transition-all\"\n style={{\n backgroundColor: fundToken === token ? 'var(--compass-color-primary)' : 'transparent',\n color: fundToken === token ? 'white' : 'var(--compass-color-text-secondary)',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n </div>\n\n {/* Swap Indicator */}\n {needsFundSwap && (\n <div\n className=\"flex items-center gap-2 p-3 rounded-xl text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n }}\n >\n <span>→</span>\n <span>Will swap {fundToken} to USDC, then transfer to savings</span>\n </div>\n )}\n\n {/* Amount Input */}\n <div className=\"flex flex-col gap-2\">\n <div\n className=\"flex items-center p-4 rounded-xl\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <input\n type=\"number\"\n value={fundAmount}\n onChange={(e) => { setFundAmount(e.target.value); setFundError(null); }}\n placeholder=\"0.00\"\n disabled={isFunding}\n className=\"flex-1 text-2xl font-bold bg-transparent outline-none\"\n style={{ color: 'var(--compass-color-text)' }}\n />\n <button\n onClick={() => setFundAmount(walletBalance)}\n disabled={isFunding || !walletBalance || walletBalance === '0'}\n className=\"text-sm font-medium px-3 py-1 rounded-lg mr-2 transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: 'var(--compass-color-primary)',\n }}\n >\n Max\n </button>\n <span\n className=\"text-sm font-medium px-3 py-1 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)'\n }}\n >\n {fundToken}\n </span>\n </div>\n\n {/* Wallet Balance Display */}\n <div className=\"flex justify-between px-1\">\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Available in wallet\n </span>\n <span className=\"text-sm font-medium\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {walletBalanceQuery.isLoading ? (\n <Loader2 size={14} className=\"animate-spin inline\" />\n ) : (\n `${formatAmount(walletBalance)} ${fundToken}`\n )}\n </span>\n </div>\n </div>\n\n {/* Fund Error */}\n {fundError && (\n <div\n className=\"p-3 rounded-xl text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n }}\n >\n {fundError}\n </div>\n )}\n\n {/* Fund Status */}\n {fundStatus && !fundError && (\n <div\n className=\"p-3 rounded-xl text-sm text-center\"\n style={{\n backgroundColor: fundStatus.includes('successful')\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: fundStatus.includes('successful')\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n }}\n >\n {fundStatus}\n </div>\n )}\n\n {/* Fund Button */}\n <button\n onClick={handleFund}\n disabled={isFunding || !fundAmount || parseFloat(fundAmount) <= 0}\n className=\"w-full py-4 rounded-xl font-semibold text-lg transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n }}\n >\n {isFunding ? (\n <span className=\"flex items-center justify-center gap-2\">\n <Loader2 size={20} className=\"animate-spin\" />\n Processing...\n </span>\n ) : (\n <span className=\"flex items-center justify-center gap-2\">\n <ArrowDownLeft size={20} />\n {needsFundSwap ? `Swap ${fundToken} & Transfer` : 'Transfer to Savings'}\n </span>\n )}\n </button>\n\n <p\n className=\"text-xs text-center\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Gas fees are sponsored\n </p>\n </div>\n </ActionModal>\n\n {/* Balances Breakdown Modal */}\n <ActionModal\n isOpen={isBalancesModalOpen}\n onClose={() => setIsBalancesModalOpen(false)}\n title=\"Balance Breakdown\"\n >\n <div className=\"flex flex-col gap-3\">\n {/* Earn Account Balances */}\n {balancesQuery.data?.balances && Object.keys(balancesQuery.data.balances).length > 0 ? (\n <>\n <div className=\"flex flex-col gap-2\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available in Account\n </span>\n {Object.entries(balancesQuery.data.balances).map(([symbol, data]) => (\n <div\n key={symbol}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-mono font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {formatAmount(data.balance)}\n </span>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {formatCurrency(data.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n <div\n className=\"flex items-center justify-between pt-3 mt-2\"\n style={{ borderTop: '2px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)' }}>\n Total\n </span>\n <span\n className=\"font-bold text-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatCurrency(earnAccountTotalUsd)}\n </span>\n </div>\n </>\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No tokens in account\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Earnings Modal */}\n <EarningsModal\n isOpen={isEarningsModalOpen}\n onClose={() => setIsEarningsModalOpen(false)}\n positions={positions}\n totalEarned={totalEarned}\n isLoading={positionQuery.isLoading}\n />\n </div>\n );\n}\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\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 { 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 params = new URLSearchParams({\n chain: chainId,\n orderBy,\n direction: 'desc',\n limit: '100',\n ...(underlyingSymbol && { underlyingSymbol }),\n });\n\n const response = await fetch(`/api/compass/pendle/markets?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch Pendle markets');\n }\n\n const data = await response.json();\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 = ((data 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\n const params = new URLSearchParams({\n chain: chainId,\n owner: address,\n });\n\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) {\n throw new Error('Failed to fetch positions');\n }\n\n const data = await response.json();\n\n return ((data 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header with Chain Switcher and Wallet Status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <div className=\"flex\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {showSearch && (\n <div\n className=\"flex-1 flex items-center border\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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=\"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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\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=\"border text-sm flex items-center\"\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 borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-input)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\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 border\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\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 border text-sm bg-transparent\"\n style={{\n borderColor: 'var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-sm)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n }}\n />\n </div>\n {minTvlFilter && (\n <button\n onClick={() => setMinTvlFilter(undefined)}\n className=\"text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25) calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-fast)',\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\" style={{ padding: 'calc(var(--compass-spacing-unit) * 3) 0' }}>\n <Loader2 size={24} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)' }} />\n </div>\n ) : isError ? (\n <div\n className=\"text-center\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'var(--compass-spacing-card)',\n }}\n >\n Failed to load Pendle markets. Please try again.\n </div>\n ) : filteredMarkets.length === 0 ? (\n <div\n className=\"text-center\"\n style={{ color: 'var(--compass-color-text-secondary)', padding: 'calc(var(--compass-spacing-unit) * 2)' }}\n >\n No active markets found\n </div>\n ) : (\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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 border 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 borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'var(--compass-spacing-card)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n <div className=\"flex items-start justify-between\">\n {/* Left: Market Info */}\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\n className=\"flex items-center justify-between border-t\"\n style={{\n borderColor: 'var(--compass-color-border)',\n marginTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n paddingTop: 'calc(var(--compass-spacing-unit) * 0.75)',\n }}\n >\n <div className=\"flex\" style={{ gap: 'var(--compass-spacing-card)' }}>\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\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.25)' }}>\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\" style={{ gap: 'var(--compass-spacing-card)' }}>\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 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","export type SwapLayout = 'compact' | 'full';\n\nexport interface SwapQuote {\n inputAmount: string;\n outputAmount: string;\n rate: string;\n}\n\n/** Default tokens available for swapping */\nexport const DEFAULT_SWAP_TOKENS = ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'] as const;\n\n/**\n * Props for the SwapWidget.\n *\n * Sensible defaults are applied automatically:\n * - Full layout for maximum usability\n * - ETH → USDC as default pair (most common swap)\n * - Reverse button enabled for easy direction switching\n * - Popular DeFi tokens pre-configured\n */\nexport interface SwapWidgetProps {\n /** Widget layout size @default 'full' */\n layout?: SwapLayout;\n /** Initial \"from\" token @default 'ETH' */\n defaultFromToken?: string;\n /** Initial \"to\" token @default 'USDC' */\n defaultToToken?: string;\n /** Tokens available for selection @default ['USDC', 'ETH', 'WETH', 'WBTC', 'DAI', 'USDT', 'AUSD', 'SBC'] */\n allowedTokens?: string[];\n /** Show swap direction button @default true */\n showReverseButton?: boolean;\n /** Show settings panel @default false */\n showSettings?: boolean;\n /** Callback after successful swap */\n onSwapSuccess?: (fromToken: string, toToken: string, fromAmount: string, toAmount: string, txHash: string) => void;\n /** Callback on swap error */\n onSwapError?: (error: Error) => void;\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';\nimport { DEFAULT_SWAP_TOKENS } from './types';\n\nexport function SwapWidget({\n layout = 'full',\n defaultFromToken = 'ETH',\n defaultToToken = 'USDC',\n allowedTokens = [...DEFAULT_SWAP_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 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\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header - always show chain switcher and wallet status */}\n <div className=\"flex items-center justify-between flex-wrap\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <ChainSwitcher />\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <EarnAccountBalance compact />\n <WalletStatus compact />\n </div>\n </div>\n\n <div className=\"flex flex-col\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n {/* From Token */}\n <div className=\"border relative\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-xl)', fontFamily: 'var(--compass-font-family)', padding: 'var(--compass-spacing-card)' }}>\n <div className=\"flex items-center justify-between\" style={{ marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>From</span>\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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=\"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)', borderRadius: 'var(--compass-border-radius-lg)', padding: 'var(--compass-spacing-input)' }}\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 relative z-10\" style={{ margin: 'calc(var(--compass-spacing-unit) * -0.25) 0' }}>\n <button\n onClick={handleReverse}\n className=\"border hover:opacity-80\"\n style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-full)', padding: 'calc(var(--compass-spacing-unit) * 0.5)', transition: 'var(--compass-transition-normal)' }}\n >\n <ArrowDownUp size={16} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n )}\n\n {/* To Token */}\n <div className=\"border\" style={{ backgroundColor: 'var(--compass-color-surface)', borderColor: 'var(--compass-color-border)', borderRadius: 'var(--compass-border-radius-xl)', fontFamily: 'var(--compass-font-family)', padding: 'var(--compass-spacing-card)' }}>\n <div className=\"flex items-center justify-between\" style={{ marginBottom: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>To</span>\n </div>\n <div className=\"flex items-center\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.75)' }}>\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=\"border text-sm font-medium cursor-pointer\"\n style={{ backgroundColor: 'var(--compass-color-background)', borderColor: 'var(--compass-color-border)', color: 'var(--compass-color-text)', borderRadius: 'var(--compass-border-radius-lg)', padding: 'var(--compass-spacing-input)' }}\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 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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 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 borderRadius: 'var(--compass-border-radius-lg)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\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\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 1.5) var(--compass-spacing-card)',\n gap: 'calc(var(--compass-spacing-unit) * 0.75)',\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 font-medium flex items-center justify-center disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.75)',\n gap: 'calc(var(--compass-spacing-unit) * 0.5)',\n transition: 'var(--compass-transition-normal)',\n }}\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 { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableApi } from '../../contexts/ApiContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { VenuePositions, Position, VenueType } from './types';\n\n// Get earliest deposit timestamp from deposits array\nfunction getEarliestDepositTimestamp(deposits: { timestamp?: string }[]): string | undefined {\n if (deposits.length === 0) return undefined;\n const timestamps = deposits\n .map(d => d.timestamp)\n .filter((t): t is string => !!t);\n if (timestamps.length === 0) return undefined;\n return timestamps.sort()[0]; // ISO strings sort correctly\n}\n\nexport function usePositionsData() {\n const { client } = useEmbeddableApi();\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n\n const positionsQuery = useQuery({\n queryKey: ['allEarnPositions', chainId, address],\n queryFn: async (): Promise<VenuePositions[]> => {\n if (!address) return [];\n\n // Fetch all data in parallel\n const [positionsResponse, vaultsResponse, aaveResponse, pendleResponse] = await Promise.all([\n client.earn.earnPositions({\n chain: chainId as any,\n owner: address,\n } as any),\n client.earn.earnVaults({\n chain: chainId as any,\n limit: 200,\n } as any).catch(() => ({ vaults: [] })),\n client.earn.earnAaveMarkets({\n chain: chainId as any,\n } as any).catch(() => ({ markets: {} })),\n client.earn.earnPendleMarkets({\n chain: chainId as any,\n limit: 200,\n } as any).catch(() => ({ markets: [] })),\n ]);\n\n // Build vault metadata map\n const vaultsMeta = new Map<string, { name: string; assetSymbol: string; apy7d: string | null }>();\n const vaultsData = (vaultsResponse as any).vaults || [];\n for (const v of vaultsData) {\n if (v.vaultAddress) {\n vaultsMeta.set(v.vaultAddress.toLowerCase(), {\n name: v.name || 'Vault',\n assetSymbol: v.assetSymbol || 'TOKEN',\n apy7d: v.apy7d ?? null,\n });\n }\n }\n\n // Build Aave metadata map\n const aaveMeta = new Map<string, { symbol: string; supplyApy: string | null }>();\n const aaveMarketsDict = (aaveResponse as any).markets || {};\n for (const [symbol, tokenData] of Object.entries(aaveMarketsDict)) {\n const token = tokenData as any;\n const chainData = token.chains?.[chainId];\n if (chainData?.address) {\n aaveMeta.set(chainData.address.toLowerCase(), {\n symbol,\n supplyApy: chainData.supplyApy?.toString() ?? null,\n });\n }\n }\n\n // Build Pendle metadata map\n const pendleMeta = new Map<string, { name: string; underlyingSymbol: string; impliedApy: string | null }>();\n const pendleMarketsData = (pendleResponse as any).markets || [];\n for (const m of pendleMarketsData) {\n if (m.marketAddress) {\n pendleMeta.set(m.marketAddress.toLowerCase(), {\n name: m.ptName || `PT-${m.underlyingSymbol || 'Token'}`,\n underlyingSymbol: m.underlyingSymbol || 'PT',\n impliedApy: m.impliedApy?.toString() ?? null,\n });\n }\n }\n\n const venueMap = new Map<VenueType, Position[]>();\n\n // Process vault positions (Morpho) - use data from positions response\n // API returns: vault_name, underlying_symbol directly in positions\n const vaults = (positionsResponse as any).vaults || [];\n if (vaults.length > 0) {\n venueMap.set('morpho', vaults.map((v: any) => {\n const meta = vaultsMeta.get(v.vaultAddress?.toLowerCase());\n // Positions API has vaultName/vault_name and underlyingSymbol/underlying_symbol\n const vaultName = v.vaultName || v.vault_name || meta?.name || 'Vault';\n const symbol = v.underlyingSymbol || v.underlying_symbol || meta?.assetSymbol || 'TOKEN';\n return {\n id: v.vaultAddress,\n venue: 'morpho' as VenueType,\n venueName: 'Morpho Vaults',\n name: vaultName,\n assetSymbol: symbol,\n balance: v.balance || '0',\n balanceUsd: v.usdValue || v.usd_value || v.balanceUsd || '0',\n apy: meta?.apy7d ?? null,\n pnl: v.pnl ? {\n unrealizedPnl: v.pnl.unrealizedPnl || '0',\n realizedPnl: v.pnl.realizedPnl || '0',\n totalPnl: v.pnl.totalPnl || '0',\n totalDeposited: v.pnl.totalDeposited || '0',\n } : undefined,\n entryTimestamp: getEarliestDepositTimestamp(v.deposits || []),\n deposits: (v.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n timestamp: d.timestamp,\n })),\n withdrawals: (v.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Process Aave positions - API returns reserve_symbol directly\n const aavePositions = (positionsResponse as any).aave || [];\n if (aavePositions.length > 0) {\n venueMap.set('aave', aavePositions.map((a: any) => {\n const meta = aaveMeta.get(a.reserveAddress?.toLowerCase() || a.reserve_address?.toLowerCase());\n const symbol = a.reserveSymbol || a.reserve_symbol || meta?.symbol || 'TOKEN';\n return {\n id: a.reserveAddress || a.reserve_address || symbol,\n venue: 'aave' as VenueType,\n venueName: 'Aave V3',\n name: `${symbol} Supply`,\n assetSymbol: symbol,\n balance: a.balance || '0',\n balanceUsd: a.usdValue || a.usd_value || a.balanceUsd || '0',\n apy: meta?.supplyApy ?? null,\n pnl: a.pnl ? {\n unrealizedPnl: a.pnl.unrealizedPnl || '0',\n realizedPnl: a.pnl.realizedPnl || '0',\n totalPnl: a.pnl.totalPnl || '0',\n totalDeposited: a.pnl.totalDeposited || '0',\n } : undefined,\n entryTimestamp: getEarliestDepositTimestamp(a.deposits || []),\n deposits: (a.deposits || []).map((d: any) => ({\n amount: d.inputAmount || d.amount || '0',\n blockNumber: d.blockNumber || 0,\n txHash: d.transactionHash || d.txHash || '',\n timestamp: d.timestamp,\n })),\n withdrawals: (a.withdrawals || []).map((w: any) => ({\n amount: w.outputAmount || w.amount || '0',\n blockNumber: w.blockNumber || 0,\n txHash: w.transactionHash || w.txHash || '',\n timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Process Pendle positions - API returns underlying_symbol, pt_balance\n const pendlePositions = (positionsResponse as any).pendlePt || (positionsResponse as any).pendle_pt || [];\n if (pendlePositions.length > 0) {\n venueMap.set('pendle', pendlePositions.map((p: any) => {\n const marketAddr = p.marketAddress || p.market_address;\n const meta = pendleMeta.get(marketAddr?.toLowerCase());\n const symbol = p.underlyingSymbol || p.underlying_symbol || meta?.underlyingSymbol || 'PT';\n return {\n id: marketAddr || p.ptAddress || p.pt_address,\n venue: 'pendle' as VenueType,\n venueName: 'Pendle',\n name: meta?.name || `PT-${symbol}`,\n assetSymbol: symbol,\n balance: p.ptBalance || p.pt_balance || p.balance || '0',\n balanceUsd: p.usdValue || p.usd_value || p.balanceUsd || '0',\n apy: meta?.impliedApy ?? null,\n expiry: p.expiry || undefined,\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 entryTimestamp: getEarliestDepositTimestamp(p.deposits || []),\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 timestamp: d.timestamp,\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 timestamp: w.timestamp,\n })),\n };\n }));\n }\n\n // Convert to array of VenuePositions\n const result: VenuePositions[] = [];\n\n for (const [venue, positions] of venueMap) {\n if (positions.length > 0) {\n const totalBalanceUsd = positions.reduce(\n (sum, p) => sum + parseFloat(p.balanceUsd || '0'),\n 0\n );\n result.push({\n venue,\n venueName: positions[0].venueName,\n positions,\n totalBalanceUsd: totalBalanceUsd.toString(),\n });\n }\n }\n\n return result;\n },\n enabled: !!address,\n staleTime: 30 * 1000,\n });\n\n const totalPositions = positionsQuery.data?.reduce(\n (sum, v) => sum + v.positions.length,\n 0\n ) || 0;\n\n const totalBalanceUsd = positionsQuery.data?.reduce(\n (sum, v) => sum + parseFloat(v.totalBalanceUsd),\n 0\n ) || 0;\n\n return {\n venuePositions: positionsQuery.data || [],\n totalPositions,\n totalBalanceUsd,\n isLoading: positionsQuery.isLoading,\n isError: positionsQuery.isError,\n error: positionsQuery.error,\n refetch: positionsQuery.refetch,\n };\n}\n","'use client';\n\nimport { TrendingUp, TrendingDown, ChevronRight } from 'lucide-react';\nimport { formatAmount, formatUSD } from '../../utils/format';\nimport type { Position } from './types';\n\ninterface PositionCardProps {\n position: Position;\n showApy?: boolean;\n showPnL?: boolean;\n onClick?: () => void;\n}\n\nexport function PositionCard({\n position,\n showApy = true,\n showPnL = true,\n onClick,\n}: PositionCardProps) {\n const pnlValue = parseFloat(position.pnl?.totalPnl || '0');\n const isPnlPositive = pnlValue >= 0;\n\n return (\n <button\n onClick={onClick}\n className=\"w-full text-left rounded-lg border p-4 transition-colors hover:opacity-90\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div className=\"flex items-center justify-between\">\n {/* Left: Name and Asset */}\n <div className=\"flex-1 min-w-0\">\n <h4\n className=\"font-medium truncate\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {position.name}\n </h4>\n <div className=\"flex items-center gap-3 mt-1 flex-wrap\">\n <span\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {position.assetSymbol}\n </span>\n\n {/* APY */}\n {showApy && position.apy && (\n <span\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {parseFloat(position.apy).toFixed(2)}% APY\n </span>\n )}\n\n {/* PnL */}\n {showPnL && position.pnl && (\n <span\n className=\"text-sm font-medium flex items-center gap-0.5\"\n style={{\n color: isPnlPositive\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-error)',\n }}\n >\n {isPnlPositive ? <TrendingUp size={12} /> : <TrendingDown size={12} />}\n {isPnlPositive ? '+' : ''}{formatUSD(position.pnl.totalPnl)}\n </span>\n )}\n </div>\n </div>\n\n {/* Right: Balance and Arrow */}\n <div className=\"flex items-center gap-2 ml-4\">\n <div className=\"text-right\">\n <div\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(position.balanceUsd)}\n </div>\n <div\n className=\"text-sm font-mono\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(position.balance)}\n </div>\n </div>\n <ChevronRight\n size={16}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </div>\n </div>\n </button>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { formatUSD } from '../../utils/format';\nimport { PositionCard } from './PositionCard';\nimport type { VenuePositions, Position } from './types';\n\ninterface VenueSectionProps {\n venuePositions: VenuePositions;\n defaultCollapsed?: boolean;\n showApy?: boolean;\n showPnL?: boolean;\n onPositionSelect?: (position: Position) => void;\n}\n\nexport function VenueSection({\n venuePositions,\n defaultCollapsed = false,\n showApy = true,\n showPnL = true,\n onPositionSelect,\n}: VenueSectionProps) {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n return (\n <div\n className=\"rounded-xl border overflow-hidden\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n {/* Section Header */}\n <button\n onClick={() => setIsCollapsed(!isCollapsed)}\n className=\"w-full px-4 py-3 flex items-center justify-between\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {venuePositions.venueName}\n </span>\n <span\n className=\"text-sm px-2 py-0.5 rounded-full\"\n style={{\n backgroundColor: 'var(--compass-color-primary-muted)',\n color: 'var(--compass-color-primary)',\n }}\n >\n {venuePositions.positions.length} position{venuePositions.positions.length !== 1 ? 's' : ''}\n </span>\n </div>\n <div className=\"flex items-center gap-3\">\n <span\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(venuePositions.totalBalanceUsd)}\n </span>\n <ChevronDown\n size={20}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isCollapsed ? 'rotate(0deg)' : 'rotate(180deg)',\n transition: 'transform 0.2s',\n }}\n />\n </div>\n </button>\n\n {/* Positions List */}\n {!isCollapsed && (\n <div\n className=\"px-4 pb-4 space-y-3 border-t\"\n style={{ borderColor: 'var(--compass-color-border)' }}\n >\n <div className=\"pt-3\" />\n {venuePositions.positions.map((position) => (\n <PositionCard\n key={position.id}\n position={position}\n showApy={showApy}\n showPnL={showPnL}\n onClick={() => onPositionSelect?.(position)}\n />\n ))}\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useEffect } from 'react';\nimport { X, ExternalLink, TrendingUp, TrendingDown, Clock, Percent, Calendar } from 'lucide-react';\nimport { formatAmount, formatUSD } from '../../utils/format';\nimport type { Position } from './types';\n\ninterface PositionDetailModalProps {\n position: Position;\n onClose: () => void;\n}\n\nfunction formatDuration(entryTimestamp: string | undefined): string | null {\n if (!entryTimestamp) return null;\n\n try {\n const entryDate = new Date(entryTimestamp);\n const now = new Date();\n const diffMs = now.getTime() - entryDate.getTime();\n\n if (diffMs < 0 || isNaN(diffMs)) return null;\n\n const days = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n if (days >= 365) {\n const years = Math.floor(days / 365);\n return `${years} year${years > 1 ? 's' : ''}`;\n }\n if (days >= 30) {\n const months = Math.floor(days / 30);\n return `${months} month${months > 1 ? 's' : ''}`;\n }\n if (days === 0) {\n const hours = Math.floor(diffMs / (1000 * 60 * 60));\n if (hours > 0) return `${hours} hour${hours > 1 ? 's' : ''}`;\n return 'Today';\n }\n return `${days} day${days !== 1 ? 's' : ''}`;\n } catch {\n return null;\n }\n}\n\nfunction formatDate(timestamp: string | undefined): string | null {\n if (!timestamp) return null;\n try {\n return new Date(timestamp).toLocaleDateString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n } catch {\n return null;\n }\n}\n\nfunction formatExpiryUTC(expiryTimestamp: number | undefined): string | null {\n if (!expiryTimestamp) return null;\n try {\n const date = new Date(expiryTimestamp * 1000); // Convert seconds to milliseconds\n return date.toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n timeZone: 'UTC',\n });\n } catch {\n return null;\n }\n}\n\nexport function PositionDetailModal({ position, onClose }: PositionDetailModalProps) {\n const pnlValue = parseFloat(position.pnl?.totalPnl || '0');\n const isPnlPositive = pnlValue >= 0;\n const isPendle = position.venue === 'pendle';\n const duration = formatDuration(position.entryTimestamp);\n const expiryDate = formatExpiryUTC(position.expiry);\n\n // Close on escape key\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [onClose]);\n\n // Check if we have any stats to show\n const hasStats = position.apy || (isPendle && (duration || expiryDate)) || position.pnl;\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n style={{ backgroundColor: 'rgba(0, 0, 0, 0.7)' }}\n onClick={onClose}\n >\n <div\n className=\"relative w-full max-w-md rounded-xl border overflow-hidden max-h-[90vh] overflow-y-auto\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div\n className=\"sticky top-0 flex items-center justify-between p-4 border-b\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n }}\n >\n <div>\n <h2\n className=\"font-semibold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {position.name}\n </h2>\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {position.venueName}\n </p>\n </div>\n <button\n onClick={onClose}\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <X size={20} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n\n {/* Balance Section */}\n <div className=\"p-4 border-b\" style={{ borderColor: 'var(--compass-color-border)' }}>\n <div className=\"text-center\">\n <p\n className=\"text-sm mb-1\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Current Balance\n </p>\n <p\n className=\"text-3xl font-bold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(position.balanceUsd)}\n </p>\n <p\n className=\"text-sm font-mono mt-1\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {formatAmount(position.balance)} {position.assetSymbol}\n </p>\n </div>\n </div>\n\n {/* Stats Grid - only show if we have stats */}\n {hasStats && (\n <div className=\"grid grid-cols-2 gap-3 p-4 border-b\" style={{ borderColor: 'var(--compass-color-border)' }}>\n {/* APY */}\n {position.apy && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Percent size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n APY\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n {parseFloat(position.apy).toFixed(2)}%\n </p>\n </div>\n )}\n\n {/* Duration - only for Pendle */}\n {isPendle && duration && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Clock size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Duration\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {duration}\n </p>\n </div>\n )}\n\n {/* Expiry - only for Pendle */}\n {isPendle && expiryDate && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n <Calendar size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Expiry (UTC)\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {expiryDate}\n </p>\n </div>\n )}\n\n {/* P&L */}\n {position.pnl && (\n <div\n className=\"p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div className=\"flex items-center gap-2 mb-1\">\n {isPnlPositive ? (\n <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <TrendingDown size={14} style={{ color: 'var(--compass-color-error)' }} />\n )}\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n Total P&L\n </span>\n </div>\n <p\n className=\"font-semibold\"\n style={{\n color: isPnlPositive\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-error)',\n }}\n >\n {isPnlPositive ? '+' : ''}{formatUSD(position.pnl.totalPnl)}\n </p>\n </div>\n )}\n </div>\n )}\n\n {/* Transaction History */}\n {(position.deposits.length > 0 || position.withdrawals.length > 0) && (\n <div className=\"p-4\">\n <h3\n className=\"font-semibold mb-3\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Transaction History\n </h3>\n\n <div className=\"space-y-2\">\n {/* Deposits */}\n {position.deposits.map((tx, i) => {\n const date = formatDate(tx.timestamp);\n return (\n <div\n key={`deposit-${i}`}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <p\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n +{formatAmount(tx.amount)} {position.assetSymbol}\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {date ? `Deposit - ${date}` : 'Deposit'}\n </p>\n </div>\n {tx.txHash && (\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <ExternalLink size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </a>\n )}\n </div>\n );\n })}\n\n {/* Withdrawals */}\n {position.withdrawals.map((tx, i) => {\n const date = formatDate(tx.timestamp);\n return (\n <div\n key={`withdraw-${i}`}\n className=\"flex items-center justify-between p-3 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <p\n className=\"font-medium\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n -{formatAmount(tx.amount)} {position.assetSymbol}\n </p>\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {date ? `Withdrawal - ${date}` : 'Withdrawal'}\n </p>\n </div>\n {tx.txHash && (\n <a\n href={`https://etherscan.io/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-2 rounded-lg hover:opacity-80 transition-opacity\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <ExternalLink size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </a>\n )}\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, Inbox } from 'lucide-react';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { ChainSwitcher, WalletStatus, EarnAccountBalance } from '../../shared';\nimport { formatUSD } from '../../utils/format';\nimport { usePositionsData } from './usePositionsData';\nimport { VenueSection } from './VenueSection';\nimport { PositionDetailModal } from './PositionDetailModal';\nimport type { EarnPositionsListProps, Position } from './types';\n\nexport function EarnPositionsList({\n showApy = true,\n showPnL = true,\n defaultCollapsed = [],\n onPositionSelect,\n}: EarnPositionsListProps) {\n const { isConnected } = useEmbeddableWallet();\n const { venuePositions, totalPositions, totalBalanceUsd, isLoading, isError } = usePositionsData();\n const [selectedPosition, setSelectedPosition] = useState<Position | null>(null);\n\n const handlePositionClick = (position: Position) => {\n setSelectedPosition(position);\n onPositionSelect?.(position);\n };\n\n // Render content based on state\n const renderContent = () => {\n\n // Not connected state\n if (!isConnected) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <Inbox size={48} className=\"mb-4 opacity-50\" />\n <p className=\"font-medium\">Connect your wallet</p>\n <p className=\"text-sm mt-1\">to view your earn positions</p>\n </div>\n );\n }\n\n // Loading state\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2\n size={32}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n );\n }\n\n // Error state\n if (isError) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n <p className=\"font-medium\">Failed to load positions</p>\n <p className=\"text-sm mt-1\">Please try again later</p>\n </div>\n );\n }\n\n // Empty state\n if (totalPositions === 0) {\n return (\n <div\n className=\"flex flex-col items-center justify-center py-12 text-center\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <Inbox size={48} className=\"mb-4 opacity-50\" />\n <p className=\"font-medium\">No positions yet</p>\n <p className=\"text-sm mt-1\">Deposit to a vault or market to get started</p>\n </div>\n );\n }\n\n // Positions view\n return (\n <>\n {/* Summary Header */}\n <div\n className=\"flex items-center justify-between p-4 rounded-xl\"\n style={{ backgroundColor: 'var(--compass-color-surface)' }}\n >\n <div>\n <h2\n className=\"font-bold text-lg\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n Your Positions\n </h2>\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n {totalPositions} position{totalPositions !== 1 ? 's' : ''} across {venuePositions.length} venue{venuePositions.length !== 1 ? 's' : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p\n className=\"text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Total Value\n </p>\n <p\n className=\"font-bold text-xl\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUSD(totalBalanceUsd)}\n </p>\n </div>\n </div>\n\n {/* Venue Sections */}\n <div className=\"space-y-4\">\n {venuePositions.map((vp) => (\n <VenueSection\n key={vp.venue}\n venuePositions={vp}\n defaultCollapsed={defaultCollapsed.includes(vp.venue)}\n showApy={showApy}\n showPnL={showPnL}\n onPositionSelect={handlePositionClick}\n />\n ))}\n </div>\n </>\n );\n };\n\n return (\n <>\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 {/* Content */}\n {renderContent()}\n </div>\n\n {/* Position Detail Modal */}\n {selectedPosition && (\n <PositionDetailModal\n position={selectedPosition}\n onClose={() => setSelectedPosition(null)}\n />\n )}\n </>\n );\n}\n","import type { FeaturePreset, TabConfig, TabId } from './types';\n\nconst allTabs: 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 // TODO: Positions tab temporarily disabled - needs more work on API response handling\n { id: 'positions', label: 'Positions', enabled: false },\n];\n\nexport function getTabsForPreset(preset: FeaturePreset): TabConfig[] {\n switch (preset) {\n case 'full':\n return allTabs;\n case 'earn-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id !== 'swap',\n }));\n case 'swap-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id === 'swap',\n }));\n case 'vaults-only':\n return allTabs.map(tab => ({\n ...tab,\n enabled: tab.id === 'vaults',\n }));\n default:\n return allTabs;\n }\n}\n\nexport function getDefaultTab(tabs: TabConfig[]): TabId {\n const enabledTab = tabs.find(t => t.enabled);\n return enabledTab?.id || 'vaults';\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { VaultsList } from '../VaultsList';\nimport { AaveMarketsList } from '../AaveMarketsList';\nimport { PendleMarketsList } from '../PendleMarketsList';\nimport { SwapWidget } from '../SwapWidget';\nimport { EarnPositionsList } from '../EarnPositionsList';\nimport { getTabsForPreset, getDefaultTab } from './presets';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nexport function CompassEarnWidget({\n preset = 'full',\n enableVaults,\n enableAave,\n enablePendle,\n enableSwap,\n enablePositions,\n defaultTab,\n showHeader = true,\n showApy = true,\n showTvl = true,\n showExpiry = true,\n showUserPosition = true,\n showPnL = true,\n showSearch = true,\n showSort = true,\n onTabChange,\n}: CompassEarnWidgetProps) {\n // Build tab configuration from preset + overrides\n const tabs = useMemo<TabConfig[]>(() => {\n const baseTabs = getTabsForPreset(preset);\n\n // Apply overrides if provided\n return baseTabs.map(tab => {\n let enabled = tab.enabled;\n if (tab.id === 'vaults' && enableVaults !== undefined) enabled = enableVaults;\n if (tab.id === 'aave' && enableAave !== undefined) enabled = enableAave;\n if (tab.id === 'pendle' && enablePendle !== undefined) enabled = enablePendle;\n if (tab.id === 'swap' && enableSwap !== undefined) enabled = enableSwap;\n if (tab.id === 'positions' && enablePositions !== undefined) enabled = enablePositions;\n return { ...tab, enabled };\n });\n }, [preset, enableVaults, enableAave, enablePendle, enableSwap, enablePositions]);\n\n const enabledTabs = tabs.filter(t => t.enabled);\n const initialTab = defaultTab && tabs.find(t => t.id === defaultTab)?.enabled\n ? defaultTab\n : getDefaultTab(tabs);\n\n const [activeTab, setActiveTab] = useState<TabId>(initialTab);\n\n const handleTabChange = (tab: TabId) => {\n setActiveTab(tab);\n onTabChange?.(tab);\n };\n\n // If only one tab is enabled, don't show tab bar\n const showTabs = enabledTabs.length > 1;\n\n return (\n <div className=\"flex flex-col\" style={{ gap: 'var(--compass-spacing-card)' }}>\n {/* Header */}\n <h1 className=\"font-bold text-xl\" style={{ color: 'var(--compass-color-text)', fontFamily: 'var(--compass-font-family)' }}>\n Compass Earn\n </h1>\n\n {/* Tab Bar */}\n <div\n className=\"flex\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n padding: 'calc(var(--compass-spacing-unit) * 0.25)',\n gap: 'calc(var(--compass-spacing-unit) * 0.25)',\n }}\n >\n {tabs.map((tab) => (\n <button\n key={tab.id}\n onClick={() => handleTabChange(tab.id)}\n className=\"flex-1 text-sm font-medium\"\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 borderRadius: 'var(--compass-border-radius-md)',\n padding: 'calc(var(--compass-spacing-unit) * 0.5) calc(var(--compass-spacing-unit) * 0.75)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {tab.label}\n </button>\n ))}\n </div>\n\n {/* Content */}\n <div>\n {activeTab === 'vaults' && (\n <VaultsList\n showApy={showApy}\n showTvl={showTvl}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n showSort={showSort}\n />\n )}\n {activeTab === 'aave' && (\n <AaveMarketsList\n showApy={showApy}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n />\n )}\n {activeTab === 'pendle' && (\n <PendleMarketsList\n showApy={showApy}\n showExpiry={showExpiry}\n showUserPosition={showUserPosition}\n showSearch={showSearch}\n showSort={showSort}\n />\n )}\n {activeTab === 'swap' && <SwapWidget />}\n {activeTab === 'positions' && (\n <EarnPositionsList\n showPnL={showPnL}\n />\n )}\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"]}
|