import React from 'react';
export type BaseWizardStep = 'location' | 'configure' | 'summary' | 'confirm-delete' | 'editing' | 'saving' | 'complete';
export interface ConfigureStepArgs<T> {
    items: T;
    onComplete: (items: T) => void;
    onBack: () => void;
    onDelete: () => void;
    configExists: boolean;
}
export interface BaseConfigWizardProps<T> {
    /** Title rendered in the wizard's outer box. */
    title: string;
    /** Focus ID passed to ink's `useFocus`. Must be unique per wizard. */
    focusId: string;
    /** File name appended to the chosen base directory (project or global). */
    configFileName: string;
    /** Initial items value before any config is loaded from disk. */
    initialItems: T;
    /**
     * Parse an on-disk config file into the wizard's items shape. Receives the
     * raw file contents (as JSON-decoded `unknown`) so each wizard can pluck
     * its slice from a larger config object.
     */
    parseConfig: (raw: unknown) => T;
    /** Build the JSON object to write to disk from the current items. */
    buildConfig: (items: T) => unknown;
    /** Whether the items value carries any actual entries to save. */
    hasItems: (items: T) => boolean;
    /** Render the wizard-specific configure step. */
    renderConfigureStep: (args: ConfigureStepArgs<T>) => React.ReactNode;
    /** Render the items list shown in the summary step. */
    renderSummaryItems: (items: T) => React.ReactNode;
    /** Optional extra content to render in the complete step (after the header). */
    renderCompleteExtras?: (items: T) => React.ReactNode;
    projectDir: string;
    onComplete: (configPath: string) => void;
    onCancel?: () => void;
}
export declare function BaseConfigWizard<T>({ title, focusId, configFileName, initialItems, parseConfig, buildConfig, hasItems, renderConfigureStep, renderSummaryItems, renderCompleteExtras, projectDir, onComplete, onCancel, }: BaseConfigWizardProps<T>): React.JSX.Element;
//# sourceMappingURL=base-config-wizard.d.ts.map