@compass-labs/widgets 0.1.39 → 0.1.41

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.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/contexts/CreditAccountContext.tsx","../src/theme/presets.ts","../src/theme/css-variables.ts","../src/theme/context.tsx","../src/provider/CompassProvider.tsx","../src/shared/ChainSwitcher.tsx","../src/shared/CopyableAddress.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/CreditAccountGuard.tsx","../src/shared/AccountBalancesModal.tsx","../src/shared/EarnAccountBalance.tsx","../src/shared/useSwapQuote.ts","../src/shared/SwapForm.tsx","../src/shared/WidgetFooter.tsx","../src/components/EarnAccount/MarketSelector.tsx","../src/components/EarnAccount/EarningsModal.tsx","../src/components/CreditAccount/TxStatus.tsx","../src/components/EarnAccount/EarnAccount.tsx","../src/components/CreditAccount/hooks/useCreditPositions.ts","../src/components/CreditAccount/hooks/useCreditBalances.ts","../src/types/credit.ts","../src/components/CreditAccount/hooks/useTokenPrices.ts","../src/components/CreditAccount/hooks/useCreditBundle.ts","../src/components/CreditAccount/hooks/useBorrow.ts","../src/components/CreditAccount/hooks/useRepay.ts","../src/components/CreditAccount/PositionsView.tsx","../src/components/CreditAccount/BorrowModal.tsx","../src/components/CreditAccount/RepayModal.tsx","../src/components/CreditAccount/SupplyModal.tsx","../src/components/CreditAccount/WithdrawModal.tsx","../src/components/CreditAccount/TopUpModal.tsx","../src/components/CreditAccount/CreditSwapModal.tsx","../src/components/CreditAccount/CreditAccount.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/RebalancingWidget/useRebalancingData.ts","../src/components/RebalancingWidget/rebalancingEngine.ts","../src/components/RebalancingWidget/constants.ts","../src/components/RebalancingWidget/AllocationEditor.tsx","../src/components/RebalancingWidget/RebalancingWidget.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","truncate","Check","Copy","Wallet","LogOut","X","formatUSD","ChevronDown","useRef","AlertCircle","ArrowRight","Loader2","ArrowDownLeft","ArrowUpRight","ExternalLink","Fragment","forwardRef","EarnAccountBalance","useImperativeHandle","ArrowDownUp","ArrowLeftRight","CheckCircle","BLOCK_EXPLORERS","TrendingUp","ChevronUp","TrendingDown","XCircle","formatCurrency","parseExpiry","positions","error","Plus","Minus","Circle","getExplorerUrl","ChevronRight","ArrowUpCircle","ArrowDownCircle","EVM_CHAIN_IDS","floorTo","formatUsd","totalBalanceUsd","PositionCard","Percent","Clock","Calendar","Inbox","RotateCcw","Equal","formatAmount","AlertTriangle"],"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 // Sync when defaultChain prop changes (e.g. from external chain selector)\n useEffect(() => {\n if (defaultChain && defaultChain in CHAIN_CONFIG) {\n setChainIdState(defaultChain);\n }\n }, [defaultChain]);\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","'use client';\n\n/**\n * Credit Account Context for Compass Widgets\n *\n * Manages the user's Credit account (Safe wallet) state:\n * - Checks if account exists when wallet connects\n * - Provides account creation functionality\n * - All widgets check this before allowing credit 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 CreditAccountContextValue {\n /** The user's credit account address (Safe wallet) */\n creditAccountAddress: Address | null;\n /** Whether the credit 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 credit account (gas sponsored) */\n createAccount: () => Promise<Address>;\n /** Refresh account status */\n refetch: () => void;\n}\n\nconst CreditAccountContext = createContext<CreditAccountContextValue | null>(null);\n\ninterface CreditAccountProviderProps {\n children: ReactNode;\n}\n\nexport function CreditAccountProvider({ children }: CreditAccountProviderProps) {\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 credit account status when wallet is connected\n const {\n data: accountData,\n isLoading: isChecking,\n error: checkError,\n refetch,\n } = useQuery({\n queryKey: ['creditAccount', address, chainId],\n queryFn: async () => {\n if (!address) return null;\n\n const response = await fetch(\n `/api/compass/credit-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 credit account');\n }\n\n return response.json() as Promise<{\n creditAccountAddress: 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 credit 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.creditAccountAddress as Address;\n }\n\n setIsCreating(true);\n setCreateError(null);\n\n try {\n const response = await fetch('/api/compass/credit-account/create', {\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 credit account');\n }\n\n const result = await response.json();\n\n // Invalidate the query to refetch account status\n await queryClient.invalidateQueries({\n queryKey: ['creditAccount', address, chainId],\n });\n\n return result.creditAccountAddress 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: CreditAccountContextValue = {\n creditAccountAddress: (accountData?.creditAccountAddress 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 <CreditAccountContext.Provider value={value}>\n {children}\n </CreditAccountContext.Provider>\n );\n}\n\n/**\n * Hook to access credit account state and actions\n */\nexport function useCreditAccount(): CreditAccountContextValue {\n const context = useContext(CreditAccountContext);\n\n if (!context) {\n throw new Error('useCreditAccount must be used within a CompassProvider');\n }\n\n return context;\n}\n\nexport { CreditAccountContext };\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\n/**\n * Convert a hex or CSS color to an rgba string with the given opacity.\n * Supports #RGB, #RRGGBB, rgb(), and rgba() formats.\n */\nfunction colorWithOpacity(color: string, opacity: number): string {\n // Handle hex colors\n const hexMatch = color.match(/^#([0-9a-f]{3,8})$/i);\n if (hexMatch) {\n let hex = hexMatch[1];\n if (hex.length === 3) hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n // Handle rgb(r, g, b)\n const rgbMatch = color.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${opacity})`;\n }\n // Fallback: return as-is\n return color;\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 if (!input.overrides) return base;\n\n const merged = deepMerge(base, input.overrides);\n\n // Auto-derive textSecondary/textTertiary from text if only text was overridden\n const textOverrides = input.overrides.colors?.text;\n if (textOverrides?.text) {\n if (!textOverrides.textSecondary) {\n merged.colors.text.textSecondary = colorWithOpacity(textOverrides.text, 0.65);\n }\n if (!textOverrides.textTertiary) {\n merged.colors.text.textTertiary = colorWithOpacity(textOverrides.text, 0.4);\n }\n }\n\n return merged;\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 { CreditAccountProvider } from '../contexts/CreditAccountContext';\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 <CreditAccountProvider>\n <div className=\"compass-widget\" style={{ width: '100%', minHeight: '100%' }}>\n {children}\n </div>\n </CreditAccountProvider>\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 { useState, useCallback } from 'react';\nimport { Copy, Check } from 'lucide-react';\n\nexport interface CopyableAddressProps {\n /** The full address to copy */\n address: string;\n /** Label shown on the left (e.g., \"Wallet\", \"Product Account\") */\n label?: string;\n /** Show truncated address (default: true) */\n truncate?: boolean;\n /** Display variant: 'card' (bordered box) or 'inline' (plain text) */\n variant?: 'card' | 'inline';\n /** Text size class for inline variant (default: 'text-xs') */\n textSize?: string;\n}\n\nfunction truncateAddr(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function CopyableAddress({\n address,\n label,\n truncate = true,\n variant = 'card',\n textSize = 'text-xs',\n}: CopyableAddressProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(address);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [address]);\n\n const displayAddr = truncate ? truncateAddr(address) : address;\n\n if (variant === 'inline') {\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center font-mono ${textSize}`}\n style={{\n color: 'var(--compass-color-text-secondary)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n gap: '4px',\n }}\n title={copied ? 'Copied!' : `Copy: ${address}`}\n >\n <span>{displayAddr}</span>\n {copied ? (\n <Check size={10} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <Copy size={10} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n )}\n </button>\n );\n }\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex items-center justify-between p-2.5 rounded-lg transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n cursor: 'pointer',\n width: '100%',\n }}\n title={copied ? 'Copied!' : `Copy: ${address}`}\n >\n {label && (\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {label}\n </span>\n )}\n <span className=\"flex items-center gap-2\">\n <span className=\"text-xs font-mono\" style={{ color: 'var(--compass-color-text)' }}>\n {displayAddr}\n </span>\n {copied ? (\n <Check size={14} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <Copy size={14} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-text-secondary)' }} />\n )}\n </span>\n </button>\n );\n}\n","'use client';\n\nimport { Wallet, LogOut } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\nimport { CopyableAddress } from './CopyableAddress';\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 <CopyableAddress\n address={address}\n truncate={!showFullAddress}\n variant=\"inline\"\n textSize={compact ? 'text-xs' : 'text-sm'}\n />\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\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n style={{ overflowY: 'auto', scrollbarWidth: 'none' }}\n >\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\"\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 const floored = Math.floor(Math.abs(value) * 100) / 100;\n return `${prefix}${floored.toFixed(2)}`;\n };\n\n const formatUSD = (value: number) => {\n const usdValue = value * tokenPrice;\n const prefix = usdValue >= 0 ? '+$' : '-$';\n return `${prefix}${(Math.floor(Math.abs(usdValue) * 100) / 100).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 const factor = Math.pow(10, 2);\n return (Math.floor(num * factor) / factor).toFixed(2);\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 const floored = Math.floor(num * 100) / 100;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(floored);\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 scrollbarWidth: 'none',\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 scrollbarWidth: 'none',\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 {(Math.floor(parseFloat(item.event.amount) * 100) / 100).toFixed(2)} {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\n/**\n * CreditAccountGuard Component\n *\n * Ensures a credit 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 { useCreditAccount } from '../contexts/CreditAccountContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { Loader2 } from 'lucide-react';\n\ninterface CreditAccountGuardProps {\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 CreditAccountGuard({\n children,\n loadingComponent,\n createAccountComponent,\n}: CreditAccountGuardProps) {\n const { isConnected, login } = useEmbeddableWallet();\n const { isDeployed, isChecking, isCreating, createAccount, error } = useCreditAccount();\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-credit-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-credit-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 className=\"relative w-12 h-12 mx-auto mb-4\">\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n opacity: 0.15,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n />\n <div className=\"relative w-full h-full flex items-center justify-center\">\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=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\" />\n </svg>\n </div>\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 Credit 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 Credit Account is a smart wallet that lets you borrow and lend on Aave.\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 Credit 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 { Loader2 } from 'lucide-react';\nimport { ActionModal } from './ActionModal';\nimport { CopyableAddress } from './CopyableAddress';\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 walletAddress?: string;\n}\n\nexport function AccountBalancesModal({\n isOpen,\n onClose,\n balances,\n totalUsdValue,\n isLoading = false,\n earnAccountAddress,\n walletAddress,\n}: AccountBalancesModalProps) {\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Balance Breakdown\">\n <div className=\"flex flex-col gap-3\">\n {/* Addresses */}\n {(walletAddress || earnAccountAddress) && (\n <div className=\"flex flex-col gap-1.5\">\n {walletAddress && (\n <CopyableAddress address={walletAddress} label=\"Wallet\" />\n )}\n {earnAccountAddress && (\n <CopyableAddress address={earnAccountAddress} label=\"Product Account\" />\n )}\n </div>\n )}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-4\">\n <Loader2\n size={24}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n ) : balances.length === 0 ? (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No tokens in account\n </div>\n ) : (\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 <div\n className=\"flex flex-col gap-2\"\n style={{\n maxHeight: '50vh',\n overflowY: 'auto',\n scrollbarWidth: 'none',\n }}\n >\n {balances.filter((token) => parseFloat(token.balance) >= 0.005).map((token) => (\n <div\n key={token.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 flexShrink: 0,\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {token.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(token.balance)}\n </span>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {formatUSD(token.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\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 {formatUSD(totalUsdValue)}\n </span>\n </div>\n </>\n )}\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useCallback, forwardRef, useImperativeHandle } 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 { 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 /** Hide visual buttons, only render modals (for external trigger via ref) */\n hideVisual?: boolean;\n /** Callback when transfer completes */\n onTransferComplete?: (\n action: TransferAction,\n token: string,\n amount: string,\n txHash: string\n ) => void;\n}\n\nexport interface EarnAccountBalanceHandle {\n openTransferModal: () => void;\n}\n\nconst TRANSFER_TOKEN = 'USDC';\n\nexport const EarnAccountBalance = forwardRef<EarnAccountBalanceHandle, EarnAccountBalanceProps>(function EarnAccountBalance({\n compact = false,\n hideVisual = false,\n onTransferComplete,\n}: EarnAccountBalanceProps, ref) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [activeAction, setActiveAction] = useState<TransferAction>('deposit');\n const selectedToken = TRANSFER_TOKEN;\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 USDC balance for deposits\n const { data: eoaBalances } = useQuery({\n queryKey: ['eoaBalances', chainId, address, TRANSFER_TOKEN],\n queryFn: async () => {\n if (!address) return {};\n try {\n const response = await fetch(\n `/api/compass/token/balance?chain=${chainId}&token=${TRANSFER_TOKEN}&address=${address}`\n );\n if (response.ok) {\n const data = await response.json();\n return { [TRANSFER_TOKEN]: data.balance || '0' };\n }\n } catch {\n // Ignore errors\n }\n return {};\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 useImperativeHandle(ref, () => ({\n openTransferModal: handleOpenModal,\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 && !hideVisual) {\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 {!hideVisual && (\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 )}\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 walletAddress={address ?? 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 {/* Amount Input */}\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\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 USDC\n </span>\n </div>\n <button\n onClick={() => setAmount(formatAmount(getMaxBalance()))}\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-primary)', cursor: 'pointer', background: 'none', border: 'none', padding: 0 }}\n >\n Available: {formatAmount(getMaxBalance())} USDC\n </button>\n </div>\n\n {/* Description */}\n <p className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {activeAction === 'deposit'\n ? 'Approves the token transfer, then transfers USDC from your wallet into your savings account. Requires 2 signatures.'\n : 'Withdraws USDC from your savings account back to your wallet. Requires 1 signature.'}\n </p>\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 ? (\n <><Loader2 size={18} className=\"animate-spin\" /> Processing...</>\n ) : (\n <><ArrowUpRight size={16} /> {activeAction === 'deposit' ? 'Transfer to Savings Account' : 'Withdraw to Wallet'}</>\n )}\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 { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\n\nexport interface SwapQuote {\n inputAmount: string;\n outputAmount: string;\n rate: string;\n}\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 } = useEmbeddableWallet();\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 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 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 },\n enabled: enabled && !!address && !!fromToken && !!toToken && !!amount && parseFloat(amount) > 0,\n staleTime: 10 * 1000,\n refetchInterval: 15 * 1000,\n retry: 1,\n });\n\n return {\n quote: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { ArrowDownUp, Loader2, AlertCircle, ChevronDown, ArrowLeftRight, CheckCircle, ExternalLink } from 'lucide-react';\nimport { useSwapQuote } from './useSwapQuote';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\n\n/** Truncate a number to `decimals` places (floor, no rounding) */\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nconst COMMON_TOKENS = [\n 'USDC', 'USDT', 'DAI', 'USDS', 'USDE', 'sUSDE', 'sDAI',\n 'FRAX', 'LUSD', 'GUSD', 'PYUSD', 'crvUSD', 'GHO',\n 'EURC', 'EURS', 'EURA',\n 'WETH', 'WBTC', 'wstETH', 'cbETH', 'rETH',\n];\n\nexport interface SwapFormProps {\n availableFromTokens: string[];\n availableToTokens?: string[];\n balances?: Record<string, string>;\n defaultFromToken?: string;\n defaultToToken?: string;\n onSwapSuccess?: (fromToken: string, toToken: string, amountIn: string, amountOut: string, txHash: string) => void;\n onSwapError?: (error: Error) => void;\n}\n\nexport function SwapForm({\n availableFromTokens,\n availableToTokens,\n balances,\n defaultFromToken,\n defaultToToken,\n onSwapSuccess,\n onSwapError,\n}: SwapFormProps) {\n const toTokens = availableToTokens\n ? Array.from(new Set([...availableFromTokens, ...availableToTokens]))\n : Array.from(new Set([...availableFromTokens, ...COMMON_TOKENS]));\n\n const [fromToken, setFromToken] = useState(defaultFromToken || availableFromTokens[0] || 'USDC');\n const [toToken, setToToken] = useState(defaultToToken || toTokens.find(t => t !== (defaultFromToken || availableFromTokens[0])) || 'USDC');\n const [fromAmount, setFromAmount] = useState('');\n const [isSwapping, setIsSwapping] = useState(false);\n const [swapStatus, setSwapStatus] = useState('');\n const [lastTxHash, setLastTxHash] = useState<string | null>(null);\n const [txConfirmed, setTxConfirmed] = useState(false);\n const [isFromOpen, setIsFromOpen] = useState(false);\n const [isToOpen, setIsToOpen] = useState(false);\n const swapPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const swapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n };\n }, []);\n\n const { address, isConnected, signTypedData } = useEmbeddableWallet();\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 const oldFrom = fromToken;\n const oldTo = toToken;\n if (availableFromTokens.includes(oldTo)) {\n setFromToken(oldTo);\n setToToken(oldFrom);\n setFromAmount('');\n }\n }, [fromToken, toToken, availableFromTokens]);\n\n const handleSwap = useCallback(async () => {\n if (!address || !fromAmount || !quote || !signTypedData) return;\n\n setIsSwapping(true);\n setSwapStatus('Preparing swap...');\n setLastTxHash(null);\n setTxConfirmed(false);\n\n try {\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 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 setSwapStatus('Confirming on chain...');\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 // Show txHash immediately so user can track on explorer\n const savedFromAmount = fromAmount;\n setLastTxHash(txHash || null);\n setTxConfirmed(false);\n setIsSwapping(false);\n setSwapStatus('');\n setFromAmount('');\n\n // Poll for on-chain confirmation, only call onSwapSuccess after confirmed\n if (txHash) {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n\n swapPollRef.current = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`);\n if (!res.ok) return;\n const data = await res.json();\n if (data.status === 'success') {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n setTxConfirmed(true);\n onSwapSuccess?.(fromToken, toToken, savedFromAmount, quote.outputAmount, txHash);\n } else if (data.status === 'reverted') {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n setLastTxHash(null);\n onSwapError?.(new Error('Transaction reverted on-chain'));\n }\n } catch { /* keep polling */ }\n }, 2000);\n swapTimeoutRef.current = setTimeout(() => {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n }, 120_000);\n }\n } catch (error) {\n setSwapStatus('');\n setLastTxHash(null);\n onSwapError?.(error as Error);\n } finally {\n setIsSwapping(false);\n }\n }, [address, fromAmount, quote, chainId, fromToken, toToken, signTypedData, onSwapSuccess, onSwapError]);\n\n const canReverse = availableFromTokens.includes(toToken);\n const fromBalance = balances?.[fromToken];\n\n // Shared token dropdown\n const TokenDropdown = ({\n tokens,\n selected,\n isOpen,\n onToggle,\n onSelect,\n }: {\n tokens: string[];\n selected: string;\n isOpen: boolean;\n onToggle: () => void;\n onSelect: (token: string) => void;\n }) => (\n <div style={{ position: 'relative', flexShrink: 0 }}>\n <button\n onClick={onToggle}\n disabled={isSwapping}\n className=\"flex items-center font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n gap: '4px',\n fontSize: '0.8125rem',\n }}\n >\n {selected}\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isOpen && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: '4px',\n zIndex: 10,\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: 'var(--compass-shadow-md)',\n minWidth: '120px',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none' as const,\n }}\n >\n {tokens.map((token) => (\n <button\n key={token}\n onClick={() => onSelect(token)}\n style={{\n display: 'block',\n width: '100%',\n textAlign: 'left',\n padding: '6px 10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: token === selected ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === selected ? 'var(--compass-color-primary-muted)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0', fontFamily: 'var(--compass-font-family)' }}>\n {/* From card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg) var(--compass-border-radius-lg) 0 0',\n padding: '10px 12px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>From</span>\n {fromBalance && (\n <button\n onClick={() => setFromAmount(truncate(parseFloat(fromBalance), 4))}\n disabled={isSwapping}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: '0.6875rem' }}\n >\n Available: {truncate(parseFloat(fromBalance), 4)}\n </button>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n disabled={isSwapping}\n style={{\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <TokenDropdown\n tokens={availableFromTokens}\n selected={fromToken}\n isOpen={isFromOpen}\n onToggle={() => { setIsFromOpen(!isFromOpen); setIsToOpen(false); }}\n onSelect={(token) => {\n if (token === toToken) setToToken(fromToken);\n setFromToken(token);\n setIsFromOpen(false);\n setFromAmount('');\n }}\n />\n </div>\n </div>\n\n {/* Reverse button — overlaps between cards */}\n <div style={{ display: 'flex', justifyContent: 'center', height: 0 }}>\n <button\n onClick={handleReverse}\n disabled={!canReverse || isSwapping}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n padding: '4px',\n opacity: !canReverse || isSwapping ? 0.3 : 1,\n cursor: !canReverse || isSwapping ? 'not-allowed' : 'pointer',\n position: 'relative',\n zIndex: 1,\n marginTop: '-11px',\n }}\n >\n <ArrowDownUp size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n\n {/* To card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-lg) var(--compass-border-radius-lg)',\n padding: '10px 12px',\n }}\n >\n <div>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>To</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n color: isQuoteLoading ? 'var(--compass-color-text-tertiary)' : 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n }}\n >\n {isQuoteLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <Loader2 size={14} className=\"animate-spin\" />\n <span style={{ fontSize: '0.8125rem', fontWeight: 400 }}>Loading...</span>\n </span>\n ) : quote?.outputAmount ? (\n truncate(parseFloat(quote.outputAmount), 4)\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>0.00</span>\n )}\n </div>\n <TokenDropdown\n tokens={toTokens}\n selected={toToken}\n isOpen={isToOpen}\n onToggle={() => { setIsToOpen(!isToOpen); setIsFromOpen(false); }}\n onSelect={(token) => {\n if (token === fromToken) {\n setFromToken(toToken);\n setFromAmount('');\n }\n setToToken(token);\n setIsToOpen(false);\n }}\n />\n </div>\n </div>\n\n {/* Rate */}\n {quote && (\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem', margin: '6px 0 0' }}>\n 1 {fromToken} = {truncate(parseFloat(quote.rate), 4)} {toToken}\n </p>\n )}\n\n {/* Quote Error */}\n {quoteError && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '6px 10px',\n gap: '6px',\n fontSize: '0.75rem',\n marginTop: '8px',\n }}\n >\n <AlertCircle size={12} />\n <span>{quoteError.message}</span>\n </div>\n )}\n\n {/* Swap Button */}\n <button\n onClick={handleSwap}\n disabled={isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '10px',\n marginTop: '10px',\n fontSize: '0.875rem',\n fontWeight: 600,\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: 'none',\n cursor: isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected ? 'not-allowed' : 'pointer',\n opacity: isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected ? 0.5 : 1,\n transition: 'all 200ms ease',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {isSwapping ? (\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px', flexDirection: 'column' }}>\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }}>\n <Loader2 size={14} className=\"animate-spin\" />\n Processing...\n </span>\n {swapStatus && (\n <span style={{ fontSize: '0.7rem', opacity: 0.7, fontWeight: 400 }}>\n {swapStatus}\n </span>\n )}\n </span>\n ) : (\n <>\n <ArrowLeftRight size={14} />\n Swap\n </>\n )}\n </button>\n\n {/* Transaction status with explorer link */}\n {lastTxHash && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n marginTop: '8px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {txConfirmed ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: txConfirmed ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {txConfirmed ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[chainId] || BLOCK_EXPLORERS.ethereum}/tx/${lastTxHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nexport function WidgetFooter() {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '4px',\n marginTop: 'auto',\n paddingTop: '8px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '0.6875rem',\n }}\n >\n <span>Non-custodial</span>\n <span>Gas sponsored</span>\n <span>Audited protocols</span>\n </div>\n <a\n href=\"https://compasslabs.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '0.625rem',\n textDecoration: 'none',\n opacity: 0.7,\n transition: 'opacity 200ms ease',\n }}\n onMouseEnter={(e) => { (e.target as HTMLElement).style.opacity = '1'; }}\n onMouseLeave={(e) => { (e.target as HTMLElement).style.opacity = '0.7'; }}\n >\n Powered by <span style={{ fontWeight: 500 }}>Compass</span>\n </a>\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { MarketOption } from './types';\n\ninterface MarketSelectorProps {\n markets: MarketOption[];\n selectedMarket: MarketOption | null;\n onMarketSelect: (market: MarketOption) => void;\n isLoading?: boolean;\n}\n\nfunction getTypeLabel(type: string): string {\n switch (type) {\n case 'aave': return 'Aave';\n case 'vaults': return 'Morpho Vault';\n case 'pendle': return 'Pendle Fixed';\n default: return type;\n }\n}\n\nfunction formatTvl(value: number): string {\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 if (value >= 1) return `$${Math.round(value)}`;\n return '$0';\n}\n\nexport function MarketSelector({\n markets,\n selectedMarket,\n onMarketSelect,\n isLoading,\n}: MarketSelectorProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const filteredMarkets = useMemo(() => {\n return markets\n .filter((m) => m.type === 'aave' || m.type === 'pendle' || m.tvl >= 1000)\n .sort((a, b) => b.apy - a.apy);\n }, [markets]);\n\n const otherMarkets = selectedMarket\n ? filteredMarkets.filter((m) => m.id !== selectedMarket.id)\n : filteredMarkets;\n\n if (isLoading) {\n return (\n <div\n style={{\n padding: '10px 12px',\n minHeight: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '13px',\n }}\n >\n Loading markets...\n </div>\n );\n }\n\n if (filteredMarkets.length === 0) {\n return (\n <div\n style={{\n padding: '10px 12px',\n minHeight: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '13px',\n }}\n >\n No markets available\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0' }}>\n {/* Compact selected market row — clickable to expand */}\n <button\n onClick={() => (otherMarkets.length > 0 || !selectedMarket) && setIsExpanded(!isExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n minHeight: '52px',\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: isExpanded ? 'var(--compass-border-radius-md) var(--compass-border-radius-md) 0 0' : 'var(--compass-border-radius-md)',\n cursor: (otherMarkets.length > 0 || !selectedMarket) ? 'pointer' : 'default',\n fontFamily: 'var(--compass-font-family)',\n textAlign: 'left',\n width: '100%',\n }}\n >\n {selectedMarket ? (\n <>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1px', minWidth: 0, overflow: 'hidden' }}>\n <span\n style={{\n fontWeight: 600,\n color: 'var(--compass-color-text)',\n fontSize: '13px',\n lineHeight: '1.3',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {selectedMarket.name}\n </span>\n <span\n style={{\n fontSize: '11px',\n color: 'var(--compass-color-text-tertiary)',\n whiteSpace: 'nowrap',\n }}\n >\n {getTypeLabel(selectedMarket.type)} · {formatTvl(selectedMarket.tvl)}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexShrink: 0, marginLeft: '8px' }}>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: '13px',\n fontWeight: 600,\n }}\n >\n {selectedMarket.apy.toFixed(2)}%\n </span>\n {otherMarkets.length > 0 && (\n <ChevronDown\n size={14}\n style={{\n color: 'var(--compass-color-text-tertiary)',\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n }}\n />\n )}\n </div>\n </>\n ) : (\n <>\n <span style={{ color: 'var(--compass-color-text-secondary)', fontSize: '13px', lineHeight: '1.3' }}>\n Select a market\n </span>\n <ChevronDown\n size={14}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n flexShrink: 0,\n }}\n />\n </>\n )}\n </button>\n\n {/* Expandable Market List */}\n {isExpanded && (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-md) var(--compass-border-radius-md)',\n overflow: 'hidden',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none',\n }}\n >\n {otherMarkets.map((market) => (\n <button\n key={market.id}\n onClick={() => {\n onMarketSelect(market);\n setIsExpanded(false);\n }}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '8px 12px',\n backgroundColor: 'var(--compass-color-surface)',\n border: 'none',\n borderBottom: '1.5px solid var(--compass-color-border)',\n cursor: 'pointer',\n fontFamily: 'var(--compass-font-family)',\n textAlign: 'left',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1px', minWidth: 0 }}>\n <span\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '13px',\n fontWeight: 500,\n lineHeight: '1.3',\n }}\n >\n {market.name}\n </span>\n <span\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '11px',\n whiteSpace: 'nowrap',\n }}\n >\n {getTypeLabel(market.type)} · {formatTvl(market.tvl)}\n </span>\n </div>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: '13px',\n fontWeight: 500,\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n {market.apy.toFixed(2)}%\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { X, ChevronDown, ChevronUp, ExternalLink, TrendingUp, TrendingDown } from 'lucide-react';\nimport type { Position } from './types';\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\ninterface EarningsModalProps {\n isOpen: boolean;\n onClose: () => void;\n positions: Position[];\n totalEarned: number;\n isLoading?: boolean;\n chainId?: string;\n}\n\nfunction formatCurrency(amount: number): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(amount);\n}\n\nfunction PositionCard({ position, chainId }: { position: Position; chainId?: string }) {\n const [isHistoryExpanded, setIsHistoryExpanded] = useState(false);\n\n const formatShortDate = (dateStr: string | undefined) => {\n if (!dateStr) return null;\n const date = new Date(dateStr);\n if (isNaN(date.getTime())) return null;\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n };\n\n const totalPnl = position.pnl?.totalPnl ?? position.performance ?? 0;\n const isPositive = totalPnl >= 0;\n\n return (\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '16px',\n padding: '16px',\n }}\n >\n {/* Position Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '12px' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '2px' }}>\n <span style={{ fontWeight: 600, color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {position.marketName}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {position.amount.toLocaleString()} {position.token}\n </span>\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: 'var(--compass-color-success)',\n fontSize: '0.8125rem',\n backgroundColor: 'var(--compass-color-success-muted)',\n padding: '4px 10px',\n borderRadius: '20px',\n fontWeight: 600,\n }}>\n <TrendingUp size={12} />\n {position.apy.toFixed(2)}%\n </div>\n </div>\n\n {/* P&L Row */}\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: '12px',\n borderTop: '1px solid var(--compass-color-border)',\n }}>\n <div style={{ display: 'flex', gap: '20px' }}>\n {position.pnl ? (\n <>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Unrealised\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: position.pnl.unrealizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {position.pnl.unrealizedPnl >= 0 ? '+' : ''}{formatCurrency(position.pnl.unrealizedPnl)}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Realised\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: position.pnl.realizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {position.pnl.realizedPnl >= 0 ? '+' : ''}{formatCurrency(position.pnl.realizedPnl)}\n </div>\n </div>\n </>\n ) : (\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Total P&L\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: isPositive ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {isPositive ? '+' : ''}{formatCurrency(totalPnl)}\n </div>\n </div>\n )}\n </div>\n {position.transactions.length > 0 && (\n <button\n onClick={() => setIsHistoryExpanded(!isHistoryExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '6px 10px',\n backgroundColor: 'transparent',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '0.6875rem',\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'all 150ms ease',\n }}\n >\n History\n {isHistoryExpanded ? <ChevronUp size={10} /> : <ChevronDown size={10} />}\n </button>\n )}\n </div>\n\n {/* Transaction History (Expandable) */}\n {isHistoryExpanded && position.transactions.length > 0 && (\n <div style={{\n marginTop: '12px',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: '12px',\n overflow: 'hidden',\n }}>\n {position.transactions.map((tx, i) => (\n <div\n key={tx.id}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '10px 12px',\n borderBottom: i < position.transactions.length - 1 ? '1px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n {formatShortDate(tx.timestamp) && (\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', minWidth: '45px' }}>\n {formatShortDate(tx.timestamp)}\n </span>\n )}\n <span style={{\n fontSize: '0.75rem',\n color: 'var(--compass-color-text-secondary)',\n textTransform: 'capitalize',\n }}>\n {tx.type}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{\n fontWeight: 500,\n fontSize: '0.75rem',\n color: tx.type === 'deposit' ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {tx.type === 'deposit' ? '+' : '-'}{tx.amount} {tx.token}\n </span>\n {tx.txHash && (\n <a\n href={`${BLOCK_EXPLORERS[chainId || 'ethereum'] || BLOCK_EXPLORERS.ethereum}/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'var(--compass-color-text-tertiary)', lineHeight: 0 }}\n >\n <ExternalLink size={10} />\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function EarningsModal({ isOpen, onClose, positions, totalEarned, isLoading, chainId }: EarningsModalProps) {\n if (!isOpen) return null;\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\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n backdropFilter: 'blur(4px)',\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)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '20px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.4)',\n width: '100%',\n maxWidth: '420px',\n maxHeight: '80vh',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '16px 20px',\n }}>\n <h2 style={{\n fontWeight: 600,\n fontSize: '1.0625rem',\n color: 'var(--compass-color-text)',\n margin: 0,\n }}>\n Your Positions\n </h2>\n <button\n onClick={onClose}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: 'none',\n cursor: 'pointer',\n padding: '6px',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <X size={16} />\n </button>\n </div>\n\n {/* Total P&L Summary */}\n <div style={{\n padding: '16px 20px',\n margin: '0 16px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: '14px',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px',\n }}>\n <div style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: totalEarned >= 0 ? 'var(--compass-color-success-muted)' : 'var(--compass-color-error-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}>\n {totalEarned >= 0\n ? <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n : <TrendingDown size={14} style={{ color: 'var(--compass-color-error)' }} />\n }\n </div>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Total P&L</div>\n <div style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n letterSpacing: '-0.02em',\n }}>\n {totalEarned >= 0 ? '+' : ''}{formatCurrency(totalEarned)}\n </div>\n </div>\n </div>\n <div style={{ display: 'flex', gap: '16px' }}>\n <div>\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Unrealised </span>\n <span style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: totalUnrealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {totalUnrealized >= 0 ? '+' : ''}{formatCurrency(totalUnrealized)}\n </span>\n </div>\n <div>\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Realised </span>\n <span style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: totalRealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {totalRealized >= 0 ? '+' : ''}{formatCurrency(totalRealized)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Positions List */}\n <div style={{\n flex: 1,\n overflowY: 'auto',\n scrollbarWidth: 'none',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}>\n {isLoading ? (\n <div style={{ textAlign: 'center', padding: '32px 0', color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n Loading positions...\n </div>\n ) : positions.length === 0 ? (\n <div style={{ textAlign: 'center', padding: '32px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No active positions yet\n </p>\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem', margin: 0 }}>\n Deposit into a market to start earning\n </p>\n </div>\n ) : (\n positions.map((position) => <PositionCard key={position.id} position={position} chainId={chainId} />)\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { Loader2, CheckCircle, XCircle, ExternalLink } from 'lucide-react';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { TxState } from '../../types/credit';\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nexport function TxStatus({ state }: { state: TxState }) {\n const { chainId } = useChain();\n\n if (state.status === 'idle') return null;\n\n const explorer = BLOCK_EXPLORERS[chainId] || BLOCK_EXPLORERS.ethereum;\n\n return (\n <div\n className=\"mt-4 p-4 border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {state.status === 'preparing' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Preparing transaction...\n </span>\n </div>\n )}\n\n {state.status === 'signing' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-warning)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Waiting for signature...\n </span>\n </div>\n )}\n\n {state.status === 'broadcasting' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Broadcasting transaction...\n </span>\n </div>\n )}\n\n {state.status === 'submitted' && (\n <div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text)' }}>\n Transaction submitted\n </span>\n </div>\n <a\n href={`${explorer}/tx/${state.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1.5 text-xs hover:opacity-70 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n View on explorer\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n <p\n className=\"text-xs mt-2\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Waiting for on-chain confirmation. Balances will update automatically.\n </p>\n </div>\n )}\n\n {state.status === 'confirmed' && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-sm\">\n <CheckCircle\n className=\"h-4 w-4\"\n style={{ color: 'var(--compass-color-success)' }}\n />\n <span style={{ color: 'var(--compass-color-success)' }}>\n Transaction confirmed\n </span>\n </div>\n <a\n href={`${explorer}/tx/${state.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1.5 text-xs hover:opacity-70 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n View on explorer\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n )}\n\n {state.status === 'failed' && (\n <div className=\"flex items-start gap-3 text-sm\">\n <XCircle\n className=\"h-4 w-4 mt-0.5 shrink-0\"\n style={{ color: 'var(--compass-color-error)' }}\n />\n <span\n className=\"break-all\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n {state.error}\n </span>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, Plus, Minus, ArrowDownLeft, ArrowUpRight, ArrowRight, ArrowLeftRight, Wallet, ChevronDown, TrendingUp, LogOut, Copy, Check, Circle, CheckCircle, ExternalLink } from 'lucide-react';\nimport { WalletStatus, EarnAccountGuard, ActionModal, ChainSwitcher, SwapForm } from '../../shared';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { MarketSelector } from './MarketSelector';\nimport { EarningsModal } from './EarningsModal';\nimport { TxStatus } from '../CreditAccount/TxStatus';\nimport type { TxState } from '../../types/credit';\nimport type { EarnAccountProps, MarketType, MarketOption, Position } from './types';\n\n/** Truncate a number to `decimals` places (floor, no rounding) */\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\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\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\ntype FundStep =\n | 'idle'\n | 'approving'\n | 'signing-approval'\n | 'preparing-transfer'\n | 'signing-transfer'\n | 'executing'\n | 'confirmed'\n | 'failed';\n\nfunction getFundPhase(step: FundStep): 0 | 1 | 2 {\n if (step === 'idle' || step === 'failed') return 0;\n if (step === 'approving' || step === 'signing-approval') return 1;\n return 2;\n}\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 const floored = Math.floor(num * 100) / 100;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(floored);\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 truncate(num, 2);\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 compact = true,\n title = 'Savings Account',\n onDeposit,\n onWithdraw,\n defaultMarketTab = 'variable',\n allowedVariableMarkets,\n allowedFixedMarkets,\n chain: chainProp,\n height = '600px',\n}: EarnAccountProps) {\n const { address, isConnected, login, logout, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { isDeployed } = useEarnAccount();\n const { chainId: contextChainId } = useChain();\n // Use chain prop if provided, otherwise fall back to context\n const CHAIN_ID = chainProp || contextChainId;\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 [lastTxHash, setLastTxHash] = useState<string | null>(null);\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n\n // Fund modal state\n const [isFundModalOpen, setIsFundModalOpen] = useState(false);\n const [fundAmount, setFundAmount] = useState('');\n const [fundAction, setFundAction] = useState<'deposit' | 'withdraw'>('deposit');\n const [fundStep, setFundStep] = useState<FundStep>('idle');\n const [fundTxState, setFundTxState] = useState<TxState>({ status: 'idle' });\n const fundPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n // Action polling refs (deposit/withdraw confirmation)\n const actionPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const actionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Balances breakdown modal state\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n // Market selector state\n const [selectedMarket, setSelectedMarket] = useState<MarketOption | null>(null);\n const [marketTab, setMarketTab] = useState<'variable' | 'fixed'>(defaultMarketTab || 'variable');\n\n // Swap modal state\n const [isSwapModalOpen, setIsSwapModalOpen] = useState(false);\n\n // Earnings modal state\n const [isEarningsModalOpen, setIsEarningsModalOpen] = useState(false);\n\n // Copy address feedback\n const [copiedField, setCopiedField] = useState<string | null>(null);\n const handleCopyAddress = (addr: string, field: string) => {\n navigator.clipboard.writeText(addr);\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 2000);\n };\n\n // Reset selected market when chain changes (markets are chain-specific)\n useEffect(() => {\n setSelectedMarket(null);\n }, [CHAIN_ID]);\n\n // Fund modal polling cleanup\n const clearFundPolling = useCallback(() => {\n if (fundPollRef.current) {\n clearInterval(fundPollRef.current);\n fundPollRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => {\n clearFundPolling();\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n };\n }, [clearFundPolling]);\n\n const handleFundActionChange = (newAction: 'deposit' | 'withdraw') => {\n setFundAction(newAction);\n setFundAmount('');\n setFundStep('idle');\n setFundTxState({ status: 'idle' });\n };\n\n const fundIsBusy =\n fundStep === 'approving' ||\n fundStep === 'signing-approval' ||\n fundStep === 'preparing-transfer' ||\n fundStep === 'signing-transfer' ||\n fundStep === 'executing';\n const fundIsValid = Number(fundAmount) > 0 && !!address && isDeployed;\n const fundPhase = getFundPhase(fundStep);\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 // Fetch wallet (EOA) USDC balance for fund modal deposit\n const walletBalanceQuery = useQuery({\n queryKey: ['walletBalance', CHAIN_ID, address, 'USDC'],\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=USDC`\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 && fundAction === 'deposit',\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 // Derive available tokens from earn account balances (replaces hardcoded SUPPORTED_TOKENS)\n const balanceTokens = Object.keys(balancesQuery.data?.balances || {});\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) + totalDepositedBalance;\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) {\n console.warn('[EarnAccount] Aave markets fetch failed:', response.status, response.statusText);\n return [];\n }\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 const apy = parseFloat(chainData.supplyApy || chainData.supply_apy || '0');\n const tvl = parseFloat(chainData.totalSupplyUsd || chainData.total_supply_usd || chainData.totalLiquidityUsd || chainData.total_liquidity_usd || '0');\n markets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: symbol,\n apy,\n tvl,\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) {\n console.warn('[EarnAccount] Pendle markets fetch failed:', response.status, response.statusText);\n return [];\n }\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 // Handle both camelCase (percentage) and snake_case (decimal) APY formats\n let apy = 0;\n if (m.impliedApy !== undefined) {\n apy = parseFloat(m.impliedApy);\n } else if (m.implied_apy !== undefined) {\n apy = parseFloat(m.implied_apy);\n // If value is < 1, it's a decimal — convert to percentage\n if (apy > 0 && apy < 1) apy = apy * 100;\n } else if (m.apy !== undefined) {\n apy = parseFloat(m.apy);\n }\n return {\n id: `pendle-${m.marketAddress || m.address}`,\n name: m.name || `${m.underlyingSymbol || 'PT'}${expiryStr ? ` ${expiryStr}` : ''}`,\n apy,\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) {\n console.warn('[EarnAccount] Morpho vaults fetch failed:', response.status, response.statusText);\n return [];\n }\n\n const data = await response.json();\n const vaultsList = data.vaults || [];\n\n return vaultsList.map((v: any) => {\n // Handle both camelCase and snake_case, convert decimal to percentage\n let vaultApy = parseFloat(v.apy7d || v.apy_7d || v.apy || '0');\n if (vaultApy > 0 && vaultApy < 1) vaultApy = vaultApy * 100;\n return {\n id: `vault-${v.vaultAddress || v.address}`,\n name: v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`,\n apy: vaultApy,\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 },\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 // Filter markets by selected tab (variable = aave+vaults, fixed = pendle)\n const filteredTabMarkets = allMarkets.filter((m) => {\n if (marketTab === 'variable') {\n if (m.type === 'pendle') return false;\n if (allowedVariableMarkets && !allowedVariableMarkets.includes(m.id)) return false;\n return true;\n } else {\n if (m.type !== 'pendle') return false;\n if (allowedFixedMarkets && !allowedFixedMarkets.includes(m.id)) return false;\n return true;\n }\n });\n\n const isMarketsLoading = aaveMarketsQuery.isLoading || pendleMarketsQuery.isLoading || vaultsQuery.isLoading;\n\n // bestApy is computed after positions (below)\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 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 type: 'deposit' as const,\n amount: parseFloat(d.amount || '0'),\n token: pos.symbol,\n txHash: d.txHash || '',\n timestamp: d.timestamp || undefined,\n })),\n ...(pos.withdrawals || []).map((w: any, i: number) => ({\n id: `wit-${index}-${i}`,\n type: 'withdraw' as const,\n amount: parseFloat(w.amount || '0'),\n token: pos.symbol,\n txHash: w.txHash || '',\n timestamp: w.timestamp || undefined,\n })),\n ].sort((a, b) => {\n if (a.timestamp && b.timestamp) return new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime();\n if (a.timestamp) return -1;\n if (b.timestamp) return 1;\n return 0;\n }),\n };\n });\n\n const totalEarned = positions.reduce((sum, p) => sum + p.performance, 0);\n\n // Weighted average APY across the whole portfolio (idle funds count as 0% APY)\n // Skip dust positions (<$0.50) and cap individual APYs at 100% to prevent outliers\n const bestApy = (() => {\n if (earnAccountTotal > 0 && allPositionData.length > 0) {\n const weightedSum = allPositionData.reduce(\n (sum: number, p: any) => {\n const bal = parseFloat(p.balanceUsd || '0');\n if (bal < 0.50) return sum;\n return sum + bal * Math.min(p.apy || 0, 100);\n },\n 0\n );\n return Math.min(weightedSum / earnAccountTotal, 100);\n }\n if (allMarkets.length > 0) {\n return Math.min(Math.max(...allMarkets.map(m => m.apy || 0)), 100);\n }\n return 0;\n })();\n\n // Check if we need to swap for deposit/withdraw actions\n const needsActionSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n // Earn account USDC balance (for fund modal withdraw)\n const earnUsdcBalance = balancesQuery.data?.balances?.['USDC']?.balance || '0';\n const fundMaxBalance = fundAction === 'deposit' ? (walletBalance || '0') : earnUsdcBalance;\n\n const fundButtonLabel = () => {\n switch (fundStep) {\n case 'approving': return 'Checking approval...';\n case 'signing-approval': return 'Sign Approval (1/2)...';\n case 'preparing-transfer': return fundAction === 'deposit' ? 'Preparing transfer...' : 'Preparing withdrawal...';\n case 'signing-transfer': return fundAction === 'deposit' ? 'Sign Transfer (2/2)...' : 'Sign Withdrawal...';\n case 'executing': return 'Executing...';\n default: return null;\n }\n };\n\n const handleFundSuccess = useCallback((txHash: string) => {\n setFundStep('confirmed');\n setFundTxState({ status: 'submitted', txHash });\n\n clearFundPolling();\n let polls = 0;\n fundPollRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearFundPolling();\n setFundTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearFundPolling();\n setFundTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch {\n // keep polling\n }\n if (polls >= 24) {\n clearFundPolling();\n setFundTxState({ status: 'failed', error: 'Unable to confirm transaction. Please check your wallet.' });\n }\n }, 5_000);\n }, [clearFundPolling, queryClient, CHAIN_ID]);\n\n // Handle fund modal transfer (deposit to or withdraw from savings account)\n const handleFundTransfer = async () => {\n if (!fundIsValid || !signTypedData) return;\n\n setFundTxState({ status: 'idle' });\n\n try {\n await ensureCorrectChain();\n\n if (fundAction === 'deposit') {\n // --- Phase 1: Check & handle token approval ---\n setFundStep('approving');\n setFundTxState({ status: 'preparing' });\n\n const approveResponse = await fetch('/api/compass/transfer/approve', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC' }),\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 && approvalData.transaction) {\n setFundTxState({ status: 'broadcasting' });\n const executeApprovalResponse = await fetch('/api/compass/approval/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, transaction: approvalData.transaction }),\n });\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n } else if (approvalData.eip712) {\n setFundStep('signing-approval');\n setFundTxState({ status: 'signing' });\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setFundTxState({ status: 'broadcasting' });\n\n const executeApprovalResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: approvalData.eip712, signature: approvalSignature }),\n });\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n } else {\n throw new Error('Unable to approve token for transfers');\n }\n }\n\n // --- Phase 2: Prepare & execute transfer ---\n setFundStep('preparing-transfer');\n setFundTxState({ status: 'preparing' });\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC', amount: fundAmount, action: 'DEPOSIT' }),\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 setFundStep('signing-transfer');\n setFundTxState({ status: 'signing' });\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 setFundStep('executing');\n setFundTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: prepareData.eip712, signature }),\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 handleFundSuccess(txHash);\n } else {\n // --- Withdraw: prepare & execute ---\n setFundStep('preparing-transfer');\n setFundTxState({ status: 'preparing' });\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC', amount: fundAmount, action: 'WITHDRAW' }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare withdrawal');\n }\n\n const prepareData = await prepareResponse.json();\n\n setFundStep('signing-transfer');\n setFundTxState({ status: 'signing' });\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 setFundStep('executing');\n setFundTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: prepareData.eip712, signature }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Withdrawal failed');\n }\n\n const { txHash } = await executeResponse.json();\n handleFundSuccess(txHash);\n }\n } catch (error) {\n console.error('Transfer error:', error);\n setFundStep('failed');\n setFundTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Transfer failed',\n });\n }\n };\n\n const handleAction = async () => {\n if (!selectedMarket || !amount || parseFloat(amount) <= 0 || !address || !signTypedData) return;\n\n setIsProcessing(true);\n setError(null);\n setLastTxHash(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 minimal slippage buffer to the deposit amount\n const depositAmount = (parseFloat(estimatedOutput) * 0.99999).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('Confirming on chain...');\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('Confirming on chain...');\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('Confirming on chain...');\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 // Show txHash immediately so user can track on explorer\n setLastTxHash(txHash || null);\n setStatusMessage('submitted');\n setIsProcessing(false);\n setAmount('');\n\n // Poll for on-chain confirmation\n if (txHash) {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n\n actionPollRef.current = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n if (!res.ok) return;\n const data = await res.json();\n if (data.status === 'success') {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n setStatusMessage('confirmed');\n // Refresh balances\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n positionQuery.refetch();\n balancesQuery.refetch();\n const delays = [5_000, 15_000, 30_000];\n for (const d of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, d);\n }\n } else if (data.status === 'reverted') {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n setStatusMessage('');\n setLastTxHash(null);\n setError('Transaction reverted on-chain');\n }\n } catch { /* keep polling */ }\n }, 2000);\n // Stop polling after 2 minutes\n actionTimeoutRef.current = setTimeout(() => {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n }, 120_000);\n }\n\n if (isDeposit) {\n onDeposit?.(selectedMarket, parseFloat(amount), txHash || '');\n } else {\n onWithdraw?.(selectedMarket, parseFloat(amount), txHash || '');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Transaction failed');\n setStatusMessage('');\n setLastTxHash(null);\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 return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {!chainProp && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <EarnAccountGuard>\n {/* ========== TOP SECTION: APY Badge + Balance + Earned ========== */}\n <div\n className=\"flex flex-col items-center text-center\"\n style={{\n padding: compact ? '16px 16px 12px' : '20px 20px 16px',\n }}\n >\n {/* APY Badge + Logout Row */}\n <div className=\"flex items-center justify-center\" style={{ width: '100%', marginBottom: '12px', gap: '8px' }}>\n {showInterestRate && bestApy > 0 && (\n <div\n className=\"flex items-center\"\n style={{\n gap: '6px',\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '5px 12px',\n fontSize: '0.8125rem',\n fontWeight: 600,\n }}\n >\n <TrendingUp size={14} />\n Earning {truncate(bestApy, 2)}% APY\n </div>\n )}\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n aria-label={`Total balance: ${formatCurrency(earnAccountTotal)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n {balancesQuery.isLoading && !balancesQuery.data ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '200px', height: compact ? '42px' : '52px', borderRadius: 'var(--compass-border-radius-md)', margin: '0 auto' }} />\n ) : (\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1.75rem' : '2rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatCurrency(earnAccountTotal)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n )}\n </button>\n\n {/* Earned callout — green dot + amount, like reference */}\n <button\n onClick={() => positions.length > 0 && setIsEarningsModalOpen(true)}\n disabled={positions.length === 0}\n className=\"flex items-center justify-center\"\n style={{\n gap: '6px',\n marginTop: '10px',\n border: 'none',\n background: 'none',\n padding: '4px 0',\n minHeight: '28px',\n }}\n >\n {positionQuery.isLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '120px', height: '16px' }} />\n ) : totalEarned !== 0 ? (\n <>\n <span style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n flexShrink: 0,\n }} />\n <span\n className=\"font-semibold\"\n style={{\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n fontSize: '0.875rem',\n }}\n >\n {formatCurrency(Math.abs(totalEarned))} Earned\n </span>\n {positions.length > 0 && (\n <>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n · {positions.length} position{positions.length > 1 ? 's' : ''}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>›</span>\n </>\n )}\n </>\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n {positions.length > 0\n ? <>{positions.length} active position{positions.length > 1 ? 's' : ''} <span>›</span></>\n : 'No active positions'}\n </span>\n )}\n </button>\n\n {/* Quick Action Buttons — inline pills */}\n {(balanceTokens.length > 0 || showTopUpButton) && (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '12px' }}>\n {showTopUpButton && (\n <button\n onClick={() => setIsFundModalOpen(true)}\n aria-label=\"Add money\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balanceTokens.length > 0 && (\n <button\n onClick={() => setIsSwapModalOpen(true)}\n aria-label=\"Swap tokens\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* ========== BOTTOM SECTION: Market + Deposit/Withdraw ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '10px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '16px 16px 12px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n {/* Market Type Toggle */}\n <div\n className=\"flex\"\n role=\"tablist\"\n aria-label=\"Market type\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '2px',\n }}\n >\n {(['variable', 'fixed'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => { setMarketTab(tab); setSelectedMarket(null); }}\n role=\"tab\"\n aria-selected={marketTab === tab}\n className=\"flex-1 flex items-center justify-center font-medium\"\n style={{\n backgroundColor: marketTab === tab ? 'var(--compass-color-primary-muted)' : 'transparent',\n color: marketTab === tab ? 'var(--compass-color-primary)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: '4px',\n minHeight: '32px',\n fontSize: '0.8125rem',\n transition: 'all 200ms ease',\n border: 'none',\n boxShadow: marketTab === tab ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',\n textTransform: 'capitalize',\n }}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Market Selector */}\n <MarketSelector\n markets={filteredTabMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={setSelectedMarket}\n isLoading={isMarketsLoading}\n />\n\n {/* Deposit / Withdraw Toggle */}\n <div\n className=\"flex\"\n role=\"tablist\"\n aria-label=\"Deposit or withdraw\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '3px',\n }}\n >\n {(['deposit', 'withdraw'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => { setActiveTab(tab); setSelectedToken('USDC'); setError(null); }}\n role=\"tab\"\n aria-selected={activeTab === tab}\n className=\"flex-1 flex items-center justify-center font-semibold\"\n style={{\n backgroundColor: activeTab === tab ? 'var(--compass-color-surface-hover, var(--compass-color-surface))' : 'transparent',\n color: activeTab === tab ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '6px',\n minHeight: '36px',\n gap: '6px',\n fontSize: '0.875rem',\n transition: 'all 200ms ease',\n border: 'none',\n boxShadow: activeTab === tab ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',\n }}\n >\n {tab === 'deposit' ? <Plus size={15} /> : <Minus size={15} />}\n {tab === 'deposit' ? 'Deposit' : 'Withdraw'}\n </button>\n ))}\n </div>\n\n {/* Amount Input */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px 16px',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '1.125rem', fontWeight: 300 }}>$</span>\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-bold bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.125rem',\n letterSpacing: '-0.02em',\n minWidth: 0,\n border: 'none',\n }}\n />\n {/* Token Pill */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={isProcessing}\n aria-label={`Select token, currently ${selectedToken}`}\n aria-expanded={isTokenDropdownOpen}\n className=\"flex items-center font-semibold\"\n style={{\n backgroundColor: 'var(--compass-color-surface-hover, var(--compass-color-surface))',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '6px 10px',\n minHeight: '32px',\n gap: '3px',\n fontSize: '0.8125rem',\n border: '1.5px solid var(--compass-color-border)',\n transition: 'all 200ms ease',\n }}\n >\n {selectedToken}\n <ChevronDown size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-2 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n minWidth: '120px',\n overflow: 'hidden',\n }}\n >\n {balanceTokens.map((token) => (\n <button\n key={token}\n onClick={() => { setSelectedToken(token); setIsTokenDropdownOpen(false); setError(null); }}\n className=\"w-full text-left font-medium\"\n style={{\n padding: '12px 16px',\n minHeight: '44px',\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: '0.875rem',\n border: 'none',\n transition: 'background-color 150ms ease',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Available + MAX */}\n <div className=\"flex items-center justify-between\" style={{ marginTop: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>\n Available\n </span>\n <button\n onClick={() => setAmount(truncate(maxAmount, 2))}\n disabled={isProcessing}\n aria-label=\"Set maximum amount\"\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-primary)', fontSize: '0.8125rem', background: 'none', border: 'none', padding: 0 }}\n >\n {truncate(maxAmount, 2)} {activeTab === 'deposit' ? selectedToken : (selectedMarket?.underlyingToken || '—')}\n </button>\n </div>\n\n </div>\n\n {/* Error */}\n {error && (\n <div\n className=\"flex items-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: '12px 14px',\n gap: '8px',\n fontSize: '0.875rem',\n }}\n >\n {error}\n </div>\n )}\n\n {/* CTA Button */}\n <button\n onClick={!isConnected && login ? login : handleAction}\n disabled={isConnected && (isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount)}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n transition: 'all 200ms ease',\n border: 'none',\n opacity: isConnected && (isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount) ? 0.4 : 1,\n }}\n >\n {!isConnected ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Wallet size={18} />\n Connect Wallet\n </span>\n ) : isProcessing ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '4px', flexDirection: 'column' }}>\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Loader2 size={16} className=\"animate-spin\" />\n Processing...\n </span>\n {statusMessage && (\n <span style={{ fontSize: '0.7rem', opacity: 0.7, fontWeight: 400 }}>\n {statusMessage}\n </span>\n )}\n </span>\n ) : !selectedMarket ? (\n 'Select a market'\n ) : !amount || parseFloat(amount) <= 0 ? (\n 'Enter an amount'\n ) : parseFloat(amount) > maxAmount ? (\n 'Insufficient balance'\n ) : needsActionSwap ? (\n activeTab === 'deposit' ? 'Swap & Deposit' : 'Withdraw & Swap'\n ) : (\n activeTab === 'deposit' ? 'Deposit' : 'Withdraw'\n )}\n </button>\n\n {/* Transaction status with explorer link */}\n {lastTxHash && !error && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n {statusMessage === 'confirmed' ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: statusMessage === 'confirmed' ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {statusMessage === 'confirmed' ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[CHAIN_ID] || BLOCK_EXPLORERS.ethereum}/tx/${lastTxHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center hover:opacity-70 transition-opacity\"\n style={{ gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n </div>\n\n <WidgetFooter />\n\n </EarnAccountGuard>\n\n {/* Fund Modal — matches Credit TopUpModal design */}\n <ActionModal\n isOpen={isFundModalOpen}\n onClose={() => {\n setIsFundModalOpen(false);\n setFundAmount('');\n setFundAction('deposit');\n setFundStep('idle');\n setFundTxState({ status: 'idle' });\n }}\n title=\"Transfer Funds\"\n >\n <div className=\"space-y-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((tab) => (\n <button\n key={tab}\n onClick={() => handleFundActionChange(tab)}\n disabled={fundIsBusy}\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 fundAction === tab ? 'var(--compass-color-surface)' : 'transparent',\n color:\n fundAction === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n border: 'none',\n }}\n >\n {tab === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : (\n <ArrowUpRight size={14} />\n )}\n {tab}\n </button>\n ))}\n </div>\n\n {/* Step indicator (deposit only — 2 phases) */}\n {(fundIsBusy || fundStep === 'confirmed') && fundAction === 'deposit' && (\n <div\n className=\"flex gap-3 p-3 text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <FundStepIndicator\n number={1}\n label=\"Approve\"\n state={fundPhase > 1 ? 'done' : fundPhase === 1 ? 'active' : 'pending'}\n />\n <FundStepIndicator\n number={2}\n label=\"Transfer\"\n state={fundStep === 'confirmed' ? 'done' : fundPhase > 1 ? 'active' : 'pending'}\n />\n </div>\n )}\n\n {/* Amount input */}\n <div>\n <label\n className=\"block text-sm mb-1.5\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={fundAmount}\n onChange={(e) => { setFundAmount(e.target.value); setFundTxState({ status: 'idle' }); }}\n disabled={fundIsBusy}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none disabled:opacity-50\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n USDC\n </span>\n </div>\n {fundMaxBalance && fundMaxBalance !== '0' && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available:{' '}\n <button\n onClick={() => setFundAmount(truncate(parseFloat(fundMaxBalance), 2))}\n disabled={fundIsBusy}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: 'inherit' }}\n >\n {truncate(parseFloat(fundMaxBalance), 2)} USDC\n </button>\n </p>\n )}\n </div>\n\n {/* Description */}\n {!fundIsBusy && fundStep !== 'confirmed' && fundStep !== 'failed' && fundTxState.status === 'idle' && (\n <p\n className=\"text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {fundAction === 'deposit'\n ? 'Approves the token transfer, then transfers USDC from your wallet into your savings account. Requires 2 signatures.'\n : 'Transfers USDC from your savings account back to your wallet. Requires 1 signature.'}\n </p>\n )}\n\n <button\n onClick={handleFundTransfer}\n disabled={!fundIsValid || fundIsBusy}\n className=\"w-full py-3 px-4 text-sm font-medium 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-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'all 200ms ease',\n border: 'none',\n }}\n >\n {fundIsBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {fundButtonLabel()}\n </>\n ) : (\n <>\n <ArrowRight className=\"h-4 w-4\" />\n {fundAction === 'deposit' ? 'Transfer to Savings Account' : 'Withdraw to Wallet'}\n </>\n )}\n </button>\n\n <TxStatus state={fundTxState} />\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\" style={{ gap: '12px' }}>\n {/* Address rows */}\n {address && (\n <button\n onClick={() => handleCopyAddress(address, 'wallet')}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '10px 16px',\n border: '1.5px solid var(--compass-color-border)',\n width: '100%',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Wallet</span>\n <span className=\"flex items-center\" style={{ gap: '6px', color: 'var(--compass-color-text)', fontSize: '0.8125rem', fontFamily: 'monospace' }}>\n {address.slice(0, 6)}...{address.slice(-4)}\n {copiedField === 'wallet' ? <Check size={13} style={{ color: 'var(--compass-color-success)' }} /> : <Copy size={13} style={{ color: 'var(--compass-color-text-tertiary)' }} />}\n </span>\n </button>\n )}\n {balancesQuery.data?.earnAccountAddress && (\n <button\n onClick={() => handleCopyAddress(balancesQuery.data!.earnAccountAddress, 'earn')}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '10px 16px',\n border: '1.5px solid var(--compass-color-border)',\n width: '100%',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Product Account</span>\n <span className=\"flex items-center\" style={{ gap: '6px', color: 'var(--compass-color-text)', fontSize: '0.8125rem', fontFamily: 'monospace' }}>\n {balancesQuery.data.earnAccountAddress.slice(0, 6)}...{balancesQuery.data.earnAccountAddress.slice(-4)}\n {copiedField === 'earn' ? <Check size={13} style={{ color: 'var(--compass-color-success)' }} /> : <Copy size={13} style={{ color: 'var(--compass-color-text-tertiary)' }} />}\n </span>\n </button>\n )}\n\n {balancesQuery.data?.balances && Object.keys(balancesQuery.data.balances).length > 0 ? (\n <>\n {Object.entries(balancesQuery.data.balances).map(([symbol, data]) => (\n <div\n key={symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: 1, marginRight: '12px' }}>\n {symbol}\n </span>\n <div className=\"flex flex-col items-end\" style={{ flexShrink: 0 }}>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', whiteSpace: 'nowrap' }}>\n {truncate(parseFloat(data.balance), 2)}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem', whiteSpace: 'nowrap' }}>\n {formatCurrency(data.usdValue)}\n </span>\n </div>\n </div>\n ))}\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>\n Total\n </span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatCurrency(earnAccountTotalUsd)}\n </span>\n </div>\n </>\n ) : (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No tokens in account\n </p>\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem', margin: 0 }}>\n Transfer tokens to start earning\n </p>\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Swap Modal */}\n <ActionModal\n isOpen={isSwapModalOpen}\n onClose={() => setIsSwapModalOpen(false)}\n title=\"Swap Tokens\"\n >\n <SwapForm\n availableFromTokens={balanceTokens}\n balances={Object.fromEntries(\n Object.entries(balancesQuery.data?.balances || {}).map(([token, data]) => [token, data.balance])\n )}\n onSwapSuccess={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n }, 5000);\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n }, 15000);\n }}\n />\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 chainId={CHAIN_ID}\n />\n </div>{/* end scrollable content area */}\n </div>\n );\n}\n\nfunction FundStepIndicator({\n number,\n label,\n state,\n}: {\n number: number;\n label: string;\n state: 'pending' | 'active' | 'done';\n}) {\n const iconColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-primary)'\n : 'var(--compass-color-text-tertiary)';\n\n const textColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-tertiary)';\n\n return (\n <div className=\"flex items-center gap-1.5 flex-1\">\n {state === 'done' ? (\n <Check className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n ) : state === 'active' ? (\n <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin\" style={{ color: iconColor }} />\n ) : (\n <Circle className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n )}\n <span style={{ color: textColor }}>\n {number}. {label}\n </span>\n </div>\n );\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../../contexts/WalletContext';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { CreditPositionsResponse } from '../../../types/credit';\n\nexport function useCreditPositions() {\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n const { isDeployed } = useCreditAccount();\n\n return useQuery<CreditPositionsResponse>({\n queryKey: ['creditPositions', address, chainId],\n queryFn: async () => {\n const res = await fetch(\n `/api/compass/credit/positions?owner=${address}&chain=${chainId}`,\n );\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || 'Failed to fetch credit positions');\n }\n return res.json();\n },\n enabled: !!address && isDeployed,\n staleTime: 30_000,\n refetchInterval: 30_000,\n refetchOnMount: true,\n });\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { TokenBalance } from '../../../types/credit';\n\nexport function useCreditBalances() {\n const { chainId } = useChain();\n const { creditAccountAddress, isDeployed } = useCreditAccount();\n\n return useQuery<TokenBalance[]>({\n queryKey: ['creditBalances', creditAccountAddress, chainId],\n queryFn: async () => {\n const res = await fetch(\n `/api/compass/credit/balances?owner=${creditAccountAddress}&chain=${chainId}`,\n );\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || 'Failed to fetch credit balances');\n }\n return res.json();\n },\n enabled: !!creditAccountAddress && isDeployed,\n staleTime: 30_000,\n refetchInterval: 30_000,\n refetchOnMount: true,\n });\n}\n","// Types for credit positions (matches SDK response shapes)\n\nexport interface CreditEvent {\n eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation';\n blockNumber: number;\n blockTimestamp: string;\n transactionHash: string;\n amount: string;\n symbol: string;\n}\n\nexport interface CollateralPosition {\n token: string;\n symbol: string;\n amountSupplied: string | null;\n usdValue: string | null;\n supplyApy: string | null;\n maxLtv: string | null;\n totalDeposited?: string | null;\n totalWithdrawn?: string | null;\n interestEarned?: string | null;\n events?: CreditEvent[];\n}\n\nexport interface DebtPosition {\n token: string;\n symbol: string;\n amountBorrowed: string | null;\n usdValue: string | null;\n borrowApy: string | null;\n totalBorrowed?: string | null;\n totalRepaid?: string | null;\n interestPaid?: string | null;\n events?: CreditEvent[];\n}\n\nexport interface AccountSummary {\n healthFactor: string;\n totalCollateralUsd: string;\n totalDebtUsd: string;\n availableBorrowsUsd: string;\n ltv: string;\n emodeCategoryId?: number;\n emodeLabel?: string | null;\n}\n\nexport interface CreditPositionsResponse {\n collateralPositions: CollateralPosition[];\n debtPositions: DebtPosition[];\n accountSummary: AccountSummary;\n totalUsdValue?: string | null;\n}\n\nexport interface TokenBalance {\n tokenSymbol: string;\n tokenAddress: string;\n amount: string;\n decimals: number;\n}\n\nexport type TxStatus = 'idle' | 'preparing' | 'signing' | 'broadcasting' | 'submitted' | 'confirmed' | 'failed';\n\nexport type TxState =\n | { status: 'idle' }\n | { status: 'preparing' }\n | { status: 'signing' }\n | { status: 'broadcasting' }\n | { status: 'submitted'; txHash: string }\n | { status: 'confirmed'; txHash: string }\n | { status: 'failed'; error: string };\n\nexport interface BundleAction {\n actionType: string;\n [key: string]: unknown;\n}\n\nexport const CREDIT_TOKENS = ['USDC', 'WETH', 'USDT', 'DAI', 'WBTC'] as const;\nexport type CreditToken = (typeof CREDIT_TOKENS)[number];\n","import { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditPositions } from './useCreditPositions';\nimport { CREDIT_TOKENS } from '../../../types/credit';\n\n// Fallback prices used while the API request is in flight\nconst STABLECOIN_FALLBACKS: Record<string, number> = {\n USDC: 1,\n USDT: 1,\n DAI: 1,\n GHO: 1,\n};\n\nexport function useTokenPrices(): Record<string, number> {\n const { chainId } = useChain();\n const { data: positionsData } = useCreditPositions();\n\n const { data: apiPrices } = useQuery({\n queryKey: ['tokenPrices', chainId],\n queryFn: async () => {\n const tokens = CREDIT_TOKENS.join(',');\n const res = await fetch(`/api/compass/token/prices?chain=${chainId}&tokens=${tokens}`);\n if (!res.ok) return {};\n const data = await res.json();\n return (data.prices || {}) as Record<string, number>;\n },\n staleTime: 60 * 1000,\n refetchInterval: 60 * 1000,\n });\n\n const prices: Record<string, number> = { ...STABLECOIN_FALLBACKS };\n\n // Override with API prices\n if (apiPrices) {\n Object.assign(prices, apiPrices);\n }\n\n // Override with position-derived prices (most accurate for user's actual positions)\n if (positionsData) {\n for (const pos of positionsData.collateralPositions) {\n if (pos.usdValue && pos.amountSupplied) {\n const usd = parseFloat(pos.usdValue);\n const amount = parseFloat(pos.amountSupplied);\n if (amount > 0 && !isNaN(usd)) {\n prices[pos.symbol] = usd / amount;\n }\n }\n }\n for (const pos of positionsData.debtPositions) {\n if (pos.usdValue && pos.amountBorrowed) {\n const usd = parseFloat(pos.usdValue);\n const amount = parseFloat(pos.amountBorrowed);\n if (amount > 0 && !isNaN(usd)) {\n prices[pos.symbol] = usd / amount;\n }\n }\n }\n }\n\n return prices;\n}\n\nexport function formatUsdEstimate(\n amount: string,\n token: string,\n prices: Record<string, number>,\n): string | null {\n const num = Number(amount);\n if (!num || num <= 0) return null;\n const price = prices[token];\n if (price == null) return null;\n const usd = num * price;\n return `$${usd.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n}\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../../contexts/WalletContext';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { TxState, BundleAction } from '../../../types/credit';\n\nexport function useCreditBundle() {\n const { address, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { chainId, chain } = useChain();\n const { creditAccountAddress, isDeployed } = useCreditAccount();\n const queryClient = useQueryClient();\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n const pollIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearPolling = useCallback(() => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n pollIntervalRef.current = null;\n }\n }, []);\n\n // Clear polling interval on unmount\n useEffect(() => {\n return () => clearPolling();\n }, [clearPolling]);\n\n const executeBundle = useCallback(\n async (actions: BundleAction[], _signTitle?: string, _description?: string) => {\n if (!address || !isDeployed) return;\n\n setTxState({ status: 'preparing' });\n\n try {\n // Ensure wallet is on the correct chain\n if (switchChain && walletChainId !== chain.viemChain.id) {\n await switchChain(chain.viemChain.id);\n }\n\n const prepareResponse = await fetch('/api/compass/credit/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n actions,\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 } =\n await prepareResponse.json();\n\n setTxState({ status: 'signing' });\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/credit/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 creditAccountAddress,\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 setTxState({ status: 'submitted', txHash });\n\n // Poll for tx confirmation every 5s for up to 2 minutes.\n // Check actual tx receipt via server-side RPC before marking as confirmed.\n clearPolling();\n let polls = 0;\n pollIntervalRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['creditPositions'] });\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearPolling();\n setTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch {\n // Server unreachable, keep polling\n }\n if (polls >= 24) {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n }\n }, 5_000);\n } catch (error) {\n console.error('Bundle error:', error);\n setTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Bundle failed',\n });\n }\n },\n [address, isDeployed, creditAccountAddress, chainId, chain, signTypedData, switchChain, walletChainId, queryClient, clearPolling],\n );\n\n const resetState = useCallback(() => {\n clearPolling();\n setTxState({ status: 'idle' });\n }, [clearPolling]);\n\n return { txState, executeBundle, resetState };\n}\n","import { useCallback } from 'react';\nimport { useCreditBundle } from './useCreditBundle';\nimport type { CreditToken } from '../../../types/credit';\n\ninterface BorrowParams {\n token: CreditToken;\n amount: number;\n}\n\nexport function useBorrow() {\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const executeBorrow = useCallback(\n async (params: BorrowParams) => {\n await executeBundle([\n { actionType: 'CREDIT_BORROW', token: params.token, amount: params.amount },\n ]);\n },\n [executeBundle],\n );\n\n return { txState, executeBorrow, resetState };\n}\n","import { useCallback } from 'react';\nimport { useCreditBundle } from './useCreditBundle';\nimport type { CreditToken } from '../../../types/credit';\n\ninterface RepayParams {\n token: CreditToken;\n amount: number;\n}\n\nexport function useRepay() {\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const executeRepay = useCallback(\n async (params: RepayParams) => {\n await executeBundle([\n { actionType: 'CREDIT_REPAY', token: params.token, amount: params.amount },\n ]);\n },\n [executeBundle],\n );\n\n return { txState, executeRepay, resetState };\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, AlertCircle, ChevronRight, Plus, ChevronDown, ArrowDownLeft, ArrowUpRight, ExternalLink } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { useCreditPositions, useTokenPrices } from './hooks';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { CollateralPosition, DebtPosition, CreditToken, CreditEvent } from '../../types/credit';\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatUsd(value: string | null): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n const floored = floorTo(num, 2);\n return `$${floored.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n}\n\nfunction formatNumber(value: string | null, decimals = 2): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n if (Math.abs(num) < 0.01 && num !== 0) return '<0.01';\n const floored = floorTo(num, decimals);\n return floored.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: decimals });\n}\n\nfunction formatApy(value: string | null): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n return `${floorTo(num, 2).toFixed(2)}%`;\n}\n\nfunction healthFactorColor(hf: string): string {\n const num = parseFloat(hf);\n if (isNaN(num)) return 'var(--compass-color-text-secondary)';\n if (num > 2) return 'var(--compass-color-success)';\n if (num >= 1.5) return 'var(--compass-color-warning)';\n return 'var(--compass-color-error)';\n}\n\nfunction formatHealthFactor(hf: string): string {\n const num = parseFloat(hf);\n if (isNaN(num)) return '-';\n if (num > 10000) return 'Safe';\n return num.toFixed(2);\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\nconst EVENT_CONFIG: Record<string, { label: string; color: string; mutedColor: string; icon: 'in' | 'out'; sign: string }> = {\n supply: { label: 'Supply', color: 'var(--compass-color-success)', mutedColor: 'var(--compass-color-success-muted)', icon: 'in', sign: '+' },\n withdraw: { label: 'Withdraw', color: 'var(--compass-color-warning)', mutedColor: 'var(--compass-color-warning-muted)', icon: 'out', sign: '-' },\n borrow: { label: 'Borrow', color: 'var(--compass-color-success)', mutedColor: 'var(--compass-color-success-muted)', icon: 'in', sign: '+' },\n repay: { label: 'Repay', color: 'var(--compass-color-warning)', mutedColor: 'var(--compass-color-warning-muted)', icon: 'out', sign: '-' },\n liquidation: { label: 'Liquidation', color: 'var(--compass-color-error)', mutedColor: 'var(--compass-color-error-muted, rgba(239,68,68,0.1))', icon: 'out', sign: '-' },\n};\n\nfunction CreditEventHistory({ events, tokenSymbol }: { events: CreditEvent[]; tokenSymbol: string }) {\n const [isExpanded, setIsExpanded] = useState(false);\n const { chainId } = useChain();\n\n if (!events || events.length === 0) return null;\n\n const sorted = [...events].sort((a, b) => b.blockNumber - a.blockNumber);\n\n return (\n <div className=\"flex flex-col w-full\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n History ({sorted.length})\n </span>\n <ChevronDown\n size={14}\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-1 max-h-48 overflow-y-auto\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n scrollbarWidth: 'none',\n }}\n >\n {sorted.map((event, index) => {\n const config = EVENT_CONFIG[event.eventType] || EVENT_CONFIG.supply;\n const timestamp = event.blockTimestamp ? new Date(event.blockTimestamp) : null;\n return (\n <div\n key={`${event.transactionHash}-${index}`}\n className=\"flex items-center justify-between px-3 py-2\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderTop: index > 0 ? '1.5px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"p-1\"\n style={{\n backgroundColor: config.mutedColor,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n {config.icon === 'in' ? (\n <ArrowDownLeft size={10} style={{ color: config.color }} />\n ) : (\n <ArrowUpRight size={10} style={{ color: config.color }} />\n )}\n </div>\n <div className=\"flex flex-col\">\n <span\n className=\"text-[11px] font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {config.label}\n </span>\n <span\n className=\"text-[10px]\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {timestamp ? timestamp.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' }) : `Block #${event.blockNumber.toLocaleString()}`}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-[11px] font-mono font-medium\"\n style={{ color: config.color }}\n >\n {config.sign}{floorTo(parseFloat(event.amount), 2).toFixed(2)} {tokenSymbol}\n </span>\n <a\n href={getExplorerUrl(event.transactionHash, chainId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-0.5 hover:opacity-70 transition-opacity\"\n style={{ borderRadius: 'var(--compass-border-radius-sm)' }}\n >\n <ExternalLink\n size={10}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </a>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\ninterface PositionsViewProps {\n allowedCollateralTokens?: string[];\n allowedDebtTokens?: string[];\n onBorrow: (token?: CreditToken) => void;\n onRepay: (token?: CreditToken) => void;\n onSupply: (token?: CreditToken) => void;\n onWithdraw: (token?: CreditToken) => void;\n}\n\nexport function PositionsView({ allowedCollateralTokens, allowedDebtTokens, onBorrow, onRepay, onSupply, onWithdraw }: PositionsViewProps) {\n const { data, isLoading, error } = useCreditPositions();\n const tokenPrices = useTokenPrices();\n const [showBorrowableModal, setShowBorrowableModal] = useState(false);\n const [showCollateralModal, setShowCollateralModal] = useState(false);\n const [showDebtModal, setShowDebtModal] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2\n className=\"h-5 w-5 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span\n className=\"ml-3 text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Loading positions...\n </span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"text-center py-8\">\n <AlertCircle\n className=\"h-8 w-8 mx-auto mb-3\"\n style={{ color: 'var(--compass-color-error)', opacity: 0.6 }}\n />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {error instanceof Error ? error.message : 'Failed to load positions'}\n </p>\n </div>\n );\n }\n\n if (!data) return null;\n\n const { collateralPositions, debtPositions, accountSummary } = data;\n const visibleCollateral = collateralPositions.filter(\n (p) => p.usdValue !== null && parseFloat(p.usdValue) >= 0.01\n );\n const hasPositions = visibleCollateral.length > 0 || debtPositions.length > 0;\n\n const totalCollateralUsd = formatUsd(accountSummary.totalCollateralUsd);\n const totalDebtUsd = formatUsd(accountSummary.totalDebtUsd);\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {/* Health Factor & Available to Borrow */}\n {hasPositions && (\n <div\n className=\"p-3 flex items-center gap-3\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div>\n <p\n className=\"text-[10px] uppercase tracking-wide mb-0.5\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Health Factor\n </p>\n <p\n className=\"text-lg font-bold tabular-nums\"\n style={{ color: healthFactorColor(accountSummary.healthFactor) }}\n >\n {formatHealthFactor(accountSummary.healthFactor)}\n </p>\n </div>\n <div\n style={{\n width: '1px',\n height: '32px',\n backgroundColor: 'var(--compass-color-border)',\n }}\n />\n <button\n type=\"button\"\n onClick={() => setShowBorrowableModal(true)}\n className=\"flex-1 flex items-center justify-between text-left transition-opacity hover:opacity-80\"\n >\n <div>\n <p\n className=\"text-[10px] uppercase tracking-wide mb-0.5\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available to Borrow\n </p>\n <p\n className=\"text-lg font-bold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(accountSummary.availableBorrowsUsd)}\n </p>\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {/* Collateral row */}\n <button\n type=\"button\"\n onClick={() => setShowCollateralModal(true)}\n className=\"w-full p-3 flex items-center justify-between transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div className=\"flex flex-col items-start gap-0.5\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Collateral\n </span>\n <span\n className=\"text-lg font-semibold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {totalCollateralUsd}\n </span>\n {visibleCollateral.length > 0 && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {visibleCollateral.map((p) => p.symbol).join(', ')}\n </span>\n )}\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n\n {/* Debt row */}\n <button\n type=\"button\"\n onClick={() => setShowDebtModal(true)}\n className=\"w-full p-3 flex items-center justify-between transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div className=\"flex flex-col items-start gap-0.5\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt\n </span>\n <span\n className=\"text-lg font-semibold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {totalDebtUsd}\n </span>\n {debtPositions.length > 0 && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {debtPositions.map((p) => p.symbol).join(', ')}\n </span>\n )}\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n </div>\n\n {/* Collateral Positions Modal */}\n <ActionModal\n isOpen={showCollateralModal}\n onClose={() => setShowCollateralModal(false)}\n title=\"Collateral Positions\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <button\n type=\"button\"\n onClick={() => { setShowCollateralModal(false); onSupply(); }}\n className=\"w-full flex items-center justify-center gap-1.5 transition-opacity hover:opacity-80\"\n style={{\n padding: '10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--compass-color-primary)',\n border: '1.5px solid var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-xl)',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n }}\n >\n <Plus size={14} />\n Supply New Collateral\n </button>\n\n {visibleCollateral.length > 0 ? (\n visibleCollateral.map((position) => (\n <CollateralPositionCard\n key={position.token}\n position={position}\n onSupply={() => { setShowCollateralModal(false); onSupply(position.symbol as CreditToken); }}\n onWithdraw={() => { setShowCollateralModal(false); onWithdraw(position.symbol as CreditToken); }}\n />\n ))\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No collateral supplied.\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Debt Positions Modal */}\n <ActionModal\n isOpen={showDebtModal}\n onClose={() => setShowDebtModal(false)}\n title=\"Debt Positions\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <button\n type=\"button\"\n onClick={() => { setShowDebtModal(false); onBorrow(); }}\n className=\"w-full flex items-center justify-center gap-1.5 transition-opacity hover:opacity-80\"\n style={{\n padding: '10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--compass-color-primary)',\n border: '1.5px solid var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-xl)',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n }}\n >\n <Plus size={14} />\n Borrow New Token\n </button>\n\n {debtPositions.length > 0 ? (\n debtPositions.map((position) => (\n <DebtPositionCard\n key={position.token}\n position={position}\n onRepay={() => { setShowDebtModal(false); onRepay(position.symbol as CreditToken); }}\n onBorrow={() => { setShowDebtModal(false); onBorrow(position.symbol as CreditToken); }}\n />\n ))\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No debt positions.\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Available to Borrow Modal */}\n <ActionModal\n isOpen={showBorrowableModal}\n onClose={() => setShowBorrowableModal(false)}\n title=\"Available to Borrow\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <div\n className=\"text-center py-2\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n <p\n className=\"text-2xl font-bold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(accountSummary.availableBorrowsUsd)}\n </p>\n </div>\n\n {(() => {\n const availableUsd = parseFloat(accountSummary.availableBorrowsUsd) || 0;\n if (availableUsd <= 0) return (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No borrowing capacity available.\n </div>\n );\n const tokens = Object.entries(tokenPrices)\n .filter(([symbol, price]) => price > 0 && (!allowedDebtTokens || allowedDebtTokens.includes(symbol)))\n .map(([symbol, price]) => ({\n symbol,\n maxAmount: availableUsd / price,\n price,\n }))\n .sort((a, b) => b.maxAmount * b.price - a.maxAmount * a.price);\n if (tokens.length === 0) return null;\n return (\n <>\n <p\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Max borrowable per token\n </p>\n {tokens.map(({ symbol, maxAmount }) => (\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: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {symbol}\n </span>\n <span\n className=\"font-mono tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {floorTo(maxAmount, 2).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n </div>\n ))}\n </>\n );\n })()}\n </div>\n </ActionModal>\n </div>\n );\n}\n\nfunction CollateralPositionCard({\n position,\n onSupply,\n onWithdraw,\n}: {\n position: CollateralPosition;\n onSupply: () => void;\n onWithdraw: () => void;\n}) {\n return (\n <div\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n {/* Token name + action pills */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {position.symbol}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n onClick={onSupply}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Supply\n </button>\n <button\n type=\"button\"\n onClick={onWithdraw}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Withdraw\n </button>\n </div>\n </div>\n\n {/* Amount + USD on one line */}\n <div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '1rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.amountSupplied)}{' '}\n <span style={{ fontSize: '0.8125rem', fontWeight: 400, color: 'var(--compass-color-text-secondary)' }}>\n {position.symbol}\n </span>\n </span>\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-tertiary)' }}>\n {formatUsd(position.usdValue)}\n </span>\n </div>\n\n {/* Stats rows */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Supply APY</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-success)' }}>\n {formatApy(position.supplyApy)}\n </span>\n </div>\n {position.maxLtv !== null && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Max LTV</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-text)' }}>\n {parseFloat(position.maxLtv).toFixed(0)}%\n </span>\n </div>\n )}\n {position.interestEarned !== null && position.interestEarned !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Interest earned</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-success)' }}>\n {formatNumber(position.interestEarned)} {position.symbol}\n </span>\n </div>\n )}\n </div>\n\n {position.events && position.events.length > 0 && (\n <CreditEventHistory events={position.events} tokenSymbol={position.symbol} />\n )}\n </div>\n );\n}\n\nfunction DebtPositionCard({\n position,\n onRepay,\n onBorrow,\n}: {\n position: DebtPosition;\n onRepay: () => void;\n onBorrow: () => void;\n}) {\n return (\n <div\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n {/* Token name + action pills */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {position.symbol}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n onClick={onBorrow}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Borrow\n </button>\n <button\n type=\"button\"\n onClick={onRepay}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Repay\n </button>\n </div>\n </div>\n\n {/* Amount + USD on one line */}\n <div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '1rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.amountBorrowed)}{' '}\n <span style={{ fontSize: '0.8125rem', fontWeight: 400, color: 'var(--compass-color-text-secondary)' }}>\n {position.symbol}\n </span>\n </span>\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-tertiary)' }}>\n {formatUsd(position.usdValue)}\n </span>\n </div>\n\n {/* Stats rows */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Borrow APY</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-warning, #f59e0b)' }}>\n {formatApy(position.borrowApy)}\n </span>\n </div>\n {position.interestPaid !== null && position.interestPaid !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Interest paid</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.interestPaid)} {position.symbol}\n </span>\n </div>\n )}\n </div>\n\n {position.events && position.events.length > 0 && (\n <CreditEventHistory events={position.events} tokenSymbol={position.symbol} />\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, TrendingUp } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useBorrow, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface BorrowModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function BorrowModal({ isOpen, onClose, initialToken, allowedTokens }: BorrowModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBorrow, resetState } = useBorrow();\n const prices = useTokenPrices();\n const { data: positionsData } = useCreditPositions();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const maxBorrowable = (() => {\n if (!positionsData) return null;\n const availableUsd = parseFloat(positionsData.accountSummary.availableBorrowsUsd) || 0;\n if (availableUsd <= 0) return null;\n const price = prices[token];\n if (!price || price <= 0) return null;\n return availableUsd / price;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleBorrow = () => {\n if (!isValid) return;\n executeBorrow({ token, amount: Number(amount) });\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Borrow\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {maxBorrowable !== null && (\n <button\n type=\"button\"\n onClick={() => {\n const safeMax = maxBorrowable * 0.995;\n setAmount(truncate(safeMax, 2));\n }}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {maxBorrowable !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Max: {truncate(maxBorrowable, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleBorrow}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Borrow...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <TrendingUp className=\"h-4 w-4\" />\n Borrow\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowDownLeft } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useRepay, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface RepayModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function RepayModal({ isOpen, onClose, initialToken, allowedTokens }: RepayModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeRepay, resetState } = useRepay();\n const prices = useTokenPrices();\n const { data: positionsData } = useCreditPositions();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const debtForToken = (() => {\n if (!positionsData) return null;\n const pos = positionsData.debtPositions.find((p) => p.symbol === token);\n if (!pos || !pos.amountBorrowed) return null;\n const amt = parseFloat(pos.amountBorrowed);\n return amt > 0 ? amt : null;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleRepay = () => {\n if (!isValid) return;\n executeRepay({ token, amount: Number(amount) });\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Repay\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {debtForToken !== null && (\n <button\n type=\"button\"\n onClick={() => setAmount(truncate(debtForToken, 2))}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {debtForToken !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt: {truncate(debtForToken, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleRepay}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Repay...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowDownLeft className=\"h-4 w-4\" />\n Repay\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowUpCircle } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle, useCreditBalances, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\ninterface SupplyModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function SupplyModal({ isOpen, onClose, initialToken, allowedTokens }: SupplyModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBundle, resetState } = useCreditBundle();\n const { data: balances } = useCreditBalances();\n const prices = useTokenPrices();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const tokenBalance = balances?.find((b) => b.tokenSymbol === token);\n const availableBalance = tokenBalance ? tokenBalance.amount : null;\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleSubmit = () => {\n if (!isValid) return;\n executeBundle(\n [{ actionType: 'CREDIT_SUPPLY', token, amount: Number(amount) }],\n 'Sign Supply',\n `Supply ${amount} ${token}`,\n );\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Supply Collateral\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n {formatUsdEstimate(amount, token, prices) && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </p>\n )}\n </div>\n </div>\n\n {availableBalance !== null && (\n <div\n className=\"flex items-center justify-between text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <span>\n Available: {availableBalance} {token}\n </span>\n <button\n type=\"button\"\n onClick={() => setAmount(availableBalance)}\n className=\"font-medium hover:opacity-80 transition-opacity\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n Max\n </button>\n </div>\n )}\n\n <button\n onClick={handleSubmit}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Supply...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowUpCircle className=\"h-4 w-4\" />\n Supply\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowDownCircle } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface WithdrawModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function WithdrawModal({ isOpen, onClose, initialToken, allowedTokens }: WithdrawModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBundle, resetState } = useCreditBundle();\n const { data: positionsData } = useCreditPositions();\n const prices = useTokenPrices();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const suppliedAmount = (() => {\n if (!positionsData) return null;\n const pos = positionsData.collateralPositions.find((p) => p.symbol === token);\n if (!pos || !pos.amountSupplied) return null;\n const amt = parseFloat(pos.amountSupplied);\n return amt > 0 ? amt : null;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleSubmit = () => {\n if (!isValid) return;\n executeBundle(\n [{ actionType: 'CREDIT_WITHDRAW', token, amount: Number(amount) }],\n 'Sign Withdraw',\n `Withdraw ${amount} ${token}`,\n );\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Withdraw Collateral\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {suppliedAmount !== null && (\n <button\n type=\"button\"\n onClick={() => setAmount(truncate(suppliedAmount, 2))}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {suppliedAmount !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Supplied: {truncate(suppliedAmount, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleSubmit}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Withdraw...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowDownCircle className=\"h-4 w-4\" />\n Withdraw\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { Loader2, ArrowRight, ArrowDownLeft, ArrowUpRight, Check, Circle } from 'lucide-react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useTokenPrices, formatUsdEstimate, useCreditBalances } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport type { TxState } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface TopUpModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype TransferAction = 'deposit' | 'withdraw';\n\ntype TopUpStep =\n | 'idle'\n | 'approving'\n | 'signing-approval'\n | 'preparing-transfer'\n | 'signing-transfer'\n | 'executing'\n | 'confirmed'\n | 'failed';\n\nfunction getPhase(step: TopUpStep): 0 | 1 | 2 {\n if (step === 'idle' || step === 'failed') return 0;\n if (step === 'approving' || step === 'signing-approval') return 1;\n return 2;\n}\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\nexport function TopUpModal({ isOpen, onClose }: TopUpModalProps) {\n const { address, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { chainId } = useChain();\n const { isDeployed } = useCreditAccount();\n const queryClient = useQueryClient();\n const prices = useTokenPrices();\n\n const token = 'USDC';\n const [action, setAction] = useState<TransferAction>('deposit');\n const [amount, setAmount] = useState('');\n const [step, setStep] = useState<TopUpStep>('idle');\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n const pollIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearPolling = useCallback(() => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n pollIntervalRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => clearPolling();\n }, [clearPolling]);\n\n const CHAIN_ID = chainId;\n\n // Wallet balance for deposit\n const { data: walletBalance } = useQuery({\n queryKey: ['walletTokenBalance', CHAIN_ID, address, token],\n queryFn: async () => {\n if (!address) return '0';\n try {\n const res = await fetch(\n `/api/compass/token/balance?address=${address}&chain=${CHAIN_ID}&token=${token}`\n );\n if (!res.ok) return '0';\n const data = await res.json();\n return data.balance || '0';\n } catch {\n return '0';\n }\n },\n enabled: !!address && isOpen && action === 'deposit',\n staleTime: 15 * 1000,\n });\n\n // Credit account balances for withdraw\n const { data: creditBalances } = useCreditBalances();\n\n const getCreditBalance = (t: string): string => {\n if (!creditBalances) return '0';\n const bal = creditBalances.find((b) => b.tokenSymbol === t);\n return bal ? bal.amount : '0';\n };\n\n const maxBalance = action === 'deposit'\n ? walletBalance || '0'\n : getCreditBalance(token);\n\n const handleActionChange = (newAction: TransferAction) => {\n setAction(newAction);\n setAmount('');\n setStep('idle');\n setTxState({ status: 'idle' });\n };\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n step === 'approving' ||\n step === 'signing-approval' ||\n step === 'preparing-transfer' ||\n step === 'signing-transfer' ||\n step === 'executing';\n\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 const handleTransfer = async () => {\n if (!isValid || !signTypedData) return;\n\n setTxState({ status: 'idle' });\n\n try {\n await ensureCorrectChain();\n\n if (action === 'deposit') {\n // --- Phase 1: Check & handle token approval ---\n setStep('approving');\n setTxState({ status: 'preparing' });\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,\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 && approvalData.transaction) {\n // Non-EIP2612 token — execute approval via gas sponsor\n setTxState({ status: 'broadcasting' });\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 if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n } else if (approvalData.eip712) {\n // EIP-2612 token — sign permit\n setStep('signing-approval');\n setTxState({ status: 'signing' });\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setTxState({ status: 'broadcasting' });\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 if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n } else {\n throw new Error('Unable to approve token for transfers');\n }\n }\n\n // --- Phase 2: Prepare & execute transfer ---\n setStep('preparing-transfer');\n setTxState({ status: 'preparing' });\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,\n amount,\n action: 'DEPOSIT',\n product: 'credit',\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 setStep('signing-transfer');\n setTxState({ status: 'signing' });\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 setStep('executing');\n setTxState({ status: 'broadcasting' });\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,\n product: 'credit',\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 handleSuccess(txHash);\n } else {\n // --- Withdraw: prepare & execute ---\n setStep('preparing-transfer');\n setTxState({ status: 'preparing' });\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,\n amount,\n action: 'WITHDRAW',\n product: 'credit',\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare withdrawal');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStep('signing-transfer');\n setTxState({ status: 'signing' });\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 setStep('executing');\n setTxState({ status: 'broadcasting' });\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,\n product: 'credit',\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Withdrawal failed');\n }\n\n const { txHash } = await executeResponse.json();\n handleSuccess(txHash);\n }\n } catch (error) {\n console.error('Transfer error:', error);\n setStep('failed');\n setTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Transfer failed',\n });\n }\n };\n\n const handleSuccess = (txHash: string) => {\n setStep('confirmed');\n setTxState({ status: 'submitted', txHash });\n\n clearPolling();\n let polls = 0;\n pollIntervalRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n queryClient.invalidateQueries({ queryKey: ['creditPositions'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearPolling();\n setTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch {\n // Server unreachable, keep polling\n }\n if (polls >= 24) {\n clearPolling();\n setTxState({ status: 'failed', error: 'Unable to confirm transaction. Please check your wallet for status.' });\n }\n }, 5_000);\n };\n\n const phase = getPhase(step);\n\n const buttonLabel = () => {\n switch (step) {\n case 'approving':\n return 'Checking approval...';\n case 'signing-approval':\n return 'Sign Approval (1/2)...';\n case 'preparing-transfer':\n return action === 'deposit' ? 'Preparing transfer...' : 'Preparing withdrawal...';\n case 'signing-transfer':\n return action === 'deposit' ? 'Sign Transfer (2/2)...' : 'Sign Withdrawal...';\n case 'executing':\n return 'Executing...';\n default:\n return null;\n }\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Transfer Funds\">\n <div className=\"space-y-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((tab) => (\n <button\n key={tab}\n onClick={() => handleActionChange(tab)}\n disabled={isBusy}\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 action === tab ? 'var(--compass-color-surface)' : 'transparent',\n color:\n action === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n }}\n >\n {tab === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : (\n <ArrowUpRight size={14} />\n )}\n {tab}\n </button>\n ))}\n </div>\n\n {/* Step indicator (deposit only — 2 phases) */}\n {(isBusy || step === 'confirmed') && action === 'deposit' && (\n <div\n className=\"flex gap-3 p-3 text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <StepIndicator\n number={1}\n label=\"Approve\"\n state={phase > 1 ? 'done' : phase === 1 ? 'active' : 'pending'}\n />\n <StepIndicator\n number={2}\n label=\"Transfer\"\n state={step === 'confirmed' ? 'done' : phase > 1 ? 'active' : 'pending'}\n />\n </div>\n )}\n\n {/* Amount input */}\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); setTxState({ status: 'idle' }); }}\n disabled={isBusy}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none disabled:opacity-50\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n {formatUsdEstimate(amount, token, prices) && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </p>\n )}\n {maxBalance && maxBalance !== '0' && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available: {truncate(parseFloat(maxBalance), 2)} {token}\n </p>\n )}\n </div>\n\n {/* Description */}\n {!isBusy && step !== 'confirmed' && step !== 'failed' && txState.status === 'idle' && (\n <p\n className=\"text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {action === 'deposit'\n ? 'Approves the token transfer, then transfers tokens from your wallet into your credit account. Requires 2 signatures.'\n : 'Transfers tokens from your credit account back to your wallet. Requires 1 signature.'}\n </p>\n )}\n\n <button\n onClick={handleTransfer}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {buttonLabel()}\n </>\n ) : (\n <>\n <ArrowRight className=\"h-4 w-4\" />\n {action === 'deposit' ? 'Transfer to Credit Account' : 'Withdraw to Wallet'}\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n\nfunction StepIndicator({\n number,\n label,\n state,\n}: {\n number: number;\n label: string;\n state: 'pending' | 'active' | 'done';\n}) {\n const iconColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-primary)'\n : 'var(--compass-color-text-tertiary)';\n\n const textColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-tertiary)';\n\n return (\n <div className=\"flex items-center gap-1.5 flex-1\">\n {state === 'done' ? (\n <Check className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n ) : state === 'active' ? (\n <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin\" style={{ color: iconColor }} />\n ) : (\n <Circle className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n )}\n <span style={{ color: textColor }}>\n {number}. {label}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { ArrowDownUp, Loader2, ChevronDown, ArrowLeftRight } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle } from './hooks/useCreditBundle';\nimport { useCreditBalances, useTokenPrices } from './hooks';\nimport { CREDIT_TOKENS } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface CreditSwapModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function CreditSwapModal({ isOpen, onClose }: CreditSwapModalProps) {\n const { data: balances } = useCreditBalances();\n const prices = useTokenPrices();\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const tokens = CREDIT_TOKENS;\n const fromToken = 'USDC';\n\n const [toToken, setToToken] = useState(tokens.find((t) => t !== fromToken) || tokens[0] || 'WETH');\n const [fromAmount, setFromAmount] = useState('');\n const [isToOpen, setIsToOpen] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setFromAmount('');\n resetState();\n }\n }, [isOpen]);\n\n const fromBalance = balances?.find((b) => b.tokenSymbol === fromToken);\n const fromBalanceAmount = fromBalance ? parseFloat(fromBalance.amount) : 0;\n\n const estimatedOutput = (() => {\n const amt = parseFloat(fromAmount);\n if (!amt || amt <= 0) return null;\n const priceIn = prices[fromToken];\n const priceOut = prices[toToken];\n if (!priceIn || !priceOut || priceOut <= 0) return null;\n return (amt * priceIn) / priceOut;\n })();\n\n const rate = (() => {\n const priceIn = prices[fromToken];\n const priceOut = prices[toToken];\n if (!priceIn || !priceOut || priceOut <= 0) return null;\n return priceIn / priceOut;\n })();\n\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n const isValid =\n parseFloat(fromAmount) > 0 &&\n fromToken !== toToken &&\n fromBalanceAmount >= parseFloat(fromAmount || '0');\n\n const handleSwap = () => {\n if (!isValid) return;\n executeBundle([\n {\n actionType: 'V2_SWAP',\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: fromAmount,\n slippage: 1.0,\n },\n ]);\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Swap Tokens\">\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0', fontFamily: 'var(--compass-font-family)' }}>\n {/* From card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg) var(--compass-border-radius-lg) 0 0',\n padding: '10px 12px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>From</span>\n {fromBalanceAmount > 0 && (\n <button\n onClick={() => setFromAmount(truncate(fromBalanceAmount, 2))}\n disabled={isBusy}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: '0.6875rem' }}\n >\n Available: {truncate(fromBalanceAmount, 2)}\n </button>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n disabled={isBusy}\n style={{\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n fontWeight: 500,\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n fontSize: '0.8125rem',\n flexShrink: 0,\n }}\n >\n {fromToken}\n </div>\n </div>\n </div>\n\n {/* Reverse button — overlaps between cards */}\n <div style={{ display: 'flex', justifyContent: 'center', height: 0 }}>\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n padding: '4px',\n position: 'relative',\n zIndex: 1,\n marginTop: '-11px',\n }}\n >\n <ArrowDownUp size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </div>\n </div>\n\n {/* To card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-lg) var(--compass-border-radius-lg)',\n padding: '10px 12px',\n }}\n >\n <div>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>To (estimated)</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n color: estimatedOutput ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n fontSize: '1rem',\n fontWeight: 600,\n }}\n >\n {estimatedOutput ? truncate(estimatedOutput, 2) : '0.00'}\n </div>\n <div style={{ position: 'relative', flexShrink: 0 }}>\n <button\n onClick={() => setIsToOpen(!isToOpen)}\n disabled={isBusy}\n style={{\n display: 'flex',\n alignItems: 'center',\n fontWeight: 500,\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n gap: '4px',\n fontSize: '0.8125rem',\n cursor: isBusy ? 'not-allowed' : 'pointer',\n }}\n >\n {toToken}\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isToOpen && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: '4px',\n zIndex: 10,\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: 'var(--compass-shadow-md)',\n minWidth: '120px',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none' as const,\n }}\n >\n {tokens.filter((t) => t !== fromToken).map((token) => (\n <button\n key={token}\n onClick={() => {\n setToToken(token);\n setIsToOpen(false);\n }}\n style={{\n display: 'block',\n width: '100%',\n textAlign: 'left',\n padding: '6px 10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: token === toToken ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === toToken ? 'var(--compass-color-primary-muted)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Rate */}\n {rate !== null && fromToken !== toToken && (\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem', margin: '6px 0 0' }}>\n 1 {fromToken} = {truncate(rate, 2)} {toToken}\n </p>\n )}\n\n {/* Insufficient balance warning */}\n {fromAmount && parseFloat(fromAmount) > fromBalanceAmount && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '6px 10px',\n gap: '6px',\n fontSize: '0.75rem',\n marginTop: '8px',\n }}\n >\n Insufficient balance\n </div>\n )}\n\n {/* Swap Button */}\n <button\n onClick={handleSwap}\n disabled={!isValid || isBusy}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '10px',\n marginTop: '10px',\n fontSize: '0.875rem',\n fontWeight: 600,\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: 'none',\n cursor: !isValid || isBusy ? 'not-allowed' : 'pointer',\n opacity: !isValid || isBusy ? 0.5 : 1,\n transition: 'all 200ms ease',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 size={14} className=\"animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Swap...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowLeftRight size={14} />\n Swap\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { ChevronDown, Plus, ArrowLeftRight, LogOut } from 'lucide-react';\nimport { CreditAccountGuard, ChainSwitcher } from '../../shared';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCreditPositions, useCreditBalances, useTokenPrices } from './hooks';\nimport { PositionsView } from './PositionsView';\nimport { BorrowModal } from './BorrowModal';\nimport { RepayModal } from './RepayModal';\nimport { SupplyModal } from './SupplyModal';\nimport { WithdrawModal } from './WithdrawModal';\nimport { TopUpModal } from './TopUpModal';\nimport { CreditSwapModal } from './CreditSwapModal';\nimport { CopyableAddress } from '../../shared/CopyableAddress';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport type { CreditAccountProps } from './types';\nimport { type CreditToken } from '../../types/credit';\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatUsd(value: string | number | null): string {\n if (value === null) return '$0.00';\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(floorTo(num, 2));\n}\n\nexport function CreditAccount({\n title = 'Credit Account',\n showHeader: _showHeader = true,\n showTopUpButton = true,\n compact = true,\n height = '600px',\n chain: chainProp,\n allowedCollateralTokens,\n allowedDebtTokens,\n onBorrow: _onBorrow,\n onRepay: _onRepay,\n}: CreditAccountProps) {\n const { address, isConnected, login, logout } = useEmbeddableWallet();\n const { isDeployed, creditAccountAddress } = useCreditAccount();\n const { chainId } = useChain();\n const { data: positions, isLoading: positionsLoading } = useCreditPositions();\n const { data: balances } = useCreditBalances();\n const tokenPrices = useTokenPrices();\n // Modal state\n const [showBorrow, setShowBorrow] = useState(false);\n const [borrowInitialToken, setBorrowInitialToken] = useState<CreditToken | undefined>();\n const [showRepay, setShowRepay] = useState(false);\n const [repayInitialToken, setRepayInitialToken] = useState<CreditToken | undefined>();\n const [showSupply, setShowSupply] = useState(false);\n const [supplyInitialToken, setSupplyInitialToken] = useState<CreditToken | undefined>();\n const [showWithdraw, setShowWithdraw] = useState(false);\n const [withdrawInitialToken, setWithdrawInitialToken] = useState<CreditToken | undefined>();\n const [showTopUp, setShowTopUp] = useState(false);\n const [showSwap, setShowSwap] = useState(false);\n const [showBalanceBreakdown, setShowBalanceBreakdown] = useState(false);\n\n const totalCollateral = positions\n ? parseFloat(positions.accountSummary.totalCollateralUsd) || 0\n : 0;\n const totalDebt = positions\n ? parseFloat(positions.accountSummary.totalDebtUsd) || 0\n : 0;\n\n // Compute idle account balances in USD using token prices\n const balancesWithUsd = (balances || [])\n .map((b) => {\n const amount = parseFloat(b.amount);\n const price = tokenPrices[b.tokenSymbol];\n const usdValue = amount > 0 && price != null ? amount * price : 0;\n return { ...b, usdValue };\n })\n .filter((b) => b.usdValue >= 0.01)\n .sort((a, b) => a.tokenSymbol.localeCompare(b.tokenSymbol));\n const totalIdleUsd = balancesWithUsd.reduce((sum, b) => sum + b.usdValue, 0);\n\n // Compute total interest earned/paid across positions (in USD)\n const totalInterestEarnedUsd = (() => {\n if (!positions) return 0;\n let total = 0;\n for (const pos of positions.collateralPositions) {\n const interest = parseFloat(pos.interestEarned ?? '0');\n const price = tokenPrices[pos.symbol] ?? 0;\n if (interest > 0 && price > 0) total += interest * price;\n }\n return total;\n })();\n\n const totalInterestPaidUsd = (() => {\n if (!positions) return 0;\n let total = 0;\n for (const pos of positions.debtPositions) {\n const interest = parseFloat(pos.interestPaid ?? '0');\n const price = tokenPrices[pos.symbol] ?? 0;\n if (interest > 0 && price > 0) total += interest * price;\n }\n return total;\n })();\n\n // Total balance = collateral - debt + idle account balances\n const netPositionUsd = totalCollateral - totalDebt;\n const totalBalance = netPositionUsd + totalIdleUsd;\n\n // Net interest calculation: weighted supply APY earned - weighted borrow APY owed\n // Expressed as USD per year\n const netInterestUsdPerYear = (() => {\n if (!positions) return 0;\n let supplyInterest = 0;\n for (const pos of positions.collateralPositions) {\n const usd = parseFloat(pos.usdValue ?? '0');\n const apy = parseFloat(pos.supplyApy ?? '0') / 100;\n if (usd > 0 && !isNaN(apy)) supplyInterest += usd * apy;\n }\n let borrowInterest = 0;\n for (const pos of positions.debtPositions) {\n const usd = parseFloat(pos.usdValue ?? '0');\n const apy = parseFloat(pos.borrowApy ?? '0') / 100;\n if (usd > 0 && !isNaN(apy)) borrowInterest += usd * apy;\n }\n return supplyInterest - borrowInterest;\n })();\n\n // Net APY as a percentage of total collateral value\n const netApyPercent = (() => {\n if (!positions || totalCollateral === 0) return null;\n return (netInterestUsdPerYear / totalCollateral) * 100;\n })();\n\n const hasPositions = positions\n ? positions.collateralPositions.some((p) => parseFloat(p.usdValue ?? '0') >= 0.01) || positions.debtPositions.length > 0\n : false;\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {!chainProp && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <CreditAccountGuard>\n {/* ========== TOP SECTION: Title + Balance + Net Position ========== */}\n <div\n className=\"flex flex-col items-center text-center\"\n style={{ padding: compact ? '12px 16px 8px' : '16px 20px 12px' }}\n >\n {/* Title + Logout Row */}\n <div className=\"flex items-center justify-between\" style={{ width: '100%', marginBottom: '8px' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n }}\n >\n {title}\n </span>\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setShowBalanceBreakdown(true)}\n aria-label={`Total balance: ${formatUsd(totalBalance)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n {positionsLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '200px', height: compact ? '42px' : '52px', borderRadius: 'var(--compass-border-radius-md)', margin: '0 auto' }} />\n ) : (\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1.75rem' : '2rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatUsd(totalBalance)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n )}\n </button>\n\n {/* Net position callout — green dot + amount, like earn's earned callout */}\n <div\n className=\"flex items-center justify-center\"\n style={{ gap: '6px', marginTop: '6px', minHeight: '24px' }}\n >\n {positionsLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '120px', height: '16px' }} />\n ) : hasPositions ? (\n <>\n <span style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: netPositionUsd >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n flexShrink: 0,\n }} />\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n fontSize: '0.875rem',\n }}\n >\n Net {formatUsd(netPositionUsd)}\n </span>\n {(totalInterestEarnedUsd - totalInterestPaidUsd) !== 0 && (\n <span\n className=\"font-semibold\"\n style={{\n color: (totalInterestEarnedUsd - totalInterestPaidUsd) >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n fontSize: '0.875rem',\n }}\n >\n · {(totalInterestEarnedUsd - totalInterestPaidUsd) >= 0 ? '+' : ''}{formatUsd(totalInterestEarnedUsd - totalInterestPaidUsd)} interest\n </span>\n )}\n </>\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n No active positions\n </span>\n )}\n </div>\n\n {/* Quick Action Buttons — inline pills */}\n {!isConnected ? (\n <button\n onClick={() => login?.()}\n className=\"flex items-center justify-center font-bold w-full\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n marginTop: '8px',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Connect Wallet\n </button>\n ) : isDeployed && (balancesWithUsd.length > 0 || showTopUpButton) ? (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '8px' }}>\n {showTopUpButton && (\n <button\n onClick={() => setShowTopUp(true)}\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balancesWithUsd.length > 0 && (\n <button\n onClick={() => setShowSwap(true)}\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n ) : null}\n </div>\n\n {/* ========== BOTTOM SECTION: Positions + Trust Badges ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '8px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '12px 16px 8px',\n borderTop: '1.5px solid var(--compass-color-border)',\n flex: 1,\n }}\n >\n {/* Positions */}\n {isDeployed && (\n <PositionsView\n allowedCollateralTokens={allowedCollateralTokens}\n allowedDebtTokens={allowedDebtTokens}\n onBorrow={(token) => {\n setBorrowInitialToken(token);\n setShowBorrow(true);\n }}\n onRepay={(token) => {\n setRepayInitialToken(token);\n setShowRepay(true);\n }}\n onSupply={(token) => {\n setSupplyInitialToken(token);\n setShowSupply(true);\n }}\n onWithdraw={(token) => {\n setWithdrawInitialToken(token);\n setShowWithdraw(true);\n }}\n />\n )}\n\n <WidgetFooter />\n </div>\n\n </CreditAccountGuard>\n\n {/* Balance Breakdown Modal */}\n <ActionModal\n isOpen={showBalanceBreakdown}\n onClose={() => setShowBalanceBreakdown(false)}\n title=\"Balance Breakdown\"\n >\n <div className=\"flex flex-col\" style={{ gap: '12px' }}>\n {/* Addresses */}\n {address && creditAccountAddress && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <CopyableAddress address={address} label=\"Wallet\" />\n <CopyableAddress address={creditAccountAddress} label=\"Credit Account\" />\n </div>\n )}\n\n {/* Collateral Section */}\n {positions && positions.collateralPositions.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Collateral\n </span>\n {totalInterestEarnedUsd > 0 && (\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n Interest: +{formatUsd(totalInterestEarnedUsd)}\n </span>\n )}\n </div>\n {[...positions.collateralPositions]\n .filter((p) => parseFloat(p.usdValue ?? '0') >= 0.01)\n .sort((a, b) => a.symbol.localeCompare(b.symbol))\n .map((p) => (\n <div\n key={p.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {p.symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(p.amountSupplied ?? '0'), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(p.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Debt Section */}\n {positions && positions.debtPositions.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt\n </span>\n {totalInterestPaidUsd > 0 && (\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-error, #ef4444)' }}\n >\n Interest: -{formatUsd(totalInterestPaidUsd)}\n </span>\n )}\n </div>\n {[...positions.debtPositions]\n .filter((p) => parseFloat(p.usdValue ?? '0') >= 0.01)\n .sort((a, b) => a.symbol.localeCompare(b.symbol))\n .map((p) => (\n <div\n key={p.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {p.symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(p.amountBorrowed ?? '0'), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(p.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Idle Account Balances Section */}\n {balancesWithUsd.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\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 <span\n className=\"text-sm font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(totalIdleUsd)}\n </span>\n </div>\n {balancesWithUsd.map((b) => (\n <div\n key={b.tokenSymbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {b.tokenSymbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(b.amount), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(b.usdValue.toString())}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* No data state */}\n {(!positions || (positions.collateralPositions.length === 0 && positions.debtPositions.length === 0 && balancesWithUsd.length === 0)) && (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No positions or balances\n </p>\n </div>\n )}\n\n {/* Net Interest */}\n {hasPositions && netApyPercent !== null && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: netInterestUsdPerYear >= 0\n ? 'rgba(34, 197, 94, 0.06)'\n : 'rgba(239, 68, 68, 0.06)',\n border: `1.5px solid ${netInterestUsdPerYear >= 0\n ? 'rgba(34, 197, 94, 0.15)'\n : 'rgba(239, 68, 68, 0.15)'}`,\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n }}\n >\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Net interest / year\n </span>\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span\n className=\"text-sm font-semibold\"\n style={{\n color: netInterestUsdPerYear >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {netInterestUsdPerYear >= 0 ? '+' : ''}{formatUsd(netInterestUsdPerYear)}\n </span>\n <span\n className=\"text-xs font-medium\"\n style={{\n backgroundColor: netApyPercent >= 0\n ? 'rgba(34, 197, 94, 0.1)'\n : 'rgba(239, 68, 68, 0.1)',\n color: netApyPercent >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n padding: '2px 6px',\n borderRadius: 'var(--compass-border-radius-sm)',\n }}\n >\n {netApyPercent >= 0 ? '+' : ''}{floorTo(netApyPercent, 2).toFixed(2)}%\n </span>\n </div>\n </div>\n )}\n\n {/* Total */}\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>\n Total\n </span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatUsd(totalBalance)}\n </span>\n </div>\n </div>\n </ActionModal>\n\n {/* Modals */}\n <BorrowModal\n isOpen={showBorrow}\n onClose={() => { setShowBorrow(false); setBorrowInitialToken(undefined); }}\n initialToken={borrowInitialToken}\n allowedTokens={allowedDebtTokens}\n />\n <RepayModal\n isOpen={showRepay}\n onClose={() => { setShowRepay(false); setRepayInitialToken(undefined); }}\n initialToken={repayInitialToken}\n allowedTokens={allowedDebtTokens}\n />\n <SupplyModal\n isOpen={showSupply}\n onClose={() => { setShowSupply(false); setSupplyInitialToken(undefined); }}\n initialToken={supplyInitialToken}\n allowedTokens={allowedCollateralTokens}\n />\n <WithdrawModal\n isOpen={showWithdraw}\n onClose={() => { setShowWithdraw(false); setWithdrawInitialToken(undefined); }}\n initialToken={withdrawInitialToken}\n allowedTokens={allowedCollateralTokens}\n />\n {showTopUp && (\n <TopUpModal\n isOpen={showTopUp}\n onClose={() => setShowTopUp(false)}\n />\n )}\n <CreditSwapModal\n isOpen={showSwap}\n onClose={() => setShowSwap(false)}\n />\n\n </div>{/* end scrollable content area */}\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.blockTimestamp || d.block_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.blockTimestamp || w.block_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.blockTimestamp || d.block_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.blockTimestamp || w.block_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.blockTimestamp || d.block_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.blockTimestamp || w.block_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 scrollbarWidth: 'none',\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","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { PortfolioState, PortfolioPosition, IdleBalance, VenueType } from './types';\nimport type { MarketOption as EarnMarketOption } from '../EarnAccount/types';\n\nexport interface MarketOption {\n venueType: VenueType;\n venueAddress: string;\n venueName: string;\n token: string;\n apy: number;\n}\n\n// Helper to parse Pendle expiry timestamp (handles both seconds and milliseconds)\nfunction 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 const ms = timestamp < 32503680000 ? timestamp * 1000 : timestamp;\n const date = new Date(ms);\n if (date.getFullYear() < 2000) return undefined;\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n}\n\nexport function useRebalancingData(chainOverride?: string) {\n const { address } = useEmbeddableWallet();\n const { chainId: contextChainId } = useChain();\n const chainId = chainOverride || contextChainId;\n\n // Fetch current positions across all protocols\n const positionsQuery = useQuery({\n queryKey: ['rebalancing', 'portfolio', chainId, address],\n queryFn: async (): Promise<PortfolioPosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({ chain: chainId, owner: address });\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) throw new Error('Failed to fetch positions');\n\n const data = await response.json();\n const positions: PortfolioPosition[] = [];\n\n for (const p of (data as any).positions || []) {\n const usdValue = parseFloat(p.balanceUsd || p.balance || '0');\n if (usdValue <= 0) continue;\n\n let venueType: VenueType;\n let venueAddress = '';\n\n if (p.protocol === 'vaults') {\n venueType = 'vault';\n venueAddress = p.vaultAddress || '';\n } else if (p.protocol === 'aave') {\n venueType = 'aave';\n venueAddress = p.symbol || '';\n } else if (p.protocol === 'pendle') {\n venueType = 'pendle_pt';\n venueAddress = p.marketAddress || '';\n } else {\n continue;\n }\n\n positions.push({\n id: `${p.protocol}-${venueAddress}`,\n venueType,\n venueName: p.name || `${p.symbol} on ${p.protocol}`,\n venueAddress,\n token: p.symbol || 'UNKNOWN',\n balance: parseFloat(p.balance || '0'),\n usdValue,\n apy: p.apy || 0,\n allocationPercent: 0, // computed below\n });\n }\n\n return positions;\n },\n enabled: !!address,\n staleTime: 30_000,\n });\n\n // Fetch idle balances in earn account\n const balancesQuery = useQuery({\n queryKey: ['rebalancing', 'balances', chainId, address],\n queryFn: async (): Promise<IdleBalance[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({ chain: chainId, owner: address });\n const response = await fetch(`/api/compass/earn-account/balances?${params}`);\n if (!response.ok) throw new Error('Failed to fetch balances');\n\n const data = await response.json();\n const balances: IdleBalance[] = [];\n\n for (const [symbol, tokenData] of Object.entries((data as any).balances || {})) {\n const td = tokenData as any;\n const usdValue = parseFloat(td.usdValue || '0');\n if (usdValue <= 0) continue;\n\n balances.push({\n token: symbol,\n balance: parseFloat(td.balance || '0'),\n usdValue,\n });\n }\n\n return balances;\n },\n enabled: !!address,\n staleTime: 30_000,\n });\n\n // Fetch available venues (markets) across all protocols\n // Returns both rebalancing MarketOption[] and EarnAccount-format MarketOption[]\n const venuesQuery = useQuery({\n queryKey: ['rebalancing', 'venues', chainId],\n queryFn: async (): Promise<{ venues: MarketOption[]; earnMarkets: EarnMarketOption[] }> => {\n const [vaultsRes, aaveRes, pendleRes] = await Promise.all([\n fetch(`/api/compass/vaults?chain=${chainId}&orderBy=apy_7d&direction=desc&limit=200`),\n fetch(`/api/compass/aave/markets?chain=${chainId}`),\n fetch(`/api/compass/pendle/markets?chain=${chainId}&orderBy=implied_apy&direction=desc&limit=200`),\n ]);\n\n const venues: MarketOption[] = [];\n const earnMarkets: EarnMarketOption[] = [];\n\n // Vaults: response.vaults is an array\n if (vaultsRes.ok) {\n const data = await vaultsRes.json();\n const vaultsList = (data as any).vaults || [];\n for (const v of vaultsList) {\n const vaultAddress = v.vaultAddress || v.address || '';\n const name = v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`;\n const token = (v.assetSymbol || 'UNKNOWN').toUpperCase();\n const apy = parseFloat(v.apy7d || v.apy || '0');\n\n venues.push({\n venueType: 'vault',\n venueAddress: vaultAddress,\n venueName: name,\n token,\n apy,\n });\n\n earnMarkets.push({\n id: `vault-${vaultAddress}`,\n name,\n apy,\n tvl: parseFloat(v.tvlUsd || v.tvl || '0'),\n type: 'vaults',\n underlyingToken: token,\n curator: v.curatorName || v.curator,\n vaultAddress,\n });\n }\n }\n\n // Aave: response.markets is a dict { SYMBOL: { chains: { <chainId>: { supplyApy } } } }\n if (aaveRes.ok) {\n const data = await aaveRes.json();\n const marketsDict = (data as any).markets || {};\n for (const [symbol, marketData] of Object.entries(marketsDict)) {\n const chainData = (marketData as any).chains?.[chainId];\n if (chainData) {\n const upperSymbol = symbol.toUpperCase();\n const apy = parseFloat(chainData.supplyApy || '0');\n\n venues.push({\n venueType: 'aave',\n venueAddress: upperSymbol,\n venueName: `${upperSymbol} on Aave`,\n token: upperSymbol,\n apy,\n });\n\n earnMarkets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: upperSymbol,\n apy,\n tvl: parseFloat(chainData.totalSupplyUsd || '0'),\n type: 'aave',\n underlyingToken: upperSymbol,\n });\n }\n }\n }\n\n // Pendle: response.markets is an array\n if (pendleRes.ok) {\n const data = await pendleRes.json();\n const marketsList = (data as any).markets || [];\n for (const m of marketsList) {\n const symbol = (m.underlyingSymbol || 'PT').toUpperCase();\n const marketAddress = m.marketAddress || m.address || '';\n const expiryStr = parseExpiry(m.expiry);\n const name = m.name || `PT-${symbol}${expiryStr ? ` ${expiryStr}` : ''}`;\n const apy = parseFloat(m.impliedApy || m.apy || '0');\n\n venues.push({\n venueType: 'pendle_pt',\n venueAddress: marketAddress,\n venueName: name,\n token: symbol,\n apy,\n });\n\n earnMarkets.push({\n id: `pendle-${marketAddress}`,\n name,\n apy,\n tvl: parseFloat(m.tvlUsd || m.tvl || '0'),\n type: 'pendle',\n underlyingToken: symbol,\n expiry: expiryStr,\n marketAddress,\n });\n }\n }\n\n return { venues, earnMarkets };\n },\n staleTime: 60_000,\n });\n\n // Compute unified portfolio state\n const positions = positionsQuery.data || [];\n const idleBalances = balancesQuery.data || [];\n\n const totalPositionUsd = positions.reduce((sum, p) => sum + p.usdValue, 0);\n const totalIdleUsd = idleBalances.reduce((sum, b) => sum + b.usdValue, 0);\n const totalUsd = totalPositionUsd + totalIdleUsd;\n\n // Compute allocation percentages\n const positionsWithAllocation: PortfolioPosition[] = positions.map(p => ({\n ...p,\n allocationPercent: totalUsd > 0 ? (p.usdValue / totalUsd) * 100 : 0,\n }));\n\n const portfolio: PortfolioState | null = address ? {\n positions: positionsWithAllocation,\n idleBalances,\n totalUsd,\n totalIdleUsd,\n } : null;\n\n return {\n portfolio,\n availableVenues: venuesQuery.data?.venues || [],\n earnAccountMarkets: venuesQuery.data?.earnMarkets || [],\n isMarketsLoading: venuesQuery.isLoading,\n isLoading: positionsQuery.isLoading || balancesQuery.isLoading || venuesQuery.isLoading,\n isError: positionsQuery.isError || balancesQuery.isError || venuesQuery.isError,\n error: positionsQuery.error || balancesQuery.error || venuesQuery.error,\n refetch: () => {\n positionsQuery.refetch();\n balancesQuery.refetch();\n venuesQuery.refetch();\n },\n };\n}\n","import type {\n PortfolioState,\n TargetAllocation,\n RebalancePlan,\n RebalanceAction,\n VenueType,\n} from './types';\n\ninterface RebalanceOptions {\n slippagePercent: number;\n minThresholdUsd: number;\n}\n\nconst DEFAULT_OPTIONS: RebalanceOptions = {\n slippagePercent: 0.5,\n minThresholdUsd: 0.01,\n};\n\ninterface Delta {\n venueType: VenueType;\n venueAddress: string;\n venueName: string;\n token: string;\n currentUsd: number;\n targetUsd: number;\n deltaUsd: number;\n}\n\nexport function computeRebalancePlan(\n portfolio: PortfolioState,\n targets: TargetAllocation[],\n options: Partial<RebalanceOptions> = {}\n): RebalancePlan {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const warnings: string[] = [];\n const actions: RebalanceAction[] = [];\n\n const totalUsd = portfolio.totalUsd;\n if (totalUsd <= 0) {\n return { actions: [], totalActions: 0, estimatedGasSavings: '$0', warnings: ['No portfolio value to rebalance'] };\n }\n\n // Step 1: Compute deltas\n const deltas: Delta[] = [];\n\n for (const target of targets) {\n const targetUsd = totalUsd * (target.targetPercent / 100);\n const position = portfolio.positions.find(\n p => p.venueType === target.venueType && p.venueAddress.toLowerCase() === target.venueAddress.toLowerCase()\n );\n const currentUsd = position?.usdValue || 0;\n const deltaUsd = targetUsd - currentUsd;\n\n if (Math.abs(deltaUsd) < opts.minThresholdUsd) continue;\n\n deltas.push({\n venueType: target.venueType,\n venueAddress: target.venueAddress,\n venueName: target.venueName,\n token: target.token,\n currentUsd,\n targetUsd,\n deltaUsd,\n });\n }\n\n // Check for positions not in targets (implicit 0% target → full withdrawal)\n for (const position of portfolio.positions) {\n const hasTarget = targets.some(\n t => t.venueType === position.venueType && t.venueAddress.toLowerCase() === position.venueAddress.toLowerCase()\n );\n if (!hasTarget && position.usdValue >= opts.minThresholdUsd) {\n deltas.push({\n venueType: position.venueType,\n venueAddress: position.venueAddress,\n venueName: position.venueName,\n token: position.token,\n currentUsd: position.usdValue,\n targetUsd: 0,\n deltaUsd: -position.usdValue,\n });\n }\n }\n\n // Step 2: Categorize\n const overAllocated = deltas.filter(d => d.deltaUsd < 0);\n const underAllocated = deltas.filter(d => d.deltaUsd > 0);\n\n // Step 3: Generate withdrawals\n for (const delta of overAllocated) {\n const withdrawUsd = Math.abs(delta.deltaUsd);\n const withdrawAmount = delta.currentUsd > 0\n ? (withdrawUsd / delta.currentUsd) * (portfolio.positions.find(\n p => p.venueType === delta.venueType && p.venueAddress.toLowerCase() === delta.venueAddress.toLowerCase()\n )?.balance || 0)\n : 0;\n\n actions.push({\n type: 'withdraw',\n venueType: delta.venueType,\n venueAddress: delta.venueAddress,\n token: delta.token,\n amount: withdrawAmount,\n usdValue: withdrawUsd,\n });\n\n if (delta.venueType === 'pendle_pt') {\n warnings.push(`Withdrawing from Pendle PT position (${delta.venueName}) - check maturity date before proceeding`);\n }\n }\n\n // Step 4: Generate swaps (if tokens differ between withdraw and deposit)\n // Group by token pair to minimize swap calls\n const withdrawnTokenAmounts: Record<string, number> = {};\n for (const action of actions) {\n if (action.type === 'withdraw') {\n const key = action.token.toUpperCase();\n withdrawnTokenAmounts[key] = (withdrawnTokenAmounts[key] || 0) + action.usdValue;\n }\n }\n\n // Include idle balances as available capital\n for (const idle of portfolio.idleBalances) {\n const key = idle.token.toUpperCase();\n withdrawnTokenAmounts[key] = (withdrawnTokenAmounts[key] || 0) + idle.usdValue;\n }\n\n const depositTokenNeeds: Record<string, number> = {};\n for (const delta of underAllocated) {\n const key = delta.token.toUpperCase();\n depositTokenNeeds[key] = (depositTokenNeeds[key] || 0) + delta.deltaUsd;\n }\n\n // Determine what swaps are needed\n for (const [depositToken, neededUsd] of Object.entries(depositTokenNeeds)) {\n const availableUsd = withdrawnTokenAmounts[depositToken] || 0;\n const shortfallUsd = neededUsd - availableUsd;\n\n if (shortfallUsd > opts.minThresholdUsd) {\n // Need to swap from other tokens\n // Find tokens with excess\n for (const [withdrawToken, excessUsd] of Object.entries(withdrawnTokenAmounts)) {\n if (withdrawToken === depositToken) continue;\n if (excessUsd <= opts.minThresholdUsd) continue;\n\n const swapUsd = Math.min(shortfallUsd, excessUsd);\n if (swapUsd < opts.minThresholdUsd) continue;\n\n const slippageFactor = 1 - (opts.slippagePercent / 100);\n\n actions.push({\n type: 'swap',\n token: withdrawToken,\n amount: swapUsd, // USD-denominated for now\n usdValue: swapUsd,\n tokenOut: depositToken,\n estimatedAmountOut: swapUsd * slippageFactor, // Approximate\n });\n\n withdrawnTokenAmounts[withdrawToken] -= swapUsd;\n withdrawnTokenAmounts[depositToken] = (withdrawnTokenAmounts[depositToken] || 0) + (swapUsd * slippageFactor);\n\n warnings.push(`Swap ${withdrawToken} to ${depositToken} involves slippage risk`);\n break; // Simplified: one swap per needed token\n }\n }\n }\n\n // Step 5: Generate deposits\n for (const delta of underAllocated) {\n const depositUsd = delta.deltaUsd;\n // Estimate deposit amount based on available price data\n const depositAmount = depositUsd; // USD-denominated\n\n actions.push({\n type: 'deposit',\n venueType: delta.venueType,\n venueAddress: delta.venueAddress,\n token: delta.token,\n amount: depositAmount,\n usdValue: depositUsd,\n });\n }\n\n // Step 6: Generate additional warnings\n const totalRebalanceUsd = actions\n .filter(a => a.type === 'withdraw' || a.type === 'deposit')\n .reduce((sum, a) => sum + a.usdValue, 0);\n\n if (totalRebalanceUsd > totalUsd * 0.5) {\n warnings.push('This rebalance involves more than 50% of your portfolio');\n }\n\n if (actions.some(a => a.type === 'swap')) {\n warnings.push('Swap amounts are estimates - actual amounts may vary due to slippage');\n }\n\n // Sort actions: withdrawals first, then swaps, then deposits\n const sortOrder: Record<string, number> = { withdraw: 0, swap: 1, deposit: 2 };\n actions.sort((a, b) => sortOrder[a.type] - sortOrder[b.type]);\n\n // Estimate gas savings (rough: ~$2 per avoided transaction)\n const individualTxCount = actions.length;\n const bundleTxCount = 1;\n const savedTxs = Math.max(0, individualTxCount - bundleTxCount);\n const estimatedGasSavings = `~$${(savedTxs * 2).toFixed(0)}`;\n\n return {\n actions,\n totalActions: actions.length,\n estimatedGasSavings,\n warnings,\n };\n}\n","import type { VenueType } from './types';\n\nexport const VENUE_COLORS: Record<VenueType, string> = {\n vault: 'var(--compass-color-primary)',\n aave: '#9333ea',\n pendle_pt: '#22c55e',\n};\n\nexport const VENUE_LABELS: Record<VenueType, string> = {\n vault: 'Vault',\n aave: 'Aave',\n pendle_pt: 'Pendle PT',\n};\n","'use client';\n\nimport { useState } from 'react';\nimport { RotateCcw, Equal, X } from 'lucide-react';\nimport { VENUE_COLORS, VENUE_LABELS } from './constants';\nimport { formatUSD } from '../../utils/format';\nimport type { PortfolioState, TargetAllocation } from './types';\n\nexport interface AllocationEditorProps {\n portfolio: PortfolioState;\n targets: TargetAllocation[];\n targetSum: number;\n hasChanges: boolean;\n highlightedVenueAddress?: string;\n onUpdatePercent: (index: number, value: number) => void;\n onRemoveVenue: (index: number) => void;\n onResetToCurrent: () => void;\n onEqualSplit: () => void;\n}\n\nfunction formatPercent(value: number): string {\n if (value === 0) return '0%';\n if (Number.isInteger(value)) return `${value}%`;\n // Trim trailing zeros but keep at least one decimal\n const str = value.toFixed(2).replace(/0+$/, '').replace(/\\.$/, '');\n return `${str}%`;\n}\n\nfunction PercentInput({ value, onChange }: { value: number; onChange: (val: number) => void }) {\n const [localValue, setLocalValue] = useState(value.toString());\n const [isFocused, setIsFocused] = useState(false);\n\n // Sync from parent when not focused\n const roundedStr = parseFloat(value.toFixed(2)).toString();\n if (!isFocused && localValue !== roundedStr) {\n // Only update if the parsed values differ (avoid overwriting user-typed strings)\n const parsed = parseFloat(localValue);\n if (isNaN(parsed) || Math.abs(parsed - value) > 0.001) {\n setLocalValue(roundedStr);\n }\n }\n\n return (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={isFocused ? localValue : formatPercent(value).replace('%', '')}\n onFocus={() => {\n setIsFocused(true);\n setLocalValue(parseFloat(value.toFixed(2)).toString());\n }}\n onChange={(e) => {\n const raw = e.target.value;\n setLocalValue(raw);\n const parsed = parseFloat(raw);\n if (!isNaN(parsed)) {\n onChange(Math.max(0, Math.min(100, parsed)));\n }\n }}\n onBlur={() => {\n setIsFocused(false);\n const parsed = parseFloat(localValue);\n if (!isNaN(parsed)) {\n onChange(Math.max(0, Math.min(100, parsed)));\n }\n }}\n className=\"w-16 text-center text-xs font-mono rounded bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n border: '1px solid var(--compass-color-border)',\n padding: '2px 0',\n }}\n />\n );\n}\n\nexport function AllocationEditor({\n portfolio,\n targets,\n targetSum,\n hasChanges,\n highlightedVenueAddress,\n onUpdatePercent,\n onRemoveVenue,\n onResetToCurrent,\n onEqualSplit,\n}: AllocationEditorProps) {\n return (\n <div>\n {/* Toolbar: action buttons */}\n <div className=\"flex items-center justify-end mb-2\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <button\n onClick={onResetToCurrent}\n className=\"text-xs px-2 py-1 rounded-md transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n }}\n title=\"Reset to current\"\n >\n <RotateCcw size={12} className=\"inline mr-1\" />\n Reset\n </button>\n {targets.length > 1 && (\n <button\n onClick={onEqualSplit}\n className=\"text-xs px-2 py-1 rounded-md transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n }}\n title=\"Split equally\"\n >\n <Equal size={12} className=\"inline mr-1\" />\n Equal\n </button>\n )}\n </div>\n\n {/* Position rows with inline target editing */}\n <div\n className=\"flex flex-col\"\n style={{ gap: '6px' }}\n >\n {targets.map((target, index) => {\n const currentPos = portfolio.positions.find(\n p => p.venueType === target.venueType && p.venueAddress === target.venueAddress\n );\n const currentPercent = currentPos?.allocationPercent ?? 0;\n const diff = target.targetPercent - currentPercent;\n const hasDiff = Math.abs(diff) > 0.1;\n const isHighlighted = highlightedVenueAddress === target.venueAddress;\n\n return (\n <div\n key={`${target.venueType}-${target.venueAddress}`}\n className=\"p-2.5 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderLeft: isHighlighted ? '3px solid var(--compass-color-primary)' : '3px solid transparent',\n }}\n >\n {/* Row 1: venue info + remove */}\n <div className=\"flex items-center gap-2 mb-1.5\">\n <div\n className=\"w-1.5 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: VENUE_COLORS[target.venueType],\n alignSelf: 'stretch',\n }}\n />\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-xs font-medium truncate block\" style={{ color: 'var(--compass-color-text)' }}>\n {target.venueName}\n </span>\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-xs px-1 py-0.5 rounded\"\n style={{\n backgroundColor: VENUE_COLORS[target.venueType] + '20',\n color: VENUE_COLORS[target.venueType],\n fontSize: '10px',\n }}\n >\n {VENUE_LABELS[target.venueType]}\n </span>\n {currentPos && (\n <>\n <span className=\"text-xs font-mono\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '10px' }}>\n {formatUSD(currentPos.usdValue)}\n </span>\n <span style={{ color: 'var(--compass-color-success)', fontSize: '10px' }}>\n {currentPos.apy.toFixed(2)}%\n </span>\n </>\n )}\n {!currentPos && (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '10px' }}>New</span>\n )}\n </div>\n </div>\n <button\n onClick={() => onRemoveVenue(index)}\n className=\"w-5 h-5 flex items-center justify-center rounded flex-shrink-0 opacity-40 hover:opacity-100 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={11} />\n </button>\n </div>\n\n {/* Row 2: allocation bar + controls */}\n <div className=\"flex items-center gap-2\">\n <div\n className=\"flex-1 h-1.5 rounded-full overflow-hidden\"\n style={{ backgroundColor: 'var(--compass-color-border)' }}\n >\n <div\n className=\"h-full rounded-full transition-all\"\n style={{\n width: `${Math.min(target.targetPercent, 100)}%`,\n backgroundColor: VENUE_COLORS[target.venueType],\n opacity: hasDiff ? 0.85 : 1,\n }}\n />\n </div>\n\n <div className=\"flex items-center gap-0.5 flex-shrink-0\">\n <PercentInput\n value={target.targetPercent}\n onChange={(val) => onUpdatePercent(index, val)}\n />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)', width: '12px' }}>%</span>\n </div>\n </div>\n\n {/* Change indicator */}\n {hasDiff && (\n <div className=\"flex justify-end mt-0.5\">\n <span\n className=\"text-xs font-mono\"\n style={{ color: diff > 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)', fontSize: '10px' }}\n >\n {formatPercent(currentPercent)} → {formatPercent(target.targetPercent)}\n </span>\n </div>\n )}\n </div>\n );\n })}\n\n {/* Idle balances (read-only info) */}\n {portfolio.totalIdleUsd > 0 && (\n <div\n className=\"p-2.5 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: 'var(--compass-color-text-tertiary)',\n alignSelf: 'stretch',\n minHeight: '20px',\n }}\n />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Idle (undeployed)\n </span>\n <span className=\"text-xs font-mono ml-auto\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatUSD(portfolio.totalIdleUsd)}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer: total allocation */}\n <div className=\"flex items-center justify-end mt-2\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {formatPercent(targetSum)} allocated\n </span>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Loader2, AlertTriangle, ChevronDown, ChevronRight, ArrowRight, Shield, CheckCircle, Plus, LogOut, ArrowLeftRight, ExternalLink } from 'lucide-react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRebalancingData } from './useRebalancingData';\nimport { computeRebalancePlan } from './rebalancingEngine';\nimport { AllocationEditor } from './AllocationEditor';\nimport { MarketSelector } from '../EarnAccount/MarketSelector';\n\nimport { useChain } from '../../contexts/ChainContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { EarnAccountGuard } from '../../shared/EarnAccountGuard';\nimport { ChainSwitcher } from '../../shared/ChainSwitcher';\nimport { WalletStatus } from '../../shared/WalletStatus';\nimport { EarnAccountBalance } from '../../shared/EarnAccountBalance';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { CopyableAddress } from '../../shared/CopyableAddress';\nimport { SwapForm } from '../../shared/SwapForm';\nimport type { EarnAccountBalanceHandle } from '../../shared/EarnAccountBalance';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport { formatUSD } from '../../utils/format';\nimport type {\n MarketOption as EarnMarketOption,\n UIMarketTab,\n} from '../EarnAccount/types';\nimport type {\n RebalancingWidgetProps,\n TargetAllocation,\n RebalancePlan,\n RebalanceAction,\n} 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\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\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 floorTo(num, 2).toFixed(2);\n}\n\ntype WidgetState =\n | 'loading'\n | 'empty'\n | 'editing'\n | 'previewing'\n | 'ready'\n | 'signing'\n | 'executing'\n | 'success'\n | 'error';\n\nexport function RebalancingWidget({\n showChainSwitcher = true,\n showWalletStatus = true,\n minRebalanceThresholdUsd = 0.01,\n defaultSlippage = 0.5,\n chain,\n onRebalance,\n onError,\n title = 'Portfolio Manager',\n venues,\n showTopUp = true,\n height = '600px',\n}: RebalancingWidgetProps) {\n const { chainId: contextChainId, setChainId } = useChain();\n const CHAIN_ID = chain || contextChainId;\n const { address, signTypedData, isConnected, login, logout, switchChain, walletChainId } = useEmbeddableWallet();\n const { earnAccountAddress } = useEarnAccount();\n const queryClient = useQueryClient();\n const { portfolio, earnAccountMarkets, isMarketsLoading, isLoading, isError, error, refetch } = useRebalancingData(chain);\n\n // Convert venues prop into allowed market IDs for MarketSelector\n const allowedVariableMarketIds = useMemo(() => {\n if (!venues) return undefined;\n if (!venues.aave && !venues.vaults) return undefined;\n const ids: string[] = [];\n if (venues.aave) {\n for (const symbol of venues.aave) ids.push(`aave-${symbol.toLowerCase()}`);\n }\n if (venues.vaults) {\n for (const addr of venues.vaults) ids.push(`vault-${addr}`);\n }\n return ids;\n }, [venues]);\n\n const allowedFixedMarketIds = useMemo(() => {\n if (!venues) return undefined;\n if (!venues.pendle) return undefined;\n const ids: string[] = [];\n for (const addr of venues.pendle) ids.push(`pendle-${addr}`);\n return ids;\n }, [venues]);\n\n // Sync chain prop into context so shared components use the correct chain\n useEffect(() => {\n if (chain && chain !== contextChainId) {\n setChainId(chain as any);\n }\n }, [chain, contextChainId, setChainId]);\n\n const [targets, setTargets] = useState<TargetAllocation[]>([]);\n const [previewPlan, setPreviewPlan] = useState<RebalancePlan | null>(null);\n const [serverPreview, setServerPreview] = useState<any>(null);\n const [widgetState, setWidgetState] = useState<WidgetState>('editing');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [txHash, setTxHash] = useState<string | null>(null);\n const [txConfirmed, setTxConfirmed] = useState(false);\n const [hasInitializedTargets, setHasInitializedTargets] = useState(false);\n // Tracks the allocation % each position had when targets were initialized (or reset).\n // Sent to the server so it can distinguish user-intended changes from data drift.\n const [originalAllocations, setOriginalAllocations] = useState<Record<string, number>>({});\n\n const [isSwapModalOpen, setIsSwapModalOpen] = useState(false);\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n const [isAddMarketExpanded, setIsAddMarketExpanded] = useState(false);\n\n // Derive available tokens from idle balances (replaces hardcoded SUPPORTED_TOKENS)\n const balanceTokens = useMemo(() => {\n if (!portfolio?.idleBalances) return [];\n return portfolio.idleBalances.map(b => b.token);\n }, [portfolio?.idleBalances]);\n\n // Deposit form state\n const [marketTab, setMarketTab] = useState<UIMarketTab>('variable');\n const [selectedMarket, setSelectedMarket] = useState<EarnMarketOption | null>(null);\n const [selectedToken, setSelectedToken] = useState('USDC');\n const [depositAmount, setDepositAmount] = useState('');\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n const [isProcessing, setIsProcessing] = useState(false);\n const [depositError, setDepositError] = useState<string | null>(null);\n const [depositStatus, setDepositStatus] = useState('');\n const earnBalanceRef = useRef<EarnAccountBalanceHandle>(null);\n\n // Reset state when chain changes\n useEffect(() => {\n setTargets([]);\n setOriginalAllocations({});\n setPreviewPlan(null);\n setServerPreview(null);\n setWidgetState('editing');\n setErrorMessage(null);\n setTxHash(null);\n setTxConfirmed(false);\n setHasInitializedTargets(false);\n setIsAddMarketExpanded(false);\n setIsSwapModalOpen(false);\n setSelectedMarket(null);\n setDepositAmount('');\n setDepositError(null);\n setDepositStatus('');\n }, [CHAIN_ID]);\n\n // Auto-initialize targets from current positions once ALL data has loaded\n // (positions + idle balances) to avoid allocationPercent drift\n useEffect(() => {\n if (portfolio && portfolio.positions.length > 0 && !hasInitializedTargets && !isLoading) {\n const origAllocs: Record<string, number> = {};\n setTargets(\n portfolio.positions.map(p => {\n const pct = parseFloat(p.allocationPercent.toFixed(2));\n origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;\n return {\n venueType: p.venueType,\n venueAddress: p.venueAddress,\n venueName: p.venueName,\n token: p.token,\n targetPercent: pct,\n };\n })\n );\n setOriginalAllocations(origAllocs);\n setHasInitializedTargets(true);\n }\n }, [portfolio, hasInitializedTargets, isLoading]);\n\n // Compute current state\n const state: WidgetState = useMemo(() => {\n if (isLoading) return 'loading';\n if (!portfolio || portfolio.positions.length === 0) return 'empty';\n return widgetState;\n }, [isLoading, portfolio, widgetState]);\n\n // Check if targets have changed from current allocation\n const targetSum = useMemo(() => targets.reduce((s, t) => s + t.targetPercent, 0), [targets]);\n const hasChanges = useMemo(() => {\n if (!portfolio || targets.length === 0) return false;\n const hasDiff = targets.some(t => {\n const pos = portfolio.positions.find(\n p => p.venueType === t.venueType && p.venueAddress === t.venueAddress\n );\n return Math.abs(t.targetPercent - (pos?.allocationPercent ?? 0)) > 0.1;\n });\n const hasRemovedPositions = portfolio.positions.some(\n p => p.usdValue > 1 && !targets.some(t => t.venueType === p.venueType && t.venueAddress === p.venueAddress)\n );\n return hasDiff || hasRemovedPositions;\n }, [portfolio, targets]);\n\n // Compute client-side preview instantly as targets change\n const clientPreview = useMemo(() => {\n if (!portfolio || !hasChanges) return null;\n return computeRebalancePlan(portfolio, targets, {\n slippagePercent: defaultSlippage,\n minThresholdUsd: minRebalanceThresholdUsd,\n });\n }, [portfolio, targets, hasChanges, defaultSlippage, minRebalanceThresholdUsd]);\n\n // Reset to current allocation\n const handleResetToCurrent = useCallback(() => {\n if (!portfolio) return;\n const origAllocs: Record<string, number> = {};\n setTargets(\n portfolio.positions.map(p => {\n const pct = parseFloat(p.allocationPercent.toFixed(2));\n origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;\n return {\n venueType: p.venueType,\n venueAddress: p.venueAddress,\n venueName: p.venueName,\n token: p.token,\n targetPercent: pct,\n };\n })\n );\n setOriginalAllocations(origAllocs);\n setPreviewPlan(null);\n setServerPreview(null);\n setWidgetState('editing');\n }, [portfolio]);\n\n // Equal split\n const handleEqualSplit = useCallback(() => {\n if (targets.length === 0) return;\n const equalPercent = 100 / targets.length;\n setTargets(prev => prev.map(t => ({ ...t, targetPercent: parseFloat(equalPercent.toFixed(2)) })));\n }, [targets.length]);\n\n // Remove venue\n const handleRemoveVenue = useCallback((index: number) => {\n setTargets(prev => prev.filter((_, i) => i !== index));\n }, []);\n\n // Update target percent\n const handleUpdatePercent = useCallback((index: number, value: number) => {\n const rounded = parseFloat(Math.max(0, Math.min(100, value)).toFixed(2));\n setTargets(prev => prev.map((t, i) => i === index ? { ...t, targetPercent: rounded } : t));\n }, []);\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 // Server preview\n const handlePreview = useCallback(async () => {\n if (!portfolio || !hasChanges || !address) return;\n setWidgetState('previewing');\n setErrorMessage(null);\n\n try {\n await ensureCorrectChain();\n\n const response = await fetch('/api/compass/rebalance/preview', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n targets: targets.map(t => ({\n venueType: t.venueType === 'vault' ? 'VAULT' : t.venueType === 'aave' ? 'AAVE' : 'PENDLE_PT',\n venueAddress: t.venueAddress,\n targetPercent: t.targetPercent,\n token: t.token,\n originalPercent: originalAllocations[`${t.venueType}-${t.venueAddress.toLowerCase()}`] ?? 0,\n })),\n slippage: defaultSlippage,\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Failed to compute rebalance preview');\n }\n\n const data = await response.json();\n setServerPreview(data);\n setPreviewPlan(clientPreview);\n setWidgetState('ready');\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : 'Preview failed');\n setWidgetState('error');\n onError?.(err instanceof Error ? err : new Error('Preview failed'));\n }\n }, [portfolio, hasChanges, address, CHAIN_ID, targets, defaultSlippage, clientPreview, onError, ensureCorrectChain, originalAllocations]);\n\n // Sign and execute\n const handleExecute = useCallback(async () => {\n if (!serverPreview?.eip712 || !address) return;\n setWidgetState('signing');\n setErrorMessage(null);\n\n try {\n // Use pre-normalized types from server (matches EarnAccountBalance pattern)\n const signature = await signTypedData({\n domain: serverPreview.domain,\n types: serverPreview.normalizedTypes,\n primaryType: 'SafeTx',\n message: serverPreview.message,\n });\n\n setWidgetState('executing');\n\n // Execute via bundle execute endpoint\n const response = await fetch('/api/compass/bundle/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: serverPreview.eip712,\n signature,\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Transaction execution failed');\n }\n\n const data = await response.json();\n setTxHash(data.txHash);\n setTxConfirmed(false);\n setWidgetState('success');\n\n // Poll for on-chain confirmation\n if (data.txHash) {\n const pollInterval = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${data.txHash}&chain=${CHAIN_ID}`);\n if (!res.ok) return;\n const receiptData = await res.json();\n if (receiptData.status === 'success') {\n clearInterval(pollInterval);\n setTxConfirmed(true);\n refetch();\n } else if (receiptData.status === 'reverted') {\n clearInterval(pollInterval);\n setTxHash(null);\n setErrorMessage('Transaction reverted on-chain');\n setWidgetState('error');\n }\n } catch { /* keep polling */ }\n }, 2000);\n setTimeout(() => clearInterval(pollInterval), 120_000);\n }\n\n if (previewPlan) {\n onRebalance?.(previewPlan, data.txHash);\n }\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : 'Execution failed');\n setWidgetState('error');\n onError?.(err instanceof Error ? err : new Error('Execution failed'));\n }\n }, [serverPreview, address, signTypedData, CHAIN_ID, refetch, previewPlan, onRebalance, onError]);\n\n // Available balance of selected token in earn account (for deposit MAX button)\n const earnBalancesQuery = useMemo(() => {\n // Derive from portfolio idle balances\n const idleBalance = portfolio?.idleBalances.find(b => b.token === selectedToken);\n return idleBalance?.balance ?? 0;\n }, [portfolio, selectedToken]);\n\n // Check if we need to swap for deposit\n const needsSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n\n // Helper: build venue params for the manage API from a selected market\n const buildVenueParamsFromMarket = (market: EarnMarketOption) => {\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: EarnMarketOption) => {\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 // Handle deposit action\n const handleDeposit = useCallback(async () => {\n if (!selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || !address || !signTypedData) return;\n\n setIsProcessing(true);\n setDepositError(null);\n const underlyingToken = selectedMarket.underlyingToken;\n\n try {\n let resultTxHash: string;\n\n if (needsSwap) {\n // Swap selectedToken to market's underlying token, then deposit via bundle\n setDepositStatus('Getting swap quote...');\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${CHAIN_ID}&tokenIn=${selectedToken}&tokenOut=${underlyingToken}&amountIn=${depositAmount}`\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 minimal slippage buffer to the deposit amount\n const actualDepositAmount = (parseFloat(estimatedOutput) * 0.99999).toString();\n\n setDepositStatus('Preparing swap and deposit...');\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: underlyingToken,\n amountIn: depositAmount,\n slippage: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue: buildVenueFromMarket(selectedMarket),\n amount: actualDepositAmount,\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 setDepositStatus('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 setDepositStatus('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 resultTxHash = result.txHash;\n } else {\n // Direct deposit (no swap needed) - token matches market's underlying\n setDepositStatus('Preparing deposit...');\n\n const venueParams = buildVenueParamsFromMarket(selectedMarket);\n\n const prepareResponse = await fetch('/api/compass/deposit/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n ...venueParams,\n amount: depositAmount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare deposit');\n }\n\n const prepareData = await prepareResponse.json();\n\n setDepositStatus('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 setDepositStatus('Executing deposit...');\n\n const executeResponse = await fetch('/api/compass/deposit/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,\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 resultTxHash = result.txHash;\n }\n\n setDepositStatus('Deposit successful!');\n setDepositAmount('');\n\n // Invalidate queries to refresh data\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['rebalancing'] });\n refetch();\n\n // Events take time to be processed on-chain, so refetch after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['rebalancing'] });\n refetch();\n }, delay);\n }\n\n setTimeout(() => setDepositStatus(''), 3000);\n } catch (err) {\n setDepositError(err instanceof Error ? err.message : 'Deposit failed');\n setDepositStatus('');\n onError?.(err instanceof Error ? err : new Error('Deposit failed'));\n } finally {\n setIsProcessing(false);\n }\n }, [selectedMarket, depositAmount, address, signTypedData, selectedToken, needsSwap, CHAIN_ID, ensureCorrectChain, queryClient, refetch, onError]);\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {showChainSwitcher && !chain && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <EarnAccountGuard>\n {/* Loading State */}\n {state === 'loading' && (\n <div className=\"flex flex-col items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin mb-3\" style={{ color: 'var(--compass-color-primary)' }} />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>Loading portfolio...</p>\n </div>\n )}\n\n {/* Empty Portfolio / Not Connected */}\n {state === 'empty' && (\n <div className=\"flex flex-col items-center justify-center text-center\" style={{ padding: '48px 16px' }}>\n {!isConnected ? (\n <>\n <p className=\"text-lg font-semibold mb-2\" style={{ color: 'var(--compass-color-text)' }}>Connect your wallet</p>\n <p className=\"text-sm mb-4\" style={{ color: 'var(--compass-color-text-secondary)' }}>Connect your wallet to view and manage your DeFi portfolio.</p>\n {login && (\n <button\n onClick={login}\n className=\"font-semibold\"\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: '10px 20px',\n fontSize: '0.875rem',\n border: 'none',\n }}\n >\n Connect Wallet\n </button>\n )}\n </>\n ) : (\n <>\n <p className=\"text-lg font-semibold mb-2\" style={{ color: 'var(--compass-color-text)' }}>No positions found</p>\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>Deposit into a vault, Aave market, or Pendle market to start rebalancing.</p>\n </>\n )}\n </div>\n )}\n\n {/* Main Content */}\n {state !== 'loading' && state !== 'empty' && portfolio && (\n <>\n {/* ========== TOP SECTION: Title + Balance + Earned ========== */}\n <div className=\"flex flex-col items-center text-center\" style={{ padding: '16px 16px 12px' }}>\n {/* Title + Logout Row */}\n <div className=\"flex items-center justify-between\" style={{ width: '100%', marginBottom: '12px' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n }}\n >\n {title}\n </span>\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n aria-label={`Total balance: ${formatUSD(portfolio.totalUsd)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.75rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatUSD(portfolio.totalUsd)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n </button>\n\n {/* Quick Action Buttons — inline pills */}\n {(showTopUp || balanceTokens.length > 0) && (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '12px' }}>\n {showTopUp && (\n <button\n onClick={() => earnBalanceRef.current?.openTransferModal()}\n aria-label=\"Add money\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balanceTokens.length > 0 && (\n <button\n onClick={() => setIsSwapModalOpen(true)}\n aria-label=\"Swap tokens\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* ========== BOTTOM SECTION: Allocations + Markets ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '10px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '16px 16px 12px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n {/* Allocation Editor */}\n <AllocationEditor\n portfolio={portfolio}\n targets={targets}\n targetSum={targetSum}\n hasChanges={hasChanges}\n highlightedVenueAddress={undefined}\n onUpdatePercent={handleUpdatePercent}\n onRemoveVenue={handleRemoveVenue}\n onResetToCurrent={handleResetToCurrent}\n onEqualSplit={handleEqualSplit}\n />\n\n {/* Add New Market - collapsible section */}\n <button\n onClick={() => setIsAddMarketExpanded(prev => !prev)}\n className=\"flex items-center font-medium transition-all hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '8px 12px',\n gap: '6px',\n fontSize: '0.8125rem',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {isAddMarketExpanded ? <ChevronDown size={14} /> : <Plus size={14} />}\n {isAddMarketExpanded ? 'Hide' : 'Add new market'}\n </button>\n\n {isAddMarketExpanded && (<>\n {/* Market Selector */}\n <MarketSelector\n markets={earnAccountMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={(market) => {\n setSelectedMarket(market);\n setDepositError(null);\n }}\n isLoading={isMarketsLoading}\n />\n\n {/* Amount Input */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px 16px',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '1.125rem', fontWeight: 300 }}>$</span>\n <input\n type=\"number\"\n value={depositAmount}\n onChange={(e) => { setDepositAmount(e.target.value); setDepositError(null); }}\n placeholder=\"0.00\"\n disabled={isProcessing}\n className=\"flex-1 font-bold bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.125rem',\n letterSpacing: '-0.02em',\n minWidth: 0,\n border: 'none',\n }}\n />\n {/* Token Pill */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={isProcessing}\n className=\"flex items-center font-semibold\"\n style={{\n backgroundColor: 'var(--compass-color-surface-hover, var(--compass-color-surface))',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '6px 10px',\n minHeight: '32px',\n gap: '3px',\n fontSize: '0.8125rem',\n border: '1.5px solid var(--compass-color-border)',\n transition: 'all 200ms ease',\n }}\n >\n {selectedToken}\n <ChevronDown size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-2 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n minWidth: '120px',\n overflow: 'hidden',\n }}\n >\n {balanceTokens.map((token) => (\n <button\n key={token}\n onClick={() => {\n setSelectedToken(token);\n setIsTokenDropdownOpen(false);\n setDepositError(null);\n }}\n className=\"w-full text-left font-medium\"\n style={{\n padding: '12px 16px',\n minHeight: '44px',\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: '0.875rem',\n border: 'none',\n transition: 'background-color 150ms ease',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Available + MAX */}\n <div className=\"flex items-center justify-between\" style={{ marginTop: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Available</span>\n <button\n onClick={() => setDepositAmount(earnBalancesQuery.toString())}\n disabled={isProcessing}\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-primary)', fontSize: '0.8125rem', background: 'none', border: 'none', padding: 0 }}\n >\n {formatAmount(earnBalancesQuery)} {selectedToken}\n </button>\n </div>\n </div>\n\n {/* Swap Indicator */}\n {needsSwap && (\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: '8px 12px',\n gap: '8px',\n }}\n >\n <ArrowRight size={14} />\n <span>Swaps {selectedToken} to {selectedMarket?.underlyingToken}, then deposits</span>\n </div>\n )}\n\n {/* Deposit Error */}\n {depositError && (\n <div\n className=\"flex items-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: '12px 14px',\n gap: '8px',\n fontSize: '0.875rem',\n }}\n >\n {depositError}\n </div>\n )}\n\n {/* Deposit Button */}\n <button\n onClick={!isConnected && login ? login : handleDeposit}\n disabled={isConnected && (isProcessing || !selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || parseFloat(depositAmount) > earnBalancesQuery)}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n transition: 'all 200ms ease',\n border: 'none',\n opacity: isConnected && (isProcessing || !selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || parseFloat(depositAmount) > earnBalancesQuery) ? 0.4 : 1,\n }}\n >\n {!isConnected ? 'Connect Wallet' : isProcessing ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Loader2 size={16} className=\"animate-spin\" />\n Processing...\n </span>\n ) : !selectedMarket ? 'Select a market' : needsSwap ? 'Swap & Deposit' : 'Deposit'}\n </button>\n\n {/* Deposit Status Message */}\n {depositStatus && !depositError && (\n <div\n className=\"text-sm text-center\"\n style={{\n backgroundColor: depositStatus.includes('successful')\n ? 'var(--compass-color-success-muted)'\n : 'var(--compass-color-primary-muted, rgba(99, 102, 241, 0.1))',\n color: depositStatus.includes('successful')\n ? 'var(--compass-color-success)'\n : 'var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '10px 12px',\n }}\n >\n {depositStatus}\n </div>\n )}\n </>)}\n\n {/* Client-side Preview */}\n {clientPreview && clientPreview.actions.length > 0 && state === 'editing' && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '16px',\n }}\n >\n <h3 className=\"font-semibold mb-3\" style={{ color: 'var(--compass-color-text)' }}>Preview</h3>\n <ActionList actions={clientPreview.actions} />\n {clientPreview.warnings.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-1\">\n {clientPreview.warnings.map((w, i) => (\n <div key={i} className=\"flex items-start gap-2 text-xs\" style={{ color: 'var(--compass-color-warning, #eab308)' }}>\n <AlertTriangle size={12} className=\"flex-shrink-0 mt-0.5\" />\n <span>{w}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Server Preview */}\n {state === 'ready' && serverPreview && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: '1.5px solid var(--compass-color-primary)',\n padding: '16px',\n }}\n >\n <h3 className=\"font-semibold mb-3\" style={{ color: 'var(--compass-color-text)' }}>Ready to Execute</h3>\n <ActionList actions={serverPreview.actions || []} />\n {(serverPreview.warnings || []).length > 0 && (\n <div className=\"mt-3 flex flex-col gap-1\">\n {serverPreview.warnings.map((w: string, i: number) => (\n <div key={i} className=\"flex items-start gap-2 text-xs\" style={{ color: 'var(--compass-color-warning, #eab308)' }}>\n <AlertTriangle size={12} className=\"flex-shrink-0 mt-0.5\" />\n <span>{w}</span>\n </div>\n ))}\n </div>\n )}\n <p className=\"text-xs mt-2\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {serverPreview.actionsCount} actions in 1 atomic transaction\n </p>\n </div>\n )}\n\n {/* Transaction status with explorer link */}\n {state === 'success' && txHash && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n {txConfirmed ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: txConfirmed ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {txConfirmed ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[CHAIN_ID] || BLOCK_EXPLORERS.ethereum}/tx/${txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center hover:opacity-70 transition-opacity\"\n style={{ gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n {/* Error State */}\n {state === 'error' && errorMessage && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-error-muted, rgba(239, 68, 68, 0.1))',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '16px',\n }}\n >\n <p className=\"text-sm font-medium mb-1\" style={{ color: 'var(--compass-color-error)' }}>{errorMessage}</p>\n <button\n onClick={() => { setWidgetState('editing'); setErrorMessage(null); }}\n className=\"text-xs underline\"\n style={{ color: 'var(--compass-color-error)', background: 'none', border: 'none' }}\n >\n Try again\n </button>\n </div>\n )}\n\n {/* Action Buttons */}\n <div className=\"flex flex-col gap-2\">\n {state === 'editing' && hasChanges && (\n <button\n onClick={handlePreview}\n disabled={!address}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n opacity: !address ? 0.4 : 1,\n transition: 'all 200ms ease',\n }}\n >\n Preview Rebalance\n </button>\n )}\n\n {state === 'previewing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Computing exact amounts...\n </button>\n )}\n\n {state === 'ready' && (\n <button\n onClick={handleExecute}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Confirm & Sign\n </button>\n )}\n\n {state === 'signing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Waiting for signature...\n </button>\n )}\n\n {state === 'executing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Executing on-chain...\n </button>\n )}\n\n {state === 'success' && (\n <button\n onClick={() => { setWidgetState('editing'); setTxHash(null); setTxConfirmed(false); setServerPreview(null); setPreviewPlan(null); }}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Rebalance Again\n </button>\n )}\n\n {(state === 'ready' || state === 'previewing') && (\n <button\n onClick={() => { setWidgetState('editing'); setServerPreview(null); }}\n className=\"w-full text-sm\"\n style={{\n backgroundColor: 'transparent',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '8px',\n border: 'none',\n }}\n >\n Back to editing\n </button>\n )}\n </div>\n\n <WidgetFooter />\n </div>\n </>\n )}\n\n </EarnAccountGuard>\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\" style={{ gap: '12px' }}>\n {address && (\n <CopyableAddress address={address} label=\"Wallet\" />\n )}\n {earnAccountAddress && (\n <CopyableAddress address={earnAccountAddress} label=\"Product Account\" />\n )}\n\n {portfolio && portfolio.idleBalances.length > 0 && (\n <>\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 {portfolio.idleBalances.filter((b) => b.balance >= 0.005).map((b) => (\n <div\n key={b.token}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {b.token}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {floorTo(b.balance, 2).toFixed(2)}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUSD(b.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </>\n )}\n\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>Total</span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatUSD(portfolio?.totalUsd ?? 0)}\n </span>\n </div>\n </div>\n </ActionModal>\n\n </div>{/* end scrollable content area */}\n\n {/* Hidden EarnAccountBalance - only renders modals, triggered by + Add button */}\n <EarnAccountBalance ref={earnBalanceRef} compact hideVisual onTransferComplete={() => refetch()} />\n\n {/* Swap Modal */}\n <ActionModal\n isOpen={isSwapModalOpen}\n onClose={() => setIsSwapModalOpen(false)}\n title=\"Swap Tokens\"\n >\n <SwapForm\n availableFromTokens={balanceTokens}\n balances={Object.fromEntries(\n (portfolio?.idleBalances || []).map(b => [b.token, b.balance.toString()])\n )}\n onSwapSuccess={() => {\n refetch();\n setTimeout(() => refetch(), 5000);\n setTimeout(() => refetch(), 15000);\n }}\n onSwapError={onError}\n />\n </ActionModal>\n\n\n </div>\n );\n}\n\n// Sub-component: Action list display\nfunction ActionList({ actions }: { actions: RebalanceAction[] | any[] }) {\n const actionIcons: Record<string, string> = {\n withdraw: 'Withdraw',\n swap: 'Swap',\n deposit: 'Deposit',\n };\n\n const actionColors: Record<string, string> = {\n withdraw: 'var(--compass-color-error)',\n swap: 'var(--compass-color-warning, #eab308)',\n deposit: 'var(--compass-color-success)',\n };\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {actions.map((action: any, i: number) => (\n <div\n key={i}\n className=\"flex items-center justify-between p-2 rounded-lg text-sm\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"text-xs font-medium px-1.5 py-0.5 rounded\"\n style={{\n backgroundColor: actionColors[action.type] + '20',\n color: actionColors[action.type],\n }}\n >\n {actionIcons[action.type] || action.type}\n </span>\n <span style={{ color: 'var(--compass-color-text)' }}>\n {action.token}\n {action.tokenOut && ` → ${action.tokenOut}`}\n </span>\n </div>\n <span className=\"font-mono text-xs\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatUSD(action.usdValue || 0)}\n </span>\n </div>\n ))}\n </div>\n );\n}\n","import type { FeaturePreset, TabConfig, TabId } from './types';\n\nconst allTabs: TabConfig[] = [\n { id: 'rebalance', label: 'Rebalance', 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 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 || 'rebalance';\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { EarnPositionsList } from '../EarnPositionsList';\nimport { RebalancingWidget } from '../RebalancingWidget';\nimport { getTabsForPreset, getDefaultTab } from './presets';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nexport function CompassEarnWidget({\n preset = 'full',\n enablePositions,\n enableRebalance,\n defaultTab,\n showHeader = true,\n showPnL = 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 === 'positions' && enablePositions !== undefined) enabled = enablePositions;\n if (tab.id === 'rebalance' && enableRebalance !== undefined) enabled = enableRebalance;\n return { ...tab, enabled };\n });\n }, [preset, enablePositions, enableRebalance]);\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 === 'rebalance' && <RebalancingWidget />}\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/contexts/CreditAccountContext.tsx","../src/theme/presets.ts","../src/theme/css-variables.ts","../src/theme/context.tsx","../src/provider/CompassProvider.tsx","../src/shared/ChainSwitcher.tsx","../src/shared/CopyableAddress.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/CreditAccountGuard.tsx","../src/shared/BuyForm.tsx","../src/shared/TxStatus.tsx","../src/shared/useTxPolling.ts","../src/shared/SendForm.tsx","../src/shared/AccountBalancesModal.tsx","../src/shared/EarnAccountBalance.tsx","../src/shared/useSwapQuote.ts","../src/shared/SwapForm.tsx","../src/shared/WidgetFooter.tsx","../src/components/EarnAccount/MarketSelector.tsx","../src/components/EarnAccount/EarningsModal.tsx","../src/components/EarnAccount/EarnAccount.tsx","../src/components/CreditAccount/hooks/useCreditPositions.ts","../src/components/CreditAccount/hooks/useCreditBalances.ts","../src/types/credit.ts","../src/components/CreditAccount/hooks/useTokenPrices.ts","../src/components/CreditAccount/hooks/useCreditBundle.ts","../src/components/CreditAccount/hooks/useBorrow.ts","../src/components/CreditAccount/hooks/useRepay.ts","../src/components/CreditAccount/PositionsView.tsx","../src/components/CreditAccount/BorrowModal.tsx","../src/components/CreditAccount/RepayModal.tsx","../src/components/CreditAccount/SupplyModal.tsx","../src/components/CreditAccount/WithdrawModal.tsx","../src/components/CreditAccount/TopUpModal.tsx","../src/components/CreditAccount/CreditSwapModal.tsx","../src/components/CreditAccount/CreditAccount.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/RebalancingWidget/useRebalancingData.ts","../src/components/RebalancingWidget/rebalancingEngine.ts","../src/components/RebalancingWidget/constants.ts","../src/components/RebalancingWidget/AllocationEditor.tsx","../src/components/RebalancingWidget/RebalancingWidget.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","truncate","Check","Copy","Wallet","LogOut","useRef","X","formatUSD","ChevronDown","AlertCircle","ArrowRight","Loader2","ArrowDownLeft","ArrowUpRight","ExternalLink","Fragment","CheckCircle","CreditCard","XCircle","isAddress","encodeFunctionData","parseUnits","Send","forwardRef","EarnAccountBalance","useImperativeHandle","BLOCK_EXPLORERS","ArrowDownUp","ArrowLeftRight","TrendingUp","ChevronUp","TrendingDown","EVM_CHAIN_IDS","formatCurrency","parseExpiry","positions","error","Plus","Minus","Circle","getExplorerUrl","ChevronRight","ArrowUpCircle","ArrowDownCircle","floorTo","formatUsd","totalBalanceUsd","PositionCard","Percent","Clock","Calendar","Inbox","RotateCcw","Equal","formatAmount","AlertTriangle"],"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 // Sync when defaultChain prop changes (e.g. from external chain selector)\n useEffect(() => {\n if (defaultChain && defaultChain in CHAIN_CONFIG) {\n setChainIdState(defaultChain);\n }\n }, [defaultChain]);\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, FundWalletParams, SendTransactionParams } 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 /** Buy crypto via fiat on-ramp - may not be available depending on wallet adapter */\n fundWallet: ((params: FundWalletParams) => Promise<void>) | null;\n /** Whether the user has an external wallet (false = email/social login, show Buy only) */\n hasExternalWallet: boolean;\n /** Send a raw transaction from the wallet - may not be available depending on wallet adapter */\n sendTransaction: ((params: SendTransactionParams) => Promise<string>) | 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 fundWallet: null,\n hasExternalWallet: true,\n sendTransaction: 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 fundWallet: wallet.fundWallet ?? null,\n hasExternalWallet: wallet.hasExternalWallet ?? true,\n sendTransaction: wallet.sendTransaction ?? 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","'use client';\n\n/**\n * Credit Account Context for Compass Widgets\n *\n * Manages the user's Credit account (Safe wallet) state:\n * - Checks if account exists when wallet connects\n * - Provides account creation functionality\n * - All widgets check this before allowing credit 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 CreditAccountContextValue {\n /** The user's credit account address (Safe wallet) */\n creditAccountAddress: Address | null;\n /** Whether the credit 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 credit account (gas sponsored) */\n createAccount: () => Promise<Address>;\n /** Refresh account status */\n refetch: () => void;\n}\n\nconst CreditAccountContext = createContext<CreditAccountContextValue | null>(null);\n\ninterface CreditAccountProviderProps {\n children: ReactNode;\n}\n\nexport function CreditAccountProvider({ children }: CreditAccountProviderProps) {\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 credit account status when wallet is connected\n const {\n data: accountData,\n isLoading: isChecking,\n error: checkError,\n refetch,\n } = useQuery({\n queryKey: ['creditAccount', address, chainId],\n queryFn: async () => {\n if (!address) return null;\n\n const response = await fetch(\n `/api/compass/credit-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 credit account');\n }\n\n return response.json() as Promise<{\n creditAccountAddress: 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 credit 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.creditAccountAddress as Address;\n }\n\n setIsCreating(true);\n setCreateError(null);\n\n try {\n const response = await fetch('/api/compass/credit-account/create', {\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 credit account');\n }\n\n const result = await response.json();\n\n // Invalidate the query to refetch account status\n await queryClient.invalidateQueries({\n queryKey: ['creditAccount', address, chainId],\n });\n\n return result.creditAccountAddress 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: CreditAccountContextValue = {\n creditAccountAddress: (accountData?.creditAccountAddress 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 <CreditAccountContext.Provider value={value}>\n {children}\n </CreditAccountContext.Provider>\n );\n}\n\n/**\n * Hook to access credit account state and actions\n */\nexport function useCreditAccount(): CreditAccountContextValue {\n const context = useContext(CreditAccountContext);\n\n if (!context) {\n throw new Error('useCreditAccount must be used within a CompassProvider');\n }\n\n return context;\n}\n\nexport { CreditAccountContext };\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\n/**\n * Convert a hex or CSS color to an rgba string with the given opacity.\n * Supports #RGB, #RRGGBB, rgb(), and rgba() formats.\n */\nfunction colorWithOpacity(color: string, opacity: number): string {\n // Handle hex colors\n const hexMatch = color.match(/^#([0-9a-f]{3,8})$/i);\n if (hexMatch) {\n let hex = hexMatch[1];\n if (hex.length === 3) hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n // Handle rgb(r, g, b)\n const rgbMatch = color.match(/^rgb\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/);\n if (rgbMatch) {\n return `rgba(${rgbMatch[1]}, ${rgbMatch[2]}, ${rgbMatch[3]}, ${opacity})`;\n }\n // Fallback: return as-is\n return color;\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 if (!input.overrides) return base;\n\n const merged = deepMerge(base, input.overrides);\n\n // Auto-derive textSecondary/textTertiary from text if only text was overridden\n const textOverrides = input.overrides.colors?.text;\n if (textOverrides?.text) {\n if (!textOverrides.textSecondary) {\n merged.colors.text.textSecondary = colorWithOpacity(textOverrides.text, 0.65);\n }\n if (!textOverrides.textTertiary) {\n merged.colors.text.textTertiary = colorWithOpacity(textOverrides.text, 0.4);\n }\n }\n\n return merged;\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 { CreditAccountProvider } from '../contexts/CreditAccountContext';\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 <CreditAccountProvider>\n <div className=\"compass-widget\" style={{ width: '100%', minHeight: '100%' }}>\n {children}\n </div>\n </CreditAccountProvider>\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 { useState, useCallback } from 'react';\nimport { Copy, Check } from 'lucide-react';\n\nexport interface CopyableAddressProps {\n /** The full address to copy */\n address: string;\n /** Label shown on the left (e.g., \"Wallet\", \"Product Account\") */\n label?: string;\n /** Show truncated address (default: true) */\n truncate?: boolean;\n /** Display variant: 'card' (bordered box) or 'inline' (plain text) */\n variant?: 'card' | 'inline';\n /** Text size class for inline variant (default: 'text-xs') */\n textSize?: string;\n}\n\nfunction truncateAddr(address: string): string {\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n}\n\nexport function CopyableAddress({\n address,\n label,\n truncate = true,\n variant = 'card',\n textSize = 'text-xs',\n}: CopyableAddressProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = useCallback(() => {\n navigator.clipboard.writeText(address);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n }, [address]);\n\n const displayAddr = truncate ? truncateAddr(address) : address;\n\n if (variant === 'inline') {\n return (\n <button\n onClick={handleCopy}\n className={`inline-flex items-center font-mono ${textSize}`}\n style={{\n color: 'var(--compass-color-text-secondary)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n gap: '4px',\n }}\n title={copied ? 'Copied!' : `Copy: ${address}`}\n >\n <span>{displayAddr}</span>\n {copied ? (\n <Check size={10} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <Copy size={10} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n )}\n </button>\n );\n }\n\n return (\n <button\n onClick={handleCopy}\n className=\"flex items-center justify-between p-2.5 rounded-lg transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n cursor: 'pointer',\n width: '100%',\n }}\n title={copied ? 'Copied!' : `Copy: ${address}`}\n >\n {label && (\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {label}\n </span>\n )}\n <span className=\"flex items-center gap-2\">\n <span className=\"text-xs font-mono\" style={{ color: 'var(--compass-color-text)' }}>\n {displayAddr}\n </span>\n {copied ? (\n <Check size={14} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-success)' }} />\n ) : (\n <Copy size={14} className=\"flex-shrink-0\" style={{ color: 'var(--compass-color-text-secondary)' }} />\n )}\n </span>\n </button>\n );\n}\n","'use client';\n\nimport { Wallet, LogOut } from 'lucide-react';\nimport { useCompassWallet } from '../contexts/WalletContext';\nimport { CopyableAddress } from './CopyableAddress';\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 <CopyableAddress\n address={address}\n truncate={!showFullAddress}\n variant=\"inline\"\n textSize={compact ? 'text-xs' : 'text-sm'}\n />\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, useRef, useCallback, 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 const modalRef = useRef<HTMLDivElement>(null);\n\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 }\n\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose]);\n\n // Forward wheel events outside modal to page scroll\n const handleOverlayWheel = useCallback((e: React.WheelEvent) => {\n if (modalRef.current && !modalRef.current.contains(e.target as Node)) {\n window.scrollBy(0, e.deltaY);\n }\n }, []);\n\n if (!isOpen) return null;\n\n return (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4\"\n onWheel={handleOverlayWheel}\n >\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 ref={modalRef}\n className=\"relative w-full max-w-md\"\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 maxHeight: '85vh',\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n scrollbarWidth: 'none',\n }}\n >\n {/* Header */}\n <div\n className=\"flex items-center justify-between border-b sticky top-0 z-10\"\n style={{\n borderColor: 'var(--compass-color-border)',\n padding: 'calc(var(--compass-spacing-card) * 0.75) var(--compass-spacing-card)',\n backgroundColor: 'var(--compass-color-surface)',\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 const floored = Math.floor(Math.abs(value) * 100) / 100;\n return `${prefix}${floored.toFixed(2)}`;\n };\n\n const formatUSD = (value: number) => {\n const usdValue = value * tokenPrice;\n const prefix = usdValue >= 0 ? '+$' : '-$';\n return `${prefix}${(Math.floor(Math.abs(usdValue) * 100) / 100).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 const factor = Math.pow(10, 2);\n return (Math.floor(num * factor) / factor).toFixed(2);\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 const floored = Math.floor(num * 100) / 100;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(floored);\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 scrollbarWidth: 'none',\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 scrollbarWidth: 'none',\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 {(Math.floor(parseFloat(item.event.amount) * 100) / 100).toFixed(2)} {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\n/**\n * CreditAccountGuard Component\n *\n * Ensures a credit 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 { useCreditAccount } from '../contexts/CreditAccountContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { Loader2 } from 'lucide-react';\n\ninterface CreditAccountGuardProps {\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 CreditAccountGuard({\n children,\n loadingComponent,\n createAccountComponent,\n}: CreditAccountGuardProps) {\n const { isConnected, login } = useEmbeddableWallet();\n const { isDeployed, isChecking, isCreating, createAccount, error } = useCreditAccount();\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-credit-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-credit-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 className=\"relative w-12 h-12 mx-auto mb-4\">\n <div\n className=\"absolute inset-0\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n opacity: 0.15,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n />\n <div className=\"relative w-full h-full flex items-center justify-center\">\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=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\" />\n </svg>\n </div>\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 Credit 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 Credit Account is a smart wallet that lets you borrow and lend on Aave.\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 Credit 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 { useState, useCallback } from 'react';\nimport { CreditCard, Loader2, CheckCircle, AlertCircle } from 'lucide-react';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\n\ninterface BuyFormProps {\n /** Target address to fund (earn/credit account) */\n targetAddress: string;\n /** Default asset to buy */\n defaultAsset?: string;\n /** Called after user exits the on-ramp flow */\n onComplete?: () => void;\n}\n\nconst EVM_CHAIN_IDS: Record<string, number> = {\n ethereum: 1,\n base: 8453,\n arbitrum: 42161,\n};\n\ntype BuyState = 'idle' | 'buying' | 'success' | 'error';\n\nexport function BuyForm({ targetAddress, defaultAsset = 'USDC', onComplete }: BuyFormProps) {\n const { fundWallet } = useEmbeddableWallet();\n const { chainId } = useChain();\n const [amount, setAmount] = useState('');\n const [state, setState] = useState<BuyState>('idle');\n const [error, setError] = useState<string | null>(null);\n\n const numericChainId = EVM_CHAIN_IDS[chainId] || 8453;\n\n const handleBuy = useCallback(async () => {\n if (!fundWallet || !amount || parseFloat(amount) <= 0) {\n return;\n }\n\n setState('buying');\n setError(null);\n try {\n await fundWallet({\n address: targetAddress,\n chainId: numericChainId,\n asset: defaultAsset,\n amount,\n });\n setState('success');\n onComplete?.();\n setTimeout(() => setState('idle'), 3000);\n } catch (err) {\n setState('error');\n setError(err instanceof Error ? err.message : 'Purchase failed. Please try again.');\n }\n }, [fundWallet, amount, targetAddress, numericChainId, defaultAsset, onComplete]);\n\n const chainName = chainId.charAt(0).toUpperCase() + chainId.slice(1);\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <p\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text)', fontFamily: 'var(--compass-font-family)' }}\n >\n Buy {defaultAsset} on {chainName}\n </p>\n\n {/* Amount input */}\n <div>\n <label\n className=\"block text-sm mb-1.5\"\n style={{ color: 'var(--compass-color-text-secondary)', fontFamily: 'var(--compass-font-family)' }}\n >\n Amount (USD)\n </label>\n <div className=\"relative\">\n <span\n className=\"absolute left-3 top-1/2 -translate-y-1/2 text-sm\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n $\n </span>\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); if (state === 'error') { setState('idle'); setError(null); } }}\n disabled={state === 'buying'}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pl-7 text-sm focus:outline-none disabled:opacity-50\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n </div>\n </div>\n\n {/* Description */}\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)', fontFamily: 'var(--compass-font-family)' }}\n >\n Buy crypto with card or bank transfer. Funds are sent directly to your account.\n </p>\n\n {/* Success message */}\n {state === 'success' && (\n <div\n className=\"flex items-center gap-2 p-3 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-success-muted, rgba(34,197,94,0.1))',\n color: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <CheckCircle size={16} />\n Purchase initiated. Funds may take a few minutes to arrive.\n </div>\n )}\n\n {/* Error message */}\n {state === 'error' && error && (\n <div\n className=\"flex items-center gap-2 p-3 text-sm\"\n style={{\n backgroundColor: 'var(--compass-color-error-muted, rgba(239,68,68,0.1))',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <AlertCircle size={16} />\n {error}\n </div>\n )}\n\n {/* Buy button */}\n <button\n onClick={handleBuy}\n disabled={state === 'buying' || !amount || parseFloat(amount) <= 0}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {state === 'buying' ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Processing...\n </>\n ) : (\n <>\n <CreditCard className=\"h-4 w-4\" />\n Buy with card / bank\n </>\n )}\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { Loader2, CheckCircle, XCircle, ExternalLink } from 'lucide-react';\nimport { useChain } from '../contexts/ChainContext';\nimport type { TxState } from '../types/credit';\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nexport function TxStatus({ state }: { state: TxState }) {\n const { chainId } = useChain();\n\n if (state.status === 'idle') return null;\n\n const explorer = BLOCK_EXPLORERS[chainId] || BLOCK_EXPLORERS.ethereum;\n\n return (\n <div\n className=\"mt-4 p-4 border\"\n style={{\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {state.status === 'preparing' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Preparing transaction...\n </span>\n </div>\n )}\n\n {state.status === 'signing' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-warning)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Waiting for signature...\n </span>\n </div>\n )}\n\n {state.status === 'broadcasting' && (\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text-secondary)' }}>\n Broadcasting transaction...\n </span>\n </div>\n )}\n\n {state.status === 'submitted' && (\n <div>\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-sm\">\n <Loader2\n className=\"h-4 w-4 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span style={{ color: 'var(--compass-color-text)' }}>\n Transaction submitted\n </span>\n </div>\n <a\n href={`${explorer}/tx/${state.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1.5 text-xs hover:opacity-70 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n View on explorer\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n <p\n className=\"text-xs mt-2\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Waiting for on-chain confirmation. Balances will update automatically.\n </p>\n </div>\n )}\n\n {state.status === 'confirmed' && (\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3 text-sm\">\n <CheckCircle\n className=\"h-4 w-4\"\n style={{ color: 'var(--compass-color-success)' }}\n />\n <span style={{ color: 'var(--compass-color-success)' }}>\n Transaction confirmed\n </span>\n </div>\n <a\n href={`${explorer}/tx/${state.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center gap-1.5 text-xs hover:opacity-70 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n View on explorer\n <ExternalLink className=\"h-3 w-3\" />\n </a>\n </div>\n )}\n\n {state.status === 'failed' && (\n <div className=\"flex items-start gap-3 text-sm\">\n <XCircle\n className=\"h-4 w-4 mt-0.5 shrink-0\"\n style={{ color: 'var(--compass-color-error)' }}\n />\n <span\n className=\"break-all\"\n style={{ color: 'var(--compass-color-error)' }}\n >\n {state.error}\n </span>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useRef, useCallback, useEffect } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useChain } from '../contexts/ChainContext';\nimport type { TxState } from '../types/credit';\n\ninterface UseTxPollingOptions {\n queryKeysToInvalidate?: string[][];\n}\n\nexport function useTxPolling(options: UseTxPollingOptions = {}) {\n const { chainId } = useChain();\n const queryClient = useQueryClient();\n const pollIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearPolling = useCallback(() => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n pollIntervalRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => clearPolling();\n }, [clearPolling]);\n\n const startPolling = useCallback(\n (txHash: string, setTxState: (s: TxState) => void) => {\n clearPolling();\n let polls = 0;\n\n pollIntervalRef.current = setInterval(async () => {\n polls++;\n\n for (const key of options.queryKeysToInvalidate ?? []) {\n queryClient.invalidateQueries({ queryKey: key });\n }\n\n try {\n const res = await fetch(\n `/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`\n );\n const data = await res.json();\n if (data.status === 'success') {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearPolling();\n setTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch (err) {\n if (err instanceof TypeError && err.message.includes('fetch')) {\n // Network error — safe to retry\n } else {\n console.warn('[useTxPolling] Unexpected error polling tx receipt:', err);\n }\n }\n\n if (polls >= 24) {\n clearPolling();\n setTxState({ status: 'failed', error: 'Unable to confirm transaction. Please check a block explorer to verify.' });\n }\n }, 5_000);\n },\n [chainId, clearPolling, queryClient, options.queryKeysToInvalidate]\n );\n\n return { startPolling, clearPolling };\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { Send, Loader2 } from 'lucide-react';\nimport { isAddress, encodeFunctionData, parseUnits } from 'viem';\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { TxStatus } from './TxStatus';\nimport { useTxPolling } from './useTxPolling';\nimport type { TxState } from '../types/credit';\n\nconst USDC_ADDRESSES: Record<string, `0x${string}`> = {\n ethereum: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n base: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n arbitrum: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n};\n\nconst ERC20_TRANSFER_ABI = [\n {\n type: 'function' as const,\n name: 'transfer',\n inputs: [\n { name: 'to', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n stateMutability: 'nonpayable' as const,\n },\n] as const;\n\nasync function waitForReceipt(txHash: string, chainId: string): Promise<void> {\n const maxPolls = 60;\n for (let i = 0; i < maxPolls; i++) {\n await new Promise(resolve => setTimeout(resolve, 3_000));\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`);\n const data = await res.json();\n if (data.status === 'success') return;\n if (data.status === 'reverted') throw new Error('Withdrawal transaction reverted');\n } catch (err) {\n if (err instanceof Error && err.message.includes('reverted')) throw err;\n // Network error — safe to retry\n }\n }\n throw new Error('Unable to confirm withdrawal. Please check a block explorer to verify.');\n}\n\ninterface SendFormProps {\n onComplete?: () => void;\n product?: 'earn' | 'credit';\n productAccountAddress?: string;\n}\n\nexport function SendForm({ onComplete, product = 'earn', productAccountAddress }: SendFormProps) {\n const { sendTransaction, signTypedData, address } = useEmbeddableWallet();\n const { chainId } = useChain();\n const { earnAccountAddress, isDeployed } = useEarnAccount();\n\n const [recipient, setRecipient] = useState('');\n const [amount, setAmount] = useState('');\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n\n const { startPolling } = useTxPolling({\n queryKeysToInvalidate: product === 'credit'\n ? [['creditBalances'], ['creditPositions'], ['eoaBalances']]\n : [['earnAccountBalances'], ['eoaBalances']],\n });\n\n // Fetch product account USDC balance for available display\n const { data: earnBalanceData } = 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) return null;\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 && product === 'earn',\n staleTime: 30 * 1000,\n });\n\n const { data: creditBalanceData } = useQuery({\n queryKey: ['creditBalances', productAccountAddress, chainId],\n queryFn: async () => {\n if (!productAccountAddress) return null;\n const response = await fetch(\n `/api/compass/credit/balances?owner=${productAccountAddress}&chain=${chainId}`\n );\n if (!response.ok) return null;\n return response.json() as Promise<{ tokenSymbol: string; amount: string }[]>;\n },\n enabled: !!productAccountAddress && product === 'credit',\n staleTime: 30 * 1000,\n });\n\n const availableBalance = product === 'credit'\n ? (creditBalanceData?.find(b => b.tokenSymbol === 'USDC')?.amount || '0')\n : (earnBalanceData?.balances?.['USDC']?.balance || '0');\n\n const tokenAddress = USDC_ADDRESSES[chainId];\n const isValidAddress = recipient.length > 0 && isAddress(recipient);\n const isValidAmount = amount.length > 0 && parseFloat(amount) > 0;\n const exceedsBalance = isValidAmount && parseFloat(amount) > parseFloat(availableBalance);\n const isBusy = txState.status !== 'idle' && txState.status !== 'confirmed' && txState.status !== 'failed';\n const canSend = isValidAddress && isValidAmount && !exceedsBalance && !!sendTransaction && !!signTypedData && !isBusy;\n\n const handleSend = useCallback(async () => {\n if (!sendTransaction || !signTypedData || !isValidAddress || !isValidAmount || !tokenAddress) return;\n\n try {\n // Step 1: Prepare withdrawal from earn account to EOA\n setTxState({ status: 'preparing' });\n\n const prepareRes = 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: 'USDC',\n amount,\n action: 'WITHDRAW',\n ...(product === 'credit' ? { product: 'credit' } : {}),\n }),\n });\n\n if (!prepareRes.ok) {\n const errData = await prepareRes.json();\n throw new Error(errData.error || 'Failed to prepare withdrawal');\n }\n\n const prepareData = await prepareRes.json();\n\n // Step 2: Sign withdrawal\n setTxState({ status: 'signing' });\n\n const withdrawSig = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n // Step 3: Execute withdrawal (gas-sponsored)\n setTxState({ status: 'broadcasting' });\n\n const executeRes = 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: withdrawSig,\n ...(product === 'credit' ? { product: 'credit' } : {}),\n }),\n });\n\n if (!executeRes.ok) {\n const errData = await executeRes.json();\n throw new Error(errData.error || 'Withdrawal failed');\n }\n\n const { txHash: withdrawHash } = await executeRes.json();\n\n // Step 4: Wait for withdrawal confirmation\n await waitForReceipt(withdrawHash, chainId);\n\n // Step 5: Send from EOA to recipient\n setTxState({ status: 'signing' });\n\n const data = encodeFunctionData({\n abi: ERC20_TRANSFER_ABI,\n functionName: 'transfer',\n args: [recipient as `0x${string}`, parseUnits(amount, 6)],\n });\n\n const sendHash = await sendTransaction({ to: tokenAddress, data });\n\n // Step 6: Track send tx with explorer link\n setTxState({ status: 'submitted', txHash: sendHash });\n startPolling(sendHash, setTxState);\n setAmount('');\n setRecipient('');\n onComplete?.();\n } catch (err) {\n setTxState({ status: 'failed', error: err instanceof Error ? err.message : 'Transaction failed' });\n }\n }, [sendTransaction, signTypedData, recipient, amount, address, chainId, tokenAddress, isValidAddress, isValidAmount, onComplete, startPolling, product]);\n\n const chainName = chainId.charAt(0).toUpperCase() + chainId.slice(1);\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <p\n className=\"text-sm font-medium\"\n style={{ color: 'var(--compass-color-text)', fontFamily: 'var(--compass-font-family)' }}\n >\n Send USDC on {chainName}\n </p>\n\n {/* Recipient address */}\n <div>\n <label\n className=\"block text-sm mb-1.5\"\n style={{ color: 'var(--compass-color-text-secondary)', fontFamily: 'var(--compass-font-family)' }}\n >\n Recipient Address\n </label>\n <input\n type=\"text\"\n value={recipient}\n onChange={(e) => { setRecipient(e.target.value); if (txState.status === 'failed') setTxState({ status: 'idle' }); }}\n disabled={isBusy}\n placeholder=\"0x...\"\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none disabled:opacity-50 font-mono\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: recipient && !isValidAddress ? 'var(--compass-color-error)' : 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n {recipient && !isValidAddress && (\n <p className=\"text-xs mt-1\" style={{ color: 'var(--compass-color-error)' }}>\n Invalid Ethereum address\n </p>\n )}\n {isValidAddress && recipient.toLowerCase() === address?.toLowerCase() && (\n <p className=\"text-xs mt-1\" style={{ color: 'var(--compass-color-warning, #f59e0b)' }}>\n This is your own wallet address\n </p>\n )}\n {isValidAddress && earnAccountAddress && recipient.toLowerCase() === earnAccountAddress.toLowerCase() && (\n <p className=\"text-xs mt-1\" style={{ color: 'var(--compass-color-warning, #f59e0b)' }}>\n This is your savings account address\n </p>\n )}\n </div>\n\n {/* Amount input */}\n <div>\n <label\n className=\"block text-sm mb-1.5\"\n style={{ color: 'var(--compass-color-text-secondary)', fontFamily: 'var(--compass-font-family)' }}\n >\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); if (txState.status === 'failed') setTxState({ status: 'idle' }); }}\n disabled={isBusy}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none disabled:opacity-50\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n USDC\n </span>\n </div>\n <button\n onClick={() => setAmount(availableBalance)}\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-primary)', cursor: 'pointer', background: 'none', border: 'none', padding: 0 }}\n >\n Available: {parseFloat(availableBalance).toFixed(2)} USDC\n </button>\n {exceedsBalance && (\n <p className=\"text-xs mt-1\" style={{ color: 'var(--compass-color-error)' }}>\n Amount exceeds available balance\n </p>\n )}\n </div>\n\n {/* Description */}\n <p\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)', fontFamily: 'var(--compass-font-family)' }}\n >\n Send USDC from your account to any address. Requires 2 signatures. Gas fees are sponsored.\n </p>\n\n {/* TxStatus */}\n <TxStatus state={txState} />\n\n {/* Send button */}\n <button\n onClick={handleSend}\n disabled={!canSend}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n Sending...\n </>\n ) : (\n <>\n <Send className=\"h-4 w-4\" />\n Send USDC\n </>\n )}\n </button>\n </div>\n );\n}\n","'use client';\n\nimport { Loader2 } from 'lucide-react';\nimport { ActionModal } from './ActionModal';\nimport { CopyableAddress } from './CopyableAddress';\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 walletAddress?: string;\n}\n\nexport function AccountBalancesModal({\n isOpen,\n onClose,\n balances,\n totalUsdValue,\n isLoading = false,\n earnAccountAddress,\n walletAddress,\n}: AccountBalancesModalProps) {\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Balance Breakdown\">\n <div className=\"flex flex-col gap-3\">\n {/* Addresses */}\n {(walletAddress || earnAccountAddress) && (\n <div className=\"flex flex-col gap-1.5\">\n {walletAddress && (\n <CopyableAddress address={walletAddress} label=\"Wallet\" />\n )}\n {earnAccountAddress && (\n <CopyableAddress address={earnAccountAddress} label=\"Product Account\" />\n )}\n </div>\n )}\n {isLoading ? (\n <div className=\"flex items-center justify-center py-4\">\n <Loader2\n size={24}\n className=\"animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n </div>\n ) : balances.length === 0 ? (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No tokens in account\n </div>\n ) : (\n <>\n {/* Account Balances */}\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 <div\n className=\"flex flex-col gap-2\"\n style={{\n maxHeight: '50vh',\n overflowY: 'auto',\n scrollbarWidth: 'none',\n }}\n >\n {balances.filter((token) => parseFloat(token.balance) >= 0.005).map((token) => (\n <div\n key={token.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 flexShrink: 0,\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {token.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(token.balance)}\n </span>\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {formatUSD(token.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\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 {formatUSD(totalUsdValue)}\n </span>\n </div>\n </>\n )}\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useCallback, forwardRef, useImperativeHandle } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Wallet, ArrowUpRight, ArrowDownLeft, ArrowRight, Loader2, Send } from 'lucide-react';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEarnAccount } from '../contexts/EarnAccountContext';\nimport { ActionModal } from './ActionModal';\nimport { BuyForm } from './BuyForm';\nimport { SendForm } from './SendForm';\nimport { TxStatus } from './TxStatus';\nimport { useTxPolling } from './useTxPolling';\nimport { formatAmount, formatUSD } from '../utils/format';\nimport { AccountBalancesModal, type TokenBalance } from './AccountBalancesModal';\nimport type { TxState } from '../types/credit';\n\ntype TransferAction = 'deposit' | 'withdraw' | 'buy' | 'send';\n\nexport interface EarnAccountBalanceProps {\n /** Compact mode - just show total USD value */\n compact?: boolean;\n /** Hide visual buttons, only render modals (for external trigger via ref) */\n hideVisual?: boolean;\n /** Callback when transfer completes */\n onTransferComplete?: (\n action: TransferAction,\n token: string,\n amount: string,\n txHash: string\n ) => void;\n}\n\nexport interface EarnAccountBalanceHandle {\n openTransferModal: () => void;\n}\n\nconst TRANSFER_TOKEN = 'USDC';\n\nexport const EarnAccountBalance = forwardRef<EarnAccountBalanceHandle, EarnAccountBalanceProps>(function EarnAccountBalance({\n compact = false,\n hideVisual = false,\n onTransferComplete,\n}: EarnAccountBalanceProps, ref) {\n const { address, isConnected, signTypedData, switchChain, walletChainId, fundWallet, hasExternalWallet, sendTransaction } = useEmbeddableWallet();\n const { chainId, chain } = useChain();\n const { earnAccountAddress, isDeployed } = useEarnAccount();\n const queryClient = useQueryClient();\n\n const showBuyTab = !!fundWallet;\n const showSendTab = !!sendTransaction && !hasExternalWallet;\n const buyOnly = !hasExternalWallet && showBuyTab && !sendTransaction;\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [activeAction, setActiveAction] = useState<TransferAction>(\n !hasExternalWallet && fundWallet ? 'buy' : 'deposit'\n );\n const selectedToken = TRANSFER_TOKEN;\n const [amount, setAmount] = useState('');\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n const { startPolling, clearPolling } = useTxPolling({\n queryKeysToInvalidate: [['earnAccountBalances'], ['eoaBalances']],\n });\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 USDC balance for external wallet deposits\n const { data: eoaBalances } = useQuery({\n queryKey: ['eoaBalances', chainId, address, TRANSFER_TOKEN],\n queryFn: async () => {\n if (!address) return {};\n try {\n const response = await fetch(\n `/api/compass/token/balance?chain=${chainId}&token=${TRANSFER_TOKEN}&address=${address}`\n );\n if (response.ok) {\n const data = await response.json();\n return { [TRANSFER_TOKEN]: data.balance || '0' };\n }\n } catch {\n // Ignore errors\n }\n return {};\n },\n enabled: !!address && hasExternalWallet && activeAction === 'deposit',\n staleTime: 30 * 1000,\n });\n\n const earnBalances = balanceData?.balances || {};\n\n // Total USD value from earn account only (embedded wallet is just a signing tool)\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 setTxState({ status: 'idle' });\n clearPolling();\n }, [clearPolling]);\n\n const handleOpenModal = () => {\n resetForm();\n setIsModalOpen(true);\n };\n\n useImperativeHandle(ref, () => ({\n openTransferModal: handleOpenModal,\n }));\n\n const handleCloseModal = () => {\n setIsModalOpen(false);\n resetForm();\n };\n\n const handleActionChange = (action: TransferAction) => {\n setActiveAction(action);\n setAmount('');\n setTxState({ status: 'idle' });\n clearPolling();\n };\n\n const getMaxBalance = () => {\n if (activeAction === 'deposit') {\n return eoaBalances?.[selectedToken] || '0';\n }\n return earnBalanceAmounts[selectedToken] || '0';\n };\n\n const handleTransfer = useCallback(async () => {\n if (!address || !amount || !signTypedData) return;\n\n setTxState({ status: 'preparing' });\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 try {\n await switchChain(targetChainId);\n } catch {\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 try {\n await switchChain(targetChainId);\n } catch {\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 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 setTxState({ status: 'signing' });\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setTxState({ status: 'broadcasting' });\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 setTxState({ status: 'signing' });\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 const transferSignature = await signTypedData({\n domain: prepareData.domain,\n types: prepareData.normalizedTypes,\n primaryType: prepareData.primaryType,\n message: prepareData.message,\n });\n\n setTxState({ status: 'broadcasting' });\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 setTxState({ status: 'submitted', txHash });\n startPolling(txHash, setTxState);\n\n onTransferComplete?.(activeAction, selectedToken, amount, txHash);\n setAmount('');\n } catch (err) {\n setTxState({ status: 'failed', error: 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 onTransferComplete,\n startPolling,\n ]);\n\n if (!isConnected) {\n return null;\n }\n\n const isProcessing = txState.status !== 'idle' && txState.status !== 'confirmed' && txState.status !== 'failed';\n\n // Show loading or \"not deployed\" state\n if (!isDeployed && !hideVisual) {\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 {!hideVisual && (\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 )}\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 walletAddress={address ?? undefined}\n />\n\n {/* Transfer Modal */}\n <ActionModal\n isOpen={isModalOpen}\n onClose={handleCloseModal}\n title={showSendTab ? \"Manage Funds\" : buyOnly ? \"Add Funds\" : \"Transfer Funds\"}\n >\n <div className=\"flex flex-col gap-4\">\n {/* Action Tabs */}\n {buyOnly ? null : (\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 {([\n ...(showSendTab ? ['buy', 'send'] as const : ['deposit', 'withdraw', ...(showBuyTab ? ['buy'] as const : [])]),\n ] as TransferAction[]).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' ? <ArrowDownLeft size={14} /> : action === 'withdraw' ? <ArrowUpRight size={14} /> : action === 'send' ? <Send size={14} /> : <ArrowRight size={14} />}\n {action}\n </button>\n ))}\n </div>\n )}\n\n {activeAction === 'send' ? (\n <SendForm\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['eoaBalances'] });\n }}\n />\n ) : activeAction === 'buy' || buyOnly ? (\n <BuyForm\n targetAddress={earnAccountAddress || ''}\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['eoaBalances'] });\n }}\n />\n ) : (\n <>\n {/* Amount Input */}\n <div>\n <label\n className=\"text-sm font-medium mb-1 block\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Amount\n </label>\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 if (txState.status === 'failed') setTxState({ status: 'idle' });\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 USDC\n </span>\n </div>\n <button\n onClick={() => setAmount(formatAmount(getMaxBalance()))}\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-primary)', cursor: 'pointer', background: 'none', border: 'none', padding: 0 }}\n >\n Available: {formatAmount(getMaxBalance())} USDC\n </button>\n </div>\n\n {/* Description */}\n <p className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {activeAction === 'deposit'\n ? `Approves the token transfer, then transfers USDC from your ${!hasExternalWallet ? 'embedded ' : ''}wallet into your savings account. Requires 2 signatures.${!hasExternalWallet ? ' Note: deposit and withdraw use your embedded wallet, not your bank account.' : ''}`\n : `Moves USDC from your savings account back to your ${!hasExternalWallet ? 'embedded ' : ''}wallet. Requires 1 signature.${!hasExternalWallet ? ' Gas fees are sponsored.' : ''}`}\n </p>\n\n {/* TxStatus */}\n <TxStatus state={txState} />\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 ? (\n <><Loader2 size={18} className=\"animate-spin\" /> Processing...</>\n ) : (\n <><ArrowUpRight size={16} /> {activeAction === 'deposit' ? 'Transfer to Savings Account' : 'Withdraw to Wallet'}</>\n )}\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 </>\n )}\n </div>\n </ActionModal>\n </>\n );\n});\n","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../contexts/ChainContext';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\n\nexport interface SwapQuote {\n inputAmount: string;\n outputAmount: string;\n rate: string;\n}\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 } = useEmbeddableWallet();\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 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 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 },\n enabled: enabled && !!address && !!fromToken && !!toToken && !!amount && parseFloat(amount) > 0,\n staleTime: 10 * 1000,\n refetchInterval: 15 * 1000,\n retry: 1,\n });\n\n return {\n quote: query.data,\n isLoading: query.isLoading,\n isError: query.isError,\n error: query.error,\n refetch: query.refetch,\n };\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { ArrowDownUp, Loader2, AlertCircle, ChevronDown, ArrowLeftRight, CheckCircle, ExternalLink } from 'lucide-react';\nimport { useSwapQuote } from './useSwapQuote';\nimport { useEmbeddableWallet } from '../contexts/WalletContext';\nimport { useChain } from '../contexts/ChainContext';\n\n/** Truncate a number to `decimals` places (floor, no rounding) */\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nconst COMMON_TOKENS = [\n 'USDC', 'USDT', 'DAI', 'USDS', 'USDE', 'sUSDE', 'sDAI',\n 'FRAX', 'LUSD', 'GUSD', 'PYUSD', 'crvUSD', 'GHO',\n 'EURC', 'EURS', 'EURA',\n 'WETH', 'WBTC', 'wstETH', 'cbETH', 'rETH',\n];\n\nexport interface SwapFormProps {\n availableFromTokens: string[];\n availableToTokens?: string[];\n balances?: Record<string, string>;\n defaultFromToken?: string;\n defaultToToken?: string;\n onSwapSuccess?: (fromToken: string, toToken: string, amountIn: string, amountOut: string, txHash: string) => void;\n onSwapError?: (error: Error) => void;\n}\n\nexport function SwapForm({\n availableFromTokens,\n availableToTokens,\n balances,\n defaultFromToken,\n defaultToToken,\n onSwapSuccess,\n onSwapError,\n}: SwapFormProps) {\n const toTokens = availableToTokens\n ? Array.from(new Set([...availableFromTokens, ...availableToTokens]))\n : Array.from(new Set([...availableFromTokens, ...COMMON_TOKENS]));\n\n const [fromToken, setFromToken] = useState(defaultFromToken || availableFromTokens[0] || 'USDC');\n const [toToken, setToToken] = useState(defaultToToken || toTokens.find(t => t !== (defaultFromToken || availableFromTokens[0])) || 'USDC');\n const [fromAmount, setFromAmount] = useState('');\n const [isSwapping, setIsSwapping] = useState(false);\n const [swapStatus, setSwapStatus] = useState('');\n const [lastTxHash, setLastTxHash] = useState<string | null>(null);\n const [txConfirmed, setTxConfirmed] = useState(false);\n const [isFromOpen, setIsFromOpen] = useState(false);\n const [isToOpen, setIsToOpen] = useState(false);\n const swapPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const swapTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n };\n }, []);\n\n const { address, isConnected, signTypedData } = useEmbeddableWallet();\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 const oldFrom = fromToken;\n const oldTo = toToken;\n if (availableFromTokens.includes(oldTo)) {\n setFromToken(oldTo);\n setToToken(oldFrom);\n setFromAmount('');\n }\n }, [fromToken, toToken, availableFromTokens]);\n\n const handleSwap = useCallback(async () => {\n if (!address || !fromAmount || !quote || !signTypedData) return;\n\n setIsSwapping(true);\n setSwapStatus('Preparing swap...');\n setLastTxHash(null);\n setTxConfirmed(false);\n\n try {\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 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 setSwapStatus('Confirming on chain...');\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 // Show txHash immediately so user can track on explorer\n const savedFromAmount = fromAmount;\n setLastTxHash(txHash || null);\n setTxConfirmed(false);\n setIsSwapping(false);\n setSwapStatus('');\n setFromAmount('');\n\n // Poll for on-chain confirmation, only call onSwapSuccess after confirmed\n if (txHash) {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n\n swapPollRef.current = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`);\n if (!res.ok) return;\n const data = await res.json();\n if (data.status === 'success') {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n setTxConfirmed(true);\n onSwapSuccess?.(fromToken, toToken, savedFromAmount, quote.outputAmount, txHash);\n } else if (data.status === 'reverted') {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n if (swapTimeoutRef.current) clearTimeout(swapTimeoutRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n setLastTxHash(null);\n onSwapError?.(new Error('Transaction reverted on-chain'));\n }\n } catch { /* keep polling */ }\n }, 2000);\n swapTimeoutRef.current = setTimeout(() => {\n if (swapPollRef.current) clearInterval(swapPollRef.current);\n swapPollRef.current = null;\n swapTimeoutRef.current = null;\n }, 120_000);\n }\n } catch (error) {\n setSwapStatus('');\n setLastTxHash(null);\n onSwapError?.(error as Error);\n } finally {\n setIsSwapping(false);\n }\n }, [address, fromAmount, quote, chainId, fromToken, toToken, signTypedData, onSwapSuccess, onSwapError]);\n\n const canReverse = availableFromTokens.includes(toToken);\n const fromBalance = balances?.[fromToken];\n\n // Shared token dropdown\n const TokenDropdown = ({\n tokens,\n selected,\n isOpen,\n onToggle,\n onSelect,\n }: {\n tokens: string[];\n selected: string;\n isOpen: boolean;\n onToggle: () => void;\n onSelect: (token: string) => void;\n }) => (\n <div style={{ position: 'relative', flexShrink: 0 }}>\n <button\n onClick={onToggle}\n disabled={isSwapping}\n className=\"flex items-center font-medium\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n gap: '4px',\n fontSize: '0.8125rem',\n }}\n >\n {selected}\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isOpen && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: '4px',\n zIndex: 10,\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: 'var(--compass-shadow-md)',\n minWidth: '120px',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none' as const,\n }}\n >\n {tokens.map((token) => (\n <button\n key={token}\n onClick={() => onSelect(token)}\n style={{\n display: 'block',\n width: '100%',\n textAlign: 'left',\n padding: '6px 10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: token === selected ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === selected ? 'var(--compass-color-primary-muted)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0', fontFamily: 'var(--compass-font-family)' }}>\n {/* From card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg) var(--compass-border-radius-lg) 0 0',\n padding: '10px 12px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>From</span>\n {fromBalance && (\n <button\n onClick={() => setFromAmount(truncate(parseFloat(fromBalance), 4))}\n disabled={isSwapping}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: '0.6875rem' }}\n >\n Available: {truncate(parseFloat(fromBalance), 4)}\n </button>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n disabled={isSwapping}\n style={{\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <TokenDropdown\n tokens={availableFromTokens}\n selected={fromToken}\n isOpen={isFromOpen}\n onToggle={() => { setIsFromOpen(!isFromOpen); setIsToOpen(false); }}\n onSelect={(token) => {\n if (token === toToken) setToToken(fromToken);\n setFromToken(token);\n setIsFromOpen(false);\n setFromAmount('');\n }}\n />\n </div>\n </div>\n\n {/* Reverse button — overlaps between cards */}\n <div style={{ display: 'flex', justifyContent: 'center', height: 0 }}>\n <button\n onClick={handleReverse}\n disabled={!canReverse || isSwapping}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n padding: '4px',\n opacity: !canReverse || isSwapping ? 0.3 : 1,\n cursor: !canReverse || isSwapping ? 'not-allowed' : 'pointer',\n position: 'relative',\n zIndex: 1,\n marginTop: '-11px',\n }}\n >\n <ArrowDownUp size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n </div>\n\n {/* To card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-lg) var(--compass-border-radius-lg)',\n padding: '10px 12px',\n }}\n >\n <div>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>To</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n color: isQuoteLoading ? 'var(--compass-color-text-tertiary)' : 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n }}\n >\n {isQuoteLoading ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <Loader2 size={14} className=\"animate-spin\" />\n <span style={{ fontSize: '0.8125rem', fontWeight: 400 }}>Loading...</span>\n </span>\n ) : quote?.outputAmount ? (\n truncate(parseFloat(quote.outputAmount), 4)\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)' }}>0.00</span>\n )}\n </div>\n <TokenDropdown\n tokens={toTokens}\n selected={toToken}\n isOpen={isToOpen}\n onToggle={() => { setIsToOpen(!isToOpen); setIsFromOpen(false); }}\n onSelect={(token) => {\n if (token === fromToken) {\n setFromToken(toToken);\n setFromAmount('');\n }\n setToToken(token);\n setIsToOpen(false);\n }}\n />\n </div>\n </div>\n\n {/* Rate */}\n {quote && (\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem', margin: '6px 0 0' }}>\n 1 {fromToken} = {truncate(parseFloat(quote.rate), 4)} {toToken}\n </p>\n )}\n\n {/* Quote Error */}\n {quoteError && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '6px 10px',\n gap: '6px',\n fontSize: '0.75rem',\n marginTop: '8px',\n }}\n >\n <AlertCircle size={12} />\n <span>{quoteError.message}</span>\n </div>\n )}\n\n {/* Swap Button */}\n <button\n onClick={handleSwap}\n disabled={isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '10px',\n marginTop: '10px',\n fontSize: '0.875rem',\n fontWeight: 600,\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: 'none',\n cursor: isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected ? 'not-allowed' : 'pointer',\n opacity: isSwapping || !quote || !fromAmount || parseFloat(fromAmount) <= 0 || !isConnected ? 0.5 : 1,\n transition: 'all 200ms ease',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {isSwapping ? (\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px', flexDirection: 'column' }}>\n <span style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }}>\n <Loader2 size={14} className=\"animate-spin\" />\n Processing...\n </span>\n {swapStatus && (\n <span style={{ fontSize: '0.7rem', opacity: 0.7, fontWeight: 400 }}>\n {swapStatus}\n </span>\n )}\n </span>\n ) : (\n <>\n <ArrowLeftRight size={14} />\n Swap\n </>\n )}\n </button>\n\n {/* Transaction status with explorer link */}\n {lastTxHash && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n marginTop: '8px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {txConfirmed ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: txConfirmed ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {txConfirmed ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[chainId] || BLOCK_EXPLORERS.ethereum}/tx/${lastTxHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ display: 'flex', alignItems: 'center', gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nexport function WidgetFooter() {\n return (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: '4px',\n marginTop: 'auto',\n paddingTop: '8px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '16px',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '0.6875rem',\n }}\n >\n <span>Non-custodial</span>\n <span>Gas sponsored</span>\n <span>Audited protocols</span>\n </div>\n <a\n href=\"https://compasslabs.ai\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '0.625rem',\n textDecoration: 'none',\n opacity: 0.7,\n transition: 'opacity 200ms ease',\n }}\n onMouseEnter={(e) => { (e.target as HTMLElement).style.opacity = '1'; }}\n onMouseLeave={(e) => { (e.target as HTMLElement).style.opacity = '0.7'; }}\n >\n Powered by <span style={{ fontWeight: 500 }}>Compass</span>\n </a>\n </div>\n );\n}\n","import { useState, useMemo, useEffect } from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport type { MarketOption } from './types';\n\ninterface MarketSelectorProps {\n markets: MarketOption[];\n selectedMarket: MarketOption | null;\n onMarketSelect: (market: MarketOption) => void;\n isLoading?: boolean;\n}\n\nfunction getTypeLabel(type: string): string {\n switch (type) {\n case 'aave': return 'Aave';\n case 'vaults': return 'Morpho Vault';\n case 'pendle': return 'Pendle Fixed';\n default: return type;\n }\n}\n\nfunction formatTvl(value: number): string {\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 if (value >= 1) return `$${Math.round(value)}`;\n return '$0';\n}\n\nexport function MarketSelector({\n markets,\n selectedMarket,\n onMarketSelect,\n isLoading,\n}: MarketSelectorProps) {\n const [isExpanded, setIsExpanded] = useState(false);\n\n const filteredMarkets = useMemo(() => {\n return markets\n .filter((m) => m.type === 'aave' || m.type === 'pendle' || m.tvl >= 1000)\n .sort((a, b) => b.apy - a.apy);\n }, [markets]);\n\n const otherMarkets = selectedMarket\n ? filteredMarkets.filter((m) => m.id !== selectedMarket.id)\n : filteredMarkets;\n\n if (isLoading) {\n return (\n <div\n style={{\n padding: '10px 12px',\n minHeight: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '13px',\n }}\n >\n Loading markets...\n </div>\n );\n }\n\n if (filteredMarkets.length === 0) {\n return (\n <div\n style={{\n padding: '10px 12px',\n minHeight: '52px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '13px',\n }}\n >\n No markets available\n </div>\n );\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0' }}>\n {/* Compact selected market row — clickable to expand */}\n <button\n onClick={() => (otherMarkets.length > 0 || !selectedMarket) && setIsExpanded(!isExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '8px 12px',\n minHeight: '52px',\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: isExpanded ? 'var(--compass-border-radius-md) var(--compass-border-radius-md) 0 0' : 'var(--compass-border-radius-md)',\n cursor: (otherMarkets.length > 0 || !selectedMarket) ? 'pointer' : 'default',\n fontFamily: 'var(--compass-font-family)',\n textAlign: 'left',\n width: '100%',\n }}\n >\n {selectedMarket ? (\n <>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1px', minWidth: 0, overflow: 'hidden' }}>\n <span\n style={{\n fontWeight: 600,\n color: 'var(--compass-color-text)',\n fontSize: '13px',\n lineHeight: '1.3',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {selectedMarket.name}\n </span>\n <span\n style={{\n fontSize: '11px',\n color: 'var(--compass-color-text-tertiary)',\n whiteSpace: 'nowrap',\n }}\n >\n {getTypeLabel(selectedMarket.type)}{selectedMarket.type !== 'aave' ? ` · ${formatTvl(selectedMarket.tvl)}` : ''}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px', flexShrink: 0, marginLeft: '8px' }}>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: '13px',\n fontWeight: 600,\n }}\n >\n {selectedMarket.apy.toFixed(2)}%\n </span>\n {otherMarkets.length > 0 && (\n <ChevronDown\n size={14}\n style={{\n color: 'var(--compass-color-text-tertiary)',\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n }}\n />\n )}\n </div>\n </>\n ) : (\n <>\n <span style={{ color: 'var(--compass-color-text-secondary)', fontSize: '13px', lineHeight: '1.3' }}>\n Select a market\n </span>\n <ChevronDown\n size={14}\n style={{\n color: 'var(--compass-color-text-secondary)',\n transform: isExpanded ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n flexShrink: 0,\n }}\n />\n </>\n )}\n </button>\n\n {/* Expandable Market List */}\n {isExpanded && (\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-md) var(--compass-border-radius-md)',\n overflow: 'hidden',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none',\n }}\n >\n {otherMarkets.map((market) => (\n <button\n key={market.id}\n onClick={() => {\n onMarketSelect(market);\n setIsExpanded(false);\n }}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '8px 12px',\n backgroundColor: 'var(--compass-color-surface)',\n border: 'none',\n borderBottom: '1.5px solid var(--compass-color-border)',\n cursor: 'pointer',\n fontFamily: 'var(--compass-font-family)',\n textAlign: 'left',\n }}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1px', minWidth: 0 }}>\n <span\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '13px',\n fontWeight: 500,\n lineHeight: '1.3',\n }}\n >\n {market.name}\n </span>\n <span\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontSize: '11px',\n whiteSpace: 'nowrap',\n }}\n >\n {getTypeLabel(market.type)}{market.type !== 'aave' ? ` · ${formatTvl(market.tvl)}` : ''}\n </span>\n </div>\n <span\n style={{\n color: 'var(--compass-color-success)',\n fontSize: '13px',\n fontWeight: 500,\n flexShrink: 0,\n marginLeft: '8px',\n }}\n >\n {market.apy.toFixed(2)}%\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { X, ChevronDown, ChevronUp, ExternalLink, TrendingUp, TrendingDown } from 'lucide-react';\nimport type { Position } from './types';\n\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\ninterface EarningsModalProps {\n isOpen: boolean;\n onClose: () => void;\n positions: Position[];\n totalEarned: number;\n isLoading?: boolean;\n chainId?: string;\n}\n\nfunction formatCurrency(amount: number): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(amount);\n}\n\nfunction PositionCard({ position, chainId }: { position: Position; chainId?: string }) {\n const [isHistoryExpanded, setIsHistoryExpanded] = useState(false);\n\n const formatShortDate = (dateStr: string | undefined) => {\n if (!dateStr) return null;\n const date = new Date(dateStr);\n if (isNaN(date.getTime())) return null;\n return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n };\n\n const totalPnl = position.pnl?.totalPnl ?? position.performance ?? 0;\n const isPositive = totalPnl >= 0;\n\n return (\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '16px',\n padding: '16px',\n }}\n >\n {/* Position Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '12px' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '2px' }}>\n <span style={{ fontWeight: 600, color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {position.marketName}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {position.amount.toLocaleString()} {position.token}\n </span>\n </div>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n color: 'var(--compass-color-success)',\n fontSize: '0.8125rem',\n backgroundColor: 'var(--compass-color-success-muted)',\n padding: '4px 10px',\n borderRadius: '20px',\n fontWeight: 600,\n }}>\n <TrendingUp size={12} />\n {position.apy.toFixed(2)}%\n </div>\n </div>\n\n {/* P&L Row */}\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingTop: '12px',\n borderTop: '1px solid var(--compass-color-border)',\n }}>\n <div style={{ display: 'flex', gap: '20px' }}>\n {position.pnl ? (\n <>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Unrealised\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: position.pnl.unrealizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {position.pnl.unrealizedPnl >= 0 ? '+' : ''}{formatCurrency(position.pnl.unrealizedPnl)}\n </div>\n </div>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Realised\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: position.pnl.realizedPnl >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {position.pnl.realizedPnl >= 0 ? '+' : ''}{formatCurrency(position.pnl.realizedPnl)}\n </div>\n </div>\n </>\n ) : (\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', marginBottom: '2px' }}>\n Total P&L\n </div>\n <div style={{\n fontWeight: 600,\n fontSize: '0.875rem',\n color: isPositive ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {isPositive ? '+' : ''}{formatCurrency(totalPnl)}\n </div>\n </div>\n )}\n </div>\n {position.transactions.length > 0 && (\n <button\n onClick={() => setIsHistoryExpanded(!isHistoryExpanded)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n padding: '6px 10px',\n backgroundColor: 'transparent',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '8px',\n cursor: 'pointer',\n fontSize: '0.6875rem',\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'all 150ms ease',\n }}\n >\n History\n {isHistoryExpanded ? <ChevronUp size={10} /> : <ChevronDown size={10} />}\n </button>\n )}\n </div>\n\n {/* Transaction History (Expandable) */}\n {isHistoryExpanded && position.transactions.length > 0 && (\n <div style={{\n marginTop: '12px',\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: '12px',\n overflow: 'hidden',\n }}>\n {position.transactions.map((tx, i) => (\n <div\n key={tx.id}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '10px 12px',\n borderBottom: i < position.transactions.length - 1 ? '1px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n {formatShortDate(tx.timestamp) && (\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)', minWidth: '45px' }}>\n {formatShortDate(tx.timestamp)}\n </span>\n )}\n <span style={{\n fontSize: '0.75rem',\n color: 'var(--compass-color-text-secondary)',\n textTransform: 'capitalize',\n }}>\n {tx.type}\n </span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <span style={{\n fontWeight: 500,\n fontSize: '0.75rem',\n color: tx.type === 'deposit' ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {tx.type === 'deposit' ? '+' : '-'}{tx.amount} {tx.token}\n </span>\n {tx.txHash && (\n <a\n href={`${BLOCK_EXPLORERS[chainId || 'ethereum'] || BLOCK_EXPLORERS.ethereum}/tx/${tx.txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: 'var(--compass-color-text-tertiary)', lineHeight: 0 }}\n >\n <ExternalLink size={10} />\n </a>\n )}\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function EarningsModal({ isOpen, onClose, positions, totalEarned, isLoading, chainId }: EarningsModalProps) {\n if (!isOpen) return null;\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\n return (\n <div\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n backdropFilter: 'blur(4px)',\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)',\n border: '1px solid var(--compass-color-border)',\n borderRadius: '20px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.4)',\n width: '100%',\n maxWidth: '420px',\n maxHeight: '80vh',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '16px 20px',\n }}>\n <h2 style={{\n fontWeight: 600,\n fontSize: '1.0625rem',\n color: 'var(--compass-color-text)',\n margin: 0,\n }}>\n Your Positions\n </h2>\n <button\n onClick={onClose}\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: 'none',\n cursor: 'pointer',\n padding: '6px',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: '8px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <X size={16} />\n </button>\n </div>\n\n {/* Total P&L Summary */}\n <div style={{\n padding: '16px 20px',\n margin: '0 16px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: '14px',\n }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n marginBottom: '8px',\n }}>\n <div style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: totalEarned >= 0 ? 'var(--compass-color-success-muted)' : 'var(--compass-color-error-muted)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}>\n {totalEarned >= 0\n ? <TrendingUp size={14} style={{ color: 'var(--compass-color-success)' }} />\n : <TrendingDown size={14} style={{ color: 'var(--compass-color-error)' }} />\n }\n </div>\n <div>\n <div style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Total P&L</div>\n <div style={{\n fontSize: '1.25rem',\n fontWeight: 700,\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n letterSpacing: '-0.02em',\n }}>\n {totalEarned >= 0 ? '+' : ''}{formatCurrency(totalEarned)}\n </div>\n </div>\n </div>\n <div style={{ display: 'flex', gap: '16px' }}>\n <div>\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Unrealised </span>\n <span style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: totalUnrealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {totalUnrealized >= 0 ? '+' : ''}{formatCurrency(totalUnrealized)}\n </span>\n </div>\n <div>\n <span style={{ fontSize: '0.6875rem', color: 'var(--compass-color-text-tertiary)' }}>Realised </span>\n <span style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: totalRealized >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}>\n {totalRealized >= 0 ? '+' : ''}{formatCurrency(totalRealized)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Positions List */}\n <div style={{\n flex: 1,\n overflowY: 'auto',\n scrollbarWidth: 'none',\n padding: '16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}>\n {isLoading ? (\n <div style={{ textAlign: 'center', padding: '32px 0', color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n Loading positions...\n </div>\n ) : positions.length === 0 ? (\n <div style={{ textAlign: 'center', padding: '32px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No active positions yet\n </p>\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem', margin: 0 }}>\n Deposit into a market to start earning\n </p>\n </div>\n ) : (\n positions.map((position) => <PositionCard key={position.id} position={position} chainId={chainId} />)\n )}\n </div>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useEffect, useRef } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { Loader2, Plus, Minus, ArrowDownLeft, ArrowUpRight, ArrowRight, ArrowLeftRight, Wallet, ChevronDown, TrendingUp, LogOut, Copy, Check, Circle, CheckCircle, ExternalLink, Send } from 'lucide-react';\nimport { WalletStatus, EarnAccountGuard, ActionModal, ChainSwitcher, SwapForm } from '../../shared';\nimport { BuyForm } from '../../shared/BuyForm';\nimport { SendForm } from '../../shared/SendForm';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { MarketSelector } from './MarketSelector';\nimport { EarningsModal } from './EarningsModal';\nimport { TxStatus } from '../CreditAccount/TxStatus';\nimport type { TxState } from '../../types/credit';\nimport type { EarnAccountProps, MarketType, MarketOption, Position } from './types';\n\n/** Truncate a number to `decimals` places (floor, no rounding) */\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\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\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\ntype FundStep =\n | 'idle'\n | 'approving'\n | 'signing-approval'\n | 'preparing-transfer'\n | 'signing-transfer'\n | 'executing'\n | 'confirmed'\n | 'failed';\n\nfunction getFundPhase(step: FundStep): 0 | 1 | 2 {\n if (step === 'idle' || step === 'failed') return 0;\n if (step === 'approving' || step === 'signing-approval') return 1;\n return 2;\n}\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 const floored = Math.floor(num * 100) / 100;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(floored);\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 truncate(num, 2);\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 compact = true,\n title = 'Savings Account',\n onDeposit,\n onWithdraw,\n defaultMarketTab = 'variable',\n allowedVariableMarkets,\n allowedFixedMarkets,\n chain: chainProp,\n height = '600px',\n}: EarnAccountProps) {\n const { address, isConnected, login, logout, signTypedData, switchChain, walletChainId, fundWallet, hasExternalWallet, sendTransaction } = useEmbeddableWallet();\n const { isDeployed, earnAccountAddress } = useEarnAccount();\n const { chainId: contextChainId } = useChain();\n // Use chain prop if provided, otherwise fall back to context\n const CHAIN_ID = chainProp || contextChainId;\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 [lastTxHash, setLastTxHash] = useState<string | null>(null);\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n\n // Fund modal state\n const [isFundModalOpen, setIsFundModalOpen] = useState(false);\n const [fundAmount, setFundAmount] = useState('');\n const [fundAction, setFundAction] = useState<'deposit' | 'withdraw' | 'buy' | 'send'>(\n !hasExternalWallet && fundWallet ? 'buy' : 'deposit'\n );\n const [fundStep, setFundStep] = useState<FundStep>('idle');\n const [fundTxState, setFundTxState] = useState<TxState>({ status: 'idle' });\n const fundPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const showBuyTab = !!fundWallet;\n const showSendTab = !!sendTransaction && !hasExternalWallet;\n const fundBuyOnly = !hasExternalWallet && showBuyTab && !sendTransaction;\n\n // Action polling refs (deposit/withdraw confirmation)\n const actionPollRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const actionTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Balances breakdown modal state\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n\n // Market selector state\n const [selectedMarket, setSelectedMarket] = useState<MarketOption | null>(null);\n const [marketTab, setMarketTab] = useState<'variable' | 'fixed'>(defaultMarketTab || 'variable');\n\n // Swap modal state\n const [isSwapModalOpen, setIsSwapModalOpen] = useState(false);\n\n // Earnings modal state\n const [isEarningsModalOpen, setIsEarningsModalOpen] = useState(false);\n\n // Copy address feedback\n const [copiedField, setCopiedField] = useState<string | null>(null);\n const handleCopyAddress = (addr: string, field: string) => {\n navigator.clipboard.writeText(addr);\n setCopiedField(field);\n setTimeout(() => setCopiedField(null), 2000);\n };\n\n // Reset selected market when chain changes (markets are chain-specific)\n useEffect(() => {\n setSelectedMarket(null);\n }, [CHAIN_ID]);\n\n // Fund modal polling cleanup\n const clearFundPolling = useCallback(() => {\n if (fundPollRef.current) {\n clearInterval(fundPollRef.current);\n fundPollRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => {\n clearFundPolling();\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n };\n }, [clearFundPolling]);\n\n const handleFundActionChange = (newAction: 'deposit' | 'withdraw' | 'buy' | 'send') => {\n setFundAction(newAction);\n setFundAmount('');\n setFundStep('idle');\n setFundTxState({ status: 'idle' });\n };\n\n const fundIsBusy =\n fundStep === 'approving' ||\n fundStep === 'signing-approval' ||\n fundStep === 'preparing-transfer' ||\n fundStep === 'signing-transfer' ||\n fundStep === 'executing';\n const fundIsValid = Number(fundAmount) > 0 && !!address && isDeployed;\n const fundPhase = getFundPhase(fundStep);\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 // Fetch wallet (EOA) USDC balance for fund modal deposit and balance breakdown\n const walletBalanceQuery = useQuery({\n queryKey: ['walletBalance', CHAIN_ID, address, 'USDC'],\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=USDC`\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 && hasExternalWallet && isFundModalOpen && fundAction === 'deposit',\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 // Derive available tokens from earn account balances (replaces hardcoded SUPPORTED_TOKENS)\n const balanceTokens = Object.keys(balancesQuery.data?.balances || {});\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) + totalDepositedBalance;\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) {\n console.warn('[EarnAccount] Aave markets fetch failed:', response.status, response.statusText);\n return [];\n }\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 const apy = parseFloat(chainData.supplyApy || chainData.supply_apy || '0');\n const tvl = parseFloat(chainData.totalSupplyUsd || chainData.total_supply_usd || chainData.totalLiquidityUsd || chainData.total_liquidity_usd || '0');\n markets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: symbol,\n apy,\n tvl,\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) {\n console.warn('[EarnAccount] Pendle markets fetch failed:', response.status, response.statusText);\n return [];\n }\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 // Handle both camelCase (percentage) and snake_case (decimal) APY formats\n let apy = 0;\n if (m.impliedApy !== undefined) {\n apy = parseFloat(m.impliedApy);\n } else if (m.implied_apy !== undefined) {\n apy = parseFloat(m.implied_apy);\n // If value is < 1, it's a decimal — convert to percentage\n if (apy > 0 && apy < 1) apy = apy * 100;\n } else if (m.apy !== undefined) {\n apy = parseFloat(m.apy);\n }\n return {\n id: `pendle-${m.marketAddress || m.address}`,\n name: m.name || `${m.underlyingSymbol || 'PT'}${expiryStr ? ` ${expiryStr}` : ''}`,\n apy,\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) {\n console.warn('[EarnAccount] Morpho vaults fetch failed:', response.status, response.statusText);\n return [];\n }\n\n const data = await response.json();\n const vaultsList = data.vaults || [];\n\n return vaultsList.map((v: any) => {\n // Handle both camelCase and snake_case, convert decimal to percentage\n let vaultApy = parseFloat(v.apy7d || v.apy_7d || v.apy || '0');\n if (vaultApy > 0 && vaultApy < 1) vaultApy = vaultApy * 100;\n return {\n id: `vault-${v.vaultAddress || v.address}`,\n name: v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`,\n apy: vaultApy,\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 },\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 // Filter markets by selected tab (variable = aave+vaults, fixed = pendle)\n const filteredTabMarkets = allMarkets.filter((m) => {\n if (marketTab === 'variable') {\n if (m.type === 'pendle') return false;\n if (allowedVariableMarkets && !allowedVariableMarkets.includes(m.id)) return false;\n return true;\n } else {\n if (m.type !== 'pendle') return false;\n if (allowedFixedMarkets && !allowedFixedMarkets.includes(m.id)) return false;\n return true;\n }\n });\n\n const isMarketsLoading = aaveMarketsQuery.isLoading || pendleMarketsQuery.isLoading || vaultsQuery.isLoading;\n\n // bestApy is computed after positions (below)\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 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 type: 'deposit' as const,\n amount: parseFloat(d.amount || '0'),\n token: pos.symbol,\n txHash: d.txHash || '',\n timestamp: d.timestamp || undefined,\n })),\n ...(pos.withdrawals || []).map((w: any, i: number) => ({\n id: `wit-${index}-${i}`,\n type: 'withdraw' as const,\n amount: parseFloat(w.amount || '0'),\n token: pos.symbol,\n txHash: w.txHash || '',\n timestamp: w.timestamp || undefined,\n })),\n ].sort((a, b) => {\n if (a.timestamp && b.timestamp) return new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime();\n if (a.timestamp) return -1;\n if (b.timestamp) return 1;\n return 0;\n }),\n };\n });\n\n const totalEarned = positions.reduce((sum, p) => sum + p.performance, 0);\n\n // Weighted average APY across the whole portfolio (idle funds count as 0% APY)\n // Skip dust positions (<$0.50) and cap individual APYs at 100% to prevent outliers\n const bestApy = (() => {\n if (earnAccountTotal > 0 && allPositionData.length > 0) {\n const weightedSum = allPositionData.reduce(\n (sum: number, p: any) => {\n const bal = parseFloat(p.balanceUsd || '0');\n if (bal < 0.50) return sum;\n return sum + bal * Math.min(p.apy || 0, 100);\n },\n 0\n );\n return Math.min(weightedSum / earnAccountTotal, 100);\n }\n if (allMarkets.length > 0) {\n return Math.min(Math.max(...allMarkets.map(m => m.apy || 0)), 100);\n }\n return 0;\n })();\n\n // Check if we need to swap for deposit/withdraw actions\n const needsActionSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n // Earn account USDC balance (for fund modal withdraw)\n const earnUsdcBalance = balancesQuery.data?.balances?.['USDC']?.balance || '0';\n const fundMaxBalance = fundAction === 'deposit' ? (walletBalance || '0') : earnUsdcBalance;\n\n const fundButtonLabel = () => {\n switch (fundStep) {\n case 'approving': return 'Checking approval...';\n case 'signing-approval': return 'Sign Approval (1/2)...';\n case 'preparing-transfer': return fundAction === 'deposit' ? 'Preparing transfer...' : 'Preparing withdrawal...';\n case 'signing-transfer': return fundAction === 'deposit' ? 'Sign Transfer (2/2)...' : 'Sign Withdrawal...';\n case 'executing': return 'Executing...';\n default: return null;\n }\n };\n\n const handleFundSuccess = useCallback((txHash: string) => {\n setFundStep('confirmed');\n setFundTxState({ status: 'submitted', txHash });\n\n clearFundPolling();\n let polls = 0;\n fundPollRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearFundPolling();\n setFundTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearFundPolling();\n setFundTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch (err) {\n if (err instanceof TypeError && err.message.includes('fetch')) {\n // Network error — safe to retry\n } else {\n console.warn('[EarnAccount] Unexpected error polling tx receipt:', err);\n }\n }\n if (polls >= 24) {\n clearFundPolling();\n setFundTxState({ status: 'failed', error: 'Unable to confirm transaction. Please check your wallet.' });\n }\n }, 5_000);\n }, [clearFundPolling, queryClient, CHAIN_ID]);\n\n // Handle fund modal transfer (deposit to or withdraw from savings account)\n const handleFundTransfer = async () => {\n if (!fundIsValid || !signTypedData) return;\n\n setFundTxState({ status: 'idle' });\n\n try {\n await ensureCorrectChain();\n\n if (fundAction === 'deposit') {\n // --- Phase 1: Check & handle token approval ---\n setFundStep('approving');\n setFundTxState({ status: 'preparing' });\n\n const approveResponse = await fetch('/api/compass/transfer/approve', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC' }),\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 && approvalData.transaction) {\n setFundTxState({ status: 'broadcasting' });\n const executeApprovalResponse = await fetch('/api/compass/approval/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, transaction: approvalData.transaction }),\n });\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n } else if (approvalData.eip712) {\n setFundStep('signing-approval');\n setFundTxState({ status: 'signing' });\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setFundTxState({ status: 'broadcasting' });\n\n const executeApprovalResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: approvalData.eip712, signature: approvalSignature }),\n });\n if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n } else {\n throw new Error('Unable to approve token for transfers');\n }\n }\n\n // --- Phase 2: Prepare & execute transfer ---\n setFundStep('preparing-transfer');\n setFundTxState({ status: 'preparing' });\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC', amount: fundAmount, action: 'DEPOSIT' }),\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 setFundStep('signing-transfer');\n setFundTxState({ status: 'signing' });\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 setFundStep('executing');\n setFundTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: prepareData.eip712, signature }),\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 handleFundSuccess(txHash);\n } else {\n // --- Withdraw: prepare & execute ---\n setFundStep('preparing-transfer');\n setFundTxState({ status: 'preparing' });\n\n const prepareResponse = await fetch('/api/compass/transfer/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, token: 'USDC', amount: fundAmount, action: 'WITHDRAW' }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare withdrawal');\n }\n\n const prepareData = await prepareResponse.json();\n\n setFundStep('signing-transfer');\n setFundTxState({ status: 'signing' });\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 setFundStep('executing');\n setFundTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/transfer/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ owner: address, chain: CHAIN_ID, eip712: prepareData.eip712, signature }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Withdrawal failed');\n }\n\n const { txHash } = await executeResponse.json();\n handleFundSuccess(txHash);\n }\n } catch (error) {\n console.error('Transfer error:', error);\n setFundStep('failed');\n setFundTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Transfer failed',\n });\n }\n };\n\n const handleAction = async () => {\n if (!selectedMarket || !amount || parseFloat(amount) <= 0 || !address || !signTypedData) return;\n\n setIsProcessing(true);\n setError(null);\n setLastTxHash(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 minimal slippage buffer to the deposit amount\n const depositAmount = (parseFloat(estimatedOutput) * 0.99999).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('Confirming on chain...');\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('Confirming on chain...');\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('Confirming on chain...');\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 // Show txHash immediately so user can track on explorer\n setLastTxHash(txHash || null);\n setStatusMessage('submitted');\n setIsProcessing(false);\n setAmount('');\n\n // Poll for on-chain confirmation\n if (txHash) {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n\n actionPollRef.current = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n if (!res.ok) return;\n const data = await res.json();\n if (data.status === 'success') {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n setStatusMessage('confirmed');\n // Refresh balances\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n positionQuery.refetch();\n balancesQuery.refetch();\n const delays = [5_000, 15_000, 30_000];\n for (const d of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['allEarnPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountAllPositions'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n }, d);\n }\n } else if (data.status === 'reverted') {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n if (actionTimeoutRef.current) clearTimeout(actionTimeoutRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n setStatusMessage('');\n setLastTxHash(null);\n setError('Transaction reverted on-chain');\n }\n } catch { /* keep polling */ }\n }, 2000);\n // Stop polling after 2 minutes\n actionTimeoutRef.current = setTimeout(() => {\n if (actionPollRef.current) clearInterval(actionPollRef.current);\n actionPollRef.current = null;\n actionTimeoutRef.current = null;\n }, 120_000);\n }\n\n if (isDeposit) {\n onDeposit?.(selectedMarket, parseFloat(amount), txHash || '');\n } else {\n onWithdraw?.(selectedMarket, parseFloat(amount), txHash || '');\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Transaction failed');\n setStatusMessage('');\n setLastTxHash(null);\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 return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {!chainProp && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <EarnAccountGuard>\n {/* ========== TOP SECTION: APY Badge + Balance + Earned ========== */}\n <div\n className=\"flex flex-col items-center text-center\"\n style={{\n padding: compact ? '16px 16px 12px' : '20px 20px 16px',\n }}\n >\n {/* APY Badge + Logout Row */}\n <div className=\"flex items-center justify-center\" style={{ width: '100%', marginBottom: '12px', gap: '8px' }}>\n {showInterestRate && bestApy > 0 && (\n <div\n className=\"flex items-center\"\n style={{\n gap: '6px',\n backgroundColor: 'var(--compass-color-success-muted)',\n color: 'var(--compass-color-success)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '5px 12px',\n fontSize: '0.8125rem',\n fontWeight: 600,\n }}\n >\n <TrendingUp size={14} />\n Earning {truncate(bestApy, 2)}% APY\n </div>\n )}\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n aria-label={`Total balance: ${formatCurrency(earnAccountTotal)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n {balancesQuery.isLoading && !balancesQuery.data ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '200px', height: compact ? '42px' : '52px', borderRadius: 'var(--compass-border-radius-md)', margin: '0 auto' }} />\n ) : (\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1.75rem' : '2rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatCurrency(earnAccountTotal)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n )}\n </button>\n\n {/* Earned callout — green dot + amount, like reference */}\n <button\n onClick={() => positions.length > 0 && setIsEarningsModalOpen(true)}\n disabled={positions.length === 0}\n className=\"flex items-center justify-center\"\n style={{\n gap: '6px',\n marginTop: '10px',\n border: 'none',\n background: 'none',\n padding: '4px 0',\n minHeight: '28px',\n }}\n >\n {positionQuery.isLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '120px', height: '16px' }} />\n ) : totalEarned !== 0 ? (\n <>\n <span style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n flexShrink: 0,\n }} />\n <span\n className=\"font-semibold\"\n style={{\n color: totalEarned >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n fontSize: '0.875rem',\n }}\n >\n {formatCurrency(Math.abs(totalEarned))} Earned\n </span>\n {positions.length > 0 && (\n <>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n · {positions.length} position{positions.length > 1 ? 's' : ''}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>›</span>\n </>\n )}\n </>\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n {positions.length > 0\n ? <>{positions.length} active position{positions.length > 1 ? 's' : ''} <span>›</span></>\n : 'No active positions'}\n </span>\n )}\n </button>\n\n {/* Quick Action Buttons — inline pills */}\n {(balanceTokens.length > 0 || showTopUpButton) && (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '12px' }}>\n {showTopUpButton && (\n <button\n onClick={() => setIsFundModalOpen(true)}\n aria-label=\"Add money\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balanceTokens.length > 0 && (\n <button\n onClick={() => setIsSwapModalOpen(true)}\n aria-label=\"Swap tokens\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* ========== BOTTOM SECTION: Market + Deposit/Withdraw ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '10px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '16px 16px 12px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n {/* Market Type Toggle */}\n <div\n className=\"flex\"\n role=\"tablist\"\n aria-label=\"Market type\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '2px',\n }}\n >\n {(['variable', 'fixed'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => { setMarketTab(tab); setSelectedMarket(null); }}\n role=\"tab\"\n aria-selected={marketTab === tab}\n className=\"flex-1 flex items-center justify-center font-medium\"\n style={{\n backgroundColor: marketTab === tab ? 'var(--compass-color-primary-muted)' : 'transparent',\n color: marketTab === tab ? 'var(--compass-color-primary)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-sm)',\n padding: '4px',\n minHeight: '32px',\n fontSize: '0.8125rem',\n transition: 'all 200ms ease',\n border: 'none',\n boxShadow: marketTab === tab ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',\n textTransform: 'capitalize',\n }}\n >\n {tab}\n </button>\n ))}\n </div>\n\n {/* Market Selector */}\n <MarketSelector\n markets={filteredTabMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={setSelectedMarket}\n isLoading={isMarketsLoading}\n />\n\n {/* Deposit / Withdraw Toggle */}\n <div\n className=\"flex\"\n role=\"tablist\"\n aria-label=\"Deposit or withdraw\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '3px',\n }}\n >\n {(['deposit', 'withdraw'] as const).map((tab) => (\n <button\n key={tab}\n onClick={() => { setActiveTab(tab); setSelectedToken('USDC'); setError(null); }}\n role=\"tab\"\n aria-selected={activeTab === tab}\n className=\"flex-1 flex items-center justify-center font-semibold\"\n style={{\n backgroundColor: activeTab === tab ? 'var(--compass-color-surface-hover, var(--compass-color-surface))' : 'transparent',\n color: activeTab === tab ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '6px',\n minHeight: '36px',\n gap: '6px',\n fontSize: '0.875rem',\n transition: 'all 200ms ease',\n border: 'none',\n boxShadow: activeTab === tab ? '0 1px 3px rgba(0,0,0,0.1)' : 'none',\n }}\n >\n {tab === 'deposit' ? <Plus size={15} /> : <Minus size={15} />}\n {tab === 'deposit' ? 'Deposit' : 'Withdraw'}\n </button>\n ))}\n </div>\n\n {/* Amount Input */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px 16px',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '1.125rem', fontWeight: 300 }}>$</span>\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-bold bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.125rem',\n letterSpacing: '-0.02em',\n minWidth: 0,\n border: 'none',\n }}\n />\n {/* Token Pill */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={isProcessing}\n aria-label={`Select token, currently ${selectedToken}`}\n aria-expanded={isTokenDropdownOpen}\n className=\"flex items-center font-semibold\"\n style={{\n backgroundColor: 'var(--compass-color-surface-hover, var(--compass-color-surface))',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '6px 10px',\n minHeight: '32px',\n gap: '3px',\n fontSize: '0.8125rem',\n border: '1.5px solid var(--compass-color-border)',\n transition: 'all 200ms ease',\n }}\n >\n {selectedToken}\n <ChevronDown size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-2 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n minWidth: '120px',\n overflow: 'hidden',\n }}\n >\n {balanceTokens.map((token) => (\n <button\n key={token}\n onClick={() => { setSelectedToken(token); setIsTokenDropdownOpen(false); setError(null); }}\n className=\"w-full text-left font-medium\"\n style={{\n padding: '12px 16px',\n minHeight: '44px',\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: '0.875rem',\n border: 'none',\n transition: 'background-color 150ms ease',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Available + MAX */}\n <div className=\"flex items-center justify-between\" style={{ marginTop: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>\n Available\n </span>\n <button\n onClick={() => setAmount(truncate(maxAmount, 2))}\n disabled={isProcessing}\n aria-label=\"Set maximum amount\"\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-primary)', fontSize: '0.8125rem', background: 'none', border: 'none', padding: 0 }}\n >\n {truncate(maxAmount, 2)} {activeTab === 'deposit' ? selectedToken : (selectedMarket?.underlyingToken || '—')}\n </button>\n </div>\n\n </div>\n\n {/* Error */}\n {error && (\n <div\n className=\"flex items-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: '12px 14px',\n gap: '8px',\n fontSize: '0.875rem',\n }}\n >\n {error}\n </div>\n )}\n\n {/* CTA Button */}\n <button\n onClick={!isConnected && login ? login : handleAction}\n disabled={isConnected && (isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount)}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n transition: 'all 200ms ease',\n border: 'none',\n opacity: isConnected && (isProcessing || !selectedMarket || !amount || parseFloat(amount) <= 0 || parseFloat(amount) > maxAmount) ? 0.4 : 1,\n }}\n >\n {!isConnected ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Wallet size={18} />\n Connect Wallet\n </span>\n ) : isProcessing ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '4px', flexDirection: 'column' }}>\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Loader2 size={16} className=\"animate-spin\" />\n Processing...\n </span>\n {statusMessage && (\n <span style={{ fontSize: '0.7rem', opacity: 0.7, fontWeight: 400 }}>\n {statusMessage}\n </span>\n )}\n </span>\n ) : !selectedMarket ? (\n 'Select a market'\n ) : !amount || parseFloat(amount) <= 0 ? (\n 'Enter an amount'\n ) : parseFloat(amount) > maxAmount ? (\n 'Insufficient balance'\n ) : needsActionSwap ? (\n activeTab === 'deposit' ? 'Swap & Deposit' : 'Withdraw & Swap'\n ) : (\n activeTab === 'deposit' ? 'Deposit' : 'Withdraw'\n )}\n </button>\n\n {/* Transaction status with explorer link */}\n {lastTxHash && !error && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n {statusMessage === 'confirmed' ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: statusMessage === 'confirmed' ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {statusMessage === 'confirmed' ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[CHAIN_ID] || BLOCK_EXPLORERS.ethereum}/tx/${lastTxHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center hover:opacity-70 transition-opacity\"\n style={{ gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n </div>\n\n <WidgetFooter />\n\n </EarnAccountGuard>\n\n {/* Fund Modal — matches Credit TopUpModal design */}\n <ActionModal\n isOpen={isFundModalOpen}\n onClose={() => {\n setIsFundModalOpen(false);\n setFundAmount('');\n setFundAction(fundBuyOnly ? 'buy' : showSendTab ? 'buy' : 'deposit');\n setFundStep('idle');\n setFundTxState({ status: 'idle' });\n }}\n title={showSendTab ? \"Manage Funds\" : fundBuyOnly ? \"Add Funds\" : \"Transfer Funds\"}\n >\n <div className=\"space-y-4\">\n {/* Action Tabs */}\n {fundBuyOnly ? null : (\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 {([\n ...(showSendTab ? ['buy', 'send'] as const : ['deposit', 'withdraw', ...(showBuyTab ? ['buy'] as const : [])]),\n ] as Array<'deposit' | 'withdraw' | 'buy' | 'send'>).map((tab) => (\n <button\n key={tab}\n onClick={() => handleFundActionChange(tab)}\n disabled={fundIsBusy}\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 fundAction === tab ? 'var(--compass-color-surface)' : 'transparent',\n color:\n fundAction === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n border: 'none',\n }}\n >\n {tab === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : tab === 'withdraw' ? (\n <ArrowUpRight size={14} />\n ) : tab === 'send' ? (\n <Send size={14} />\n ) : (\n <ArrowRight size={14} />\n )}\n {tab}\n </button>\n ))}\n </div>\n )}\n\n {fundAction === 'send' ? (\n <SendForm\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n }}\n />\n ) : fundAction === 'buy' || fundBuyOnly ? (\n <BuyForm\n targetAddress={earnAccountAddress || ''}\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletBalance'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n }}\n />\n ) : (\n <>\n {/* Step indicator (deposit only — 2 phases) */}\n {(fundIsBusy || fundStep === 'confirmed') && fundAction === 'deposit' && (\n <div\n className=\"flex gap-3 p-3 text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <FundStepIndicator\n number={1}\n label=\"Approve\"\n state={fundPhase > 1 ? 'done' : fundPhase === 1 ? 'active' : 'pending'}\n />\n <FundStepIndicator\n number={2}\n label=\"Transfer\"\n state={fundStep === 'confirmed' ? 'done' : fundPhase > 1 ? 'active' : 'pending'}\n />\n </div>\n )}\n\n {/* Amount input */}\n <div>\n <label\n className=\"block text-sm mb-1.5\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={fundAmount}\n onChange={(e) => { setFundAmount(e.target.value); setFundTxState({ status: 'idle' }); }}\n disabled={fundIsBusy}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none disabled:opacity-50\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n USDC\n </span>\n </div>\n {fundMaxBalance && fundMaxBalance !== '0' && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available:{' '}\n <button\n onClick={() => setFundAmount(truncate(parseFloat(fundMaxBalance), 2))}\n disabled={fundIsBusy}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: 'inherit' }}\n >\n {truncate(parseFloat(fundMaxBalance), 2)} USDC\n </button>\n </p>\n )}\n </div>\n\n {/* Description */}\n {!fundIsBusy && fundStep !== 'confirmed' && fundStep !== 'failed' && fundTxState.status === 'idle' && (\n <p\n className=\"text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {fundAction === 'deposit'\n ? `Approves the token transfer, then transfers USDC from your ${!hasExternalWallet ? 'embedded ' : ''}wallet into your savings account. Requires 2 signatures.${!hasExternalWallet ? ' Note: deposit and withdraw use your embedded wallet, not your bank account.' : ''}`\n : `Moves USDC from your savings account back to your ${!hasExternalWallet ? 'embedded ' : ''}wallet. Requires 1 signature.${!hasExternalWallet ? ' Gas fees are sponsored.' : ''}`}\n </p>\n )}\n\n <button\n onClick={handleFundTransfer}\n disabled={!fundIsValid || fundIsBusy}\n className=\"w-full py-3 px-4 text-sm font-medium 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-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'all 200ms ease',\n border: 'none',\n }}\n >\n {fundIsBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {fundButtonLabel()}\n </>\n ) : (\n <>\n <ArrowRight className=\"h-4 w-4\" />\n {fundAction === 'deposit' ? 'Transfer to Savings Account' : 'Withdraw to Wallet'}\n </>\n )}\n </button>\n\n <TxStatus state={fundTxState} />\n </>\n )}\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\" style={{ gap: '12px' }}>\n {/* Address rows */}\n {address && (\n <button\n onClick={() => handleCopyAddress(address, 'wallet')}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '10px 16px',\n border: '1.5px solid var(--compass-color-border)',\n width: '100%',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Wallet</span>\n <span className=\"flex items-center\" style={{ gap: '6px', color: 'var(--compass-color-text)', fontSize: '0.8125rem', fontFamily: 'monospace' }}>\n {address.slice(0, 6)}...{address.slice(-4)}\n {copiedField === 'wallet' ? <Check size={13} style={{ color: 'var(--compass-color-success)' }} /> : <Copy size={13} style={{ color: 'var(--compass-color-text-tertiary)' }} />}\n </span>\n </button>\n )}\n {balancesQuery.data?.earnAccountAddress && (\n <button\n onClick={() => handleCopyAddress(balancesQuery.data!.earnAccountAddress, 'earn')}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '10px 16px',\n border: '1.5px solid var(--compass-color-border)',\n width: '100%',\n textAlign: 'left',\n cursor: 'pointer',\n }}\n >\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Product Account</span>\n <span className=\"flex items-center\" style={{ gap: '6px', color: 'var(--compass-color-text)', fontSize: '0.8125rem', fontFamily: 'monospace' }}>\n {balancesQuery.data.earnAccountAddress.slice(0, 6)}...{balancesQuery.data.earnAccountAddress.slice(-4)}\n {copiedField === 'earn' ? <Check size={13} style={{ color: 'var(--compass-color-success)' }} /> : <Copy size={13} style={{ color: 'var(--compass-color-text-tertiary)' }} />}\n </span>\n </button>\n )}\n\n {/* Account Balances */}\n\n {balancesQuery.data?.balances && Object.keys(balancesQuery.data.balances).length > 0 ? (\n <>\n {Object.entries(balancesQuery.data.balances).map(([symbol, data]) => (\n <div\n key={symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: 1, marginRight: '12px' }}>\n {symbol}\n </span>\n <div className=\"flex flex-col items-end\" style={{ flexShrink: 0 }}>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', whiteSpace: 'nowrap' }}>\n {truncate(parseFloat(data.balance), 2)}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem', whiteSpace: 'nowrap' }}>\n {formatCurrency(data.usdValue)}\n </span>\n </div>\n </div>\n ))}\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>\n Total\n </span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatCurrency(earnAccountTotalUsd)}\n </span>\n </div>\n </>\n ) : (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No tokens in account\n </p>\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem', margin: 0 }}>\n Transfer tokens to start earning\n </p>\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Swap Modal */}\n <ActionModal\n isOpen={isSwapModalOpen}\n onClose={() => setIsSwapModalOpen(false)}\n title=\"Swap Tokens\"\n >\n <SwapForm\n availableFromTokens={balanceTokens}\n balances={Object.fromEntries(\n Object.entries(balancesQuery.data?.balances || {}).map(([token, data]) => [token, data.balance])\n )}\n onSwapSuccess={() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n }, 5000);\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n balancesQuery.refetch();\n }, 15000);\n }}\n />\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 chainId={CHAIN_ID}\n />\n </div>{/* end scrollable content area */}\n </div>\n );\n}\n\nfunction FundStepIndicator({\n number,\n label,\n state,\n}: {\n number: number;\n label: string;\n state: 'pending' | 'active' | 'done';\n}) {\n const iconColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-primary)'\n : 'var(--compass-color-text-tertiary)';\n\n const textColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-tertiary)';\n\n return (\n <div className=\"flex items-center gap-1.5 flex-1\">\n {state === 'done' ? (\n <Check className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n ) : state === 'active' ? (\n <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin\" style={{ color: iconColor }} />\n ) : (\n <Circle className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n )}\n <span style={{ color: textColor }}>\n {number}. {label}\n </span>\n </div>\n );\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../../contexts/WalletContext';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { CreditPositionsResponse } from '../../../types/credit';\n\nexport function useCreditPositions() {\n const { address } = useEmbeddableWallet();\n const { chainId } = useChain();\n const { isDeployed } = useCreditAccount();\n\n return useQuery<CreditPositionsResponse>({\n queryKey: ['creditPositions', address, chainId],\n queryFn: async () => {\n const res = await fetch(\n `/api/compass/credit/positions?owner=${address}&chain=${chainId}`,\n );\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || 'Failed to fetch credit positions');\n }\n return res.json();\n },\n enabled: !!address && isDeployed,\n staleTime: 30_000,\n refetchInterval: 30_000,\n refetchOnMount: true,\n });\n}\n","import { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { TokenBalance } from '../../../types/credit';\n\nexport function useCreditBalances() {\n const { chainId } = useChain();\n const { creditAccountAddress, isDeployed } = useCreditAccount();\n\n return useQuery<TokenBalance[]>({\n queryKey: ['creditBalances', creditAccountAddress, chainId],\n queryFn: async () => {\n const res = await fetch(\n `/api/compass/credit/balances?owner=${creditAccountAddress}&chain=${chainId}`,\n );\n if (!res.ok) {\n const err = await res.json().catch(() => ({}));\n throw new Error(err.error || 'Failed to fetch credit balances');\n }\n return res.json();\n },\n enabled: !!creditAccountAddress && isDeployed,\n staleTime: 30_000,\n refetchInterval: 30_000,\n refetchOnMount: true,\n });\n}\n","// Types for credit positions (matches SDK response shapes)\n\nexport interface CreditEvent {\n eventType: 'supply' | 'withdraw' | 'borrow' | 'repay' | 'liquidation';\n blockNumber: number;\n blockTimestamp: string;\n transactionHash: string;\n amount: string;\n symbol: string;\n}\n\nexport interface CollateralPosition {\n token: string;\n symbol: string;\n amountSupplied: string | null;\n usdValue: string | null;\n supplyApy: string | null;\n maxLtv: string | null;\n totalDeposited?: string | null;\n totalWithdrawn?: string | null;\n interestEarned?: string | null;\n events?: CreditEvent[];\n}\n\nexport interface DebtPosition {\n token: string;\n symbol: string;\n amountBorrowed: string | null;\n usdValue: string | null;\n borrowApy: string | null;\n totalBorrowed?: string | null;\n totalRepaid?: string | null;\n interestPaid?: string | null;\n events?: CreditEvent[];\n}\n\nexport interface AccountSummary {\n healthFactor: string;\n totalCollateralUsd: string;\n totalDebtUsd: string;\n availableBorrowsUsd: string;\n ltv: string;\n emodeCategoryId?: number;\n emodeLabel?: string | null;\n}\n\nexport interface CreditPositionsResponse {\n collateralPositions: CollateralPosition[];\n debtPositions: DebtPosition[];\n accountSummary: AccountSummary;\n totalUsdValue?: string | null;\n}\n\nexport interface TokenBalance {\n tokenSymbol: string;\n tokenAddress: string;\n amount: string;\n decimals: number;\n}\n\nexport type TxStatus = 'idle' | 'preparing' | 'signing' | 'broadcasting' | 'submitted' | 'confirmed' | 'failed';\n\nexport type TxState =\n | { status: 'idle' }\n | { status: 'preparing' }\n | { status: 'signing' }\n | { status: 'broadcasting' }\n | { status: 'submitted'; txHash: string }\n | { status: 'confirmed'; txHash: string }\n | { status: 'failed'; error: string };\n\nexport interface BundleAction {\n actionType: string;\n [key: string]: unknown;\n}\n\nexport const CREDIT_TOKENS = ['USDC', 'WETH', 'USDT', 'DAI', 'WBTC'] as const;\nexport type CreditToken = (typeof CREDIT_TOKENS)[number];\n","import { useQuery } from '@tanstack/react-query';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditPositions } from './useCreditPositions';\nimport { CREDIT_TOKENS } from '../../../types/credit';\n\n// Fallback prices used while the API request is in flight\nconst STABLECOIN_FALLBACKS: Record<string, number> = {\n USDC: 1,\n USDT: 1,\n DAI: 1,\n GHO: 1,\n};\n\nexport function useTokenPrices(): Record<string, number> {\n const { chainId } = useChain();\n const { data: positionsData } = useCreditPositions();\n\n const { data: apiPrices } = useQuery({\n queryKey: ['tokenPrices', chainId],\n queryFn: async () => {\n const tokens = CREDIT_TOKENS.join(',');\n const res = await fetch(`/api/compass/token/prices?chain=${chainId}&tokens=${tokens}`);\n if (!res.ok) return {};\n const data = await res.json();\n return (data.prices || {}) as Record<string, number>;\n },\n staleTime: 60 * 1000,\n refetchInterval: 60 * 1000,\n });\n\n const prices: Record<string, number> = { ...STABLECOIN_FALLBACKS };\n\n // Override with API prices\n if (apiPrices) {\n Object.assign(prices, apiPrices);\n }\n\n // Override with position-derived prices (most accurate for user's actual positions)\n if (positionsData) {\n for (const pos of positionsData.collateralPositions) {\n if (pos.usdValue && pos.amountSupplied) {\n const usd = parseFloat(pos.usdValue);\n const amount = parseFloat(pos.amountSupplied);\n if (amount > 0 && !isNaN(usd)) {\n prices[pos.symbol] = usd / amount;\n }\n }\n }\n for (const pos of positionsData.debtPositions) {\n if (pos.usdValue && pos.amountBorrowed) {\n const usd = parseFloat(pos.usdValue);\n const amount = parseFloat(pos.amountBorrowed);\n if (amount > 0 && !isNaN(usd)) {\n prices[pos.symbol] = usd / amount;\n }\n }\n }\n }\n\n return prices;\n}\n\nexport function formatUsdEstimate(\n amount: string,\n token: string,\n prices: Record<string, number>,\n): string | null {\n const num = Number(amount);\n if (!num || num <= 0) return null;\n const price = prices[token];\n if (price == null) return null;\n const usd = num * price;\n return `$${usd.toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}`;\n}\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../../contexts/WalletContext';\nimport { useChain } from '../../../contexts/ChainContext';\nimport { useCreditAccount } from '../../../contexts/CreditAccountContext';\nimport type { TxState, BundleAction } from '../../../types/credit';\n\nexport function useCreditBundle() {\n const { address, signTypedData, switchChain, walletChainId } = useEmbeddableWallet();\n const { chainId, chain } = useChain();\n const { creditAccountAddress, isDeployed } = useCreditAccount();\n const queryClient = useQueryClient();\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n const pollIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearPolling = useCallback(() => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n pollIntervalRef.current = null;\n }\n }, []);\n\n // Clear polling interval on unmount\n useEffect(() => {\n return () => clearPolling();\n }, [clearPolling]);\n\n const executeBundle = useCallback(\n async (actions: BundleAction[], _signTitle?: string, _description?: string) => {\n if (!address || !isDeployed) return;\n\n setTxState({ status: 'preparing' });\n\n try {\n // Ensure wallet is on the correct chain\n if (switchChain && walletChainId !== chain.viemChain.id) {\n await switchChain(chain.viemChain.id);\n }\n\n const prepareResponse = await fetch('/api/compass/credit/bundle/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: chainId,\n actions,\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 } =\n await prepareResponse.json();\n\n setTxState({ status: 'signing' });\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/credit/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 creditAccountAddress,\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 setTxState({ status: 'submitted', txHash });\n\n // Poll for tx confirmation every 5s for up to 2 minutes.\n // Check actual tx receipt via server-side RPC before marking as confirmed.\n clearPolling();\n let polls = 0;\n pollIntervalRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['creditPositions'] });\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${chainId}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearPolling();\n setTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch {\n // Server unreachable, keep polling\n }\n if (polls >= 24) {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n }\n }, 5_000);\n } catch (error) {\n console.error('Bundle error:', error);\n setTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Bundle failed',\n });\n }\n },\n [address, isDeployed, creditAccountAddress, chainId, chain, signTypedData, switchChain, walletChainId, queryClient, clearPolling],\n );\n\n const resetState = useCallback(() => {\n clearPolling();\n setTxState({ status: 'idle' });\n }, [clearPolling]);\n\n return { txState, executeBundle, resetState };\n}\n","import { useCallback } from 'react';\nimport { useCreditBundle } from './useCreditBundle';\nimport type { CreditToken } from '../../../types/credit';\n\ninterface BorrowParams {\n token: CreditToken;\n amount: number;\n}\n\nexport function useBorrow() {\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const executeBorrow = useCallback(\n async (params: BorrowParams) => {\n await executeBundle([\n { actionType: 'CREDIT_BORROW', token: params.token, amount: params.amount },\n ]);\n },\n [executeBundle],\n );\n\n return { txState, executeBorrow, resetState };\n}\n","import { useCallback } from 'react';\nimport { useCreditBundle } from './useCreditBundle';\nimport type { CreditToken } from '../../../types/credit';\n\ninterface RepayParams {\n token: CreditToken;\n amount: number;\n}\n\nexport function useRepay() {\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const executeRepay = useCallback(\n async (params: RepayParams) => {\n await executeBundle([\n { actionType: 'CREDIT_REPAY', token: params.token, amount: params.amount },\n ]);\n },\n [executeBundle],\n );\n\n return { txState, executeRepay, resetState };\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { Loader2, AlertCircle, ChevronRight, Plus, ChevronDown, ArrowDownLeft, ArrowUpRight, ExternalLink } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { useCreditPositions, useTokenPrices } from './hooks';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { CollateralPosition, DebtPosition, CreditToken, CreditEvent } from '../../types/credit';\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatUsd(value: string | null): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n const floored = floorTo(num, 2);\n return `$${floored.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n}\n\nfunction formatNumber(value: string | null, decimals = 2): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n if (Math.abs(num) < 0.01 && num !== 0) return '<0.01';\n const floored = floorTo(num, decimals);\n return floored.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: decimals });\n}\n\nfunction formatApy(value: string | null): string {\n if (value === null) return '-';\n const num = parseFloat(value);\n if (isNaN(num)) return '-';\n return `${floorTo(num, 2).toFixed(2)}%`;\n}\n\nfunction healthFactorColor(hf: string): string {\n const num = parseFloat(hf);\n if (isNaN(num)) return 'var(--compass-color-text-secondary)';\n if (num > 2) return 'var(--compass-color-success)';\n if (num >= 1.5) return 'var(--compass-color-warning)';\n return 'var(--compass-color-error)';\n}\n\nfunction formatHealthFactor(hf: string): string {\n const num = parseFloat(hf);\n if (isNaN(num)) return '-';\n if (num > 10000) return 'Safe';\n return num.toFixed(2);\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\nconst EVENT_CONFIG: Record<string, { label: string; color: string; mutedColor: string; icon: 'in' | 'out'; sign: string }> = {\n supply: { label: 'Supply', color: 'var(--compass-color-success)', mutedColor: 'var(--compass-color-success-muted)', icon: 'in', sign: '+' },\n withdraw: { label: 'Withdraw', color: 'var(--compass-color-warning)', mutedColor: 'var(--compass-color-warning-muted)', icon: 'out', sign: '-' },\n borrow: { label: 'Borrow', color: 'var(--compass-color-success)', mutedColor: 'var(--compass-color-success-muted)', icon: 'in', sign: '+' },\n repay: { label: 'Repay', color: 'var(--compass-color-warning)', mutedColor: 'var(--compass-color-warning-muted)', icon: 'out', sign: '-' },\n liquidation: { label: 'Liquidation', color: 'var(--compass-color-error)', mutedColor: 'var(--compass-color-error-muted, rgba(239,68,68,0.1))', icon: 'out', sign: '-' },\n};\n\nfunction CreditEventHistory({ events, tokenSymbol }: { events: CreditEvent[]; tokenSymbol: string }) {\n const [isExpanded, setIsExpanded] = useState(false);\n const { chainId } = useChain();\n\n if (!events || events.length === 0) return null;\n\n const sorted = [...events].sort((a, b) => b.blockNumber - a.blockNumber);\n\n return (\n <div className=\"flex flex-col w-full\">\n <button\n type=\"button\"\n onClick={() => setIsExpanded(!isExpanded)}\n className=\"flex items-center justify-between w-full px-3 py-2 transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n }}\n >\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n History ({sorted.length})\n </span>\n <ChevronDown\n size={14}\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-1 max-h-48 overflow-y-auto\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n scrollbarWidth: 'none',\n }}\n >\n {sorted.map((event, index) => {\n const config = EVENT_CONFIG[event.eventType] || EVENT_CONFIG.supply;\n const timestamp = event.blockTimestamp ? new Date(event.blockTimestamp) : null;\n return (\n <div\n key={`${event.transactionHash}-${index}`}\n className=\"flex items-center justify-between px-3 py-2\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderTop: index > 0 ? '1.5px solid var(--compass-color-border)' : 'none',\n }}\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"p-1\"\n style={{\n backgroundColor: config.mutedColor,\n borderRadius: 'var(--compass-border-radius-full)',\n }}\n >\n {config.icon === 'in' ? (\n <ArrowDownLeft size={10} style={{ color: config.color }} />\n ) : (\n <ArrowUpRight size={10} style={{ color: config.color }} />\n )}\n </div>\n <div className=\"flex flex-col\">\n <span\n className=\"text-[11px] font-medium\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {config.label}\n </span>\n <span\n className=\"text-[10px]\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {timestamp ? timestamp.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' }) : `Block #${event.blockNumber.toLocaleString()}`}\n </span>\n </div>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-[11px] font-mono font-medium\"\n style={{ color: config.color }}\n >\n {config.sign}{floorTo(parseFloat(event.amount), 2).toFixed(2)} {tokenSymbol}\n </span>\n <a\n href={getExplorerUrl(event.transactionHash, chainId)}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-0.5 hover:opacity-70 transition-opacity\"\n style={{ borderRadius: 'var(--compass-border-radius-sm)' }}\n >\n <ExternalLink\n size={10}\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n />\n </a>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\ninterface PositionsViewProps {\n allowedCollateralTokens?: string[];\n allowedDebtTokens?: string[];\n onBorrow: (token?: CreditToken) => void;\n onRepay: (token?: CreditToken) => void;\n onSupply: (token?: CreditToken) => void;\n onWithdraw: (token?: CreditToken) => void;\n}\n\nexport function PositionsView({ allowedCollateralTokens, allowedDebtTokens, onBorrow, onRepay, onSupply, onWithdraw }: PositionsViewProps) {\n const { data, isLoading, error } = useCreditPositions();\n const tokenPrices = useTokenPrices();\n const [showBorrowableModal, setShowBorrowableModal] = useState(false);\n const [showCollateralModal, setShowCollateralModal] = useState(false);\n const [showDebtModal, setShowDebtModal] = useState(false);\n\n if (isLoading) {\n return (\n <div className=\"flex items-center justify-center py-12\">\n <Loader2\n className=\"h-5 w-5 animate-spin\"\n style={{ color: 'var(--compass-color-primary)' }}\n />\n <span\n className=\"ml-3 text-sm\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n Loading positions...\n </span>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"text-center py-8\">\n <AlertCircle\n className=\"h-8 w-8 mx-auto mb-3\"\n style={{ color: 'var(--compass-color-error)', opacity: 0.6 }}\n />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {error instanceof Error ? error.message : 'Failed to load positions'}\n </p>\n </div>\n );\n }\n\n if (!data) return null;\n\n const { collateralPositions, debtPositions, accountSummary } = data;\n const visibleCollateral = collateralPositions.filter(\n (p) => p.usdValue !== null && parseFloat(p.usdValue) >= 0.01\n );\n const hasPositions = visibleCollateral.length > 0 || debtPositions.length > 0;\n\n const totalCollateralUsd = formatUsd(accountSummary.totalCollateralUsd);\n const totalDebtUsd = formatUsd(accountSummary.totalDebtUsd);\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '10px' }}>\n {/* Health Factor & Available to Borrow */}\n {hasPositions && (\n <div\n className=\"p-3 flex items-center gap-3\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div>\n <p\n className=\"text-[10px] uppercase tracking-wide mb-0.5\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Health Factor\n </p>\n <p\n className=\"text-lg font-bold tabular-nums\"\n style={{ color: healthFactorColor(accountSummary.healthFactor) }}\n >\n {formatHealthFactor(accountSummary.healthFactor)}\n </p>\n </div>\n <div\n style={{\n width: '1px',\n height: '32px',\n backgroundColor: 'var(--compass-color-border)',\n }}\n />\n <button\n type=\"button\"\n onClick={() => setShowBorrowableModal(true)}\n className=\"flex-1 flex items-center justify-between text-left transition-opacity hover:opacity-80\"\n >\n <div>\n <p\n className=\"text-[10px] uppercase tracking-wide mb-0.5\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available to Borrow\n </p>\n <p\n className=\"text-lg font-bold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(accountSummary.availableBorrowsUsd)}\n </p>\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {/* Collateral row */}\n <button\n type=\"button\"\n onClick={() => setShowCollateralModal(true)}\n className=\"w-full p-3 flex items-center justify-between transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div className=\"flex flex-col items-start gap-0.5\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Collateral\n </span>\n <span\n className=\"text-lg font-semibold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {totalCollateralUsd}\n </span>\n {visibleCollateral.length > 0 && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {visibleCollateral.map((p) => p.symbol).join(', ')}\n </span>\n )}\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n\n {/* Debt row */}\n <button\n type=\"button\"\n onClick={() => setShowDebtModal(true)}\n className=\"w-full p-3 flex items-center justify-between transition-opacity hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n }}\n >\n <div className=\"flex flex-col items-start gap-0.5\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt\n </span>\n <span\n className=\"text-lg font-semibold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {totalDebtUsd}\n </span>\n {debtPositions.length > 0 && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {debtPositions.map((p) => p.symbol).join(', ')}\n </span>\n )}\n </div>\n <ChevronRight className=\"h-5 w-5\" style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n </div>\n\n {/* Collateral Positions Modal */}\n <ActionModal\n isOpen={showCollateralModal}\n onClose={() => setShowCollateralModal(false)}\n title=\"Collateral Positions\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <button\n type=\"button\"\n onClick={() => { setShowCollateralModal(false); onSupply(); }}\n className=\"w-full flex items-center justify-center gap-1.5 transition-opacity hover:opacity-80\"\n style={{\n padding: '10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--compass-color-primary)',\n border: '1.5px solid var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-xl)',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n }}\n >\n <Plus size={14} />\n Supply New Collateral\n </button>\n\n {visibleCollateral.length > 0 ? (\n visibleCollateral.map((position) => (\n <CollateralPositionCard\n key={position.token}\n position={position}\n onSupply={() => { setShowCollateralModal(false); onSupply(position.symbol as CreditToken); }}\n onWithdraw={() => { setShowCollateralModal(false); onWithdraw(position.symbol as CreditToken); }}\n />\n ))\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No collateral supplied.\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Debt Positions Modal */}\n <ActionModal\n isOpen={showDebtModal}\n onClose={() => setShowDebtModal(false)}\n title=\"Debt Positions\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <button\n type=\"button\"\n onClick={() => { setShowDebtModal(false); onBorrow(); }}\n className=\"w-full flex items-center justify-center gap-1.5 transition-opacity hover:opacity-80\"\n style={{\n padding: '10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--compass-color-primary)',\n border: '1.5px solid var(--compass-color-primary)',\n borderRadius: 'var(--compass-border-radius-xl)',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n }}\n >\n <Plus size={14} />\n Borrow New Token\n </button>\n\n {debtPositions.length > 0 ? (\n debtPositions.map((position) => (\n <DebtPositionCard\n key={position.token}\n position={position}\n onRepay={() => { setShowDebtModal(false); onRepay(position.symbol as CreditToken); }}\n onBorrow={() => { setShowDebtModal(false); onBorrow(position.symbol as CreditToken); }}\n />\n ))\n ) : (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No debt positions.\n </div>\n )}\n </div>\n </ActionModal>\n\n {/* Available to Borrow Modal */}\n <ActionModal\n isOpen={showBorrowableModal}\n onClose={() => setShowBorrowableModal(false)}\n title=\"Available to Borrow\"\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px' }}>\n <div\n className=\"text-center py-2\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n <p\n className=\"text-2xl font-bold tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(accountSummary.availableBorrowsUsd)}\n </p>\n </div>\n\n {(() => {\n const availableUsd = parseFloat(accountSummary.availableBorrowsUsd) || 0;\n if (availableUsd <= 0) return (\n <div\n className=\"text-center py-4\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n No borrowing capacity available.\n </div>\n );\n const tokens = Object.entries(tokenPrices)\n .filter(([symbol, price]) => price > 0 && (!allowedDebtTokens || allowedDebtTokens.includes(symbol)))\n .map(([symbol, price]) => ({\n symbol,\n maxAmount: availableUsd / price,\n price,\n }))\n .sort((a, b) => b.maxAmount * b.price - a.maxAmount * a.price);\n if (tokens.length === 0) return null;\n return (\n <>\n <p\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Max borrowable per token\n </p>\n {tokens.map(({ symbol, maxAmount }) => (\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: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-medium\" style={{ color: 'var(--compass-color-text)' }}>\n {symbol}\n </span>\n <span\n className=\"font-mono tabular-nums\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {floorTo(maxAmount, 2).toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\n </span>\n </div>\n ))}\n </>\n );\n })()}\n </div>\n </ActionModal>\n </div>\n );\n}\n\nfunction CollateralPositionCard({\n position,\n onSupply,\n onWithdraw,\n}: {\n position: CollateralPosition;\n onSupply: () => void;\n onWithdraw: () => void;\n}) {\n return (\n <div\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n {/* Token name + action pills */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {position.symbol}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n onClick={onSupply}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Supply\n </button>\n <button\n type=\"button\"\n onClick={onWithdraw}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Withdraw\n </button>\n </div>\n </div>\n\n {/* Amount + USD on one line */}\n <div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '1rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.amountSupplied)}{' '}\n <span style={{ fontSize: '0.8125rem', fontWeight: 400, color: 'var(--compass-color-text-secondary)' }}>\n {position.symbol}\n </span>\n </span>\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-tertiary)' }}>\n {formatUsd(position.usdValue)}\n </span>\n </div>\n\n {/* Stats rows */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Supply APY</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-success)' }}>\n {formatApy(position.supplyApy)}\n </span>\n </div>\n {position.maxLtv !== null && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Max LTV</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-text)' }}>\n {parseFloat(position.maxLtv).toFixed(0)}%\n </span>\n </div>\n )}\n {position.interestEarned !== null && position.interestEarned !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Interest earned</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-success)' }}>\n {formatNumber(position.interestEarned)} {position.symbol}\n </span>\n </div>\n )}\n </div>\n\n {position.events && position.events.length > 0 && (\n <CreditEventHistory events={position.events} tokenSymbol={position.symbol} />\n )}\n </div>\n );\n}\n\nfunction DebtPositionCard({\n position,\n onRepay,\n onBorrow,\n}: {\n position: DebtPosition;\n onRepay: () => void;\n onBorrow: () => void;\n}) {\n return (\n <div\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px',\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n }}\n >\n {/* Token name + action pills */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {position.symbol}\n </span>\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n <button\n type=\"button\"\n onClick={onBorrow}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Borrow\n </button>\n <button\n type=\"button\"\n onClick={onRepay}\n style={{\n padding: '4px 10px',\n fontSize: '0.6875rem',\n fontWeight: 500,\n color: 'var(--compass-color-text-secondary)',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n cursor: 'pointer',\n transition: 'all 200ms ease',\n }}\n >\n Repay\n </button>\n </div>\n </div>\n\n {/* Amount + USD on one line */}\n <div style={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '1rem', fontWeight: 600, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.amountBorrowed)}{' '}\n <span style={{ fontSize: '0.8125rem', fontWeight: 400, color: 'var(--compass-color-text-secondary)' }}>\n {position.symbol}\n </span>\n </span>\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-tertiary)' }}>\n {formatUsd(position.usdValue)}\n </span>\n </div>\n\n {/* Stats rows */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Borrow APY</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-warning, #f59e0b)' }}>\n {formatApy(position.borrowApy)}\n </span>\n </div>\n {position.interestPaid !== null && position.interestPaid !== undefined && (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '0.75rem', color: 'var(--compass-color-text-tertiary)' }}>Interest paid</span>\n <span style={{ fontSize: '0.75rem', fontWeight: 500, color: 'var(--compass-color-text)' }}>\n {formatNumber(position.interestPaid)} {position.symbol}\n </span>\n </div>\n )}\n </div>\n\n {position.events && position.events.length > 0 && (\n <CreditEventHistory events={position.events} tokenSymbol={position.symbol} />\n )}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, TrendingUp } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useBorrow, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface BorrowModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function BorrowModal({ isOpen, onClose, initialToken, allowedTokens }: BorrowModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBorrow, resetState } = useBorrow();\n const prices = useTokenPrices();\n const { data: positionsData } = useCreditPositions();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const maxBorrowable = (() => {\n if (!positionsData) return null;\n const availableUsd = parseFloat(positionsData.accountSummary.availableBorrowsUsd) || 0;\n if (availableUsd <= 0) return null;\n const price = prices[token];\n if (!price || price <= 0) return null;\n return availableUsd / price;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleBorrow = () => {\n if (!isValid) return;\n executeBorrow({ token, amount: Number(amount) });\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Borrow\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {maxBorrowable !== null && (\n <button\n type=\"button\"\n onClick={() => {\n const safeMax = maxBorrowable * 0.995;\n setAmount(truncate(safeMax, 2));\n }}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {maxBorrowable !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Max: {truncate(maxBorrowable, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleBorrow}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Borrow...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <TrendingUp className=\"h-4 w-4\" />\n Borrow\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowDownLeft } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useRepay, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface RepayModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function RepayModal({ isOpen, onClose, initialToken, allowedTokens }: RepayModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeRepay, resetState } = useRepay();\n const prices = useTokenPrices();\n const { data: positionsData } = useCreditPositions();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const debtForToken = (() => {\n if (!positionsData) return null;\n const pos = positionsData.debtPositions.find((p) => p.symbol === token);\n if (!pos || !pos.amountBorrowed) return null;\n const amt = parseFloat(pos.amountBorrowed);\n return amt > 0 ? amt : null;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleRepay = () => {\n if (!isValid) return;\n executeRepay({ token, amount: Number(amount) });\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Repay\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {debtForToken !== null && (\n <button\n type=\"button\"\n onClick={() => setAmount(truncate(debtForToken, 2))}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {debtForToken !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt: {truncate(debtForToken, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleRepay}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Repay...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowDownLeft className=\"h-4 w-4\" />\n Repay\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowUpCircle } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle, useCreditBalances, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\ninterface SupplyModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function SupplyModal({ isOpen, onClose, initialToken, allowedTokens }: SupplyModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBundle, resetState } = useCreditBundle();\n const { data: balances } = useCreditBalances();\n const prices = useTokenPrices();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const tokenBalance = balances?.find((b) => b.tokenSymbol === token);\n const availableBalance = tokenBalance ? tokenBalance.amount : null;\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleSubmit = () => {\n if (!isValid) return;\n executeBundle(\n [{ actionType: 'CREDIT_SUPPLY', token, amount: Number(amount) }],\n 'Sign Supply',\n `Supply ${amount} ${token}`,\n );\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Supply Collateral\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n {formatUsdEstimate(amount, token, prices) && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </p>\n )}\n </div>\n </div>\n\n {availableBalance !== null && (\n <div\n className=\"flex items-center justify-between text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <span>\n Available: {availableBalance} {token}\n </span>\n <button\n type=\"button\"\n onClick={() => setAmount(availableBalance)}\n className=\"font-medium hover:opacity-80 transition-opacity\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n Max\n </button>\n </div>\n )}\n\n <button\n onClick={handleSubmit}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Supply...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowUpCircle className=\"h-4 w-4\" />\n Supply\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { Loader2, ArrowDownCircle } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle, useCreditPositions, useTokenPrices, formatUsdEstimate } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { CREDIT_TOKENS, type CreditToken } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface WithdrawModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialToken?: CreditToken;\n allowedTokens?: string[];\n}\n\nexport function WithdrawModal({ isOpen, onClose, initialToken, allowedTokens }: WithdrawModalProps) {\n const { address } = useEmbeddableWallet();\n const { isDeployed } = useCreditAccount();\n const { txState, executeBundle, resetState } = useCreditBundle();\n const { data: positionsData } = useCreditPositions();\n const prices = useTokenPrices();\n\n const [token, setToken] = useState<CreditToken>(initialToken || 'USDC');\n const [amount, setAmount] = useState('');\n\n useEffect(() => {\n if (initialToken) setToken(initialToken);\n }, [initialToken]);\n\n const suppliedAmount = (() => {\n if (!positionsData) return null;\n const pos = positionsData.collateralPositions.find((p) => p.symbol === token);\n if (!pos || !pos.amountSupplied) return null;\n const amt = parseFloat(pos.amountSupplied);\n return amt > 0 ? amt : null;\n })();\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n useEffect(() => {\n return () => resetState();\n }, [resetState]);\n\n const handleSubmit = () => {\n if (!isValid) return;\n executeBundle(\n [{ actionType: 'CREDIT_WITHDRAW', token, amount: Number(amount) }],\n 'Sign Withdraw',\n `Withdraw ${amount} ${token}`,\n );\n };\n\n const selectStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Withdraw Collateral\">\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Token\n </label>\n {initialToken ? (\n <div\n className=\"w-full border px-3 py-2.5 text-sm font-medium\"\n style={selectStyle}\n >\n {token}\n </div>\n ) : (\n <select\n value={token}\n onChange={(e) => setToken(e.target.value as CreditToken)}\n className=\"w-full border px-3 py-2.5 text-sm focus:outline-none\"\n style={selectStyle}\n >\n {CREDIT_TOKENS.filter((t) => !allowedTokens || allowedTokens.includes(t)).map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n )}\n </div>\n <div>\n <div className=\"flex items-center justify-between mb-1.5\">\n <label className=\"text-sm\" style={labelStyle}>\n Amount\n </label>\n {suppliedAmount !== null && (\n <button\n type=\"button\"\n onClick={() => setAmount(truncate(suppliedAmount, 2))}\n className=\"text-xs font-medium transition-opacity hover:opacity-80\"\n style={{ color: 'var(--compass-color-primary)' }}\n >\n MAX\n </button>\n )}\n </div>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => setAmount(e.target.value)}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n <div className=\"flex items-center justify-between mt-1\">\n {formatUsdEstimate(amount, token, prices) ? (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </span>\n ) : <span />}\n {suppliedAmount !== null && (\n <span\n className=\"text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Supplied: {truncate(suppliedAmount, 2)} {token}\n </span>\n )}\n </div>\n </div>\n </div>\n\n <button\n onClick={handleSubmit}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Withdraw...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowDownCircle className=\"h-4 w-4\" />\n Withdraw\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState, useCallback, useRef, useEffect } from 'react';\nimport { Loader2, ArrowRight, ArrowDownLeft, ArrowUpRight, Check, Circle, Send } from 'lucide-react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { BuyForm } from '../../shared/BuyForm';\nimport { SendForm } from '../../shared/SendForm';\nimport { TxStatus } from './TxStatus';\nimport { useTokenPrices, formatUsdEstimate, useCreditBalances } from './hooks';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport type { TxState } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface TopUpModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\ntype TransferAction = 'deposit' | 'withdraw' | 'buy' | 'send';\n\ntype TopUpStep =\n | 'idle'\n | 'approving'\n | 'signing-approval'\n | 'preparing-transfer'\n | 'signing-transfer'\n | 'executing'\n | 'confirmed'\n | 'failed';\n\nfunction getPhase(step: TopUpStep): 0 | 1 | 2 {\n if (step === 'idle' || step === 'failed') return 0;\n if (step === 'approving' || step === 'signing-approval') return 1;\n return 2;\n}\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\nexport function TopUpModal({ isOpen, onClose }: TopUpModalProps) {\n const { address, signTypedData, switchChain, walletChainId, fundWallet, hasExternalWallet, sendTransaction } = useEmbeddableWallet();\n const { chainId } = useChain();\n const { isDeployed, creditAccountAddress } = useCreditAccount();\n const queryClient = useQueryClient();\n const prices = useTokenPrices();\n\n const token = 'USDC';\n const [action, setAction] = useState<TransferAction>(\n !hasExternalWallet && fundWallet ? 'buy' : 'deposit'\n );\n\n const showBuyTab = !!fundWallet;\n const showSendTab = !!sendTransaction && !hasExternalWallet;\n const buyOnly = !hasExternalWallet && showBuyTab && !sendTransaction;\n const [amount, setAmount] = useState('');\n const [step, setStep] = useState<TopUpStep>('idle');\n const [txState, setTxState] = useState<TxState>({ status: 'idle' });\n const pollIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n const clearPolling = useCallback(() => {\n if (pollIntervalRef.current) {\n clearInterval(pollIntervalRef.current);\n pollIntervalRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n return () => clearPolling();\n }, [clearPolling]);\n\n const CHAIN_ID = chainId;\n\n // Wallet balance for deposit\n const { data: walletBalance } = useQuery({\n queryKey: ['walletTokenBalance', CHAIN_ID, address, token],\n queryFn: async () => {\n if (!address) return '0';\n try {\n const res = await fetch(\n `/api/compass/token/balance?address=${address}&chain=${CHAIN_ID}&token=${token}`\n );\n if (!res.ok) return '0';\n const data = await res.json();\n return data.balance || '0';\n } catch {\n return '0';\n }\n },\n enabled: !!address && isOpen && action === 'deposit',\n staleTime: 15 * 1000,\n });\n\n // Credit account balances for withdraw\n const { data: creditBalances } = useCreditBalances();\n\n const getCreditBalance = (t: string): string => {\n if (!creditBalances) return '0';\n const bal = creditBalances.find((b) => b.tokenSymbol === t);\n return bal ? bal.amount : '0';\n };\n\n const maxBalance = action === 'deposit'\n ? walletBalance || '0'\n : getCreditBalance(token);\n\n const handleActionChange = (newAction: TransferAction) => {\n setAction(newAction);\n setAmount('');\n setStep('idle');\n setTxState({ status: 'idle' });\n };\n\n const isValid = Number(amount) > 0 && !!address && isDeployed;\n const isBusy =\n step === 'approving' ||\n step === 'signing-approval' ||\n step === 'preparing-transfer' ||\n step === 'signing-transfer' ||\n step === 'executing';\n\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 const handleTransfer = async () => {\n if (!isValid || !signTypedData) return;\n\n setTxState({ status: 'idle' });\n\n try {\n await ensureCorrectChain();\n\n if (action === 'deposit') {\n // --- Phase 1: Check & handle token approval ---\n setStep('approving');\n setTxState({ status: 'preparing' });\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,\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 && approvalData.transaction) {\n // Non-EIP2612 token — execute approval via gas sponsor\n setTxState({ status: 'broadcasting' });\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 if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval transaction failed');\n }\n } else if (approvalData.eip712) {\n // EIP-2612 token — sign permit\n setStep('signing-approval');\n setTxState({ status: 'signing' });\n\n const approvalSignature = await signTypedData({\n domain: approvalData.domain,\n types: approvalData.normalizedTypes,\n primaryType: 'Permit',\n message: approvalData.message,\n });\n\n setTxState({ status: 'broadcasting' });\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 if (!executeApprovalResponse.ok) {\n const errData = await executeApprovalResponse.json();\n throw new Error(errData.error || 'Approval failed');\n }\n } else {\n throw new Error('Unable to approve token for transfers');\n }\n }\n\n // --- Phase 2: Prepare & execute transfer ---\n setStep('preparing-transfer');\n setTxState({ status: 'preparing' });\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,\n amount,\n action: 'DEPOSIT',\n product: 'credit',\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 setStep('signing-transfer');\n setTxState({ status: 'signing' });\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 setStep('executing');\n setTxState({ status: 'broadcasting' });\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,\n product: 'credit',\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 handleSuccess(txHash);\n } else {\n // --- Withdraw: prepare & execute ---\n setStep('preparing-transfer');\n setTxState({ status: 'preparing' });\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,\n amount,\n action: 'WITHDRAW',\n product: 'credit',\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare withdrawal');\n }\n\n const prepareData = await prepareResponse.json();\n\n setStep('signing-transfer');\n setTxState({ status: 'signing' });\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 setStep('executing');\n setTxState({ status: 'broadcasting' });\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,\n product: 'credit',\n }),\n });\n\n if (!executeResponse.ok) {\n const errData = await executeResponse.json();\n throw new Error(errData.error || 'Withdrawal failed');\n }\n\n const { txHash } = await executeResponse.json();\n handleSuccess(txHash);\n }\n } catch (error) {\n console.error('Transfer error:', error);\n setStep('failed');\n setTxState({\n status: 'failed',\n error: error instanceof Error ? error.message : 'Transfer failed',\n });\n }\n };\n\n const handleSuccess = (txHash: string) => {\n setStep('confirmed');\n setTxState({ status: 'submitted', txHash });\n\n clearPolling();\n let polls = 0;\n pollIntervalRef.current = setInterval(async () => {\n polls++;\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n queryClient.invalidateQueries({ queryKey: ['creditPositions'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${txHash}&chain=${CHAIN_ID}`);\n const data = await res.json();\n if (data.status === 'success') {\n clearPolling();\n setTxState({ status: 'confirmed', txHash });\n return;\n } else if (data.status === 'reverted') {\n clearPolling();\n setTxState({ status: 'failed', error: 'Transaction reverted' });\n return;\n }\n } catch (err) {\n if (err instanceof TypeError && err.message.includes('fetch')) {\n // Network error — safe to retry\n } else {\n console.warn('[TopUpModal] Unexpected error polling tx receipt:', err);\n }\n }\n if (polls >= 24) {\n clearPolling();\n setTxState({ status: 'failed', error: 'Unable to confirm transaction. Please check your wallet for status.' });\n }\n }, 5_000);\n };\n\n const phase = getPhase(step);\n\n const buttonLabel = () => {\n switch (step) {\n case 'approving':\n return 'Checking approval...';\n case 'signing-approval':\n return 'Sign Approval (1/2)...';\n case 'preparing-transfer':\n return action === 'deposit' ? 'Preparing transfer...' : 'Preparing withdrawal...';\n case 'signing-transfer':\n return action === 'deposit' ? 'Sign Transfer (2/2)...' : 'Sign Withdrawal...';\n case 'executing':\n return 'Executing...';\n default:\n return null;\n }\n };\n\n const inputStyle: React.CSSProperties = {\n backgroundColor: 'var(--compass-color-surface)',\n borderColor: 'var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n color: 'var(--compass-color-text)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n const labelStyle: React.CSSProperties = {\n color: 'var(--compass-color-text-secondary)',\n fontFamily: 'var(--compass-font-family)',\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title={showSendTab ? \"Manage Funds\" : buyOnly ? \"Add Funds\" : \"Transfer Funds\"}>\n <div className=\"space-y-4\">\n {/* Action Tabs */}\n {!buyOnly && (\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 {([\n ...(showSendTab ? ['buy', 'send'] as const : showBuyTab ? ['deposit', 'withdraw', 'buy'] as const : ['deposit', 'withdraw'] as const),\n ] as TransferAction[]).map((tab) => (\n <button\n key={tab}\n onClick={() => handleActionChange(tab)}\n disabled={isBusy}\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 action === tab ? 'var(--compass-color-surface)' : 'transparent',\n color:\n action === tab\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-md)',\n }}\n >\n {tab === 'deposit' ? (\n <ArrowDownLeft size={14} />\n ) : tab === 'withdraw' ? (\n <ArrowUpRight size={14} />\n ) : tab === 'send' ? (\n <Send size={14} />\n ) : (\n <ArrowRight size={14} />\n )}\n {tab}\n </button>\n ))}\n </div>\n )}\n\n {action === 'send' ? (\n <SendForm\n product=\"credit\"\n productAccountAddress={creditAccountAddress || undefined}\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n }}\n />\n ) : action === 'buy' || buyOnly ? (\n <BuyForm\n targetAddress={creditAccountAddress || ''}\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['creditBalances'] });\n queryClient.invalidateQueries({ queryKey: ['walletTokenBalance'] });\n }}\n />\n ) : (\n <>\n {/* Step indicator (deposit only — 2 phases) */}\n {(isBusy || step === 'confirmed') && action === 'deposit' && (\n <div\n className=\"flex gap-3 p-3 text-xs\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <StepIndicator\n number={1}\n label=\"Approve\"\n state={phase > 1 ? 'done' : phase === 1 ? 'active' : 'pending'}\n />\n <StepIndicator\n number={2}\n label=\"Transfer\"\n state={step === 'confirmed' ? 'done' : phase > 1 ? 'active' : 'pending'}\n />\n </div>\n )}\n\n {/* Amount input */}\n <div>\n <label className=\"block text-sm mb-1.5\" style={labelStyle}>\n Amount\n </label>\n <div className=\"relative\">\n <input\n type=\"number\"\n value={amount}\n onChange={(e) => { setAmount(e.target.value); setTxState({ status: 'idle' }); }}\n disabled={isBusy}\n placeholder=\"0.00\"\n className=\"w-full border px-3 py-2.5 pr-14 text-sm focus:outline-none disabled:opacity-50\"\n style={inputStyle}\n />\n <span\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-xs\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {token}\n </span>\n </div>\n {formatUsdEstimate(amount, token, prices) && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n {'\\u2248'} {formatUsdEstimate(amount, token, prices)}\n </p>\n )}\n {maxBalance && maxBalance !== '0' && (\n <p\n className=\"text-xs mt-1\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Available: {truncate(parseFloat(maxBalance), 2)} {token}\n </p>\n )}\n </div>\n\n {/* Description */}\n {!isBusy && step !== 'confirmed' && step !== 'failed' && txState.status === 'idle' && (\n <p\n className=\"text-xs\"\n style={{\n color: 'var(--compass-color-text-tertiary)',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {action === 'deposit'\n ? `Approves the token transfer, then transfers tokens from your ${!hasExternalWallet ? 'embedded ' : ''}wallet into your credit account. Requires 2 signatures.${!hasExternalWallet ? ' Note: deposit and withdraw use your embedded wallet, not your bank account.' : ''}`\n : `Moves tokens from your credit account back to your ${!hasExternalWallet ? 'embedded ' : ''}wallet. Requires 1 signature.${!hasExternalWallet ? ' Gas fees are sponsored.' : ''}`}\n </p>\n )}\n\n <button\n onClick={handleTransfer}\n disabled={!isValid || isBusy}\n className=\"w-full py-3 px-4 text-sm font-medium flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n style={{\n backgroundColor: 'var(--compass-color-primary)',\n color: 'white',\n borderRadius: 'var(--compass-border-radius-xl)',\n fontFamily: 'var(--compass-font-family)',\n transition: 'var(--compass-transition-normal)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n {buttonLabel()}\n </>\n ) : (\n <>\n <ArrowRight className=\"h-4 w-4\" />\n {action === 'deposit' ? 'Transfer to Credit Account' : 'Withdraw to Wallet'}\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </>\n )}\n </div>\n </ActionModal>\n );\n}\n\nfunction StepIndicator({\n number,\n label,\n state,\n}: {\n number: number;\n label: string;\n state: 'pending' | 'active' | 'done';\n}) {\n const iconColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-primary)'\n : 'var(--compass-color-text-tertiary)';\n\n const textColor =\n state === 'done'\n ? 'var(--compass-color-success)'\n : state === 'active'\n ? 'var(--compass-color-text)'\n : 'var(--compass-color-text-tertiary)';\n\n return (\n <div className=\"flex items-center gap-1.5 flex-1\">\n {state === 'done' ? (\n <Check className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n ) : state === 'active' ? (\n <Loader2 className=\"h-3.5 w-3.5 shrink-0 animate-spin\" style={{ color: iconColor }} />\n ) : (\n <Circle className=\"h-3.5 w-3.5 shrink-0\" style={{ color: iconColor }} />\n )}\n <span style={{ color: textColor }}>\n {number}. {label}\n </span>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { ArrowDownUp, Loader2, ChevronDown, ArrowLeftRight } from 'lucide-react';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { TxStatus } from './TxStatus';\nimport { useCreditBundle } from './hooks/useCreditBundle';\nimport { useCreditBalances, useTokenPrices } from './hooks';\nimport { CREDIT_TOKENS } from '../../types/credit';\n\nfunction truncate(value: number, decimals: number): string {\n const factor = Math.pow(10, decimals);\n return (Math.floor(value * factor) / factor).toFixed(decimals);\n}\n\ninterface CreditSwapModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\nexport function CreditSwapModal({ isOpen, onClose }: CreditSwapModalProps) {\n const { data: balances } = useCreditBalances();\n const prices = useTokenPrices();\n const { txState, executeBundle, resetState } = useCreditBundle();\n\n const tokens = CREDIT_TOKENS;\n\n const [fromToken, setFromToken] = useState('USDC');\n const [toToken, setToToken] = useState(tokens.find((t) => t !== 'USDC') || tokens[0] || 'WETH');\n const [fromAmount, setFromAmount] = useState('');\n const [isFromOpen, setIsFromOpen] = useState(false);\n const [isToOpen, setIsToOpen] = useState(false);\n\n useEffect(() => {\n if (isOpen) {\n setFromAmount('');\n resetState();\n }\n }, [isOpen]);\n\n // When fromToken changes, ensure toToken is different\n useEffect(() => {\n if (fromToken === toToken) {\n const alt = tokens.find((t) => t !== fromToken);\n if (alt) setToToken(alt);\n }\n }, [fromToken, toToken, tokens]);\n\n const fromBalance = balances?.find((b) => b.tokenSymbol === fromToken);\n const fromBalanceAmount = fromBalance ? parseFloat(fromBalance.amount) : 0;\n\n const estimatedOutput = (() => {\n const amt = parseFloat(fromAmount);\n if (!amt || amt <= 0) return null;\n const priceIn = prices[fromToken];\n const priceOut = prices[toToken];\n if (!priceIn || !priceOut || priceOut <= 0) return null;\n return (amt * priceIn) / priceOut;\n })();\n\n const rate = (() => {\n const priceIn = prices[fromToken];\n const priceOut = prices[toToken];\n if (!priceIn || !priceOut || priceOut <= 0) return null;\n return priceIn / priceOut;\n })();\n\n const isBusy =\n txState.status === 'preparing' ||\n txState.status === 'signing' ||\n txState.status === 'broadcasting';\n\n const isValid =\n parseFloat(fromAmount) > 0 &&\n fromToken !== toToken &&\n fromBalanceAmount >= parseFloat(fromAmount || '0');\n\n const handleSwap = () => {\n if (!isValid) return;\n executeBundle([\n {\n actionType: 'V2_SWAP',\n tokenIn: fromToken,\n tokenOut: toToken,\n amountIn: fromAmount,\n slippage: 1.0,\n },\n ]);\n };\n\n return (\n <ActionModal isOpen={isOpen} onClose={onClose} title=\"Swap Tokens\">\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0', fontFamily: 'var(--compass-font-family)' }}>\n {/* From card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg) var(--compass-border-radius-lg) 0 0',\n padding: '10px 12px',\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>From</span>\n {fromBalanceAmount > 0 && (\n <button\n onClick={() => setFromAmount(truncate(fromBalanceAmount, 2))}\n disabled={isBusy}\n style={{ color: 'var(--compass-color-primary)', background: 'none', border: 'none', padding: 0, cursor: 'pointer', fontSize: '0.6875rem' }}\n >\n Available: {truncate(fromBalanceAmount, 2)}\n </button>\n )}\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <input\n type=\"number\"\n value={fromAmount}\n onChange={(e) => setFromAmount(e.target.value)}\n placeholder=\"0.00\"\n disabled={isBusy}\n style={{\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n fontWeight: 600,\n fontFamily: 'var(--compass-font-family)',\n }}\n />\n <div style={{ position: 'relative', flexShrink: 0 }}>\n <button\n onClick={() => setIsFromOpen(!isFromOpen)}\n disabled={isBusy}\n style={{\n display: 'flex',\n alignItems: 'center',\n fontWeight: 500,\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n gap: '4px',\n fontSize: '0.8125rem',\n cursor: isBusy ? 'not-allowed' : 'pointer',\n }}\n >\n {fromToken}\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isFromOpen && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: '4px',\n zIndex: 10,\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: 'var(--compass-shadow-md)',\n minWidth: '120px',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none' as const,\n }}\n >\n {tokens.filter((t) => t !== toToken).map((token) => (\n <button\n key={token}\n onClick={() => {\n setFromToken(token);\n setFromAmount('');\n setIsFromOpen(false);\n }}\n style={{\n display: 'block',\n width: '100%',\n textAlign: 'left',\n padding: '6px 10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: token === fromToken ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === fromToken ? 'var(--compass-color-primary-muted)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Reverse button — overlaps between cards */}\n <div style={{ display: 'flex', justifyContent: 'center', height: 0 }}>\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-full)',\n padding: '4px',\n position: 'relative',\n zIndex: 1,\n marginTop: '-11px',\n }}\n >\n <ArrowDownUp size={12} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </div>\n </div>\n\n {/* To card */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderTop: 'none',\n borderRadius: '0 0 var(--compass-border-radius-lg) var(--compass-border-radius-lg)',\n padding: '10px 12px',\n }}\n >\n <div>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem' }}>To (estimated)</span>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px', marginTop: '2px' }}>\n <div\n style={{\n flex: 1,\n minWidth: 0,\n color: estimatedOutput ? 'var(--compass-color-text)' : 'var(--compass-color-text-tertiary)',\n fontSize: '1rem',\n fontWeight: 600,\n }}\n >\n {estimatedOutput ? truncate(estimatedOutput, 2) : '0.00'}\n </div>\n <div style={{ position: 'relative', flexShrink: 0 }}>\n <button\n onClick={() => setIsToOpen(!isToOpen)}\n disabled={isBusy}\n style={{\n display: 'flex',\n alignItems: 'center',\n fontWeight: 500,\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-md)',\n padding: '4px 8px',\n gap: '4px',\n fontSize: '0.8125rem',\n cursor: isBusy ? 'not-allowed' : 'pointer',\n }}\n >\n {toToken}\n <ChevronDown size={12} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isToOpen && (\n <div\n style={{\n position: 'absolute',\n right: 0,\n top: '100%',\n marginTop: '4px',\n zIndex: 10,\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: 'var(--compass-shadow-md)',\n minWidth: '120px',\n maxHeight: '200px',\n overflowY: 'auto',\n scrollbarWidth: 'none' as const,\n }}\n >\n {tokens.filter((t) => t !== fromToken).map((token) => (\n <button\n key={token}\n onClick={() => {\n setToToken(token);\n setIsToOpen(false);\n }}\n style={{\n display: 'block',\n width: '100%',\n textAlign: 'left',\n padding: '6px 10px',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: token === toToken ? 'var(--compass-color-primary)' : 'var(--compass-color-text)',\n backgroundColor: token === toToken ? 'var(--compass-color-primary-muted)' : 'transparent',\n border: 'none',\n cursor: 'pointer',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Rate */}\n {rate !== null && fromToken !== toToken && (\n <p style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.6875rem', margin: '6px 0 0' }}>\n 1 {fromToken} = {truncate(rate, 2)} {toToken}\n </p>\n )}\n\n {/* Insufficient balance warning */}\n {fromAmount && parseFloat(fromAmount) > fromBalanceAmount && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n backgroundColor: 'var(--compass-color-error-muted)',\n color: 'var(--compass-color-error)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '6px 10px',\n gap: '6px',\n fontSize: '0.75rem',\n marginTop: '8px',\n }}\n >\n Insufficient balance\n </div>\n )}\n\n {/* Swap Button */}\n <button\n onClick={handleSwap}\n disabled={!isValid || isBusy}\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n padding: '10px',\n marginTop: '10px',\n fontSize: '0.875rem',\n fontWeight: 600,\n backgroundColor: 'var(--compass-color-primary)',\n color: 'var(--compass-color-primary-text, white)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: 'none',\n cursor: !isValid || isBusy ? 'not-allowed' : 'pointer',\n opacity: !isValid || isBusy ? 0.5 : 1,\n transition: 'all 200ms ease',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n {isBusy ? (\n <>\n <Loader2 size={14} className=\"animate-spin\" />\n {txState.status === 'preparing'\n ? 'Preparing...'\n : txState.status === 'signing'\n ? 'Signing Swap...'\n : 'Broadcasting...'}\n </>\n ) : (\n <>\n <ArrowLeftRight size={14} />\n Swap\n </>\n )}\n </button>\n\n <TxStatus state={txState} />\n </div>\n </ActionModal>\n );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { ChevronDown, Plus, ArrowLeftRight, LogOut } from 'lucide-react';\nimport { CreditAccountGuard, ChainSwitcher } from '../../shared';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useCreditAccount } from '../../contexts/CreditAccountContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport { useCreditPositions, useCreditBalances, useTokenPrices } from './hooks';\nimport { PositionsView } from './PositionsView';\nimport { BorrowModal } from './BorrowModal';\nimport { RepayModal } from './RepayModal';\nimport { SupplyModal } from './SupplyModal';\nimport { WithdrawModal } from './WithdrawModal';\nimport { TopUpModal } from './TopUpModal';\nimport { CreditSwapModal } from './CreditSwapModal';\nimport { CopyableAddress } from '../../shared/CopyableAddress';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport type { CreditAccountProps } from './types';\nimport { type CreditToken } from '../../types/credit';\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\n}\n\nfunction formatUsd(value: string | number | null): string {\n if (value === null) return '$0.00';\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(floorTo(num, 2));\n}\n\nexport function CreditAccount({\n title = 'Credit Account',\n showHeader: _showHeader = true,\n showTopUpButton = true,\n compact = true,\n height = '600px',\n chain: chainProp,\n allowedCollateralTokens,\n allowedDebtTokens,\n onBorrow: _onBorrow,\n onRepay: _onRepay,\n}: CreditAccountProps) {\n const { address, isConnected, login, logout, hasExternalWallet } = useEmbeddableWallet();\n const { isDeployed, creditAccountAddress } = useCreditAccount();\n const { chainId } = useChain();\n const { data: positions, isLoading: positionsLoading } = useCreditPositions();\n const { data: balances } = useCreditBalances();\n const tokenPrices = useTokenPrices();\n // Modal state\n const [showBorrow, setShowBorrow] = useState(false);\n const [borrowInitialToken, setBorrowInitialToken] = useState<CreditToken | undefined>();\n const [showRepay, setShowRepay] = useState(false);\n const [repayInitialToken, setRepayInitialToken] = useState<CreditToken | undefined>();\n const [showSupply, setShowSupply] = useState(false);\n const [supplyInitialToken, setSupplyInitialToken] = useState<CreditToken | undefined>();\n const [showWithdraw, setShowWithdraw] = useState(false);\n const [withdrawInitialToken, setWithdrawInitialToken] = useState<CreditToken | undefined>();\n const [showTopUp, setShowTopUp] = useState(false);\n const [showSwap, setShowSwap] = useState(false);\n const [showBalanceBreakdown, setShowBalanceBreakdown] = useState(false);\n\n const totalCollateral = positions\n ? parseFloat(positions.accountSummary.totalCollateralUsd) || 0\n : 0;\n const totalDebt = positions\n ? parseFloat(positions.accountSummary.totalDebtUsd) || 0\n : 0;\n\n // Compute idle account balances in USD using token prices\n const balancesWithUsd = (balances || [])\n .map((b) => {\n const amount = parseFloat(b.amount);\n const price = tokenPrices[b.tokenSymbol];\n const usdValue = amount > 0 && price != null ? amount * price : 0;\n return { ...b, usdValue };\n })\n .filter((b) => b.usdValue >= 0.01)\n .sort((a, b) => a.tokenSymbol.localeCompare(b.tokenSymbol));\n const totalIdleUsd = balancesWithUsd.reduce((sum, b) => sum + b.usdValue, 0);\n\n // Fetch wallet USDC balance for external wallet deposit tab only\n const { data: walletBalance } = useQuery({\n queryKey: ['embeddedWalletBalance', chainId, address, 'USDC'],\n queryFn: async () => {\n if (!address) return '0';\n try {\n const response = await fetch(\n `/api/compass/token/balance?chain=${chainId}&token=USDC&address=${address}`\n );\n if (response.ok) {\n const data = await response.json();\n return data.balance || '0';\n }\n } catch {\n // Ignore\n }\n return '0';\n },\n enabled: !!address && hasExternalWallet,\n staleTime: 30 * 1000,\n });\n\n // Compute total interest earned/paid across positions (in USD)\n const totalInterestEarnedUsd = (() => {\n if (!positions) return 0;\n let total = 0;\n for (const pos of positions.collateralPositions) {\n const interest = parseFloat(pos.interestEarned ?? '0');\n const price = tokenPrices[pos.symbol] ?? 0;\n if (interest > 0 && price > 0) total += interest * price;\n }\n return total;\n })();\n\n const totalInterestPaidUsd = (() => {\n if (!positions) return 0;\n let total = 0;\n for (const pos of positions.debtPositions) {\n const interest = parseFloat(pos.interestPaid ?? '0');\n const price = tokenPrices[pos.symbol] ?? 0;\n if (interest > 0 && price > 0) total += interest * price;\n }\n return total;\n })();\n\n // Total balance = collateral - debt + idle account balances\n const netPositionUsd = totalCollateral - totalDebt;\n const totalBalance = netPositionUsd + totalIdleUsd;\n\n // Net interest calculation: weighted supply APY earned - weighted borrow APY owed\n // Expressed as USD per year\n const netInterestUsdPerYear = (() => {\n if (!positions) return 0;\n let supplyInterest = 0;\n for (const pos of positions.collateralPositions) {\n const usd = parseFloat(pos.usdValue ?? '0');\n const apy = parseFloat(pos.supplyApy ?? '0') / 100;\n if (usd > 0 && !isNaN(apy)) supplyInterest += usd * apy;\n }\n let borrowInterest = 0;\n for (const pos of positions.debtPositions) {\n const usd = parseFloat(pos.usdValue ?? '0');\n const apy = parseFloat(pos.borrowApy ?? '0') / 100;\n if (usd > 0 && !isNaN(apy)) borrowInterest += usd * apy;\n }\n return supplyInterest - borrowInterest;\n })();\n\n // Net APY as a percentage of total collateral value\n const netApyPercent = (() => {\n if (!positions || totalCollateral === 0) return null;\n return (netInterestUsdPerYear / totalCollateral) * 100;\n })();\n\n const hasPositions = positions\n ? positions.collateralPositions.some((p) => parseFloat(p.usdValue ?? '0') >= 0.01) || positions.debtPositions.length > 0\n : false;\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {!chainProp && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <CreditAccountGuard>\n {/* ========== TOP SECTION: Title + Balance + Net Position ========== */}\n <div\n className=\"flex flex-col items-center text-center\"\n style={{ padding: compact ? '12px 16px 8px' : '16px 20px 12px' }}\n >\n {/* Title + Logout Row */}\n <div className=\"flex items-center justify-between\" style={{ width: '100%', marginBottom: '8px' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n }}\n >\n {title}\n </span>\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setShowBalanceBreakdown(true)}\n aria-label={`Total balance: ${formatUsd(totalBalance)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n {positionsLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '200px', height: compact ? '42px' : '52px', borderRadius: 'var(--compass-border-radius-md)', margin: '0 auto' }} />\n ) : (\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: compact ? '1.75rem' : '2rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatUsd(totalBalance)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n )}\n </button>\n\n {/* Net position callout — green dot + amount, like earn's earned callout */}\n <div\n className=\"flex items-center justify-center\"\n style={{ gap: '6px', marginTop: '6px', minHeight: '24px' }}\n >\n {positionsLoading ? (\n <div className=\"compass-widget-skeleton\" style={{ width: '120px', height: '16px' }} />\n ) : hasPositions ? (\n <>\n <span style={{\n width: '8px',\n height: '8px',\n borderRadius: '50%',\n backgroundColor: netPositionUsd >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n flexShrink: 0,\n }} />\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n fontSize: '0.875rem',\n }}\n >\n Net {formatUsd(netPositionUsd)}\n </span>\n {(totalInterestEarnedUsd - totalInterestPaidUsd) !== 0 && (\n <span\n className=\"font-semibold\"\n style={{\n color: (totalInterestEarnedUsd - totalInterestPaidUsd) >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n fontSize: '0.875rem',\n }}\n >\n · {(totalInterestEarnedUsd - totalInterestPaidUsd) >= 0 ? '+' : ''}{formatUsd(totalInterestEarnedUsd - totalInterestPaidUsd)} interest\n </span>\n )}\n </>\n ) : (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.875rem' }}>\n No active positions\n </span>\n )}\n </div>\n\n {/* Quick Action Buttons — inline pills */}\n {!isConnected ? (\n <button\n onClick={() => login?.()}\n className=\"flex items-center justify-center font-bold w-full\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n marginTop: '8px',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Connect Wallet\n </button>\n ) : isDeployed && (balancesWithUsd.length > 0 || showTopUpButton) ? (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '8px' }}>\n {showTopUpButton && (\n <button\n onClick={() => setShowTopUp(true)}\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balancesWithUsd.length > 0 && (\n <button\n onClick={() => setShowSwap(true)}\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n ) : null}\n </div>\n\n {/* ========== BOTTOM SECTION: Positions + Trust Badges ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '8px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '12px 16px 8px',\n borderTop: '1.5px solid var(--compass-color-border)',\n flex: 1,\n }}\n >\n {/* Positions */}\n {isDeployed && (\n <PositionsView\n allowedCollateralTokens={allowedCollateralTokens}\n allowedDebtTokens={allowedDebtTokens}\n onBorrow={(token) => {\n setBorrowInitialToken(token);\n setShowBorrow(true);\n }}\n onRepay={(token) => {\n setRepayInitialToken(token);\n setShowRepay(true);\n }}\n onSupply={(token) => {\n setSupplyInitialToken(token);\n setShowSupply(true);\n }}\n onWithdraw={(token) => {\n setWithdrawInitialToken(token);\n setShowWithdraw(true);\n }}\n />\n )}\n\n <WidgetFooter />\n </div>\n\n </CreditAccountGuard>\n\n {/* Balance Breakdown Modal */}\n <ActionModal\n isOpen={showBalanceBreakdown}\n onClose={() => setShowBalanceBreakdown(false)}\n title=\"Balance Breakdown\"\n >\n <div className=\"flex flex-col\" style={{ gap: '12px' }}>\n {/* Addresses */}\n {address && creditAccountAddress && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <CopyableAddress address={address} label=\"Wallet\" />\n <CopyableAddress address={creditAccountAddress} label=\"Credit Account\" />\n </div>\n )}\n\n\n {/* Collateral Section */}\n {positions && positions.collateralPositions.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Collateral\n </span>\n {totalInterestEarnedUsd > 0 && (\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-success)' }}\n >\n Interest: +{formatUsd(totalInterestEarnedUsd)}\n </span>\n )}\n </div>\n {[...positions.collateralPositions]\n .filter((p) => parseFloat(p.usdValue ?? '0') >= 0.01)\n .sort((a, b) => a.symbol.localeCompare(b.symbol))\n .map((p) => (\n <div\n key={p.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {p.symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(p.amountSupplied ?? '0'), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(p.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Debt Section */}\n {positions && positions.debtPositions.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\n <span\n className=\"text-xs font-medium uppercase tracking-wide\"\n style={{ color: 'var(--compass-color-text-tertiary)' }}\n >\n Debt\n </span>\n {totalInterestPaidUsd > 0 && (\n <span\n className=\"text-xs font-medium\"\n style={{ color: 'var(--compass-color-error, #ef4444)' }}\n >\n Interest: -{formatUsd(totalInterestPaidUsd)}\n </span>\n )}\n </div>\n {[...positions.debtPositions]\n .filter((p) => parseFloat(p.usdValue ?? '0') >= 0.01)\n .sort((a, b) => a.symbol.localeCompare(b.symbol))\n .map((p) => (\n <div\n key={p.symbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {p.symbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(p.amountBorrowed ?? '0'), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(p.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* Idle Account Balances Section */}\n {balancesWithUsd.length > 0 && (\n <div className=\"flex flex-col\" style={{ gap: '8px' }}>\n <div className=\"flex items-center justify-between\">\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 <span\n className=\"text-sm font-semibold\"\n style={{ color: 'var(--compass-color-text)' }}\n >\n {formatUsd(totalIdleUsd)}\n </span>\n </div>\n {balancesWithUsd.map((b) => (\n <div\n key={b.tokenSymbol}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {b.tokenSymbol}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem', fontFamily: 'monospace' }}>\n {floorTo(parseFloat(b.amount), 2).toLocaleString(undefined, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUsd(b.usdValue.toString())}\n </span>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {/* No data state */}\n {(!positions || (positions.collateralPositions.length === 0 && positions.debtPositions.length === 0 && balancesWithUsd.length === 0)) && (\n <div style={{ textAlign: 'center', padding: '24px 0' }}>\n <p style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.9375rem', margin: '0 0 4px' }}>\n No positions or balances\n </p>\n </div>\n )}\n\n {/* Net Interest */}\n {hasPositions && netApyPercent !== null && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: netInterestUsdPerYear >= 0\n ? 'rgba(34, 197, 94, 0.06)'\n : 'rgba(239, 68, 68, 0.06)',\n border: `1.5px solid ${netInterestUsdPerYear >= 0\n ? 'rgba(34, 197, 94, 0.15)'\n : 'rgba(239, 68, 68, 0.15)'}`,\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n }}\n >\n <span className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Net interest / year\n </span>\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span\n className=\"text-sm font-semibold\"\n style={{\n color: netInterestUsdPerYear >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n }}\n >\n {netInterestUsdPerYear >= 0 ? '+' : ''}{formatUsd(netInterestUsdPerYear)}\n </span>\n <span\n className=\"text-xs font-medium\"\n style={{\n backgroundColor: netApyPercent >= 0\n ? 'rgba(34, 197, 94, 0.1)'\n : 'rgba(239, 68, 68, 0.1)',\n color: netApyPercent >= 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)',\n padding: '2px 6px',\n borderRadius: 'var(--compass-border-radius-sm)',\n }}\n >\n {netApyPercent >= 0 ? '+' : ''}{floorTo(netApyPercent, 2).toFixed(2)}%\n </span>\n </div>\n </div>\n )}\n\n {/* Total */}\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>\n Total\n </span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatUsd(totalBalance)}\n </span>\n </div>\n </div>\n </ActionModal>\n\n {/* Modals */}\n <BorrowModal\n isOpen={showBorrow}\n onClose={() => { setShowBorrow(false); setBorrowInitialToken(undefined); }}\n initialToken={borrowInitialToken}\n allowedTokens={allowedDebtTokens}\n />\n <RepayModal\n isOpen={showRepay}\n onClose={() => { setShowRepay(false); setRepayInitialToken(undefined); }}\n initialToken={repayInitialToken}\n allowedTokens={allowedDebtTokens}\n />\n <SupplyModal\n isOpen={showSupply}\n onClose={() => { setShowSupply(false); setSupplyInitialToken(undefined); }}\n initialToken={supplyInitialToken}\n allowedTokens={allowedCollateralTokens}\n />\n <WithdrawModal\n isOpen={showWithdraw}\n onClose={() => { setShowWithdraw(false); setWithdrawInitialToken(undefined); }}\n initialToken={withdrawInitialToken}\n allowedTokens={allowedCollateralTokens}\n />\n {showTopUp && (\n <TopUpModal\n isOpen={showTopUp}\n onClose={() => setShowTopUp(false)}\n />\n )}\n <CreditSwapModal\n isOpen={showSwap}\n onClose={() => setShowSwap(false)}\n />\n\n </div>{/* end scrollable content area */}\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.blockTimestamp || d.block_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.blockTimestamp || w.block_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.blockTimestamp || d.block_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.blockTimestamp || w.block_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.blockTimestamp || d.block_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.blockTimestamp || w.block_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, useRef, useCallback } 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 const modalRef = useRef<HTMLDivElement>(null);\n\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 const handleOverlayWheel = useCallback((e: React.WheelEvent) => {\n if (modalRef.current && !modalRef.current.contains(e.target as Node)) {\n window.scrollBy(0, e.deltaY);\n }\n }, []);\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 onWheel={handleOverlayWheel}\n onClick={onClose}\n >\n {/* Backdrop */}\n <div\n className=\"absolute inset-0\"\n style={{ backgroundColor: 'rgba(0, 0, 0, 0.7)' }}\n />\n <div\n ref={modalRef}\n className=\"relative w-full max-w-md rounded-xl border max-h-[85vh] overflow-y-auto\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderColor: 'var(--compass-color-border)',\n scrollbarWidth: 'none',\n overscrollBehavior: 'contain',\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","'use client';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useChain } from '../../contexts/ChainContext';\nimport type { PortfolioState, PortfolioPosition, IdleBalance, VenueType } from './types';\nimport type { MarketOption as EarnMarketOption } from '../EarnAccount/types';\n\nexport interface MarketOption {\n venueType: VenueType;\n venueAddress: string;\n venueName: string;\n token: string;\n apy: number;\n}\n\n// Helper to parse Pendle expiry timestamp (handles both seconds and milliseconds)\nfunction 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 const ms = timestamp < 32503680000 ? timestamp * 1000 : timestamp;\n const date = new Date(ms);\n if (date.getFullYear() < 2000) return undefined;\n return date.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });\n}\n\nexport function useRebalancingData(chainOverride?: string) {\n const { address } = useEmbeddableWallet();\n const { chainId: contextChainId } = useChain();\n const chainId = chainOverride || contextChainId;\n\n // Fetch current positions across all protocols\n const positionsQuery = useQuery({\n queryKey: ['rebalancing', 'portfolio', chainId, address],\n queryFn: async (): Promise<PortfolioPosition[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({ chain: chainId, owner: address });\n const response = await fetch(`/api/compass/positions?${params}`);\n if (!response.ok) throw new Error('Failed to fetch positions');\n\n const data = await response.json();\n const positions: PortfolioPosition[] = [];\n\n for (const p of (data as any).positions || []) {\n const usdValue = parseFloat(p.balanceUsd || p.balance || '0');\n if (usdValue <= 0) continue;\n\n let venueType: VenueType;\n let venueAddress = '';\n\n if (p.protocol === 'vaults') {\n venueType = 'vault';\n venueAddress = p.vaultAddress || '';\n } else if (p.protocol === 'aave') {\n venueType = 'aave';\n venueAddress = p.symbol || '';\n } else if (p.protocol === 'pendle') {\n venueType = 'pendle_pt';\n venueAddress = p.marketAddress || '';\n } else {\n continue;\n }\n\n positions.push({\n id: `${p.protocol}-${venueAddress}`,\n venueType,\n venueName: p.name || `${p.symbol} on ${p.protocol}`,\n venueAddress,\n token: p.symbol || 'UNKNOWN',\n balance: parseFloat(p.balance || '0'),\n usdValue,\n apy: p.apy || 0,\n allocationPercent: 0, // computed below\n });\n }\n\n return positions;\n },\n enabled: !!address,\n staleTime: 30_000,\n });\n\n // Fetch idle balances in earn account\n const balancesQuery = useQuery({\n queryKey: ['rebalancing', 'balances', chainId, address],\n queryFn: async (): Promise<IdleBalance[]> => {\n if (!address) return [];\n\n const params = new URLSearchParams({ chain: chainId, owner: address });\n const response = await fetch(`/api/compass/earn-account/balances?${params}`);\n if (!response.ok) throw new Error('Failed to fetch balances');\n\n const data = await response.json();\n const balances: IdleBalance[] = [];\n\n for (const [symbol, tokenData] of Object.entries((data as any).balances || {})) {\n const td = tokenData as any;\n const usdValue = parseFloat(td.usdValue || '0');\n if (usdValue <= 0) continue;\n\n balances.push({\n token: symbol,\n balance: parseFloat(td.balance || '0'),\n usdValue,\n });\n }\n\n return balances;\n },\n enabled: !!address,\n staleTime: 30_000,\n });\n\n // Fetch available venues (markets) across all protocols\n // Returns both rebalancing MarketOption[] and EarnAccount-format MarketOption[]\n const venuesQuery = useQuery({\n queryKey: ['rebalancing', 'venues', chainId],\n queryFn: async (): Promise<{ venues: MarketOption[]; earnMarkets: EarnMarketOption[] }> => {\n const [vaultsRes, aaveRes, pendleRes] = await Promise.all([\n fetch(`/api/compass/vaults?chain=${chainId}&orderBy=apy_7d&direction=desc&limit=200`),\n fetch(`/api/compass/aave/markets?chain=${chainId}`),\n fetch(`/api/compass/pendle/markets?chain=${chainId}&orderBy=implied_apy&direction=desc&limit=200`),\n ]);\n\n const venues: MarketOption[] = [];\n const earnMarkets: EarnMarketOption[] = [];\n\n // Vaults: response.vaults is an array\n if (vaultsRes.ok) {\n const data = await vaultsRes.json();\n const vaultsList = (data as any).vaults || [];\n for (const v of vaultsList) {\n const vaultAddress = v.vaultAddress || v.address || '';\n const name = v.name || `${v.curatorName || 'Morpho'} ${v.assetSymbol || 'Vault'}`;\n const token = (v.assetSymbol || 'UNKNOWN').toUpperCase();\n const apy = parseFloat(v.apy7d || v.apy || '0');\n\n venues.push({\n venueType: 'vault',\n venueAddress: vaultAddress,\n venueName: name,\n token,\n apy,\n });\n\n earnMarkets.push({\n id: `vault-${vaultAddress}`,\n name,\n apy,\n tvl: parseFloat(v.tvlUsd || v.tvl || '0'),\n type: 'vaults',\n underlyingToken: token,\n curator: v.curatorName || v.curator,\n vaultAddress,\n });\n }\n }\n\n // Aave: response.markets is a dict { SYMBOL: { chains: { <chainId>: { supplyApy } } } }\n if (aaveRes.ok) {\n const data = await aaveRes.json();\n const marketsDict = (data as any).markets || {};\n for (const [symbol, marketData] of Object.entries(marketsDict)) {\n const chainData = (marketData as any).chains?.[chainId];\n if (chainData) {\n const upperSymbol = symbol.toUpperCase();\n const apy = parseFloat(chainData.supplyApy || '0');\n\n venues.push({\n venueType: 'aave',\n venueAddress: upperSymbol,\n venueName: `${upperSymbol} on Aave`,\n token: upperSymbol,\n apy,\n });\n\n earnMarkets.push({\n id: `aave-${symbol.toLowerCase()}`,\n name: upperSymbol,\n apy,\n tvl: parseFloat(chainData.totalSupplyUsd || '0'),\n type: 'aave',\n underlyingToken: upperSymbol,\n });\n }\n }\n }\n\n // Pendle: response.markets is an array\n if (pendleRes.ok) {\n const data = await pendleRes.json();\n const marketsList = (data as any).markets || [];\n for (const m of marketsList) {\n const symbol = (m.underlyingSymbol || 'PT').toUpperCase();\n const marketAddress = m.marketAddress || m.address || '';\n const expiryStr = parseExpiry(m.expiry);\n const name = m.name || `PT-${symbol}${expiryStr ? ` ${expiryStr}` : ''}`;\n const apy = parseFloat(m.impliedApy || m.apy || '0');\n\n venues.push({\n venueType: 'pendle_pt',\n venueAddress: marketAddress,\n venueName: name,\n token: symbol,\n apy,\n });\n\n earnMarkets.push({\n id: `pendle-${marketAddress}`,\n name,\n apy,\n tvl: parseFloat(m.tvlUsd || m.tvl || '0'),\n type: 'pendle',\n underlyingToken: symbol,\n expiry: expiryStr,\n marketAddress,\n });\n }\n }\n\n return { venues, earnMarkets };\n },\n staleTime: 60_000,\n });\n\n // Compute unified portfolio state\n const positions = positionsQuery.data || [];\n const idleBalances = balancesQuery.data || [];\n\n const totalPositionUsd = positions.reduce((sum, p) => sum + p.usdValue, 0);\n const totalIdleUsd = idleBalances.reduce((sum, b) => sum + b.usdValue, 0);\n const totalUsd = totalPositionUsd + totalIdleUsd;\n\n // Compute allocation percentages\n const positionsWithAllocation: PortfolioPosition[] = positions.map(p => ({\n ...p,\n allocationPercent: totalUsd > 0 ? (p.usdValue / totalUsd) * 100 : 0,\n }));\n\n const portfolio: PortfolioState | null = address ? {\n positions: positionsWithAllocation,\n idleBalances,\n totalUsd,\n totalIdleUsd,\n } : null;\n\n return {\n portfolio,\n availableVenues: venuesQuery.data?.venues || [],\n earnAccountMarkets: venuesQuery.data?.earnMarkets || [],\n isMarketsLoading: venuesQuery.isLoading,\n isLoading: positionsQuery.isLoading || balancesQuery.isLoading || venuesQuery.isLoading,\n isError: positionsQuery.isError || balancesQuery.isError || venuesQuery.isError,\n error: positionsQuery.error || balancesQuery.error || venuesQuery.error,\n refetch: () => {\n positionsQuery.refetch();\n balancesQuery.refetch();\n venuesQuery.refetch();\n },\n };\n}\n","import type {\n PortfolioState,\n TargetAllocation,\n RebalancePlan,\n RebalanceAction,\n VenueType,\n} from './types';\n\ninterface RebalanceOptions {\n slippagePercent: number;\n minThresholdUsd: number;\n}\n\nconst DEFAULT_OPTIONS: RebalanceOptions = {\n slippagePercent: 0.5,\n minThresholdUsd: 0.01,\n};\n\ninterface Delta {\n venueType: VenueType;\n venueAddress: string;\n venueName: string;\n token: string;\n currentUsd: number;\n targetUsd: number;\n deltaUsd: number;\n}\n\nexport function computeRebalancePlan(\n portfolio: PortfolioState,\n targets: TargetAllocation[],\n options: Partial<RebalanceOptions> = {}\n): RebalancePlan {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const warnings: string[] = [];\n const actions: RebalanceAction[] = [];\n\n const totalUsd = portfolio.totalUsd;\n if (totalUsd <= 0) {\n return { actions: [], totalActions: 0, estimatedGasSavings: '$0', warnings: ['No portfolio value to rebalance'] };\n }\n\n // Step 1: Compute deltas\n const deltas: Delta[] = [];\n\n for (const target of targets) {\n const targetUsd = totalUsd * (target.targetPercent / 100);\n const position = portfolio.positions.find(\n p => p.venueType === target.venueType && p.venueAddress.toLowerCase() === target.venueAddress.toLowerCase()\n );\n const currentUsd = position?.usdValue || 0;\n const deltaUsd = targetUsd - currentUsd;\n\n if (Math.abs(deltaUsd) < opts.minThresholdUsd) continue;\n\n deltas.push({\n venueType: target.venueType,\n venueAddress: target.venueAddress,\n venueName: target.venueName,\n token: target.token,\n currentUsd,\n targetUsd,\n deltaUsd,\n });\n }\n\n // Check for positions not in targets (implicit 0% target → full withdrawal)\n for (const position of portfolio.positions) {\n const hasTarget = targets.some(\n t => t.venueType === position.venueType && t.venueAddress.toLowerCase() === position.venueAddress.toLowerCase()\n );\n if (!hasTarget && position.usdValue >= opts.minThresholdUsd) {\n deltas.push({\n venueType: position.venueType,\n venueAddress: position.venueAddress,\n venueName: position.venueName,\n token: position.token,\n currentUsd: position.usdValue,\n targetUsd: 0,\n deltaUsd: -position.usdValue,\n });\n }\n }\n\n // Step 2: Categorize\n const overAllocated = deltas.filter(d => d.deltaUsd < 0);\n const underAllocated = deltas.filter(d => d.deltaUsd > 0);\n\n // Step 3: Generate withdrawals\n for (const delta of overAllocated) {\n const withdrawUsd = Math.abs(delta.deltaUsd);\n const withdrawAmount = delta.currentUsd > 0\n ? (withdrawUsd / delta.currentUsd) * (portfolio.positions.find(\n p => p.venueType === delta.venueType && p.venueAddress.toLowerCase() === delta.venueAddress.toLowerCase()\n )?.balance || 0)\n : 0;\n\n actions.push({\n type: 'withdraw',\n venueType: delta.venueType,\n venueAddress: delta.venueAddress,\n token: delta.token,\n amount: withdrawAmount,\n usdValue: withdrawUsd,\n });\n\n if (delta.venueType === 'pendle_pt') {\n warnings.push(`Withdrawing from Pendle PT position (${delta.venueName}) - check maturity date before proceeding`);\n }\n }\n\n // Step 4: Generate swaps (if tokens differ between withdraw and deposit)\n // Group by token pair to minimize swap calls\n const withdrawnTokenAmounts: Record<string, number> = {};\n for (const action of actions) {\n if (action.type === 'withdraw') {\n const key = action.token.toUpperCase();\n withdrawnTokenAmounts[key] = (withdrawnTokenAmounts[key] || 0) + action.usdValue;\n }\n }\n\n // Include idle balances as available capital\n for (const idle of portfolio.idleBalances) {\n const key = idle.token.toUpperCase();\n withdrawnTokenAmounts[key] = (withdrawnTokenAmounts[key] || 0) + idle.usdValue;\n }\n\n const depositTokenNeeds: Record<string, number> = {};\n for (const delta of underAllocated) {\n const key = delta.token.toUpperCase();\n depositTokenNeeds[key] = (depositTokenNeeds[key] || 0) + delta.deltaUsd;\n }\n\n // Determine what swaps are needed\n for (const [depositToken, neededUsd] of Object.entries(depositTokenNeeds)) {\n const availableUsd = withdrawnTokenAmounts[depositToken] || 0;\n const shortfallUsd = neededUsd - availableUsd;\n\n if (shortfallUsd > opts.minThresholdUsd) {\n // Need to swap from other tokens\n // Find tokens with excess\n for (const [withdrawToken, excessUsd] of Object.entries(withdrawnTokenAmounts)) {\n if (withdrawToken === depositToken) continue;\n if (excessUsd <= opts.minThresholdUsd) continue;\n\n const swapUsd = Math.min(shortfallUsd, excessUsd);\n if (swapUsd < opts.minThresholdUsd) continue;\n\n const slippageFactor = 1 - (opts.slippagePercent / 100);\n\n actions.push({\n type: 'swap',\n token: withdrawToken,\n amount: swapUsd, // USD-denominated for now\n usdValue: swapUsd,\n tokenOut: depositToken,\n estimatedAmountOut: swapUsd * slippageFactor, // Approximate\n });\n\n withdrawnTokenAmounts[withdrawToken] -= swapUsd;\n withdrawnTokenAmounts[depositToken] = (withdrawnTokenAmounts[depositToken] || 0) + (swapUsd * slippageFactor);\n\n warnings.push(`Swap ${withdrawToken} to ${depositToken} involves slippage risk`);\n break; // Simplified: one swap per needed token\n }\n }\n }\n\n // Step 5: Generate deposits\n for (const delta of underAllocated) {\n const depositUsd = delta.deltaUsd;\n // Estimate deposit amount based on available price data\n const depositAmount = depositUsd; // USD-denominated\n\n actions.push({\n type: 'deposit',\n venueType: delta.venueType,\n venueAddress: delta.venueAddress,\n token: delta.token,\n amount: depositAmount,\n usdValue: depositUsd,\n });\n }\n\n // Step 6: Generate additional warnings\n const totalRebalanceUsd = actions\n .filter(a => a.type === 'withdraw' || a.type === 'deposit')\n .reduce((sum, a) => sum + a.usdValue, 0);\n\n if (totalRebalanceUsd > totalUsd * 0.5) {\n warnings.push('This rebalance involves more than 50% of your portfolio');\n }\n\n if (actions.some(a => a.type === 'swap')) {\n warnings.push('Swap amounts are estimates - actual amounts may vary due to slippage');\n }\n\n // Sort actions: withdrawals first, then swaps, then deposits\n const sortOrder: Record<string, number> = { withdraw: 0, swap: 1, deposit: 2 };\n actions.sort((a, b) => sortOrder[a.type] - sortOrder[b.type]);\n\n // Estimate gas savings (rough: ~$2 per avoided transaction)\n const individualTxCount = actions.length;\n const bundleTxCount = 1;\n const savedTxs = Math.max(0, individualTxCount - bundleTxCount);\n const estimatedGasSavings = `~$${(savedTxs * 2).toFixed(0)}`;\n\n return {\n actions,\n totalActions: actions.length,\n estimatedGasSavings,\n warnings,\n };\n}\n","import type { VenueType } from './types';\n\nexport const VENUE_COLORS: Record<VenueType, string> = {\n vault: 'var(--compass-color-primary)',\n aave: '#9333ea',\n pendle_pt: '#22c55e',\n};\n\nexport const VENUE_LABELS: Record<VenueType, string> = {\n vault: 'Vault',\n aave: 'Aave',\n pendle_pt: 'Pendle PT',\n};\n","'use client';\n\nimport { useState } from 'react';\nimport { RotateCcw, Equal, X } from 'lucide-react';\nimport { VENUE_COLORS, VENUE_LABELS } from './constants';\nimport { formatUSD } from '../../utils/format';\nimport type { PortfolioState, TargetAllocation } from './types';\n\nexport interface AllocationEditorProps {\n portfolio: PortfolioState;\n targets: TargetAllocation[];\n targetSum: number;\n hasChanges: boolean;\n highlightedVenueAddress?: string;\n onUpdatePercent: (index: number, value: number) => void;\n onRemoveVenue: (index: number) => void;\n onResetToCurrent: () => void;\n onEqualSplit: () => void;\n}\n\nfunction formatPercent(value: number): string {\n if (value === 0) return '0%';\n if (Number.isInteger(value)) return `${value}%`;\n // Trim trailing zeros but keep at least one decimal\n const str = value.toFixed(2).replace(/0+$/, '').replace(/\\.$/, '');\n return `${str}%`;\n}\n\nfunction PercentInput({ value, onChange }: { value: number; onChange: (val: number) => void }) {\n const [localValue, setLocalValue] = useState(value.toString());\n const [isFocused, setIsFocused] = useState(false);\n\n // Sync from parent when not focused\n const roundedStr = parseFloat(value.toFixed(2)).toString();\n if (!isFocused && localValue !== roundedStr) {\n // Only update if the parsed values differ (avoid overwriting user-typed strings)\n const parsed = parseFloat(localValue);\n if (isNaN(parsed) || Math.abs(parsed - value) > 0.001) {\n setLocalValue(roundedStr);\n }\n }\n\n return (\n <input\n type=\"text\"\n inputMode=\"decimal\"\n value={isFocused ? localValue : formatPercent(value).replace('%', '')}\n onFocus={() => {\n setIsFocused(true);\n setLocalValue(parseFloat(value.toFixed(2)).toString());\n }}\n onChange={(e) => {\n const raw = e.target.value;\n setLocalValue(raw);\n const parsed = parseFloat(raw);\n if (!isNaN(parsed)) {\n onChange(Math.max(0, Math.min(100, parsed)));\n }\n }}\n onBlur={() => {\n setIsFocused(false);\n const parsed = parseFloat(localValue);\n if (!isNaN(parsed)) {\n onChange(Math.max(0, Math.min(100, parsed)));\n }\n }}\n className=\"w-16 text-center text-xs font-mono rounded bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n border: '1px solid var(--compass-color-border)',\n padding: '2px 0',\n }}\n />\n );\n}\n\nexport function AllocationEditor({\n portfolio,\n targets,\n targetSum,\n hasChanges,\n highlightedVenueAddress,\n onUpdatePercent,\n onRemoveVenue,\n onResetToCurrent,\n onEqualSplit,\n}: AllocationEditorProps) {\n return (\n <div>\n {/* Toolbar: action buttons */}\n <div className=\"flex items-center justify-end mb-2\" style={{ gap: 'calc(var(--compass-spacing-unit) * 0.5)' }}>\n <button\n onClick={onResetToCurrent}\n className=\"text-xs px-2 py-1 rounded-md transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n }}\n title=\"Reset to current\"\n >\n <RotateCcw size={12} className=\"inline mr-1\" />\n Reset\n </button>\n {targets.length > 1 && (\n <button\n onClick={onEqualSplit}\n className=\"text-xs px-2 py-1 rounded-md transition-colors\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n }}\n title=\"Split equally\"\n >\n <Equal size={12} className=\"inline mr-1\" />\n Equal\n </button>\n )}\n </div>\n\n {/* Position rows with inline target editing */}\n <div\n className=\"flex flex-col\"\n style={{ gap: '6px' }}\n >\n {targets.map((target, index) => {\n const currentPos = portfolio.positions.find(\n p => p.venueType === target.venueType && p.venueAddress === target.venueAddress\n );\n const currentPercent = currentPos?.allocationPercent ?? 0;\n const diff = target.targetPercent - currentPercent;\n const hasDiff = Math.abs(diff) > 0.1;\n const isHighlighted = highlightedVenueAddress === target.venueAddress;\n\n return (\n <div\n key={`${target.venueType}-${target.venueAddress}`}\n className=\"p-2.5 rounded-lg\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderLeft: isHighlighted ? '3px solid var(--compass-color-primary)' : '3px solid transparent',\n }}\n >\n {/* Row 1: venue info + remove */}\n <div className=\"flex items-center gap-2 mb-1.5\">\n <div\n className=\"w-1.5 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: VENUE_COLORS[target.venueType],\n alignSelf: 'stretch',\n }}\n />\n <div className=\"flex-1 min-w-0\">\n <span className=\"text-xs font-medium truncate block\" style={{ color: 'var(--compass-color-text)' }}>\n {target.venueName}\n </span>\n <div className=\"flex items-center gap-1.5\">\n <span\n className=\"text-xs px-1 py-0.5 rounded\"\n style={{\n backgroundColor: VENUE_COLORS[target.venueType] + '20',\n color: VENUE_COLORS[target.venueType],\n fontSize: '10px',\n }}\n >\n {VENUE_LABELS[target.venueType]}\n </span>\n {currentPos && (\n <>\n <span className=\"text-xs font-mono\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '10px' }}>\n {formatUSD(currentPos.usdValue)}\n </span>\n <span style={{ color: 'var(--compass-color-success)', fontSize: '10px' }}>\n {currentPos.apy.toFixed(2)}%\n </span>\n </>\n )}\n {!currentPos && (\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '10px' }}>New</span>\n )}\n </div>\n </div>\n <button\n onClick={() => onRemoveVenue(index)}\n className=\"w-5 h-5 flex items-center justify-center rounded flex-shrink-0 opacity-40 hover:opacity-100 transition-opacity\"\n style={{ color: 'var(--compass-color-text-secondary)' }}\n >\n <X size={11} />\n </button>\n </div>\n\n {/* Row 2: allocation bar + controls */}\n <div className=\"flex items-center gap-2\">\n <div\n className=\"flex-1 h-1.5 rounded-full overflow-hidden\"\n style={{ backgroundColor: 'var(--compass-color-border)' }}\n >\n <div\n className=\"h-full rounded-full transition-all\"\n style={{\n width: `${Math.min(target.targetPercent, 100)}%`,\n backgroundColor: VENUE_COLORS[target.venueType],\n opacity: hasDiff ? 0.85 : 1,\n }}\n />\n </div>\n\n <div className=\"flex items-center gap-0.5 flex-shrink-0\">\n <PercentInput\n value={target.targetPercent}\n onChange={(val) => onUpdatePercent(index, val)}\n />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-tertiary)', width: '12px' }}>%</span>\n </div>\n </div>\n\n {/* Change indicator */}\n {hasDiff && (\n <div className=\"flex justify-end mt-0.5\">\n <span\n className=\"text-xs font-mono\"\n style={{ color: diff > 0 ? 'var(--compass-color-success)' : 'var(--compass-color-error)', fontSize: '10px' }}\n >\n {formatPercent(currentPercent)} → {formatPercent(target.targetPercent)}\n </span>\n </div>\n )}\n </div>\n );\n })}\n\n {/* Idle balances (read-only info) */}\n {portfolio.totalIdleUsd > 0 && (\n <div\n className=\"p-2.5 rounded-lg\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-1.5 rounded-full flex-shrink-0\"\n style={{\n backgroundColor: 'var(--compass-color-text-tertiary)',\n alignSelf: 'stretch',\n minHeight: '20px',\n }}\n />\n <span className=\"text-xs\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n Idle (undeployed)\n </span>\n <span className=\"text-xs font-mono ml-auto\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatUSD(portfolio.totalIdleUsd)}\n </span>\n </div>\n </div>\n )}\n </div>\n\n {/* Footer: total allocation */}\n <div className=\"flex items-center justify-end mt-2\">\n <span\n className=\"text-xs font-mono font-medium\"\n style={{\n color: 'var(--compass-color-text-secondary)',\n }}\n >\n {formatPercent(targetSum)} allocated\n </span>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport { useState, useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Loader2, AlertTriangle, ChevronDown, ChevronRight, ArrowRight, Shield, CheckCircle, Plus, LogOut, ArrowLeftRight, ExternalLink } from 'lucide-react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { useRebalancingData } from './useRebalancingData';\nimport { computeRebalancePlan } from './rebalancingEngine';\nimport { AllocationEditor } from './AllocationEditor';\nimport { MarketSelector } from '../EarnAccount/MarketSelector';\n\nimport { useChain } from '../../contexts/ChainContext';\nimport { useEmbeddableWallet } from '../../contexts/WalletContext';\nimport { useEarnAccount } from '../../contexts/EarnAccountContext';\nimport { EarnAccountGuard } from '../../shared/EarnAccountGuard';\nimport { ChainSwitcher } from '../../shared/ChainSwitcher';\nimport { WalletStatus } from '../../shared/WalletStatus';\nimport { EarnAccountBalance } from '../../shared/EarnAccountBalance';\nimport { ActionModal } from '../../shared/ActionModal';\nimport { CopyableAddress } from '../../shared/CopyableAddress';\nimport { SwapForm } from '../../shared/SwapForm';\nimport { BuyForm } from '../../shared/BuyForm';\nimport { TxStatus } from '../../shared/TxStatus';\nimport { useTxPolling } from '../../shared/useTxPolling';\nimport type { EarnAccountBalanceHandle } from '../../shared/EarnAccountBalance';\nimport { WidgetFooter } from '../../shared/WidgetFooter';\nimport { formatUSD } from '../../utils/format';\nimport type { TxState } from '../../types/credit';\nimport type {\n MarketOption as EarnMarketOption,\n UIMarketTab,\n} from '../EarnAccount/types';\nimport type {\n RebalancingWidgetProps,\n TargetAllocation,\n RebalancePlan,\n RebalanceAction,\n} 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\nconst BLOCK_EXPLORERS: Record<string, string> = {\n ethereum: 'https://etherscan.io',\n base: 'https://basescan.org',\n arbitrum: 'https://arbiscan.io',\n};\n\nfunction floorTo(value: number, decimals: number): number {\n const factor = Math.pow(10, decimals);\n return Math.floor(value * factor) / factor;\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 floorTo(num, 2).toFixed(2);\n}\n\ntype WidgetState =\n | 'loading'\n | 'empty'\n | 'editing'\n | 'previewing'\n | 'ready'\n | 'signing'\n | 'executing'\n | 'success'\n | 'error';\n\nexport function RebalancingWidget({\n showChainSwitcher = true,\n showWalletStatus = true,\n minRebalanceThresholdUsd = 0.01,\n defaultSlippage = 0.5,\n chain,\n onRebalance,\n onError,\n title = 'Portfolio Manager',\n venues,\n showTopUp = true,\n height = '600px',\n}: RebalancingWidgetProps) {\n const { chainId: contextChainId, setChainId } = useChain();\n const CHAIN_ID = chain || contextChainId;\n const { address, signTypedData, isConnected, login, logout, switchChain, walletChainId, fundWallet, hasExternalWallet } = useEmbeddableWallet();\n const { earnAccountAddress } = useEarnAccount();\n const queryClient = useQueryClient();\n const { portfolio, earnAccountMarkets, isMarketsLoading, isLoading, isError, error, refetch } = useRebalancingData(chain);\n\n // Convert venues prop into allowed market IDs for MarketSelector\n const allowedVariableMarketIds = useMemo(() => {\n if (!venues) return undefined;\n if (!venues.aave && !venues.vaults) return undefined;\n const ids: string[] = [];\n if (venues.aave) {\n for (const symbol of venues.aave) ids.push(`aave-${symbol.toLowerCase()}`);\n }\n if (venues.vaults) {\n for (const addr of venues.vaults) ids.push(`vault-${addr}`);\n }\n return ids;\n }, [venues]);\n\n const allowedFixedMarketIds = useMemo(() => {\n if (!venues) return undefined;\n if (!venues.pendle) return undefined;\n const ids: string[] = [];\n for (const addr of venues.pendle) ids.push(`pendle-${addr}`);\n return ids;\n }, [venues]);\n\n // Sync chain prop into context so shared components use the correct chain\n useEffect(() => {\n if (chain && chain !== contextChainId) {\n setChainId(chain as any);\n }\n }, [chain, contextChainId, setChainId]);\n\n const [targets, setTargets] = useState<TargetAllocation[]>([]);\n const [previewPlan, setPreviewPlan] = useState<RebalancePlan | null>(null);\n const [serverPreview, setServerPreview] = useState<any>(null);\n const [widgetState, setWidgetState] = useState<WidgetState>('editing');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [txHash, setTxHash] = useState<string | null>(null);\n const [txConfirmed, setTxConfirmed] = useState(false);\n const [hasInitializedTargets, setHasInitializedTargets] = useState(false);\n // Tracks the allocation % each position had when targets were initialized (or reset).\n // Sent to the server so it can distinguish user-intended changes from data drift.\n const [originalAllocations, setOriginalAllocations] = useState<Record<string, number>>({});\n\n const [isSwapModalOpen, setIsSwapModalOpen] = useState(false);\n const [isBalancesModalOpen, setIsBalancesModalOpen] = useState(false);\n const [isAddMarketExpanded, setIsAddMarketExpanded] = useState(false);\n\n // Derive available tokens from idle balances (replaces hardcoded SUPPORTED_TOKENS)\n const balanceTokens = useMemo(() => {\n if (!portfolio?.idleBalances) return [];\n return portfolio.idleBalances.map(b => b.token);\n }, [portfolio?.idleBalances]);\n\n // Deposit form state\n const [marketTab, setMarketTab] = useState<UIMarketTab>('variable');\n const [selectedMarket, setSelectedMarket] = useState<EarnMarketOption | null>(null);\n const [selectedToken, setSelectedToken] = useState('USDC');\n const [depositAmount, setDepositAmount] = useState('');\n const [isTokenDropdownOpen, setIsTokenDropdownOpen] = useState(false);\n const [depositTxState, setDepositTxState] = useState<TxState>({ status: 'idle' });\n const earnBalanceRef = useRef<EarnAccountBalanceHandle>(null);\n\n const { startPolling: startDepositPolling, clearPolling: clearDepositPolling } = useTxPolling({\n queryKeysToInvalidate: [['earnAccountBalances'], ['rebalancing']],\n });\n\n // Reset state when chain changes\n useEffect(() => {\n setTargets([]);\n setOriginalAllocations({});\n setPreviewPlan(null);\n setServerPreview(null);\n setWidgetState('editing');\n setErrorMessage(null);\n setTxHash(null);\n setTxConfirmed(false);\n setHasInitializedTargets(false);\n setIsAddMarketExpanded(false);\n setIsSwapModalOpen(false);\n setSelectedMarket(null);\n setDepositAmount('');\n setDepositTxState({ status: 'idle' });\n clearDepositPolling();\n }, [CHAIN_ID, clearDepositPolling]);\n\n // Auto-initialize targets from current positions once ALL data has loaded\n // (positions + idle balances) to avoid allocationPercent drift\n useEffect(() => {\n if (portfolio && portfolio.positions.length > 0 && !hasInitializedTargets && !isLoading) {\n const origAllocs: Record<string, number> = {};\n setTargets(\n portfolio.positions.map(p => {\n const pct = parseFloat(p.allocationPercent.toFixed(2));\n origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;\n return {\n venueType: p.venueType,\n venueAddress: p.venueAddress,\n venueName: p.venueName,\n token: p.token,\n targetPercent: pct,\n };\n })\n );\n setOriginalAllocations(origAllocs);\n setHasInitializedTargets(true);\n }\n }, [portfolio, hasInitializedTargets, isLoading]);\n\n // Compute current state\n const state: WidgetState = useMemo(() => {\n if (isLoading) return 'loading';\n if (!portfolio || portfolio.positions.length === 0) return 'empty';\n return widgetState;\n }, [isLoading, portfolio, widgetState]);\n\n // Check if targets have changed from current allocation\n const targetSum = useMemo(() => targets.reduce((s, t) => s + t.targetPercent, 0), [targets]);\n const hasChanges = useMemo(() => {\n if (!portfolio || targets.length === 0) return false;\n const hasDiff = targets.some(t => {\n const pos = portfolio.positions.find(\n p => p.venueType === t.venueType && p.venueAddress === t.venueAddress\n );\n return Math.abs(t.targetPercent - (pos?.allocationPercent ?? 0)) > 0.1;\n });\n const hasRemovedPositions = portfolio.positions.some(\n p => p.usdValue > 1 && !targets.some(t => t.venueType === p.venueType && t.venueAddress === p.venueAddress)\n );\n return hasDiff || hasRemovedPositions;\n }, [portfolio, targets]);\n\n // Compute client-side preview instantly as targets change\n const clientPreview = useMemo(() => {\n if (!portfolio || !hasChanges) return null;\n return computeRebalancePlan(portfolio, targets, {\n slippagePercent: defaultSlippage,\n minThresholdUsd: minRebalanceThresholdUsd,\n });\n }, [portfolio, targets, hasChanges, defaultSlippage, minRebalanceThresholdUsd]);\n\n // Reset to current allocation\n const handleResetToCurrent = useCallback(() => {\n if (!portfolio) return;\n const origAllocs: Record<string, number> = {};\n setTargets(\n portfolio.positions.map(p => {\n const pct = parseFloat(p.allocationPercent.toFixed(2));\n origAllocs[`${p.venueType}-${p.venueAddress.toLowerCase()}`] = pct;\n return {\n venueType: p.venueType,\n venueAddress: p.venueAddress,\n venueName: p.venueName,\n token: p.token,\n targetPercent: pct,\n };\n })\n );\n setOriginalAllocations(origAllocs);\n setPreviewPlan(null);\n setServerPreview(null);\n setWidgetState('editing');\n }, [portfolio]);\n\n // Equal split\n const handleEqualSplit = useCallback(() => {\n if (targets.length === 0) return;\n const equalPercent = 100 / targets.length;\n setTargets(prev => prev.map(t => ({ ...t, targetPercent: parseFloat(equalPercent.toFixed(2)) })));\n }, [targets.length]);\n\n // Remove venue\n const handleRemoveVenue = useCallback((index: number) => {\n setTargets(prev => prev.filter((_, i) => i !== index));\n }, []);\n\n // Update target percent\n const handleUpdatePercent = useCallback((index: number, value: number) => {\n const rounded = parseFloat(Math.max(0, Math.min(100, value)).toFixed(2));\n setTargets(prev => prev.map((t, i) => i === index ? { ...t, targetPercent: rounded } : t));\n }, []);\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 // Server preview\n const handlePreview = useCallback(async () => {\n if (!portfolio || !hasChanges || !address) return;\n setWidgetState('previewing');\n setErrorMessage(null);\n\n try {\n await ensureCorrectChain();\n\n const response = await fetch('/api/compass/rebalance/preview', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n targets: targets.map(t => ({\n venueType: t.venueType === 'vault' ? 'VAULT' : t.venueType === 'aave' ? 'AAVE' : 'PENDLE_PT',\n venueAddress: t.venueAddress,\n targetPercent: t.targetPercent,\n token: t.token,\n originalPercent: originalAllocations[`${t.venueType}-${t.venueAddress.toLowerCase()}`] ?? 0,\n })),\n slippage: defaultSlippage,\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Failed to compute rebalance preview');\n }\n\n const data = await response.json();\n setServerPreview(data);\n setPreviewPlan(clientPreview);\n setWidgetState('ready');\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : 'Preview failed');\n setWidgetState('error');\n onError?.(err instanceof Error ? err : new Error('Preview failed'));\n }\n }, [portfolio, hasChanges, address, CHAIN_ID, targets, defaultSlippage, clientPreview, onError, ensureCorrectChain, originalAllocations]);\n\n // Sign and execute\n const handleExecute = useCallback(async () => {\n if (!serverPreview?.eip712 || !address) return;\n setWidgetState('signing');\n setErrorMessage(null);\n\n try {\n // Use pre-normalized types from server (matches EarnAccountBalance pattern)\n const signature = await signTypedData({\n domain: serverPreview.domain,\n types: serverPreview.normalizedTypes,\n primaryType: 'SafeTx',\n message: serverPreview.message,\n });\n\n setWidgetState('executing');\n\n // Execute via bundle execute endpoint\n const response = await fetch('/api/compass/bundle/execute', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n eip712: serverPreview.eip712,\n signature,\n }),\n });\n\n if (!response.ok) {\n const err = await response.json();\n throw new Error(err.error || 'Transaction execution failed');\n }\n\n const data = await response.json();\n setTxHash(data.txHash);\n setTxConfirmed(false);\n setWidgetState('success');\n\n // Poll for on-chain confirmation\n if (data.txHash) {\n const pollInterval = setInterval(async () => {\n try {\n const res = await fetch(`/api/compass/tx/receipt?hash=${data.txHash}&chain=${CHAIN_ID}`);\n if (!res.ok) return;\n const receiptData = await res.json();\n if (receiptData.status === 'success') {\n clearInterval(pollInterval);\n setTxConfirmed(true);\n refetch();\n } else if (receiptData.status === 'reverted') {\n clearInterval(pollInterval);\n setTxHash(null);\n setErrorMessage('Transaction reverted on-chain');\n setWidgetState('error');\n }\n } catch { /* keep polling */ }\n }, 2000);\n setTimeout(() => clearInterval(pollInterval), 120_000);\n }\n\n if (previewPlan) {\n onRebalance?.(previewPlan, data.txHash);\n }\n } catch (err) {\n setErrorMessage(err instanceof Error ? err.message : 'Execution failed');\n setWidgetState('error');\n onError?.(err instanceof Error ? err : new Error('Execution failed'));\n }\n }, [serverPreview, address, signTypedData, CHAIN_ID, refetch, previewPlan, onRebalance, onError]);\n\n // Available balance of selected token in earn account (for deposit MAX button)\n const earnBalancesQuery = useMemo(() => {\n // Derive from portfolio idle balances\n const idleBalance = portfolio?.idleBalances.find(b => b.token === selectedToken);\n return idleBalance?.balance ?? 0;\n }, [portfolio, selectedToken]);\n\n // Check if we need to swap for deposit\n const needsSwap = selectedMarket ? selectedToken !== selectedMarket.underlyingToken : false;\n\n\n // Helper: build venue params for the manage API from a selected market\n const buildVenueParamsFromMarket = (market: EarnMarketOption) => {\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: EarnMarketOption) => {\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 // Handle deposit action\n const handleDeposit = useCallback(async () => {\n if (!selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || !address || !signTypedData) return;\n\n setDepositTxState({ status: 'preparing' });\n const underlyingToken = selectedMarket.underlyingToken;\n\n try {\n let resultTxHash: string;\n\n if (needsSwap) {\n // Swap selectedToken to market's underlying token, then deposit via bundle\n\n const quoteResponse = await fetch(\n `/api/compass/swap/quote?owner=${address}&chain=${CHAIN_ID}&tokenIn=${selectedToken}&tokenOut=${underlyingToken}&amountIn=${depositAmount}`\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 minimal slippage buffer to the deposit amount\n const actualDepositAmount = (parseFloat(estimatedOutput) * 0.99999).toString();\n\n // Preparing swap and deposit\n\n const bundleActions = [\n {\n body: {\n actionType: 'V2_SWAP',\n tokenIn: selectedToken,\n tokenOut: underlyingToken,\n amountIn: depositAmount,\n slippage: 1.0,\n },\n },\n {\n body: {\n actionType: 'V2_MANAGE',\n action: 'DEPOSIT',\n venue: buildVenueFromMarket(selectedMarket),\n amount: actualDepositAmount,\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 setDepositTxState({ status: 'signing' });\n await ensureCorrectChain();\n\n const signature = await signTypedData({\n domain,\n types: normalizedTypes,\n primaryType: 'SafeTx',\n message,\n });\n\n setDepositTxState({ status: 'broadcasting' });\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 resultTxHash = result.txHash;\n } else {\n // Direct deposit (no swap needed) - token matches market's underlying\n // Preparing deposit\n\n const venueParams = buildVenueParamsFromMarket(selectedMarket);\n\n const prepareResponse = await fetch('/api/compass/deposit/prepare', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n owner: address,\n chain: CHAIN_ID,\n ...venueParams,\n amount: depositAmount,\n }),\n });\n\n if (!prepareResponse.ok) {\n const errData = await prepareResponse.json();\n throw new Error(errData.error || 'Failed to prepare deposit');\n }\n\n const prepareData = await prepareResponse.json();\n\n setDepositTxState({ status: 'signing' });\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 setDepositTxState({ status: 'broadcasting' });\n\n const executeResponse = await fetch('/api/compass/deposit/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,\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 resultTxHash = result.txHash;\n }\n\n setDepositTxState({ status: 'submitted', txHash: resultTxHash });\n startDepositPolling(resultTxHash, setDepositTxState);\n setDepositAmount('');\n\n // Invalidate queries to refresh data\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n queryClient.invalidateQueries({ queryKey: ['rebalancing'] });\n refetch();\n\n // Events take time to be processed on-chain, so refetch after delays\n const delays = [5_000, 15_000, 30_000];\n for (const delay of delays) {\n setTimeout(() => {\n queryClient.invalidateQueries({ queryKey: ['rebalancing'] });\n refetch();\n }, delay);\n }\n } catch (err) {\n setDepositTxState({ status: 'failed', error: err instanceof Error ? err.message : 'Deposit failed' });\n onError?.(err instanceof Error ? err : new Error('Deposit failed'));\n }\n }, [selectedMarket, depositAmount, address, signTypedData, selectedToken, needsSwap, CHAIN_ID, ensureCorrectChain, queryClient, refetch, onError, startDepositPolling]);\n\n return (\n <div className=\"flex flex-col w-full\" style={{ gap: '0', fontFamily: 'var(--compass-font-family)', height, overflow: 'hidden', borderRadius: 'var(--compass-border-radius-xl)' }}>\n <div style={{ flex: 1, minHeight: 0, overflowY: 'auto', scrollbarWidth: 'none', display: 'flex', flexDirection: 'column' }}>\n\n {/* Chain Selector - hidden when chain prop is provided */}\n {showChainSwitcher && !chain && <div style={{ padding: '0 4px', marginBottom: '8px' }}><ChainSwitcher /></div>}\n\n <EarnAccountGuard>\n {/* Loading State */}\n {state === 'loading' && (\n <div className=\"flex flex-col items-center justify-center py-12\">\n <Loader2 size={24} className=\"animate-spin mb-3\" style={{ color: 'var(--compass-color-primary)' }} />\n <p className=\"text-sm\" style={{ color: 'var(--compass-color-text-secondary)' }}>Loading portfolio...</p>\n </div>\n )}\n\n {/* Empty Portfolio / Not Connected */}\n {state === 'empty' && (\n <div className=\"flex flex-col items-center justify-center text-center\" style={{ padding: '48px 16px' }}>\n {!isConnected ? (\n <>\n <p className=\"text-lg font-semibold mb-2\" style={{ color: 'var(--compass-color-text)' }}>Connect your wallet</p>\n <p className=\"text-sm mb-4\" style={{ color: 'var(--compass-color-text-secondary)' }}>Connect your wallet to view and manage your DeFi portfolio.</p>\n {login && (\n <button\n onClick={login}\n className=\"font-semibold\"\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: '10px 20px',\n fontSize: '0.875rem',\n border: 'none',\n }}\n >\n Connect Wallet\n </button>\n )}\n </>\n ) : (\n <>\n <p className=\"text-lg font-semibold mb-2\" style={{ color: 'var(--compass-color-text)' }}>\n {fundWallet && !hasExternalWallet ? 'Fund your account to start' : 'No positions found'}\n </p>\n <p className=\"text-sm mb-4\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {fundWallet && !hasExternalWallet\n ? 'Buy crypto to get started with your DeFi portfolio.'\n : 'Deposit into a vault, Aave market, or Pendle market to start rebalancing.'}\n </p>\n {fundWallet && earnAccountAddress && (\n <div style={{ width: '100%', maxWidth: '320px' }}>\n <BuyForm\n targetAddress={earnAccountAddress}\n onComplete={() => {\n queryClient.invalidateQueries({ queryKey: ['rebalancingPortfolio'] });\n queryClient.invalidateQueries({ queryKey: ['earnAccountBalances'] });\n refetch();\n }}\n />\n </div>\n )}\n </>\n )}\n </div>\n )}\n\n {/* Main Content */}\n {state !== 'loading' && state !== 'empty' && portfolio && (\n <>\n {/* ========== TOP SECTION: Title + Balance + Earned ========== */}\n <div className=\"flex flex-col items-center text-center\" style={{ padding: '16px 16px 12px' }}>\n {/* Title + Logout Row */}\n <div className=\"flex items-center justify-between\" style={{ width: '100%', marginBottom: '12px' }}>\n <span\n className=\"font-semibold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1rem',\n }}\n >\n {title}\n </span>\n {isConnected && logout && (\n <button\n onClick={() => logout()}\n aria-label=\"Disconnect wallet\"\n title=\"Disconnect wallet\"\n style={{\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'all 200ms ease',\n cursor: 'pointer',\n flexShrink: 0,\n }}\n >\n <LogOut size={13} style={{ color: 'var(--compass-color-text-secondary)' }} />\n </button>\n )}\n </div>\n\n {/* Balance — HERO, centered */}\n <button\n onClick={() => setIsBalancesModalOpen(true)}\n aria-label={`Total balance: ${formatUSD(portfolio.totalUsd)}`}\n style={{ border: 'none', background: 'none', padding: 0 }}\n >\n <span\n className=\"font-bold\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.75rem',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n }}\n >\n {formatUSD(portfolio.totalUsd)}\n <ChevronDown size={16} style={{ color: 'var(--compass-color-text-tertiary)', flexShrink: 0 }} />\n </span>\n </button>\n\n {/* Quick Action Buttons — inline pills */}\n {(showTopUp || balanceTokens.length > 0) && (\n <div className=\"flex\" style={{ gap: '8px', marginTop: '12px' }}>\n {showTopUp && (\n <button\n onClick={() => earnBalanceRef.current?.openTransferModal()}\n aria-label=\"Add money\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <Plus size={14} style={{ color: 'var(--compass-color-success)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Add</span>\n </button>\n )}\n {balanceTokens.length > 0 && (\n <button\n onClick={() => setIsSwapModalOpen(true)}\n aria-label=\"Swap tokens\"\n className=\"flex items-center justify-center\"\n style={{\n height: '36px',\n padding: '8px 16px',\n backgroundColor: 'transparent',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n gap: '6px',\n transition: 'all 200ms ease',\n }}\n >\n <ArrowLeftRight size={14} style={{ color: 'var(--compass-color-primary)' }} />\n <span style={{ fontSize: '0.8125rem', color: 'var(--compass-color-text-secondary)', fontWeight: 500 }}>Swap</span>\n </button>\n )}\n </div>\n )}\n </div>\n\n {/* ========== BOTTOM SECTION: Allocations + Markets ========== */}\n <div\n className=\"flex flex-col\"\n style={{\n gap: '10px',\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-xl) var(--compass-border-radius-xl) 0 0',\n padding: '16px 16px 12px',\n borderTop: '1.5px solid var(--compass-color-border)',\n }}\n >\n {/* Allocation Editor */}\n <AllocationEditor\n portfolio={portfolio}\n targets={targets}\n targetSum={targetSum}\n hasChanges={hasChanges}\n highlightedVenueAddress={undefined}\n onUpdatePercent={handleUpdatePercent}\n onRemoveVenue={handleRemoveVenue}\n onResetToCurrent={handleResetToCurrent}\n onEqualSplit={handleEqualSplit}\n />\n\n {/* Add New Market - collapsible section */}\n <button\n onClick={() => setIsAddMarketExpanded(prev => !prev)}\n className=\"flex items-center font-medium transition-all hover:opacity-80\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n border: '1.5px solid var(--compass-color-border)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '8px 12px',\n gap: '6px',\n fontSize: '0.8125rem',\n width: '100%',\n justifyContent: 'center',\n }}\n >\n {isAddMarketExpanded ? <ChevronDown size={14} /> : <Plus size={14} />}\n {isAddMarketExpanded ? 'Hide' : 'Add new market'}\n </button>\n\n {isAddMarketExpanded && (<>\n {/* Market Selector */}\n <MarketSelector\n markets={earnAccountMarkets}\n selectedMarket={selectedMarket}\n onMarketSelect={(market) => {\n setSelectedMarket(market);\n if (depositTxState.status === 'failed') setDepositTxState({ status: 'idle' });\n }}\n isLoading={isMarketsLoading}\n />\n\n {/* Amount Input */}\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '12px 16px',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '1.125rem', fontWeight: 300 }}>$</span>\n <input\n type=\"number\"\n value={depositAmount}\n onChange={(e) => { setDepositAmount(e.target.value); if (depositTxState.status === 'failed') setDepositTxState({ status: 'idle' }); }}\n placeholder=\"0.00\"\n disabled={depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed'}\n className=\"flex-1 font-bold bg-transparent outline-none\"\n style={{\n color: 'var(--compass-color-text)',\n fontSize: '1.125rem',\n letterSpacing: '-0.02em',\n minWidth: 0,\n border: 'none',\n }}\n />\n {/* Token Pill */}\n <div className=\"relative\" style={{ flexShrink: 0 }}>\n <button\n onClick={() => setIsTokenDropdownOpen(!isTokenDropdownOpen)}\n disabled={depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed'}\n className=\"flex items-center font-semibold\"\n style={{\n backgroundColor: 'var(--compass-color-surface-hover, var(--compass-color-surface))',\n color: 'var(--compass-color-text)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '6px 10px',\n minHeight: '32px',\n gap: '3px',\n fontSize: '0.8125rem',\n border: '1.5px solid var(--compass-color-border)',\n transition: 'all 200ms ease',\n }}\n >\n {selectedToken}\n <ChevronDown size={14} style={{ color: 'var(--compass-color-text-tertiary)' }} />\n </button>\n {isTokenDropdownOpen && (\n <div\n className=\"absolute right-0 mt-2 z-10\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-lg)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n minWidth: '120px',\n overflow: 'hidden',\n }}\n >\n {balanceTokens.map((token) => (\n <button\n key={token}\n onClick={() => {\n setSelectedToken(token);\n setIsTokenDropdownOpen(false);\n if (depositTxState.status === 'failed') setDepositTxState({ status: 'idle' });\n }}\n className=\"w-full text-left font-medium\"\n style={{\n padding: '12px 16px',\n minHeight: '44px',\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: '0.875rem',\n border: 'none',\n transition: 'background-color 150ms ease',\n }}\n >\n {token}\n </button>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {/* Available + MAX */}\n <div className=\"flex items-center justify-between\" style={{ marginTop: '8px' }}>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.8125rem' }}>Available</span>\n <button\n onClick={() => setDepositAmount(earnBalancesQuery.toString())}\n disabled={depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed'}\n className=\"font-semibold\"\n style={{ color: 'var(--compass-color-primary)', fontSize: '0.8125rem', background: 'none', border: 'none', padding: 0 }}\n >\n {formatAmount(earnBalancesQuery)} {selectedToken}\n </button>\n </div>\n </div>\n\n {/* Swap Indicator */}\n {needsSwap && (\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: '8px 12px',\n gap: '8px',\n }}\n >\n <ArrowRight size={14} />\n <span>Swaps {selectedToken} to {selectedMarket?.underlyingToken}, then deposits</span>\n </div>\n )}\n\n {/* Deposit TxStatus */}\n <TxStatus state={depositTxState} />\n\n {/* Deposit Button */}\n <button\n onClick={!isConnected && login ? login : handleDeposit}\n disabled={isConnected && (depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed' || !selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || parseFloat(depositAmount) > earnBalancesQuery)}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n transition: 'all 200ms ease',\n border: 'none',\n opacity: isConnected && (depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed' || !selectedMarket || !depositAmount || parseFloat(depositAmount) <= 0 || parseFloat(depositAmount) > earnBalancesQuery) ? 0.4 : 1,\n }}\n >\n {!isConnected ? 'Connect Wallet' : depositTxState.status !== 'idle' && depositTxState.status !== 'confirmed' && depositTxState.status !== 'failed' ? (\n <span className=\"flex items-center justify-center\" style={{ gap: '8px' }}>\n <Loader2 size={16} className=\"animate-spin\" />\n Processing...\n </span>\n ) : !selectedMarket ? 'Select a market' : needsSwap ? 'Swap & Deposit' : 'Deposit'}\n </button>\n </>)}\n\n {/* Client-side Preview */}\n {clientPreview && clientPreview.actions.length > 0 && state === 'editing' && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '16px',\n }}\n >\n <h3 className=\"font-semibold mb-3\" style={{ color: 'var(--compass-color-text)' }}>Preview</h3>\n <ActionList actions={clientPreview.actions} />\n {clientPreview.warnings.length > 0 && (\n <div className=\"mt-3 flex flex-col gap-1\">\n {clientPreview.warnings.map((w, i) => (\n <div key={i} className=\"flex items-start gap-2 text-xs\" style={{ color: 'var(--compass-color-warning, #eab308)' }}>\n <AlertTriangle size={12} className=\"flex-shrink-0 mt-0.5\" />\n <span>{w}</span>\n </div>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Server Preview */}\n {state === 'ready' && serverPreview && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-background)',\n borderRadius: 'var(--compass-border-radius-xl)',\n border: '1.5px solid var(--compass-color-primary)',\n padding: '16px',\n }}\n >\n <h3 className=\"font-semibold mb-3\" style={{ color: 'var(--compass-color-text)' }}>Ready to Execute</h3>\n <ActionList actions={serverPreview.actions || []} />\n {(serverPreview.warnings || []).length > 0 && (\n <div className=\"mt-3 flex flex-col gap-1\">\n {serverPreview.warnings.map((w: string, i: number) => (\n <div key={i} className=\"flex items-start gap-2 text-xs\" style={{ color: 'var(--compass-color-warning, #eab308)' }}>\n <AlertTriangle size={12} className=\"flex-shrink-0 mt-0.5\" />\n <span>{w}</span>\n </div>\n ))}\n </div>\n )}\n <p className=\"text-xs mt-2\" style={{ color: 'var(--compass-color-text-tertiary)' }}>\n {serverPreview.actionsCount} actions in 1 atomic transaction\n </p>\n </div>\n )}\n\n {/* Transaction status with explorer link */}\n {state === 'success' && txHash && (\n <div\n className=\"flex items-center justify-between\"\n style={{\n border: '1.5px solid var(--compass-color-border)',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '10px 12px',\n fontFamily: 'var(--compass-font-family)',\n }}\n >\n <div className=\"flex items-center\" style={{ gap: '8px' }}>\n {txConfirmed ? (\n <CheckCircle size={16} style={{ color: 'var(--compass-color-success)', flexShrink: 0 }} />\n ) : (\n <Loader2 size={16} className=\"animate-spin\" style={{ color: 'var(--compass-color-primary)', flexShrink: 0 }} />\n )}\n <span style={{\n color: txConfirmed ? 'var(--compass-color-success)' : 'var(--compass-color-text)',\n fontSize: '0.8125rem',\n fontWeight: 500,\n }}>\n {txConfirmed ? 'Transaction confirmed' : 'Confirming on chain...'}\n </span>\n </div>\n <a\n href={`${BLOCK_EXPLORERS[CHAIN_ID] || BLOCK_EXPLORERS.ethereum}/tx/${txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"flex items-center hover:opacity-70 transition-opacity\"\n style={{ gap: '4px', color: 'var(--compass-color-text-secondary)', fontSize: '0.75rem', textDecoration: 'none' }}\n >\n View on explorer\n <ExternalLink size={12} />\n </a>\n </div>\n )}\n\n {/* Error State */}\n {state === 'error' && errorMessage && (\n <div\n style={{\n backgroundColor: 'var(--compass-color-error-muted, rgba(239, 68, 68, 0.1))',\n borderRadius: 'var(--compass-border-radius-xl)',\n padding: '16px',\n }}\n >\n <p className=\"text-sm font-medium mb-1\" style={{ color: 'var(--compass-color-error)' }}>{errorMessage}</p>\n <button\n onClick={() => { setWidgetState('editing'); setErrorMessage(null); }}\n className=\"text-xs underline\"\n style={{ color: 'var(--compass-color-error)', background: 'none', border: 'none' }}\n >\n Try again\n </button>\n </div>\n )}\n\n {/* Action Buttons */}\n <div className=\"flex flex-col gap-2\">\n {state === 'editing' && hasChanges && (\n <button\n onClick={handlePreview}\n disabled={!address}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n opacity: !address ? 0.4 : 1,\n transition: 'all 200ms ease',\n }}\n >\n Preview Rebalance\n </button>\n )}\n\n {state === 'previewing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Computing exact amounts...\n </button>\n )}\n\n {state === 'ready' && (\n <button\n onClick={handleExecute}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Confirm & Sign\n </button>\n )}\n\n {state === 'signing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Waiting for signature...\n </button>\n )}\n\n {state === 'executing' && (\n <button\n disabled\n className=\"w-full flex items-center justify-center gap-2 font-bold\"\n style={{\n backgroundColor: 'var(--compass-color-background)',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n }}\n >\n <Loader2 size={18} className=\"animate-spin\" />\n Executing on-chain...\n </button>\n )}\n\n {state === 'success' && (\n <button\n onClick={() => { setWidgetState('editing'); setTxHash(null); setTxConfirmed(false); setServerPreview(null); setPreviewPlan(null); }}\n className=\"w-full font-bold\"\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: '12px',\n minHeight: '44px',\n fontSize: '1rem',\n border: 'none',\n transition: 'all 200ms ease',\n }}\n >\n Rebalance Again\n </button>\n )}\n\n {(state === 'ready' || state === 'previewing') && (\n <button\n onClick={() => { setWidgetState('editing'); setServerPreview(null); }}\n className=\"w-full text-sm\"\n style={{\n backgroundColor: 'transparent',\n color: 'var(--compass-color-text-secondary)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '8px',\n border: 'none',\n }}\n >\n Back to editing\n </button>\n )}\n </div>\n\n <WidgetFooter />\n </div>\n </>\n )}\n\n </EarnAccountGuard>\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\" style={{ gap: '12px' }}>\n {address && (\n <CopyableAddress address={address} label=\"Wallet\" />\n )}\n {earnAccountAddress && (\n <CopyableAddress address={earnAccountAddress} label=\"Product Account\" />\n )}\n\n {portfolio && portfolio.idleBalances.length > 0 && (\n <>\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 {portfolio.idleBalances.filter((b) => b.balance >= 0.005).map((b) => (\n <div\n key={b.token}\n className=\"flex items-center justify-between\"\n style={{\n backgroundColor: 'var(--compass-color-surface)',\n borderRadius: 'var(--compass-border-radius-lg)',\n padding: '12px 16px',\n border: '1.5px solid var(--compass-color-border)',\n }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {b.token}\n </span>\n <div className=\"flex flex-col items-end\">\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '0.9375rem' }}>\n {floorTo(b.balance, 2).toFixed(2)}\n </span>\n <span style={{ color: 'var(--compass-color-text-tertiary)', fontSize: '0.75rem' }}>\n {formatUSD(b.usdValue)}\n </span>\n </div>\n </div>\n ))}\n </>\n )}\n\n <div\n className=\"flex items-center justify-between\"\n style={{ padding: '12px 4px 0', borderTop: '1.5px solid var(--compass-color-border)' }}\n >\n <span className=\"font-semibold\" style={{ color: 'var(--compass-color-text-secondary)', fontSize: '0.875rem' }}>Total</span>\n <span className=\"font-bold\" style={{ color: 'var(--compass-color-text)', fontSize: '1.25rem', letterSpacing: '-0.02em' }}>\n {formatUSD(portfolio?.totalUsd ?? 0)}\n </span>\n </div>\n </div>\n </ActionModal>\n\n </div>{/* end scrollable content area */}\n\n {/* Hidden EarnAccountBalance - only renders modals, triggered by + Add button */}\n <EarnAccountBalance ref={earnBalanceRef} compact hideVisual onTransferComplete={() => refetch()} />\n\n {/* Swap Modal */}\n <ActionModal\n isOpen={isSwapModalOpen}\n onClose={() => setIsSwapModalOpen(false)}\n title=\"Swap Tokens\"\n >\n <SwapForm\n availableFromTokens={balanceTokens}\n balances={Object.fromEntries(\n (portfolio?.idleBalances || []).map(b => [b.token, b.balance.toString()])\n )}\n onSwapSuccess={() => {\n refetch();\n setTimeout(() => refetch(), 5000);\n setTimeout(() => refetch(), 15000);\n }}\n onSwapError={onError}\n />\n </ActionModal>\n\n\n </div>\n );\n}\n\n// Sub-component: Action list display\nfunction ActionList({ actions }: { actions: RebalanceAction[] | any[] }) {\n const actionIcons: Record<string, string> = {\n withdraw: 'Withdraw',\n swap: 'Swap',\n deposit: 'Deposit',\n };\n\n const actionColors: Record<string, string> = {\n withdraw: 'var(--compass-color-error)',\n swap: 'var(--compass-color-warning, #eab308)',\n deposit: 'var(--compass-color-success)',\n };\n\n return (\n <div className=\"flex flex-col gap-1.5\">\n {actions.map((action: any, i: number) => (\n <div\n key={i}\n className=\"flex items-center justify-between p-2 rounded-lg text-sm\"\n style={{ backgroundColor: 'var(--compass-color-background)' }}\n >\n <div className=\"flex items-center gap-2\">\n <span\n className=\"text-xs font-medium px-1.5 py-0.5 rounded\"\n style={{\n backgroundColor: actionColors[action.type] + '20',\n color: actionColors[action.type],\n }}\n >\n {actionIcons[action.type] || action.type}\n </span>\n <span style={{ color: 'var(--compass-color-text)' }}>\n {action.token}\n {action.tokenOut && ` → ${action.tokenOut}`}\n </span>\n </div>\n <span className=\"font-mono text-xs\" style={{ color: 'var(--compass-color-text-secondary)' }}>\n {formatUSD(action.usdValue || 0)}\n </span>\n </div>\n ))}\n </div>\n );\n}\n","import type { FeaturePreset, TabConfig, TabId } from './types';\n\nconst allTabs: TabConfig[] = [\n { id: 'rebalance', label: 'Rebalance', 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 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 || 'rebalance';\n}\n","'use client';\n\nimport { useState, useMemo } from 'react';\nimport { EarnPositionsList } from '../EarnPositionsList';\nimport { RebalancingWidget } from '../RebalancingWidget';\nimport { getTabsForPreset, getDefaultTab } from './presets';\nimport type { CompassEarnWidgetProps, TabId, TabConfig } from './types';\n\nexport function CompassEarnWidget({\n preset = 'full',\n enablePositions,\n enableRebalance,\n defaultTab,\n showHeader = true,\n showPnL = 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 === 'positions' && enablePositions !== undefined) enabled = enablePositions;\n if (tab.id === 'rebalance' && enableRebalance !== undefined) enabled = enableRebalance;\n return { ...tab, enabled };\n });\n }, [preset, enablePositions, enableRebalance]);\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 === 'rebalance' && <RebalancingWidget />}\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"]}