accesly 0.2.2 → 0.2.3
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 +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/AcceslyClient.ts","../src/auth.ts","../src/AcceslyProvider.tsx","../src/hooks/useAccesly.ts","../src/components/ConnectModal.tsx","../src/components/WalletPanel.tsx","../src/components/ConnectButton.tsx","../src/components/SwapModal.tsx","../src/index.ts"],"names":["STORAGE_KEY","DEFAULT_BASE_URL","AcceslyApiError","message","status","AcceslyClient","appId","baseUrl","tokens","raw","path","options","retry","headers","res","data","refreshToken","params","body","fromAsset","toAsset","amount","limit","xdr","openAuthPopup","resolve","reject","left","top","popup","handleMessage","event","cleanup","pollClosed","AcceslyContext","createContext","AcceslyProvider","children","config","client","useMemo","wallet","setWallet","useState","balance","setBalance","assetBalances","setAssetBalances","loading","setLoading","creating","setCreating","error","setError","useEffect","loadWallet","fetchBalance","interval","err","createWallet","native","b","others","code","issuer","connect","useCallback","disconnect","sendPayment","estimateSwap","swap","rotateKeys","getTransactions","refreshBalance","refreshWallet","signTransaction","signAndSubmit","contextValue","jsx","useAccesly","context","useContext","ConnectModal","onClose","onConnect","styles","jsxs","e","SWAP_ASSETS","WalletPanel","activeTab","setActiveTab","walletView","setWalletView","sendDest","setSendDest","sendAmount","setSendAmount","sendMemo","setSendMemo","sendAsset","setSendAsset","sending","setSending","sendResult","setSendResult","sendError","setSendError","swapFrom","setSwapFrom","swapTo","setSwapTo","swapAmount","setSwapAmount","swapSlippage","setSwapSlippage","swapping","setSwapping","swapResult","setSwapResult","swapError","setSwapError","transactions","setTransactions","txLoading","setTxLoading","refreshTrigger","setRefreshTrigger","rotating","setRotating","rotateError","setRotateError","copiedField","setCopiedField","loadTransactions","txs","handleSend","result","prev","resetSendForm","handleSwap","minReceive","resetSwapForm","handleRotateKeys","handleDisconnect","truncate","addr","start","end","copyToClipboard","text","field","relativeTime","isoDate","diff","formattedBalance","idColor","identiconColor","tabs","tab","renderWalletTab","renderActivityTab","renderAccountTab","renderSecurityTab","toOptions","c","next","assetColor","knownAssets","found","a","bal","isEmpty","tx","isSwap","iconBg","iconColor","Fragment","fields","f","address","hash","ConnectButton","showModal","setShowModal","showPanel","setShowPanel","truncated","balanceText","color","ASSET_CODES","SwapModal","onSuccess","setFromAsset","setToAsset","setAmount","slippage","setSlippage","estimate","setEstimate","estimating","setEstimating","estimateError","setEstimateError","txHash","setTxHash","debounceRef","useRef","num","handleFlip","calcMinReceive","minRaw","s","fromOptions","canSubmit","STYLE_ID","style"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * AcceslyClient.ts - HTTP client for the Accesly backend API.\r\n *\r\n * Handles:\r\n * - All wallet API calls (balance, send, create, etc.)\r\n * - Automatic token refresh on 401 responses\r\n * - API key injection in every request\r\n */\r\n\r\nimport type { WalletInfo, TransactionRecord, SendPaymentParams, AuthTokens, SignResult, SwapParams, SwapEstimate } from './types';\r\n\r\nconst STORAGE_KEY = 'accesly_auth';\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\n/** Custom error that preserves the HTTP status code */\r\nexport class AcceslyApiError extends Error {\r\n status: number;\r\n constructor(message: string, status: number) {\r\n super(message);\r\n this.name = 'AcceslyApiError';\r\n this.status = status;\r\n }\r\n}\r\n\r\nexport class AcceslyClient {\r\n private baseUrl: string;\r\n private appId: string;\r\n\r\n constructor(appId: string, baseUrl?: string) {\r\n this.appId = appId;\r\n this.baseUrl = baseUrl || DEFAULT_BASE_URL;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Token management (stored in localStorage)\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Save auth tokens to localStorage */\r\n setTokens(tokens: AuthTokens): void {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(tokens));\r\n }\r\n\r\n /** Get stored auth tokens */\r\n getTokens(): AuthTokens | null {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw) as AuthTokens;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Clear stored auth tokens */\r\n clearTokens(): void {\r\n localStorage.removeItem(STORAGE_KEY);\r\n }\r\n\r\n /** Check if we have a stored session */\r\n hasSession(): boolean {\r\n return this.getTokens() !== null;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // HTTP layer\r\n // ---------------------------------------------------------------------------\r\n\r\n /**\r\n * Make an authenticated request to the Accesly API.\r\n * Automatically adds the API key and auth token.\r\n * Retries once with a refreshed token on 401.\r\n */\r\n private async request<T>(\r\n path: string,\r\n options: RequestInit = {},\r\n retry = true\r\n ): Promise<T> {\r\n const tokens = this.getTokens();\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'x-accesly-key': this.appId,\r\n ...(tokens ? { Authorization: `Bearer ${tokens.accessToken}` } : {}),\r\n };\r\n\r\n const res = await fetch(`${this.baseUrl}${path}`, {\r\n ...options,\r\n headers: { ...headers, ...(options.headers as Record<string, string>) },\r\n });\r\n\r\n // If unauthorized, try to refresh the token once\r\n if (res.status === 401 && retry && tokens?.refreshToken) {\r\n const refreshed = await this.refreshToken(tokens.refreshToken);\r\n if (refreshed) {\r\n return this.request<T>(path, options, false);\r\n }\r\n // Refresh failed - clear tokens\r\n this.clearTokens();\r\n throw new Error('Session expired. Please reconnect.');\r\n }\r\n\r\n if (!res.ok) {\r\n const data = await res.json().catch(() => ({}));\r\n throw new AcceslyApiError(\r\n data.error || data.details || `Request failed: ${res.status}`,\r\n res.status\r\n );\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** Refresh the access token using the refresh token */\r\n private async refreshToken(refreshToken: string): Promise<boolean> {\r\n try {\r\n const res = await fetch(`${this.baseUrl}/api/auth/refresh`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ refreshToken }),\r\n });\r\n\r\n if (!res.ok) return false;\r\n\r\n const data = await res.json();\r\n const tokens = this.getTokens();\r\n if (tokens) {\r\n this.setTokens({\r\n ...tokens,\r\n accessToken: data.accessToken,\r\n refreshToken: data.refreshToken,\r\n expiresAt: data.expiresAt,\r\n });\r\n }\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Wallet API methods\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Get wallet info for the authenticated user */\r\n async getWalletInfo(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/info');\r\n }\r\n\r\n /** Create a new wallet for the authenticated user */\r\n async createWallet(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/create', { method: 'POST' });\r\n }\r\n\r\n /** Get the wallet's balance */\r\n async getBalance(): Promise<{ balances: Array<{ asset: string; balance: string }> }> {\r\n return this.request('/api/wallet/balance');\r\n }\r\n\r\n /** Send a payment (XLM, USDC, or EURC) */\r\n async sendPayment(params: SendPaymentParams): Promise<{ txHash: string }> {\r\n const body: Record<string, string> = {\r\n destination: params.destination,\r\n amount: params.amount,\r\n };\r\n if (params.memo) body.memo = params.memo;\r\n if (params.assetCode && params.assetCode !== 'XLM') {\r\n body.asset_code = params.assetCode;\r\n if (params.assetIssuer) body.asset_issuer = params.assetIssuer;\r\n }\r\n return this.request('/api/wallet/send', {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n });\r\n }\r\n\r\n /** Get a swap estimate (exchange rate + DEX path) — no auth required */\r\n async estimateSwap(fromAsset: string, toAsset: string, amount: string): Promise<SwapEstimate> {\r\n return this.request(\r\n `/api/wallet/swap-estimate?from_asset=${fromAsset}&to_asset=${toAsset}&amount=${amount}`\r\n );\r\n }\r\n\r\n /** Swap assets using the Stellar DEX (pathPaymentStrictSend) */\r\n async swap(params: SwapParams): Promise<{ txHash: string }> {\r\n const body: Record<string, unknown> = {\r\n from_asset: params.fromAsset,\r\n to_asset: params.toAsset,\r\n amount: params.amount,\r\n min_receive: params.minReceive,\r\n };\r\n if (params.path) body.path = params.path;\r\n return this.request('/api/wallet/swap', {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n });\r\n }\r\n\r\n /** Get transaction history */\r\n async getTransactions(limit = 20): Promise<{ transactions: TransactionRecord[] }> {\r\n return this.request(`/api/wallet/transactions?limit=${limit}`);\r\n }\r\n\r\n /** Rotate wallet keys */\r\n async rotateKeys(): Promise<{ newStellarAddress: string }> {\r\n return this.request('/api/wallet/rotate', { method: 'POST' });\r\n }\r\n\r\n /** Sign a transaction XDR without submitting to the network */\r\n async signTransaction(xdr: string): Promise<SignResult> {\r\n return this.request('/api/wallet/sign', {\r\n method: 'POST',\r\n body: JSON.stringify({ xdr, submit: false }),\r\n });\r\n }\r\n\r\n /** Sign a transaction XDR and submit it to the network */\r\n async signAndSubmit(xdr: string): Promise<SignResult> {\r\n return this.request('/api/wallet/sign', {\r\n method: 'POST',\r\n body: JSON.stringify({ xdr, submit: true }),\r\n });\r\n }\r\n}\r\n","/**\r\n * auth.ts - Popup-based OAuth authentication for the SDK.\r\n *\r\n * Opens a popup window pointing to the Accesly auth page.\r\n * The popup handles Google OAuth and sends the resulting tokens\r\n * back to this window via postMessage.\r\n */\r\n\r\nimport type { AuthTokens } from './types';\r\n\r\n/** Popup window dimensions */\r\nconst POPUP_WIDTH = 450;\r\nconst POPUP_HEIGHT = 600;\r\n\r\n/**\r\n * Open the Accesly auth popup and wait for the user to authenticate.\r\n * Returns the auth tokens on success, or throws on failure/cancellation.\r\n */\r\nexport function openAuthPopup(baseUrl: string, appId: string): Promise<AuthTokens> {\r\n return new Promise((resolve, reject) => {\r\n // Center the popup on screen\r\n const left = window.screenX + (window.innerWidth - POPUP_WIDTH) / 2;\r\n const top = window.screenY + (window.innerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n `${baseUrl}/auth/popup?appId=${appId}`,\r\n 'accesly-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},toolbar=no,menubar=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Failed to open popup. Please allow popups for this site.'));\r\n return;\r\n }\r\n\r\n /** Handle messages from the popup */\r\n function handleMessage(event: MessageEvent) {\r\n // Only accept messages from the Accesly domain\r\n if (!event.origin.includes(new URL(baseUrl).host)) return;\r\n\r\n if (event.data?.type === 'accesly-auth-success') {\r\n cleanup();\r\n resolve(event.data.payload as AuthTokens);\r\n }\r\n\r\n if (event.data?.type === 'accesly-auth-error') {\r\n cleanup();\r\n reject(new Error(event.data.error || 'Authentication failed'));\r\n }\r\n }\r\n\r\n /** Detect if the user closed the popup manually */\r\n const pollClosed = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Authentication cancelled'));\r\n }\r\n }, 500);\r\n\r\n /** Remove all listeners and intervals */\r\n function cleanup() {\r\n window.removeEventListener('message', handleMessage);\r\n clearInterval(pollClosed);\r\n }\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n}\r\n","/**\r\n * AcceslyProvider.tsx - Main SDK provider component.\r\n *\r\n * Wraps the application and provides wallet state to all children.\r\n * Handles auth token management, wallet loading, and balance refresh.\r\n *\r\n * Usage:\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <App />\r\n * </AcceslyProvider>\r\n */\r\n\r\nimport {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { AcceslyClient, AcceslyApiError } from './AcceslyClient';\r\nimport { openAuthPopup } from './auth';\r\nimport type {\r\n AcceslyConfig,\r\n AcceslyContextType,\r\n WalletInfo,\r\n AssetBalance,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n SwapParams,\r\n SwapEstimate,\r\n SignResult,\r\n} from './types';\r\n\r\n/** Internal context - use the useAccesly hook to access it */\r\nexport const AcceslyContext = createContext<AcceslyContextType | null>(null);\r\n\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\nexport function AcceslyProvider({\r\n children,\r\n ...config\r\n}: AcceslyConfig & { children: ReactNode }) {\r\n const baseUrl = config.baseUrl || DEFAULT_BASE_URL;\r\n\r\n // Create a stable client instance\r\n const client = useMemo(\r\n () => new AcceslyClient(config.appId, baseUrl),\r\n [config.appId, baseUrl]\r\n );\r\n\r\n const [wallet, setWallet] = useState<WalletInfo | null>(null);\r\n const [balance, setBalance] = useState<string | null>(null);\r\n const [assetBalances, setAssetBalances] = useState<AssetBalance[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [creating, setCreating] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // --- Check for existing session on mount ---\r\n useEffect(() => {\r\n if (client.hasSession()) {\r\n loadWallet();\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [client]);\r\n\r\n // --- Auto-refresh balance every 15s when connected ---\r\n useEffect(() => {\r\n if (!wallet) return;\r\n fetchBalance();\r\n const interval = setInterval(fetchBalance, 15000);\r\n return () => clearInterval(interval);\r\n }, [wallet]);\r\n\r\n /** Load wallet info from the backend. Creates wallet if first login. */\r\n async function loadWallet() {\r\n setError(null);\r\n try {\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n // If 404, user has no wallet yet — create one (first login)\r\n if (err instanceof AcceslyApiError && err.status === 404) {\r\n await createWallet();\r\n return;\r\n }\r\n // If session expired, clear tokens and let user reconnect\r\n if (err instanceof AcceslyApiError && err.status === 401) {\r\n client.clearTokens();\r\n setWallet(null);\r\n }\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Create a new wallet for the user */\r\n async function createWallet() {\r\n setCreating(true);\r\n setError(null);\r\n try {\r\n await client.createWallet();\r\n // Fetch the full wallet info after creation\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n setError(err.message);\r\n } finally {\r\n setCreating(false);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Fetch current XLM and asset balances */\r\n async function fetchBalance() {\r\n try {\r\n const data = await client.getBalance();\r\n const native = data.balances.find((b) => b.asset === 'native');\r\n setBalance(native?.balance || '0');\r\n const others: AssetBalance[] = data.balances\r\n .filter((b) => b.asset !== 'native')\r\n .map((b) => {\r\n const [code, issuer] = b.asset.split(':');\r\n return { code, issuer, balance: b.balance };\r\n });\r\n setAssetBalances(others);\r\n } catch {\r\n // Silently fail, keep previous balance\r\n }\r\n }\r\n\r\n /** Open auth popup, get tokens, load wallet */\r\n const connect = useCallback(async () => {\r\n setError(null);\r\n try {\r\n const tokens = await openAuthPopup(baseUrl, config.appId);\r\n client.setTokens(tokens);\r\n setLoading(true);\r\n await loadWallet();\r\n } catch (err: any) {\r\n if (err.message !== 'Authentication cancelled') {\r\n setError(err.message);\r\n }\r\n }\r\n }, [baseUrl, config.appId, client]);\r\n\r\n /** Disconnect: clear tokens and state */\r\n const disconnect = useCallback(() => {\r\n client.clearTokens();\r\n setWallet(null);\r\n setBalance(null);\r\n setAssetBalances([]);\r\n setError(null);\r\n config.onDisconnect?.();\r\n }, [client, config.onDisconnect]);\r\n\r\n /** Send a payment (XLM, USDC, or EURC) */\r\n const sendPayment = useCallback(\r\n async (params: SendPaymentParams) => {\r\n return client.sendPayment(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Get a swap estimate (exchange rate + DEX path) */\r\n const estimateSwap = useCallback(\r\n async (fromAsset: string, toAsset: string, amount: string): Promise<SwapEstimate> => {\r\n return client.estimateSwap(fromAsset, toAsset, amount);\r\n },\r\n [client]\r\n );\r\n\r\n /** Swap assets via the Stellar DEX */\r\n const swap = useCallback(\r\n async (params: SwapParams) => {\r\n return client.swap(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Rotate wallet keys */\r\n const rotateKeys = useCallback(async () => {\r\n return client.rotateKeys();\r\n }, [client]);\r\n\r\n /** Get transaction history */\r\n const getTransactions = useCallback(\r\n async (limit = 20) => {\r\n const data = await client.getTransactions(limit);\r\n return data.transactions;\r\n },\r\n [client]\r\n );\r\n\r\n /** Refresh balance on demand */\r\n const refreshBalance = useCallback(async () => {\r\n await fetchBalance();\r\n }, [client]);\r\n\r\n /** Refresh wallet info on demand */\r\n const refreshWallet = useCallback(async () => {\r\n await loadWallet();\r\n }, [client]);\r\n\r\n /** Sign a transaction XDR without submitting */\r\n const signTransaction = useCallback(\r\n async (xdr: string): Promise<SignResult> => {\r\n return client.signTransaction(xdr);\r\n },\r\n [client]\r\n );\r\n\r\n /** Sign and submit a transaction XDR */\r\n const signAndSubmit = useCallback(\r\n async (xdr: string): Promise<SignResult> => {\r\n return client.signAndSubmit(xdr);\r\n },\r\n [client]\r\n );\r\n\r\n const contextValue: AcceslyContextType = {\r\n loading,\r\n creating,\r\n wallet,\r\n balance,\r\n assetBalances,\r\n error,\r\n connect,\r\n disconnect,\r\n sendPayment,\r\n estimateSwap,\r\n swap,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n signTransaction,\r\n signAndSubmit,\r\n };\r\n\r\n return (\r\n <AcceslyContext.Provider value={contextValue}>\r\n {children}\r\n </AcceslyContext.Provider>\r\n );\r\n}\r\n","/**\r\n * useAccesly.ts - Public hook for accessing wallet state and actions.\r\n *\r\n * Usage:\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n *\r\n * Must be used within an <AcceslyProvider>.\r\n */\r\n\r\nimport { useContext } from 'react';\r\nimport { AcceslyContext } from '../AcceslyProvider';\r\nimport type { AcceslyContextType } from '../types';\r\n\r\nexport function useAccesly(): AcceslyContextType {\r\n const context = useContext(AcceslyContext);\r\n if (!context) {\r\n throw new Error(\r\n 'useAccesly must be used within an <AcceslyProvider>. ' +\r\n 'Wrap your app with <AcceslyProvider appId=\"acc_xxxxx\">.'\r\n );\r\n }\r\n return context;\r\n}\r\n","/**\r\n * ConnectModal.tsx - SDK login modal.\r\n *\r\n * Shows a centered modal with the Google login option.\r\n * When the user clicks \"Continue with Google\", triggers the\r\n * popup-based OAuth flow.\r\n */\r\n\r\ninterface ConnectModalProps {\r\n onClose: () => void;\r\n onConnect: () => void;\r\n}\r\n\r\nexport function ConnectModal({ onClose, onConnect }: ConnectModalProps) {\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Close button */}\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Branding */}\r\n <div style={styles.iconWrapper}>\r\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#667eea\" strokeWidth=\"1.5\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n </div>\r\n <h2 style={styles.title}>Connect to Accesly</h2>\r\n <p style={styles.subtitle}>Choose how you want to connect</p>\r\n\r\n {/* Google button */}\r\n <button onClick={onConnect} style={styles.googleBtn}>\r\n <svg style={styles.googleIcon} viewBox=\"0 0 24 24\">\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\r\n </svg>\r\n Continue with Google\r\n </button>\r\n\r\n <p style={styles.footer}>\r\n Powered by Accesly\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n modal: {\r\n position: 'relative' as const,\r\n backgroundColor: '#141428',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n padding: '2rem',\r\n width: '100%',\r\n maxWidth: '380px',\r\n textAlign: 'center' as const,\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n iconWrapper: {\r\n width: '56px',\r\n height: '56px',\r\n borderRadius: '16px',\r\n backgroundColor: 'rgba(102, 126, 234, 0.1)',\r\n border: '1px solid rgba(102, 126, 234, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 1rem',\r\n },\r\n title: {\r\n fontSize: '1.3rem',\r\n fontWeight: 700,\r\n color: '#e2e8f0',\r\n margin: '0 0 0.25rem',\r\n },\r\n subtitle: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n margin: '0 0 1.5rem',\r\n },\r\n googleBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.75rem',\r\n padding: '0.85rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n color: '#e2e8f0',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n fontSize: '0.95rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginBottom: '1.25rem',\r\n },\r\n googleIcon: {\r\n width: '20px',\r\n height: '20px',\r\n flexShrink: 0,\r\n },\r\n footer: {\r\n color: '#475569',\r\n fontSize: '0.7rem',\r\n margin: 0,\r\n },\r\n};\r\n","/**\r\n * WalletPanel.tsx - SDK wallet panel modal with tabs.\r\n *\r\n * Opened by clicking the connected pill. Mirrors the main app's UI:\r\n * - Wallet tab: Send and Receive buttons (open sub-views)\r\n * - Activity tab: Real transaction history via getTransactions\r\n * - Account tab: Wallet details with copy buttons\r\n * - Security tab: Recovery info, Rotate Keys, Disconnect\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { TransactionRecord } from '../types';\r\n\r\ntype Tab = 'wallet' | 'activity' | 'account' | 'security';\r\ntype WalletView = 'main' | 'send' | 'receive' | 'swap';\r\n\r\nconst SWAP_ASSETS = ['XLM', 'USDC', 'EURC'] as const;\r\ntype SwapAsset = (typeof SWAP_ASSETS)[number];\r\n\r\ninterface WalletPanelProps {\r\n onClose: () => void;\r\n}\r\n\r\nexport function WalletPanel({ onClose }: WalletPanelProps) {\r\n const {\r\n wallet,\r\n balance,\r\n assetBalances,\r\n disconnect,\r\n sendPayment,\r\n swap,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n } = useAccesly();\r\n\r\n const [activeTab, setActiveTab] = useState<Tab>('wallet');\r\n const [walletView, setWalletView] = useState<WalletView>('main');\r\n\r\n // Send form state\r\n const [sendDest, setSendDest] = useState('');\r\n const [sendAmount, setSendAmount] = useState('');\r\n const [sendMemo, setSendMemo] = useState('');\r\n const [sendAsset, setSendAsset] = useState('XLM');\r\n const [sending, setSending] = useState(false);\r\n const [sendResult, setSendResult] = useState<string | null>(null);\r\n const [sendError, setSendError] = useState<string | null>(null);\r\n\r\n // Swap form state\r\n const [swapFrom, setSwapFrom] = useState<SwapAsset>('USDC');\r\n const [swapTo, setSwapTo] = useState<SwapAsset>('EURC');\r\n const [swapAmount, setSwapAmount] = useState('');\r\n const [swapSlippage, setSwapSlippage] = useState('1');\r\n const [swapping, setSwapping] = useState(false);\r\n const [swapResult, setSwapResult] = useState<string | null>(null);\r\n const [swapError, setSwapError] = useState<string | null>(null);\r\n\r\n // Activity state\r\n const [transactions, setTransactions] = useState<TransactionRecord[]>([]);\r\n const [txLoading, setTxLoading] = useState(false);\r\n const [refreshTrigger, setRefreshTrigger] = useState(0);\r\n\r\n // Security state\r\n const [rotating, setRotating] = useState(false);\r\n const [rotateError, setRotateError] = useState<string | null>(null);\r\n\r\n // Clipboard feedback\r\n const [copiedField, setCopiedField] = useState<string | null>(null);\r\n\r\n // Reload transactions every time Activity tab is opened or refreshTrigger changes.\r\n // Also auto-refresh every 15s while the tab is active (catches incoming payments).\r\n useEffect(() => {\r\n if (activeTab !== 'activity') return;\r\n loadTransactions();\r\n const interval = setInterval(loadTransactions, 15000);\r\n return () => clearInterval(interval);\r\n }, [activeTab, refreshTrigger]);\r\n\r\n if (!wallet) return null;\r\n\r\n async function loadTransactions() {\r\n setTxLoading(true);\r\n try {\r\n const txs = await getTransactions(20);\r\n setTransactions(txs);\r\n } catch {\r\n // Silently fail, keep empty list\r\n } finally {\r\n setTxLoading(false);\r\n }\r\n }\r\n\r\n async function handleSend() {\r\n if (!sendDest || !sendAmount) return;\r\n setSending(true);\r\n setSendError(null);\r\n try {\r\n const result = await sendPayment({\r\n destination: sendDest,\r\n amount: sendAmount,\r\n memo: sendMemo || undefined,\r\n assetCode: sendAsset !== 'XLM' ? sendAsset : undefined,\r\n });\r\n setSendResult(result.txHash);\r\n refreshBalance();\r\n setRefreshTrigger((prev) => prev + 1);\r\n } catch (err: any) {\r\n setSendError(err.message);\r\n } finally {\r\n setSending(false);\r\n }\r\n }\r\n\r\n function resetSendForm() {\r\n setSendResult(null);\r\n setSendDest('');\r\n setSendAmount('');\r\n setSendMemo('');\r\n setSendError(null);\r\n setWalletView('main');\r\n }\r\n\r\n async function handleSwap() {\r\n if (!swapAmount) return;\r\n setSwapping(true);\r\n setSwapError(null);\r\n try {\r\n const minReceive = (\r\n parseFloat(swapAmount) * (1 - parseFloat(swapSlippage) / 100)\r\n ).toFixed(7);\r\n const result = await swap({\r\n fromAsset: swapFrom,\r\n toAsset: swapTo,\r\n amount: swapAmount,\r\n minReceive,\r\n });\r\n setSwapResult(result.txHash);\r\n refreshBalance();\r\n } catch (err: any) {\r\n setSwapError(err.message);\r\n } finally {\r\n setSwapping(false);\r\n }\r\n }\r\n\r\n function resetSwapForm() {\r\n setSwapResult(null);\r\n setSwapAmount('');\r\n setSwapError(null);\r\n setWalletView('main');\r\n }\r\n\r\n async function handleRotateKeys() {\r\n if (!confirm('This will generate a new keypair and update your contract. Continue?')) return;\r\n setRotating(true);\r\n setRotateError(null);\r\n try {\r\n await rotateKeys();\r\n await refreshWallet();\r\n } catch (err: any) {\r\n setRotateError(err.message);\r\n } finally {\r\n setRotating(false);\r\n }\r\n }\r\n\r\n function handleDisconnect() {\r\n disconnect();\r\n onClose();\r\n }\r\n\r\n function truncate(addr: string, start = 6, end = 6): string {\r\n if (addr.length <= start + end + 3) return addr;\r\n return `${addr.slice(0, start)}...${addr.slice(-end)}`;\r\n }\r\n\r\n async function copyToClipboard(text: string, field: string) {\r\n await navigator.clipboard.writeText(text);\r\n setCopiedField(field);\r\n setTimeout(() => setCopiedField(null), 1500);\r\n }\r\n\r\n function relativeTime(isoDate: string): string {\r\n const diff = Math.floor((Date.now() - new Date(isoDate).getTime()) / 1000);\r\n if (diff < 60) return 'just now';\r\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\r\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;\r\n if (diff < 172800) return 'yesterday';\r\n return `${Math.floor(diff / 86400)}d ago`;\r\n }\r\n\r\n const formattedBalance = balance\r\n ? parseFloat(balance).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n })\r\n : '---';\r\n\r\n const idColor = identiconColor(wallet.stellarAddress);\r\n\r\n const tabs: { key: Tab; label: string }[] = [\r\n { key: 'wallet', label: 'Wallet' },\r\n { key: 'activity', label: 'Activity' },\r\n { key: 'account', label: 'Account' },\r\n { key: 'security', label: 'Security' },\r\n ];\r\n\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.panel} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={styles.header}>\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n <div style={{ ...styles.identicon, backgroundColor: idColor }} />\r\n <p style={styles.headerAddr}>{truncate(wallet.stellarAddress, 8, 8)}</p>\r\n <p style={styles.headerBalance}>\r\n {formattedBalance} <span style={styles.headerCurrency}>XLM</span>\r\n </p>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div style={styles.tabBar}>\r\n {tabs.map((tab) => (\r\n <button\r\n key={tab.key}\r\n onClick={() => { setActiveTab(tab.key); setWalletView('main'); }}\r\n style={{\r\n ...styles.tab,\r\n ...(activeTab === tab.key ? styles.tabActive : {}),\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div style={styles.content}>\r\n {activeTab === 'wallet' && renderWalletTab()}\r\n {activeTab === 'activity' && renderActivityTab()}\r\n {activeTab === 'account' && renderAccountTab()}\r\n {activeTab === 'security' && renderSecurityTab()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Tab renderers\r\n // ---------------------------------------------------------------------------\r\n\r\n function renderWalletTab() {\r\n // Send success screen\r\n if (sendResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Payment Sent</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {sendResult.slice(0, 12)}...{sendResult.slice(-12)}\r\n </p>\r\n <button onClick={resetSendForm} style={styles.primaryBtn}>Done</button>\r\n </div>\r\n );\r\n }\r\n\r\n // Send form sub-view\r\n if (walletView === 'send') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Destination</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"G...\"\r\n value={sendDest}\r\n onChange={(e) => setSendDest(e.target.value)}\r\n maxLength={56}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Asset</label>\r\n <select\r\n value={sendAsset}\r\n onChange={(e) => setSendAsset(e.target.value)}\r\n style={styles.formInput}\r\n >\r\n <option value=\"XLM\">XLM — Stellar Lumens</option>\r\n <option value=\"USDC\">USDC — USD Coin</option>\r\n <option value=\"EURC\">EURC — Euro Coin</option>\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount ({sendAsset})</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={sendAmount}\r\n onChange={(e) => setSendAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Memo (optional)</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"What is this for?\"\r\n value={sendMemo}\r\n onChange={(e) => setSendMemo(e.target.value)}\r\n maxLength={28}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {sendError && <p style={styles.error}>{sendError}</p>}\r\n <button\r\n onClick={handleSend}\r\n disabled={sending || !sendDest || !sendAmount}\r\n style={{\r\n ...styles.primaryBtn,\r\n opacity: sending || !sendDest || !sendAmount ? 0.5 : 1,\r\n }}\r\n >\r\n {sending ? 'Sending...' : 'Send Payment'}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n // Receive sub-view\r\n if (walletView === 'receive') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.centeredCol}>\r\n <div style={styles.receiveIconBig}>\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <p style={{ color: '#e2e8f0', fontWeight: 600, fontSize: '1rem', margin: 0 }}>\r\n Receive XLM\r\n </p>\r\n <p style={{ color: '#64748b', fontSize: '0.8rem', margin: 0, textAlign: 'center' as const }}>\r\n Share your Stellar address to receive payments\r\n </p>\r\n <div style={styles.addressBox}>\r\n <span style={styles.addressText}>{wallet!.stellarAddress}</span>\r\n </div>\r\n <button\r\n onClick={() => copyToClipboard(wallet!.stellarAddress, 'receive')}\r\n style={styles.primaryBtn}\r\n >\r\n {copiedField === 'receive' ? 'Copied!' : 'Copy Address'}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Swap sub-view\r\n if (walletView === 'swap') {\r\n if (swapResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Swap Complete</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {swapResult.slice(0, 12)}...{swapResult.slice(-12)}\r\n </p>\r\n <button onClick={resetSwapForm} style={styles.primaryBtn}>Done</button>\r\n </div>\r\n );\r\n }\r\n const toOptions = SWAP_ASSETS.filter((c) => c !== swapFrom);\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>From</label>\r\n <select\r\n value={swapFrom}\r\n onChange={(e) => {\r\n const next = e.target.value as SwapAsset;\r\n setSwapFrom(next);\r\n if (next === swapTo) setSwapTo(SWAP_ASSETS.find((c) => c !== next)!);\r\n }}\r\n style={styles.formInput}\r\n >\r\n {SWAP_ASSETS.filter((c) => c !== swapTo).map((c) => (\r\n <option key={c} value={c}>{c}</option>\r\n ))}\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={swapAmount}\r\n onChange={(e) => setSwapAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>To</label>\r\n <select\r\n value={swapTo}\r\n onChange={(e) => setSwapTo(e.target.value as SwapAsset)}\r\n style={styles.formInput}\r\n >\r\n {toOptions.map((c) => (\r\n <option key={c} value={c}>{c}</option>\r\n ))}\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Max Slippage (%)</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"1\"\r\n value={swapSlippage}\r\n onChange={(e) => setSwapSlippage(e.target.value)}\r\n min=\"0.01\"\r\n max=\"50\"\r\n step=\"0.1\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {swapError && <p style={styles.error}>{swapError}</p>}\r\n <button\r\n onClick={handleSwap}\r\n disabled={swapping || !swapAmount}\r\n style={{ ...styles.primaryBtn, opacity: swapping || !swapAmount ? 0.5 : 1 }}\r\n >\r\n {swapping ? 'Swapping...' : `Swap ${swapFrom} → ${swapTo}`}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n // Main wallet view — Send, Receive, Swap buttons + asset cards\r\n const assetColor: Record<string, string> = { USDC: '#2775ca', EURC: '#3c7fc0' };\r\n const knownAssets = ['USDC', 'EURC'];\r\n\r\n return (\r\n <div style={styles.walletTab}>\r\n <div style={styles.actionRow}>\r\n <button onClick={() => setWalletView('send')} style={styles.actionBtn}>\r\n <div style={styles.actionIcon}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Send</span>\r\n </button>\r\n <button onClick={() => setWalletView('receive')} style={styles.actionBtn}>\r\n <div style={{ ...styles.actionIcon, ...styles.actionIconReceive }}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Receive</span>\r\n </button>\r\n <button onClick={() => setWalletView('swap')} style={styles.actionBtn}>\r\n <div style={{ ...styles.actionIcon, ...styles.actionIconSwap }}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Swap</span>\r\n </button>\r\n </div>\r\n\r\n {/* Asset balance cards — always show USDC and EURC */}\r\n <div style={styles.assetList}>\r\n {knownAssets.map((code) => {\r\n const found = assetBalances.find((a) => a.code === code);\r\n const bal = found ? parseFloat(found.balance) : 0;\r\n const isEmpty = bal === 0;\r\n return (\r\n <div key={code} style={styles.assetCard}>\r\n <div style={{ ...styles.assetDot, backgroundColor: assetColor[code] || '#667eea' }} />\r\n <div style={styles.assetInfo}>\r\n <span style={styles.assetCode}>{code}</span>\r\n {isEmpty && (\r\n <span style={styles.assetHint}>\r\n Want {code}? Use <strong>Swap</strong> to exchange your XLM.\r\n </span>\r\n )}\r\n </div>\r\n <span style={styles.assetBalance}>\r\n {bal.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\r\n </span>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n function renderActivityTab() {\r\n if (txLoading && transactions.length === 0) {\r\n return <p style={styles.emptyText}>Loading transactions...</p>;\r\n }\r\n\r\n if (transactions.length === 0) {\r\n return <p style={styles.emptyText}>No transactions yet</p>;\r\n }\r\n\r\n return (\r\n <div style={styles.txList}>\r\n {transactions.map((tx) => {\r\n const isSwap = tx.type === 'swap';\r\n const iconBg = isSwap\r\n ? 'rgba(251, 191, 36, 0.15)'\r\n : tx.type === 'received'\r\n ? 'rgba(52, 211, 153, 0.15)'\r\n : 'rgba(248, 113, 113, 0.15)';\r\n const iconColor = isSwap ? '#fbbf24' : tx.type === 'received' ? '#34d399' : '#f87171';\r\n\r\n return (\r\n <div key={tx.id} style={styles.txRow}>\r\n <div style={{ ...styles.txIcon, backgroundColor: iconBg }}>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={iconColor} strokeWidth=\"2.5\">\r\n {isSwap ? (\r\n <>\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </>\r\n ) : tx.type === 'received' ? (\r\n <>\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </>\r\n ) : (\r\n <>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </>\r\n )}\r\n </svg>\r\n </div>\r\n\r\n <div style={styles.txDetails}>\r\n <span style={styles.txType}>\r\n {isSwap ? 'Swap' : tx.type === 'received' ? 'Received' : 'Sent'}\r\n </span>\r\n <span style={styles.txCounterparty}>\r\n {isSwap\r\n ? `${tx.fromAsset} → ${tx.asset}`\r\n : (tx.type === 'received' ? 'from ' : 'to ') + truncate(tx.counterparty)}\r\n </span>\r\n </div>\r\n\r\n <div style={styles.txAmountCol}>\r\n <span style={{ ...styles.txAmount, color: iconColor }}>\r\n {isSwap\r\n ? `${parseFloat(tx.fromAmount!).toLocaleString('en-US', { maximumFractionDigits: 4 })} → ${parseFloat(tx.amount).toLocaleString('en-US', { maximumFractionDigits: 4 })}`\r\n : `${tx.type === 'received' ? '+' : '-'}${parseFloat(tx.amount).toLocaleString('en-US', { maximumFractionDigits: 2 })} ${tx.asset}`}\r\n </span>\r\n <span style={styles.txTime}>{relativeTime(tx.createdAt)}</span>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n function renderAccountTab() {\r\n const fields = [\r\n { label: 'Email', value: wallet!.email, key: 'email' },\r\n { label: 'Contract ID', value: wallet!.contractId, key: 'contract', copy: true },\r\n { label: 'Stellar Address', value: wallet!.stellarAddress, key: 'stellar', copy: true },\r\n { label: 'Public Key', value: wallet!.publicKey, key: 'pubkey', copy: true },\r\n { label: 'Created', value: new Date(wallet!.createdAt).toLocaleDateString(), key: 'created' },\r\n ];\r\n\r\n return (\r\n <div style={styles.fieldList}>\r\n {fields.map((f) => (\r\n <div key={f.key} style={styles.field}>\r\n <span style={styles.fieldLabel}>{f.label}</span>\r\n {f.copy ? (\r\n <button\r\n onClick={() => copyToClipboard(f.value, f.key)}\r\n style={{\r\n ...styles.copyBtn,\r\n color: copiedField === f.key ? '#34d399' : '#a5b4fc',\r\n borderColor: copiedField === f.key ? '#34d399' : '#2a2a4a',\r\n }}\r\n >\r\n {copiedField === f.key ? 'Copied!' : truncate(f.value, 8, 8)}\r\n </button>\r\n ) : (\r\n <span style={styles.fieldValue}>{f.value}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n function renderSecurityTab() {\r\n return (\r\n <div style={styles.securityTab}>\r\n {/* Recovery status */}\r\n <div style={styles.fieldList}>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Recovery</span>\r\n <span style={{ ...styles.fieldValue, color: '#34d399' }}>Protected</span>\r\n </div>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Method</span>\r\n <span style={styles.fieldValue}>Google ({wallet!.email})</span>\r\n </div>\r\n {wallet!.recoverySigners && wallet!.recoverySigners.length > 0 && (\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Signer</span>\r\n <span style={styles.fieldValue}>\r\n {truncate(wallet!.recoverySigners[0].publicKey)}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Rotate Keys */}\r\n {rotateError && <p style={styles.error}>{rotateError}</p>}\r\n <button\r\n onClick={handleRotateKeys}\r\n disabled={rotating}\r\n style={{\r\n ...styles.rotateBtn,\r\n opacity: rotating ? 0.5 : 1,\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M21 2v6h-6\" />\r\n <path d=\"M3 12a9 9 0 0 1 15-6.7L21 8\" />\r\n <path d=\"M3 22v-6h6\" />\r\n <path d=\"M21 12a9 9 0 0 1-15 6.7L3 16\" />\r\n </svg>\r\n {rotating ? 'Rotating...' : 'Rotate Keys'}\r\n </button>\r\n\r\n {/* Disconnect */}\r\n <button onClick={handleDisconnect} style={styles.disconnectBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n <polyline points=\"16 17 21 12 16 7\" />\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n </svg>\r\n Disconnect\r\n </button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Styles\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n panel: {\r\n backgroundColor: '#0f0f1e',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n width: '100%',\r\n maxWidth: '420px',\r\n maxHeight: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n position: 'relative' as const,\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n padding: '1.5rem 1.5rem 1rem',\r\n background: 'linear-gradient(180deg, #1a1a3a 0%, #0f0f1e 100%)',\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n identicon: {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: '50%',\r\n marginBottom: '0.5rem',\r\n },\r\n headerAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n margin: '0 0 0.25rem',\r\n },\r\n headerBalance: {\r\n fontSize: '1.75rem',\r\n fontWeight: 700,\r\n color: '#ffffff',\r\n margin: 0,\r\n },\r\n headerCurrency: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#8b8ba7',\r\n },\r\n tabBar: {\r\n display: 'flex',\r\n borderBottom: '1px solid #2a2a4a',\r\n padding: '0 0.5rem',\r\n },\r\n tab: {\r\n flex: 1,\r\n padding: '0.75rem 0.5rem',\r\n background: 'none',\r\n border: 'none',\r\n borderBottomWidth: '2px',\r\n borderBottomStyle: 'solid' as const,\r\n borderBottomColor: 'transparent',\r\n color: '#64748b',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n borderRadius: 0,\r\n },\r\n tabActive: {\r\n color: '#e2e8f0',\r\n borderBottomColor: '#667eea',\r\n },\r\n content: {\r\n flex: 1,\r\n overflowY: 'auto' as const,\r\n padding: '1rem 1.25rem 1.25rem',\r\n },\r\n\r\n // Wallet tab — action buttons\r\n walletTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n actionRow: {\r\n display: 'flex',\r\n gap: '1rem',\r\n justifyContent: 'center',\r\n },\r\n actionBtn: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1.25rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s',\r\n flex: 1,\r\n },\r\n actionIcon: {\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(102, 126, 234, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: '#667eea',\r\n },\r\n actionIconReceive: {\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n color: '#34d399',\r\n },\r\n actionIconSwap: {\r\n backgroundColor: 'rgba(251, 191, 36, 0.15)',\r\n color: '#fbbf24',\r\n },\r\n assetList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.5rem',\r\n },\r\n assetCard: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.65rem',\r\n padding: '0.65rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n },\r\n assetDot: {\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n assetInfo: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n flex: 1,\r\n },\r\n assetCode: {\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n },\r\n assetHint: {\r\n color: '#64748b',\r\n fontSize: '0.68rem',\r\n marginTop: '1px',\r\n },\r\n assetBalance: {\r\n color: '#a5b4fc',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: 'monospace',\r\n },\r\n actionLabel: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#e2e8f0',\r\n },\r\n\r\n // Sub-views (send/receive forms)\r\n subView: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.75rem',\r\n },\r\n backBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.25rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n cursor: 'pointer',\r\n padding: '0 0 0.25rem',\r\n width: 'fit-content',\r\n },\r\n formGroup: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.3rem',\r\n },\r\n formLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.75rem',\r\n fontWeight: 500,\r\n },\r\n formInput: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0',\r\n fontSize: '0.9rem',\r\n outline: 'none',\r\n width: '100%',\r\n boxSizing: 'border-box' as const,\r\n fontFamily: 'inherit',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '10px',\r\n padding: '0.75rem',\r\n fontSize: '0.95rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginTop: '0.25rem',\r\n },\r\n error: {\r\n color: '#f87171',\r\n fontSize: '0.8rem',\r\n margin: 0,\r\n padding: '0.4rem 0.6rem',\r\n backgroundColor: 'rgba(248, 113, 113, 0.1)',\r\n borderRadius: '6px',\r\n },\r\n centeredCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1rem 0',\r\n },\r\n\r\n // Receive view\r\n receiveIconBig: {\r\n width: '64px',\r\n height: '64px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '0.25rem',\r\n },\r\n addressBox: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.75rem',\r\n width: '100%',\r\n marginTop: '0.5rem',\r\n },\r\n addressText: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.7rem',\r\n color: '#a5b4fc',\r\n wordBreak: 'break-all' as const,\r\n lineHeight: 1.5,\r\n },\r\n\r\n // Activity tab\r\n txList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n txRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.75rem',\r\n padding: '0.65rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n txIcon: {\r\n width: '36px',\r\n height: '36px',\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n },\r\n txDetails: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n txType: {\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n },\r\n txCounterparty: {\r\n color: '#64748b',\r\n fontSize: '0.7rem',\r\n fontFamily: 'monospace',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap' as const,\r\n },\r\n txAmountCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'flex-end',\r\n flexShrink: 0,\r\n },\r\n txAmount: {\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n },\r\n txTime: {\r\n color: '#64748b',\r\n fontSize: '0.65rem',\r\n },\r\n emptyText: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n textAlign: 'center' as const,\r\n padding: '2rem 0',\r\n },\r\n\r\n // Account tab\r\n fieldList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n field: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '0.6rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n fieldLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n },\r\n fieldValue: {\r\n color: '#e2e8f0',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n },\r\n copyBtn: {\r\n background: 'none',\r\n border: '1px solid #2a2a4a',\r\n color: '#a5b4fc',\r\n padding: '0.2rem 0.5rem',\r\n borderRadius: '4px',\r\n fontSize: '0.72rem',\r\n fontFamily: 'monospace',\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n },\r\n\r\n // Security tab\r\n securityTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n rotateBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f59e0b',\r\n border: '1px solid rgba(245, 158, 11, 0.3)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n },\r\n disconnectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f87171',\r\n border: '1px solid rgba(248, 113, 113, 0.2)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n },\r\n};\r\n","/**\r\n * ConnectButton.tsx - SDK drop-in wallet button.\r\n *\r\n * Renders a dynamic button that:\r\n * - Shows \"Connect Wallet\" when disconnected → opens ConnectModal\r\n * - Shows a pill with address + balance when connected → opens WalletPanel\r\n * - Handles loading/creating states with spinners\r\n *\r\n * Usage:\r\n * <ConnectButton />\r\n */\r\n\r\nimport { useState } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport { ConnectModal } from './ConnectModal';\r\nimport { WalletPanel } from './WalletPanel';\r\n\r\nexport function ConnectButton() {\r\n const { wallet, balance, loading, creating, connect } = useAccesly();\r\n const [showModal, setShowModal] = useState(false);\r\n const [showPanel, setShowPanel] = useState(false);\r\n\r\n // Initial auth check\r\n if (loading) {\r\n return (\r\n <div style={styles.pillLoading}>\r\n <div style={styles.spinner} />\r\n </div>\r\n );\r\n }\r\n\r\n // Not connected\r\n if (!wallet) {\r\n return (\r\n <>\r\n <button\r\n onClick={() => setShowModal(true)}\r\n style={creating ? styles.pill : styles.connectBtn}\r\n disabled={creating}\r\n >\r\n {creating ? (\r\n <>\r\n <div style={styles.spinnerSmall} />\r\n <span style={styles.pillText}>Creating wallet...</span>\r\n </>\r\n ) : (\r\n <>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n Connect Wallet\r\n </>\r\n )}\r\n </button>\r\n\r\n {showModal && (\r\n <ConnectModal\r\n onClose={() => setShowModal(false)}\r\n onConnect={async () => {\r\n setShowModal(false);\r\n await connect();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Connected - show pill\r\n const addr = wallet.stellarAddress;\r\n const truncated = `${addr.slice(0, 4)}...${addr.slice(-4)}`;\r\n const balanceText = balance\r\n ? `${parseFloat(balance).toFixed(2)} XLM`\r\n : '--- XLM';\r\n const color = identiconColor(addr);\r\n\r\n return (\r\n <>\r\n <button onClick={() => setShowPanel(true)} style={styles.pill}>\r\n <div style={{ ...styles.identicon, backgroundColor: color }} />\r\n <span style={styles.pillAddr}>{truncated}</span>\r\n <span style={styles.divider} />\r\n <span style={styles.pillBalance}>{balanceText}</span>\r\n </button>\r\n\r\n {showPanel && <WalletPanel onClose={() => setShowPanel(false)} />}\r\n </>\r\n );\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inline styles (zero CSS dependencies)\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n connectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.6rem',\r\n padding: '0.85rem 1.75rem',\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '12px',\r\n fontSize: '1rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n transition: 'transform 0.15s, box-shadow 0.15s',\r\n boxShadow: '0 4px 15px rgba(102, 126, 234, 0.4)',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pill: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '0.5rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s, box-shadow 0.2s',\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pillLoading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n height: '42px',\r\n },\r\n identicon: {\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n pillAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#e2e8f0',\r\n },\r\n divider: {\r\n width: '1px',\r\n height: '16px',\r\n backgroundColor: '#3a3a5a',\r\n },\r\n pillBalance: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n fontWeight: 500,\r\n },\r\n pillText: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n },\r\n spinner: {\r\n width: '20px',\r\n height: '20px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n },\r\n spinnerSmall: {\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n flexShrink: 0,\r\n },\r\n};\r\n","/**\r\n * SwapModal.tsx - Swap between XLM, USDC, and EURC using the Stellar DEX.\r\n *\r\n * Uses the useAccesly hook for estimateSwap and swap — no props beyond callbacks.\r\n *\r\n * Usage:\r\n * import { SwapModal } from 'accesly';\r\n * <SwapModal onClose={() => setOpen(false)} onSuccess={() => refresh()} />\r\n */\r\n\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { SwapPathAsset } from '../types';\r\n\r\nconst ASSET_CODES = ['XLM', 'USDC', 'EURC'] as const;\r\ntype AssetCode = (typeof ASSET_CODES)[number];\r\n\r\ninterface SwapEstimate { destinationAmount: string; path: SwapPathAsset[]; }\r\n\r\ninterface SwapModalProps {\r\n onClose: () => void;\r\n onSuccess?: () => void;\r\n}\r\n\r\nexport function SwapModal({ onClose, onSuccess }: SwapModalProps) {\r\n const { estimateSwap, swap } = useAccesly();\r\n\r\n const [fromAsset, setFromAsset] = useState<AssetCode>('XLM');\r\n const [toAsset, setToAsset] = useState<AssetCode>('USDC');\r\n const [amount, setAmount] = useState('');\r\n const [slippage, setSlippage] = useState('1');\r\n\r\n const [estimate, setEstimate] = useState<SwapEstimate | null>(null);\r\n const [estimating, setEstimating] = useState(false);\r\n const [estimateError, setEstimateError] = useState<string | null>(null);\r\n\r\n const [swapping, setSwapping] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [txHash, setTxHash] = useState<string | null>(null);\r\n\r\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Fetch estimate whenever from/to/amount changes (debounced 600ms)\r\n useEffect(() => {\r\n setEstimate(null);\r\n setEstimateError(null);\r\n\r\n const num = parseFloat(amount);\r\n if (!amount || isNaN(num) || num <= 0 || fromAsset === toAsset) return;\r\n\r\n setEstimating(true);\r\n\r\n if (debounceRef.current) clearTimeout(debounceRef.current);\r\n debounceRef.current = setTimeout(async () => {\r\n try {\r\n const data = await estimateSwap(fromAsset, toAsset, amount);\r\n setEstimate(data);\r\n } catch (err: any) {\r\n setEstimateError(err.message || 'Could not get estimate');\r\n } finally {\r\n setEstimating(false);\r\n }\r\n }, 600);\r\n\r\n return () => {\r\n if (debounceRef.current) clearTimeout(debounceRef.current);\r\n };\r\n }, [amount, fromAsset, toAsset]);\r\n\r\n function handleFlip() {\r\n setFromAsset(toAsset);\r\n setToAsset(fromAsset);\r\n setAmount('');\r\n setEstimate(null);\r\n setEstimateError(null);\r\n }\r\n\r\n // minReceive = estimated output * (1 - slippage%)\r\n function calcMinReceive(): string {\r\n if (!estimate) return '0.0000001';\r\n const minRaw = parseFloat(estimate.destinationAmount) * (1 - parseFloat(slippage || '1') / 100);\r\n return Math.max(minRaw, 0.0000001).toFixed(7);\r\n }\r\n\r\n async function handleSwap(e: React.FormEvent) {\r\n e.preventDefault();\r\n if (!estimate) return;\r\n setSwapping(true);\r\n setError(null);\r\n\r\n try {\r\n const result = await swap({\r\n fromAsset,\r\n toAsset,\r\n amount,\r\n minReceive: calcMinReceive(),\r\n path: estimate.path,\r\n });\r\n setTxHash(result.txHash);\r\n onSuccess?.();\r\n } catch (err: any) {\r\n setError(err.message || 'Swap failed');\r\n } finally {\r\n setSwapping(false);\r\n }\r\n }\r\n\r\n // --- Success screen ---\r\n if (txHash) {\r\n return (\r\n <div style={s.overlay} onClick={onClose}>\r\n <div style={s.modal} onClick={(e) => e.stopPropagation()}>\r\n <div style={s.successIcon}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n </div>\r\n <h2 style={s.successTitle}>Swap Complete</h2>\r\n <p style={s.successHash}>{txHash.slice(0, 12)}...{txHash.slice(-12)}</p>\r\n <button onClick={onClose} style={s.primaryBtn}>Done</button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const toOptions = ASSET_CODES.filter((c) => c !== fromAsset);\r\n const fromOptions = ASSET_CODES.filter((c) => c !== toAsset);\r\n const canSubmit = !!estimate && !estimating && !swapping;\r\n\r\n return (\r\n <div style={s.overlay} onClick={onClose}>\r\n <div style={s.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={s.header}>\r\n <h2 style={s.title}>Swap</h2>\r\n <button onClick={onClose} style={s.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <form onSubmit={handleSwap} style={s.form}>\r\n {/* From */}\r\n <div style={s.group}>\r\n <label style={s.label}>From</label>\r\n <div style={s.row}>\r\n <select\r\n value={fromAsset}\r\n onChange={(e) => setFromAsset(e.target.value as AssetCode)}\r\n style={{ ...s.input, width: '130px', flexShrink: 0 }}\r\n >\r\n {fromOptions.map((c) => <option key={c} value={c}>{c}</option>)}\r\n </select>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={amount}\r\n onChange={(e) => setAmount(e.target.value)}\r\n required\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={{ ...s.input, flex: 1 }}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Flip button */}\r\n <div style={s.flipRow}>\r\n <button type=\"button\" onClick={handleFlip} style={s.flipBtn} title=\"Flip assets\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* To */}\r\n <div style={s.group}>\r\n <label style={s.label}>To</label>\r\n <select\r\n value={toAsset}\r\n onChange={(e) => setToAsset(e.target.value as AssetCode)}\r\n style={s.input}\r\n >\r\n {toOptions.map((c) => <option key={c} value={c}>{c}</option>)}\r\n </select>\r\n </div>\r\n\r\n {/* Estimate result */}\r\n <div style={s.estimateBox}>\r\n {estimating && (\r\n <p style={s.estimateText}>Fetching rate...</p>\r\n )}\r\n {!estimating && estimate && (\r\n <>\r\n <p style={s.estimateAmount}>\r\n ≈ {parseFloat(estimate.destinationAmount).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 6,\r\n })} {toAsset}\r\n </p>\r\n <p style={s.estimateMin}>\r\n Min received: {calcMinReceive()} {toAsset} (after {slippage}% slippage)\r\n </p>\r\n </>\r\n )}\r\n {!estimating && estimateError && (\r\n <p style={s.estimateError}>{estimateError}</p>\r\n )}\r\n {!estimating && !estimate && !estimateError && amount && (\r\n <p style={s.estimateText}>Enter an amount to see the rate</p>\r\n )}\r\n </div>\r\n\r\n {/* Slippage */}\r\n <div style={s.group}>\r\n <label style={s.label}>Max Slippage (%)</label>\r\n <input\r\n type=\"number\"\r\n value={slippage}\r\n onChange={(e) => setSlippage(e.target.value)}\r\n min=\"0.1\"\r\n max=\"50\"\r\n step=\"0.1\"\r\n style={s.input}\r\n />\r\n </div>\r\n\r\n {error && <p style={s.error}>{error}</p>}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={!canSubmit}\r\n style={{ ...s.primaryBtn, opacity: canSubmit ? 1 : 0.45 }}\r\n >\r\n {swapping ? 'Swapping...' : estimating ? 'Getting rate...' : `Swap ${fromAsset} → ${toAsset}`}\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst s: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed', inset: 0,\r\n backgroundColor: 'rgba(0,0,0,0.7)',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n zIndex: 1000, padding: '1rem',\r\n },\r\n modal: {\r\n backgroundColor: '#141428',\r\n borderRadius: '16px',\r\n border: '1px solid #2a2a4a',\r\n padding: '1.75rem',\r\n width: '100%', maxWidth: '420px',\r\n },\r\n header: {\r\n display: 'flex', justifyContent: 'space-between', alignItems: 'center',\r\n marginBottom: '1.25rem',\r\n },\r\n title: { fontSize: '1.25rem', fontWeight: 600, color: '#e2e8f0', margin: 0 },\r\n closeBtn: { background: 'none', border: 'none', color: '#64748b', cursor: 'pointer', padding: '4px' },\r\n form: { display: 'flex', flexDirection: 'column' as const, gap: '0.85rem' },\r\n group: { display: 'flex', flexDirection: 'column' as const, gap: '0.3rem' },\r\n label: { color: '#8b8ba7', fontSize: '0.78rem', fontWeight: 500 },\r\n row: { display: 'flex', gap: '0.5rem' },\r\n input: {\r\n backgroundColor: '#1a1a2e', border: '1px solid #2a2a4a',\r\n borderRadius: '8px', padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0', fontSize: '0.9rem', outline: 'none',\r\n width: '100%', boxSizing: 'border-box' as const,\r\n },\r\n flipRow: { display: 'flex', justifyContent: 'center', margin: '-0.1rem 0' },\r\n flipBtn: {\r\n background: '#1a1a2e', border: '1px solid #2a2a4a',\r\n borderRadius: '50%', width: '34px', height: '34px',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n cursor: 'pointer', color: '#667eea',\r\n },\r\n estimateBox: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '10px',\r\n padding: '0.75rem 1rem',\r\n minHeight: '54px',\r\n display: 'flex', flexDirection: 'column' as const, justifyContent: 'center', gap: '0.2rem',\r\n },\r\n estimateText: { color: '#64748b', fontSize: '0.82rem', margin: 0, textAlign: 'center' as const },\r\n estimateAmount: { color: '#e2e8f0', fontSize: '1.1rem', fontWeight: 700, margin: 0 },\r\n estimateMin: { color: '#64748b', fontSize: '0.75rem', margin: 0 },\r\n estimateError: { color: '#f87171', fontSize: '0.82rem', margin: 0 },\r\n error: {\r\n color: '#f87171', fontSize: '0.85rem', margin: 0,\r\n padding: '0.45rem 0.65rem',\r\n backgroundColor: 'rgba(248,113,113,0.1)', borderRadius: '6px',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea', color: '#fff', border: 'none',\r\n borderRadius: '10px', padding: '0.8rem',\r\n fontSize: '1rem', fontWeight: 600, cursor: 'pointer', width: '100%',\r\n },\r\n successIcon: { display: 'flex', justifyContent: 'center', marginBottom: '1rem' },\r\n successTitle: {\r\n color: '#34d399', fontSize: '1.25rem', fontWeight: 600,\r\n textAlign: 'center' as const, margin: '0 0 0.5rem',\r\n },\r\n successHash: {\r\n color: '#64748b', fontSize: '0.8rem', fontFamily: 'monospace',\r\n textAlign: 'center' as const, marginBottom: '1.5rem',\r\n },\r\n};\r\n","/**\r\n * Accesly SDK - Account abstraction wallet for Stellar.\r\n *\r\n * Quick start:\r\n *\r\n * import { AcceslyProvider, ConnectButton } from 'accesly';\r\n *\r\n * function App() {\r\n * return (\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <ConnectButton />\r\n * </AcceslyProvider>\r\n * );\r\n * }\r\n *\r\n * For custom UI, use the useAccesly hook:\r\n *\r\n * import { useAccesly } from 'accesly';\r\n *\r\n * function MyWallet() {\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n * // Build your own UI\r\n * }\r\n */\r\n\r\n// --- CSS keyframes injection ---\r\n// Since the SDK uses inline styles, we inject required keyframes once\r\nif (typeof document !== 'undefined') {\r\n const STYLE_ID = 'accesly-keyframes';\r\n if (!document.getElementById(STYLE_ID)) {\r\n const style = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n @keyframes accesly-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\n// --- Components ---\r\nexport { AcceslyProvider } from './AcceslyProvider';\r\nexport { ConnectButton } from './components/ConnectButton';\r\nexport { SwapModal } from './components/SwapModal';\r\n\r\n// --- Hooks ---\r\nexport { useAccesly } from './hooks/useAccesly';\r\n\r\n// --- Types ---\r\nexport type {\r\n AcceslyConfig,\r\n WalletInfo,\r\n AssetBalance,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n SwapParams,\r\n SwapPathAsset,\r\n SwapEstimate,\r\n SignResult,\r\n AcceslyContextType,\r\n} from './types';\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/AcceslyClient.ts","../src/auth.ts","../src/AcceslyProvider.tsx","../src/hooks/useAccesly.ts","../src/components/ConnectModal.tsx","../src/components/WalletPanel.tsx","../src/components/ConnectButton.tsx","../src/components/SwapModal.tsx","../src/index.ts"],"names":["STORAGE_KEY","DEFAULT_BASE_URL","AcceslyApiError","message","status","AcceslyClient","appId","baseUrl","tokens","raw","path","options","retry","headers","res","data","refreshToken","params","body","fromAsset","toAsset","amount","limit","xdr","openAuthPopup","resolve","reject","left","top","popup","handleMessage","event","cleanup","pollClosed","AcceslyContext","createContext","AcceslyProvider","children","config","client","useMemo","wallet","setWallet","useState","balance","setBalance","assetBalances","setAssetBalances","loading","setLoading","creating","setCreating","error","setError","useEffect","loadWallet","fetchBalance","interval","err","createWallet","native","b","others","code","issuer","connect","useCallback","disconnect","sendPayment","estimateSwap","swap","rotateKeys","getTransactions","refreshBalance","refreshWallet","signTransaction","signAndSubmit","contextValue","jsx","useAccesly","context","useContext","ConnectModal","onClose","onConnect","styles","jsxs","e","SWAP_ASSETS","WalletPanel","activeTab","setActiveTab","walletView","setWalletView","sendDest","setSendDest","sendAmount","setSendAmount","sendMemo","setSendMemo","sendAsset","setSendAsset","sending","setSending","sendResult","setSendResult","sendError","setSendError","swapFrom","setSwapFrom","swapTo","setSwapTo","swapAmount","setSwapAmount","swapSlippage","setSwapSlippage","swapping","setSwapping","swapResult","setSwapResult","swapError","setSwapError","transactions","setTransactions","txLoading","setTxLoading","refreshTrigger","setRefreshTrigger","rotating","setRotating","rotateError","setRotateError","copiedField","setCopiedField","loadTransactions","txs","handleSend","result","prev","resetSendForm","handleSwap","minReceive","resetSwapForm","handleRotateKeys","handleDisconnect","truncate","addr","start","end","copyToClipboard","text","field","relativeTime","isoDate","diff","formattedBalance","idColor","identiconColor","tabs","tab","renderWalletTab","renderActivityTab","renderAccountTab","renderSecurityTab","toOptions","c","next","assetColor","knownAssets","found","a","bal","isEmpty","tx","isSwap","iconBg","iconColor","Fragment","fields","f","address","hash","ConnectButton","showModal","setShowModal","showPanel","setShowPanel","truncated","balanceText","color","ASSET_CODES","SwapModal","onSuccess","setFromAsset","setToAsset","setAmount","slippage","setSlippage","estimate","setEstimate","estimating","setEstimating","estimateError","setEstimateError","txHash","setTxHash","debounceRef","useRef","num","handleFlip","calcMinReceive","minRaw","s","fromOptions","canSubmit","STYLE_ID","style"],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * AcceslyClient.ts - HTTP client for the Accesly backend API.\r\n *\r\n * Handles:\r\n * - All wallet API calls (balance, send, create, etc.)\r\n * - Automatic token refresh on 401 responses\r\n * - API key injection in every request\r\n */\r\n\r\nimport type { WalletInfo, TransactionRecord, SendPaymentParams, AuthTokens, SignResult, SwapParams, SwapEstimate } from './types';\r\n\r\nconst STORAGE_KEY = 'accesly_auth';\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\n/** Custom error that preserves the HTTP status code */\r\nexport class AcceslyApiError extends Error {\r\n status: number;\r\n constructor(message: string, status: number) {\r\n super(message);\r\n this.name = 'AcceslyApiError';\r\n this.status = status;\r\n }\r\n}\r\n\r\nexport class AcceslyClient {\r\n private baseUrl: string;\r\n private appId: string;\r\n\r\n constructor(appId: string, baseUrl?: string) {\r\n this.appId = appId;\r\n this.baseUrl = baseUrl || DEFAULT_BASE_URL;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Token management (stored in localStorage)\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Save auth tokens to localStorage */\r\n setTokens(tokens: AuthTokens): void {\r\n localStorage.setItem(STORAGE_KEY, JSON.stringify(tokens));\r\n }\r\n\r\n /** Get stored auth tokens */\r\n getTokens(): AuthTokens | null {\r\n const raw = localStorage.getItem(STORAGE_KEY);\r\n if (!raw) return null;\r\n try {\r\n return JSON.parse(raw) as AuthTokens;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /** Clear stored auth tokens */\r\n clearTokens(): void {\r\n localStorage.removeItem(STORAGE_KEY);\r\n }\r\n\r\n /** Check if we have a stored session */\r\n hasSession(): boolean {\r\n return this.getTokens() !== null;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // HTTP layer\r\n // ---------------------------------------------------------------------------\r\n\r\n /**\r\n * Make an authenticated request to the Accesly API.\r\n * Automatically adds the API key and auth token.\r\n * Retries once with a refreshed token on 401.\r\n */\r\n private async request<T>(\r\n path: string,\r\n options: RequestInit = {},\r\n retry = true\r\n ): Promise<T> {\r\n const tokens = this.getTokens();\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n 'x-accesly-key': this.appId,\r\n ...(tokens ? { Authorization: `Bearer ${tokens.accessToken}` } : {}),\r\n };\r\n\r\n const res = await fetch(`${this.baseUrl}${path}`, {\r\n ...options,\r\n headers: { ...headers, ...(options.headers as Record<string, string>) },\r\n });\r\n\r\n // If unauthorized, try to refresh the token once\r\n if (res.status === 401 && retry && tokens?.refreshToken) {\r\n const refreshed = await this.refreshToken(tokens.refreshToken);\r\n if (refreshed) {\r\n return this.request<T>(path, options, false);\r\n }\r\n // Refresh failed - clear tokens\r\n this.clearTokens();\r\n throw new Error('Session expired. Please reconnect.');\r\n }\r\n\r\n if (!res.ok) {\r\n const data = await res.json().catch(() => ({}));\r\n throw new AcceslyApiError(\r\n data.error || data.details || `Request failed: ${res.status}`,\r\n res.status\r\n );\r\n }\r\n\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** Refresh the access token using the refresh token */\r\n private async refreshToken(refreshToken: string): Promise<boolean> {\r\n try {\r\n const res = await fetch(`${this.baseUrl}/api/auth/refresh`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify({ refreshToken }),\r\n });\r\n\r\n if (!res.ok) return false;\r\n\r\n const data = await res.json();\r\n const tokens = this.getTokens();\r\n if (tokens) {\r\n this.setTokens({\r\n ...tokens,\r\n accessToken: data.accessToken,\r\n refreshToken: data.refreshToken,\r\n expiresAt: data.expiresAt,\r\n });\r\n }\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Wallet API methods\r\n // ---------------------------------------------------------------------------\r\n\r\n /** Get wallet info for the authenticated user */\r\n async getWalletInfo(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/info');\r\n }\r\n\r\n /** Create a new wallet for the authenticated user */\r\n async createWallet(): Promise<{ wallet: WalletInfo }> {\r\n return this.request('/api/wallet/create', { method: 'POST' });\r\n }\r\n\r\n /** Get the wallet's balance */\r\n async getBalance(): Promise<{ balances: Array<{ asset: string; balance: string }> }> {\r\n return this.request('/api/wallet/balance');\r\n }\r\n\r\n /** Send a payment (XLM, USDC, or EURC) */\r\n async sendPayment(params: SendPaymentParams): Promise<{ txHash: string }> {\r\n const body: Record<string, string> = {\r\n destination: params.destination,\r\n amount: params.amount,\r\n };\r\n if (params.memo) body.memo = params.memo;\r\n if (params.assetCode && params.assetCode !== 'XLM') {\r\n body.asset_code = params.assetCode;\r\n if (params.assetIssuer) body.asset_issuer = params.assetIssuer;\r\n }\r\n return this.request('/api/wallet/send', {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n });\r\n }\r\n\r\n /** Get a swap estimate (exchange rate + DEX path) — no auth required */\r\n async estimateSwap(fromAsset: string, toAsset: string, amount: string): Promise<SwapEstimate> {\r\n return this.request(\r\n `/api/wallet/swap-estimate?from_asset=${fromAsset}&to_asset=${toAsset}&amount=${amount}`\r\n );\r\n }\r\n\r\n /** Swap assets using the Stellar DEX (pathPaymentStrictSend) */\r\n async swap(params: SwapParams): Promise<{ txHash: string }> {\r\n const body: Record<string, unknown> = {\r\n from_asset: params.fromAsset,\r\n to_asset: params.toAsset,\r\n amount: params.amount,\r\n min_receive: params.minReceive,\r\n };\r\n if (params.path) body.path = params.path;\r\n return this.request('/api/wallet/swap', {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n });\r\n }\r\n\r\n /** Get transaction history */\r\n async getTransactions(limit = 20): Promise<{ transactions: TransactionRecord[] }> {\r\n return this.request(`/api/wallet/transactions?limit=${limit}`);\r\n }\r\n\r\n /** Rotate wallet keys */\r\n async rotateKeys(): Promise<{ newStellarAddress: string }> {\r\n return this.request('/api/wallet/rotate', { method: 'POST' });\r\n }\r\n\r\n /** Sign a transaction XDR without submitting to the network */\r\n async signTransaction(xdr: string): Promise<SignResult> {\r\n return this.request('/api/wallet/sign', {\r\n method: 'POST',\r\n body: JSON.stringify({ xdr, submit: false }),\r\n });\r\n }\r\n\r\n /** Sign a transaction XDR and submit it to the network */\r\n async signAndSubmit(xdr: string): Promise<SignResult> {\r\n return this.request('/api/wallet/sign', {\r\n method: 'POST',\r\n body: JSON.stringify({ xdr, submit: true }),\r\n });\r\n }\r\n}\r\n","/**\r\n * auth.ts - Popup-based OAuth authentication for the SDK.\r\n *\r\n * Opens a popup window pointing to the Accesly auth page.\r\n * The popup handles Google OAuth and sends the resulting tokens\r\n * back to this window via postMessage.\r\n */\r\n\r\nimport type { AuthTokens } from './types';\r\n\r\n/** Popup window dimensions */\r\nconst POPUP_WIDTH = 450;\r\nconst POPUP_HEIGHT = 600;\r\n\r\n/**\r\n * Open the Accesly auth popup and wait for the user to authenticate.\r\n * Returns the auth tokens on success, or throws on failure/cancellation.\r\n */\r\nexport function openAuthPopup(baseUrl: string, appId: string): Promise<AuthTokens> {\r\n return new Promise((resolve, reject) => {\r\n // Center the popup on screen\r\n const left = window.screenX + (window.innerWidth - POPUP_WIDTH) / 2;\r\n const top = window.screenY + (window.innerHeight - POPUP_HEIGHT) / 2;\r\n\r\n const popup = window.open(\r\n `${baseUrl}/auth/popup?appId=${appId}`,\r\n 'accesly-auth',\r\n `width=${POPUP_WIDTH},height=${POPUP_HEIGHT},left=${left},top=${top},toolbar=no,menubar=no`\r\n );\r\n\r\n if (!popup) {\r\n reject(new Error('Failed to open popup. Please allow popups for this site.'));\r\n return;\r\n }\r\n\r\n /** Handle messages from the popup */\r\n function handleMessage(event: MessageEvent) {\r\n // Only accept messages from the Accesly domain\r\n if (!event.origin.includes(new URL(baseUrl).host)) return;\r\n\r\n if (event.data?.type === 'accesly-auth-success') {\r\n cleanup();\r\n resolve(event.data.payload as AuthTokens);\r\n }\r\n\r\n if (event.data?.type === 'accesly-auth-error') {\r\n cleanup();\r\n reject(new Error(event.data.error || 'Authentication failed'));\r\n }\r\n }\r\n\r\n /** Detect if the user closed the popup manually */\r\n const pollClosed = setInterval(() => {\r\n if (popup.closed) {\r\n cleanup();\r\n reject(new Error('Authentication cancelled'));\r\n }\r\n }, 500);\r\n\r\n /** Remove all listeners and intervals */\r\n function cleanup() {\r\n window.removeEventListener('message', handleMessage);\r\n clearInterval(pollClosed);\r\n }\r\n\r\n window.addEventListener('message', handleMessage);\r\n });\r\n}\r\n","/**\r\n * AcceslyProvider.tsx - Main SDK provider component.\r\n *\r\n * Wraps the application and provides wallet state to all children.\r\n * Handles auth token management, wallet loading, and balance refresh.\r\n *\r\n * Usage:\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <App />\r\n * </AcceslyProvider>\r\n */\r\n\r\nimport {\r\n createContext,\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useMemo,\r\n type ReactNode,\r\n} from 'react';\r\nimport { AcceslyClient, AcceslyApiError } from './AcceslyClient';\r\nimport { openAuthPopup } from './auth';\r\nimport type {\r\n AcceslyConfig,\r\n AcceslyContextType,\r\n WalletInfo,\r\n AssetBalance,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n SwapParams,\r\n SwapEstimate,\r\n SignResult,\r\n} from './types';\r\n\r\n/** Internal context - use the useAccesly hook to access it */\r\nexport const AcceslyContext = createContext<AcceslyContextType | null>(null);\r\n\r\nconst DEFAULT_BASE_URL = 'https://accesly.vercel.app';\r\n\r\nexport function AcceslyProvider({\r\n children,\r\n ...config\r\n}: AcceslyConfig & { children: ReactNode }) {\r\n const baseUrl = config.baseUrl || DEFAULT_BASE_URL;\r\n\r\n // Create a stable client instance\r\n const client = useMemo(\r\n () => new AcceslyClient(config.appId, baseUrl),\r\n [config.appId, baseUrl]\r\n );\r\n\r\n const [wallet, setWallet] = useState<WalletInfo | null>(null);\r\n const [balance, setBalance] = useState<string | null>(null);\r\n const [assetBalances, setAssetBalances] = useState<AssetBalance[]>([]);\r\n const [loading, setLoading] = useState(true);\r\n const [creating, setCreating] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n // --- Check for existing session on mount ---\r\n useEffect(() => {\r\n if (client.hasSession()) {\r\n loadWallet();\r\n } else {\r\n setLoading(false);\r\n }\r\n }, [client]);\r\n\r\n // --- Auto-refresh balance every 15s when connected ---\r\n useEffect(() => {\r\n if (!wallet) return;\r\n fetchBalance();\r\n const interval = setInterval(fetchBalance, 15000);\r\n return () => clearInterval(interval);\r\n }, [wallet]);\r\n\r\n /** Load wallet info from the backend. Creates wallet if first login. */\r\n async function loadWallet() {\r\n setError(null);\r\n try {\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n // If 404, user has no wallet yet — create one (first login)\r\n if (err instanceof AcceslyApiError && err.status === 404) {\r\n await createWallet();\r\n return;\r\n }\r\n // If session expired, clear tokens and let user reconnect\r\n if (err instanceof AcceslyApiError && err.status === 401) {\r\n client.clearTokens();\r\n setWallet(null);\r\n }\r\n setError(err.message);\r\n } finally {\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Create a new wallet for the user */\r\n async function createWallet() {\r\n setCreating(true);\r\n setError(null);\r\n try {\r\n await client.createWallet();\r\n // Fetch the full wallet info after creation\r\n const data = await client.getWalletInfo();\r\n setWallet(data.wallet);\r\n config.onConnect?.(data.wallet);\r\n } catch (err: any) {\r\n setError(err.message);\r\n } finally {\r\n setCreating(false);\r\n setLoading(false);\r\n }\r\n }\r\n\r\n /** Fetch current XLM and asset balances */\r\n async function fetchBalance() {\r\n try {\r\n const data = await client.getBalance();\r\n const native = data.balances.find((b) => b.asset === 'native');\r\n setBalance(native?.balance || '0');\r\n const others: AssetBalance[] = data.balances\r\n .filter((b) => b.asset !== 'native')\r\n .map((b) => {\r\n const [code, issuer] = b.asset.split(':');\r\n return { code, issuer, balance: b.balance };\r\n });\r\n setAssetBalances(others);\r\n } catch {\r\n // Silently fail, keep previous balance\r\n }\r\n }\r\n\r\n /** Open auth popup, get tokens, load wallet */\r\n const connect = useCallback(async () => {\r\n setError(null);\r\n try {\r\n const tokens = await openAuthPopup(baseUrl, config.appId);\r\n client.setTokens(tokens);\r\n setLoading(true);\r\n await loadWallet();\r\n } catch (err: any) {\r\n if (err.message !== 'Authentication cancelled') {\r\n setError(err.message);\r\n }\r\n }\r\n }, [baseUrl, config.appId, client]);\r\n\r\n /** Disconnect: clear tokens and state */\r\n const disconnect = useCallback(() => {\r\n client.clearTokens();\r\n setWallet(null);\r\n setBalance(null);\r\n setAssetBalances([]);\r\n setError(null);\r\n config.onDisconnect?.();\r\n }, [client, config.onDisconnect]);\r\n\r\n /** Send a payment (XLM, USDC, or EURC) */\r\n const sendPayment = useCallback(\r\n async (params: SendPaymentParams) => {\r\n return client.sendPayment(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Get a swap estimate (exchange rate + DEX path) */\r\n const estimateSwap = useCallback(\r\n async (fromAsset: string, toAsset: string, amount: string): Promise<SwapEstimate> => {\r\n return client.estimateSwap(fromAsset, toAsset, amount);\r\n },\r\n [client]\r\n );\r\n\r\n /** Swap assets via the Stellar DEX */\r\n const swap = useCallback(\r\n async (params: SwapParams) => {\r\n return client.swap(params);\r\n },\r\n [client]\r\n );\r\n\r\n /** Rotate wallet keys */\r\n const rotateKeys = useCallback(async () => {\r\n return client.rotateKeys();\r\n }, [client]);\r\n\r\n /** Get transaction history */\r\n const getTransactions = useCallback(\r\n async (limit = 20) => {\r\n const data = await client.getTransactions(limit);\r\n return data.transactions;\r\n },\r\n [client]\r\n );\r\n\r\n /** Refresh balance on demand */\r\n const refreshBalance = useCallback(async () => {\r\n await fetchBalance();\r\n }, [client]);\r\n\r\n /** Refresh wallet info on demand */\r\n const refreshWallet = useCallback(async () => {\r\n await loadWallet();\r\n }, [client]);\r\n\r\n /** Sign a transaction XDR without submitting */\r\n const signTransaction = useCallback(\r\n async (xdr: string): Promise<SignResult> => {\r\n return client.signTransaction(xdr);\r\n },\r\n [client]\r\n );\r\n\r\n /** Sign and submit a transaction XDR */\r\n const signAndSubmit = useCallback(\r\n async (xdr: string): Promise<SignResult> => {\r\n return client.signAndSubmit(xdr);\r\n },\r\n [client]\r\n );\r\n\r\n const contextValue: AcceslyContextType = {\r\n loading,\r\n creating,\r\n wallet,\r\n balance,\r\n assetBalances,\r\n error,\r\n connect,\r\n disconnect,\r\n sendPayment,\r\n estimateSwap,\r\n swap,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n signTransaction,\r\n signAndSubmit,\r\n };\r\n\r\n return (\r\n <AcceslyContext.Provider value={contextValue}>\r\n {children}\r\n </AcceslyContext.Provider>\r\n );\r\n}\r\n","/**\r\n * useAccesly.ts - Public hook for accessing wallet state and actions.\r\n *\r\n * Usage:\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n *\r\n * Must be used within an <AcceslyProvider>.\r\n */\r\n\r\nimport { useContext } from 'react';\r\nimport { AcceslyContext } from '../AcceslyProvider';\r\nimport type { AcceslyContextType } from '../types';\r\n\r\nexport function useAccesly(): AcceslyContextType {\r\n const context = useContext(AcceslyContext);\r\n if (!context) {\r\n throw new Error(\r\n 'useAccesly must be used within an <AcceslyProvider>. ' +\r\n 'Wrap your app with <AcceslyProvider appId=\"acc_xxxxx\">.'\r\n );\r\n }\r\n return context;\r\n}\r\n","/**\r\n * ConnectModal.tsx - SDK login modal.\r\n *\r\n * Shows a centered modal with the Google login option.\r\n * When the user clicks \"Continue with Google\", triggers the\r\n * popup-based OAuth flow.\r\n */\r\n\r\ninterface ConnectModalProps {\r\n onClose: () => void;\r\n onConnect: () => void;\r\n}\r\n\r\nexport function ConnectModal({ onClose, onConnect }: ConnectModalProps) {\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Close button */}\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n\r\n {/* Branding */}\r\n <div style={styles.iconWrapper}>\r\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#667eea\" strokeWidth=\"1.5\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n </div>\r\n <h2 style={styles.title}>Connect to Accesly</h2>\r\n <p style={styles.subtitle}>Choose how you want to connect</p>\r\n\r\n {/* Google button */}\r\n <button onClick={onConnect} style={styles.googleBtn}>\r\n <svg style={styles.googleIcon} viewBox=\"0 0 24 24\">\r\n <path d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.06 5.06 0 0 1-2.2 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1z\" fill=\"#4285F4\" />\r\n <path d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\" fill=\"#34A853\" />\r\n <path d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\" fill=\"#FBBC05\" />\r\n <path d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\" fill=\"#EA4335\" />\r\n </svg>\r\n Continue with Google\r\n </button>\r\n\r\n <p style={styles.footer}>\r\n Powered by Accesly\r\n </p>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n modal: {\r\n position: 'relative' as const,\r\n backgroundColor: '#141428',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n padding: '2rem',\r\n width: '100%',\r\n maxWidth: '380px',\r\n textAlign: 'center' as const,\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n iconWrapper: {\r\n width: '56px',\r\n height: '56px',\r\n borderRadius: '16px',\r\n backgroundColor: 'rgba(102, 126, 234, 0.1)',\r\n border: '1px solid rgba(102, 126, 234, 0.2)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n margin: '0 auto 1rem',\r\n },\r\n title: {\r\n fontSize: '1.3rem',\r\n fontWeight: 700,\r\n color: '#e2e8f0',\r\n margin: '0 0 0.25rem',\r\n },\r\n subtitle: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n margin: '0 0 1.5rem',\r\n },\r\n googleBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.75rem',\r\n padding: '0.85rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n color: '#e2e8f0',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n fontSize: '0.95rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginBottom: '1.25rem',\r\n },\r\n googleIcon: {\r\n width: '20px',\r\n height: '20px',\r\n flexShrink: 0,\r\n },\r\n footer: {\r\n color: '#475569',\r\n fontSize: '0.7rem',\r\n margin: 0,\r\n },\r\n};\r\n","/**\r\n * WalletPanel.tsx - SDK wallet panel modal with tabs.\r\n *\r\n * Opened by clicking the connected pill. Mirrors the main app's UI:\r\n * - Wallet tab: Send and Receive buttons (open sub-views)\r\n * - Activity tab: Real transaction history via getTransactions\r\n * - Account tab: Wallet details with copy buttons\r\n * - Security tab: Recovery info, Rotate Keys, Disconnect\r\n */\r\n\r\nimport { useState, useEffect, useCallback } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { TransactionRecord } from '../types';\r\n\r\ntype Tab = 'wallet' | 'activity' | 'account' | 'security';\r\ntype WalletView = 'main' | 'send' | 'receive' | 'swap';\r\n\r\nconst SWAP_ASSETS = ['XLM', 'USDC', 'EURC'] as const;\r\ntype SwapAsset = (typeof SWAP_ASSETS)[number];\r\n\r\ninterface WalletPanelProps {\r\n onClose: () => void;\r\n}\r\n\r\nexport function WalletPanel({ onClose }: WalletPanelProps) {\r\n const {\r\n wallet,\r\n balance,\r\n assetBalances,\r\n disconnect,\r\n sendPayment,\r\n swap,\r\n rotateKeys,\r\n getTransactions,\r\n refreshBalance,\r\n refreshWallet,\r\n } = useAccesly();\r\n\r\n const [activeTab, setActiveTab] = useState<Tab>('wallet');\r\n const [walletView, setWalletView] = useState<WalletView>('main');\r\n\r\n // Send form state\r\n const [sendDest, setSendDest] = useState('');\r\n const [sendAmount, setSendAmount] = useState('');\r\n const [sendMemo, setSendMemo] = useState('');\r\n const [sendAsset, setSendAsset] = useState('XLM');\r\n const [sending, setSending] = useState(false);\r\n const [sendResult, setSendResult] = useState<string | null>(null);\r\n const [sendError, setSendError] = useState<string | null>(null);\r\n\r\n // Swap form state\r\n const [swapFrom, setSwapFrom] = useState<SwapAsset>('USDC');\r\n const [swapTo, setSwapTo] = useState<SwapAsset>('EURC');\r\n const [swapAmount, setSwapAmount] = useState('');\r\n const [swapSlippage, setSwapSlippage] = useState('1');\r\n const [swapping, setSwapping] = useState(false);\r\n const [swapResult, setSwapResult] = useState<string | null>(null);\r\n const [swapError, setSwapError] = useState<string | null>(null);\r\n\r\n // Activity state\r\n const [transactions, setTransactions] = useState<TransactionRecord[]>([]);\r\n const [txLoading, setTxLoading] = useState(false);\r\n const [refreshTrigger, setRefreshTrigger] = useState(0);\r\n\r\n // Security state\r\n const [rotating, setRotating] = useState(false);\r\n const [rotateError, setRotateError] = useState<string | null>(null);\r\n\r\n // Clipboard feedback\r\n const [copiedField, setCopiedField] = useState<string | null>(null);\r\n\r\n // Reload transactions every time Activity tab is opened or refreshTrigger changes.\r\n // Also auto-refresh every 15s while the tab is active (catches incoming payments).\r\n useEffect(() => {\r\n if (activeTab !== 'activity') return;\r\n loadTransactions();\r\n const interval = setInterval(loadTransactions, 15000);\r\n return () => clearInterval(interval);\r\n }, [activeTab, refreshTrigger]);\r\n\r\n if (!wallet) return null;\r\n\r\n async function loadTransactions() {\r\n setTxLoading(true);\r\n try {\r\n const txs = await getTransactions(20);\r\n setTransactions(txs);\r\n } catch {\r\n // Silently fail, keep empty list\r\n } finally {\r\n setTxLoading(false);\r\n }\r\n }\r\n\r\n async function handleSend() {\r\n if (!sendDest || !sendAmount) return;\r\n setSending(true);\r\n setSendError(null);\r\n try {\r\n const result = await sendPayment({\r\n destination: sendDest,\r\n amount: sendAmount,\r\n memo: sendMemo || undefined,\r\n assetCode: sendAsset !== 'XLM' ? sendAsset : undefined,\r\n });\r\n setSendResult(result.txHash);\r\n refreshBalance();\r\n setRefreshTrigger((prev) => prev + 1);\r\n } catch (err: any) {\r\n setSendError(err.message);\r\n } finally {\r\n setSending(false);\r\n }\r\n }\r\n\r\n function resetSendForm() {\r\n setSendResult(null);\r\n setSendDest('');\r\n setSendAmount('');\r\n setSendMemo('');\r\n setSendError(null);\r\n setWalletView('main');\r\n }\r\n\r\n async function handleSwap() {\r\n if (!swapAmount) return;\r\n setSwapping(true);\r\n setSwapError(null);\r\n try {\r\n const minReceive = (\r\n parseFloat(swapAmount) * (1 - parseFloat(swapSlippage) / 100)\r\n ).toFixed(7);\r\n const result = await swap({\r\n fromAsset: swapFrom,\r\n toAsset: swapTo,\r\n amount: swapAmount,\r\n minReceive,\r\n });\r\n setSwapResult(result.txHash);\r\n refreshBalance();\r\n } catch (err: any) {\r\n setSwapError(err.message);\r\n } finally {\r\n setSwapping(false);\r\n }\r\n }\r\n\r\n function resetSwapForm() {\r\n setSwapResult(null);\r\n setSwapAmount('');\r\n setSwapError(null);\r\n setWalletView('main');\r\n }\r\n\r\n async function handleRotateKeys() {\r\n if (!confirm('This will generate a new keypair and update your contract. Continue?')) return;\r\n setRotating(true);\r\n setRotateError(null);\r\n try {\r\n await rotateKeys();\r\n await refreshWallet();\r\n } catch (err: any) {\r\n setRotateError(err.message);\r\n } finally {\r\n setRotating(false);\r\n }\r\n }\r\n\r\n function handleDisconnect() {\r\n disconnect();\r\n onClose();\r\n }\r\n\r\n function truncate(addr: string, start = 6, end = 6): string {\r\n if (addr.length <= start + end + 3) return addr;\r\n return `${addr.slice(0, start)}...${addr.slice(-end)}`;\r\n }\r\n\r\n async function copyToClipboard(text: string, field: string) {\r\n await navigator.clipboard.writeText(text);\r\n setCopiedField(field);\r\n setTimeout(() => setCopiedField(null), 1500);\r\n }\r\n\r\n function relativeTime(isoDate: string): string {\r\n const diff = Math.floor((Date.now() - new Date(isoDate).getTime()) / 1000);\r\n if (diff < 60) return 'just now';\r\n if (diff < 3600) return `${Math.floor(diff / 60)}m ago`;\r\n if (diff < 86400) return `${Math.floor(diff / 3600)}h ago`;\r\n if (diff < 172800) return 'yesterday';\r\n return `${Math.floor(diff / 86400)}d ago`;\r\n }\r\n\r\n const formattedBalance = balance\r\n ? parseFloat(balance).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 2,\r\n })\r\n : '---';\r\n\r\n const idColor = identiconColor(wallet.stellarAddress);\r\n\r\n const tabs: { key: Tab; label: string }[] = [\r\n { key: 'wallet', label: 'Wallet' },\r\n { key: 'activity', label: 'Activity' },\r\n { key: 'account', label: 'Account' },\r\n { key: 'security', label: 'Security' },\r\n ];\r\n\r\n return (\r\n <div style={styles.overlay} onClick={onClose}>\r\n <div style={styles.panel} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={styles.header}>\r\n <button onClick={onClose} style={styles.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n <div style={{ ...styles.identicon, backgroundColor: idColor }} />\r\n <p style={styles.headerAddr}>{truncate(wallet.stellarAddress, 8, 8)}</p>\r\n <p style={styles.headerBalance}>\r\n {formattedBalance} <span style={styles.headerCurrency}>XLM</span>\r\n </p>\r\n </div>\r\n\r\n {/* Tab bar */}\r\n <div style={styles.tabBar}>\r\n {tabs.map((tab) => (\r\n <button\r\n key={tab.key}\r\n onClick={() => { setActiveTab(tab.key); setWalletView('main'); }}\r\n style={{\r\n ...styles.tab,\r\n ...(activeTab === tab.key ? styles.tabActive : {}),\r\n }}\r\n >\r\n {tab.label}\r\n </button>\r\n ))}\r\n </div>\r\n\r\n {/* Tab content */}\r\n <div style={styles.content}>\r\n {activeTab === 'wallet' && renderWalletTab()}\r\n {activeTab === 'activity' && renderActivityTab()}\r\n {activeTab === 'account' && renderAccountTab()}\r\n {activeTab === 'security' && renderSecurityTab()}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Tab renderers\r\n // ---------------------------------------------------------------------------\r\n\r\n function renderWalletTab() {\r\n // Send success screen\r\n if (sendResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Payment Sent</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {sendResult.slice(0, 12)}...{sendResult.slice(-12)}\r\n </p>\r\n <button onClick={resetSendForm} style={styles.primaryBtn}>Done</button>\r\n </div>\r\n );\r\n }\r\n\r\n // Send form sub-view\r\n if (walletView === 'send') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Destination</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"G...\"\r\n value={sendDest}\r\n onChange={(e) => setSendDest(e.target.value)}\r\n maxLength={56}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Asset</label>\r\n <select\r\n value={sendAsset}\r\n onChange={(e) => setSendAsset(e.target.value)}\r\n style={styles.formInput}\r\n >\r\n <option value=\"XLM\">XLM — Stellar Lumens</option>\r\n <option value=\"USDC\">USDC — USD Coin</option>\r\n <option value=\"EURC\">EURC — Euro Coin</option>\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount ({sendAsset})</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={sendAmount}\r\n onChange={(e) => setSendAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Memo (optional)</label>\r\n <input\r\n type=\"text\"\r\n placeholder=\"What is this for?\"\r\n value={sendMemo}\r\n onChange={(e) => setSendMemo(e.target.value)}\r\n maxLength={28}\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {sendError && <p style={styles.error}>{sendError}</p>}\r\n <button\r\n onClick={handleSend}\r\n disabled={sending || !sendDest || !sendAmount}\r\n style={{\r\n ...styles.primaryBtn,\r\n opacity: sending || !sendDest || !sendAmount ? 0.5 : 1,\r\n }}\r\n >\r\n {sending ? 'Sending...' : 'Send Payment'}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n // Receive sub-view\r\n if (walletView === 'receive') {\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.centeredCol}>\r\n <div style={styles.receiveIconBig}>\r\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <p style={{ color: '#e2e8f0', fontWeight: 600, fontSize: '1rem', margin: 0 }}>\r\n Receive XLM\r\n </p>\r\n <p style={{ color: '#64748b', fontSize: '0.8rem', margin: 0, textAlign: 'center' as const }}>\r\n Share your Stellar address to receive payments\r\n </p>\r\n <div style={styles.addressBox}>\r\n <span style={styles.addressText}>{wallet!.stellarAddress}</span>\r\n </div>\r\n <button\r\n onClick={() => copyToClipboard(wallet!.stellarAddress, 'receive')}\r\n style={styles.primaryBtn}\r\n >\r\n {copiedField === 'receive' ? 'Copied!' : 'Copy Address'}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n // Swap sub-view\r\n if (walletView === 'swap') {\r\n if (swapResult) {\r\n return (\r\n <div style={styles.centeredCol}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n <p style={{ color: '#34d399', fontWeight: 600, margin: '0.5rem 0' }}>Swap Complete</p>\r\n <p style={{ color: '#64748b', fontSize: '0.75rem', fontFamily: 'monospace' }}>\r\n {swapResult.slice(0, 12)}...{swapResult.slice(-12)}\r\n </p>\r\n <button onClick={resetSwapForm} style={styles.primaryBtn}>Done</button>\r\n </div>\r\n );\r\n }\r\n const toOptions = SWAP_ASSETS.filter((c) => c !== swapFrom);\r\n return (\r\n <div style={styles.subView}>\r\n <button onClick={() => setWalletView('main')} style={styles.backBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"15 18 9 12 15 6\" />\r\n </svg>\r\n Back\r\n </button>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>From</label>\r\n <select\r\n value={swapFrom}\r\n onChange={(e) => {\r\n const next = e.target.value as SwapAsset;\r\n setSwapFrom(next);\r\n if (next === swapTo) setSwapTo(SWAP_ASSETS.find((c) => c !== next)!);\r\n }}\r\n style={styles.formInput}\r\n >\r\n {SWAP_ASSETS.filter((c) => c !== swapTo).map((c) => (\r\n <option key={c} value={c}>{c}</option>\r\n ))}\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Amount</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={swapAmount}\r\n onChange={(e) => setSwapAmount(e.target.value)}\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>To</label>\r\n <select\r\n value={swapTo}\r\n onChange={(e) => setSwapTo(e.target.value as SwapAsset)}\r\n style={styles.formInput}\r\n >\r\n {toOptions.map((c) => (\r\n <option key={c} value={c}>{c}</option>\r\n ))}\r\n </select>\r\n </div>\r\n <div style={styles.formGroup}>\r\n <label style={styles.formLabel}>Max Slippage (%)</label>\r\n <input\r\n type=\"number\"\r\n placeholder=\"1\"\r\n value={swapSlippage}\r\n onChange={(e) => setSwapSlippage(e.target.value)}\r\n min=\"0.01\"\r\n max=\"50\"\r\n step=\"0.1\"\r\n style={styles.formInput}\r\n />\r\n </div>\r\n {swapError && <p style={styles.error}>{swapError}</p>}\r\n <button\r\n onClick={handleSwap}\r\n disabled={swapping || !swapAmount}\r\n style={{ ...styles.primaryBtn, opacity: swapping || !swapAmount ? 0.5 : 1 }}\r\n >\r\n {swapping ? 'Swapping...' : `Swap ${swapFrom} → ${swapTo}`}\r\n </button>\r\n </div>\r\n );\r\n }\r\n\r\n // Main wallet view — Send, Receive, Swap buttons + asset cards\r\n const assetColor: Record<string, string> = { USDC: '#2775ca', EURC: '#3c7fc0' };\r\n const knownAssets = ['USDC', 'EURC'];\r\n\r\n return (\r\n <div style={styles.walletTab}>\r\n <div style={styles.actionRow}>\r\n <button onClick={() => setWalletView('send')} style={styles.actionBtn}>\r\n <div style={styles.actionIcon}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Send</span>\r\n </button>\r\n <button onClick={() => setWalletView('receive')} style={styles.actionBtn}>\r\n <div style={{ ...styles.actionIcon, ...styles.actionIconReceive }}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Receive</span>\r\n </button>\r\n <button onClick={() => setWalletView('swap')} style={styles.actionBtn}>\r\n <div style={{ ...styles.actionIcon, ...styles.actionIconSwap }}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </svg>\r\n </div>\r\n <span style={styles.actionLabel}>Swap</span>\r\n </button>\r\n </div>\r\n\r\n {/* Asset balance cards — always show USDC and EURC */}\r\n <div style={styles.assetList}>\r\n {knownAssets.map((code) => {\r\n const found = assetBalances.find((a) => a.code === code);\r\n const bal = found ? parseFloat(found.balance) : 0;\r\n const isEmpty = bal === 0;\r\n return (\r\n <div key={code} style={styles.assetCard}>\r\n <div style={{ ...styles.assetDot, backgroundColor: assetColor[code] || '#667eea' }} />\r\n <div style={styles.assetInfo}>\r\n <span style={styles.assetCode}>{code}</span>\r\n {isEmpty && (\r\n <span style={styles.assetHint}>\r\n Want {code}? Use <strong>Swap</strong> to exchange your XLM.\r\n </span>\r\n )}\r\n </div>\r\n <span style={styles.assetBalance}>\r\n {bal.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}\r\n </span>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n function renderActivityTab() {\r\n if (txLoading && transactions.length === 0) {\r\n return <p style={styles.emptyText}>Loading transactions...</p>;\r\n }\r\n\r\n if (transactions.length === 0) {\r\n return <p style={styles.emptyText}>No transactions yet</p>;\r\n }\r\n\r\n return (\r\n <div style={styles.txList}>\r\n {transactions.map((tx) => {\r\n const isSwap = tx.type === 'swap';\r\n const iconBg = isSwap\r\n ? 'rgba(251, 191, 36, 0.15)'\r\n : tx.type === 'received'\r\n ? 'rgba(52, 211, 153, 0.15)'\r\n : 'rgba(248, 113, 113, 0.15)';\r\n const iconColor = isSwap ? '#fbbf24' : tx.type === 'received' ? '#34d399' : '#f87171';\r\n\r\n return (\r\n <div key={tx.id} style={styles.txRow}>\r\n <div style={{ ...styles.txIcon, backgroundColor: iconBg }}>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={iconColor} strokeWidth=\"2.5\">\r\n {isSwap ? (\r\n <>\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </>\r\n ) : tx.type === 'received' ? (\r\n <>\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" />\r\n <polyline points=\"19 12 12 19 5 12\" />\r\n </>\r\n ) : (\r\n <>\r\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\" />\r\n <polyline points=\"5 12 12 5 19 12\" />\r\n </>\r\n )}\r\n </svg>\r\n </div>\r\n\r\n <div style={styles.txDetails}>\r\n <span style={styles.txType}>\r\n {isSwap ? 'Swap' : tx.type === 'received' ? 'Received' : 'Sent'}\r\n </span>\r\n <span style={styles.txCounterparty}>\r\n {isSwap\r\n ? `${tx.fromAsset} → ${tx.asset}`\r\n : (tx.type === 'received' ? 'from ' : 'to ') + truncate(tx.counterparty)}\r\n </span>\r\n </div>\r\n\r\n <div style={styles.txAmountCol}>\r\n <span style={{ ...styles.txAmount, color: iconColor }}>\r\n {isSwap\r\n ? `${parseFloat(tx.fromAmount!).toLocaleString('en-US', { maximumFractionDigits: 4 })} → ${parseFloat(tx.amount).toLocaleString('en-US', { maximumFractionDigits: 4 })}`\r\n : `${tx.type === 'received' ? '+' : '-'}${parseFloat(tx.amount).toLocaleString('en-US', { maximumFractionDigits: 2 })} ${tx.asset}`}\r\n </span>\r\n <span style={styles.txTime}>{relativeTime(tx.createdAt)}</span>\r\n </div>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n );\r\n }\r\n\r\n function renderAccountTab() {\r\n const fields = [\r\n { label: 'Email', value: wallet!.email, key: 'email' },\r\n { label: 'Contract ID', value: wallet!.contractId, key: 'contract', copy: true },\r\n { label: 'Stellar Address', value: wallet!.stellarAddress, key: 'stellar', copy: true },\r\n { label: 'Public Key', value: wallet!.publicKey, key: 'pubkey', copy: true },\r\n { label: 'Created', value: new Date(wallet!.createdAt).toLocaleDateString(), key: 'created' },\r\n ];\r\n\r\n return (\r\n <div style={styles.fieldList}>\r\n {fields.map((f) => (\r\n <div key={f.key} style={styles.field}>\r\n <span style={styles.fieldLabel}>{f.label}</span>\r\n {f.copy ? (\r\n <button\r\n onClick={() => copyToClipboard(f.value, f.key)}\r\n style={{\r\n ...styles.copyBtn,\r\n color: copiedField === f.key ? '#34d399' : '#a5b4fc',\r\n borderColor: copiedField === f.key ? '#34d399' : '#2a2a4a',\r\n }}\r\n >\r\n {copiedField === f.key ? 'Copied!' : truncate(f.value, 8, 8)}\r\n </button>\r\n ) : (\r\n <span style={styles.fieldValue}>{f.value}</span>\r\n )}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n }\r\n\r\n function renderSecurityTab() {\r\n return (\r\n <div style={styles.securityTab}>\r\n {/* Recovery status */}\r\n <div style={styles.fieldList}>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Recovery</span>\r\n <span style={{ ...styles.fieldValue, color: '#34d399' }}>Protected</span>\r\n </div>\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Method</span>\r\n <span style={styles.fieldValue}>Google ({wallet!.email})</span>\r\n </div>\r\n {wallet!.recoverySigners && wallet!.recoverySigners.length > 0 && (\r\n <div style={styles.field}>\r\n <span style={styles.fieldLabel}>Signer</span>\r\n <span style={styles.fieldValue}>\r\n {truncate(wallet!.recoverySigners[0].publicKey)}\r\n </span>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {/* Rotate Keys */}\r\n {rotateError && <p style={styles.error}>{rotateError}</p>}\r\n <button\r\n onClick={handleRotateKeys}\r\n disabled={rotating}\r\n style={{\r\n ...styles.rotateBtn,\r\n opacity: rotating ? 0.5 : 1,\r\n }}\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M21 2v6h-6\" />\r\n <path d=\"M3 12a9 9 0 0 1 15-6.7L21 8\" />\r\n <path d=\"M3 22v-6h6\" />\r\n <path d=\"M21 12a9 9 0 0 1-15 6.7L3 16\" />\r\n </svg>\r\n {rotating ? 'Rotating...' : 'Rotate Keys'}\r\n </button>\r\n\r\n {/* Disconnect */}\r\n <button onClick={handleDisconnect} style={styles.disconnectBtn}>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\" />\r\n <polyline points=\"16 17 21 12 16 7\" />\r\n <line x1=\"21\" y1=\"12\" x2=\"9\" y2=\"12\" />\r\n </svg>\r\n Disconnect\r\n </button>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Styles\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed',\r\n inset: 0,\r\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\r\n backdropFilter: 'blur(4px)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n zIndex: 99999,\r\n padding: '1rem',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n panel: {\r\n backgroundColor: '#0f0f1e',\r\n borderRadius: '20px',\r\n border: '1px solid #2a2a4a',\r\n width: '100%',\r\n maxWidth: '420px',\r\n maxHeight: '85vh',\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n overflow: 'hidden',\r\n },\r\n header: {\r\n position: 'relative' as const,\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n padding: '1.5rem 1.5rem 1rem',\r\n background: 'linear-gradient(180deg, #1a1a3a 0%, #0f0f1e 100%)',\r\n },\r\n closeBtn: {\r\n position: 'absolute' as const,\r\n top: '1rem',\r\n right: '1rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#64748b',\r\n cursor: 'pointer',\r\n padding: '4px',\r\n },\r\n identicon: {\r\n width: '48px',\r\n height: '48px',\r\n borderRadius: '50%',\r\n marginBottom: '0.5rem',\r\n },\r\n headerAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n margin: '0 0 0.25rem',\r\n },\r\n headerBalance: {\r\n fontSize: '1.75rem',\r\n fontWeight: 700,\r\n color: '#ffffff',\r\n margin: 0,\r\n },\r\n headerCurrency: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#8b8ba7',\r\n },\r\n tabBar: {\r\n display: 'flex',\r\n borderBottom: '1px solid #2a2a4a',\r\n padding: '0 0.5rem',\r\n },\r\n tab: {\r\n flex: 1,\r\n padding: '0.75rem 0.5rem',\r\n background: 'none',\r\n border: 'none',\r\n borderBottomWidth: '2px',\r\n borderBottomStyle: 'solid' as const,\r\n borderBottomColor: 'transparent',\r\n color: '#64748b',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n borderRadius: 0,\r\n },\r\n tabActive: {\r\n color: '#e2e8f0',\r\n borderBottomColor: '#667eea',\r\n },\r\n content: {\r\n flex: 1,\r\n overflowY: 'auto' as const,\r\n padding: '1rem 1.25rem 1.25rem',\r\n },\r\n\r\n // Wallet tab — action buttons\r\n walletTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n actionRow: {\r\n display: 'flex',\r\n gap: '1rem',\r\n justifyContent: 'center',\r\n },\r\n actionBtn: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1.25rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '16px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s',\r\n flex: 1,\r\n },\r\n actionIcon: {\r\n width: '44px',\r\n height: '44px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(102, 126, 234, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: '#667eea',\r\n },\r\n actionIconReceive: {\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n color: '#34d399',\r\n },\r\n actionIconSwap: {\r\n backgroundColor: 'rgba(251, 191, 36, 0.15)',\r\n color: '#fbbf24',\r\n },\r\n assetList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.5rem',\r\n },\r\n assetCard: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.65rem',\r\n padding: '0.65rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '12px',\r\n },\r\n assetDot: {\r\n width: '10px',\r\n height: '10px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n assetInfo: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n flex: 1,\r\n },\r\n assetCode: {\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n },\r\n assetHint: {\r\n color: '#64748b',\r\n fontSize: '0.68rem',\r\n marginTop: '1px',\r\n },\r\n assetBalance: {\r\n color: '#a5b4fc',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: 'monospace',\r\n },\r\n actionLabel: {\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n color: '#e2e8f0',\r\n },\r\n\r\n // Sub-views (send/receive forms)\r\n subView: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.75rem',\r\n },\r\n backBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.25rem',\r\n background: 'none',\r\n border: 'none',\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n cursor: 'pointer',\r\n padding: '0 0 0.25rem',\r\n width: 'fit-content',\r\n },\r\n formGroup: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '0.3rem',\r\n },\r\n formLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.75rem',\r\n fontWeight: 500,\r\n },\r\n formInput: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0',\r\n fontSize: '0.9rem',\r\n outline: 'none',\r\n width: '100%',\r\n boxSizing: 'border-box' as const,\r\n fontFamily: 'inherit',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '10px',\r\n padding: '0.75rem',\r\n fontSize: '0.95rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n width: '100%',\r\n marginTop: '0.25rem',\r\n },\r\n error: {\r\n color: '#f87171',\r\n fontSize: '0.8rem',\r\n margin: 0,\r\n padding: '0.4rem 0.6rem',\r\n backgroundColor: 'rgba(248, 113, 113, 0.1)',\r\n borderRadius: '6px',\r\n },\r\n centeredCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '1rem 0',\r\n },\r\n\r\n // Receive view\r\n receiveIconBig: {\r\n width: '64px',\r\n height: '64px',\r\n borderRadius: '50%',\r\n backgroundColor: 'rgba(52, 211, 153, 0.15)',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n marginBottom: '0.25rem',\r\n },\r\n addressBox: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '8px',\r\n padding: '0.75rem',\r\n width: '100%',\r\n marginTop: '0.5rem',\r\n },\r\n addressText: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.7rem',\r\n color: '#a5b4fc',\r\n wordBreak: 'break-all' as const,\r\n lineHeight: 1.5,\r\n },\r\n\r\n // Activity tab\r\n txList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n txRow: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.75rem',\r\n padding: '0.65rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n txIcon: {\r\n width: '36px',\r\n height: '36px',\r\n borderRadius: '50%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n },\r\n txDetails: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n flex: 1,\r\n minWidth: 0,\r\n },\r\n txType: {\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n },\r\n txCounterparty: {\r\n color: '#64748b',\r\n fontSize: '0.7rem',\r\n fontFamily: 'monospace',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap' as const,\r\n },\r\n txAmountCol: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n alignItems: 'flex-end',\r\n flexShrink: 0,\r\n },\r\n txAmount: {\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n },\r\n txTime: {\r\n color: '#64748b',\r\n fontSize: '0.65rem',\r\n },\r\n emptyText: {\r\n color: '#64748b',\r\n fontSize: '0.85rem',\r\n textAlign: 'center' as const,\r\n padding: '2rem 0',\r\n },\r\n\r\n // Account tab\r\n fieldList: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n },\r\n field: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n padding: '0.6rem 0',\r\n borderBottom: '1px solid #1a1a2e',\r\n },\r\n fieldLabel: {\r\n color: '#8b8ba7',\r\n fontSize: '0.8rem',\r\n },\r\n fieldValue: {\r\n color: '#e2e8f0',\r\n fontSize: '0.8rem',\r\n fontWeight: 500,\r\n },\r\n copyBtn: {\r\n background: 'none',\r\n border: '1px solid #2a2a4a',\r\n color: '#a5b4fc',\r\n padding: '0.2rem 0.5rem',\r\n borderRadius: '4px',\r\n fontSize: '0.72rem',\r\n fontFamily: 'monospace',\r\n cursor: 'pointer',\r\n transition: 'color 0.2s, border-color 0.2s',\r\n },\r\n\r\n // Security tab\r\n securityTab: {\r\n display: 'flex',\r\n flexDirection: 'column' as const,\r\n gap: '1rem',\r\n },\r\n rotateBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f59e0b',\r\n border: '1px solid rgba(245, 158, 11, 0.3)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n },\r\n disconnectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: '0.5rem',\r\n width: '100%',\r\n padding: '0.65rem',\r\n backgroundColor: 'transparent',\r\n color: '#f87171',\r\n border: '1px solid rgba(248, 113, 113, 0.2)',\r\n borderRadius: '10px',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n cursor: 'pointer',\r\n },\r\n};\r\n","/**\r\n * ConnectButton.tsx - SDK drop-in wallet button.\r\n *\r\n * Renders a dynamic button that:\r\n * - Shows \"Connect Wallet\" when disconnected → opens ConnectModal\r\n * - Shows a pill with address + balance when connected → opens WalletPanel\r\n * - Handles loading/creating states with spinners\r\n *\r\n * Usage:\r\n * <ConnectButton />\r\n */\r\n\r\nimport { useState } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport { ConnectModal } from './ConnectModal';\r\nimport { WalletPanel } from './WalletPanel';\r\n\r\nexport function ConnectButton() {\r\n const { wallet, balance, loading, creating, connect } = useAccesly();\r\n const [showModal, setShowModal] = useState(false);\r\n const [showPanel, setShowPanel] = useState(false);\r\n\r\n // Initial auth check\r\n if (loading) {\r\n return (\r\n <div style={styles.pillLoading}>\r\n <div style={styles.spinner} />\r\n </div>\r\n );\r\n }\r\n\r\n // Not connected\r\n if (!wallet) {\r\n return (\r\n <>\r\n <button\r\n onClick={() => setShowModal(true)}\r\n style={creating ? styles.pill : styles.connectBtn}\r\n disabled={creating}\r\n >\r\n {creating ? (\r\n <>\r\n <div style={styles.spinnerSmall} />\r\n <span style={styles.pillText}>Creating wallet...</span>\r\n </>\r\n ) : (\r\n <>\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2.5\" />\r\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\r\n </svg>\r\n Connect Wallet\r\n </>\r\n )}\r\n </button>\r\n\r\n {showModal && (\r\n <ConnectModal\r\n onClose={() => setShowModal(false)}\r\n onConnect={async () => {\r\n setShowModal(false);\r\n await connect();\r\n }}\r\n />\r\n )}\r\n </>\r\n );\r\n }\r\n\r\n // Connected - show pill\r\n const addr = wallet.stellarAddress;\r\n const truncated = `${addr.slice(0, 4)}...${addr.slice(-4)}`;\r\n const balanceText = balance\r\n ? `${parseFloat(balance).toFixed(2)} XLM`\r\n : '--- XLM';\r\n const color = identiconColor(addr);\r\n\r\n return (\r\n <>\r\n <button onClick={() => setShowPanel(true)} style={styles.pill}>\r\n <div style={{ ...styles.identicon, backgroundColor: color }} />\r\n <span style={styles.pillAddr}>{truncated}</span>\r\n <span style={styles.divider} />\r\n <span style={styles.pillBalance}>{balanceText}</span>\r\n </button>\r\n\r\n {showPanel && <WalletPanel onClose={() => setShowPanel(false)} />}\r\n </>\r\n );\r\n}\r\n\r\n/** Generate a deterministic HSL color from a Stellar address */\r\nfunction identiconColor(address: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < address.length; i++) {\r\n hash = address.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n return `hsl(${Math.abs(hash) % 360}, 65%, 55%)`;\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inline styles (zero CSS dependencies)\r\n// ---------------------------------------------------------------------------\r\n\r\nconst styles: Record<string, React.CSSProperties> = {\r\n connectBtn: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.6rem',\r\n padding: '0.85rem 1.75rem',\r\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\r\n color: '#fff',\r\n border: 'none',\r\n borderRadius: '12px',\r\n fontSize: '1rem',\r\n fontWeight: 600,\r\n cursor: 'pointer',\r\n transition: 'transform 0.15s, box-shadow 0.15s',\r\n boxShadow: '0 4px 15px rgba(102, 126, 234, 0.4)',\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pill: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '0.5rem',\r\n padding: '0.5rem 0.85rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n cursor: 'pointer',\r\n transition: 'border-color 0.2s, box-shadow 0.2s',\r\n color: '#e2e8f0',\r\n fontSize: '0.85rem',\r\n fontWeight: 500,\r\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif',\r\n },\r\n pillLoading: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: '0.5rem 1.5rem',\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '50px',\r\n height: '42px',\r\n },\r\n identicon: {\r\n width: '24px',\r\n height: '24px',\r\n borderRadius: '50%',\r\n flexShrink: 0,\r\n },\r\n pillAddr: {\r\n fontFamily: 'monospace',\r\n fontSize: '0.8rem',\r\n color: '#e2e8f0',\r\n },\r\n divider: {\r\n width: '1px',\r\n height: '16px',\r\n backgroundColor: '#3a3a5a',\r\n },\r\n pillBalance: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n fontWeight: 500,\r\n },\r\n pillText: {\r\n fontSize: '0.8rem',\r\n color: '#8b8ba7',\r\n },\r\n spinner: {\r\n width: '20px',\r\n height: '20px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n },\r\n spinnerSmall: {\r\n width: '16px',\r\n height: '16px',\r\n border: '2px solid #2a2a4a',\r\n borderTop: '2px solid #667eea',\r\n borderRadius: '50%',\r\n animation: 'accesly-spin 1s linear infinite',\r\n flexShrink: 0,\r\n },\r\n};\r\n","/**\r\n * SwapModal.tsx - Swap between XLM, USDC, and EURC using the Stellar DEX.\r\n *\r\n * Uses the useAccesly hook for estimateSwap and swap — no props beyond callbacks.\r\n *\r\n * Usage:\r\n * import { SwapModal } from 'accesly';\r\n * <SwapModal onClose={() => setOpen(false)} onSuccess={() => refresh()} />\r\n */\r\n\r\nimport { useState, useEffect, useRef } from 'react';\r\nimport { useAccesly } from '../hooks/useAccesly';\r\nimport type { SwapPathAsset } from '../types';\r\n\r\nconst ASSET_CODES = ['XLM', 'USDC', 'EURC'] as const;\r\ntype AssetCode = (typeof ASSET_CODES)[number];\r\n\r\ninterface SwapEstimate { destinationAmount: string; path: SwapPathAsset[]; }\r\n\r\ninterface SwapModalProps {\r\n onClose: () => void;\r\n onSuccess?: () => void;\r\n}\r\n\r\nexport function SwapModal({ onClose, onSuccess }: SwapModalProps) {\r\n const { estimateSwap, swap } = useAccesly();\r\n\r\n const [fromAsset, setFromAsset] = useState<AssetCode>('XLM');\r\n const [toAsset, setToAsset] = useState<AssetCode>('USDC');\r\n const [amount, setAmount] = useState('');\r\n const [slippage, setSlippage] = useState('1');\r\n\r\n const [estimate, setEstimate] = useState<SwapEstimate | null>(null);\r\n const [estimating, setEstimating] = useState(false);\r\n const [estimateError, setEstimateError] = useState<string | null>(null);\r\n\r\n const [swapping, setSwapping] = useState(false);\r\n const [error, setError] = useState<string | null>(null);\r\n const [txHash, setTxHash] = useState<string | null>(null);\r\n\r\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Fetch estimate whenever from/to/amount changes (debounced 600ms)\r\n useEffect(() => {\r\n setEstimate(null);\r\n setEstimateError(null);\r\n setEstimating(false);\r\n\r\n const num = parseFloat(amount);\r\n if (!amount || isNaN(num) || num <= 0 || fromAsset === toAsset) return;\r\n\r\n setEstimating(true);\r\n\r\n if (debounceRef.current) clearTimeout(debounceRef.current);\r\n debounceRef.current = setTimeout(async () => {\r\n try {\r\n const data = await estimateSwap(fromAsset, toAsset, amount);\r\n setEstimate(data);\r\n } catch (err: any) {\r\n setEstimateError(err.message || 'Could not get estimate');\r\n } finally {\r\n setEstimating(false);\r\n }\r\n }, 600);\r\n\r\n return () => {\r\n if (debounceRef.current) clearTimeout(debounceRef.current);\r\n setEstimating(false);\r\n };\r\n }, [amount, fromAsset, toAsset, estimateSwap]);\r\n\r\n function handleFlip() {\r\n setFromAsset(toAsset);\r\n setToAsset(fromAsset);\r\n setAmount('');\r\n setEstimate(null);\r\n setEstimateError(null);\r\n }\r\n\r\n // minReceive = estimated output * (1 - slippage%)\r\n function calcMinReceive(): string {\r\n if (!estimate) return '0.0000001';\r\n const minRaw = parseFloat(estimate.destinationAmount) * (1 - parseFloat(slippage || '1') / 100);\r\n return Math.max(minRaw, 0.0000001).toFixed(7);\r\n }\r\n\r\n async function handleSwap(e: React.FormEvent) {\r\n e.preventDefault();\r\n if (!estimate) return;\r\n setSwapping(true);\r\n setError(null);\r\n\r\n try {\r\n const result = await swap({\r\n fromAsset,\r\n toAsset,\r\n amount,\r\n minReceive: calcMinReceive(),\r\n path: estimate.path,\r\n });\r\n setTxHash(result.txHash);\r\n onSuccess?.();\r\n } catch (err: any) {\r\n setError(err.message || 'Swap failed');\r\n } finally {\r\n setSwapping(false);\r\n }\r\n }\r\n\r\n // --- Success screen ---\r\n if (txHash) {\r\n return (\r\n <div style={s.overlay} onClick={onClose}>\r\n <div style={s.modal} onClick={(e) => e.stopPropagation()}>\r\n <div style={s.successIcon}>\r\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#34d399\" strokeWidth=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <polyline points=\"8 12 11 15 16 9\" />\r\n </svg>\r\n </div>\r\n <h2 style={s.successTitle}>Swap Complete</h2>\r\n <p style={s.successHash}>{txHash.slice(0, 12)}...{txHash.slice(-12)}</p>\r\n <button onClick={onClose} style={s.primaryBtn}>Done</button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n const toOptions = ASSET_CODES.filter((c) => c !== fromAsset);\r\n const fromOptions = ASSET_CODES.filter((c) => c !== toAsset);\r\n const canSubmit = !!estimate && !estimating && !swapping;\r\n\r\n return (\r\n <div style={s.overlay} onClick={onClose}>\r\n <div style={s.modal} onClick={(e) => e.stopPropagation()}>\r\n {/* Header */}\r\n <div style={s.header}>\r\n <h2 style={s.title}>Swap</h2>\r\n <button onClick={onClose} style={s.closeBtn}>\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <form onSubmit={handleSwap} style={s.form}>\r\n {/* From */}\r\n <div style={s.group}>\r\n <label style={s.label}>From</label>\r\n <div style={s.row}>\r\n <select\r\n value={fromAsset}\r\n onChange={(e) => setFromAsset(e.target.value as AssetCode)}\r\n style={{ ...s.input, width: '130px', flexShrink: 0 }}\r\n >\r\n {fromOptions.map((c) => <option key={c} value={c}>{c}</option>)}\r\n </select>\r\n <input\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n value={amount}\r\n onChange={(e) => setAmount(e.target.value)}\r\n required\r\n min=\"0.0000001\"\r\n step=\"any\"\r\n style={{ ...s.input, flex: 1 }}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Flip button */}\r\n <div style={s.flipRow}>\r\n <button type=\"button\" onClick={handleFlip} style={s.flipBtn} title=\"Flip assets\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\r\n <polyline points=\"17 1 21 5 17 9\" />\r\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\r\n <polyline points=\"7 23 3 19 7 15\" />\r\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n {/* To */}\r\n <div style={s.group}>\r\n <label style={s.label}>To</label>\r\n <select\r\n value={toAsset}\r\n onChange={(e) => setToAsset(e.target.value as AssetCode)}\r\n style={s.input}\r\n >\r\n {toOptions.map((c) => <option key={c} value={c}>{c}</option>)}\r\n </select>\r\n </div>\r\n\r\n {/* Estimate result */}\r\n <div style={s.estimateBox}>\r\n {estimating && (\r\n <p style={s.estimateText}>Fetching rate...</p>\r\n )}\r\n {!estimating && estimate && (\r\n <>\r\n <p style={s.estimateAmount}>\r\n ≈ {parseFloat(estimate.destinationAmount).toLocaleString('en-US', {\r\n minimumFractionDigits: 2,\r\n maximumFractionDigits: 6,\r\n })} {toAsset}\r\n </p>\r\n <p style={s.estimateMin}>\r\n Min received: {calcMinReceive()} {toAsset} (after {slippage}% slippage)\r\n </p>\r\n </>\r\n )}\r\n {!estimating && estimateError && (\r\n <p style={s.estimateError}>{estimateError}</p>\r\n )}\r\n {!estimating && !estimate && !estimateError && amount && (\r\n <p style={s.estimateText}>Enter an amount to see the rate</p>\r\n )}\r\n </div>\r\n\r\n {/* Slippage */}\r\n <div style={s.group}>\r\n <label style={s.label}>Max Slippage (%)</label>\r\n <input\r\n type=\"number\"\r\n value={slippage}\r\n onChange={(e) => setSlippage(e.target.value)}\r\n min=\"0.1\"\r\n max=\"50\"\r\n step=\"0.1\"\r\n style={s.input}\r\n />\r\n </div>\r\n\r\n {error && <p style={s.error}>{error}</p>}\r\n\r\n <button\r\n type=\"submit\"\r\n disabled={!canSubmit}\r\n style={{ ...s.primaryBtn, opacity: canSubmit ? 1 : 0.45 }}\r\n >\r\n {swapping ? 'Swapping...' : estimating ? 'Getting rate...' : `Swap ${fromAsset} → ${toAsset}`}\r\n </button>\r\n </form>\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nconst s: Record<string, React.CSSProperties> = {\r\n overlay: {\r\n position: 'fixed', inset: 0,\r\n backgroundColor: 'rgba(0,0,0,0.7)',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n zIndex: 1000, padding: '1rem',\r\n },\r\n modal: {\r\n backgroundColor: '#141428',\r\n borderRadius: '16px',\r\n border: '1px solid #2a2a4a',\r\n padding: '1.75rem',\r\n width: '100%', maxWidth: '420px',\r\n },\r\n header: {\r\n display: 'flex', justifyContent: 'space-between', alignItems: 'center',\r\n marginBottom: '1.25rem',\r\n },\r\n title: { fontSize: '1.25rem', fontWeight: 600, color: '#e2e8f0', margin: 0 },\r\n closeBtn: { background: 'none', border: 'none', color: '#64748b', cursor: 'pointer', padding: '4px' },\r\n form: { display: 'flex', flexDirection: 'column' as const, gap: '0.85rem' },\r\n group: { display: 'flex', flexDirection: 'column' as const, gap: '0.3rem' },\r\n label: { color: '#8b8ba7', fontSize: '0.78rem', fontWeight: 500 },\r\n row: { display: 'flex', gap: '0.5rem' },\r\n input: {\r\n backgroundColor: '#1a1a2e', border: '1px solid #2a2a4a',\r\n borderRadius: '8px', padding: '0.65rem 0.75rem',\r\n color: '#e2e8f0', fontSize: '0.9rem', outline: 'none',\r\n width: '100%', boxSizing: 'border-box' as const,\r\n },\r\n flipRow: { display: 'flex', justifyContent: 'center', margin: '-0.1rem 0' },\r\n flipBtn: {\r\n background: '#1a1a2e', border: '1px solid #2a2a4a',\r\n borderRadius: '50%', width: '34px', height: '34px',\r\n display: 'flex', alignItems: 'center', justifyContent: 'center',\r\n cursor: 'pointer', color: '#667eea',\r\n },\r\n estimateBox: {\r\n backgroundColor: '#1a1a2e',\r\n border: '1px solid #2a2a4a',\r\n borderRadius: '10px',\r\n padding: '0.75rem 1rem',\r\n minHeight: '54px',\r\n display: 'flex', flexDirection: 'column' as const, justifyContent: 'center', gap: '0.2rem',\r\n },\r\n estimateText: { color: '#64748b', fontSize: '0.82rem', margin: 0, textAlign: 'center' as const },\r\n estimateAmount: { color: '#e2e8f0', fontSize: '1.1rem', fontWeight: 700, margin: 0 },\r\n estimateMin: { color: '#64748b', fontSize: '0.75rem', margin: 0 },\r\n estimateError: { color: '#f87171', fontSize: '0.82rem', margin: 0 },\r\n error: {\r\n color: '#f87171', fontSize: '0.85rem', margin: 0,\r\n padding: '0.45rem 0.65rem',\r\n backgroundColor: 'rgba(248,113,113,0.1)', borderRadius: '6px',\r\n },\r\n primaryBtn: {\r\n backgroundColor: '#667eea', color: '#fff', border: 'none',\r\n borderRadius: '10px', padding: '0.8rem',\r\n fontSize: '1rem', fontWeight: 600, cursor: 'pointer', width: '100%',\r\n },\r\n successIcon: { display: 'flex', justifyContent: 'center', marginBottom: '1rem' },\r\n successTitle: {\r\n color: '#34d399', fontSize: '1.25rem', fontWeight: 600,\r\n textAlign: 'center' as const, margin: '0 0 0.5rem',\r\n },\r\n successHash: {\r\n color: '#64748b', fontSize: '0.8rem', fontFamily: 'monospace',\r\n textAlign: 'center' as const, marginBottom: '1.5rem',\r\n },\r\n};\r\n","/**\r\n * Accesly SDK - Account abstraction wallet for Stellar.\r\n *\r\n * Quick start:\r\n *\r\n * import { AcceslyProvider, ConnectButton } from 'accesly';\r\n *\r\n * function App() {\r\n * return (\r\n * <AcceslyProvider appId=\"acc_xxxxx\">\r\n * <ConnectButton />\r\n * </AcceslyProvider>\r\n * );\r\n * }\r\n *\r\n * For custom UI, use the useAccesly hook:\r\n *\r\n * import { useAccesly } from 'accesly';\r\n *\r\n * function MyWallet() {\r\n * const { wallet, balance, connect, disconnect, sendPayment } = useAccesly();\r\n * // Build your own UI\r\n * }\r\n */\r\n\r\n// --- CSS keyframes injection ---\r\n// Since the SDK uses inline styles, we inject required keyframes once\r\nif (typeof document !== 'undefined') {\r\n const STYLE_ID = 'accesly-keyframes';\r\n if (!document.getElementById(STYLE_ID)) {\r\n const style = document.createElement('style');\r\n style.id = STYLE_ID;\r\n style.textContent = `\r\n @keyframes accesly-spin {\r\n to { transform: rotate(360deg); }\r\n }\r\n `;\r\n document.head.appendChild(style);\r\n }\r\n}\r\n\r\n// --- Components ---\r\nexport { AcceslyProvider } from './AcceslyProvider';\r\nexport { ConnectButton } from './components/ConnectButton';\r\nexport { SwapModal } from './components/SwapModal';\r\n\r\n// --- Hooks ---\r\nexport { useAccesly } from './hooks/useAccesly';\r\n\r\n// --- Types ---\r\nexport type {\r\n AcceslyConfig,\r\n WalletInfo,\r\n AssetBalance,\r\n TransactionRecord,\r\n SendPaymentParams,\r\n SwapParams,\r\n SwapPathAsset,\r\n SwapEstimate,\r\n SignResult,\r\n AcceslyContextType,\r\n} from './types';\r\n"]}
|