import * as readline from 'readline';
/**
 * Section dividers + headers — visible markers separating phases so the user
 * knows where they are in the install flow.
 */
export interface WizardIO {
    /** Phase header — e.g. "Phase 3/17 · Host CLIs". */
    header(line: string): void;
    /** Plain output line. */
    print(line: string): void;
    /** Dim/secondary text — hints, examples, descriptions. */
    hint(line: string): void;
    /** Warning line — yellow when colored. */
    warn(line: string): void;
    /** Error line — red when colored. */
    err(line: string): void;
    /** Visual section divider. */
    divider(): void;
    /**
     * Prompt for free-form text. Returns trimmed string. Empty + defaultValue
     * → defaultValue; empty + no default → ''.
     */
    text(prompt: string, defaultValue?: string): Promise<string>;
    /** Prompt for a hidden secret — masks input echo. */
    secret(prompt: string): Promise<string>;
    /** Yes/no with defaultYes flag. */
    yesNo(prompt: string, defaultYes?: boolean): Promise<boolean>;
    /** Numbered single-choice picker (1-indexed display, 0-indexed return). */
    choice(prompt: string, options: string[], defaultIndex?: number): Promise<number>;
    /** "Press Enter to continue" — paces the wizard between phases. */
    pause(prompt?: string): Promise<void>;
    /** Release resources (readline interface). */
    close(): void;
}
/**
 * Production IO — wraps node:readline. Renders with Matrix theme when stdout
 * supports color; otherwise plain text.
 */
export declare class ReadlineWizardIO implements WizardIO {
    private rl;
    private ownsInterface;
    constructor(rl?: readline.Interface);
    close(): void;
    header(line: string): void;
    print(line: string): void;
    hint(line: string): void;
    warn(line: string): void;
    err(line: string): void;
    divider(): void;
    private ask;
    text(prompt: string, defaultValue?: string): Promise<string>;
    /**
     * Masked input — disables echo, accumulates chars manually, prints * per
     * character. Falls back to plain text() when stdin is not a TTY (CI/piped).
     */
    secret(prompt: string): Promise<string>;
    yesNo(prompt: string, defaultYes?: boolean): Promise<boolean>;
    choice(prompt: string, options: string[], defaultIndex?: number): Promise<number>;
    pause(prompt?: string): Promise<void>;
}
/**
 * Test seam — feeds canned answers from a FIFO queue. Each prompt method
 * shifts one answer off. Empty queue throws so tests fail loudly on
 * forgotten answers.
 */
export declare class CannedIO implements WizardIO {
    private queue;
    transcript: string[];
    constructor(answers: Array<string | number | boolean>);
    header(line: string): void;
    print(line: string): void;
    hint(line: string): void;
    warn(line: string): void;
    err(line: string): void;
    divider(): void;
    close(): void;
    private next;
    text(prompt: string, _defaultValue?: string): Promise<string>;
    secret(prompt: string): Promise<string>;
    yesNo(prompt: string, _defaultYes?: boolean): Promise<boolean>;
    choice(prompt: string, _options: string[], _defaultIndex?: number): Promise<number>;
    pause(_prompt?: string): Promise<void>;
    remaining(): number;
}
