import type { InjectionKey } from 'vue' import type { Emitter } from 'mitt' import type { FieldErrorList, } from 'async-validator' export interface PsFormContext { registerLabelWidth(width: number, oldWidth: number): void deregisterLabelWidth(width: number): void autoLabelWidth: string | undefined formMitt: Emitter emit: (evt: string, ...args: any[]) => void labelSuffix: string inline?: boolean model?: Record size?: string showMessage?: boolean labelPosition?: string labelWidth?: string rules?: Record statusIcon?: boolean hideRequiredAsterisk?: boolean disabled?: boolean } export interface ValidateFieldCallback { (message?: string, invalidFields?: FieldErrorList): void } export interface PsFormItemContext { prop?: string formItemMitt: Emitter size: ComponentSize validateState: string validate(trigger?: string, callback?: ValidateFieldCallback): void updateComputedLabelWidth(width: number): void addValidateEvents(): void removeValidateEvents(): void resetField(): void clearValidate(): void } // TODO: change it to symbol export const psFormKey: InjectionKey = 'psForm' as any export const psFormItemKey: InjectionKey = 'psFormItem' as any export const psFormEvents = { addField: 'ps.form.addField', removeField: 'ps.form.removeField', } as const