import { type ReactNode } from 'react'; /** * One selectable funding source in {@link SelectMethodScreen}. Brand icons are * host-supplied (`icon` / `trailing`) so the package stays asset- and * `react-native-svg`-free; the screen renders a themed circular slot for each. */ export interface PaymentMethodOption { /** Stable id passed back to `onSelectMethod`. */ id: string; title: string; /** Secondary line: balance, limit, timing, etc. */ subtitle?: string; /** Leading icon, centered in the themed circle. */ icon?: ReactNode; /** Trailing accessory, e.g. a token cluster for the Crypto row. */ trailing?: ReactNode; /** * Shown but not selectable — e.g. a cash payout whose minimum the balance * can't meet. Dimmed rather than hidden so the option stays discoverable. */ disabled?: boolean; } /** * One option in the "Deposit to" receive-token dropdown (Figma: Fun Mobile / * Add money). Mirrors web's `ReceiveTokenDropdown` items. The icon is supplied * by the flow (keeping this screen asset-free) and `label` is the composed * destination text, e.g. `"USDG (Perps)"`. */ export interface ReceiveTokenOption { id: string; label: string; icon?: ReactNode; } export interface SelectMethodScreenProps { methods: PaymentMethodOption[]; onSelectMethod: (id: string) => void; /** Sheet title — the caller owns the copy ("Add money" vs "Withdraw"). */ title: string; /** * Receive-token candidates shown in the "Deposit to" dropdown above the * payment methods (web: `ReceiveTokenDropdown`). When set, the screen shows * the dropdown + a "Pay with" section label. Omit to render just the * methods list (back-compat with hosts that don't pass candidates). */ receiveTokens?: ReceiveTokenOption[]; selectedReceiveTokenId?: string; onSelectReceiveToken?: (id: string) => void; /** * Show the loading skeleton instead of the method list (Figma: Fun Mobile / * Add money, loading). Set while the funding sources are still being fetched * (e.g. the Swapped cash methods) so the list doesn't pop in row-by-row. */ loading?: boolean; /** * Number of skeleton rows rendered while `loading`. Defaults to 5 when the * deposit selector shows, 6 otherwise (it reclaims the selector's room). */ skeletonCount?: number; /** * Show the error state instead of the list (Figma: Fun Mobile / Add money, * error) — a "Something went wrong" message + a "Try again" button. Takes * precedence over `loading`. Set when fetching the funding sources failed. */ error?: boolean; /** "Try again" handler shown with the error state. */ onRetry?: () => void; /** Error-state copy — the caller owns it (generic fetch failure vs withdraw's terminal states). */ errorTitle: string; errorMessage: string; /** * Open the "Deposit to" dropdown on mount. For previews/tests of the expanded * state (Figma node 11200:8055); hosts leave this `false` and let the user * tap the trigger. */ initialDropdownOpen?: boolean; /** * Secondary line under the list, for why part of it is missing (web's * `NoCashMethodsNote`). A note, not a takeover: the rows that DID load stay * usable. */ note?: string; } /** * The "Add money" funding-source picker (Figma: Fun Mobile / Add money). A * bottom-sheet-style surface — grabber + centered title + a scrollable list of * payment methods — built from the connect-rn Restyle theme so it tracks the * active light/dark scheme. Selecting a method (e.g. Crypto) routes the host to * the next screen (Transfer/UDA). * * When `receiveTokens` are given, a fixed "Deposit to" selector sits above the * scrollable list. Opening it floats the option list as an overlay (it does * NOT reflow the list) over a dimming scrim — matching web's * `ReceiveTokenDropdown`. */ export declare function SelectMethodScreen(props: SelectMethodScreenProps): import("react").JSX.Element; //# sourceMappingURL=SelectMethodScreen.d.ts.map