import { default as AUseForm, validateOptions } from 'ant-design-vue/es/form/useForm';
import { NamePath, RuleError, ValidateErrorEntity } from 'ant-design-vue/es/form/interface';
import { FormContext } from '../constants';
import { ComponentPublicInstance, ComputedRef } from 'vue';
import { MaybeVRef } from '@yanzhen-libs/utils-vue';
type Props = Record<string, any>;
type AForm = ReturnType<typeof AUseForm>;
export interface AntUseForm extends Pick<AForm, 'modelRef' | 'rulesRef' | 'initialModel' | 'validateInfos'> {
    validate: <T = any>(names?: NamePath, option?: validateOptions) => Promise<T>;
    clearValidate: (names?: NamePath) => void;
    resetFields: AForm['resetFields'];
    /** This is an internal usage. Do not use in your prod */
    validateField: AForm['validateField'];
    mergeValidateInfo: AForm['mergeValidateInfo'];
}
export type FormContextMap = Map<object, Partial<AntUseForm>>;
type AntOptions = NonNullable<Parameters<typeof AUseForm>[2]>;
declare function createReactiveMap<K extends object, V extends AntUseForm>(entries?: [K, V][]): {
    set: (key: K, value: V) => {
        key: import('vue').UnwrapRef<K>;
        value: import('vue').UnwrapRef<V>;
    };
    get: (key: K) => import('vue').UnwrapRef<V>;
    has: (key: K) => boolean;
    delete: (key: K) => void;
    values(): import('vue').UnwrapRef<V>[];
    keys(): import('vue').UnwrapRef<K>[];
} & {
    values: V[];
    keys: K[];
    length: number;
    '0': any;
};
export type ReactiveMap<K extends object, V extends AntUseForm> = ReturnType<typeof createReactiveMap<K, V>>;
export type OnValidate = (source?: any, ...args: [...Parameters<NonNullable<AntOptions['onValidate']>>]) => void;
type OnValidateArgs = Parameters<OnValidate>;
export type OnFieldChange = (value: any, name: OnValidateArgs[1], source?: any, errors?: OnValidateArgs[3]) => void;
type FormInstance = ComponentPublicInstance | Element;
interface Options extends Omit<AntOptions, 'onValidate'> {
    formRef?: MaybeVRef<FormInstance | null>;
    onValidateResult?: (results: PromiseSettledResult<(RuleError | ValidateErrorEntity)[]>[]) => void;
    onValidate?: OnValidate;
    onFieldChange?: OnFieldChange;
}
export declare function useProvideForm(modelRef?: MaybeVRef<Props | null>, rulesRef?: MaybeVRef<Props | null>, options?: Options): {
    proxy: Pick<AntUseForm, "validate" | "resetFields" | "validateField" | "clearValidate">;
    scrollToField: (name: NamePath, options?: {}) => void;
    validate: <T = any>(names?: NamePath, option?: validateOptions) => Promise<T>;
    clearValidate: (names?: NamePath) => void;
    resetFields: AForm["resetFields"];
    /** This is an internal usage. Do not use in your prod */
    validateField: AForm["validateField"];
    mergeValidateInfo: AForm["mergeValidateInfo"];
    modelRef: import('ant-design-vue/es/form/useForm').Props | import('vue').Ref<import('ant-design-vue/es/form/useForm').Props>;
    rulesRef: import('ant-design-vue/es/form/useForm').Props | import('vue').Ref<import('ant-design-vue/es/form/useForm').Props>;
    initialModel: import('ant-design-vue/es/form/useForm').Props;
    validateInfos: import('ant-design-vue/es/form/useForm').validateInfos;
};
export declare function useInjectForm<K extends keyof FormContext>(key: K): ComputedRef<FormContext[K]>;
export declare function useInjectForm<K extends keyof FormContext>(key?: K | null): FormContext;
export {};
