import { useForm as useFormHook } from "./hooks/useForm";
import FormController from "./component/Controller";
import { InputType as Input, ValidationFields as ValFields, EventElement as Element } from "./types/package";
export declare const useForm: <T extends Record<string, any>>(param?: import("./types/package").UseFormParam<T>) => {
    formState: {
        values: Record<string, any>;
        active: Record<string, boolean>;
        touched: Record<string, boolean>;
        errors: Record<string, string[]>;
        invalid: boolean;
        isEmpty: boolean;
        fieldPristine: Record<string, boolean>;
        formPristine: boolean;
    };
    control: {
        getFormState: () => {
            values: Record<string, any>;
            active: Record<string, boolean>;
            touched: Record<string, boolean>;
            errors: Record<string, string[]>;
            invalid: boolean;
            fieldPristine: Record<string, boolean>;
            formPristine: boolean;
        };
        register: (name: keyof T, type: Input, extra?: import("./types/package").RegisterExtraProps) => {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled: true;
            checked: any;
            value: string | undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled?: undefined;
            checked: any;
            value: string | undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled: true;
            multiple: boolean;
            checked?: undefined;
            value?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled?: undefined;
            multiple: boolean;
            checked?: undefined;
            value?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled: true;
            checked?: undefined;
            value?: undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled?: undefined;
            checked?: undefined;
            value?: undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled: true;
            value: any;
            checked?: undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        } | {
            ref: (e: null | Element) => void;
            onChange: (e: import("react").ChangeEvent<Element>) => void;
            onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
            disabled?: undefined;
            value: any;
            checked?: undefined;
            multiple?: undefined;
            name: keyof T;
            type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
        };
        resetForm: () => void;
        resetField: (name: keyof T) => void;
        setField: (name: string, value: any, options?: {
            shouldSetTouched?: boolean;
            shouldCheckPristine?: boolean;
            multipleValues?: boolean;
            validations?: ValFields;
        }) => void;
    };
    useInitializeFormState: (initialState: T, deps: any[]) => void;
    handleSubmit: (submitCallback: (arg: T) => void) => (e: React.FormEvent<HTMLFormElement>) => void;
    register: (name: keyof T, type: Input, extra?: import("./types/package").RegisterExtraProps) => {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled: true;
        checked: any;
        value: string | undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled?: undefined;
        checked: any;
        value: string | undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled: true;
        multiple: boolean;
        checked?: undefined;
        value?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled?: undefined;
        multiple: boolean;
        checked?: undefined;
        value?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled: true;
        checked?: undefined;
        value?: undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled?: undefined;
        checked?: undefined;
        value?: undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled: true;
        value: any;
        checked?: undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    } | {
        ref: (e: null | Element) => void;
        onChange: (e: import("react").ChangeEvent<Element>) => void;
        onBlur: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        onFocus: (e: React.FocusEvent<Element, globalThis.Element>) => void;
        disabled?: undefined;
        value: any;
        checked?: undefined;
        multiple?: undefined;
        name: keyof T;
        type: "number" | "checkbox" | "color" | "date" | "datetime-local" | "email" | "month" | "password" | "radio" | "range" | "search" | "tel" | "text" | "time" | "url" | "week" | "textarea" | "select-one" | "select-multiple";
    };
    resetForm: () => void;
    resetField: (name: keyof T) => void;
    setField: (name: string, value: any, options?: {
        shouldSetTouched?: boolean;
        shouldCheckPristine?: boolean;
        multipleValues?: boolean;
        validations?: ValFields;
    }) => void;
};
export declare const Controller: typeof FormController;
export type UseFormInputType = Input;
export type UseFormControl = ReturnType<typeof useFormHook>["control"];
export type UseFormController = Parameters<typeof FormController>[0];
export type UseFormValidationField = ValFields;
export type UseFormState = ReturnType<typeof useFormHook>["formState"];
export type UseFormElement = Element;
