import { ChangeEvent, FormEvent, RefCallback } from 'react';
import { ValueOf } from '../../types/@common/utility';
import type { FormFields, Store, Validation, InputValue, Errors } from '../../utils/formStore/createFormStore';
interface UseFormOptions<DefaultValues extends FormFields> {
    defaultValues?: DefaultValues;
}
type UseFormReturn<DefaultValues extends FormFields = FormFields> = ReturnType<typeof useForm<DefaultValues>>;
declare const useForm: <DefaultValues extends FormFields>(options?: UseFormOptions<DefaultValues> | undefined) => {
    store: Store<DefaultValues>;
    errors: Errors<DefaultValues>;
    setError: (name: keyof DefaultValues, info?: ValueOf<Errors<DefaultValues>> | undefined) => void;
    register: (name: keyof DefaultValues, options?: {
        value?: InputValue;
        validations?: Validation[] | undefined;
        onChange?(e: ChangeEvent<HTMLInputElement | HTMLSelectElement>): void;
        onBlur?(e: ChangeEvent<HTMLInputElement | HTMLSelectElement>): void;
    } | undefined) => {
        value?: string | undefined;
        name: keyof DefaultValues;
        onChange: (e: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
        onBlur: (e: ChangeEvent<HTMLInputElement | HTMLSelectElement>) => void;
        ref: RefCallback<HTMLInputElement | HTMLSelectElement>;
    };
    watch: <FieldNames extends (keyof DefaultValues)[]>(fieldsNames: FieldNames) => { [Name in FieldNames[number]]: string; };
    handleSubmit: (onValid?: ((value: keyof DefaultValues extends infer T extends keyof DefaultValues ? { [Name_1 in T]: string; } : never, e: FormEvent<HTMLFormElement>) => void) | undefined, onInvalid?: ((errors: Errors<DefaultValues>, e: FormEvent<HTMLFormElement>) => void) | undefined) => (e: FormEvent<HTMLFormElement>) => void;
    getFieldValue: (name: keyof DefaultValues) => string;
    getFieldState: (name: keyof DefaultValues) => {
        isValid: boolean;
        ref: HTMLInputElement | HTMLSelectElement | null;
    } | undefined;
};
export { useForm };
export type { UseFormReturn };
