import type { FC } from 'react';
import type { AiResultKind } from '../components.js';
export declare const WelcomeStep: FC;
export interface NoPlatformStepProps {
    androidDir: string;
    dense?: boolean;
}
export declare const NoPlatformStep: FC<NoPlatformStepProps>;
export interface CredentialsExistStepProps {
    appId: string;
    onChoose: (choice: 'backup' | 'exit') => void;
    dense?: boolean;
}
export declare const CredentialsExistStep: FC<CredentialsExistStepProps>;
export declare const BackingUpStep: FC;
export interface BuildCompleteStepProps {
    uploadSummary: string | null;
    buildUrl: string;
    /** Absolute path of a workflow file written by the GitHub Actions flow. */
    workflowWrittenPath?: string | null;
    /** Absolute path of credentials exported to a .env fallback. */
    envExportPath?: string | null;
    /** Surfaced when the .env export failed (non-fatal). */
    envExportError?: string | null;
    dense?: boolean;
}
export declare const BuildCompleteStep: FC<BuildCompleteStepProps>;
export interface ErrorStepProps {
    message: string;
    onChoose: (choice: 'retry' | 'exit') => void;
    dense?: boolean;
}
export declare const ErrorStep: FC<ErrorStepProps>;
export interface AiAnalysisPromptStepProps {
    onChoose: (choice: 'debug' | 'skip') => void;
    dense?: boolean;
}
export declare const AiAnalysisPromptStep: FC<AiAnalysisPromptStepProps>;
export declare const AiAnalysisRunningStep: FC;
export interface AiAnalysisResultStepProps {
    /** Pre-rendered (markdown→ANSI) analysis text, or null on a non-success result. */
    analysisText: string | null;
    /**
     * True when the analysis is too tall to show inline alongside the picker, so
     * it lives in the scroll viewer and is replaced here by a compact marker + a
     * "Re-read analysis" option. False ⇒ render the full text inline.
     */
    collapsed: boolean;
    /** Non-success outcome banner (error / already_analyzed / too_big), else null. */
    result: {
        kind: AiResultKind;
        message: string;
    } | null;
    /** Retries already consumed; with `maxRetries` decides whether retry is offered. */
    retryCount: number;
    maxRetries: number;
    onRetry: () => void;
    onSkipOrContinue: () => void;
    /** Re-open the fullscreen scroll viewer to re-read the analysis. */
    onReread: () => void;
    dense?: boolean;
}
export declare const AiAnalysisResultStep: FC<AiAnalysisResultStepProps>;
