import type { FormikProps } from 'formik';
import React from 'react';
import type { WizardPage } from './WizardPage';
import type { IModalComponentProps } from '../../presentation';
import type { TaskMonitor } from '../../task/monitor/TaskMonitor';
export interface IWizardPageInjectedProps<T> {
    formik: FormikProps<T>;
    /** WizardModal supplies this incrementor fn, which should be used to supply the WizardPage order prop */
    nextIdx: () => number;
    /** The WizardModal Callback API for use by WizardPage component */
    wizard: IWizardModalApi;
}
export interface IWizardModalProps<T> extends IModalComponentProps {
    formClassName?: string;
    heading: string;
    initialValues: T;
    loading?: boolean;
    render: (props: IWizardPageInjectedProps<T>) => React.ReactNode;
    submitButtonLabel: string;
    taskMonitor: TaskMonitor;
    validate?(values: T): any;
}
export interface IWizardModalState<T> {
    currentPage: WizardPage<T>;
    initialized: boolean;
    pages: Array<WizardPage<T>>;
}
export interface IWizardModalApi {
    onWizardPageAdded: (wizardPage: WizardPage<any>) => void;
    onWizardPageRemoved: (wizardPage: WizardPage<any>) => void;
    /**
     * The wrapped WizardPage component can call this when its state changes
     * and WizardModal will force a re-render
     */
    onWizardPageStateChanged: (_page: WizardPage<any>) => void;
}
export declare class WizardModal<T = {}> extends React.Component<IWizardModalProps<T>, IWizardModalState<T>> implements IWizardModalApi {
    private stepsElement;
    private formikRef;
    state: IWizardModalState<T>;
    private static incrementer;
    get formik(): FormikProps<T>;
    componentDidMount(): void;
    onWizardPageAdded: (wizardPage: WizardPage<T>) => void;
    onWizardPageRemoved: (wizardPage: WizardPage<T>) => void;
    private setCurrentPage;
    private handleStepsScroll;
    private validate;
    /** Rerender everything when a WizardPage requests it */
    onWizardPageStateChanged(_page: WizardPage<T>): void;
    revalidate: () => Promise<import("formik").FormikErrors<T>>;
    render(): JSX.Element;
}
