export interface WithdrawFlowOption {
    id: string;
    title: string;
    description: string;
    highlighted?: boolean;
}
export interface WithdrawSelectOption {
    value: string;
    label: string;
    iconUrl?: string;
}
export interface WithdrawProviderOption {
    id: string;
    name: string;
    quote: string;
    fee: string;
    badge?: "best" | "low-kyc";
    highlighted?: boolean;
}
export interface WithdrawSummary {
    amountReceived: string;
    network: string;
    provider: string;
    toWallet: string;
    fees: string;
}
export interface WithdrawFlowData {
    /** Top-level balance shown in the entry step. */
    balance: number;
    amount: string;
    currency: string;
    destinationWallet: string;
    tokenOptions: WithdrawSelectOption[];
    networkOptions: WithdrawSelectOption[];
    selectedToken: string;
    selectedNetwork: string;
    providers: WithdrawProviderOption[];
    purchaseSummary: WithdrawSummary;
}
export type WithdrawMethod = "card";
export interface WithdrawModalProps {
    /** Whether the withdraw modal is currently open. */
    open: boolean;
    /** Called whenever the withdraw modal open state changes. */
    onOpenChange: (open: boolean) => void;
    /** Controlled state for the withdraw flow. */
    withdrawFlow: WithdrawFlowData;
    /** Called when the user selects a withdraw method. */
    onSelectWithdrawMethod?: (method: WithdrawMethod) => void;
    /** Called when the withdraw amount changes. */
    onWithdrawAmountChange: (amount: string) => void;
    /** Called when the withdraw currency changes. */
    onWithdrawCurrencyChange: (currency: string) => void;
    /** Called when the withdraw token changes. */
    onWithdrawTokenChange: (token: string) => void;
    /** Called when the withdraw network changes. */
    onWithdrawNetworkChange: (network: string) => void;
    /** Called when provider quotes should be fetched. */
    onGetWithdrawQuotes?: () => void;
    /** Called when the user selects a withdraw provider. */
    onSelectWithdrawProvider: (providerId: string) => void;
    /** Called after the withdraw flow completes. */
    onDoneWithdraw: () => void;
}
