@waaskey/react 0.3.1 → 0.4.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context.ts","../src/theme.ts","../src/theme-context.ts","../src/provider.ts","../src/hooks.ts","../src/use-login.ts","../src/use-qr-code.ts","../src/connect-modal.ts","../src/wallet-widget.ts","../src/sign-prompt.ts","../src/fund-widget.ts"],"names":["createContext","useContext","useMemo","Waaskey","createElement","useState","useCallback","useEffect","useRef","h","reject"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext } from 'react';\nimport type { Waaskey } from '@waaskey/sdk';\n\n/** React context holding the configured {@link Waaskey} client. Provided by {@link WaaskeyProvider}. */\nexport const WaaskeyContext = createContext<Waaskey | null>(null);\n","/**\n * Design tokens for the Waaskey widget kit (#17). One source for colours, radius and\n * typography so every component (ConnectModal, WalletWidget, SignPrompt, FundWidget) and the\n * React Native package share the same theme. White-label by passing a partial `theme` to the\n * provider; light/dark are both first-class.\n */\nexport interface WaasTheme {\n /** Primary action / brand colour. */\n accent: string;\n /** Foreground on the accent (button text). */\n accentForeground: string;\n /** Surface/background. */\n background: string;\n /** Primary text. */\n foreground: string;\n /** Secondary/subtle text. */\n muted: string;\n /** Borders / dividers. */\n border: string;\n /** Error text. */\n danger: string;\n /** Corner radius (CSS length on web). */\n radius: string;\n /** Base font family. */\n fontFamily: string;\n}\n\nexport const lightTheme: WaasTheme = {\n accent: '#6366f1',\n accentForeground: '#ffffff',\n background: '#ffffff',\n foreground: '#0a0d14',\n muted: '#6b7280',\n border: '#e5e7eb',\n danger: '#dc2626',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const darkTheme: WaasTheme = {\n accent: '#818cf8',\n accentForeground: '#0a0d14',\n background: '#0f1117',\n foreground: '#f3f4f6',\n muted: '#9ca3af',\n border: '#272b36',\n danger: '#f87171',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const defaultTheme = lightTheme;\n\n/** Merge a partial override onto a base theme (white-label). */\nexport function resolveTheme(override?: Partial<WaasTheme>, base: WaasTheme = defaultTheme): WaasTheme {\n return override ? { ...base, ...override } : base;\n}\n","import { createContext, useContext } from 'react';\nimport { defaultTheme } from './theme';\nimport type { WaasTheme } from './theme';\n\n/** Theme made available by {@link WaaskeyProvider} / `WaasProvider`. Defaults to the light theme. */\nexport const ThemeContext = createContext<WaasTheme>(defaultTheme);\n\n/** The active {@link WaasTheme} from context (falls back to the default light theme). */\nexport function useTheme(): WaasTheme {\n return useContext(ThemeContext);\n}\n","import { Waaskey } from '@waaskey/sdk';\nimport { createElement, useMemo } from 'react';\nimport { WaaskeyContext } from './context';\nimport { resolveTheme } from './theme';\nimport { ThemeContext } from './theme-context';\nimport type { WaasTheme } from './theme';\nimport type { WaaskeyOptions } from '@waaskey/sdk';\nimport type { ReactElement, ReactNode } from 'react';\n\n/** Provide either a ready {@link Waaskey} client or the options to construct one, plus an optional theme. */\nexport type WaaskeyProviderProps = ({ client: Waaskey } | { options: WaaskeyOptions }) & {\n /** Partial theme override (white-label) merged onto the default light theme. */\n theme?: Partial<WaasTheme>;\n children?: ReactNode;\n};\n\n/**\n * Makes a {@link Waaskey} client (and the kit {@link WaasTheme}) available to the hooks and\n * components (`useWaaskey`/`useWaas`, `useTheme`, `<ConnectModal>`, `<WalletWidget>`, …).\n * Pass a `client` you built, or `options` to construct one (memoized). SSR-safe (no browser\n * APIs at construction). Written with `createElement` so the package needs no JSX build step.\n */\nexport function WaaskeyProvider(props: WaaskeyProviderProps): ReactElement {\n // Discriminate by prop shape (not instanceof) so a custom/stub client also works.\n const source = 'client' in props ? props.client : props.options;\n const client = useMemo(() => ('client' in props ? props.client : new Waaskey(props.options)), [source]);\n const theme = useMemo(() => resolveTheme(props.theme), [props.theme]);\n return createElement(WaaskeyContext.Provider, { value: client }, createElement(ThemeContext.Provider, { value: theme }, props.children));\n}\n\n/** Ergonomic alias of {@link WaaskeyProvider} — the documented kit entry point (`<WaasProvider>`). */\nexport const WaasProvider = WaaskeyProvider;\nexport type WaasProviderProps = WaaskeyProviderProps;\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { WaaskeyContext } from './context';\nimport { useTheme } from './theme-context';\nimport type { WaasTheme } from './theme';\nimport type { Balance, Chain, CreateWalletOptions, CreateWalletParams, SendParams, SendResult, Signature, Waaskey, Wallet } from '@waaskey/sdk';\n\n/** Loading/error/data triple for an async read — render all three states. */\nexport interface AsyncState<T> {\n data?: T;\n error?: Error;\n loading: boolean;\n}\n\n/** The {@link Waaskey} client from context. Throws if used outside {@link WaaskeyProvider}. */\nexport function useWaaskey(): Waaskey {\n const client = useContext(WaaskeyContext);\n if (!client) throw new Error('useWaaskey must be used within a <WaaskeyProvider>.');\n return client;\n}\n\n/**\n * The unified kit surface (#12): the {@link Waaskey} client + active theme, plus the `auth`\n * resource for convenience. Sugar over `useWaaskey()` + `useTheme()` for the Privy-style DX.\n */\nexport function useWaas(): { client: Waaskey; theme: WaasTheme; auth: Waaskey['auth'] } {\n const client = useWaaskey();\n const theme = useTheme();\n return { client, theme, auth: client.auth };\n}\n\n/** Imperatively create a wallet (non-custodial keygen). Returns the action + its async state. */\nexport function useCreateWallet(): {\n create: (params: CreateWalletParams, options?: CreateWalletOptions) => Promise<Wallet>;\n wallet?: Wallet;\n error?: Error;\n isPending: boolean;\n} {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Wallet>>({ loading: false });\n\n const create = useCallback(\n async (params: CreateWalletParams, options?: CreateWalletOptions): Promise<Wallet> => {\n setState({ loading: true });\n try {\n const wallet = await waaskey.wallets.create(params, options);\n setState({ loading: false, data: wallet });\n return wallet;\n } catch (error) {\n setState({ loading: false, error: error as Error });\n throw error;\n }\n },\n [waaskey],\n );\n\n return { create, wallet: state.data, error: state.error, isPending: state.loading };\n}\n\n/** Load a wallet by id (re-fetches when `id` changes); exposes `refresh`. */\nexport function useWallet(id: string | undefined): AsyncState<Wallet> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Wallet>>({ loading: Boolean(id) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!id) return;\n setState({ loading: true });\n try {\n setState({ loading: false, data: await waaskey.wallets.get(id) });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, id]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Read an address's native balance on a chain, client-side (no backend); exposes `refresh`. */\nexport function useBalance(chain: Chain | undefined, address: string | undefined): AsyncState<Balance> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Balance>>({ loading: Boolean(chain && address) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!chain || !address) return;\n setState({ loading: true });\n try {\n setState({ loading: false, data: await waaskey.balances.getBalance(chain, address) });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, chain, address]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Read an address's native balance across several chains at once; exposes `refresh`. */\nexport function useBalances(chains: Chain[], address: string | undefined): AsyncState<Balance[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Balance[]>>({ loading: Boolean(address && chains.length) });\n // Stable dependency so the effect doesn't re-run on every render's new array identity.\n const key = chains.join(',');\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!address || !key) return;\n setState({ loading: true });\n try {\n const data = await Promise.all(key.split(',').map((chain) => waaskey.balances.getBalance(chain as Chain, address)));\n setState({ loading: false, data });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, key, address]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Status of a {@link useSend} action. */\nexport type SendStatus = 'idle' | 'pending' | 'sent' | 'error';\n\n/**\n * Imperatively send a transaction from a wallet, exposing an optimistic status\n * (`idle → pending → sent | error`) the UI renders. The platform co-signs (MPC) and returns\n * the **signed raw tx** (`result.signedTx`) — WaaS never broadcasts; the client submits it\n * (e.g. `waaskey.broadcast(result.signedTx, { rpcUrl })` or your own node).\n */\nexport function useSend(walletId: string | undefined): {\n send: (params: SendParams) => Promise<SendResult>;\n status: SendStatus;\n result?: SendResult;\n error?: Error;\n reset: () => void;\n} {\n const waaskey = useWaaskey();\n const [status, setStatus] = useState<SendStatus>('idle');\n const [result, setResult] = useState<SendResult>();\n const [error, setError] = useState<Error>();\n\n const send = useCallback(\n async (params: SendParams): Promise<SendResult> => {\n if (!walletId) throw new Error('useSend: no wallet id.');\n setStatus('pending');\n setError(undefined);\n try {\n const wallet = await waaskey.wallets.get(walletId);\n const res = await wallet.send(params);\n setResult(res);\n setStatus('sent');\n return res;\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n throw e;\n }\n },\n [waaskey, walletId],\n );\n\n const reset = useCallback((): void => {\n setStatus('idle');\n setResult(undefined);\n setError(undefined);\n }, []);\n\n return { send, status, result, error, reset };\n}\n\n/** Load a wallet's signing activity (newest first) — raw signs and send/sweep signed txs; exposes `refresh`. */\nexport function useSignatures(walletId: string | undefined): AsyncState<Signature[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Signature[]>>({ loading: Boolean(walletId) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!walletId) return;\n setState({ loading: true });\n try {\n const wallet = await waaskey.wallets.get(walletId);\n const page = await wallet.signatures();\n setState({ loading: false, data: page.items });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, walletId]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n","import { useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport type { EmbeddedSession } from '@waaskey/sdk';\n\n/** Step of the email-OTP login flow. */\nexport type LoginStep = 'email' | 'code' | 'done';\n\nexport interface UseLogin {\n step: LoginStep;\n /** The email entered at the first step. */\n email: string;\n /** The session once login completes. */\n session?: EmbeddedSession;\n loading: boolean;\n error?: Error;\n /** Send a one-time code to `email` (→ `code` step). */\n start: (email: string) => Promise<void>;\n /** Verify the code (→ `done` step on success). */\n verify: (code: string) => Promise<void>;\n /** Back to the email step (clears error). */\n reset: () => void;\n}\n\n/**\n * Headless email-OTP login (#6/#13): drives `waaskey.auth.email.start` → `.verify`,\n * tracking `step`/`loading`/`error` so a UI (e.g. `<ConnectModal>`) — or a custom one —\n * can render all states. The established session is also held on `waaskey.auth`.\n */\nexport function useLogin(): UseLogin {\n const waaskey = useWaaskey();\n const [step, setStep] = useState<LoginStep>('email');\n const [email, setEmail] = useState('');\n const [session, setSession] = useState<EmbeddedSession>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error>();\n\n const start = useCallback(\n async (e: string): Promise<void> => {\n setLoading(true);\n setError(undefined);\n try {\n await waaskey.auth.email.start(e);\n setEmail(e);\n setStep('code');\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [waaskey],\n );\n\n const verify = useCallback(\n async (code: string): Promise<void> => {\n setLoading(true);\n setError(undefined);\n try {\n const s = await waaskey.auth.email.verify(email, code);\n setSession(s);\n setStep('done');\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [waaskey, email],\n );\n\n const reset = useCallback((): void => {\n setStep('email');\n setError(undefined);\n }, []);\n\n return { step, email, session, loading, error, start, verify, reset };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Render `text` to a QR-code data URL using `qrcode` (an optional peer dependency, lazy-loaded).\n * Returns `undefined` until ready, or when `qrcode` isn't installed — callers should always also\n * show the raw text (address) so receive works without the dependency.\n */\nexport function useQrCode(text: string | undefined): string | undefined {\n const [dataUrl, setDataUrl] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n setDataUrl(undefined);\n if (!text) return;\n void (async () => {\n try {\n const qr = await import('qrcode');\n const url = await qr.toDataURL(text, { margin: 1, width: 192 });\n if (!cancelled) setDataUrl(url);\n } catch {\n // qrcode not installed (optional) or encoding failed — caller falls back to the address text.\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n return dataUrl;\n}\n","import { createElement as h, useEffect, useRef, useState } from 'react';\nimport { useTheme } from './theme-context';\nimport { useLogin } from './use-login';\nimport type { WaasTheme } from './theme';\nimport type { EmbeddedSession } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link ConnectModal} (merged onto the provider theme). */\nexport type ConnectModalTheme = Partial<WaasTheme>;\n\nexport interface ConnectModalProps {\n /** Whether the modal is shown. */\n open: boolean;\n /** Close requested (backdrop / ✕ / after connect). */\n onClose: () => void;\n /** Called with the session once login completes. */\n onConnect?: (session: EmbeddedSession) => void;\n /** Heading copy. */\n title?: string;\n theme?: ConnectModalTheme;\n}\n\n/**\n * Drop-in email-OTP login modal (#13). Runs `useLogin` (→ `waaskey.auth`), rendering the\n * email → code → done steps with loading/error states; calls `onConnect` with the session.\n * Themeable via inline tokens, accessible (labelled dialog, focus, Esc to close); written\n * with `createElement` so the package needs no JSX build step.\n */\nexport function ConnectModal({ open, onClose, onConnect, title = 'Sign in', theme }: ConnectModalProps): ReactElement | null {\n const base = useTheme();\n const t = { ...base, ...theme };\n const { step, email, session, loading, error, start, verify, reset } = useLogin();\n const [emailInput, setEmailInput] = useState('');\n const [codeInput, setCodeInput] = useState('');\n const firstFieldRef = useRef<HTMLInputElement>(null);\n\n // Surface the session once, then let the host close.\n useEffect(() => {\n if (step === 'done' && session) onConnect?.(session);\n }, [step, session, onConnect]);\n\n // Esc closes; focus the active field when the step changes.\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n firstFieldRef.current?.focus();\n return () => document.removeEventListener('keydown', onKey);\n }, [open, step, onClose]);\n\n if (!open) return null;\n\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const input: CSSProperties = { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: '8px', fontSize: 14, marginTop: 8 };\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: '8px',\n fontSize: 14,\n fontWeight: 600,\n marginTop: 12,\n cursor: loading ? 'default' : 'pointer',\n opacity: loading ? 0.6 : 1,\n };\n const link: CSSProperties = { background: 'none', border: 'none', color: t.muted, fontSize: 13, marginTop: 12, cursor: 'pointer' };\n const errText: CSSProperties = { color: t.danger, fontSize: 13, marginTop: 8 };\n\n const onSubmitEmail = (e: FormEvent): void => {\n e.preventDefault();\n if (emailInput.trim()) void start(emailInput.trim());\n };\n const onSubmitCode = (e: FormEvent): void => {\n e.preventDefault();\n if (codeInput.trim()) void verify(codeInput.trim());\n };\n\n const close = (): void => {\n onClose();\n };\n\n let body: ReactElement;\n if (step === 'email') {\n body = h(\n 'form',\n { onSubmit: onSubmitEmail, key: 'email' },\n h('label', { style: { fontSize: 13, color: t.muted }, htmlFor: 'waaskey-email' }, 'Email'),\n h('input', {\n id: 'waaskey-email',\n ref: firstFieldRef,\n style: input,\n type: 'email',\n placeholder: 'you@example.com',\n value: emailInput,\n onChange: (e: { target: HTMLInputElement }) => setEmailInput(e.target.value),\n disabled: loading,\n }),\n error ? h('div', { style: errText, role: 'alert' }, error.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Sending…' : 'Send code'),\n );\n } else if (step === 'code') {\n body = h(\n 'form',\n { onSubmit: onSubmitCode, key: 'code' },\n h('div', { style: { fontSize: 13, color: t.muted } }, `Enter the code sent to ${email}`),\n h('input', {\n id: 'waaskey-code',\n ref: firstFieldRef,\n style: input,\n inputMode: 'numeric',\n placeholder: '123456',\n value: codeInput,\n onChange: (e: { target: HTMLInputElement }) => setCodeInput(e.target.value),\n disabled: loading,\n }),\n error ? h('div', { style: errText, role: 'alert' }, error.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Verifying…' : 'Verify'),\n h(\n 'button',\n {\n style: link,\n type: 'button',\n onClick: () => {\n setCodeInput('');\n reset();\n },\n },\n '← Use a different email',\n ),\n );\n } else {\n body = h(\n 'div',\n { key: 'done', style: { textAlign: 'center', padding: '12px 0' } },\n h('div', { style: { fontSize: 15, fontWeight: 600 } }, 'Connected'),\n h('button', { style: button, type: 'button', onClick: close }, 'Continue'),\n );\n }\n\n return h(\n 'div',\n { style: overlay, onClick: close },\n h(\n 'div',\n { style: card, role: 'dialog', 'aria-modal': true, 'aria-label': title, onClick: (e: { stopPropagation: () => void }) => e.stopPropagation() },\n h(\n 'div',\n { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 } },\n h('strong', { style: { fontSize: 16 } }, title),\n h('button', { style: { ...link, marginTop: 0 }, type: 'button', 'aria-label': 'Close', onClick: close }, '✕'),\n ),\n body,\n ),\n );\n}\n","import { createElement as h, useMemo, useState } from 'react';\nimport { useBalances, useSend, useSignatures, useWallet } from './hooks';\nimport { useTheme } from './theme-context';\nimport { useQrCode } from './use-qr-code';\nimport type { WaasTheme } from './theme';\nimport type { Balance, Chain, SendResult, Signature } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link WalletWidget} (merged onto the provider theme). */\nexport type WalletWidgetTheme = Partial<WaasTheme>;\n\nexport interface WalletWidgetProps {\n /** Waaskey wallet id to render. */\n walletId: string;\n /** Chains to show native balances for (e.g. `['ethereum', 'base']`). */\n chains: Chain[];\n /** Backend chain id the Send tab submits to (e.g. `'evm:11155111'`). Defaults to `'evm:1'`. */\n sendChainId?: string;\n /** Decimals used to parse the human send amount into base units. Defaults to 18 (EVM native). */\n sendDecimals?: number;\n /** Called after a successful send. */\n onSent?: (result: SendResult) => void;\n theme?: WalletWidgetTheme;\n}\n\ntype Tab = 'assets' | 'receive' | 'send' | 'activity';\n\n/**\n * Drop-in embedded-wallet panel (#14): balances/assets, receive (address + QR), send\n * (amount + address with optimistic pending/sent/failed states), and activity (tx history).\n * Built on the headless hooks (`useBalances`/`useSend`/`useSignatures`) — use those directly\n * for a custom UI. `createElement`-only, so the package needs no JSX build step.\n */\nexport function WalletWidget({ walletId, chains, sendChainId = 'evm:1', sendDecimals = 18, onSent, theme }: WalletWidgetProps): ReactElement {\n const base = useTheme();\n const t = { ...base, ...theme };\n const [tab, setTab] = useState<Tab>('assets');\n const wallet = useWallet(walletId);\n const address = wallet.data?.address;\n\n const s = useMemo(() => styles(t), [t]);\n\n const tabs: Array<[Tab, string]> = [\n ['assets', 'Assets'],\n ['receive', 'Receive'],\n ['send', 'Send'],\n ['activity', 'Activity'],\n ];\n\n return h(\n 'div',\n { style: s.card, 'data-testid': 'waaskey-wallet-widget' },\n h(\n 'div',\n { style: s.tabbar },\n ...tabs.map(([id, label]) => h('button', { key: id, type: 'button', onClick: () => setTab(id), style: { ...s.tab, ...(tab === id ? s.tabActive : {}) } }, label)),\n ),\n h(\n 'div',\n { style: s.body },\n tab === 'assets' && h(AssetsTab, { chains, address, loading: wallet.loading, s }),\n tab === 'receive' && h(ReceiveTab, { address, s }),\n tab === 'send' && h(SendTab, { walletId, sendChainId, sendDecimals, onSent, s }),\n tab === 'activity' && h(ActivityTab, { walletId, s }),\n ),\n );\n}\n\nfunction AssetsTab({ chains, address, loading, s }: { chains: Chain[]; address?: string; loading: boolean; s: Styles }): ReactElement {\n const { data, error, loading: balLoading } = useBalances(chains, address);\n if (loading || balLoading) return h('div', { style: s.muted }, 'Loading balances…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No assets yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((b: Balance, i) =>\n h('li', { key: chains[i] ?? i, style: s.row }, h('span', { style: { fontWeight: 600 } }, chains[i] ?? ''), h('span', {}, `${b.formatted} ${b.symbol ?? ''}`.trim())),\n ),\n );\n}\n\nfunction ReceiveTab({ address, s }: { address?: string; s: Styles }): ReactElement {\n const qr = useQrCode(address);\n if (!address) return h('div', { style: s.muted }, 'Address not available yet.');\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n qr ? h('img', { src: qr, alt: 'Wallet address QR', width: 192, height: 192, style: { borderRadius: 8 } }) : null,\n h('div', { style: { ...s.muted, marginTop: 12, wordBreak: 'break-all', fontFamily: 'monospace' } }, address),\n h('button', { type: 'button', style: s.secondaryButton, onClick: () => void navigator.clipboard?.writeText(address) }, 'Copy address'),\n );\n}\n\nfunction SendTab({\n walletId,\n sendChainId,\n sendDecimals,\n onSent,\n s,\n}: {\n walletId: string;\n sendChainId: string;\n sendDecimals: number;\n onSent?: (r: SendResult) => void;\n s: Styles;\n}): ReactElement {\n const { send, status, result, error, reset } = useSend(walletId);\n const [to, setTo] = useState('');\n const [amount, setAmount] = useState('');\n\n const onSubmit = (e: FormEvent): void => {\n e.preventDefault();\n if (!to.trim() || !amount.trim()) return;\n void send({ chainId: sendChainId, to: to.trim(), value: parseUnits(amount.trim(), sendDecimals) }).then((r) => onSent?.(r));\n };\n\n if (status === 'sent' && result) {\n // WaaS signs; the integrator broadcasts result.signedTx from its own node. txHash is an offline id.\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n h('div', { style: { fontWeight: 600, marginBottom: 8 } }, 'Signed ✓'),\n h('div', { style: { ...s.muted, wordBreak: 'break-all', fontFamily: 'monospace' } }, result.txHash),\n h('button', { type: 'button', style: s.secondaryButton, onClick: reset }, 'Send another'),\n );\n }\n\n const pending = status === 'pending';\n return h(\n 'form',\n { onSubmit },\n h('label', { style: s.label, htmlFor: 'waaskey-send-to' }, 'Recipient'),\n h('input', { id: 'waaskey-send-to', style: s.input, placeholder: '0x…', value: to, onChange: (e: { target: HTMLInputElement }) => setTo(e.target.value), disabled: pending }),\n h('label', { style: { ...s.label, marginTop: 12 }, htmlFor: 'waaskey-send-amount' }, 'Amount'),\n h('input', {\n id: 'waaskey-send-amount',\n style: s.input,\n inputMode: 'decimal',\n placeholder: '0.0',\n value: amount,\n onChange: (e: { target: HTMLInputElement }) => setAmount(e.target.value),\n disabled: pending,\n }),\n status === 'error' && error ? h('div', { style: { ...s.error, marginTop: 8 }, role: 'alert' }, error.message) : null,\n h('button', { type: 'submit', style: s.button, disabled: pending }, pending ? 'Sending…' : 'Send'),\n );\n}\n\nfunction ActivityTab({ walletId, s }: { walletId: string; s: Styles }): ReactElement {\n const { data, error, loading } = useSignatures(walletId);\n if (loading) return h('div', { style: s.muted }, 'Loading activity…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No signing activity yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((sig: Signature) =>\n h(\n 'li',\n { key: sig.id, style: s.row },\n h('span', { style: { fontFamily: 'monospace' } }, shorten(sig.txHash ?? sig.to ?? sig.digest ?? sig.kind)),\n h('span', { style: { ...s.badge, ...statusStyle(sig.status) } }, sig.status ?? sig.kind),\n ),\n ),\n );\n}\n\n/** Parse a human decimal amount into base units (no float — string math). */\nfunction parseUnits(value: string, decimals: number): string {\n const [whole, frac = ''] = value.split('.');\n const fracPadded = (frac + '0'.repeat(decimals)).slice(0, decimals);\n const combined = `${whole}${fracPadded}`.replace(/^0+(?=\\d)/, '');\n return combined === '' ? '0' : combined;\n}\n\nfunction shorten(v: string): string {\n return v.length > 14 ? `${v.slice(0, 8)}…${v.slice(-4)}` : v;\n}\n\nfunction statusStyle(status: Signature['status']): CSSProperties {\n if (status === 'signed') return { background: '#dcfce7', color: '#166534' }; // signed = terminal success (client broadcasts)\n if (status === 'failed') return { background: '#fee2e2', color: '#991b1b' };\n return { background: '#fef9c3', color: '#854d0e' }; // pending / raw sign (no status)\n}\n\ninterface Styles {\n card: CSSProperties;\n tabbar: CSSProperties;\n tab: CSSProperties;\n tabActive: CSSProperties;\n body: CSSProperties;\n list: CSSProperties;\n row: CSSProperties;\n label: CSSProperties;\n input: CSSProperties;\n button: CSSProperties;\n secondaryButton: CSSProperties;\n muted: CSSProperties;\n empty: CSSProperties;\n error: CSSProperties;\n badge: CSSProperties;\n}\n\nfunction styles(t: WaasTheme): Styles {\n return {\n card: {\n background: t.background,\n color: t.foreground,\n border: `1px solid ${t.border}`,\n borderRadius: t.radius,\n width: 340,\n maxWidth: '90vw',\n overflow: 'hidden',\n fontSize: 14,\n fontFamily: t.fontFamily,\n },\n tabbar: { display: 'flex', borderBottom: `1px solid ${t.border}` },\n tab: { flex: 1, padding: '10px 8px', background: 'none', border: 'none', color: t.muted, cursor: 'pointer', fontSize: 13 },\n tabActive: { color: t.accent, fontWeight: 600, boxShadow: `inset 0 -2px 0 ${t.accent}` },\n body: { padding: 16, minHeight: 160 },\n list: { listStyle: 'none', margin: 0, padding: 0 },\n row: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '8px 0', borderBottom: `1px solid ${t.border}` },\n label: { display: 'block', fontSize: 13, color: t.muted },\n input: { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: 8, fontSize: 14, marginTop: 6 },\n button: {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n marginTop: 16,\n cursor: 'pointer',\n },\n secondaryButton: { padding: '8px 14px', background: 'none', color: t.accent, border: `1px solid ${t.accent}`, borderRadius: 8, fontSize: 13, marginTop: 12, cursor: 'pointer' },\n muted: { color: t.muted },\n empty: { color: t.muted, textAlign: 'center', padding: '24px 0' },\n error: { color: t.danger, fontSize: 13 },\n badge: { fontSize: 12, padding: '2px 8px', borderRadius: 999 },\n };\n}\n","import { createElement as h, useCallback, useRef, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { SendParams, SendResult } from '@waaskey/sdk';\nimport type { CSSProperties, ReactElement } from 'react';\n\n/** A signature/approval request the app raises for the user to confirm. */\nexport type SignRequest = { kind: 'sign'; walletId: string; digest: string; title?: string } | { kind: 'send'; walletId: string; tx: SendParams; title?: string };\n\n/** What a confirmed request resolves to — a signature hex (`sign`) or the broadcast result (`send`). */\nexport type SignOutcome = string | SendResult;\n\ntype Status = 'idle' | 'pending' | 'error';\ninterface Deferred {\n resolve: (outcome: SignOutcome) => void;\n reject: (reason: Error) => void;\n}\n\n/**\n * Promise-based signing/approval prompt (#15) — the Privy \"confirm transaction\" modal.\n *\n * `requestSignature(req)` opens the prompt and resolves when the user approves (after the MPC\n * sign/broadcast completes), or rejects when they cancel. Render the returned `prompt` element\n * once near the app root. The approval drives the real action over the relay; an error is\n * recoverable (retry/cancel), never an indefinite spinner.\n */\nexport function useSignPrompt(): { requestSignature: (req: SignRequest) => Promise<SignOutcome>; prompt: ReactElement | null } {\n const waaskey = useWaaskey();\n const [req, setReq] = useState<SignRequest>();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const deferred = useRef<Deferred | undefined>(undefined);\n\n const requestSignature = useCallback((next: SignRequest): Promise<SignOutcome> => {\n setReq(next);\n setStatus('idle');\n setError(undefined);\n return new Promise<SignOutcome>((resolve, reject) => {\n deferred.current = { resolve, reject };\n });\n }, []);\n\n const close = useCallback((): void => {\n setReq(undefined);\n setStatus('idle');\n setError(undefined);\n deferred.current = undefined;\n }, []);\n\n const approve = useCallback(async (): Promise<void> => {\n if (!req || !deferred.current) return;\n setStatus('pending');\n setError(undefined);\n try {\n const wallet = await waaskey.wallets.get(req.walletId);\n const outcome: SignOutcome = req.kind === 'sign' ? await wallet.sign(req.digest) : await wallet.send(req.tx);\n deferred.current.resolve(outcome);\n close();\n } catch (e) {\n // Recoverable: keep the prompt open so the user can retry or cancel.\n setError(e as Error);\n setStatus('error');\n }\n }, [req, waaskey, close]);\n\n const reject = useCallback((): void => {\n deferred.current?.reject(new Error('Signature request rejected by user'));\n close();\n }, [close]);\n\n const prompt = req ? h(SignPrompt, { request: req, status, error, onApprove: () => void approve(), onReject: reject }) : null;\n return { requestSignature, prompt };\n}\n\nexport interface SignPromptProps {\n request: SignRequest;\n status: 'idle' | 'pending' | 'error';\n error?: Error;\n onApprove: () => void;\n onReject: () => void;\n}\n\n/** The approval modal UI (used by {@link useSignPrompt}; exported for fully custom wiring). */\nexport function SignPrompt({ request, status, error, onApprove, onReject }: SignPromptProps): ReactElement {\n const t = useTheme();\n const pending = status === 'pending';\n\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n fontFamily: t.fontFamily,\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const rowStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', gap: 12, padding: '6px 0', borderBottom: `1px solid ${t.border}`, fontSize: 14 };\n const key: CSSProperties = { color: t.muted };\n const val: CSSProperties = { fontFamily: 'monospace', wordBreak: 'break-all', textAlign: 'right' };\n const primary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: 'pointer',\n };\n const secondary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: 'none',\n color: t.muted,\n border: `1px solid ${t.border}`,\n borderRadius: 8,\n fontSize: 14,\n cursor: 'pointer',\n };\n\n const rows: Array<[string, string]> =\n request.kind === 'send'\n ? [\n ['Network', request.tx.chainId],\n ['To', request.tx.to],\n ['Amount', request.tx.value ?? '0'],\n ]\n : [['Message digest', request.digest]];\n\n return h(\n 'div',\n { style: overlay, role: 'dialog', 'aria-modal': true, 'aria-label': request.title ?? 'Confirm' },\n h(\n 'div',\n { style: card },\n h('strong', { style: { fontSize: 16 } }, request.title ?? (request.kind === 'send' ? 'Confirm transaction' : 'Confirm signature')),\n h('div', { style: { marginTop: 12 } }, ...rows.map(([k, v]) => h('div', { key: k, style: rowStyle }, h('span', { style: key }, k), h('span', { style: val }, v)))),\n error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 12 }, role: 'alert' }, error.message) : null,\n h(\n 'div',\n { style: { display: 'flex', gap: 12, marginTop: 20 } },\n h('button', { type: 'button', style: secondary, onClick: onReject, disabled: pending }, 'Reject'),\n h('button', { type: 'button', style: primary, onClick: onApprove, disabled: pending }, pending ? 'Confirming…' : status === 'error' ? 'Retry' : 'Approve'),\n ),\n ),\n );\n}\n","import { createElement as h, useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { CSSProperties, ReactElement } from 'react';\n\nexport interface FundWidgetProps {\n /** Wallet address the purchased crypto is delivered to. */\n walletAddress: string;\n /** Chain id, e.g. `evm:1`. */\n chainId: string;\n /** Crypto to buy. Defaults to `ETH`. */\n cryptoCurrency?: string;\n /** Fiat to pay with. */\n fiatCurrency?: string;\n /** Pre-fill the fiat amount. */\n fiatAmount?: number;\n /** Button copy. */\n label?: string;\n /** Called after the user returns from the on-ramp — a good place to refresh the balance. */\n onComplete?: () => void;\n}\n\ntype Status = 'idle' | 'loading' | 'open' | 'error';\n\n/**\n * Drop-in funding widget (#16) — buy crypto into the embedded wallet via a provider on-ramp\n * (Transak, …). Fetches a provider widget URL from the API and opens it; on return the user\n * confirms, firing `onComplete` so the host can refresh the balance. Themeable; the underlying\n * `waaskey.onramp.widgetUrl(...)` works on web + React Native (only the open step is platform UI).\n */\nexport function FundWidget({ walletAddress, chainId, cryptoCurrency = 'ETH', fiatCurrency, fiatAmount, label = 'Add funds', onComplete }: FundWidgetProps): ReactElement {\n const waaskey = useWaaskey();\n const t = useTheme();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const [provider, setProvider] = useState<string>();\n\n const launch = useCallback(async (): Promise<void> => {\n setStatus('loading');\n setError(undefined);\n try {\n const { url, provider: p } = await waaskey.onramp.widgetUrl({ walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount });\n setProvider(p);\n window.open(url, '_blank', 'noopener,noreferrer');\n setStatus('open');\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n }\n }, [waaskey, walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount]);\n\n const done = useCallback((): void => {\n setStatus('idle');\n onComplete?.();\n }, [onComplete]);\n\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: status === 'loading' ? 'default' : 'pointer',\n opacity: status === 'loading' ? 0.6 : 1,\n fontFamily: t.fontFamily,\n };\n const secondary: CSSProperties = { ...button, background: 'none', color: t.accent, border: `1px solid ${t.accent}`, marginTop: 10 };\n\n if (status === 'open') {\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily, color: t.foreground, textAlign: 'center' } },\n h('div', { style: { fontSize: 14 } }, `Complete your purchase in the ${provider ?? 'provider'} window.`),\n h('button', { type: 'button', style: secondary, onClick: done }, \"I've finished\"),\n );\n }\n\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily } },\n h('button', { type: 'button', style: button, onClick: () => void launch(), disabled: status === 'loading' }, status === 'loading' ? 'Opening…' : label),\n status === 'error' && error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 8 }, role: 'alert' }, error.message) : null,\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/auth-store.ts","../src/context.ts","../src/theme.ts","../src/theme-context.ts","../src/provider.ts","../src/use-async-resource.ts","../src/hooks.ts","../src/use-auth.ts","../src/use-login.ts","../src/use-qr-code.ts","../src/connect-modal.ts","../src/wallet-widget.ts","../src/sign-prompt.ts","../src/fund-widget.ts"],"names":["createContext","useMemo","useState","useRef","useEffect","useCallback","useContext","Waaskey","createElement","h","reject"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { EmbeddedSession, EndUser, Waaskey } from '@waaskey/sdk';\n\n/**\n * Where the end-user session is kept so a reload doesn't sign the user out. The SDK holds the\n * session **in memory only** (`auth.restore` / `auth.logout`), so without one of these a refresh\n * logs the user out.\n *\n * Persisting a bearer token in web storage means any XSS or malicious extension can read it —\n * which is why the default is `'none'`. Opt in deliberately: `'session'` (tab-scoped, cleared when\n * the tab closes) is the safer built-in; `'local'` survives restarts; or pass your own store to\n * keep the token somewhere you control (e.g. an httpOnly cookie set by your backend).\n */\nexport type SessionPersistence = 'none' | 'session' | 'local' | AuthSessionStore;\n\n/** A custom place to keep the session (see {@link SessionPersistence}). */\nexport interface AuthSessionStore {\n load(): EmbeddedSession | undefined | Promise<EmbeddedSession | undefined>;\n save(session: EmbeddedSession): void | Promise<void>;\n clear(): void | Promise<void>;\n}\n\n/** Shared end-user auth state — one per provider, so a login anywhere is visible everywhere. */\nexport interface AuthStore {\n /** The live session, or `undefined` when signed out. */\n session?: EmbeddedSession;\n /** The signed-in end-user (carried by the session; re-fetched by {@link refreshUser}). */\n user?: EndUser;\n /** The initial restore has settled — until then a persisted session may still arrive. */\n ready: boolean;\n /** A `me()` round-trip is in flight. */\n loading: boolean;\n error?: Error;\n /** Adopt a session (or `undefined` to sign out) — restores it on the client and persists it. */\n setSession: (session: EmbeddedSession | undefined) => void;\n /** Re-fetch the end-user from the session token; clears the session if it is no longer valid. */\n refreshUser: () => Promise<void>;\n /** Sign out: clears the SDK session and the persisted copy. */\n logout: () => void;\n}\n\n/** Context holding the shared {@link AuthStore}. Provided by `WaaskeyProvider`. */\nexport const AuthContext = createContext<AuthStore | null>(null);\n\nconst STORAGE_KEY = 'waaskey.session';\n\n/** `sessionStorage`/`localStorage`-backed store. Returns `undefined` when there is no DOM (SSR). */\nfunction webSessionStore(area: 'session' | 'local'): AuthSessionStore {\n const storage = (): Storage | undefined => {\n // Access can throw (SSR, disabled cookies, sandboxed iframe) — degrade to no persistence.\n try {\n if (typeof window === 'undefined') return undefined;\n return area === 'local' ? window.localStorage : window.sessionStorage;\n } catch {\n return undefined;\n }\n };\n return {\n load() {\n try {\n const raw = storage()?.getItem(STORAGE_KEY);\n if (!raw) return undefined;\n const parsed = JSON.parse(raw) as EmbeddedSession;\n return parsed?.token ? parsed : undefined;\n } catch {\n return undefined;\n }\n },\n save(session) {\n try {\n storage()?.setItem(STORAGE_KEY, JSON.stringify(session));\n } catch {\n /* quota / unavailable — the session stays in memory for this page */\n }\n },\n clear() {\n try {\n storage()?.removeItem(STORAGE_KEY);\n } catch {\n /* nothing to do */\n }\n },\n };\n}\n\nfunction resolveStore(persistence: SessionPersistence): AuthSessionStore | undefined {\n if (persistence === 'none') return undefined;\n if (persistence === 'session' || persistence === 'local') return webSessionStore(persistence);\n return persistence;\n}\n\n/** Whether an error means the token is no longer accepted (so the stored session must go). */\nfunction isUnauthenticated(error: unknown): boolean {\n const code = (error as { code?: string } | undefined)?.code;\n const status = (error as { status?: number } | undefined)?.status;\n return code === 'unauthenticated' || status === 401;\n}\n\n/**\n * Builds the shared auth state for a provider: restores a persisted session on mount (validating\n * it against the API, so a stale token signs out instead of failing on the first call), and keeps\n * the SDK client, the persisted copy and React state in step.\n */\nexport function useAuthStore(client: Waaskey, persistence: SessionPersistence): AuthStore {\n const store = useMemo(() => resolveStore(persistence), [persistence]);\n const [session, setSessionState] = useState<EmbeddedSession>();\n const [user, setUser] = useState<EndUser>();\n const [error, setError] = useState<Error>();\n const [loading, setLoading] = useState(false);\n const [ready, setReady] = useState(!store);\n const mounted = useRef(true);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n const setSession = useCallback(\n (next: EmbeddedSession | undefined): void => {\n if (next) {\n client.auth.restore(next);\n void store?.save(next);\n } else {\n client.auth.logout();\n void store?.clear();\n }\n setSessionState(next);\n setUser(next?.endUser);\n setError(undefined);\n },\n [client, store],\n );\n\n const logout = useCallback((): void => setSession(undefined), [setSession]);\n\n const refreshUser = useCallback(async (): Promise<void> => {\n if (!client.auth.isAuthenticated) return;\n setLoading(true);\n try {\n const me = await client.auth.me();\n if (mounted.current) setUser(me);\n } catch (e) {\n if (!mounted.current) return;\n // A token the API no longer accepts is a sign-out, not a transient error.\n if (isUnauthenticated(e)) setSession(undefined);\n else setError(e as Error);\n } finally {\n if (mounted.current) setLoading(false);\n }\n }, [client, setSession]);\n\n // A replaced client instance starts with no session. Apps commonly enrich the options after\n // login (adding the MPC core and a share store sealed with a session-derived secret), which\n // builds a new client — re-adopt the session we already hold so the login isn't lost.\n useEffect(() => {\n if (session && !client.auth.isAuthenticated) client.auth.restore(session);\n }, [client, session]);\n\n // Restore once per (client, store): adopt the stored session optimistically, then validate it.\n useEffect(() => {\n if (!store) {\n setReady(true);\n return;\n }\n let cancelled = false;\n setReady(false);\n void (async () => {\n let restored: EmbeddedSession | undefined;\n try {\n restored = await store.load();\n } catch {\n restored = undefined;\n }\n if (cancelled) return;\n if (restored) {\n client.auth.restore(restored);\n setSessionState(restored);\n setUser(restored.endUser);\n }\n setReady(true);\n if (restored) {\n try {\n const me = await client.auth.me();\n if (!cancelled && mounted.current) setUser(me);\n } catch (e) {\n if (cancelled || !mounted.current) return;\n if (isUnauthenticated(e)) {\n client.auth.logout();\n void store.clear();\n setSessionState(undefined);\n setUser(undefined);\n }\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, store]);\n\n return useMemo(() => ({ session, user, ready, loading, error, setSession, refreshUser, logout }), [session, user, ready, loading, error, setSession, refreshUser, logout]);\n}\n","import { createContext } from 'react';\nimport type { Waaskey } from '@waaskey/sdk';\n\n/** React context holding the configured {@link Waaskey} client. Provided by {@link WaaskeyProvider}. */\nexport const WaaskeyContext = createContext<Waaskey | null>(null);\n","/**\n * Design tokens for the Waaskey widget kit (#17). One source for colours, radius and\n * typography so every component (ConnectModal, WalletWidget, SignPrompt, FundWidget) and the\n * React Native package share the same theme. White-label by passing a partial `theme` to the\n * provider; light/dark are both first-class.\n */\nexport interface WaasTheme {\n /** Primary action / brand colour. */\n accent: string;\n /** Foreground on the accent (button text). */\n accentForeground: string;\n /** Surface/background. */\n background: string;\n /** Primary text. */\n foreground: string;\n /** Secondary/subtle text. */\n muted: string;\n /** Borders / dividers. */\n border: string;\n /** Error text. */\n danger: string;\n /** Corner radius (CSS length on web). */\n radius: string;\n /** Base font family. */\n fontFamily: string;\n}\n\nexport const lightTheme: WaasTheme = {\n accent: '#6366f1',\n accentForeground: '#ffffff',\n background: '#ffffff',\n foreground: '#0a0d14',\n muted: '#6b7280',\n border: '#e5e7eb',\n danger: '#dc2626',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const darkTheme: WaasTheme = {\n accent: '#818cf8',\n accentForeground: '#0a0d14',\n background: '#0f1117',\n foreground: '#f3f4f6',\n muted: '#9ca3af',\n border: '#272b36',\n danger: '#f87171',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const defaultTheme = lightTheme;\n\n/** Merge a partial override onto a base theme (white-label). */\nexport function resolveTheme(override?: Partial<WaasTheme>, base: WaasTheme = defaultTheme): WaasTheme {\n return override ? { ...base, ...override } : base;\n}\n","import { createContext, useContext } from 'react';\nimport { defaultTheme } from './theme';\nimport type { WaasTheme } from './theme';\n\n/** Theme made available by {@link WaaskeyProvider} / `WaasProvider`. Defaults to the light theme. */\nexport const ThemeContext = createContext<WaasTheme>(defaultTheme);\n\n/** The active {@link WaasTheme} from context (falls back to the default light theme). */\nexport function useTheme(): WaasTheme {\n return useContext(ThemeContext);\n}\n","import { Waaskey } from '@waaskey/sdk';\nimport { createElement, useMemo, useRef } from 'react';\nimport { AuthContext, useAuthStore } from './auth-store';\nimport { WaaskeyContext } from './context';\nimport { resolveTheme } from './theme';\nimport { ThemeContext } from './theme-context';\nimport type { SessionPersistence } from './auth-store';\nimport type { WaasTheme } from './theme';\nimport type { WaaskeyOptions } from '@waaskey/sdk';\nimport type { ReactElement, ReactNode } from 'react';\n\n/** Provide either a ready {@link Waaskey} client or the options to construct one, plus an optional theme. */\nexport type WaaskeyProviderProps = ({ client: Waaskey } | { options: WaaskeyOptions }) & {\n /** Partial theme override (white-label) merged onto the default light theme. */\n theme?: Partial<WaasTheme>;\n /** Where to keep the end-user session across reloads. Defaults to `'none'` (memory only). */\n persistSession?: SessionPersistence;\n children?: ReactNode;\n};\n\n/**\n * Makes a {@link Waaskey} client (and the kit {@link WaasTheme} + shared auth state) available to\n * the hooks and components (`useWaaskey`/`useWaas`, `useAuth`, `useTheme`, `<ConnectModal>`,\n * `<WalletWidget>`, …). Pass a `client` you built, or `options` to construct one. SSR-safe (no\n * browser APIs at construction). Written with `createElement` so the package needs no JSX build step.\n *\n * The client is constructed **once** and kept as long as the options keep the same identity — the\n * SDK holds the end-user session and the MPC/share state on the instance, so rebuilding it on every\n * render would abandon a running ceremony. An inline `options={{ … }}` literal is therefore compared\n * by the identity of its values, not by the identity of the object. When the options genuinely do\n * change (the usual case: wiring the MPC core + share store once a session exists) the live session\n * is re-adopted on the new client.\n */\nexport function WaaskeyProvider(props: WaaskeyProviderProps): ReactElement {\n // Discriminate by prop shape (not instanceof) so a custom/stub client also works.\n const externalClient = 'client' in props ? props.client : undefined;\n const options = 'client' in props ? undefined : props.options;\n const optionsKey = options ? optionsIdentity(options) : '';\n\n const held = useRef<{ key: string; client: Waaskey } | undefined>(undefined);\n if (!held.current || held.current.key !== optionsKey || (externalClient !== undefined && held.current.client !== externalClient)) {\n if (held.current) warnClientReplaced(externalClient !== undefined);\n held.current = { key: optionsKey, client: externalClient ?? new Waaskey(options as WaaskeyOptions) };\n }\n const { client } = held.current;\n\n const theme = useMemo(() => resolveTheme(props.theme), [props.theme]);\n const auth = useAuthStore(client, props.persistSession ?? 'none');\n\n return createElement(\n WaaskeyContext.Provider,\n { value: client },\n createElement(AuthContext.Provider, { value: auth }, createElement(ThemeContext.Provider, { value: theme }, props.children)),\n );\n}\n\n/** Ergonomic alias of {@link WaaskeyProvider} — the documented kit entry point (`<WaasProvider>`). */\nexport const WaasProvider = WaaskeyProvider;\nexport type WaasProviderProps = WaaskeyProviderProps;\n\nconst objectIds = new WeakMap<object, number>();\nlet nextObjectId = 0;\n\n/** Stable id for a non-primitive option value (an MPC core, a share store, a `fetch`). */\nfunction idOf(value: object): number {\n let id = objectIds.get(value);\n if (id === undefined) {\n id = ++nextObjectId;\n objectIds.set(value, id);\n }\n return id;\n}\n\n/**\n * Identity of an options object: primitives by value, objects/functions by reference. A fresh\n * `{ apiKey, mpc, shareStore }` literal on every render yields the same key, so the client is\n * built once — while a genuinely different `apiKey` or MPC core does build a new one.\n */\nfunction optionsIdentity(options: WaaskeyOptions): string {\n const record = options as unknown as Record<string, unknown>;\n return Object.keys(record)\n .sort()\n .map((key) => {\n const value = record[key];\n if (value === null || (typeof value !== 'object' && typeof value !== 'function')) return `${key}=${String(value)}`;\n return `${key}#${idOf(value as object)}`;\n })\n .join('|');\n}\n\n/** Point at the cause in development — a replaced client abandons whatever the old one was doing. */\nfunction warnClientReplaced(external: boolean): void {\n try {\n if (typeof process !== 'undefined' && process.env?.NODE_ENV === 'production') return;\n } catch {\n /* no `process` (browser ESM) — warn */\n }\n const cause = external ? 'the `client` prop changed' : 'an option value changed identity';\n console.warn(\n `[waaskey] WaaskeyProvider replaced its client because ${cause}. Any in-flight ceremony is abandoned and cached ` +\n 'state is lost (the end-user session is re-adopted automatically). Enriching the options once after login is ' +\n 'expected; a replacement on every render means the options are rebuilt inline — hoist or memoize them.',\n );\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\n/** Loading/error/data triple for an async read — render all three states. */\nexport interface AsyncState<T> {\n data?: T;\n error?: Error;\n loading: boolean;\n}\n\n/**\n * Runs an async read and publishes **only the newest** run.\n *\n * Every read here is a network round-trip whose inputs (wallet id, chain, address) can change\n * while it is in flight; without this guard a slow earlier response lands last and overwrites the\n * newer one, and a response arriving after unmount sets state on a dead component. The loader\n * receives an `AbortSignal` — pass it to the SDK call so the request is genuinely cancelled, not\n * merely ignored.\n *\n * Pass `undefined` to disable the read (e.g. no id yet): nothing runs and `loading` stays false.\n * The previous `data` is kept while refreshing so a refresh doesn't blank the UI.\n */\nexport function useAsyncResource<T>(load: ((signal: AbortSignal) => Promise<T>) | undefined): AsyncState<T> & { refresh: () => Promise<void> } {\n const [state, setState] = useState<AsyncState<T>>({ loading: load !== undefined });\n const active = useRef<AbortController | undefined>(undefined);\n const mounted = useRef(true);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n active.current?.abort();\n };\n }, []);\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!load) return;\n active.current?.abort();\n const controller = new AbortController();\n active.current = controller;\n setState((prev) => ({ ...prev, loading: true, error: undefined }));\n try {\n const data = await load(controller.signal);\n if (controller.signal.aborted || !mounted.current) return;\n setState({ loading: false, data });\n } catch (error) {\n if (controller.signal.aborted || !mounted.current) return;\n setState({ loading: false, error: error as Error });\n }\n }, [load]);\n\n useEffect(() => {\n if (!load) {\n // The read was disabled (the id/address went away) — drop what belonged to the old input.\n // Returning `prev` when already empty keeps this from looping.\n setState((prev) => (prev.data === undefined && prev.error === undefined && !prev.loading ? prev : { loading: false }));\n return;\n }\n void refresh();\n }, [load, refresh]);\n\n return { ...state, refresh };\n}\n","import { useCallback, useContext, useMemo, useState } from 'react';\nimport { WaaskeyContext } from './context';\nimport { useTheme } from './theme-context';\nimport { useAsyncResource } from './use-async-resource';\nimport type { WaasTheme } from './theme';\nimport type { AsyncState } from './use-async-resource';\nimport type { Balance, Chain, CreateWalletOptions, CreateWalletParams, PageQuery, SendParams, SendResult, Signature, Waaskey, Wallet, WalletData } from '@waaskey/sdk';\n\nexport type { AsyncState } from './use-async-resource';\n\n/** Either a wallet id or an already-loaded {@link Wallet} — passing the object skips a `wallets.get`. */\nexport type WalletRef = string | Wallet;\n\n/** The {@link Waaskey} client from context. Throws if used outside {@link WaaskeyProvider}. */\nexport function useWaaskey(): Waaskey {\n const client = useContext(WaaskeyContext);\n if (!client) throw new Error('useWaaskey must be used within a <WaaskeyProvider>.');\n return client;\n}\n\n/**\n * The unified kit surface (#12): the {@link Waaskey} client + active theme, plus the `auth`\n * resource for convenience. Sugar over `useWaaskey()` + `useTheme()` for the Privy-style DX.\n */\nexport function useWaas(): { client: Waaskey; theme: WaasTheme; auth: Waaskey['auth'] } {\n const client = useWaaskey();\n const theme = useTheme();\n return { client, theme, auth: client.auth };\n}\n\n/** Imperatively create a wallet (non-custodial keygen). Returns the action + its async state. */\nexport function useCreateWallet(): {\n create: (params: CreateWalletParams, options?: CreateWalletOptions) => Promise<Wallet>;\n wallet?: Wallet;\n error?: Error;\n isPending: boolean;\n} {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Wallet>>({ loading: false });\n\n const create = useCallback(\n async (params: CreateWalletParams, options?: CreateWalletOptions): Promise<Wallet> => {\n setState({ loading: true });\n try {\n const wallet = await waaskey.wallets.create(params, options);\n setState({ loading: false, data: wallet });\n return wallet;\n } catch (error) {\n setState({ loading: false, error: error as Error });\n throw error;\n }\n },\n [waaskey],\n );\n\n return { create, wallet: state.data, error: state.error, isPending: state.loading };\n}\n\n/** Load a wallet by id (re-fetches when `id` changes); exposes `refresh`. */\nexport function useWallet(id: string | undefined): AsyncState<Wallet> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const load = useCallback((signal: AbortSignal) => waaskey.wallets.get(id as string, { signal }), [waaskey, id]);\n return useAsyncResource(id ? load : undefined);\n}\n\n/** List the tenant's wallets, newest first (paginated); exposes `total` and `refresh`. */\nexport function useWallets(query: PageQuery = {}): AsyncState<WalletData[]> & { total?: number; refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const { page, limit } = query;\n const load = useCallback((signal: AbortSignal) => waaskey.wallets.list({ page, limit }, { signal }), [waaskey, page, limit]);\n const { data, ...rest } = useAsyncResource(load);\n return { ...rest, data: data?.items, total: data?.total };\n}\n\n/** Read an address's native balance on a chain, client-side (no backend); exposes `refresh`. */\nexport function useBalance(chain: Chain | undefined, address: string | undefined): AsyncState<Balance> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n // The client-side provider read takes no signal — useAsyncResource still drops a stale response.\n const load = useCallback(() => waaskey.balances.getBalance(chain as Chain, address as string), [waaskey, chain, address]);\n return useAsyncResource(chain && address ? load : undefined);\n}\n\n/** Read an address's native balance across several chains at once; exposes `refresh`. */\nexport function useBalances(chains: Chain[], address: string | undefined): AsyncState<Balance[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n // Stable dependency so the effect doesn't re-run on every render's new array identity.\n const key = chains.join(',');\n const list = useMemo(() => (key ? (key.split(',') as Chain[]) : []), [key]);\n const load = useCallback(() => Promise.all(list.map((chain) => waaskey.balances.getBalance(chain, address as string))), [waaskey, list, address]);\n return useAsyncResource(address && list.length ? load : undefined);\n}\n\n/** Status of a {@link useSend} action. */\nexport type SendStatus = 'idle' | 'pending' | 'sent' | 'error';\n\n/**\n * Imperatively send a transaction from a wallet, exposing an optimistic status\n * (`idle → pending → sent | error`) the UI renders. The platform co-signs (MPC) and returns\n * the **signed raw tx** (`result.signedTx`) — WaaS never broadcasts; the client submits it\n * (e.g. `waaskey.broadcast(result.signedTx, { rpcUrl })` or your own node).\n */\nexport function useSend(wallet: WalletRef | undefined): {\n send: (params: SendParams) => Promise<SendResult>;\n status: SendStatus;\n result?: SendResult;\n error?: Error;\n reset: () => void;\n} {\n const waaskey = useWaaskey();\n const [status, setStatus] = useState<SendStatus>('idle');\n const [result, setResult] = useState<SendResult>();\n const [error, setError] = useState<Error>();\n\n const send = useCallback(\n async (params: SendParams): Promise<SendResult> => {\n if (!wallet) throw new Error('useSend: no wallet.');\n setStatus('pending');\n setError(undefined);\n try {\n const target = typeof wallet === 'string' ? await waaskey.wallets.get(wallet) : wallet;\n const res = await target.send(params);\n setResult(res);\n setStatus('sent');\n return res;\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n throw e;\n }\n },\n [waaskey, wallet],\n );\n\n const reset = useCallback((): void => {\n setStatus('idle');\n setResult(undefined);\n setError(undefined);\n }, []);\n\n return { send, status, result, error, reset };\n}\n\n/** Load a wallet's signing activity (newest first) — raw signs and send/sweep signed txs; exposes `refresh`. */\nexport function useSignatures(wallet: WalletRef | undefined): AsyncState<Signature[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const load = useCallback(\n async (signal: AbortSignal) => {\n const target = typeof wallet === 'string' ? await waaskey.wallets.get(wallet, { signal }) : wallet;\n const page = await (target as Wallet).signatures({}, { signal });\n return page.items;\n },\n [waaskey, wallet],\n );\n return useAsyncResource(wallet ? load : undefined);\n}\n","import { useContext } from 'react';\nimport { AuthContext } from './auth-store';\nimport type { AuthStore } from './auth-store';\nimport type { EmbeddedSession, EndUser } from '@waaskey/sdk';\n\n/** What {@link useAuth} exposes — the shared end-user auth state of the provider. */\nexport interface UseAuth {\n /** The live session, or `undefined` when signed out. */\n session?: EmbeddedSession;\n /** The signed-in end-user. */\n user?: EndUser;\n isAuthenticated: boolean;\n /**\n * The initial session restore has settled. Gate your \"signed out\" UI on this — otherwise a\n * persisted session makes the app flash the login screen on every reload.\n */\n ready: boolean;\n /** A `me()` round-trip is in flight. */\n loading: boolean;\n error?: Error;\n /** Adopt a session established elsewhere (e.g. from `<ConnectModal onConnect>`). */\n setSession: (session: EmbeddedSession | undefined) => void;\n /** Re-fetch the end-user; signs out if the session token is no longer accepted. */\n refreshUser: () => Promise<void>;\n /** Sign out — clears the SDK session and any persisted copy. */\n logout: () => void;\n}\n\n/**\n * The signed-in end-user, shared across the whole provider: a login through `useLogin` or\n * `<ConnectModal>` updates every consumer of this hook, and (with `persistSession`) survives a\n * reload. The SDK itself keeps the session in memory only, which is why this state lives here.\n */\nexport function useAuth(): UseAuth {\n const store = useAuthStoreContext();\n return {\n session: store.session,\n user: store.user,\n isAuthenticated: store.session !== undefined,\n ready: store.ready,\n loading: store.loading,\n error: store.error,\n setSession: store.setSession,\n refreshUser: store.refreshUser,\n logout: store.logout,\n };\n}\n\n/** The signed-in end-user, or `undefined`. Sugar over {@link useAuth}. */\nexport function useUser(): EndUser | undefined {\n return useAuthStoreContext().user;\n}\n\n/** The shared store; throws outside a provider (same contract as `useWaaskey`). */\nexport function useAuthStoreContext(): AuthStore {\n const store = useContext(AuthContext);\n if (!store) throw new Error('useAuth must be used within a <WaaskeyProvider>.');\n return store;\n}\n","import { useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useAuthStoreContext } from './use-auth';\nimport type { EmbeddedSession, PasskeyCeremony } from '@waaskey/sdk';\n\n/**\n * Step of the login flow. `'email'` is the identifier step — it collects an email **or** a phone\n * number depending on the method the UI offers; `'code'` collects the one-time code.\n */\nexport type LoginStep = 'email' | 'code' | 'done';\n\n/** How the end-user is signing in. */\nexport type LoginMethod = 'email' | 'phone' | 'google' | 'passkey';\n\nexport interface UseLogin {\n step: LoginStep;\n /** The method in progress (set by whichever `start*`/`loginWith*` was called). */\n method: LoginMethod;\n /** The email entered at the first step (empty for phone/social/passkey). */\n email: string;\n /** The phone entered at the first step (empty for email/social/passkey). */\n phone: string;\n /** The session once login completes. */\n session?: EmbeddedSession;\n loading: boolean;\n error?: Error;\n /** Send a one-time code to `email` (→ `code` step). */\n start: (email: string) => Promise<void>;\n /** Send a one-time code to `phone` (E.164) (→ `code` step). */\n startPhone: (phone: string) => Promise<void>;\n /** Verify the code for whichever identifier was started (→ `done` step on success). */\n verify: (code: string) => Promise<void>;\n /**\n * Sign in with a Google ID token. Your app owns the Google button (Google Identity Services or\n * `@react-oauth/google`) and hands the resulting `idToken` here — the kit ships no Google SDK.\n */\n loginWithGoogle: (idToken: string) => Promise<void>;\n /** Sign in with a Firebase ID token (any Firebase provider). */\n loginWithFirebase: (idToken: string) => Promise<void>;\n /** Usernameless passkey (WebAuthn) sign-in. Needs `@simplewebauthn/browser`, or pass a `ceremony`. */\n loginWithPasskey: (ceremony?: PasskeyCeremony) => Promise<void>;\n /** Back to the identifier step (clears the entered values, the error and the session). */\n reset: () => void;\n}\n\n/**\n * Headless login (#6/#13) for every method the API supports — email OTP, phone OTP, Google,\n * Firebase and passkey — tracking `step`/`loading`/`error` so a UI (e.g. `<ConnectModal>`) or a\n * custom one can render all states. On success the session is published to the provider's shared\n * auth state, so `useAuth()` sees it everywhere and `persistSession` stores it.\n */\nexport function useLogin(): UseLogin {\n const waaskey = useWaaskey();\n const auth = useAuthStoreContext();\n const [step, setStep] = useState<LoginStep>('email');\n const [method, setMethod] = useState<LoginMethod>('email');\n const [email, setEmail] = useState('');\n const [phone, setPhone] = useState('');\n const [session, setSession] = useState<EmbeddedSession>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error>();\n\n /** One place for the loading/error bookkeeping every method shares. */\n const run = useCallback(async (action: () => Promise<void>): Promise<void> => {\n setLoading(true);\n setError(undefined);\n try {\n await action();\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n }, []);\n\n const complete = useCallback(\n (next: EmbeddedSession): void => {\n setSession(next);\n setStep('done');\n // Publish to the shared store so useAuth()/persistSession pick it up.\n auth.setSession(next);\n },\n [auth],\n );\n\n const start = useCallback(\n (value: string): Promise<void> =>\n run(async () => {\n await waaskey.auth.email.start(value);\n setMethod('email');\n setEmail(value);\n setPhone('');\n setStep('code');\n }),\n [run, waaskey],\n );\n\n const startPhone = useCallback(\n (value: string): Promise<void> =>\n run(async () => {\n await waaskey.auth.phone.start(value);\n setMethod('phone');\n setPhone(value);\n setEmail('');\n setStep('code');\n }),\n [run, waaskey],\n );\n\n const verify = useCallback(\n (code: string): Promise<void> =>\n run(async () => {\n complete(method === 'phone' ? await waaskey.auth.phone.verify(phone, code) : await waaskey.auth.email.verify(email, code));\n }),\n [run, waaskey, method, email, phone, complete],\n );\n\n const loginWithGoogle = useCallback(\n (idToken: string): Promise<void> =>\n run(async () => {\n setMethod('google');\n complete(await waaskey.auth.social.google(idToken));\n }),\n [run, waaskey, complete],\n );\n\n const loginWithFirebase = useCallback(\n (idToken: string): Promise<void> =>\n run(async () => {\n complete(await waaskey.auth.social.firebase(idToken));\n }),\n [run, waaskey, complete],\n );\n\n const loginWithPasskey = useCallback(\n (ceremony?: PasskeyCeremony): Promise<void> =>\n run(async () => {\n setMethod('passkey');\n complete(await waaskey.auth.passkey.login(ceremony));\n }),\n [run, waaskey, complete],\n );\n\n const reset = useCallback((): void => {\n setStep('email');\n setMethod('email');\n setEmail('');\n setPhone('');\n setSession(undefined);\n setError(undefined);\n }, []);\n\n return { step, method, email, phone, session, loading, error, start, startPhone, verify, loginWithGoogle, loginWithFirebase, loginWithPasskey, reset };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Render `text` to a QR-code data URL using `qrcode` (an optional peer dependency, lazy-loaded).\n * Returns `undefined` until ready, or when `qrcode` isn't installed — callers should always also\n * show the raw text (address) so receive works without the dependency.\n */\nexport function useQrCode(text: string | undefined): string | undefined {\n const [dataUrl, setDataUrl] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n setDataUrl(undefined);\n if (!text) return;\n void (async () => {\n try {\n const qr = await import('qrcode');\n const url = await qr.toDataURL(text, { margin: 1, width: 192 });\n if (!cancelled) setDataUrl(url);\n } catch {\n // qrcode not installed (optional) or encoding failed — caller falls back to the address text.\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n return dataUrl;\n}\n","import { createElement as h, useCallback, useEffect, useRef, useState } from 'react';\nimport { useTheme } from './theme-context';\nimport { useLogin } from './use-login';\nimport type { WaasTheme } from './theme';\nimport type { LoginMethod } from './use-login';\nimport type { EmbeddedSession } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link ConnectModal} (merged onto the provider theme). */\nexport type ConnectModalTheme = Partial<WaasTheme>;\n\nexport interface ConnectModalProps {\n /** Whether the modal is shown. */\n open: boolean;\n /** Close requested (backdrop / ✕ / after connect). */\n onClose: () => void;\n /** Called **once** with the session when login completes. */\n onConnect?: (session: EmbeddedSession) => void;\n /** Heading copy. */\n title?: string;\n /**\n * Sign-in methods to offer, in order. Defaults to `['email']`. The first identifier method\n * (`'email'`/`'phone'`) is the default form; the rest render as alternatives.\n */\n methods?: LoginMethod[];\n /**\n * Required to offer `'google'`: resolve a Google ID token. Your app owns the Google button\n * (Google Identity Services / `@react-oauth/google`) — the kit ships no Google SDK.\n */\n googleIdToken?: () => Promise<string>;\n theme?: ConnectModalTheme;\n}\n\nconst METHOD_LABEL: Record<LoginMethod, string> = {\n email: 'Continue with email',\n phone: 'Continue with phone',\n google: 'Continue with Google',\n passkey: 'Continue with a passkey',\n};\n\n/**\n * Drop-in login modal (#13). Runs `useLogin` (→ `waaskey.auth`), rendering the identifier → code\n * → done steps with loading/error states; calls `onConnect` with the session (which is also\n * published to the provider's shared auth state, so `useAuth()` sees it). Supports email OTP,\n * phone OTP, passkey and Google. Themeable via inline tokens, accessible (labelled dialog, focus,\n * Esc to close); written with `createElement` so the package needs no JSX build step.\n */\nexport function ConnectModal({ open, onClose, onConnect, title = 'Sign in', methods = ['email'], googleIdToken, theme }: ConnectModalProps): ReactElement | null {\n const base = useTheme();\n const t = { ...base, ...theme };\n const login = useLogin();\n const { step, method, email, phone, session, loading, error, start, startPhone, verify, loginWithGoogle, loginWithPasskey, reset } = login;\n const [identifier, setIdentifier] = useState('');\n const [codeInput, setCodeInput] = useState('');\n const [active, setActive] = useState<'email' | 'phone'>(methods.includes('email') || !methods.includes('phone') ? 'email' : 'phone');\n const [localError, setLocalError] = useState<Error>();\n const firstFieldRef = useRef<HTMLInputElement>(null);\n\n // Surface the session exactly once — `onConnect` is usually an inline arrow, so keying the\n // effect on its identity would re-fire it on every parent render while the step is `done`.\n const announced = useRef<string>(undefined);\n const onConnectRef = useRef(onConnect);\n onConnectRef.current = onConnect;\n useEffect(() => {\n if (step !== 'done' || !session || announced.current === session.token) return;\n announced.current = session.token;\n onConnectRef.current?.(session);\n }, [step, session]);\n\n // Esc closes. The handler reads onClose through a ref so an inline arrow doesn't re-subscribe\n // (and, with the focus below, doesn't steal focus back on every render).\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') onCloseRef.current();\n };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open]);\n\n // Focus the active field when the modal opens or the step/method changes — not on every render.\n useEffect(() => {\n if (open) firstFieldRef.current?.focus();\n }, [open, step, active]);\n\n const useGoogle = useCallback(async (): Promise<void> => {\n if (!googleIdToken) return;\n setLocalError(undefined);\n try {\n await loginWithGoogle(await googleIdToken());\n } catch (e) {\n // A cancelled/failed Google flow is the host's error — surface it, keep the modal usable.\n setLocalError(e as Error);\n }\n }, [googleIdToken, loginWithGoogle]);\n\n if (!open) return null;\n\n const shown = error ?? localError;\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n fontFamily: t.fontFamily,\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const input: CSSProperties = { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: '8px', fontSize: 14, marginTop: 8 };\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: '8px',\n fontSize: 14,\n fontWeight: 600,\n marginTop: 12,\n cursor: loading ? 'default' : 'pointer',\n opacity: loading ? 0.6 : 1,\n };\n const alt: CSSProperties = { ...button, background: 'none', color: t.accent, border: `1px solid ${t.border}`, fontWeight: 500, marginTop: 8 };\n const link: CSSProperties = { background: 'none', border: 'none', color: t.muted, fontSize: 13, marginTop: 12, cursor: 'pointer' };\n const errText: CSSProperties = { color: t.danger, fontSize: 13, marginTop: 8 };\n\n const onSubmitIdentifier = (e: FormEvent): void => {\n e.preventDefault();\n const value = identifier.trim();\n if (!value) return;\n void (active === 'phone' ? startPhone(value) : start(value));\n };\n const onSubmitCode = (e: FormEvent): void => {\n e.preventDefault();\n if (codeInput.trim()) void verify(codeInput.trim());\n };\n\n const close = (): void => onClose();\n\n /** The methods other than the one the form is currently showing. */\n const alternatives = (): ReactElement[] =>\n methods\n .filter((m) => m !== active && (m !== 'google' || googleIdToken))\n .map((m) =>\n h(\n 'button',\n {\n key: m,\n type: 'button',\n style: alt,\n disabled: loading,\n onClick: () => {\n setLocalError(undefined);\n if (m === 'email' || m === 'phone') {\n setActive(m);\n setIdentifier('');\n } else if (m === 'passkey') void loginWithPasskey();\n else void useGoogle();\n },\n },\n METHOD_LABEL[m],\n ),\n );\n\n let body: ReactElement;\n if (step === 'email') {\n const isPhone = active === 'phone';\n body = h(\n 'div',\n { key: 'identifier' },\n h(\n 'form',\n { onSubmit: onSubmitIdentifier },\n h('label', { style: { fontSize: 13, color: t.muted }, htmlFor: 'waaskey-identifier' }, isPhone ? 'Phone' : 'Email'),\n h('input', {\n id: 'waaskey-identifier',\n ref: firstFieldRef,\n style: input,\n type: isPhone ? 'tel' : 'email',\n placeholder: isPhone ? '+15551234567' : 'you@example.com',\n value: identifier,\n onChange: (e: { target: HTMLInputElement }) => setIdentifier(e.target.value),\n disabled: loading,\n }),\n shown ? h('div', { style: errText, role: 'alert' }, shown.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Sending…' : 'Send code'),\n ),\n ...alternatives(),\n );\n } else if (step === 'code') {\n body = h(\n 'form',\n { onSubmit: onSubmitCode, key: 'code' },\n h('div', { style: { fontSize: 13, color: t.muted } }, `Enter the code sent to ${method === 'phone' ? phone : email}`),\n h('input', {\n id: 'waaskey-code',\n ref: firstFieldRef,\n style: input,\n inputMode: 'numeric',\n placeholder: '123456',\n value: codeInput,\n onChange: (e: { target: HTMLInputElement }) => setCodeInput(e.target.value),\n disabled: loading,\n }),\n shown ? h('div', { style: errText, role: 'alert' }, shown.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Verifying…' : 'Verify'),\n h(\n 'button',\n {\n style: link,\n type: 'button',\n onClick: () => {\n setCodeInput('');\n setIdentifier('');\n reset();\n },\n },\n method === 'phone' ? '← Use a different number' : '← Use a different email',\n ),\n );\n } else {\n body = h(\n 'div',\n { key: 'done', style: { textAlign: 'center', padding: '12px 0' } },\n h('div', { style: { fontSize: 15, fontWeight: 600 } }, 'Connected'),\n h('button', { style: button, type: 'button', onClick: close }, 'Continue'),\n );\n }\n\n return h(\n 'div',\n { style: overlay, onClick: close },\n h(\n 'div',\n { style: card, role: 'dialog', 'aria-modal': true, 'aria-label': title, onClick: (e: { stopPropagation: () => void }) => e.stopPropagation() },\n h(\n 'div',\n { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 } },\n h('strong', { style: { fontSize: 16 } }, title),\n h('button', { style: { ...link, marginTop: 0 }, type: 'button', 'aria-label': 'Close', onClick: close }, '✕'),\n ),\n body,\n ),\n );\n}\n","import { createElement as h, useMemo, useState } from 'react';\nimport { useBalances, useSend, useSignatures, useWallet } from './hooks';\nimport { useTheme } from './theme-context';\nimport { useQrCode } from './use-qr-code';\nimport type { WalletRef } from './hooks';\nimport type { WaasTheme } from './theme';\nimport type { Balance, Chain, SendResult, Signature } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link WalletWidget} (merged onto the provider theme). */\nexport type WalletWidgetTheme = Partial<WaasTheme>;\n\nexport interface WalletWidgetProps {\n /** Waaskey wallet id to render. */\n walletId: string;\n /** Chains to show native balances for (e.g. `['ethereum', 'base']`). */\n chains: Chain[];\n /** Backend chain id the Send tab submits to (e.g. `'evm:11155111'`). Defaults to `'evm:1'`. */\n sendChainId?: string;\n /** Decimals used to parse the human send amount into base units. Defaults to 18 (EVM native). */\n sendDecimals?: number;\n /** Called after a successful send. */\n onSent?: (result: SendResult) => void;\n theme?: WalletWidgetTheme;\n}\n\ntype Tab = 'assets' | 'receive' | 'send' | 'activity';\n\n/**\n * Drop-in embedded-wallet panel (#14): balances/assets, receive (address + QR), send\n * (amount + address with optimistic pending/sent/failed states), and activity (tx history).\n * Built on the headless hooks (`useBalances`/`useSend`/`useSignatures`) — use those directly\n * for a custom UI. `createElement`-only, so the package needs no JSX build step.\n */\nexport function WalletWidget({ walletId, chains, sendChainId = 'evm:1', sendDecimals = 18, onSent, theme }: WalletWidgetProps): ReactElement {\n const base = useTheme();\n const t = { ...base, ...theme };\n const [tab, setTab] = useState<Tab>('assets');\n const wallet = useWallet(walletId);\n const address = wallet.data?.address;\n\n const s = useMemo(() => styles(t), [t]);\n\n const tabs: Array<[Tab, string]> = [\n ['assets', 'Assets'],\n ['receive', 'Receive'],\n ['send', 'Send'],\n ['activity', 'Activity'],\n ];\n\n return h(\n 'div',\n { style: s.card, 'data-testid': 'waaskey-wallet-widget' },\n h(\n 'div',\n { style: s.tabbar },\n ...tabs.map(([id, label]) => h('button', { key: id, type: 'button', onClick: () => setTab(id), style: { ...s.tab, ...(tab === id ? s.tabActive : {}) } }, label)),\n ),\n h(\n 'div',\n { style: s.body },\n tab === 'assets' && h(AssetsTab, { chains, address, loading: wallet.loading, s }),\n tab === 'receive' && h(ReceiveTab, { address, s }),\n // Pass the loaded wallet (not the id) so the Send/Activity tabs reuse it instead of\n // each issuing its own `wallets.get` for the wallet this widget already holds.\n tab === 'send' && h(SendTab, { wallet: wallet.data ?? walletId, sendChainId, sendDecimals, onSent, s }),\n tab === 'activity' && h(ActivityTab, { wallet: wallet.data ?? walletId, s }),\n ),\n );\n}\n\nfunction AssetsTab({ chains, address, loading, s }: { chains: Chain[]; address?: string; loading: boolean; s: Styles }): ReactElement {\n const { data, error, loading: balLoading } = useBalances(chains, address);\n if (loading || balLoading) return h('div', { style: s.muted }, 'Loading balances…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No assets yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((b: Balance, i) =>\n h('li', { key: chains[i] ?? i, style: s.row }, h('span', { style: { fontWeight: 600 } }, chains[i] ?? ''), h('span', {}, `${b.formatted} ${b.symbol ?? ''}`.trim())),\n ),\n );\n}\n\nfunction ReceiveTab({ address, s }: { address?: string; s: Styles }): ReactElement {\n const qr = useQrCode(address);\n if (!address) return h('div', { style: s.muted }, 'Address not available yet.');\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n qr ? h('img', { src: qr, alt: 'Wallet address QR', width: 192, height: 192, style: { borderRadius: 8 } }) : null,\n h('div', { style: { ...s.muted, marginTop: 12, wordBreak: 'break-all', fontFamily: 'monospace' } }, address),\n h('button', { type: 'button', style: s.secondaryButton, onClick: () => void navigator.clipboard?.writeText(address) }, 'Copy address'),\n );\n}\n\nfunction SendTab({\n wallet,\n sendChainId,\n sendDecimals,\n onSent,\n s,\n}: {\n wallet: WalletRef;\n sendChainId: string;\n sendDecimals: number;\n onSent?: (r: SendResult) => void;\n s: Styles;\n}): ReactElement {\n const { send, status, result, error, reset } = useSend(wallet);\n const [to, setTo] = useState('');\n const [amount, setAmount] = useState('');\n\n const onSubmit = (e: FormEvent): void => {\n e.preventDefault();\n if (!to.trim() || !amount.trim()) return;\n void send({ chainId: sendChainId, to: to.trim(), value: parseUnits(amount.trim(), sendDecimals) }).then((r) => onSent?.(r));\n };\n\n if (status === 'sent' && result) {\n // WaaS signs; the integrator broadcasts result.signedTx from its own node. Say so plainly —\n // txHash is computed offline and is not proof the transaction reached a network.\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n h('div', { style: { fontWeight: 600, marginBottom: 4 } }, 'Signed ✓'),\n h('div', { style: { ...s.muted, fontSize: 13, marginBottom: 8 } }, 'Not broadcast yet — submit the signed transaction to a node.'),\n h('div', { style: { ...s.muted, wordBreak: 'break-all', fontFamily: 'monospace' } }, result.txHash),\n h('button', { type: 'button', style: s.secondaryButton, onClick: () => void navigator.clipboard?.writeText(result.signedTx) }, 'Copy signed tx'),\n h('button', { type: 'button', style: s.secondaryButton, onClick: reset }, 'Send another'),\n );\n }\n\n const pending = status === 'pending';\n return h(\n 'form',\n { onSubmit },\n h('label', { style: s.label, htmlFor: 'waaskey-send-to' }, 'Recipient'),\n h('input', { id: 'waaskey-send-to', style: s.input, placeholder: '0x…', value: to, onChange: (e: { target: HTMLInputElement }) => setTo(e.target.value), disabled: pending }),\n h('label', { style: { ...s.label, marginTop: 12 }, htmlFor: 'waaskey-send-amount' }, 'Amount'),\n h('input', {\n id: 'waaskey-send-amount',\n style: s.input,\n inputMode: 'decimal',\n placeholder: '0.0',\n value: amount,\n onChange: (e: { target: HTMLInputElement }) => setAmount(e.target.value),\n disabled: pending,\n }),\n status === 'error' && error ? h('div', { style: { ...s.error, marginTop: 8 }, role: 'alert' }, error.message) : null,\n h('button', { type: 'submit', style: s.button, disabled: pending }, pending ? 'Sending…' : 'Send'),\n );\n}\n\nfunction ActivityTab({ wallet, s }: { wallet: WalletRef; s: Styles }): ReactElement {\n const { data, error, loading } = useSignatures(wallet);\n if (loading) return h('div', { style: s.muted }, 'Loading activity…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No signing activity yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((sig: Signature) =>\n h(\n 'li',\n { key: sig.id, style: s.row },\n h('span', { style: { fontFamily: 'monospace' } }, shorten(sig.txHash ?? sig.to ?? sig.digest ?? sig.kind)),\n h('span', { style: { ...s.badge, ...statusStyle(sig.status) } }, sig.status ?? sig.kind),\n ),\n ),\n );\n}\n\n/** Parse a human decimal amount into base units (no float — string math). */\nfunction parseUnits(value: string, decimals: number): string {\n const [whole, frac = ''] = value.split('.');\n const fracPadded = (frac + '0'.repeat(decimals)).slice(0, decimals);\n const combined = `${whole}${fracPadded}`.replace(/^0+(?=\\d)/, '');\n return combined === '' ? '0' : combined;\n}\n\nfunction shorten(v: string): string {\n return v.length > 14 ? `${v.slice(0, 8)}…${v.slice(-4)}` : v;\n}\n\nfunction statusStyle(status: Signature['status']): CSSProperties {\n if (status === 'signed') return { background: '#dcfce7', color: '#166534' }; // signed = terminal success (client broadcasts)\n if (status === 'failed') return { background: '#fee2e2', color: '#991b1b' };\n return { background: '#fef9c3', color: '#854d0e' }; // pending / raw sign (no status)\n}\n\ninterface Styles {\n card: CSSProperties;\n tabbar: CSSProperties;\n tab: CSSProperties;\n tabActive: CSSProperties;\n body: CSSProperties;\n list: CSSProperties;\n row: CSSProperties;\n label: CSSProperties;\n input: CSSProperties;\n button: CSSProperties;\n secondaryButton: CSSProperties;\n muted: CSSProperties;\n empty: CSSProperties;\n error: CSSProperties;\n badge: CSSProperties;\n}\n\nfunction styles(t: WaasTheme): Styles {\n return {\n card: {\n background: t.background,\n color: t.foreground,\n border: `1px solid ${t.border}`,\n borderRadius: t.radius,\n width: 340,\n maxWidth: '90vw',\n overflow: 'hidden',\n fontSize: 14,\n fontFamily: t.fontFamily,\n },\n tabbar: { display: 'flex', borderBottom: `1px solid ${t.border}` },\n tab: { flex: 1, padding: '10px 8px', background: 'none', border: 'none', color: t.muted, cursor: 'pointer', fontSize: 13 },\n tabActive: { color: t.accent, fontWeight: 600, boxShadow: `inset 0 -2px 0 ${t.accent}` },\n body: { padding: 16, minHeight: 160 },\n list: { listStyle: 'none', margin: 0, padding: 0 },\n row: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '8px 0', borderBottom: `1px solid ${t.border}` },\n label: { display: 'block', fontSize: 13, color: t.muted },\n input: { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: 8, fontSize: 14, marginTop: 6 },\n button: {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n marginTop: 16,\n cursor: 'pointer',\n },\n secondaryButton: { padding: '8px 14px', background: 'none', color: t.accent, border: `1px solid ${t.accent}`, borderRadius: 8, fontSize: 13, marginTop: 12, cursor: 'pointer' },\n muted: { color: t.muted },\n empty: { color: t.muted, textAlign: 'center', padding: '24px 0' },\n error: { color: t.danger, fontSize: 13 },\n badge: { fontSize: 12, padding: '2px 8px', borderRadius: 999 },\n };\n}\n","import { createElement as h, useCallback, useRef, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { SendParams, SendResult } from '@waaskey/sdk';\nimport type { CSSProperties, ReactElement } from 'react';\n\n/** A signature/approval request the app raises for the user to confirm. */\nexport type SignRequest = { kind: 'sign'; walletId: string; digest: string; title?: string } | { kind: 'send'; walletId: string; tx: SendParams; title?: string };\n\n/** What a confirmed request resolves to — a signature hex (`sign`) or the broadcast result (`send`). */\nexport type SignOutcome = string | SendResult;\n\ntype Status = 'idle' | 'pending' | 'error';\ninterface Deferred {\n resolve: (outcome: SignOutcome) => void;\n reject: (reason: Error) => void;\n}\n\n/**\n * Promise-based signing/approval prompt (#15) — the Privy \"confirm transaction\" modal.\n *\n * `requestSignature(req)` opens the prompt and resolves when the user approves (after the MPC\n * sign/broadcast completes), or rejects when they cancel. Render the returned `prompt` element\n * once near the app root. The approval drives the real action over the relay; an error is\n * recoverable (retry/cancel), never an indefinite spinner.\n */\nexport function useSignPrompt(): { requestSignature: (req: SignRequest) => Promise<SignOutcome>; prompt: ReactElement | null } {\n const waaskey = useWaaskey();\n const [req, setReq] = useState<SignRequest>();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const deferred = useRef<Deferred | undefined>(undefined);\n\n const requestSignature = useCallback((next: SignRequest): Promise<SignOutcome> => {\n setReq(next);\n setStatus('idle');\n setError(undefined);\n return new Promise<SignOutcome>((resolve, reject) => {\n deferred.current = { resolve, reject };\n });\n }, []);\n\n const close = useCallback((): void => {\n setReq(undefined);\n setStatus('idle');\n setError(undefined);\n deferred.current = undefined;\n }, []);\n\n const approve = useCallback(async (): Promise<void> => {\n if (!req || !deferred.current) return;\n setStatus('pending');\n setError(undefined);\n try {\n const wallet = await waaskey.wallets.get(req.walletId);\n const outcome: SignOutcome = req.kind === 'sign' ? await wallet.sign(req.digest) : await wallet.send(req.tx);\n deferred.current.resolve(outcome);\n close();\n } catch (e) {\n // Recoverable: keep the prompt open so the user can retry or cancel.\n setError(e as Error);\n setStatus('error');\n }\n }, [req, waaskey, close]);\n\n const reject = useCallback((): void => {\n deferred.current?.reject(new Error('Signature request rejected by user'));\n close();\n }, [close]);\n\n const prompt = req ? h(SignPrompt, { request: req, status, error, onApprove: () => void approve(), onReject: reject }) : null;\n return { requestSignature, prompt };\n}\n\nexport interface SignPromptProps {\n request: SignRequest;\n status: 'idle' | 'pending' | 'error';\n error?: Error;\n onApprove: () => void;\n onReject: () => void;\n}\n\n/** The approval modal UI (used by {@link useSignPrompt}; exported for fully custom wiring). */\nexport function SignPrompt({ request, status, error, onApprove, onReject }: SignPromptProps): ReactElement {\n const t = useTheme();\n const pending = status === 'pending';\n\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n fontFamily: t.fontFamily,\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const rowStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', gap: 12, padding: '6px 0', borderBottom: `1px solid ${t.border}`, fontSize: 14 };\n const key: CSSProperties = { color: t.muted };\n const val: CSSProperties = { fontFamily: 'monospace', wordBreak: 'break-all', textAlign: 'right' };\n const primary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: 'pointer',\n };\n const secondary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: 'none',\n color: t.muted,\n border: `1px solid ${t.border}`,\n borderRadius: 8,\n fontSize: 14,\n cursor: 'pointer',\n };\n\n const rows: Array<[string, string]> =\n request.kind === 'send'\n ? [\n ['Network', request.tx.chainId],\n ['To', request.tx.to],\n ['Amount', request.tx.value ?? '0'],\n ]\n : [['Message digest', request.digest]];\n\n return h(\n 'div',\n { style: overlay, role: 'dialog', 'aria-modal': true, 'aria-label': request.title ?? 'Confirm' },\n h(\n 'div',\n { style: card },\n h('strong', { style: { fontSize: 16 } }, request.title ?? (request.kind === 'send' ? 'Confirm transaction' : 'Confirm signature')),\n h('div', { style: { marginTop: 12 } }, ...rows.map(([k, v]) => h('div', { key: k, style: rowStyle }, h('span', { style: key }, k), h('span', { style: val }, v)))),\n error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 12 }, role: 'alert' }, error.message) : null,\n h(\n 'div',\n { style: { display: 'flex', gap: 12, marginTop: 20 } },\n h('button', { type: 'button', style: secondary, onClick: onReject, disabled: pending }, 'Reject'),\n h('button', { type: 'button', style: primary, onClick: onApprove, disabled: pending }, pending ? 'Confirming…' : status === 'error' ? 'Retry' : 'Approve'),\n ),\n ),\n );\n}\n","import { createElement as h, useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { CSSProperties, ReactElement } from 'react';\n\nexport interface FundWidgetProps {\n /** Wallet address the purchased crypto is delivered to. */\n walletAddress: string;\n /** Chain id, e.g. `evm:1`. */\n chainId: string;\n /** Crypto to buy. Defaults to `ETH`. */\n cryptoCurrency?: string;\n /** Fiat to pay with. */\n fiatCurrency?: string;\n /** Pre-fill the fiat amount. */\n fiatAmount?: number;\n /** Button copy. */\n label?: string;\n /** Called after the user returns from the on-ramp — a good place to refresh the balance. */\n onComplete?: () => void;\n}\n\ntype Status = 'idle' | 'loading' | 'open' | 'error';\n\n/**\n * Drop-in funding widget (#16) — buy crypto into the embedded wallet via a provider on-ramp\n * (Transak, …). Fetches a provider widget URL from the API and opens it; on return the user\n * confirms, firing `onComplete` so the host can refresh the balance. Themeable; the underlying\n * `waaskey.onramp.widgetUrl(...)` works on web + React Native (only the open step is platform UI).\n */\nexport function FundWidget({ walletAddress, chainId, cryptoCurrency = 'ETH', fiatCurrency, fiatAmount, label = 'Add funds', onComplete }: FundWidgetProps): ReactElement {\n const waaskey = useWaaskey();\n const t = useTheme();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const [provider, setProvider] = useState<string>();\n\n const launch = useCallback(async (): Promise<void> => {\n setStatus('loading');\n setError(undefined);\n try {\n const { url, provider: p } = await waaskey.onramp.widgetUrl({ walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount });\n setProvider(p);\n window.open(url, '_blank', 'noopener,noreferrer');\n setStatus('open');\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n }\n }, [waaskey, walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount]);\n\n const done = useCallback((): void => {\n setStatus('idle');\n onComplete?.();\n }, [onComplete]);\n\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: status === 'loading' ? 'default' : 'pointer',\n opacity: status === 'loading' ? 0.6 : 1,\n fontFamily: t.fontFamily,\n };\n const secondary: CSSProperties = { ...button, background: 'none', color: t.accent, border: `1px solid ${t.accent}`, marginTop: 10 };\n\n if (status === 'open') {\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily, color: t.foreground, textAlign: 'center' } },\n h('div', { style: { fontSize: 14 } }, `Complete your purchase in the ${provider ?? 'provider'} window.`),\n h('button', { type: 'button', style: secondary, onClick: done }, \"I've finished\"),\n );\n }\n\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily } },\n h('button', { type: 'button', style: button, onClick: () => void launch(), disabled: status === 'loading' }, status === 'loading' ? 'Opening…' : label),\n status === 'error' && error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 8 }, role: 'alert' }, error.message) : null,\n );\n}\n"]}