import { z, ZodObject } from "zod";
import { UseFormHook } from "../types";
type SetValues<T> = (values: Partial<T>, options?: {
    overwrite?: boolean;
}) => void;
type SetErrors<T> = (errors: Partial<Record<keyof T, string>>) => void;
type BaseCommonProps<TValues, TData = any, TError = Error> = {
    errors?: Partial<Record<keyof TValues, string>>;
    mode?: "controlled" | "uncontrolled";
    resetOnSuccess?: boolean;
    errorParser?: (message: string) => string;
    onSubmit?: (values: TValues, formData: FormData) => Promise<TData>;
    onSuccess?: (data: Awaited<TData>, ctx: {
        reset: () => void;
        values: TValues;
        formData: FormData;
    }) => void;
    onError?: (error: TError, ctx: {
        setErrors: SetErrors<TValues>;
        setValues: SetValues<TValues>;
    }) => void;
};
type CommonProps<TValues, TData, TError> = (BaseCommonProps<TValues, TData, TError> & {
    persistKey: string;
}) | (BaseCommonProps<TValues, TData, TError> & {
    persistKey?: never;
});
export declare function useForm<TSchema extends ZodObject | undefined = undefined, DefaultValues = TSchema extends undefined ? Record<string, any> : Partial<z.infer<TSchema>>, TData = any, TError = Error>(props?: {
    schema?: TSchema;
    defaultValues?: DefaultValues;
} & CommonProps<DefaultValues, TData, TError>): UseFormHook<DefaultValues, TData>;
export {};
