import { Hydrated } from "../center";
import { StateManager, TypeStateManagerConfigs } from "../state-manager";
import { ReactStateManagerStore } from "./store";
export declare class ReactStateManagerForm<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>> {
    protected _config: ReactStateManagerFormConfig<DataType, ErrorType, Meta>;
    protected readonly _KEYS: (keyof Required<DataType>)[];
    fields: { [Key in keyof Required<DataType>]: {
        data: StateManager<DataType[Key]>;
        error: StateManager<ErrorType | undefined>;
        touched: StateManager<boolean | undefined>;
        modified: StateManager<boolean | undefined>;
        getValues: () => {
            data: Readonly<DataType[Key]>;
            error: ErrorType | undefined;
            touched: Readonly<boolean | undefined>;
            modified: Readonly<boolean | undefined>;
        };
    }; };
    get KEYS(): (keyof Required<DataType>)[];
    get meta(): Meta;
    get hooks(): Readonly<{
        useField: <Key extends keyof DataType>(name: Key) => {
            value: DataType[Key];
            setValue: (newValue: DataType[Key]) => void;
            error: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key];
            setError: (newState: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key]) => void;
            touched: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key];
            setTouched: (newState: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key]) => void;
            modified: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key];
            setModified: (newState: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key]) => void;
            setAsTouched: () => void;
            setAsModified: () => void;
            _setValue: (newState: DataType[Key]) => void;
        };
        useData: () => [state: DataType, setState: (newValue: DataType) => void];
        useErrors: () => [state: { [Key in keyof DataType]?: ErrorType | undefined; }, setState: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void];
        useTouched: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
        useModified: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
        useForm: () => {
            data: DataType;
            setData: (newValue: DataType) => void;
            errors: { [Key in keyof DataType]?: ErrorType | undefined; };
            setErrors: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void;
            touched: { [Key in keyof DataType]?: boolean | undefined; };
            setTouched: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
            modified: { [Key in keyof DataType]?: boolean | undefined; };
            setModified: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
        };
        useIsModified: () => [isModified: boolean];
        useIsTouched: () => [isTouched: boolean];
        useHasErrors: () => [hasErrors: boolean];
    }>;
    protected readonly _truthyValues: {
        [Key in keyof Required<DataType>]: true;
    };
    protected readonly _data: ReactStateManagerStore<DataType>;
    get data(): { [Key in keyof Required<DataType>]: import("./state-manager").ReactStateManager<DataType[Key]>; };
    protected readonly _errors: ReactStateManagerStore<{
        [Key in keyof DataType]?: ErrorType;
    }>;
    get errors(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: ErrorType | undefined; }>]: import("./state-manager").ReactStateManager<{ [Key in keyof DataType]?: ErrorType | undefined; }[Key_1]>; };
    protected readonly _touched: ReactStateManagerStore<{
        [Key in keyof DataType]?: boolean;
    }>;
    get touched(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: boolean | undefined; }>]: import("./state-manager").ReactStateManager<{ [Key in keyof DataType]?: boolean | undefined; }[Key_1]>; };
    protected readonly _modified: ReactStateManagerStore<{
        [Key in keyof DataType]?: boolean;
    }>;
    get modified(): { [Key_1 in keyof Required<{ [Key in keyof DataType]?: boolean | undefined; }>]: import("./state-manager").ReactStateManager<{ [Key in keyof DataType]?: boolean | undefined; }[Key_1]>; };
    get value(): {
        data?: DataType;
        errors?: {
            [Key in keyof DataType]?: ErrorType;
        };
        touched?: {
            [Key in keyof DataType]?: boolean;
        };
        modified?: {
            [Key in keyof DataType]?: boolean;
        };
    };
    set value(newValues: {
        data?: DataType;
        errors?: {
            [Key in keyof DataType]?: ErrorType;
        };
        touched?: {
            [Key in keyof DataType]?: boolean;
        };
        modified?: {
            [Key in keyof DataType]?: boolean;
        };
    });
    protected readonly _validators: {
        [Key in keyof Required<DataType>]: (value: any) => void;
    } | undefined;
    protected readonly _hooks: Readonly<{
        useField: <Key extends keyof DataType>(name: Key) => {
            value: DataType[Key];
            setValue: (newValue: DataType[Key]) => void;
            error: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key];
            setError: (newState: { [Key_1 in keyof DataType]?: ErrorType | undefined; }[Key]) => void;
            touched: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key];
            setTouched: (newState: { [Key_2 in keyof DataType]?: boolean | undefined; }[Key]) => void;
            modified: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key];
            setModified: (newState: { [Key_3 in keyof DataType]?: boolean | undefined; }[Key]) => void;
            setAsTouched: () => void;
            setAsModified: () => void;
            _setValue: (newState: DataType[Key]) => void;
        };
        useData: () => [state: DataType, setState: (newValue: DataType) => void];
        useErrors: () => [state: { [Key in keyof DataType]?: ErrorType | undefined; }, setState: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void];
        useTouched: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
        useModified: () => [state: { [Key in keyof DataType]?: boolean | undefined; }, setState: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void];
        useForm: () => {
            data: DataType;
            setData: (newValue: DataType) => void;
            errors: { [Key in keyof DataType]?: ErrorType | undefined; };
            setErrors: (newValue: { [Key in keyof DataType]?: ErrorType | undefined; }) => void;
            touched: { [Key in keyof DataType]?: boolean | undefined; };
            setTouched: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
            modified: { [Key in keyof DataType]?: boolean | undefined; };
            setModified: (newValue: { [Key in keyof DataType]?: boolean | undefined; }) => void;
        };
        useIsModified: () => [isModified: boolean];
        useIsTouched: () => [isTouched: boolean];
        useHasErrors: () => [hasErrors: boolean];
    }>;
    reset(resetValues?: {
        data?: Partial<DataType>;
        modified?: {
            [Key in keyof DataType]?: boolean;
        };
        touched?: {
            [Key in keyof DataType]?: boolean;
        };
        errors?: {
            [Key in keyof DataType]?: ErrorType;
        };
    }): void;
    setAllAsTouched(): void;
    setAllAsModified(): void;
    getModifiedValues({ defaultFields, }?: {
        defaultFields: (keyof Required<DataType>)[];
    }): Partial<DataType>;
    get hasErrors(): boolean;
    get isModified(): boolean;
    get isTouched(): boolean;
    hydrate(value: {
        data: DataType;
        errors: {
            [Key in keyof DataType]?: ErrorType;
        };
        touched: {
            [Key in keyof DataType]?: boolean;
        };
        modified: {
            [Key in keyof DataType]?: boolean;
        };
    }): {
        update: (record: Hydrated["data"]) => void;
        value: {
            data: DataType;
            errors: { [Key in keyof DataType]?: ErrorType; };
            touched: { [Key in keyof DataType]?: boolean; };
            modified: { [Key in keyof DataType]?: boolean; };
        };
    };
    fullFill(): Promise<any>;
    constructor(initialValues: {
        [Key in keyof Required<DataType>]: DataType[Key];
    }, _config?: ReactStateManagerFormConfig<DataType, ErrorType, Meta>);
}
export declare function form<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>>(initialValues: {
    [Key in keyof Required<DataType>]: DataType[Key];
}, config?: ReactStateManagerFormConfig<DataType, ErrorType, Meta>): ReactStateManagerForm<DataType, ErrorType, Meta>;
export type ReactStateManagerFormConfig<DataType extends Record<string, any>, ErrorType = string[] | undefined | null, Meta = Record<string, any>> = {
    uid: string;
    getValidator?: (fieldName: keyof DataType, form: ReactStateManagerForm<DataType, ErrorType>) => (value: any) => void;
    onReset?: () => void;
    hasError?: (error: ErrorType | undefined) => boolean;
    meta?: Meta;
    errors?: {
        [Key in keyof DataType]?: StateConfig<ErrorType | undefined>;
    };
    touched?: {
        [Key in keyof DataType]?: StateConfig<boolean | undefined>;
    };
    modified?: {
        [Key in keyof DataType]?: StateConfig<boolean | undefined>;
    };
    data?: {
        [Key in keyof DataType]?: StateConfig<DataType[Key]>;
    };
};
type StateConfig<DataType> = Omit<TypeStateManagerConfigs<DataType>, "uid">;
export {};
