import type { RuleItem, ValidateError, ValidateOption } from 'async-validator'; import type { InjectionKey, SetupContext } from 'vue'; import type { FormItemProps, FormProps } from '@/components/'; export type trigger = 'blur' | 'change'; export type Validate = (trigger?: trigger, options?: ValidateOption) => Promise; export type Arrayable = T | T[]; export interface FormItemRule extends RuleItem { trigger?: trigger; } export type FormItemRules = Arrayable; export type FormRules = Record; export type FormContext = FormProps & { emit: SetupContext<['validate']>['emit']; validate: () => void; clearValidate: () => void; addField: (field: FormItemContext) => void; removeField: (field: FormItemContext) => void; }; export type FormItemContext = FormItemProps & { validationErrors: undefined | ValidateError[]; validate: Validate; clearValidate: () => void; }; export const formContextKey: InjectionKey = Symbol('formContextKey'); export const formItemContextKey: InjectionKey = Symbol('formItemContextKey');