import type { PerpsTransferDirection, PerpsTransferStatus } from './PolymarketPerpsTransferScreen';
/**
 * pUSD has 6 on-chain decimals, so balances carry up to 6 decimal places. We
 * render only the decimals actually present, up to 6: capping at 2 rounded
 * `196.867461` *up* to `196.87`, so Max filled a value above the real balance
 * and tripped the insufficient-balance guard. At 6 decimals the value is
 * reproduced exactly. There is no minimum, so trailing zeros are trimmed —
 * a `1.1` balance fills as `1.1`, not `1.100000` (or `1.10`).
 *
 * Not `formatCurrencyAndStringify` — that helper produces a 2-decimal `$`
 * display string, while this fills the editable input with an exact,
 * re-parsable pUSD amount.
 */
export declare function formatAmountValue(value: number): string;
export interface PerpsTransferFormProps {
    predictionsBalanceUsd: number;
    perpsBalanceUsd: number;
    /** Minimum pUSD to transfer *into* predictions (USD). */
    predictionsMinTransferUsd?: number;
    /** Minimum pUSD to transfer *into* perps (USD). */
    perpsMinTransferUsd?: number;
    initialDirection?: PerpsTransferDirection;
    /** Initial amount input string (pUSD). */
    initialAmountUsd?: string;
    status?: PerpsTransferStatus;
    onTransfer: (params: {
        /** Exact string the user entered (validated numeric, ≤6 decimals). */
        amountUsd: string;
        direction: PerpsTransferDirection;
    }) => void;
}
export interface PerpsTransferAccount {
    /** Localized account name ("Predictions" / "Perps"). */
    label: string;
    balanceUsd: number;
}
/** Plain form state consumed by `PerpsTransferRows` and `PerpsTransferBottomBar`. */
export interface PerpsTransferForm {
    /** Raw amount input string (may contain separators). */
    amount: string;
    /** Validated setter — ignores input that isn't numeric with ≤6 decimals. */
    setAmount: (next: string) => void;
    /** Fills the amount with the source balance at full 6-decimal precision. */
    fillMaxAmount: () => void;
    swapDirection: () => void;
    /** The editable "From" account. */
    source: PerpsTransferAccount;
    /** The read-only "To" account mirroring the source. */
    destination: PerpsTransferAccount;
    /** Validation/error notice line; `null` when nothing should be shown. */
    noticeText: string | null;
    /** Status for the action button (`error` is remapped to a retry-able idle). */
    buttonStatus: PerpsTransferStatus;
    isTransferDisabled: boolean;
    /** Reports the entered amount + direction via the host's `onTransfer`. */
    requestTransfer: () => void;
}
/**
 * Owns the Perps ⇄ Predictions transfer form state — amount, direction, and
 * the derived validation/notice/button values — so both the standalone
 * {@link PolymarketPerpsTransferScreen} (Dialog) and the in-modal
 * `PerpsTransferStep` (renders rows inline + portals the bottom bar) share
 * identical behavior. Returns plain values; `PerpsTransferRows` and
 * `PerpsTransferBottomBar` render them.
 */
export declare function usePerpsTransferForm({ predictionsBalanceUsd, perpsBalanceUsd, predictionsMinTransferUsd, perpsMinTransferUsd, initialDirection, initialAmountUsd, status, onTransfer, }: PerpsTransferFormProps): PerpsTransferForm;
