import type { DependencyList, ReactNode } from "react";
declare type IFieldObjectCustomConfig<T, P> = Pick<P, Exclude<keyof P, keyof IFieldValidationConfigBase<T>>>;
interface IFieldValidationStateBase<T> {
    changed: boolean;
    cue: boolean;
    cueInvalid: boolean;
    errors: ReactNode[];
    label?: string;
    required: boolean;
    valid: boolean;
    value: T;
}
interface IFieldObjectBase<T> extends IFieldValidationStateBase<T> {
    restore: () => void;
    setCue: (cue: boolean) => void;
    setValue: (newValue: T) => void;
}
export declare type IFieldObject<T, P = {}> = IFieldObjectCustomConfig<T, P> & IFieldObjectBase<T>;
export declare type RuleCallback<T> = (value: T) => boolean;
interface IFieldValidationConfigBase<T> {
    cueDelay?: number;
    deps?: DependencyList;
    label?: string;
    required?: boolean | ReactNode;
    rules?: [RuleCallback<T>, ReactNode?][];
}
export declare type IFieldValidationConfig<T, P = {}> = P & IFieldValidationConfigBase<T>;
export declare const useStateValidate: <T, P extends IFieldValidationConfigBase<T>>(initial: T, config: P) => IFieldObject<T, P>;
export declare const fieldBagChanged: <T, P = {}>(fieldBag: object) => boolean;
export declare const fieldBagValid: <T, P = {}>(fieldBag: object) => boolean;
export declare const fieldBagReduceToValues: <T, F extends object>(fieldBag: F) => { [key in keyof F]: string; };
export declare const fieldBagTraverse: <T, P = {}>(fieldBag: object, cb: (field: IFieldObject<T, P>) => void) => void;
export declare const ruleEmail: () => (value: string) => boolean;
export declare const ruleEnum: (list: string[]) => (value: string) => boolean;
export declare const ruleLength: ({ min, max }: {
    min?: number | undefined;
    max?: number | undefined;
}) => (value: string) => boolean;
export declare const ruleMatch: (pattern: RegExp) => (value: string) => boolean;
export declare const ruleNumeric: () => (value: string) => boolean;
export declare const rulePhone: () => (value: string) => boolean;
export declare const ruleZip: () => (value: string) => boolean;
export declare const defineConfig: <T, P = {}>(rule: IFieldValidationConfig<T, P>) => IFieldValidationConfig<T, P>;
export default useStateValidate;
