import * as React from 'react'; export declare type Validate = (data: string | number) => boolean | string | number | Date; export declare type NumberOrString = number | string; export declare type DataType = { [key: string]: FieldValue; }; export declare type FieldValue = boolean | string | string[] | number | {}; declare type OnSubmit = (data: Data, e: React.SyntheticEvent) => void; export interface Props { mode: 'onSubmit' | 'onBlur' | 'onChange'; defaultValues?: { [key: string]: string | number | boolean; }; validationSchema?: any; } export interface MutationWatcher { disconnect: () => void; observe?: any; } export declare type Ref = any; export interface RegisterInput { ref?: Ref; required?: boolean | string; min?: NumberOrString | { value: NumberOrString; message: string; }; max?: NumberOrString | { value: NumberOrString; message: string; }; maxLength?: number | { value: number; message: string; }; minLength?: number | { value: number; message: string; }; pattern?: RegExp | { value: RegExp; message: string; }; validate?: Validate | { [key: string]: Validate; } | { value: Validate | { [key: string]: Validate; }; message: string; } | undefined; } export interface Field extends RegisterInput { ref: Ref; watch?: boolean; mutationWatcher?: MutationWatcher; options?: { ref: Ref; mutationWatcher?: MutationWatcher; }[]; } export declare type FieldsObject = { [Key in keyof Data]: Field; }; export interface Error { ref: Ref; message?: string; type?: string; isManual?: boolean; } export declare type ErrorMessages = { [Key in keyof Data]: Error; }; export interface SubmitPromiseResult { errors: ErrorMessages; values: Data; } export declare type VoidFunction = () => void; export declare type RegisterFunction = (refOrValidateRule: RegisterInput | Ref, validateRule?: RegisterInput) => any; export interface UseFormFunctions { register: RegisterFunction; handleSubmit: (func: OnSubmit) => any; errors: ErrorMessages; watch: (filedNames?: keyof Data | Array | undefined, defaultValue?: keyof Data | Array | undefined) => FieldValue | FieldValue[] | undefined; unSubscribe: VoidFunction; reset: VoidFunction; setValue: (name: Name, value: Data[Name]) => void; setError: (name: keyof Data, type: string, message?: string, ref?: Ref) => void; formState: { dirty: boolean; isSubmitted: boolean; isSubmitting: boolean; submitCount: number; touched: string[]; }; } export {};