import type { FC, ReactNode } from 'react';
import type { Platform } from '../types.js';
import type { PlatformPickerLayout } from './frame-fit.js';
export type PlatformKeyAction = {
    type: 'move';
    delta: number;
} | {
    type: 'jump';
    platform: Platform;
} | {
    type: 'confirm';
} | null;
export declare function platformKeyAction(input: string, key: {
    leftArrow?: boolean;
    rightArrow?: boolean;
    return?: boolean;
}): PlatformKeyAction;
interface PlatformCardProps {
    emoji: string;
    name: string;
    hint: string;
    selected: boolean;
}
export declare const PlatformCard: FC<PlatformCardProps>;
export interface PlatformPickerProps {
    layout: PlatformPickerLayout;
    onSelect: (platform: Platform) => void;
    /** Rendered directly below the legend (flush, no gap). */
    footer?: ReactNode;
}
export declare const PlatformPicker: FC<PlatformPickerProps>;
export interface CardChoice {
    value: string;
    emoji: string;
    name: string;
    hint: string;
}
export type CardKeyAction = {
    type: 'move';
    delta: number;
} | {
    type: 'jump';
    index: number;
} | {
    type: 'confirm';
} | null;
export declare function cardKeyAction(input: string, key: {
    leftArrow?: boolean;
    rightArrow?: boolean;
    return?: boolean;
}, count: number): CardKeyAction;
export interface CardChooserProps {
    layout: PlatformPickerLayout;
    question: string;
    subtitle?: string;
    options: CardChoice[];
    /** Index of the card highlighted on first render (default 0 = leftmost). */
    defaultIndex?: number;
    /** Rendered directly below the legend (flush, no gap). */
    footer?: ReactNode;
    onSelect: (value: string) => void;
}
/** A heading + bordered cards (←/→/Enter) — or a Select on narrow terminals —
 *  for any small choice. Reuses PlatformCard so the boxes match the platform picker. */
export declare const CardChooser: FC<CardChooserProps>;
export {};
