import type { InjectionKey } from 'vue';
import type { RuleItem, ValidateError, ValidateFieldsError } from 'async-validator';
export interface FormItemProps {
    label?: string;
    prop?: string;
}
export interface FormItemRule extends RuleItem {
    trigger?: string;
}
export type FormRules = Record<string, FormItemRule[]>;
export interface FormProps {
    model: Record<string, any>;
    rules: FormRules;
}
export interface FormContext extends FormProps {
    addField: (field: FormItemContext) => void;
    removeField: (field: FormItemContext) => void;
}
export interface FormValidateFailure {
    errors: ValidateError[] | null;
    fields: ValidateFieldsError;
}
export interface ValidateStatusProp {
    state: 'init' | 'success' | 'error' | 'loading';
    errorMsg: string;
    loading: boolean;
}
export interface FormItemContext {
    prop: string;
    validate: (trigger?: string) => Promise<any>;
    resetField(): void;
    clearValidate(): void;
}
export declare const formContextKey: InjectionKey<FormContext>;
export declare const formItemContextKey: InjectionKey<FormItemContext>;
export interface FormInstance {
    validate: () => Promise<any>;
    resetFields: (props?: string[]) => void;
    clearValidate: (props?: string[]) => void;
}
export interface FormItemInstance {
    validateStatus: ValidateStatusProp;
    validate: (trigger?: string) => Promise<any>;
    resetField(): void;
    clearValidate(): void;
}
