type InitialState<T> = {
    type: "initial";
    data: T;
    error: null;
    validationError: null;
};
type InvalidState<T> = {
    type: "invalid";
    data: null;
    error: null;
    validationError: T;
};
type FailureState<T> = {
    type: "failure";
    data: null;
    error: T;
    validationError: null;
};
type SuccessState<T> = {
    type: "success";
    data: T;
    error: null;
    validationError: null;
};
type ActionState<Data, Error, ValidationError = Record<string, never>> = InitialState<Data> | InvalidState<ValidationError> | FailureState<Error> | SuccessState<Data>;
type FormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData, Arguments extends unknown[] = []> = (...args: [
    ...Arguments,
    state: ActionState<Data, Error, ValidationError>,
    payload: Payload
]) => Promise<ActionState<Data, Error, ValidationError>>;
declare function initial<Data>(data: Data): InitialState<Data>;
declare function createFormAction<Data, Error = Data, ValidationError = Record<string, never>, Payload = FormData, Arguments extends [...unknown[]] = []>(formAction: (params: {
    success: (data: Data) => SuccessState<Data>;
    failure: (error: Error) => FailureState<Error>;
    invalid: (validationError: ValidationError) => InvalidState<ValidationError>;
}, ...args: Arguments) => FormAction<Data, Error, ValidationError, Payload>): (...args: [...Arguments, state: ActionState<Data, Error, ValidationError>, payload: Payload]) => Promise<ActionState<Data, Error, ValidationError>>;

export { type ActionState as A, type FormAction as F, type InitialState as I, type SuccessState as S, type InvalidState as a, type FailureState as b, createFormAction as c, initial as i };
