@cookill/wallet-adapter 3.1.2 → 3.1.4
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/react.cjs +299 -195
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +299 -195
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/types.ts","../src/core/provider.ts","../src/core/utils.ts","../src/core/wallet.ts","../src/react/context.tsx","../src/react/ErrorBoundary.tsx","../src/react/LoadingStates.tsx"],"names":["isInstalled","jsxs","jsx"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * @cookill/wallet-adapter v3.1.0\n * Core type definitions\n * \n * Includes support for:\n * - REX (Rialo Extended Execution) — confidential computation transactions\n * - SfS (Stake-for-Service) — gasless transactions via staking yield\n * - Scan-to-Connect — QR-based cross-device wallet pairing\n */\n\n// ============================================================================\n// Network & Chain Types\n// ============================================================================\n\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\nexport type RialoChainId = `rialo:${RialoNetwork}`;\n\nexport interface NetworkConfig {\n chainId: RialoChainId;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n symbol: string;\n decimals: number;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n}\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n symbol: 'RLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n symbol: 'tRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n symbol: 'dRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n symbol: 'lRLO',\n decimals: 9,\n supportsREX: false,\n supportsSfS: false,\n },\n};\n\n// ============================================================================\n// Account Types\n// ============================================================================\n\nexport interface WalletAccount {\n address: string;\n publicKey?: string | Uint8Array;\n label?: string;\n}\n\n// ============================================================================\n// Transaction Types\n// ============================================================================\n\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n /** If true, attempt to pay gas via Stake-for-Service credits */\n gasless?: boolean;\n /** REX confidential execution context */\n rex?: REXConfig;\n}\n\nexport interface TransactionResult {\n hash: string;\n signature?: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n /** Whether gas was paid via SfS credits */\n gasless?: boolean;\n /** REX execution proof if confidential */\n rexProof?: string;\n}\n\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n publicKey?: string;\n}\n\nexport interface BalanceResult {\n balance: string;\n formatted: string;\n}\n\n// ============================================================================\n// REX (Rialo Extended Execution) — Confidential Computation\n// ============================================================================\n\n/**\n * REX enables privacy-preserving computation on Rialo.\n * Transactions can be executed confidentially using TEEs, MPC, or FHE\n * without exposing inputs to the public blockchain.\n */\n\n/** Privacy technology used for confidential computation */\nexport type REXPrivacyMode = 'tee' | 'mpc' | 'fhe' | 'auto';\n\nexport interface REXConfig {\n /** Enable confidential execution */\n confidential: boolean;\n /** Privacy technology to use (default: 'auto' — protocol selects optimal) */\n privacyMode?: REXPrivacyMode;\n /** Encrypted inputs (base64-encoded ciphertext) */\n encryptedInputs?: string;\n /** REX program ID to execute */\n programId?: string;\n /** Whether output should remain encrypted for future computation */\n keepEncrypted?: boolean;\n /** Access control — who can decrypt the result */\n accessPolicy?: REXAccessPolicy;\n}\n\nexport interface REXAccessPolicy {\n /** Addresses allowed to decrypt the result */\n allowedDecryptors: string[];\n /** Expiry timestamp (ms) for access */\n expiresAt?: number;\n}\n\nexport interface REXTransactionResult extends TransactionResult {\n /** Attestation proof from TEE/MPC */\n attestation?: string;\n /** Encrypted output (if keepEncrypted was true) */\n encryptedOutput?: string;\n /** Public output (if computation produced public results) */\n publicOutput?: string;\n}\n\n/** REX capabilities query result */\nexport interface REXCapabilities {\n supported: boolean;\n privacyModes: REXPrivacyMode[];\n maxInputSize: number;\n programs: string[];\n}\n\n// ============================================================================\n// Stake-for-Service (SfS) — Gasless Transactions\n// ============================================================================\n\n/**\n * SfS converts staking yield into service credits that automatically\n * pay for network costs (gas, storage, scheduled executions).\n * Users stake RLO, set a routing fraction, and the ServicePaymaster\n * mints credits from their yield.\n */\n\nexport interface SfSPosition {\n /** Position ID */\n id: string;\n /** Staked principal in kelvins */\n principal: string;\n /** Validator/pool receiving the delegation */\n validator: string;\n /** Fraction of yield routed to service credits (0.0 - 1.0) */\n routingFraction: number;\n /** Current service credit balance */\n creditBalance: string;\n /** Estimated credits per epoch */\n creditsPerEpoch: string;\n /** Position status */\n status: 'active' | 'pending' | 'closed';\n /** Creation timestamp */\n createdAt: number;\n}\n\nexport interface SfSCreateParams {\n /** Amount of RLO to stake (in kelvins) */\n amount: string;\n /** Validator address to delegate to */\n validator: string;\n /** Fraction of yield to route to service credits (0.0 - 1.0) */\n routingFraction: number;\n}\n\nexport interface SfSUpdateParams {\n /** Position ID to update */\n positionId: string;\n /** New routing fraction (0.0 - 1.0) */\n routingFraction?: number;\n}\n\nexport interface SfSCreditBalance {\n /** Available service credits */\n available: string;\n /** Credits used this epoch */\n usedThisEpoch: string;\n /** Total credits earned */\n totalEarned: string;\n /** Estimated credits per epoch */\n estimatedPerEpoch: string;\n}\n\n// ============================================================================\n// Scan-to-Connect (QR-based Cross-Device Pairing)\n// ============================================================================\n\n/**\n * Enables connecting a wallet on one device to a dApp on another device\n * via QR code scanning. Supports bidirectional flow:\n * - dApp shows QR → wallet scans to connect\n * - Wallet shows QR → dApp scans to connect\n */\n\nexport interface ScanConnectSession {\n /** Unique session identifier */\n sessionId: string;\n /** Session topic for relay */\n topic: string;\n /** Relay server URL */\n relay: string;\n /** Session encryption key (hex) */\n symmetricKey: string;\n /** Originator: 'dapp' or 'wallet' */\n origin: 'dapp' | 'wallet';\n /** dApp metadata */\n dappMetadata?: ScanConnectDAppMetadata;\n /** Wallet metadata */\n walletMetadata?: ScanConnectWalletMetadata;\n /** Requested chain IDs */\n chains: RialoChainId[];\n /** Expiry timestamp */\n expiresAt: number;\n}\n\nexport interface ScanConnectDAppMetadata {\n name: string;\n url: string;\n icon?: string;\n description?: string;\n}\n\nexport interface ScanConnectWalletMetadata {\n name: string;\n icon?: string;\n version?: string;\n}\n\n/** URI format for scan-to-connect QR codes */\nexport interface ScanConnectURI {\n /** Full URI string (rialo-wc://...) */\n uri: string;\n /** Parsed session info */\n session: ScanConnectSession;\n}\n\nexport type ScanConnectStatus = \n | 'idle'\n | 'generating' // Generating QR/session\n | 'waiting' // Waiting for counterpart to scan\n | 'scanned' // QR scanned, awaiting approval\n | 'approving' // User reviewing connection\n | 'connected' // Successfully connected\n | 'expired' // Session expired\n | 'rejected' // User rejected\n | 'error';\n\n// ============================================================================\n// Wallet Info\n// ============================================================================\n\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n supportsScanConnect?: boolean;\n}\n\n// ============================================================================\n// Provider Interface (what window.rialo exposes)\n// ============================================================================\n\nexport type WalletEventType = \n | 'connect' \n | 'disconnect' \n | 'accountsChanged'\n | 'networkChanged' \n | 'chainChanged'\n | 'scanConnect' // Scan-to-connect session events\n | 'sfsUpdate' // SfS position/credit updates\n | 'error';\n\nexport interface RialoProvider {\n // Identity\n isRialo: boolean;\n isSheepWallet?: boolean;\n version: string;\n \n // Connection\n connect(options?: { silent?: boolean }): Promise<Array<string | WalletAccount>>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<Array<string | WalletAccount>>;\n \n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n \n // Message signing\n signMessage(message: string | Uint8Array): Promise<SignedMessage>;\n \n // Network\n getNetwork(): Promise<RialoNetwork>;\n switchNetwork(network: RialoNetwork): Promise<{ success: boolean }>;\n getBalance(address?: string): Promise<BalanceResult | string>;\n \n // REX — Confidential Computation\n getREXCapabilities?(): Promise<REXCapabilities>;\n submitREXTransaction?(tx: TransactionRequest): Promise<REXTransactionResult>;\n \n // SfS — Stake-for-Service (Gasless)\n getSfSPositions?(): Promise<SfSPosition[]>;\n createSfSPosition?(params: SfSCreateParams): Promise<SfSPosition>;\n updateSfSPosition?(params: SfSUpdateParams): Promise<SfSPosition>;\n closeSfSPosition?(positionId: string): Promise<{ success: boolean }>;\n getSfSCredits?(): Promise<SfSCreditBalance>;\n \n // Scan-to-Connect\n createScanSession?(origin: 'wallet'): Promise<ScanConnectURI>;\n approveScanSession?(sessionId: string): Promise<WalletAccount[]>;\n rejectScanSession?(sessionId: string): Promise<void>;\n \n // Events\n on(event: WalletEventType, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEventType, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEventType): void;\n}\n\n// Window extension\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Provider detection and access utilities\n * \n * CRITICAL: All provider access is non-blocking and defensive\n */\n\nimport type { RialoProvider } from './types';\n\n/**\n * Check if Rialo/Sheep Wallet is installed\n * This is synchronous and never blocks\n */\nexport function isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the provider reference (synchronous)\n * Returns undefined if not installed\n */\nexport function getProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const provider = window.rialo;\n if (provider?.isRialo) return provider;\n } catch {}\n return undefined;\n}\n\n/**\n * Wait for provider to become available\n * Uses polling + event listener, with guaranteed timeout\n * \n * @param timeout Maximum time to wait in ms (default 3000)\n */\nexport function waitForProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n // Already available?\n const existing = getProvider();\n if (existing) {\n resolve(existing);\n return;\n }\n\n let resolved = false;\n let checkInterval: ReturnType<typeof setInterval> | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n resolved = true;\n if (checkInterval) clearInterval(checkInterval);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const done = (provider: RialoProvider | undefined) => {\n if (resolved) return;\n cleanup();\n resolve(provider);\n };\n\n // Poll every 100ms\n checkInterval = setInterval(() => {\n const p = getProvider();\n if (p) done(p);\n }, 100);\n\n // Listen for initialization event\n const onInit = () => done(getProvider());\n window.addEventListener('rialo#initialized', onInit, { once: true });\n\n // Guaranteed timeout\n timeoutId = setTimeout(() => {\n window.removeEventListener('rialo#initialized', onInit);\n done(undefined);\n }, timeout);\n });\n}\n\n/**\n * Promise timeout wrapper\n * Ensures promises never hang indefinitely\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n errorMessage = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);\n });\n\n return Promise.race([promise, timeout]).finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n }) as Promise<T>;\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Utility functions\n */\n\nimport type { WalletAccount, RialoNetwork, RialoChainId } from './types';\n\n/**\n * Format address for display (truncated)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins || '0') : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO amount to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);\n}\n\n/**\n * Convert network name to chain ID\n */\nexport function toChainId(network: RialoNetwork): RialoChainId {\n return `rialo:${network}`;\n}\n\n/**\n * Extract network from chain ID\n */\nexport function fromChainId(chainId: RialoChainId): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n/**\n * Normalize account data (handles both string and object formats)\n * CRITICAL: Extension can return either string[] or WalletAccount[]\n */\nexport function normalizeAccounts(accounts: Array<string | WalletAccount>): WalletAccount[] {\n if (!Array.isArray(accounts)) return [];\n \n return accounts.map((acc): WalletAccount => {\n if (typeof acc === 'string') {\n return { address: acc, publicKey: acc };\n }\n return {\n address: acc.address,\n publicKey: acc.publicKey || acc.address,\n label: acc.label,\n };\n });\n}\n","/**\n * @cookill/wallet-adapter v3.1.0\n * Pure JavaScript wallet class (no React dependency)\n * \n * Supports:\n * - Standard connect/disconnect/sign operations\n * - REX (Rialo Extended Execution) confidential transactions\n * - SfS (Stake-for-Service) gasless transactions\n * - Scan-to-Connect QR-based pairing\n * \n * Usage:\n * const wallet = new SheepWallet();\n * if (!wallet.isInstalled) { ... prompt install ... }\n * const accounts = await wallet.connect();\n */\n\nimport type { \n RialoProvider, \n WalletAccount, \n RialoNetwork,\n TransactionRequest, \n TransactionResult, \n SignedMessage,\n REXCapabilities,\n REXTransactionResult,\n SfSPosition,\n SfSCreateParams,\n SfSUpdateParams,\n SfSCreditBalance,\n ScanConnectURI,\n ScanConnectSession,\n ScanConnectStatus,\n} from './types';\nimport { isInstalled, getProvider, withTimeout } from './provider';\nimport { normalizeAccounts } from './utils';\n\n// Connection timeout (20 seconds)\nconst CONNECT_TIMEOUT = 20_000;\n\n// Other operation timeout (30 seconds)\nconst OPERATION_TIMEOUT = 30_000;\n\nexport class SheepWallet {\n private _provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n private _cleanupFns: Array<() => void> = [];\n\n constructor() {\n this._provider = getProvider();\n this._setupEvents();\n }\n\n // =========================================================================\n // Getters (all synchronous, never block)\n // =========================================================================\n\n get isInstalled(): boolean {\n return isInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return [...this._accounts];\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get address(): string | undefined {\n return this._accounts[0]?.address;\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n get chainId(): string {\n return `rialo:${this._network}`;\n }\n\n // =========================================================================\n // Connection (with timeout protection)\n // =========================================================================\n\n async connect(): Promise<WalletAccount[]> {\n // Refresh provider reference\n this._provider = getProvider();\n \n if (!this._provider) {\n throw new Error('Sheep Wallet not installed. Get it at https://rialo.io/wallet');\n }\n\n try {\n const rawAccounts = await withTimeout(\n this._provider.connect(),\n CONNECT_TIMEOUT,\n 'Connection timed out. Please open Sheep Wallet extension and approve the request.'\n );\n\n this._accounts = normalizeAccounts(rawAccounts);\n this._connected = true;\n\n try {\n this._network = await withTimeout(\n this._provider.getNetwork(),\n 5_000,\n 'Network request timed out'\n );\n } catch {\n // Keep default network on failure\n }\n\n return this._accounts;\n } catch (error) {\n this._connected = false;\n this._accounts = [];\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n try {\n if (this._provider) {\n await withTimeout(\n this._provider.disconnect(),\n 5_000,\n 'Disconnect timed out'\n );\n }\n } catch {\n // Ignore disconnect errors\n }\n \n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Silent session check (for auto-connect, never triggers approval)\n // =========================================================================\n\n async checkSession(): Promise<WalletAccount[] | null> {\n if (!this._provider) return null;\n\n try {\n const isConn = await withTimeout(\n this._provider.isConnected(),\n 3_000,\n 'Session check timed out'\n );\n\n if (!isConn) return null;\n\n const rawAccounts = await withTimeout(\n this._provider.getAccounts(),\n 3_000,\n 'Get accounts timed out'\n );\n\n const accounts = normalizeAccounts(rawAccounts);\n if (accounts.length > 0) {\n this._accounts = accounts;\n this._connected = true;\n\n try {\n this._network = await this._provider.getNetwork();\n } catch {}\n\n return accounts;\n }\n } catch {\n // Session check failure is not an error\n }\n\n return null;\n }\n\n // =========================================================================\n // Transactions\n // =========================================================================\n\n async signMessage(message: string): Promise<SignedMessage> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signMessage(message),\n OPERATION_TIMEOUT,\n 'Sign message timed out. Please check Sheep Wallet.'\n );\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n this._ensureConnected();\n \n const result = await withTimeout(\n this._provider!.signTransaction(tx),\n OPERATION_TIMEOUT,\n 'Sign transaction timed out. Please check Sheep Wallet.'\n );\n \n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.sendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Send transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signAndSendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // =========================================================================\n // REX — Rialo Extended Execution (Confidential Computation)\n // =========================================================================\n\n /**\n * Check if the connected wallet/network supports REX\n */\n async getREXCapabilities(): Promise<REXCapabilities> {\n if (!this._provider?.getREXCapabilities) {\n return {\n supported: false,\n privacyModes: [],\n maxInputSize: 0,\n programs: [],\n };\n }\n\n return withTimeout(\n this._provider.getREXCapabilities(),\n 10_000,\n 'REX capabilities request timed out'\n );\n }\n\n /**\n * Submit a confidential transaction via REX\n * The transaction inputs are encrypted and executed in a TEE/MPC/FHE environment\n */\n async submitREXTransaction(tx: TransactionRequest): Promise<REXTransactionResult> {\n this._ensureConnected();\n\n if (!tx.rex?.confidential) {\n throw new Error('Transaction must have rex.confidential = true for REX execution');\n }\n\n if (this._provider?.submitREXTransaction) {\n return withTimeout(\n this._provider.submitREXTransaction(tx),\n OPERATION_TIMEOUT,\n 'REX transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // Fallback: submit as regular transaction with REX metadata\n const result = await this.signAndSendTransaction(tx);\n return {\n ...result,\n attestation: undefined,\n encryptedOutput: undefined,\n publicOutput: undefined,\n };\n }\n\n /**\n * Send a gasless transaction using Stake-for-Service credits\n * Automatically sets tx.gasless = true\n */\n async sendGaslessTransaction(tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> {\n this._ensureConnected();\n \n // Check if user has SfS credits\n const credits = await this.getSfSCredits();\n if (BigInt(credits.available) <= 0n) {\n throw new Error('No SfS service credits available. Create a Stake-for-Service position first.');\n }\n\n return this.signAndSendTransaction({ ...tx, gasless: true });\n }\n\n // =========================================================================\n // SfS — Stake-for-Service (Gasless via Staking Yield)\n // =========================================================================\n\n /**\n * Get all Stake-for-Service positions for the connected account\n */\n async getSfSPositions(): Promise<SfSPosition[]> {\n this._ensureConnected();\n\n if (this._provider?.getSfSPositions) {\n return withTimeout(\n this._provider.getSfSPositions(),\n 10_000,\n 'SfS positions request timed out'\n );\n }\n\n return [];\n }\n\n /**\n * Create a new Stake-for-Service position\n * Stakes RLO and routes a fraction of yield to service credits\n */\n async createSfSPosition(params: SfSCreateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (params.routingFraction < 0 || params.routingFraction > 1) {\n throw new Error('Routing fraction must be between 0.0 and 1.0');\n }\n\n if (!this._provider?.createSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position creation timed out. Please check Sheep Wallet.'\n );\n }\n\n /**\n * Update an existing SfS position (e.g., change routing fraction)\n */\n async updateSfSPosition(params: SfSUpdateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (!this._provider?.updateSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.updateSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position update timed out'\n );\n }\n\n /**\n * Close an SfS position and unstake\n */\n async closeSfSPosition(positionId: string): Promise<{ success: boolean }> {\n this._ensureConnected();\n\n if (!this._provider?.closeSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.closeSfSPosition(positionId),\n OPERATION_TIMEOUT,\n 'SfS position close timed out'\n );\n }\n\n /**\n * Get current SfS service credit balance\n */\n async getSfSCredits(): Promise<SfSCreditBalance> {\n this._ensureConnected();\n\n if (this._provider?.getSfSCredits) {\n return withTimeout(\n this._provider.getSfSCredits(),\n 10_000,\n 'SfS credit balance request timed out'\n );\n }\n\n return {\n available: '0',\n usedThisEpoch: '0',\n totalEarned: '0',\n estimatedPerEpoch: '0',\n };\n }\n\n // =========================================================================\n // Scan-to-Connect (QR-based Cross-Device Pairing)\n // =========================================================================\n\n /**\n * Generate a scan-to-connect URI from the wallet side\n * Returns a URI that can be displayed as QR code for dApps to scan\n */\n async createScanSession(): Promise<ScanConnectURI> {\n if (!this._provider?.createScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createScanSession('wallet'),\n 10_000,\n 'Scan session creation timed out'\n );\n }\n\n /**\n * Approve a scan-to-connect session (after wallet scans dApp QR)\n */\n async approveScanSession(sessionId: string): Promise<WalletAccount[]> {\n if (!this._provider?.approveScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n const accounts = await withTimeout(\n this._provider.approveScanSession(sessionId),\n CONNECT_TIMEOUT,\n 'Scan session approval timed out'\n );\n\n this._accounts = normalizeAccounts(accounts as Array<string | WalletAccount>);\n this._connected = true;\n\n return this._accounts;\n }\n\n /**\n * Reject a scan-to-connect session\n */\n async rejectScanSession(sessionId: string): Promise<void> {\n if (!this._provider?.rejectScanSession) {\n return;\n }\n\n await withTimeout(\n this._provider.rejectScanSession(sessionId),\n 5_000,\n 'Scan session rejection timed out'\n );\n }\n\n // =========================================================================\n // Balance & Network\n // =========================================================================\n\n async getBalance(address?: string): Promise<string> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n const result = await withTimeout(\n this._provider.getBalance(address),\n 10_000,\n 'Balance request timed out'\n );\n\n return typeof result === 'string' ? result : result.balance;\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n await withTimeout(\n this._provider.switchNetwork(network),\n 10_000,\n 'Switch network timed out'\n );\n\n this._network = network;\n }\n\n // =========================================================================\n // Events\n // =========================================================================\n\n on(event: string, callback: (data: unknown) => void): () => void {\n if (!this._provider) {\n return () => {};\n }\n\n const cleanup = this._provider.on(event as any, callback);\n this._cleanupFns.push(cleanup);\n return cleanup;\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => {\n try { fn(); } catch {}\n });\n this._cleanupFns = [];\n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Private\n // =========================================================================\n\n private _ensureConnected(): void {\n if (!this._provider) {\n throw new Error('Sheep Wallet not installed');\n }\n if (!this._connected || this._accounts.length === 0) {\n throw new Error('Wallet not connected');\n }\n }\n\n private _setupEvents(): void {\n if (!this._provider) return;\n\n const onDisconnect = () => {\n this._connected = false;\n this._accounts = [];\n };\n\n const onAccountsChanged = (data: unknown) => {\n const raw = data as Array<string | WalletAccount>;\n this._accounts = normalizeAccounts(raw);\n };\n\n const onNetworkChanged = (data: unknown) => {\n const { network } = data as { network: RialoNetwork };\n if (network) this._network = network;\n };\n\n this._cleanupFns.push(\n this._provider.on('disconnect', onDisconnect),\n this._provider.on('accountsChanged', onAccountsChanged),\n this._provider.on('networkChanged', onNetworkChanged)\n );\n }\n}\n\nexport default SheepWallet;\n","/**\n * @cookill/wallet-adapter/react v3.1.0\n * React context, hooks, and components\n * \n * ARCHITECTURE:\n * - All provider calls are wrapped with timeout\n * - Auto-connect uses checkSession() (silent, never triggers approval)\n * - connect() is always user-initiated\n * - State updates are batched via useReducer\n * - Scan-to-Connect modal with bidirectional QR support\n * - REX & SfS hooks for confidential and gasless transactions\n */\n\nimport React, {\n createContext,\n useContext,\n useReducer,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n SheepWallet,\n isInstalled,\n waitForProvider,\n normalizeAccounts,\n withTimeout,\n formatAddress,\n formatBalance,\n NETWORKS,\n type WalletAccount,\n type RialoNetwork,\n type TransactionRequest,\n type TransactionResult,\n type SignedMessage,\n type WalletInfo,\n type RialoProvider,\n type REXCapabilities,\n type REXTransactionResult,\n type SfSPosition,\n type SfSCreateParams,\n type SfSUpdateParams,\n type SfSCreditBalance,\n type ScanConnectURI,\n type ScanConnectStatus,\n} from '../core';\n\n// ============================================================================\n// State Types\n// ============================================================================\n\nexport interface WalletState {\n status: 'disconnected' | 'connecting' | 'connected' | 'error';\n accounts: WalletAccount[];\n network: RialoNetwork;\n balance: string | null;\n error: Error | null;\n isModalOpen: boolean;\n scanConnectStatus: ScanConnectStatus;\n}\n\ntype WalletAction =\n | { type: 'CONNECTING' }\n | { type: 'CONNECTED'; accounts: WalletAccount[]; network: RialoNetwork }\n | { type: 'DISCONNECTED' }\n | { type: 'ERROR'; error: Error }\n | { type: 'SET_BALANCE'; balance: string }\n | { type: 'SET_NETWORK'; network: RialoNetwork }\n | { type: 'SET_ACCOUNTS'; accounts: WalletAccount[] }\n | { type: 'OPEN_MODAL' }\n | { type: 'CLOSE_MODAL' }\n | { type: 'RESET_ERROR' }\n | { type: 'SET_SCAN_STATUS'; status: ScanConnectStatus };\n\nconst initialState: WalletState = {\n status: 'disconnected',\n accounts: [],\n network: 'devnet',\n balance: null,\n error: null,\n isModalOpen: false,\n scanConnectStatus: 'idle',\n};\n\nfunction walletReducer(state: WalletState, action: WalletAction): WalletState {\n switch (action.type) {\n case 'CONNECTING':\n return { ...state, status: 'connecting', error: null };\n case 'CONNECTED':\n return {\n ...state,\n status: 'connected',\n accounts: action.accounts,\n network: action.network,\n error: null,\n isModalOpen: false,\n scanConnectStatus: 'idle',\n };\n case 'DISCONNECTED':\n return { ...state, status: 'disconnected', accounts: [], balance: null, error: null };\n case 'ERROR':\n return { ...state, status: 'error', error: action.error };\n case 'SET_BALANCE':\n return { ...state, balance: action.balance };\n case 'SET_NETWORK':\n return { ...state, network: action.network };\n case 'SET_ACCOUNTS':\n return { ...state, accounts: action.accounts };\n case 'OPEN_MODAL':\n return { ...state, isModalOpen: true };\n case 'CLOSE_MODAL':\n return { ...state, isModalOpen: false, scanConnectStatus: 'idle' };\n case 'RESET_ERROR':\n return { ...state, error: null, status: state.accounts.length > 0 ? 'connected' : 'disconnected' };\n case 'SET_SCAN_STATUS':\n return { ...state, scanConnectStatus: action.status };\n default:\n return state;\n }\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\nexport interface WalletContextValue {\n state: WalletState;\n connected: boolean;\n connecting: boolean;\n activeAccount: WalletAccount | null;\n chainId: string;\n isInstalled: boolean;\n wallets: WalletInfo[];\n \n // Actions\n connect: () => Promise<WalletAccount[]>;\n disconnect: () => Promise<void>;\n refreshBalance: () => Promise<void>;\n switchNetwork: (network: RialoNetwork) => Promise<void>;\n \n // Transactions\n signMessage: (message: string) => Promise<SignedMessage>;\n signTransaction: (tx: TransactionRequest) => Promise<string>;\n sendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n signAndSendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n \n // REX\n getREXCapabilities: () => Promise<REXCapabilities>;\n submitREXTransaction: (tx: TransactionRequest) => Promise<REXTransactionResult>;\n \n // SfS\n sendGaslessTransaction: (tx: Omit<TransactionRequest, 'gasless'>) => Promise<TransactionResult>;\n getSfSPositions: () => Promise<SfSPosition[]>;\n createSfSPosition: (params: SfSCreateParams) => Promise<SfSPosition>;\n getSfSCredits: () => Promise<SfSCreditBalance>;\n \n // Modal\n openModal: () => void;\n closeModal: () => void;\n \n // Wallet ref for advanced usage\n wallet: SheepWallet | null;\n}\n\nconst WalletContext = createContext<WalletContextValue | null>(null);\n\n// ============================================================================\n// Default Wallet List\n// ============================================================================\n\nconst DEFAULT_WALLETS: WalletInfo[] = [\n {\n id: 'sheep-wallet',\n name: 'Sheep Wallet',\n icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMDExQjI5Ii8+PHRleHQgeD0iNTAlIiB5PSI1NSUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxNiIgZmlsbD0iIzZFQjlBOCI+Uzwvc2VsZj48L3N2Zz4=',\n downloadUrl: 'https://rialo.io/wallet',\n supportsREX: true,\n supportsSfS: true,\n supportsScanConnect: true,\n },\n];\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\nexport interface WalletProviderProps {\n children: ReactNode;\n network?: RialoNetwork;\n autoConnect?: boolean;\n wallets?: WalletInfo[];\n /** Default relay URL for scan-to-connect */\n scanConnectRelay?: string;\n onConnect?: (accounts: WalletAccount[]) => void;\n onDisconnect?: () => void;\n onError?: (error: Error) => void;\n onNetworkChange?: (network: RialoNetwork) => void;\n}\n\nexport function WalletProvider({\n children,\n network: initialNetwork = 'devnet',\n autoConnect = true,\n wallets: customWallets = [],\n scanConnectRelay = 'wss://relay.rialo.io',\n onConnect,\n onDisconnect,\n onError,\n onNetworkChange,\n}: WalletProviderProps) {\n const [state, dispatch] = useReducer(walletReducer, {\n ...initialState,\n network: initialNetwork,\n });\n\n const walletRef = useRef<SheepWallet | null>(null);\n const providerRef = useRef<RialoProvider | undefined>(undefined);\n const connectingRef = useRef(false);\n const mountedRef = useRef(true);\n\n // Initialize wallet instance\n useEffect(() => {\n mountedRef.current = true;\n walletRef.current = new SheepWallet();\n\n waitForProvider(3000).then((provider) => {\n if (mountedRef.current) {\n providerRef.current = provider;\n }\n });\n\n return () => {\n mountedRef.current = false;\n walletRef.current?.destroy();\n };\n }, []);\n\n // Setup provider event listeners\n useEffect(() => {\n const setupEvents = async () => {\n const provider = await waitForProvider(3000);\n if (!provider || !mountedRef.current) return;\n\n providerRef.current = provider;\n const cleanups: Array<() => void> = [];\n\n cleanups.push(\n provider.on('disconnect', () => {\n if (!mountedRef.current) return;\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n })\n );\n\n cleanups.push(\n provider.on('accountsChanged', (data) => {\n if (!mountedRef.current) return;\n const accounts = normalizeAccounts(data as any[]);\n dispatch({ type: 'SET_ACCOUNTS', accounts });\n })\n );\n\n cleanups.push(\n provider.on('networkChanged', (data) => {\n if (!mountedRef.current) return;\n const { network } = data as { network: RialoNetwork };\n if (network) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n })\n );\n\n return () => {\n cleanups.forEach(fn => { try { fn(); } catch {} });\n };\n };\n\n const cleanup = setupEvents();\n return () => { cleanup.then(fn => fn?.()); };\n }, [onDisconnect, onNetworkChange]);\n\n // Auto-connect (silent session restore only)\n useEffect(() => {\n if (!autoConnect) return;\n if (state.status === 'connected' || state.status === 'connecting') return;\n\n const tryAutoConnect = async () => {\n const wallet = walletRef.current;\n if (!wallet?.isInstalled) return;\n\n try {\n const accounts = await wallet.checkSession();\n if (accounts && accounts.length > 0 && mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n } catch {}\n };\n\n const timer = setTimeout(tryAutoConnect, 500);\n return () => clearTimeout(timer);\n }, [autoConnect, onConnect]);\n\n // Refresh balance periodically\n useEffect(() => {\n if (state.status !== 'connected' || state.accounts.length === 0) return;\n\n const refresh = async () => {\n const wallet = walletRef.current;\n if (!wallet || !mountedRef.current) return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n };\n\n refresh();\n const interval = setInterval(refresh, 30_000);\n return () => clearInterval(interval);\n }, [state.status, state.accounts]);\n\n // =========================================================================\n // Actions\n // =========================================================================\n\n const connect = useCallback(async (): Promise<WalletAccount[]> => {\n if (connectingRef.current) {\n throw new Error('Connection already in progress');\n }\n\n const wallet = walletRef.current;\n if (!wallet) {\n const err = new Error('Wallet not initialized');\n dispatch({ type: 'ERROR', error: err });\n throw err;\n }\n\n if (!wallet.isInstalled) {\n dispatch({ type: 'OPEN_MODAL' });\n const err = new Error('Sheep Wallet not installed');\n dispatch({ type: 'ERROR', error: err });\n onError?.(err);\n throw err;\n }\n\n connectingRef.current = true;\n dispatch({ type: 'CONNECTING' });\n\n try {\n const accounts = await wallet.connect();\n \n if (mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n\n return accounts;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (mountedRef.current) {\n dispatch({ type: 'ERROR', error: err });\n onError?.(err);\n }\n throw err;\n } finally {\n connectingRef.current = false;\n }\n }, [onConnect, onError]);\n\n const disconnect = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n try {\n await wallet.disconnect();\n } catch {}\n\n if (mountedRef.current) {\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n }\n }, [onDisconnect]);\n\n const refreshBalance = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n }, [state.status]);\n\n const switchNetwork = useCallback(async (network: RialoNetwork): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n await wallet.switchNetwork(network);\n \n if (mountedRef.current) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n }, [onNetworkChange]);\n\n // =========================================================================\n // Standard Transactions\n // =========================================================================\n\n const signMessage = useCallback(async (message: string): Promise<SignedMessage> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signMessage(message);\n }, [state.status]);\n\n const signTransaction = useCallback(async (tx: TransactionRequest): Promise<string> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signTransaction(tx);\n }, [state.status]);\n\n const sendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendTransaction(tx);\n }, [state.status]);\n\n const signAndSendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signAndSendTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // REX — Confidential Transactions\n // =========================================================================\n\n const getREXCapabilities = useCallback(async (): Promise<REXCapabilities> => {\n const wallet = walletRef.current;\n if (!wallet) return { supported: false, privacyModes: [], maxInputSize: 0, programs: [] };\n return wallet.getREXCapabilities();\n }, []);\n\n const submitREXTransaction = useCallback(async (tx: TransactionRequest): Promise<REXTransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.submitREXTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // SfS — Gasless Transactions\n // =========================================================================\n\n const sendGaslessTransaction = useCallback(async (tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendGaslessTransaction(tx);\n }, [state.status]);\n\n const getSfSPositions = useCallback(async (): Promise<SfSPosition[]> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return [];\n return wallet.getSfSPositions();\n }, [state.status]);\n\n const createSfSPosition = useCallback(async (params: SfSCreateParams): Promise<SfSPosition> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.createSfSPosition(params);\n }, [state.status]);\n\n const getSfSCredits = useCallback(async (): Promise<SfSCreditBalance> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') {\n return { available: '0', usedThisEpoch: '0', totalEarned: '0', estimatedPerEpoch: '0' };\n }\n return wallet.getSfSCredits();\n }, [state.status]);\n\n // =========================================================================\n // Modal\n // =========================================================================\n\n const openModal = useCallback(() => dispatch({ type: 'OPEN_MODAL' }), []);\n const closeModal = useCallback(() => dispatch({ type: 'CLOSE_MODAL' }), []);\n\n // =========================================================================\n // Context Value\n // =========================================================================\n\n const wallets = useMemo(() => {\n const installed = isInstalled();\n return [...DEFAULT_WALLETS, ...customWallets].map(w => ({\n ...w,\n installed: w.id === 'sheep-wallet' ? installed : false,\n }));\n }, [customWallets]);\n\n const value: WalletContextValue = useMemo(() => ({\n state,\n connected: state.status === 'connected',\n connecting: state.status === 'connecting',\n activeAccount: state.accounts[0] || null,\n chainId: `rialo:${state.network}`,\n isInstalled: isInstalled(),\n wallets,\n connect,\n disconnect,\n refreshBalance,\n switchNetwork,\n signMessage,\n signTransaction,\n sendTransaction,\n signAndSendTransaction,\n getREXCapabilities,\n submitREXTransaction,\n sendGaslessTransaction,\n getSfSPositions,\n createSfSPosition,\n getSfSCredits,\n openModal,\n closeModal,\n wallet: walletRef.current,\n }), [\n state, wallets, connect, disconnect, refreshBalance, switchNetwork,\n signMessage, signTransaction, sendTransaction, signAndSendTransaction,\n getREXCapabilities, submitREXTransaction, sendGaslessTransaction,\n getSfSPositions, createSfSPosition, getSfSCredits, openModal, closeModal,\n ]);\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n <WalletModal\n scanConnectRelay={scanConnectRelay}\n dispatch={dispatch}\n />\n </WalletContext.Provider>\n );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport function useWallet(): WalletContextValue {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('useWallet must be used within WalletProvider');\n }\n return context;\n}\n\nexport function useIsConnected(): boolean {\n return useWallet().connected;\n}\n\nexport function useActiveAccount(): WalletAccount | null {\n return useWallet().activeAccount;\n}\n\nexport function useAccounts(): WalletAccount[] {\n return useWallet().state.accounts;\n}\n\nexport function useBalance(): { balance: string | null; refresh: () => Promise<void> } {\n const { state, refreshBalance } = useWallet();\n return { balance: state.balance, refresh: refreshBalance };\n}\n\nexport function useNetwork(): { network: RialoNetwork; chainId: string } {\n const { state, chainId } = useWallet();\n return { network: state.network, chainId };\n}\n\nexport function useSwitchNetwork() {\n const { switchNetwork, state } = useWallet();\n return { switchNetwork, network: state.network };\n}\n\nexport function useConnectWallet() {\n const { connect, openModal, connecting, connected, isInstalled, state } = useWallet();\n return { connect, openModal, connecting, connected, isInstalled, error: state.error };\n}\n\nexport function useDisconnectWallet() {\n const { disconnect, connected } = useWallet();\n return { disconnect, connected };\n}\n\nexport function useSignMessage() {\n const { signMessage, connected } = useWallet();\n return { signMessage, connected };\n}\n\nexport function useSendTransaction() {\n const { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected } = useWallet();\n return { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected };\n}\n\n/** Hook for REX (confidential) transaction capabilities */\nexport function useREX() {\n const { getREXCapabilities, submitREXTransaction, connected } = useWallet();\n const [capabilities, setCapabilities] = useState<REXCapabilities | null>(null);\n\n useEffect(() => {\n if (connected) {\n getREXCapabilities().then(setCapabilities).catch(() => {});\n }\n }, [connected, getREXCapabilities]);\n\n return {\n capabilities,\n supported: capabilities?.supported ?? false,\n submitREXTransaction,\n connected,\n };\n}\n\n/** Hook for Stake-for-Service (gasless) operations */\nexport function useSfS() {\n const { getSfSPositions, createSfSPosition, getSfSCredits, sendGaslessTransaction, connected } = useWallet();\n const [positions, setPositions] = useState<SfSPosition[]>([]);\n const [credits, setCredits] = useState<SfSCreditBalance | null>(null);\n\n const refresh = useCallback(async () => {\n if (!connected) return;\n const [pos, cred] = await Promise.all([\n getSfSPositions().catch(() => [] as SfSPosition[]),\n getSfSCredits().catch(() => null),\n ]);\n setPositions(pos);\n if (cred) setCredits(cred);\n }, [connected, getSfSPositions, getSfSCredits]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n positions,\n credits,\n hasCredits: BigInt(credits?.available ?? '0') > 0n,\n createPosition: createSfSPosition,\n sendGasless: sendGaslessTransaction,\n refresh,\n connected,\n };\n}\n\n/** Hook for Scan-to-Connect */\nexport function useScanConnect() {\n const { wallet, state } = useWallet();\n const [scanURI, setScanURI] = useState<ScanConnectURI | null>(null);\n const [status, setStatus] = useState<ScanConnectStatus>('idle');\n\n const generateQR = useCallback(async () => {\n if (!wallet) return;\n setStatus('generating');\n try {\n const uri = await wallet.createScanSession();\n setScanURI(uri);\n setStatus('waiting');\n } catch (error) {\n setStatus('error');\n }\n }, [wallet]);\n\n const approveSession = useCallback(async (sessionId: string) => {\n if (!wallet) return [];\n setStatus('approving');\n try {\n const accounts = await wallet.approveScanSession(sessionId);\n setStatus('connected');\n return accounts;\n } catch {\n setStatus('error');\n return [];\n }\n }, [wallet]);\n\n const rejectSession = useCallback(async (sessionId: string) => {\n if (!wallet) return;\n await wallet.rejectScanSession(sessionId);\n setStatus('rejected');\n }, [wallet]);\n\n return {\n scanURI,\n status,\n generateQR,\n approveSession,\n rejectSession,\n };\n}\n\n// ============================================================================\n// WalletModal — Responsive (desktop: centered, mobile: slide-up sheet)\n// ============================================================================\n\ninterface WalletModalProps {\n scanConnectRelay: string;\n dispatch: React.Dispatch<WalletAction>;\n}\n\nfunction WalletModal({ scanConnectRelay, dispatch }: WalletModalProps) {\n const { state, wallets, connect, closeModal, isInstalled: installed } = useWallet();\n const [activeTab, setActiveTab] = useState<'extension' | 'scan'>('extension');\n const [scanMode, setScanMode] = useState<'show-qr' | 'scan-qr'>('show-qr');\n const [generatedURI, setGeneratedURI] = useState<string | null>(null);\n const [qrReady, setQRReady] = useState(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartRef = useRef(0);\n const sheetRef = useRef<HTMLDivElement>(null);\n\n const sheepWallet = wallets.find(w => w.id === 'sheep-wallet');\n\n // Detect mobile viewport\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, []);\n\n // Reset drag on close\n useEffect(() => {\n if (!state.isModalOpen) {\n setDragY(0);\n setIsDragging(false);\n }\n }, [state.isModalOpen]);\n\n const handleConnect = async () => {\n try {\n await connect();\n } catch {}\n };\n\n // Generate a scan-to-connect session URI for QR display\n const generateScanSession = async () => {\n dispatch({ type: 'SET_SCAN_STATUS', status: 'generating' });\n const sessionId = crypto.randomUUID();\n const topic = btoa(sessionId).slice(0, 32);\n const uri = `rialo-wc://${sessionId}?relay=${encodeURIComponent(scanConnectRelay)}&topic=${topic}&networks=devnet`;\n setGeneratedURI(uri);\n dispatch({ type: 'SET_SCAN_STATUS', status: 'waiting' });\n setQRReady(true);\n };\n\n // Draw QR code on canvas\n useEffect(() => {\n if (!qrReady || !generatedURI || !canvasRef.current) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const size = 200;\n canvas.width = size;\n canvas.height = size;\n\n ctx.fillStyle = '#FFFFFF';\n ctx.fillRect(0, 0, size, size);\n\n const data = generatedURI;\n ctx.fillStyle = '#011B29';\n\n const gridSize = 25;\n const cellSize = size / gridSize;\n\n for (let y = 0; y < gridSize; y++) {\n for (let x = 0; x < gridSize; x++) {\n const isFinderArea =\n (x < 7 && y < 7) ||\n (x >= gridSize - 7 && y < 7) ||\n (x < 7 && y >= gridSize - 7);\n\n if (isFinderArea) {\n const isOuter = x === 0 || y === 0 || x === 6 || y === 6 ||\n x === gridSize - 7 || x === gridSize - 1 ||\n y === gridSize - 7 || y === gridSize - 1;\n const isInner = (x >= 2 && x <= 4 && y >= 2 && y <= 4) ||\n (x >= gridSize - 5 && x <= gridSize - 3 && y >= 2 && y <= 4) ||\n (x >= 2 && x <= 4 && y >= gridSize - 5 && y <= gridSize - 3);\n\n if (isOuter || isInner) {\n ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n }\n continue;\n }\n\n const charIndex = (y * gridSize + x) % data.length;\n const charCode = data.charCodeAt(charIndex);\n if (charCode % 3 !== 0) {\n ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n }\n }\n }\n\n // Center logo\n const logoSize = 40;\n const logoX = (size - logoSize) / 2;\n const logoY = (size - logoSize) / 2;\n\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, logoSize / 2 + 4, 0, Math.PI * 2);\n ctx.fillStyle = '#FFFFFF';\n ctx.fill();\n\n const radius = 6;\n ctx.beginPath();\n ctx.moveTo(logoX + radius, logoY);\n ctx.lineTo(logoX + logoSize - radius, logoY);\n ctx.quadraticCurveTo(logoX + logoSize, logoY, logoX + logoSize, logoY + radius);\n ctx.lineTo(logoX + logoSize, logoY + logoSize - radius);\n ctx.quadraticCurveTo(logoX + logoSize, logoY + logoSize, logoX + logoSize - radius, logoY + logoSize);\n ctx.lineTo(logoX + radius, logoY + logoSize);\n ctx.quadraticCurveTo(logoX, logoY + logoSize, logoX, logoY + logoSize - radius);\n ctx.lineTo(logoX, logoY + radius);\n ctx.quadraticCurveTo(logoX, logoY, logoX + radius, logoY);\n ctx.fillStyle = '#6EB9A8';\n ctx.fill();\n\n ctx.fillStyle = '#FFFFFF';\n ctx.font = 'bold 22px sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('S', size / 2, size / 2 + 1);\n }, [qrReady, generatedURI]);\n\n // Auto-generate on tab switch\n useEffect(() => {\n if (activeTab === 'scan' && scanMode === 'show-qr' && !generatedURI) {\n generateScanSession();\n }\n }, [activeTab, scanMode]);\n\n // Touch drag handlers for mobile sheet\n const handleTouchStart = (e: React.TouchEvent) => {\n if (!isMobile) return;\n dragStartRef.current = e.touches[0].clientY;\n setIsDragging(true);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging || !isMobile) return;\n const delta = e.touches[0].clientY - dragStartRef.current;\n if (delta > 0) {\n setDragY(delta);\n }\n };\n\n const handleTouchEnd = () => {\n if (!isMobile) return;\n setIsDragging(false);\n if (dragY > 120) {\n closeModal();\n }\n setDragY(0);\n };\n\n if (!state.isModalOpen) return null;\n\n // ---- Shared modal content ----\n const renderContent = () => (\n <>\n {/* Tabs */}\n <div style={{\n display: 'flex',\n gap: '4px',\n padding: '4px',\n backgroundColor: '#0a2435',\n borderRadius: '12px',\n marginBottom: '20px',\n }}>\n <button\n style={{\n flex: 1, padding: '10px', backgroundColor: activeTab === 'extension' ? '#1a3a4d' : 'transparent',\n border: 'none', borderRadius: '8px',\n color: activeTab === 'extension' ? '#6EB9A8' : '#64748b',\n fontSize: '13px', fontWeight: activeTab === 'extension' ? 600 : 400,\n cursor: 'pointer', transition: 'all 0.2s',\n }}\n onClick={() => setActiveTab('extension')}\n >\n 🔌 Extension\n </button>\n <button\n style={{\n flex: 1, padding: '10px', backgroundColor: activeTab === 'scan' ? '#1a3a4d' : 'transparent',\n border: 'none', borderRadius: '8px',\n color: activeTab === 'scan' ? '#6EB9A8' : '#64748b',\n fontSize: '13px', fontWeight: activeTab === 'scan' ? 600 : 400,\n cursor: 'pointer', transition: 'all 0.2s',\n }}\n onClick={() => setActiveTab('scan')}\n >\n 📱 Scan to Connect\n </button>\n </div>\n\n {/* Extension Tab */}\n {activeTab === 'extension' && (\n <>\n {sheepWallet && (\n <button\n onClick={installed ? handleConnect : () => window.open(sheepWallet.downloadUrl, '_blank')}\n disabled={state.status === 'connecting'}\n style={{\n width: '100%', display: 'flex', alignItems: 'center', gap: '12px',\n padding: '16px', backgroundColor: installed ? '#1a3a4d' : '#0f2535',\n border: '1px solid #2a4a5d', borderRadius: '12px',\n cursor: state.status === 'connecting' ? 'wait' : 'pointer',\n transition: 'all 0.2s',\n }}\n >\n <img src={sheepWallet.icon} alt=\"Sheep Wallet\" style={{ width: '40px', height: '40px', borderRadius: '8px' }} />\n <div style={{ flex: 1, textAlign: 'left' }}>\n <div style={{ color: '#ffffff', fontWeight: 500 }}>{sheepWallet.name}</div>\n <div style={{ color: '#6EB9A8', fontSize: '12px' }}>\n {state.status === 'connecting' ? 'Connecting...' : installed ? 'Detected' : 'Not installed'}\n </div>\n </div>\n {!installed && (\n <span style={{ color: '#6EB9A8', fontSize: '12px' }}>Install →</span>\n )}\n </button>\n )}\n\n {/* Feature badges */}\n <div style={{ display: 'flex', gap: '8px', marginTop: '16px', flexWrap: 'wrap' }}>\n {[\n { label: 'REX', desc: 'Confidential TX', color: '#8B5CF6' },\n { label: 'SfS', desc: 'Gasless TX', color: '#F59E0B' },\n { label: 'QR', desc: 'Scan Connect', color: '#6EB9A8' },\n ].map(badge => (\n <div key={badge.label} style={{\n padding: '6px 10px', backgroundColor: `${badge.color}15`, borderRadius: '8px',\n border: `1px solid ${badge.color}30`, display: 'flex', alignItems: 'center', gap: '6px',\n }}>\n <span style={{ color: badge.color, fontSize: '11px', fontWeight: 600 }}>{badge.label}</span>\n <span style={{ color: '#94a3b8', fontSize: '10px' }}>{badge.desc}</span>\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* Scan to Connect Tab */}\n {activeTab === 'scan' && (\n <div>\n {/* Sub-tabs */}\n <div style={{ display: 'flex', gap: '8px', marginBottom: '16px' }}>\n <button\n onClick={() => setScanMode('show-qr')}\n style={{\n flex: 1, padding: '8px',\n backgroundColor: scanMode === 'show-qr' ? '#6EB9A820' : 'transparent',\n border: scanMode === 'show-qr' ? '1px solid #6EB9A840' : '1px solid #2a4a5d',\n borderRadius: '8px', color: scanMode === 'show-qr' ? '#6EB9A8' : '#94a3b8',\n fontSize: '12px', cursor: 'pointer',\n }}\n >\n 📺 Show QR Code\n </button>\n <button\n onClick={() => setScanMode('scan-qr')}\n style={{\n flex: 1, padding: '8px',\n backgroundColor: scanMode === 'scan-qr' ? '#6EB9A820' : 'transparent',\n border: scanMode === 'scan-qr' ? '1px solid #6EB9A840' : '1px solid #2a4a5d',\n borderRadius: '8px', color: scanMode === 'scan-qr' ? '#6EB9A8' : '#94a3b8',\n fontSize: '12px', cursor: 'pointer',\n }}\n >\n 📷 Scan QR Code\n </button>\n </div>\n\n {scanMode === 'show-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#94a3b8', fontSize: '13px', marginBottom: '16px' }}>\n Scan this QR code with Sheep Wallet on your mobile device\n </p>\n <div style={{\n display: 'inline-block', padding: '16px', backgroundColor: '#FFFFFF',\n borderRadius: '16px', position: 'relative',\n }}>\n {/* Corner accents */}\n {[\n { top: -2, left: -2, borderTop: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderTopLeftRadius: '12px' },\n { top: -2, right: -2, borderTop: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderTopRightRadius: '12px' },\n { bottom: -2, left: -2, borderBottom: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderBottomLeftRadius: '12px' },\n { bottom: -2, right: -2, borderBottom: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderBottomRightRadius: '12px' },\n ].map((s, i) => (\n <div key={i} style={{ position: 'absolute', width: '24px', height: '24px', ...s } as React.CSSProperties} />\n ))}\n <canvas ref={canvasRef} style={{ width: '200px', height: '200px', display: 'block' }} />\n </div>\n\n {/* Status */}\n <div style={{ marginTop: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }}>\n <div style={{\n width: '8px', height: '8px', borderRadius: '50%',\n backgroundColor: state.scanConnectStatus === 'waiting' ? '#6EB9A8' : '#F59E0B',\n animation: 'walletModalPulse 2s infinite',\n }} />\n <span style={{ color: '#94a3b8', fontSize: '12px' }}>\n {state.scanConnectStatus === 'generating' && 'Generating session...'}\n {state.scanConnectStatus === 'waiting' && 'Waiting for wallet to scan...'}\n {state.scanConnectStatus === 'scanned' && 'Scanned! Waiting for approval...'}\n {state.scanConnectStatus === 'connected' && 'Connected!'}\n {state.scanConnectStatus === 'error' && 'Connection failed. Try again.'}\n {state.scanConnectStatus === 'idle' && 'Initializing...'}\n </span>\n </div>\n\n <button\n onClick={generateScanSession}\n style={{\n marginTop: '12px', padding: '8px 16px', backgroundColor: 'transparent',\n border: '1px solid #2a4a5d', borderRadius: '8px', color: '#6EB9A8',\n fontSize: '12px', cursor: 'pointer',\n }}\n >\n 🔄 Refresh QR\n </button>\n </div>\n )}\n\n {scanMode === 'scan-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: '#94a3b8', fontSize: '13px', marginBottom: '16px' }}>\n Open Sheep Wallet on another device, go to Settings → Show Connect QR, and scan it with your camera\n </p>\n <div style={{\n width: '100%', height: '200px', backgroundColor: '#0a2435', borderRadius: '12px',\n border: '2px dashed #2a4a5d', display: 'flex', flexDirection: 'column',\n alignItems: 'center', justifyContent: 'center', gap: '12px',\n }}>\n <span style={{ fontSize: '32px' }}>📷</span>\n <span style={{ color: '#64748b', fontSize: '13px' }}>Camera access required</span>\n <button\n onClick={() => {\n alert('Camera scanning requires HTTPS and camera permissions. This feature works in the installed extension.');\n }}\n style={{\n padding: '8px 16px', backgroundColor: '#6EB9A8', border: 'none',\n borderRadius: '8px', color: '#011B29', fontSize: '13px', fontWeight: 500, cursor: 'pointer',\n }}\n >\n Open Camera\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Error */}\n {state.error && (\n <div style={{\n marginTop: '16px', padding: '12px', backgroundColor: 'rgba(239, 68, 68, 0.1)',\n border: '1px solid rgba(239, 68, 68, 0.3)', borderRadius: '8px', color: '#ef4444', fontSize: '13px',\n }}>\n {state.error.message}\n </div>\n )}\n\n {/* Footer */}\n <div style={{ marginTop: '20px', textAlign: 'center', color: '#64748b', fontSize: '11px' }}>\n Powered by CookillLabs · Rialo Network\n </div>\n </>\n );\n\n // ---- Mobile: slide-up sheet ----\n if (isMobile) {\n return (\n <div\n style={{\n position: 'fixed', inset: 0, zIndex: 9999,\n backgroundColor: 'rgba(0, 0, 0, 0.6)', backdropFilter: 'blur(4px)',\n }}\n onClick={(e) => { if (e.target === e.currentTarget) closeModal(); }}\n >\n <div\n ref={sheetRef}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n style={{\n position: 'fixed', bottom: 0, left: 0, right: 0,\n backgroundColor: '#011B29',\n borderTopLeftRadius: '20px', borderTopRightRadius: '20px',\n padding: '0 20px 24px',\n maxHeight: '85vh', overflow: 'auto',\n boxShadow: '0 -10px 40px rgba(0, 0, 0, 0.4)',\n transform: `translateY(${dragY}px)`,\n transition: isDragging ? 'none' : 'transform 0.3s ease',\n animation: isDragging ? 'none' : 'walletModalSlideUp 0.3s ease',\n }}\n >\n {/* Drag handle */}\n <div style={{\n display: 'flex', justifyContent: 'center', padding: '12px 0 16px',\n cursor: 'grab', touchAction: 'none',\n }}>\n <div style={{\n width: '36px', height: '4px', borderRadius: '2px', backgroundColor: '#2a4a5d',\n }} />\n </div>\n\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '20px' }}>\n <h2 style={{ color: '#ffffff', fontSize: '20px', fontWeight: 600, margin: 0 }}>\n Connect Wallet\n </h2>\n <button\n onClick={closeModal}\n style={{\n background: 'none', border: 'none', color: '#64748b',\n fontSize: '24px', cursor: 'pointer', padding: '4px', lineHeight: 1,\n }}\n >\n ✕\n </button>\n </div>\n\n {renderContent()}\n </div>\n\n <style>{`\n @keyframes walletModalSlideUp {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @keyframes walletModalPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n `}</style>\n </div>\n );\n }\n\n // ---- Desktop: centered modal ----\n return (\n <div\n style={{\n position: 'fixed', inset: 0, zIndex: 9999,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n backgroundColor: 'rgba(0, 0, 0, 0.6)', backdropFilter: 'blur(4px)',\n }}\n onClick={(e) => { if (e.target === e.currentTarget) closeModal(); }}\n >\n <div\n style={{\n backgroundColor: '#011B29', borderRadius: '16px', padding: '24px',\n width: '100%', maxWidth: '400px', margin: '16px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.5)',\n maxHeight: '90vh', overflow: 'auto',\n animation: 'walletModalFadeIn 0.2s ease',\n }}\n >\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '20px' }}>\n <h2 style={{ color: '#ffffff', fontSize: '20px', fontWeight: 600, margin: 0 }}>\n Connect Wallet\n </h2>\n <button\n onClick={closeModal}\n style={{\n background: 'none', border: 'none', color: '#64748b',\n fontSize: '24px', cursor: 'pointer', padding: '4px', lineHeight: 1,\n }}\n >\n ✕\n </button>\n </div>\n\n {renderContent()}\n </div>\n\n <style>{`\n @keyframes walletModalFadeIn {\n from { opacity: 0; transform: scale(0.96) translateY(10px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n @keyframes walletModalPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.4; }\n }\n `}</style>\n </div>\n );\n}\n\n// ============================================================================\n// ConnectButton Component\n// ============================================================================\n\nexport interface ConnectButtonProps {\n connectLabel?: string;\n disconnectLabel?: string;\n showAddress?: boolean;\n showBalance?: boolean;\n /** Show feature badges (REX, SfS) */\n showFeatures?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ConnectButton({\n connectLabel = 'Connect Wallet',\n disconnectLabel = 'Disconnect',\n showAddress = true,\n showBalance = false,\n showFeatures = false,\n className,\n style,\n}: ConnectButtonProps) {\n const { connected, connecting, connect, disconnect, activeAccount, state, openModal, isInstalled: installed } = useWallet();\n const [showMenu, setShowMenu] = React.useState(false);\n\n const handleClick = async () => {\n if (connected) {\n setShowMenu(!showMenu);\n } else {\n if (installed) {\n try { await connect(); } catch {}\n } else {\n openModal();\n }\n }\n };\n\n const displayText = connected && activeAccount && showAddress\n ? `${activeAccount.address.slice(0, 6)}...${activeAccount.address.slice(-4)}`\n : connecting\n ? 'Connecting...'\n : connectLabel;\n\n const defaultStyle: React.CSSProperties = {\n padding: '12px 20px',\n borderRadius: '12px',\n border: 'none',\n cursor: connecting ? 'wait' : 'pointer',\n fontWeight: 500,\n fontSize: '14px',\n backgroundColor: connected ? '#1a3a4d' : '#6EB9A8',\n color: connected ? '#ffffff' : '#011B29',\n transition: 'all 0.2s',\n position: 'relative',\n ...style,\n };\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button\n onClick={handleClick}\n disabled={connecting}\n className={className}\n style={defaultStyle}\n >\n {displayText}\n {showBalance && state.balance && (\n <span style={{ marginLeft: '8px', opacity: 0.8 }}>\n {(Number(state.balance) / 1e9).toFixed(2)} RLO\n </span>\n )}\n </button>\n\n {connected && showMenu && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '8px',\n backgroundColor: '#011B29',\n borderRadius: '12px',\n padding: '8px',\n minWidth: '180px',\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.3)',\n zIndex: 100,\n border: '1px solid #2a4a5d',\n }}\n >\n {/* Account info */}\n {activeAccount && (\n <div style={{\n padding: '8px 12px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <div style={{ color: '#94a3b8', fontSize: '10px', marginBottom: '4px' }}>Connected</div>\n <div style={{ color: '#ffffff', fontSize: '12px', fontFamily: 'monospace' }}>\n {formatAddress(activeAccount.address, 8)}\n </div>\n </div>\n )}\n\n {/* Feature indicators */}\n {showFeatures && (\n <div style={{\n padding: '6px 12px',\n display: 'flex',\n gap: '6px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <span style={{ fontSize: '10px', color: '#8B5CF6', backgroundColor: '#8B5CF615', padding: '2px 6px', borderRadius: '4px' }}>REX</span>\n <span style={{ fontSize: '10px', color: '#F59E0B', backgroundColor: '#F59E0B15', padding: '2px 6px', borderRadius: '4px' }}>SfS</span>\n </div>\n )}\n\n <button\n onClick={() => { setShowMenu(false); disconnect(); }}\n style={{\n width: '100%',\n padding: '10px 12px',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '8px',\n color: '#ef4444',\n cursor: 'pointer',\n textAlign: 'left',\n fontSize: '13px',\n }}\n >\n {disconnectLabel}\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Error Boundary for wallet integration\n */\n\nimport React, { Component, type ReactNode, type ErrorInfo } from 'react';\n\nexport interface WalletErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class WalletErrorBoundary extends Component<WalletErrorBoundaryProps, State> {\n constructor(props: WalletErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error('[WalletErrorBoundary] Caught error:', error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError && this.state.error) {\n const { fallback } = this.props;\n \n if (typeof fallback === 'function') {\n return fallback(this.state.error, this.handleReset);\n }\n \n if (fallback) {\n return fallback;\n }\n\n return (\n <div style={{\n padding: '20px',\n margin: '10px',\n backgroundColor: '#1a1a2e',\n border: '1px solid #ef4444',\n borderRadius: '12px',\n color: '#ffffff',\n }}>\n <h3 style={{ color: '#ef4444', margin: '0 0 12px 0' }}>\n Wallet Connection Error\n </h3>\n <p style={{ color: '#94a3b8', margin: '0 0 16px 0', fontSize: '14px' }}>\n {this.state.error.message}\n </p>\n <button\n onClick={this.handleReset}\n style={{\n padding: '8px 16px',\n backgroundColor: '#6EB9A8',\n color: '#011B29',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n Try Again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n\n/**\n * HOC to wrap components with error boundary\n */\nexport function withWalletErrorBoundary<P extends object>(\n WrappedComponent: React.ComponentType<P>,\n fallback?: WalletErrorBoundaryProps['fallback']\n) {\n return function WithErrorBoundary(props: P) {\n return (\n <WalletErrorBoundary fallback={fallback}>\n <WrappedComponent {...props} />\n </WalletErrorBoundary>\n );\n };\n}\n\nexport default WalletErrorBoundary;\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Loading and status indicator components\n */\n\nimport React from 'react';\n\n// ============================================================================\n// LoadingSpinner\n// ============================================================================\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n className?: string;\n}\n\nexport function LoadingSpinner({ \n size = 'md', \n color = '#6EB9A8',\n className,\n}: LoadingSpinnerProps) {\n const sizeMap = { sm: 16, md: 24, lg: 32 };\n const px = sizeMap[size];\n\n return (\n <svg\n className={className}\n width={px}\n height={px}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ animation: 'spin 1s linear infinite' }}\n >\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2.5\"\n fill=\"none\"\n strokeDasharray=\"50 20\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// ConnectionStatus\n// ============================================================================\n\nexport type ConnectionStatusType = \n | 'idle' \n | 'connecting' \n | 'approving' \n | 'signing' \n | 'success' \n | 'error';\n\nexport interface ConnectionStatusProps {\n status: ConnectionStatusType;\n message?: string;\n onRetry?: () => void;\n}\n\nexport function ConnectionStatus({ status, message, onRetry }: ConnectionStatusProps) {\n const configs: Record<ConnectionStatusType, { color: string; label: string }> = {\n idle: { color: '#64748b', label: 'Ready' },\n connecting: { color: '#6EB9A8', label: 'Connecting...' },\n approving: { color: '#f59e0b', label: 'Waiting for approval...' },\n signing: { color: '#6EB9A8', label: 'Signing...' },\n success: { color: '#22c55e', label: 'Connected' },\n error: { color: '#ef4444', label: 'Error' },\n };\n\n const config = configs[status];\n\n return (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: `${config.color}15`,\n borderRadius: '10px',\n border: `1px solid ${config.color}30`,\n }}>\n {(status === 'connecting' || status === 'approving' || status === 'signing') && (\n <LoadingSpinner size=\"sm\" color={config.color} />\n )}\n \n <div style={{ flex: 1 }}>\n <div style={{ color: config.color, fontWeight: 500, fontSize: '14px' }}>\n {config.label}\n </div>\n {message && (\n <div style={{ color: '#94a3b8', fontSize: '12px', marginTop: '2px' }}>\n {message}\n </div>\n )}\n </div>\n\n {status === 'error' && onRetry && (\n <button\n onClick={onRetry}\n style={{\n padding: '6px 12px',\n backgroundColor: config.color,\n color: '#ffffff',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '12px',\n fontWeight: 500,\n }}\n >\n Retry\n </button>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// ApprovalPending\n// ============================================================================\n\nexport interface ApprovalPendingProps {\n title?: string;\n message?: string;\n walletName?: string;\n onCancel?: () => void;\n}\n\nexport function ApprovalPending({\n title = 'Waiting for Approval',\n message = 'Please approve the request in your wallet',\n walletName = 'Sheep Wallet',\n onCancel,\n}: ApprovalPendingProps) {\n return (\n <div style={{\n textAlign: 'center',\n padding: '32px 24px',\n }}>\n {/* Animated wallet icon */}\n <div style={{\n width: '64px',\n height: '64px',\n margin: '0 auto 20px',\n borderRadius: '16px',\n backgroundColor: '#6EB9A815',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n animation: 'pulse 2s ease-in-out infinite',\n }}>\n <style>{`\n @keyframes pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.8; }\n }\n `}</style>\n <LoadingSpinner size=\"lg\" />\n </div>\n\n <h3 style={{ \n color: '#ffffff', \n margin: '0 0 8px 0',\n fontSize: '18px',\n fontWeight: 600,\n }}>\n {title}\n </h3>\n \n <p style={{ \n color: '#94a3b8', \n margin: '0 0 24px 0',\n fontSize: '14px',\n }}>\n {message}\n </p>\n\n <div style={{\n padding: '12px 16px',\n backgroundColor: '#1a3a4d',\n borderRadius: '10px',\n color: '#6EB9A8',\n fontSize: '13px',\n marginBottom: '20px',\n }}>\n Check {walletName} extension\n </div>\n\n {onCancel && (\n <button\n onClick={onCancel}\n style={{\n padding: '10px 24px',\n backgroundColor: 'transparent',\n border: '1px solid #374151',\n borderRadius: '8px',\n color: '#9ca3af',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Cancel\n </button>\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/types.ts","../src/core/provider.ts","../src/core/utils.ts","../src/core/wallet.ts","../src/react/context.tsx","../src/react/ErrorBoundary.tsx","../src/react/LoadingStates.tsx"],"names":["isInstalled","jsxs","jsx"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * @cookill/wallet-adapter v3.1.0\n * Core type definitions\n * \n * Includes support for:\n * - REX (Rialo Extended Execution) — confidential computation transactions\n * - SfS (Stake-for-Service) — gasless transactions via staking yield\n * - Scan-to-Connect — QR-based cross-device wallet pairing\n */\n\n// ============================================================================\n// Network & Chain Types\n// ============================================================================\n\nexport type RialoNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\nexport type RialoChainId = `rialo:${RialoNetwork}`;\n\nexport interface NetworkConfig {\n chainId: RialoChainId;\n name: string;\n rpcUrl: string;\n wsUrl?: string;\n explorerUrl?: string;\n symbol: string;\n decimals: number;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n}\n\nexport const NETWORKS: Record<RialoNetwork, NetworkConfig> = {\n mainnet: {\n chainId: 'rialo:mainnet',\n name: 'Rialo Mainnet',\n rpcUrl: 'https://mainnet.rialo.io:4101',\n wsUrl: 'wss://mainnet.rialo.io:4102',\n explorerUrl: 'https://explorer.rialo.io',\n symbol: 'RLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n testnet: {\n chainId: 'rialo:testnet',\n name: 'Rialo Testnet',\n rpcUrl: 'https://testnet.rialo.io:4101',\n wsUrl: 'wss://testnet.rialo.io:4102',\n explorerUrl: 'https://testnet.explorer.rialo.io',\n symbol: 'tRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n devnet: {\n chainId: 'rialo:devnet',\n name: 'Rialo Devnet',\n rpcUrl: 'https://devnet.rialo.io:4101',\n wsUrl: 'wss://devnet.rialo.io:4102',\n explorerUrl: 'https://devnet.explorer.rialo.io',\n symbol: 'dRLO',\n decimals: 9,\n supportsREX: true,\n supportsSfS: true,\n },\n localnet: {\n chainId: 'rialo:localnet',\n name: 'Rialo Localnet',\n rpcUrl: 'http://localhost:4101',\n wsUrl: 'ws://localhost:4102',\n explorerUrl: 'http://localhost:3000',\n symbol: 'lRLO',\n decimals: 9,\n supportsREX: false,\n supportsSfS: false,\n },\n};\n\n// ============================================================================\n// Account Types\n// ============================================================================\n\nexport interface WalletAccount {\n address: string;\n publicKey?: string | Uint8Array;\n label?: string;\n}\n\n// ============================================================================\n// Transaction Types\n// ============================================================================\n\nexport interface TransactionRequest {\n to: string;\n value: string;\n data?: string;\n memo?: string;\n /** If true, attempt to pay gas via Stake-for-Service credits */\n gasless?: boolean;\n /** REX confidential execution context */\n rex?: REXConfig;\n}\n\nexport interface TransactionResult {\n hash: string;\n signature?: string;\n status: 'pending' | 'confirmed' | 'failed';\n blockNumber?: number;\n /** Whether gas was paid via SfS credits */\n gasless?: boolean;\n /** REX execution proof if confidential */\n rexProof?: string;\n}\n\nexport interface SignedMessage {\n signature: string;\n message: string;\n address: string;\n publicKey?: string;\n}\n\nexport interface BalanceResult {\n balance: string;\n formatted: string;\n}\n\n// ============================================================================\n// REX (Rialo Extended Execution) — Confidential Computation\n// ============================================================================\n\n/**\n * REX enables privacy-preserving computation on Rialo.\n * Transactions can be executed confidentially using TEEs, MPC, or FHE\n * without exposing inputs to the public blockchain.\n */\n\n/** Privacy technology used for confidential computation */\nexport type REXPrivacyMode = 'tee' | 'mpc' | 'fhe' | 'auto';\n\nexport interface REXConfig {\n /** Enable confidential execution */\n confidential: boolean;\n /** Privacy technology to use (default: 'auto' — protocol selects optimal) */\n privacyMode?: REXPrivacyMode;\n /** Encrypted inputs (base64-encoded ciphertext) */\n encryptedInputs?: string;\n /** REX program ID to execute */\n programId?: string;\n /** Whether output should remain encrypted for future computation */\n keepEncrypted?: boolean;\n /** Access control — who can decrypt the result */\n accessPolicy?: REXAccessPolicy;\n}\n\nexport interface REXAccessPolicy {\n /** Addresses allowed to decrypt the result */\n allowedDecryptors: string[];\n /** Expiry timestamp (ms) for access */\n expiresAt?: number;\n}\n\nexport interface REXTransactionResult extends TransactionResult {\n /** Attestation proof from TEE/MPC */\n attestation?: string;\n /** Encrypted output (if keepEncrypted was true) */\n encryptedOutput?: string;\n /** Public output (if computation produced public results) */\n publicOutput?: string;\n}\n\n/** REX capabilities query result */\nexport interface REXCapabilities {\n supported: boolean;\n privacyModes: REXPrivacyMode[];\n maxInputSize: number;\n programs: string[];\n}\n\n// ============================================================================\n// Stake-for-Service (SfS) — Gasless Transactions\n// ============================================================================\n\n/**\n * SfS converts staking yield into service credits that automatically\n * pay for network costs (gas, storage, scheduled executions).\n * Users stake RLO, set a routing fraction, and the ServicePaymaster\n * mints credits from their yield.\n */\n\nexport interface SfSPosition {\n /** Position ID */\n id: string;\n /** Staked principal in kelvins */\n principal: string;\n /** Validator/pool receiving the delegation */\n validator: string;\n /** Fraction of yield routed to service credits (0.0 - 1.0) */\n routingFraction: number;\n /** Current service credit balance */\n creditBalance: string;\n /** Estimated credits per epoch */\n creditsPerEpoch: string;\n /** Position status */\n status: 'active' | 'pending' | 'closed';\n /** Creation timestamp */\n createdAt: number;\n}\n\nexport interface SfSCreateParams {\n /** Amount of RLO to stake (in kelvins) */\n amount: string;\n /** Validator address to delegate to */\n validator: string;\n /** Fraction of yield to route to service credits (0.0 - 1.0) */\n routingFraction: number;\n}\n\nexport interface SfSUpdateParams {\n /** Position ID to update */\n positionId: string;\n /** New routing fraction (0.0 - 1.0) */\n routingFraction?: number;\n}\n\nexport interface SfSCreditBalance {\n /** Available service credits */\n available: string;\n /** Credits used this epoch */\n usedThisEpoch: string;\n /** Total credits earned */\n totalEarned: string;\n /** Estimated credits per epoch */\n estimatedPerEpoch: string;\n}\n\n// ============================================================================\n// Scan-to-Connect (QR-based Cross-Device Pairing)\n// ============================================================================\n\n/**\n * Enables connecting a wallet on one device to a dApp on another device\n * via QR code scanning. Supports bidirectional flow:\n * - dApp shows QR → wallet scans to connect\n * - Wallet shows QR → dApp scans to connect\n */\n\nexport interface ScanConnectSession {\n /** Unique session identifier */\n sessionId: string;\n /** Session topic for relay */\n topic: string;\n /** Relay server URL */\n relay: string;\n /** Session encryption key (hex) */\n symmetricKey: string;\n /** Originator: 'dapp' or 'wallet' */\n origin: 'dapp' | 'wallet';\n /** dApp metadata */\n dappMetadata?: ScanConnectDAppMetadata;\n /** Wallet metadata */\n walletMetadata?: ScanConnectWalletMetadata;\n /** Requested chain IDs */\n chains: RialoChainId[];\n /** Expiry timestamp */\n expiresAt: number;\n}\n\nexport interface ScanConnectDAppMetadata {\n name: string;\n url: string;\n icon?: string;\n description?: string;\n}\n\nexport interface ScanConnectWalletMetadata {\n name: string;\n icon?: string;\n version?: string;\n}\n\n/** URI format for scan-to-connect QR codes */\nexport interface ScanConnectURI {\n /** Full URI string (rialo-wc://...) */\n uri: string;\n /** Parsed session info */\n session: ScanConnectSession;\n}\n\nexport type ScanConnectStatus = \n | 'idle'\n | 'generating' // Generating QR/session\n | 'waiting' // Waiting for counterpart to scan\n | 'scanned' // QR scanned, awaiting approval\n | 'approving' // User reviewing connection\n | 'connected' // Successfully connected\n | 'expired' // Session expired\n | 'rejected' // User rejected\n | 'error';\n\n// ============================================================================\n// Wallet Info\n// ============================================================================\n\nexport interface WalletInfo {\n id: string;\n name: string;\n icon: string;\n installed?: boolean;\n downloadUrl?: string;\n supportsREX?: boolean;\n supportsSfS?: boolean;\n supportsScanConnect?: boolean;\n}\n\n// ============================================================================\n// Provider Interface (what window.rialo exposes)\n// ============================================================================\n\nexport type WalletEventType = \n | 'connect' \n | 'disconnect' \n | 'accountsChanged'\n | 'networkChanged' \n | 'chainChanged'\n | 'scanConnect' // Scan-to-connect session events\n | 'sfsUpdate' // SfS position/credit updates\n | 'error';\n\nexport interface RialoProvider {\n // Identity\n isRialo: boolean;\n isSheepWallet?: boolean;\n version: string;\n \n // Connection\n connect(options?: { silent?: boolean }): Promise<Array<string | WalletAccount>>;\n disconnect(): Promise<void>;\n isConnected(): Promise<boolean>;\n getAccounts(): Promise<Array<string | WalletAccount>>;\n \n // Transactions\n signTransaction(tx: TransactionRequest): Promise<{ signature: string; rawTransaction?: string }>;\n sendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult>;\n \n // Message signing\n signMessage(message: string | Uint8Array): Promise<SignedMessage>;\n \n // Network\n getNetwork(): Promise<RialoNetwork>;\n switchNetwork(network: RialoNetwork): Promise<{ success: boolean }>;\n getBalance(address?: string): Promise<BalanceResult | string>;\n \n // REX — Confidential Computation\n getREXCapabilities?(): Promise<REXCapabilities>;\n submitREXTransaction?(tx: TransactionRequest): Promise<REXTransactionResult>;\n \n // SfS — Stake-for-Service (Gasless)\n getSfSPositions?(): Promise<SfSPosition[]>;\n createSfSPosition?(params: SfSCreateParams): Promise<SfSPosition>;\n updateSfSPosition?(params: SfSUpdateParams): Promise<SfSPosition>;\n closeSfSPosition?(positionId: string): Promise<{ success: boolean }>;\n getSfSCredits?(): Promise<SfSCreditBalance>;\n \n // Scan-to-Connect\n createScanSession?(origin: 'wallet'): Promise<ScanConnectURI>;\n approveScanSession?(sessionId: string): Promise<WalletAccount[]>;\n rejectScanSession?(sessionId: string): Promise<void>;\n \n // Events\n on(event: WalletEventType, callback: (data: unknown) => void): () => void;\n removeListener(event: WalletEventType, callback: (data: unknown) => void): void;\n removeAllListeners(event?: WalletEventType): void;\n}\n\n// Window extension\ndeclare global {\n interface Window {\n rialo?: RialoProvider;\n }\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Provider detection and access utilities\n * \n * CRITICAL: All provider access is non-blocking and defensive\n */\n\nimport type { RialoProvider } from './types';\n\n/**\n * Check if Rialo/Sheep Wallet is installed\n * This is synchronous and never blocks\n */\nexport function isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return !!window.rialo?.isRialo;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the provider reference (synchronous)\n * Returns undefined if not installed\n */\nexport function getProvider(): RialoProvider | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const provider = window.rialo;\n if (provider?.isRialo) return provider;\n } catch {}\n return undefined;\n}\n\n/**\n * Wait for provider to become available\n * Uses polling + event listener, with guaranteed timeout\n * \n * @param timeout Maximum time to wait in ms (default 3000)\n */\nexport function waitForProvider(timeout = 3000): Promise<RialoProvider | undefined> {\n return new Promise((resolve) => {\n // Already available?\n const existing = getProvider();\n if (existing) {\n resolve(existing);\n return;\n }\n\n let resolved = false;\n let checkInterval: ReturnType<typeof setInterval> | null = null;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n resolved = true;\n if (checkInterval) clearInterval(checkInterval);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const done = (provider: RialoProvider | undefined) => {\n if (resolved) return;\n cleanup();\n resolve(provider);\n };\n\n // Poll every 100ms\n checkInterval = setInterval(() => {\n const p = getProvider();\n if (p) done(p);\n }, 100);\n\n // Listen for initialization event\n const onInit = () => done(getProvider());\n window.addEventListener('rialo#initialized', onInit, { once: true });\n\n // Guaranteed timeout\n timeoutId = setTimeout(() => {\n window.removeEventListener('rialo#initialized', onInit);\n done(undefined);\n }, timeout);\n });\n}\n\n/**\n * Promise timeout wrapper\n * Ensures promises never hang indefinitely\n */\nexport function withTimeout<T>(\n promise: Promise<T>,\n ms: number,\n errorMessage = 'Operation timed out'\n): Promise<T> {\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const timeout = new Promise<never>((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error(errorMessage)), ms);\n });\n\n return Promise.race([promise, timeout]).finally(() => {\n if (timeoutId) clearTimeout(timeoutId);\n }) as Promise<T>;\n}\n","/**\n * @cookill/wallet-adapter v3.0.0\n * Utility functions\n */\n\nimport type { WalletAccount, RialoNetwork, RialoChainId } from './types';\n\n/**\n * Format address for display (truncated)\n */\nexport function formatAddress(address: string, chars = 4): string {\n if (!address) return '';\n if (address.length <= chars * 2 + 3) return address;\n return `${address.slice(0, chars + 2)}...${address.slice(-chars)}`;\n}\n\n/**\n * Format balance from kelvins to RLO\n */\nexport function formatBalance(kelvins: string | bigint, decimals = 4): string {\n const value = typeof kelvins === 'string' ? BigInt(kelvins || '0') : kelvins;\n const rlo = Number(value) / 1_000_000_000;\n return rlo.toFixed(decimals);\n}\n\n/**\n * Parse RLO amount to kelvins\n */\nexport function parseBalance(rlo: string | number): bigint {\n const value = typeof rlo === 'string' ? parseFloat(rlo) : rlo;\n return BigInt(Math.floor(value * 1_000_000_000));\n}\n\n/**\n * Validate Rialo address format\n */\nexport function isValidAddress(address: string): boolean {\n if (!address || typeof address !== 'string') return false;\n if (address.length < 32 || address.length > 50) return false;\n return /^[1-9A-HJ-NP-Za-km-z]+$/.test(address);\n}\n\n/**\n * Convert network name to chain ID\n */\nexport function toChainId(network: RialoNetwork): RialoChainId {\n return `rialo:${network}`;\n}\n\n/**\n * Extract network from chain ID\n */\nexport function fromChainId(chainId: RialoChainId): RialoNetwork {\n return chainId.replace('rialo:', '') as RialoNetwork;\n}\n\n/**\n * Normalize account data (handles both string and object formats)\n * CRITICAL: Extension can return either string[] or WalletAccount[]\n */\nexport function normalizeAccounts(accounts: Array<string | WalletAccount>): WalletAccount[] {\n if (!Array.isArray(accounts)) return [];\n \n return accounts.map((acc): WalletAccount => {\n if (typeof acc === 'string') {\n return { address: acc, publicKey: acc };\n }\n return {\n address: acc.address,\n publicKey: acc.publicKey || acc.address,\n label: acc.label,\n };\n });\n}\n","/**\n * @cookill/wallet-adapter v3.1.0\n * Pure JavaScript wallet class (no React dependency)\n * \n * Supports:\n * - Standard connect/disconnect/sign operations\n * - REX (Rialo Extended Execution) confidential transactions\n * - SfS (Stake-for-Service) gasless transactions\n * - Scan-to-Connect QR-based pairing\n * \n * Usage:\n * const wallet = new SheepWallet();\n * if (!wallet.isInstalled) { ... prompt install ... }\n * const accounts = await wallet.connect();\n */\n\nimport type { \n RialoProvider, \n WalletAccount, \n RialoNetwork,\n TransactionRequest, \n TransactionResult, \n SignedMessage,\n REXCapabilities,\n REXTransactionResult,\n SfSPosition,\n SfSCreateParams,\n SfSUpdateParams,\n SfSCreditBalance,\n ScanConnectURI,\n ScanConnectSession,\n ScanConnectStatus,\n} from './types';\nimport { isInstalled, getProvider, withTimeout } from './provider';\nimport { normalizeAccounts } from './utils';\n\n// Connection timeout (20 seconds)\nconst CONNECT_TIMEOUT = 20_000;\n\n// Other operation timeout (30 seconds)\nconst OPERATION_TIMEOUT = 30_000;\n\nexport class SheepWallet {\n private _provider: RialoProvider | undefined;\n private _connected = false;\n private _accounts: WalletAccount[] = [];\n private _network: RialoNetwork = 'devnet';\n private _cleanupFns: Array<() => void> = [];\n\n constructor() {\n this._provider = getProvider();\n this._setupEvents();\n }\n\n // =========================================================================\n // Getters (all synchronous, never block)\n // =========================================================================\n\n get isInstalled(): boolean {\n return isInstalled();\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get accounts(): WalletAccount[] {\n return [...this._accounts];\n }\n\n get activeAccount(): WalletAccount | undefined {\n return this._accounts[0];\n }\n\n get address(): string | undefined {\n return this._accounts[0]?.address;\n }\n\n get network(): RialoNetwork {\n return this._network;\n }\n\n get chainId(): string {\n return `rialo:${this._network}`;\n }\n\n // =========================================================================\n // Connection (with timeout protection)\n // =========================================================================\n\n async connect(): Promise<WalletAccount[]> {\n // Refresh provider reference\n this._provider = getProvider();\n \n if (!this._provider) {\n throw new Error('Sheep Wallet not installed. Get it at https://rialo.io/wallet');\n }\n\n try {\n const rawAccounts = await withTimeout(\n this._provider.connect(),\n CONNECT_TIMEOUT,\n 'Connection timed out. Please open Sheep Wallet extension and approve the request.'\n );\n\n this._accounts = normalizeAccounts(rawAccounts);\n this._connected = true;\n\n try {\n this._network = await withTimeout(\n this._provider.getNetwork(),\n 5_000,\n 'Network request timed out'\n );\n } catch {\n // Keep default network on failure\n }\n\n return this._accounts;\n } catch (error) {\n this._connected = false;\n this._accounts = [];\n throw error;\n }\n }\n\n async disconnect(): Promise<void> {\n try {\n if (this._provider) {\n await withTimeout(\n this._provider.disconnect(),\n 5_000,\n 'Disconnect timed out'\n );\n }\n } catch {\n // Ignore disconnect errors\n }\n \n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Silent session check (for auto-connect, never triggers approval)\n // =========================================================================\n\n async checkSession(): Promise<WalletAccount[] | null> {\n if (!this._provider) return null;\n\n try {\n const isConn = await withTimeout(\n this._provider.isConnected(),\n 3_000,\n 'Session check timed out'\n );\n\n if (!isConn) return null;\n\n const rawAccounts = await withTimeout(\n this._provider.getAccounts(),\n 3_000,\n 'Get accounts timed out'\n );\n\n const accounts = normalizeAccounts(rawAccounts);\n if (accounts.length > 0) {\n this._accounts = accounts;\n this._connected = true;\n\n try {\n this._network = await this._provider.getNetwork();\n } catch {}\n\n return accounts;\n }\n } catch {\n // Session check failure is not an error\n }\n\n return null;\n }\n\n // =========================================================================\n // Transactions\n // =========================================================================\n\n async signMessage(message: string): Promise<SignedMessage> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signMessage(message),\n OPERATION_TIMEOUT,\n 'Sign message timed out. Please check Sheep Wallet.'\n );\n }\n\n async signTransaction(tx: TransactionRequest): Promise<string> {\n this._ensureConnected();\n \n const result = await withTimeout(\n this._provider!.signTransaction(tx),\n OPERATION_TIMEOUT,\n 'Sign transaction timed out. Please check Sheep Wallet.'\n );\n \n return result.signature;\n }\n\n async sendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.sendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Send transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n async signAndSendTransaction(tx: TransactionRequest): Promise<TransactionResult> {\n this._ensureConnected();\n \n return withTimeout(\n this._provider!.signAndSendTransaction(tx),\n OPERATION_TIMEOUT,\n 'Transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // =========================================================================\n // REX — Rialo Extended Execution (Confidential Computation)\n // =========================================================================\n\n /**\n * Check if the connected wallet/network supports REX\n */\n async getREXCapabilities(): Promise<REXCapabilities> {\n if (!this._provider?.getREXCapabilities) {\n return {\n supported: false,\n privacyModes: [],\n maxInputSize: 0,\n programs: [],\n };\n }\n\n return withTimeout(\n this._provider.getREXCapabilities(),\n 10_000,\n 'REX capabilities request timed out'\n );\n }\n\n /**\n * Submit a confidential transaction via REX\n * The transaction inputs are encrypted and executed in a TEE/MPC/FHE environment\n */\n async submitREXTransaction(tx: TransactionRequest): Promise<REXTransactionResult> {\n this._ensureConnected();\n\n if (!tx.rex?.confidential) {\n throw new Error('Transaction must have rex.confidential = true for REX execution');\n }\n\n if (this._provider?.submitREXTransaction) {\n return withTimeout(\n this._provider.submitREXTransaction(tx),\n OPERATION_TIMEOUT,\n 'REX transaction timed out. Please check Sheep Wallet.'\n );\n }\n\n // Fallback: submit as regular transaction with REX metadata\n const result = await this.signAndSendTransaction(tx);\n return {\n ...result,\n attestation: undefined,\n encryptedOutput: undefined,\n publicOutput: undefined,\n };\n }\n\n /**\n * Send a gasless transaction using Stake-for-Service credits\n * Automatically sets tx.gasless = true\n */\n async sendGaslessTransaction(tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> {\n this._ensureConnected();\n \n // Check if user has SfS credits\n const credits = await this.getSfSCredits();\n if (BigInt(credits.available) <= 0n) {\n throw new Error('No SfS service credits available. Create a Stake-for-Service position first.');\n }\n\n return this.signAndSendTransaction({ ...tx, gasless: true });\n }\n\n // =========================================================================\n // SfS — Stake-for-Service (Gasless via Staking Yield)\n // =========================================================================\n\n /**\n * Get all Stake-for-Service positions for the connected account\n */\n async getSfSPositions(): Promise<SfSPosition[]> {\n this._ensureConnected();\n\n if (this._provider?.getSfSPositions) {\n return withTimeout(\n this._provider.getSfSPositions(),\n 10_000,\n 'SfS positions request timed out'\n );\n }\n\n return [];\n }\n\n /**\n * Create a new Stake-for-Service position\n * Stakes RLO and routes a fraction of yield to service credits\n */\n async createSfSPosition(params: SfSCreateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (params.routingFraction < 0 || params.routingFraction > 1) {\n throw new Error('Routing fraction must be between 0.0 and 1.0');\n }\n\n if (!this._provider?.createSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position creation timed out. Please check Sheep Wallet.'\n );\n }\n\n /**\n * Update an existing SfS position (e.g., change routing fraction)\n */\n async updateSfSPosition(params: SfSUpdateParams): Promise<SfSPosition> {\n this._ensureConnected();\n\n if (!this._provider?.updateSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.updateSfSPosition(params),\n OPERATION_TIMEOUT,\n 'SfS position update timed out'\n );\n }\n\n /**\n * Close an SfS position and unstake\n */\n async closeSfSPosition(positionId: string): Promise<{ success: boolean }> {\n this._ensureConnected();\n\n if (!this._provider?.closeSfSPosition) {\n throw new Error('Stake-for-Service not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.closeSfSPosition(positionId),\n OPERATION_TIMEOUT,\n 'SfS position close timed out'\n );\n }\n\n /**\n * Get current SfS service credit balance\n */\n async getSfSCredits(): Promise<SfSCreditBalance> {\n this._ensureConnected();\n\n if (this._provider?.getSfSCredits) {\n return withTimeout(\n this._provider.getSfSCredits(),\n 10_000,\n 'SfS credit balance request timed out'\n );\n }\n\n return {\n available: '0',\n usedThisEpoch: '0',\n totalEarned: '0',\n estimatedPerEpoch: '0',\n };\n }\n\n // =========================================================================\n // Scan-to-Connect (QR-based Cross-Device Pairing)\n // =========================================================================\n\n /**\n * Generate a scan-to-connect URI from the wallet side\n * Returns a URI that can be displayed as QR code for dApps to scan\n */\n async createScanSession(): Promise<ScanConnectURI> {\n if (!this._provider?.createScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n return withTimeout(\n this._provider.createScanSession('wallet'),\n 10_000,\n 'Scan session creation timed out'\n );\n }\n\n /**\n * Approve a scan-to-connect session (after wallet scans dApp QR)\n */\n async approveScanSession(sessionId: string): Promise<WalletAccount[]> {\n if (!this._provider?.approveScanSession) {\n throw new Error('Scan-to-Connect not supported by this wallet version');\n }\n\n const accounts = await withTimeout(\n this._provider.approveScanSession(sessionId),\n CONNECT_TIMEOUT,\n 'Scan session approval timed out'\n );\n\n this._accounts = normalizeAccounts(accounts as Array<string | WalletAccount>);\n this._connected = true;\n\n return this._accounts;\n }\n\n /**\n * Reject a scan-to-connect session\n */\n async rejectScanSession(sessionId: string): Promise<void> {\n if (!this._provider?.rejectScanSession) {\n return;\n }\n\n await withTimeout(\n this._provider.rejectScanSession(sessionId),\n 5_000,\n 'Scan session rejection timed out'\n );\n }\n\n // =========================================================================\n // Balance & Network\n // =========================================================================\n\n async getBalance(address?: string): Promise<string> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n const result = await withTimeout(\n this._provider.getBalance(address),\n 10_000,\n 'Balance request timed out'\n );\n\n return typeof result === 'string' ? result : result.balance;\n }\n\n async switchNetwork(network: RialoNetwork): Promise<void> {\n if (!this._provider) {\n throw new Error('Wallet not available');\n }\n\n await withTimeout(\n this._provider.switchNetwork(network),\n 10_000,\n 'Switch network timed out'\n );\n\n this._network = network;\n }\n\n // =========================================================================\n // Events\n // =========================================================================\n\n on(event: string, callback: (data: unknown) => void): () => void {\n if (!this._provider) {\n return () => {};\n }\n\n const cleanup = this._provider.on(event as any, callback);\n this._cleanupFns.push(cleanup);\n return cleanup;\n }\n\n destroy(): void {\n this._cleanupFns.forEach(fn => {\n try { fn(); } catch {}\n });\n this._cleanupFns = [];\n this._connected = false;\n this._accounts = [];\n }\n\n // =========================================================================\n // Private\n // =========================================================================\n\n private _ensureConnected(): void {\n if (!this._provider) {\n throw new Error('Sheep Wallet not installed');\n }\n if (!this._connected || this._accounts.length === 0) {\n throw new Error('Wallet not connected');\n }\n }\n\n private _setupEvents(): void {\n if (!this._provider) return;\n\n const onDisconnect = () => {\n this._connected = false;\n this._accounts = [];\n };\n\n const onAccountsChanged = (data: unknown) => {\n const raw = data as Array<string | WalletAccount>;\n this._accounts = normalizeAccounts(raw);\n };\n\n const onNetworkChanged = (data: unknown) => {\n const { network } = data as { network: RialoNetwork };\n if (network) this._network = network;\n };\n\n this._cleanupFns.push(\n this._provider.on('disconnect', onDisconnect),\n this._provider.on('accountsChanged', onAccountsChanged),\n this._provider.on('networkChanged', onNetworkChanged)\n );\n }\n}\n\nexport default SheepWallet;\n","/**\n * @cookill/wallet-adapter/react v3.1.0\n * React context, hooks, and components\n * \n * ARCHITECTURE:\n * - All provider calls are wrapped with timeout\n * - Auto-connect uses checkSession() (silent, never triggers approval)\n * - connect() is always user-initiated\n * - State updates are batched via useReducer\n * - Scan-to-Connect modal with bidirectional QR support\n * - REX & SfS hooks for confidential and gasless transactions\n */\n\nimport React, {\n createContext,\n useContext,\n useReducer,\n useEffect,\n useCallback,\n useRef,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n SheepWallet,\n isInstalled,\n waitForProvider,\n normalizeAccounts,\n withTimeout,\n formatAddress,\n formatBalance,\n NETWORKS,\n type WalletAccount,\n type RialoNetwork,\n type TransactionRequest,\n type TransactionResult,\n type SignedMessage,\n type WalletInfo,\n type RialoProvider,\n type REXCapabilities,\n type REXTransactionResult,\n type SfSPosition,\n type SfSCreateParams,\n type SfSUpdateParams,\n type SfSCreditBalance,\n type ScanConnectURI,\n type ScanConnectStatus,\n} from '../core';\n\n// ============================================================================\n// State Types\n// ============================================================================\n\nexport interface WalletState {\n status: 'disconnected' | 'connecting' | 'connected' | 'error';\n accounts: WalletAccount[];\n network: RialoNetwork;\n balance: string | null;\n error: Error | null;\n isModalOpen: boolean;\n scanConnectStatus: ScanConnectStatus;\n}\n\ntype WalletAction =\n | { type: 'CONNECTING' }\n | { type: 'CONNECTED'; accounts: WalletAccount[]; network: RialoNetwork }\n | { type: 'DISCONNECTED' }\n | { type: 'ERROR'; error: Error }\n | { type: 'SET_BALANCE'; balance: string }\n | { type: 'SET_NETWORK'; network: RialoNetwork }\n | { type: 'SET_ACCOUNTS'; accounts: WalletAccount[] }\n | { type: 'OPEN_MODAL' }\n | { type: 'CLOSE_MODAL' }\n | { type: 'RESET_ERROR' }\n | { type: 'SET_SCAN_STATUS'; status: ScanConnectStatus };\n\nconst initialState: WalletState = {\n status: 'disconnected',\n accounts: [],\n network: 'devnet',\n balance: null,\n error: null,\n isModalOpen: false,\n scanConnectStatus: 'idle',\n};\n\nfunction walletReducer(state: WalletState, action: WalletAction): WalletState {\n switch (action.type) {\n case 'CONNECTING':\n return { ...state, status: 'connecting', error: null };\n case 'CONNECTED':\n return {\n ...state,\n status: 'connected',\n accounts: action.accounts,\n network: action.network,\n error: null,\n isModalOpen: false,\n scanConnectStatus: 'idle',\n };\n case 'DISCONNECTED':\n return { ...state, status: 'disconnected', accounts: [], balance: null, error: null };\n case 'ERROR':\n return { ...state, status: 'error', error: action.error };\n case 'SET_BALANCE':\n return { ...state, balance: action.balance };\n case 'SET_NETWORK':\n return { ...state, network: action.network };\n case 'SET_ACCOUNTS':\n return { ...state, accounts: action.accounts };\n case 'OPEN_MODAL':\n return { ...state, isModalOpen: true };\n case 'CLOSE_MODAL':\n return { ...state, isModalOpen: false, scanConnectStatus: 'idle' };\n case 'RESET_ERROR':\n return { ...state, error: null, status: state.accounts.length > 0 ? 'connected' : 'disconnected' };\n case 'SET_SCAN_STATUS':\n return { ...state, scanConnectStatus: action.status };\n default:\n return state;\n }\n}\n\n// ============================================================================\n// Context Types\n// ============================================================================\n\nexport interface WalletContextValue {\n state: WalletState;\n connected: boolean;\n connecting: boolean;\n activeAccount: WalletAccount | null;\n chainId: string;\n isInstalled: boolean;\n wallets: WalletInfo[];\n \n // Actions\n connect: () => Promise<WalletAccount[]>;\n disconnect: () => Promise<void>;\n refreshBalance: () => Promise<void>;\n switchNetwork: (network: RialoNetwork) => Promise<void>;\n \n // Transactions\n signMessage: (message: string) => Promise<SignedMessage>;\n signTransaction: (tx: TransactionRequest) => Promise<string>;\n sendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n signAndSendTransaction: (tx: TransactionRequest) => Promise<TransactionResult>;\n \n // REX\n getREXCapabilities: () => Promise<REXCapabilities>;\n submitREXTransaction: (tx: TransactionRequest) => Promise<REXTransactionResult>;\n \n // SfS\n sendGaslessTransaction: (tx: Omit<TransactionRequest, 'gasless'>) => Promise<TransactionResult>;\n getSfSPositions: () => Promise<SfSPosition[]>;\n createSfSPosition: (params: SfSCreateParams) => Promise<SfSPosition>;\n getSfSCredits: () => Promise<SfSCreditBalance>;\n \n // Modal\n openModal: () => void;\n closeModal: () => void;\n \n // Wallet ref for advanced usage\n wallet: SheepWallet | null;\n}\n\nconst WalletContext = createContext<WalletContextValue | null>(null);\n\n// ============================================================================\n// Default Wallet List\n// ============================================================================\n\nconst DEFAULT_WALLETS: WalletInfo[] = [\n {\n id: 'sheep-wallet',\n name: 'Sheep Wallet',\n icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMDExQjI5Ii8+PHRleHQgeD0iNTAlIiB5PSI1NSUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iYm9sZCIgZm9udC1zaXplPSIxNiIgZmlsbD0iIzZFQjlBOCI+Uzwvc2VsZj48L3N2Zz4=',\n downloadUrl: 'https://rialo.io/wallet',\n supportsREX: true,\n supportsSfS: true,\n supportsScanConnect: true,\n },\n];\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\nexport interface WalletProviderProps {\n children: ReactNode;\n network?: RialoNetwork;\n autoConnect?: boolean;\n wallets?: WalletInfo[];\n /** Default relay URL for scan-to-connect */\n scanConnectRelay?: string;\n onConnect?: (accounts: WalletAccount[]) => void;\n onDisconnect?: () => void;\n onError?: (error: Error) => void;\n onNetworkChange?: (network: RialoNetwork) => void;\n}\n\nexport function WalletProvider({\n children,\n network: initialNetwork = 'devnet',\n autoConnect = true,\n wallets: customWallets = [],\n scanConnectRelay = 'wss://relay.rialo.io',\n onConnect,\n onDisconnect,\n onError,\n onNetworkChange,\n}: WalletProviderProps) {\n const [state, dispatch] = useReducer(walletReducer, {\n ...initialState,\n network: initialNetwork,\n });\n\n const walletRef = useRef<SheepWallet | null>(null);\n const providerRef = useRef<RialoProvider | undefined>(undefined);\n const connectingRef = useRef(false);\n const mountedRef = useRef(true);\n\n // Initialize wallet instance\n useEffect(() => {\n mountedRef.current = true;\n walletRef.current = new SheepWallet();\n\n waitForProvider(3000).then((provider) => {\n if (mountedRef.current) {\n providerRef.current = provider;\n }\n });\n\n return () => {\n mountedRef.current = false;\n walletRef.current?.destroy();\n };\n }, []);\n\n // Setup provider event listeners\n useEffect(() => {\n const setupEvents = async () => {\n const provider = await waitForProvider(3000);\n if (!provider || !mountedRef.current) return;\n\n providerRef.current = provider;\n const cleanups: Array<() => void> = [];\n\n cleanups.push(\n provider.on('disconnect', () => {\n if (!mountedRef.current) return;\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n })\n );\n\n cleanups.push(\n provider.on('accountsChanged', (data) => {\n if (!mountedRef.current) return;\n const accounts = normalizeAccounts(data as any[]);\n dispatch({ type: 'SET_ACCOUNTS', accounts });\n })\n );\n\n cleanups.push(\n provider.on('networkChanged', (data) => {\n if (!mountedRef.current) return;\n const { network } = data as { network: RialoNetwork };\n if (network) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n })\n );\n\n return () => {\n cleanups.forEach(fn => { try { fn(); } catch {} });\n };\n };\n\n const cleanup = setupEvents();\n return () => { cleanup.then(fn => fn?.()); };\n }, [onDisconnect, onNetworkChange]);\n\n // Auto-connect (silent session restore only)\n useEffect(() => {\n if (!autoConnect) return;\n if (state.status === 'connected' || state.status === 'connecting') return;\n\n const tryAutoConnect = async () => {\n const wallet = walletRef.current;\n if (!wallet?.isInstalled) return;\n\n try {\n const accounts = await wallet.checkSession();\n if (accounts && accounts.length > 0 && mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n } catch {}\n };\n\n const timer = setTimeout(tryAutoConnect, 500);\n return () => clearTimeout(timer);\n }, [autoConnect, onConnect]);\n\n // Refresh balance periodically\n useEffect(() => {\n if (state.status !== 'connected' || state.accounts.length === 0) return;\n\n const refresh = async () => {\n const wallet = walletRef.current;\n if (!wallet || !mountedRef.current) return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n };\n\n refresh();\n const interval = setInterval(refresh, 30_000);\n return () => clearInterval(interval);\n }, [state.status, state.accounts]);\n\n // =========================================================================\n // Actions\n // =========================================================================\n\n const connect = useCallback(async (): Promise<WalletAccount[]> => {\n if (connectingRef.current) {\n throw new Error('Connection already in progress');\n }\n\n const wallet = walletRef.current;\n if (!wallet) {\n const err = new Error('Wallet not initialized');\n dispatch({ type: 'ERROR', error: err });\n throw err;\n }\n\n if (!wallet.isInstalled) {\n dispatch({ type: 'OPEN_MODAL' });\n const err = new Error('Sheep Wallet not installed');\n dispatch({ type: 'ERROR', error: err });\n onError?.(err);\n throw err;\n }\n\n connectingRef.current = true;\n dispatch({ type: 'CONNECTING' });\n\n try {\n const accounts = await wallet.connect();\n \n if (mountedRef.current) {\n dispatch({ type: 'CONNECTED', accounts, network: wallet.network });\n onConnect?.(accounts);\n }\n\n return accounts;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (mountedRef.current) {\n dispatch({ type: 'ERROR', error: err });\n onError?.(err);\n }\n throw err;\n } finally {\n connectingRef.current = false;\n }\n }, [onConnect, onError]);\n\n const disconnect = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n try {\n await wallet.disconnect();\n } catch {}\n\n if (mountedRef.current) {\n dispatch({ type: 'DISCONNECTED' });\n onDisconnect?.();\n }\n }, [onDisconnect]);\n\n const refreshBalance = useCallback(async (): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return;\n\n try {\n const balance = await wallet.getBalance();\n if (mountedRef.current) {\n dispatch({ type: 'SET_BALANCE', balance });\n }\n } catch {}\n }, [state.status]);\n\n const switchNetwork = useCallback(async (network: RialoNetwork): Promise<void> => {\n const wallet = walletRef.current;\n if (!wallet) return;\n\n await wallet.switchNetwork(network);\n \n if (mountedRef.current) {\n dispatch({ type: 'SET_NETWORK', network });\n onNetworkChange?.(network);\n }\n }, [onNetworkChange]);\n\n // =========================================================================\n // Standard Transactions\n // =========================================================================\n\n const signMessage = useCallback(async (message: string): Promise<SignedMessage> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signMessage(message);\n }, [state.status]);\n\n const signTransaction = useCallback(async (tx: TransactionRequest): Promise<string> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signTransaction(tx);\n }, [state.status]);\n\n const sendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendTransaction(tx);\n }, [state.status]);\n\n const signAndSendTransaction = useCallback(async (tx: TransactionRequest): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.signAndSendTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // REX — Confidential Transactions\n // =========================================================================\n\n const getREXCapabilities = useCallback(async (): Promise<REXCapabilities> => {\n const wallet = walletRef.current;\n if (!wallet) return { supported: false, privacyModes: [], maxInputSize: 0, programs: [] };\n return wallet.getREXCapabilities();\n }, []);\n\n const submitREXTransaction = useCallback(async (tx: TransactionRequest): Promise<REXTransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.submitREXTransaction(tx);\n }, [state.status]);\n\n // =========================================================================\n // SfS — Gasless Transactions\n // =========================================================================\n\n const sendGaslessTransaction = useCallback(async (tx: Omit<TransactionRequest, 'gasless'>): Promise<TransactionResult> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.sendGaslessTransaction(tx);\n }, [state.status]);\n\n const getSfSPositions = useCallback(async (): Promise<SfSPosition[]> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') return [];\n return wallet.getSfSPositions();\n }, [state.status]);\n\n const createSfSPosition = useCallback(async (params: SfSCreateParams): Promise<SfSPosition> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') throw new Error('Wallet not connected');\n return wallet.createSfSPosition(params);\n }, [state.status]);\n\n const getSfSCredits = useCallback(async (): Promise<SfSCreditBalance> => {\n const wallet = walletRef.current;\n if (!wallet || state.status !== 'connected') {\n return { available: '0', usedThisEpoch: '0', totalEarned: '0', estimatedPerEpoch: '0' };\n }\n return wallet.getSfSCredits();\n }, [state.status]);\n\n // =========================================================================\n // Modal\n // =========================================================================\n\n const openModal = useCallback(() => dispatch({ type: 'OPEN_MODAL' }), []);\n const closeModal = useCallback(() => dispatch({ type: 'CLOSE_MODAL' }), []);\n\n // =========================================================================\n // Context Value\n // =========================================================================\n\n const wallets = useMemo(() => {\n const installed = isInstalled();\n return [...DEFAULT_WALLETS, ...customWallets].map(w => ({\n ...w,\n installed: w.id === 'sheep-wallet' ? installed : false,\n }));\n }, [customWallets]);\n\n const value: WalletContextValue = useMemo(() => ({\n state,\n connected: state.status === 'connected',\n connecting: state.status === 'connecting',\n activeAccount: state.accounts[0] || null,\n chainId: `rialo:${state.network}`,\n isInstalled: isInstalled(),\n wallets,\n connect,\n disconnect,\n refreshBalance,\n switchNetwork,\n signMessage,\n signTransaction,\n sendTransaction,\n signAndSendTransaction,\n getREXCapabilities,\n submitREXTransaction,\n sendGaslessTransaction,\n getSfSPositions,\n createSfSPosition,\n getSfSCredits,\n openModal,\n closeModal,\n wallet: walletRef.current,\n }), [\n state, wallets, connect, disconnect, refreshBalance, switchNetwork,\n signMessage, signTransaction, sendTransaction, signAndSendTransaction,\n getREXCapabilities, submitREXTransaction, sendGaslessTransaction,\n getSfSPositions, createSfSPosition, getSfSCredits, openModal, closeModal,\n ]);\n\n return (\n <WalletContext.Provider value={value}>\n {children}\n <WalletModal\n scanConnectRelay={scanConnectRelay}\n dispatch={dispatch}\n />\n </WalletContext.Provider>\n );\n}\n\n// ============================================================================\n// Hooks\n// ============================================================================\n\nexport function useWallet(): WalletContextValue {\n const context = useContext(WalletContext);\n if (!context) {\n throw new Error('useWallet must be used within WalletProvider');\n }\n return context;\n}\n\nexport function useIsConnected(): boolean {\n return useWallet().connected;\n}\n\nexport function useActiveAccount(): WalletAccount | null {\n return useWallet().activeAccount;\n}\n\nexport function useAccounts(): WalletAccount[] {\n return useWallet().state.accounts;\n}\n\nexport function useBalance(): { balance: string | null; refresh: () => Promise<void> } {\n const { state, refreshBalance } = useWallet();\n return { balance: state.balance, refresh: refreshBalance };\n}\n\nexport function useNetwork(): { network: RialoNetwork; chainId: string } {\n const { state, chainId } = useWallet();\n return { network: state.network, chainId };\n}\n\nexport function useSwitchNetwork() {\n const { switchNetwork, state } = useWallet();\n return { switchNetwork, network: state.network };\n}\n\nexport function useConnectWallet() {\n const { connect, openModal, connecting, connected, isInstalled, state } = useWallet();\n return { connect, openModal, connecting, connected, isInstalled, error: state.error };\n}\n\nexport function useDisconnectWallet() {\n const { disconnect, connected } = useWallet();\n return { disconnect, connected };\n}\n\nexport function useSignMessage() {\n const { signMessage, connected } = useWallet();\n return { signMessage, connected };\n}\n\nexport function useSendTransaction() {\n const { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected } = useWallet();\n return { sendTransaction, signAndSendTransaction, sendGaslessTransaction, connected };\n}\n\n/** Hook for REX (confidential) transaction capabilities */\nexport function useREX() {\n const { getREXCapabilities, submitREXTransaction, connected } = useWallet();\n const [capabilities, setCapabilities] = useState<REXCapabilities | null>(null);\n\n useEffect(() => {\n if (connected) {\n getREXCapabilities().then(setCapabilities).catch(() => {});\n }\n }, [connected, getREXCapabilities]);\n\n return {\n capabilities,\n supported: capabilities?.supported ?? false,\n submitREXTransaction,\n connected,\n };\n}\n\n/** Hook for Stake-for-Service (gasless) operations */\nexport function useSfS() {\n const { getSfSPositions, createSfSPosition, getSfSCredits, sendGaslessTransaction, connected } = useWallet();\n const [positions, setPositions] = useState<SfSPosition[]>([]);\n const [credits, setCredits] = useState<SfSCreditBalance | null>(null);\n\n const refresh = useCallback(async () => {\n if (!connected) return;\n const [pos, cred] = await Promise.all([\n getSfSPositions().catch(() => [] as SfSPosition[]),\n getSfSCredits().catch(() => null),\n ]);\n setPositions(pos);\n if (cred) setCredits(cred);\n }, [connected, getSfSPositions, getSfSCredits]);\n\n useEffect(() => {\n refresh();\n }, [refresh]);\n\n return {\n positions,\n credits,\n hasCredits: BigInt(credits?.available ?? '0') > 0n,\n createPosition: createSfSPosition,\n sendGasless: sendGaslessTransaction,\n refresh,\n connected,\n };\n}\n\n/** Hook for Scan-to-Connect */\nexport function useScanConnect() {\n const { wallet, state } = useWallet();\n const [scanURI, setScanURI] = useState<ScanConnectURI | null>(null);\n const [status, setStatus] = useState<ScanConnectStatus>('idle');\n\n const generateQR = useCallback(async () => {\n if (!wallet) return;\n setStatus('generating');\n try {\n const uri = await wallet.createScanSession();\n setScanURI(uri);\n setStatus('waiting');\n } catch (error) {\n setStatus('error');\n }\n }, [wallet]);\n\n const approveSession = useCallback(async (sessionId: string) => {\n if (!wallet) return [];\n setStatus('approving');\n try {\n const accounts = await wallet.approveScanSession(sessionId);\n setStatus('connected');\n return accounts;\n } catch {\n setStatus('error');\n return [];\n }\n }, [wallet]);\n\n const rejectSession = useCallback(async (sessionId: string) => {\n if (!wallet) return;\n await wallet.rejectScanSession(sessionId);\n setStatus('rejected');\n }, [wallet]);\n\n return {\n scanURI,\n status,\n generateQR,\n approveSession,\n rejectSession,\n };\n}\n\n// ============================================================================\n// WalletModal — Responsive (desktop: centered dialog, mobile: slide-up sheet)\n// ============================================================================\n\ninterface WalletModalProps {\n scanConnectRelay: string;\n dispatch: React.Dispatch<WalletAction>;\n}\n\nfunction WalletModal({ scanConnectRelay, dispatch }: WalletModalProps) {\n const { state, wallets, connect, closeModal, isInstalled: installed } = useWallet();\n const [activeTab, setActiveTab] = useState<'extension' | 'scan'>('extension');\n const [scanMode, setScanMode] = useState<'show-qr' | 'scan-qr'>('show-qr');\n const [generatedURI, setGeneratedURI] = useState<string | null>(null);\n const [qrReady, setQRReady] = useState(false);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [isMobile, setIsMobile] = useState(false);\n const [dragY, setDragY] = useState(0);\n const [isDragging, setIsDragging] = useState(false);\n const dragStartRef = useRef(0);\n\n const sheepWallet = wallets.find(w => w.id === 'sheep-wallet');\n\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < 640);\n check();\n window.addEventListener('resize', check);\n return () => window.removeEventListener('resize', check);\n }, []);\n\n useEffect(() => {\n if (!state.isModalOpen) {\n setDragY(0);\n setIsDragging(false);\n }\n }, [state.isModalOpen]);\n\n const stop = (e: React.MouseEvent | React.TouchEvent) => e.stopPropagation();\n\n const handleConnect = async (e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n try {\n await connect();\n // Modal auto-closes via CONNECTED reducer\n } catch {\n // Error shown in modal via state.error\n }\n };\n\n const generateScanSession = async () => {\n dispatch({ type: 'SET_SCAN_STATUS', status: 'generating' });\n const sessionId = crypto.randomUUID();\n const topic = btoa(sessionId).slice(0, 32);\n const uri = `rialo-wc://${sessionId}?relay=${encodeURIComponent(scanConnectRelay)}&topic=${topic}&networks=devnet`;\n setGeneratedURI(uri);\n dispatch({ type: 'SET_SCAN_STATUS', status: 'waiting' });\n setQRReady(true);\n };\n\n // Draw QR on canvas\n useEffect(() => {\n if (!qrReady || !generatedURI || !canvasRef.current) return;\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n const size = 200;\n canvas.width = size;\n canvas.height = size;\n ctx.fillStyle = '#FFFFFF';\n ctx.fillRect(0, 0, size, size);\n ctx.fillStyle = '#011B29';\n const gridSize = 25;\n const cellSize = size / gridSize;\n for (let y = 0; y < gridSize; y++) {\n for (let x = 0; x < gridSize; x++) {\n const isFinderArea =\n (x < 7 && y < 7) || (x >= gridSize - 7 && y < 7) || (x < 7 && y >= gridSize - 7);\n if (isFinderArea) {\n const isOuter = x === 0 || y === 0 || x === 6 || y === 6 ||\n x === gridSize - 7 || x === gridSize - 1 || y === gridSize - 7 || y === gridSize - 1;\n const isInner = (x >= 2 && x <= 4 && y >= 2 && y <= 4) ||\n (x >= gridSize - 5 && x <= gridSize - 3 && y >= 2 && y <= 4) ||\n (x >= 2 && x <= 4 && y >= gridSize - 5 && y <= gridSize - 3);\n if (isOuter || isInner) ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n continue;\n }\n const charIndex = (y * gridSize + x) % generatedURI.length;\n const charCode = generatedURI.charCodeAt(charIndex);\n if (charCode % 3 !== 0) ctx.fillRect(x * cellSize, y * cellSize, cellSize, cellSize);\n }\n }\n const logoSize = 40;\n const logoX = (size - logoSize) / 2;\n const logoY = (size - logoSize) / 2;\n ctx.beginPath();\n ctx.arc(size / 2, size / 2, logoSize / 2 + 4, 0, Math.PI * 2);\n ctx.fillStyle = '#FFFFFF';\n ctx.fill();\n ctx.beginPath();\n const r = 6;\n ctx.moveTo(logoX + r, logoY);\n ctx.lineTo(logoX + logoSize - r, logoY);\n ctx.quadraticCurveTo(logoX + logoSize, logoY, logoX + logoSize, logoY + r);\n ctx.lineTo(logoX + logoSize, logoY + logoSize - r);\n ctx.quadraticCurveTo(logoX + logoSize, logoY + logoSize, logoX + logoSize - r, logoY + logoSize);\n ctx.lineTo(logoX + r, logoY + logoSize);\n ctx.quadraticCurveTo(logoX, logoY + logoSize, logoX, logoY + logoSize - r);\n ctx.lineTo(logoX, logoY + r);\n ctx.quadraticCurveTo(logoX, logoY, logoX + r, logoY);\n ctx.fillStyle = '#6EB9A8';\n ctx.fill();\n ctx.fillStyle = '#FFFFFF';\n ctx.font = 'bold 22px sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('S', size / 2, size / 2 + 1);\n }, [qrReady, generatedURI]);\n\n useEffect(() => {\n if (activeTab === 'scan' && scanMode === 'show-qr' && !generatedURI) {\n generateScanSession();\n }\n }, [activeTab, scanMode]);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n if (!isMobile) return;\n dragStartRef.current = e.touches[0].clientY;\n setIsDragging(true);\n };\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging || !isMobile) return;\n const delta = e.touches[0].clientY - dragStartRef.current;\n if (delta > 0) setDragY(delta);\n };\n const handleTouchEnd = () => {\n if (!isMobile) return;\n setIsDragging(false);\n if (dragY > 120) closeModal();\n setDragY(0);\n };\n\n if (!state.isModalOpen) return null;\n\n // ── SVG Icons (inline, no emoji) ──\n const ExtensionIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 3h5v5\"/><path d=\"M8 3H3v5\"/><path d=\"M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3\"/><path d=\"m15 9 6-6\"/>\n </svg>\n );\n const QrIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"/><path d=\"M14 14h7v7h-7z\"/>\n </svg>\n );\n const CameraIcon = () => (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z\"/><circle cx=\"12\" cy=\"13\" r=\"3\"/>\n </svg>\n );\n const RefreshIcon = () => (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\"/><path d=\"M21 3v5h-5\"/>\n </svg>\n );\n\n const tabBaseStyle: React.CSSProperties = {\n flex: 1,\n padding: '10px 0',\n border: 'none',\n borderRadius: '10px',\n fontSize: '13px',\n cursor: 'pointer',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n };\n\n // ── Modal Content ──\n const renderContent = () => (\n <>\n {/* Tabs */}\n <div style={{\n display: 'flex', gap: '4px', padding: '4px',\n backgroundColor: 'rgba(255,255,255,0.04)', borderRadius: '14px', marginBottom: '20px',\n }}>\n <button\n type=\"button\"\n onClick={(e) => { stop(e); setActiveTab('extension'); }}\n style={{\n ...tabBaseStyle,\n backgroundColor: activeTab === 'extension' ? 'rgba(255,255,255,0.08)' : 'transparent',\n color: activeTab === 'extension' ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n fontWeight: activeTab === 'extension' ? 600 : 400,\n }}\n >\n <ExtensionIcon /> Extension\n </button>\n <button\n type=\"button\"\n onClick={(e) => { stop(e); setActiveTab('scan'); }}\n style={{\n ...tabBaseStyle,\n backgroundColor: activeTab === 'scan' ? 'rgba(255,255,255,0.08)' : 'transparent',\n color: activeTab === 'scan' ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n fontWeight: activeTab === 'scan' ? 600 : 400,\n }}\n >\n <QrIcon /> Scan to Connect\n </button>\n </div>\n\n {/* Extension Tab */}\n {activeTab === 'extension' && (\n <>\n {sheepWallet && (\n <button\n type=\"button\"\n onClick={installed\n ? handleConnect\n : (e) => { stop(e); window.open(sheepWallet.downloadUrl, '_blank'); }\n }\n disabled={state.status === 'connecting'}\n style={{\n width: '100%', display: 'flex', alignItems: 'center', gap: '14px',\n padding: '16px', backgroundColor: 'rgba(255,255,255,0.04)',\n border: '1px solid rgba(255,255,255,0.08)', borderRadius: '14px',\n cursor: state.status === 'connecting' ? 'wait' : 'pointer',\n transition: 'all 0.15s',\n }}\n onMouseEnter={(e) => { (e.currentTarget as HTMLButtonElement).style.backgroundColor = 'rgba(255,255,255,0.07)'; }}\n onMouseLeave={(e) => { (e.currentTarget as HTMLButtonElement).style.backgroundColor = 'rgba(255,255,255,0.04)'; }}\n >\n <div style={{\n width: '44px', height: '44px', borderRadius: '12px',\n background: 'linear-gradient(135deg, #6EB9A8, #4a9a8a)', display: 'flex',\n alignItems: 'center', justifyContent: 'center',\n color: '#fff', fontWeight: 700, fontSize: '18px',\n }}>\n S\n </div>\n <div style={{ flex: 1, textAlign: 'left' }}>\n <div style={{ color: '#fff', fontWeight: 500, fontSize: '15px', marginBottom: '2px' }}>\n {sheepWallet.name}\n </div>\n <div style={{\n fontSize: '12px',\n color: installed ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n display: 'flex', alignItems: 'center', gap: '5px',\n }}>\n {state.status === 'connecting' ? (\n <>\n <span style={{\n display: 'inline-block', width: '6px', height: '6px',\n borderRadius: '50%', backgroundColor: '#F59E0B',\n animation: 'walletModalPulse 1.2s infinite',\n }} />\n Connecting...\n </>\n ) : installed ? (\n <>\n <span style={{\n display: 'inline-block', width: '6px', height: '6px',\n borderRadius: '50%', backgroundColor: '#6EB9A8',\n }} />\n Detected — Click to connect\n </>\n ) : (\n <>\n <span style={{\n display: 'inline-block', width: '6px', height: '6px',\n borderRadius: '50%', backgroundColor: 'rgba(255,255,255,0.2)',\n }} />\n Not installed\n </>\n )}\n </div>\n </div>\n {!installed && (\n <span style={{\n color: '#6EB9A8', fontSize: '12px', fontWeight: 500,\n padding: '4px 10px', borderRadius: '8px',\n backgroundColor: 'rgba(110,185,168,0.1)',\n }}>\n Install\n </span>\n )}\n </button>\n )}\n\n {/* Feature support */}\n <div style={{\n display: 'flex', gap: '8px', marginTop: '16px', flexWrap: 'wrap',\n }}>\n {[\n { label: 'REX', desc: 'Confidential TX', color: '#8B5CF6' },\n { label: 'SfS', desc: 'Gasless TX', color: '#F59E0B' },\n { label: 'QR', desc: 'Scan Connect', color: '#6EB9A8' },\n ].map(badge => (\n <div key={badge.label} style={{\n padding: '5px 10px',\n backgroundColor: `${badge.color}10`,\n borderRadius: '8px',\n border: `1px solid ${badge.color}18`,\n display: 'flex', alignItems: 'center', gap: '6px',\n }}>\n <span style={{ color: badge.color, fontSize: '11px', fontWeight: 600 }}>{badge.label}</span>\n <span style={{ color: 'rgba(255,255,255,0.35)', fontSize: '10px' }}>{badge.desc}</span>\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* Scan Tab */}\n {activeTab === 'scan' && (\n <div>\n {/* Sub-tabs */}\n <div style={{ display: 'flex', gap: '8px', marginBottom: '16px' }}>\n {(['show-qr', 'scan-qr'] as const).map(mode => (\n <button\n key={mode}\n type=\"button\"\n onClick={(e) => { stop(e); setScanMode(mode); }}\n style={{\n flex: 1, padding: '8px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '6px',\n backgroundColor: scanMode === mode ? 'rgba(110,185,168,0.1)' : 'transparent',\n border: `1px solid ${scanMode === mode ? 'rgba(110,185,168,0.25)' : 'rgba(255,255,255,0.08)'}`,\n borderRadius: '10px',\n color: scanMode === mode ? '#6EB9A8' : 'rgba(255,255,255,0.4)',\n fontSize: '12px', fontWeight: scanMode === mode ? 500 : 400,\n cursor: 'pointer', transition: 'all 0.15s',\n }}\n >\n {mode === 'show-qr' ? <><QrIcon /> Show QR</> : <><CameraIcon /> Scan QR</>}\n </button>\n ))}\n </div>\n\n {scanMode === 'show-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: 'rgba(255,255,255,0.45)', fontSize: '13px', marginBottom: '16px', lineHeight: 1.5 }}>\n Scan this QR code with Sheep Wallet on your mobile device to connect\n </p>\n <div style={{\n display: 'inline-block', padding: '16px', backgroundColor: '#FFFFFF',\n borderRadius: '16px', position: 'relative',\n }}>\n {[\n { top: -2, left: -2, borderTop: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderTopLeftRadius: '12px' },\n { top: -2, right: -2, borderTop: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderTopRightRadius: '12px' },\n { bottom: -2, left: -2, borderBottom: '3px solid #6EB9A8', borderLeft: '3px solid #6EB9A8', borderBottomLeftRadius: '12px' },\n { bottom: -2, right: -2, borderBottom: '3px solid #6EB9A8', borderRight: '3px solid #6EB9A8', borderBottomRightRadius: '12px' },\n ].map((s, i) => (\n <div key={i} style={{ position: 'absolute', width: '24px', height: '24px', ...s } as React.CSSProperties} />\n ))}\n <canvas ref={canvasRef} style={{ width: '200px', height: '200px', display: 'block' }} />\n </div>\n\n <div style={{ marginTop: '16px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '8px' }}>\n <div style={{\n width: '7px', height: '7px', borderRadius: '50%',\n backgroundColor: state.scanConnectStatus === 'waiting' ? '#6EB9A8' : '#F59E0B',\n animation: 'walletModalPulse 2s infinite',\n }} />\n <span style={{ color: 'rgba(255,255,255,0.4)', fontSize: '12px' }}>\n {state.scanConnectStatus === 'generating' && 'Generating session...'}\n {state.scanConnectStatus === 'waiting' && 'Waiting for wallet to scan...'}\n {state.scanConnectStatus === 'scanned' && 'Scanned! Waiting for approval...'}\n {state.scanConnectStatus === 'connected' && 'Connected!'}\n {state.scanConnectStatus === 'error' && 'Connection failed. Try again.'}\n {state.scanConnectStatus === 'idle' && 'Initializing...'}\n </span>\n </div>\n\n <button\n type=\"button\"\n onClick={(e) => { stop(e); generateScanSession(); }}\n style={{\n marginTop: '12px', padding: '8px 16px', backgroundColor: 'transparent',\n border: '1px solid rgba(255,255,255,0.08)', borderRadius: '10px',\n color: '#6EB9A8', fontSize: '12px', cursor: 'pointer',\n display: 'inline-flex', alignItems: 'center', gap: '6px',\n transition: 'all 0.15s',\n }}\n >\n <RefreshIcon /> Refresh QR\n </button>\n </div>\n )}\n\n {scanMode === 'scan-qr' && (\n <div style={{ textAlign: 'center' }}>\n <p style={{ color: 'rgba(255,255,255,0.45)', fontSize: '13px', marginBottom: '16px', lineHeight: 1.5 }}>\n Open Sheep Wallet on another device, go to Settings → Show Connect QR, then scan it here\n </p>\n <div style={{\n width: '100%', height: '200px', backgroundColor: 'rgba(255,255,255,0.02)',\n borderRadius: '14px', border: '1px dashed rgba(255,255,255,0.1)',\n display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', gap: '12px',\n }}>\n <div style={{ color: 'rgba(255,255,255,0.2)' }}><CameraIcon /></div>\n <span style={{ color: 'rgba(255,255,255,0.3)', fontSize: '13px' }}>Camera access required</span>\n <button\n type=\"button\"\n onClick={(e) => {\n stop(e);\n alert('Camera scanning requires HTTPS and camera permissions. This feature works in the installed extension.');\n }}\n style={{\n padding: '8px 20px', backgroundColor: '#6EB9A8', border: 'none',\n borderRadius: '10px', color: '#011B29', fontSize: '13px', fontWeight: 500, cursor: 'pointer',\n }}\n >\n Open Camera\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n\n {/* Error */}\n {state.error && (\n <div style={{\n marginTop: '16px', padding: '12px 14px', backgroundColor: 'rgba(239,68,68,0.08)',\n border: '1px solid rgba(239,68,68,0.15)', borderRadius: '12px',\n color: '#f87171', fontSize: '13px', lineHeight: 1.4,\n }}>\n {state.error.message}\n </div>\n )}\n\n {/* Footer */}\n <div style={{\n marginTop: '24px', textAlign: 'center',\n color: 'rgba(255,255,255,0.2)', fontSize: '11px',\n paddingTop: '16px', borderTop: '1px solid rgba(255,255,255,0.04)',\n }}>\n Powered by Rialo Network\n </div>\n </>\n );\n\n const closeBtn: React.CSSProperties = {\n background: 'none', border: 'none',\n color: 'rgba(255,255,255,0.3)', cursor: 'pointer',\n padding: '6px', borderRadius: '8px', display: 'flex',\n alignItems: 'center', justifyContent: 'center',\n transition: 'all 0.15s',\n };\n\n const CloseIcon = () => (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/>\n </svg>\n );\n\n // ── Mobile: slide-up sheet ──\n if (isMobile) {\n return (\n <div\n style={{\n position: 'fixed', inset: 0, zIndex: 9999,\n backgroundColor: 'rgba(0,0,0,0.6)', backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n onClick={(e) => { if (e.target === e.currentTarget) closeModal(); }}\n onPointerDown={(e) => { if (e.target !== e.currentTarget) e.stopPropagation(); }}\n >\n <div\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n onClick={stop}\n style={{\n position: 'fixed', bottom: 0, left: 0, right: 0,\n backgroundColor: '#011B29',\n borderTopLeftRadius: '24px', borderTopRightRadius: '24px',\n padding: '0 20px 28px',\n maxHeight: '85vh', overflow: 'auto',\n boxShadow: '0 -8px 40px rgba(0,0,0,0.5)',\n transform: `translateY(${dragY}px)`,\n transition: isDragging ? 'none' : 'transform 0.3s cubic-bezier(0.4,0,0.2,1)',\n animation: isDragging ? 'none' : 'walletModalSlideUp 0.35s cubic-bezier(0.4,0,0.2,1)',\n }}\n >\n {/* Drag handle */}\n <div style={{ display: 'flex', justifyContent: 'center', padding: '12px 0 16px', cursor: 'grab', touchAction: 'none' }}>\n <div style={{ width: '36px', height: '4px', borderRadius: '2px', backgroundColor: 'rgba(255,255,255,0.12)' }} />\n </div>\n\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '20px' }}>\n <h2 style={{ color: '#fff', fontSize: '18px', fontWeight: 600, margin: 0, letterSpacing: '-0.01em' }}>\n Connect Wallet\n </h2>\n <button type=\"button\" onClick={(e) => { stop(e); closeModal(); }} style={closeBtn}>\n <CloseIcon />\n </button>\n </div>\n\n {renderContent()}\n </div>\n\n <style>{`\n @keyframes walletModalSlideUp {\n from { transform: translateY(100%); }\n to { transform: translateY(0); }\n }\n @keyframes walletModalPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n `}</style>\n </div>\n );\n }\n\n // ── Desktop: centered dialog ──\n return (\n <div\n style={{\n position: 'fixed', inset: 0, zIndex: 9999,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n backgroundColor: 'rgba(0,0,0,0.6)', backdropFilter: 'blur(8px)',\n WebkitBackdropFilter: 'blur(8px)',\n }}\n onClick={(e) => { if (e.target === e.currentTarget) closeModal(); }}\n onPointerDown={(e) => { if (e.target !== e.currentTarget) e.stopPropagation(); }}\n >\n <div\n onClick={stop}\n style={{\n backgroundColor: '#011B29', borderRadius: '20px', padding: '24px',\n width: '100%', maxWidth: '400px', margin: '16px',\n boxShadow: '0 25px 60px -12px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.05)',\n maxHeight: '90vh', overflow: 'auto',\n animation: 'walletModalFadeIn 0.25s cubic-bezier(0.4,0,0.2,1)',\n }}\n >\n {/* Header */}\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '20px' }}>\n <h2 style={{ color: '#fff', fontSize: '18px', fontWeight: 600, margin: 0, letterSpacing: '-0.01em' }}>\n Connect Wallet\n </h2>\n <button type=\"button\" onClick={(e) => { stop(e); closeModal(); }} style={closeBtn}>\n <CloseIcon />\n </button>\n </div>\n\n {renderContent()}\n </div>\n\n <style>{`\n @keyframes walletModalFadeIn {\n from { opacity: 0; transform: scale(0.97) translateY(8px); }\n to { opacity: 1; transform: scale(1) translateY(0); }\n }\n @keyframes walletModalPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.3; }\n }\n `}</style>\n </div>\n );\n}\n\n// ============================================================================\n// ConnectButton Component\n// ============================================================================\n\nexport interface ConnectButtonProps {\n connectLabel?: string;\n disconnectLabel?: string;\n showAddress?: boolean;\n showBalance?: boolean;\n /** Show feature badges (REX, SfS) */\n showFeatures?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ConnectButton({\n connectLabel = 'Connect Wallet',\n disconnectLabel = 'Disconnect',\n showAddress = true,\n showBalance = false,\n showFeatures = false,\n className,\n style,\n}: ConnectButtonProps) {\n const { connected, connecting, connect, disconnect, activeAccount, state, openModal, isInstalled: installed } = useWallet();\n const [showMenu, setShowMenu] = React.useState(false);\n\n const handleClick = async () => {\n if (connected) {\n setShowMenu(!showMenu);\n } else {\n if (installed) {\n try { await connect(); } catch {}\n } else {\n openModal();\n }\n }\n };\n\n const displayText = connected && activeAccount && showAddress\n ? `${activeAccount.address.slice(0, 6)}...${activeAccount.address.slice(-4)}`\n : connecting\n ? 'Connecting...'\n : connectLabel;\n\n const defaultStyle: React.CSSProperties = {\n padding: '12px 20px',\n borderRadius: '12px',\n border: 'none',\n cursor: connecting ? 'wait' : 'pointer',\n fontWeight: 500,\n fontSize: '14px',\n backgroundColor: connected ? '#1a3a4d' : '#6EB9A8',\n color: connected ? '#ffffff' : '#011B29',\n transition: 'all 0.2s',\n position: 'relative',\n ...style,\n };\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button\n onClick={handleClick}\n disabled={connecting}\n className={className}\n style={defaultStyle}\n >\n {displayText}\n {showBalance && state.balance && (\n <span style={{ marginLeft: '8px', opacity: 0.8 }}>\n {(Number(state.balance) / 1e9).toFixed(2)} RLO\n </span>\n )}\n </button>\n\n {connected && showMenu && (\n <div\n style={{\n position: 'absolute',\n top: '100%',\n right: 0,\n marginTop: '8px',\n backgroundColor: '#011B29',\n borderRadius: '12px',\n padding: '8px',\n minWidth: '180px',\n boxShadow: '0 10px 40px rgba(0, 0, 0, 0.3)',\n zIndex: 100,\n border: '1px solid #2a4a5d',\n }}\n >\n {/* Account info */}\n {activeAccount && (\n <div style={{\n padding: '8px 12px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <div style={{ color: '#94a3b8', fontSize: '10px', marginBottom: '4px' }}>Connected</div>\n <div style={{ color: '#ffffff', fontSize: '12px', fontFamily: 'monospace' }}>\n {formatAddress(activeAccount.address, 8)}\n </div>\n </div>\n )}\n\n {/* Feature indicators */}\n {showFeatures && (\n <div style={{\n padding: '6px 12px',\n display: 'flex',\n gap: '6px',\n borderBottom: '1px solid #1a3a4d',\n marginBottom: '4px',\n }}>\n <span style={{ fontSize: '10px', color: '#8B5CF6', backgroundColor: '#8B5CF615', padding: '2px 6px', borderRadius: '4px' }}>REX</span>\n <span style={{ fontSize: '10px', color: '#F59E0B', backgroundColor: '#F59E0B15', padding: '2px 6px', borderRadius: '4px' }}>SfS</span>\n </div>\n )}\n\n <button\n onClick={() => { setShowMenu(false); disconnect(); }}\n style={{\n width: '100%',\n padding: '10px 12px',\n backgroundColor: 'transparent',\n border: 'none',\n borderRadius: '8px',\n color: '#ef4444',\n cursor: 'pointer',\n textAlign: 'left',\n fontSize: '13px',\n }}\n >\n {disconnectLabel}\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Error Boundary for wallet integration\n */\n\nimport React, { Component, type ReactNode, type ErrorInfo } from 'react';\n\nexport interface WalletErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\ninterface State {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class WalletErrorBoundary extends Component<WalletErrorBoundaryProps, State> {\n constructor(props: WalletErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): State {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo): void {\n console.error('[WalletErrorBoundary] Caught error:', error, errorInfo);\n this.props.onError?.(error, errorInfo);\n }\n\n handleReset = (): void => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError && this.state.error) {\n const { fallback } = this.props;\n \n if (typeof fallback === 'function') {\n return fallback(this.state.error, this.handleReset);\n }\n \n if (fallback) {\n return fallback;\n }\n\n return (\n <div style={{\n padding: '20px',\n margin: '10px',\n backgroundColor: '#1a1a2e',\n border: '1px solid #ef4444',\n borderRadius: '12px',\n color: '#ffffff',\n }}>\n <h3 style={{ color: '#ef4444', margin: '0 0 12px 0' }}>\n Wallet Connection Error\n </h3>\n <p style={{ color: '#94a3b8', margin: '0 0 16px 0', fontSize: '14px' }}>\n {this.state.error.message}\n </p>\n <button\n onClick={this.handleReset}\n style={{\n padding: '8px 16px',\n backgroundColor: '#6EB9A8',\n color: '#011B29',\n border: 'none',\n borderRadius: '8px',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n Try Again\n </button>\n </div>\n );\n }\n\n return this.props.children;\n }\n}\n\n/**\n * HOC to wrap components with error boundary\n */\nexport function withWalletErrorBoundary<P extends object>(\n WrappedComponent: React.ComponentType<P>,\n fallback?: WalletErrorBoundaryProps['fallback']\n) {\n return function WithErrorBoundary(props: P) {\n return (\n <WalletErrorBoundary fallback={fallback}>\n <WrappedComponent {...props} />\n </WalletErrorBoundary>\n );\n };\n}\n\nexport default WalletErrorBoundary;\n","/**\n * @cookill/wallet-adapter/react v3.0.0\n * Loading and status indicator components\n */\n\nimport React from 'react';\n\n// ============================================================================\n// LoadingSpinner\n// ============================================================================\n\nexport interface LoadingSpinnerProps {\n size?: 'sm' | 'md' | 'lg';\n color?: string;\n className?: string;\n}\n\nexport function LoadingSpinner({ \n size = 'md', \n color = '#6EB9A8',\n className,\n}: LoadingSpinnerProps) {\n const sizeMap = { sm: 16, md: 24, lg: 32 };\n const px = sizeMap[size];\n\n return (\n <svg\n className={className}\n width={px}\n height={px}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n style={{ animation: 'spin 1s linear infinite' }}\n >\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke={color}\n strokeWidth=\"2.5\"\n fill=\"none\"\n strokeDasharray=\"50 20\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\n// ============================================================================\n// ConnectionStatus\n// ============================================================================\n\nexport type ConnectionStatusType = \n | 'idle' \n | 'connecting' \n | 'approving' \n | 'signing' \n | 'success' \n | 'error';\n\nexport interface ConnectionStatusProps {\n status: ConnectionStatusType;\n message?: string;\n onRetry?: () => void;\n}\n\nexport function ConnectionStatus({ status, message, onRetry }: ConnectionStatusProps) {\n const configs: Record<ConnectionStatusType, { color: string; label: string }> = {\n idle: { color: '#64748b', label: 'Ready' },\n connecting: { color: '#6EB9A8', label: 'Connecting...' },\n approving: { color: '#f59e0b', label: 'Waiting for approval...' },\n signing: { color: '#6EB9A8', label: 'Signing...' },\n success: { color: '#22c55e', label: 'Connected' },\n error: { color: '#ef4444', label: 'Error' },\n };\n\n const config = configs[status];\n\n return (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n padding: '12px 16px',\n backgroundColor: `${config.color}15`,\n borderRadius: '10px',\n border: `1px solid ${config.color}30`,\n }}>\n {(status === 'connecting' || status === 'approving' || status === 'signing') && (\n <LoadingSpinner size=\"sm\" color={config.color} />\n )}\n \n <div style={{ flex: 1 }}>\n <div style={{ color: config.color, fontWeight: 500, fontSize: '14px' }}>\n {config.label}\n </div>\n {message && (\n <div style={{ color: '#94a3b8', fontSize: '12px', marginTop: '2px' }}>\n {message}\n </div>\n )}\n </div>\n\n {status === 'error' && onRetry && (\n <button\n onClick={onRetry}\n style={{\n padding: '6px 12px',\n backgroundColor: config.color,\n color: '#ffffff',\n border: 'none',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '12px',\n fontWeight: 500,\n }}\n >\n Retry\n </button>\n )}\n </div>\n );\n}\n\n// ============================================================================\n// ApprovalPending\n// ============================================================================\n\nexport interface ApprovalPendingProps {\n title?: string;\n message?: string;\n walletName?: string;\n onCancel?: () => void;\n}\n\nexport function ApprovalPending({\n title = 'Waiting for Approval',\n message = 'Please approve the request in your wallet',\n walletName = 'Sheep Wallet',\n onCancel,\n}: ApprovalPendingProps) {\n return (\n <div style={{\n textAlign: 'center',\n padding: '32px 24px',\n }}>\n {/* Animated wallet icon */}\n <div style={{\n width: '64px',\n height: '64px',\n margin: '0 auto 20px',\n borderRadius: '16px',\n backgroundColor: '#6EB9A815',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n animation: 'pulse 2s ease-in-out infinite',\n }}>\n <style>{`\n @keyframes pulse {\n 0%, 100% { transform: scale(1); opacity: 1; }\n 50% { transform: scale(1.05); opacity: 0.8; }\n }\n `}</style>\n <LoadingSpinner size=\"lg\" />\n </div>\n\n <h3 style={{ \n color: '#ffffff', \n margin: '0 0 8px 0',\n fontSize: '18px',\n fontWeight: 600,\n }}>\n {title}\n </h3>\n \n <p style={{ \n color: '#94a3b8', \n margin: '0 0 24px 0',\n fontSize: '14px',\n }}>\n {message}\n </p>\n\n <div style={{\n padding: '12px 16px',\n backgroundColor: '#1a3a4d',\n borderRadius: '10px',\n color: '#6EB9A8',\n fontSize: '13px',\n marginBottom: '20px',\n }}>\n Check {walletName} extension\n </div>\n\n {onCancel && (\n <button\n onClick={onCancel}\n style={{\n padding: '10px 24px',\n backgroundColor: 'transparent',\n border: '1px solid #374151',\n borderRadius: '8px',\n color: '#9ca3af',\n cursor: 'pointer',\n fontSize: '14px',\n }}\n >\n Cancel\n </button>\n )}\n </div>\n );\n}\n"]}
|