import type { Step } from './types';
export type MultiStepWorkflowStatus = {
    tag: 'idle';
} | {
    tag: 'validating';
} | {
    tag: 'submitting';
};
export type MultiStepState<TData = unknown> = {
    data: Partial<TData>;
    currentStepIndex: number;
    errors: Record<string, string>;
    status: MultiStepWorkflowStatus;
};
export type MultiStepAction<TData = unknown> = {
    type: 'data-updated';
    updates: Partial<TData>;
} | {
    type: 'step-changed';
    stepIndex: number;
} | {
    type: 'validation-started';
} | {
    type: 'validation-succeeded';
} | {
    type: 'validation-failed';
    errors: Record<string, string>;
} | {
    type: 'submission-started';
} | {
    type: 'submission-succeeded';
} | {
    type: 'submission-failed';
    message: string;
} | {
    type: 'reset';
    initialData: Partial<TData>;
};
export declare function createInitialMultiStepState<TData = unknown>(initialData: Partial<TData>): MultiStepState<TData>;
export declare function multiStepReducer<TData = unknown>(state: MultiStepState<TData>, action: MultiStepAction<TData>): MultiStepState<TData>;
export declare function getVisibleSteps<TData = unknown>(steps: Step<TData>[], data: Partial<TData>): Step<TData>[];
export declare function findStepIndexById<TData = unknown>(visibleSteps: Step<TData>[], stepId: string): number;
export declare function getNextStepIndex(state: MultiStepState, visibleStepCount: number): number;
export declare function getPreviousStepIndex(state: MultiStepState): number;
export declare function getNavigableStepIndex(stepIndex: number, visibleStepCount: number): number | null;
export declare function selectIsValidating(state: MultiStepState): boolean;
export declare function selectIsSubmitting(state: MultiStepState): boolean;
export declare function selectCanGoNext(state: MultiStepState): boolean;
export declare function selectCanGoBack(state: MultiStepState): boolean;
export declare function selectIsFirstStep(state: MultiStepState): boolean;
export declare function selectIsLastStep(state: MultiStepState, visibleStepCount: number): boolean;
