import type { InjectionKey } from 'vue' import type { ValidateFieldsError } from 'async-validator' import type { ComponentSize } from '@element-plus/constants' export interface ElFormContext { registerLabelWidth(width: number, oldWidth: number): void deregisterLabelWidth(width: number): void autoLabelWidth: string | undefined emit: (evt: string, ...args: any[]) => void addField: (field: ElFormItemContext) => void removeField: (field: ElFormItemContext) => void resetFields: () => void clearValidate: (props: string | string[]) => void validateField: (props: string | string[], cb: ValidateFieldCallback) => void labelSuffix: string inline?: boolean inlineMessage?: boolean model?: Record size?: ComponentSize showMessage?: boolean labelPosition?: string labelWidth?: string | number rules?: Record statusIcon?: boolean hideRequiredAsterisk?: boolean disabled?: boolean } export interface ValidateFieldCallback { (isValid?: string, invalidFields?: ValidateFieldsError): void } export interface ElFormItemContext { prop?: string size?: ComponentSize validateState: string $el: HTMLDivElement validate(trigger: string, callback?: ValidateFieldCallback): void updateComputedLabelWidth(width: number): void evaluateValidationEnabled(): void resetField(): void clearValidate(): void } export const elFormKey: InjectionKey = Symbol('elForm') export const elFormItemKey: InjectionKey = Symbol('elFormItem')