export interface PickerItem<T = string> {
    /** The line shown to the user. Plain text — no ANSI codes. */
    label: string;
    /** Optional right-aligned hint (e.g. pricing, key combo). */
    hint?: string;
    /** Optional second line under the label (e.g. description). */
    description?: string;
    /** The value returned when this item is selected. */
    value: T;
}
export interface PickerOptions {
    /** Title shown at the top of the picker. */
    title?: string;
    /** Footer hint about what's happening (overrides default). */
    footer?: string;
    /**
     * Filtering: when true (default), the user can type to narrow the
     * list. Set to false for pickers where you want pure navigation
     * (rare).
     */
    filterable?: boolean;
    /**
     * Pre-fill the filter with this string before showing the picker.
     * Use case: triggering the picker via a specific key (`/`) and
     * wanting that character already in the filter so the user can
     * keep typing to narrow without re-typing the trigger.
     */
    initialFilter?: string;
}
/**
 * Show the picker and resolve with the user's selection (or null
 * on cancel). Restores terminal state cleanly on either path.
 */
export declare function pick<T>(items: PickerItem<T>[], opts?: PickerOptions): Promise<T | null>;
