import { IUseCrudActions, IUseCrudProps, IUseCrudRet, IUseCrudSaveFn, IUseCrudSetDataFn, IUseCrudSetFn, IUseCrudState } from './useCrud';
export declare type IUseFieldSchema<T extends object, P extends {}> = {
    [K in keyof T]?: IUseFieldValueIn<T[K]> & P;
};
export interface IUseFieldState<T extends object, E> extends Omit<IUseCrudState<T, E>, 'data'> {
    data: T;
}
export declare type IUseFieldValueIn<V> = {
    defaultValue: V;
};
export interface IUseFieldValueRet<V, K> extends IUseFieldValueIn<V> {
    id: string;
    edited: boolean;
    value: V;
    meta?: any;
    key: K;
}
export declare type IUseFieldRet<T extends object, E, P extends {}, RET = T> = {
    state: IUseFieldState<T, E> & {
        schema: IUseFieldSchema<T, P>;
        idKey: keyof T;
    };
    getField: <K extends keyof T>(key: K) => IUseFieldValueRet<T[K], K> & P;
    setField: IUseCrudSetFn<T>;
    save: IUseCrudSaveFn<RET>;
    setData: IUseCrudSetDataFn<T>;
    actions: IUseCrudActions;
    setState: IUseCrudRet<T, E, RET>['setState'];
};
export declare function useFields<T extends object, E, P extends {}, RET = T>(path: string, data: Partial<T>, schema: IUseFieldSchema<T, P>, props: IUseCrudProps<T>): IUseFieldRet<T, E, P, RET>;
