import { Action, Generic, Thunk, ThunkOn } from 'easy-peasy';
export declare type ThunkStage = 'idle' | 'busy' | 'completed' | 'failed';
declare type ThunkNames<M extends unknown> = {
    [K in keyof M]: M[K] extends Thunk<any, any, any, any, any> ? K : never;
}[keyof M];
export interface ThunkStagesModel<M extends unknown> {
    thunkStages: Generic<Record<ThunkNames<Omit<M, keyof ThunkStagesModel<any>>>, ThunkStage>>;
    setThunkStage: Action<ThunkStagesModel<M>, {
        thunk: ThunkNames<Omit<M, keyof ThunkStagesModel<any>>>;
        stage: ThunkStage;
    }>;
    resetThunkStages: Action<ThunkStagesModel<M>>;
    setThunkStageOn: ThunkOn<ThunkStagesModel<M>>;
}
export declare const thunkStagesModel: <M extends unknown>(initialThunkStages: Record<ThunkNames<Pick<M, Exclude<keyof M, "thunkStages" | "setThunkStage" | "resetThunkStages" | "setThunkStageOn">>>, ThunkStage>) => ThunkStagesModel<M>;
export {};
