import { ComponentSize } from "../../../constants/size.js"; import { Arrayable, FieldPath } from "../../../utils/typescript.js"; import { useFormLabelWidth } from "./utils.js"; import { FormItemProp, FormItemProps, FormItemValidateState } from "./form-item.js"; import { FormEmits, FormProps } from "./form.js"; import { MaybeRef, SetupContext, UnwrapRef } from "vue"; import { RuleItem, ValidateError, ValidateFieldsError } from "async-validator"; //#region ../../packages/components/form/src/types.d.ts type FormLabelWidthContext = ReturnType; interface FormItemRule extends RuleItem { trigger?: Arrayable; } type FormRuleValue = V extends any[] ? Arrayable : V extends Record ? Arrayable | { [K in keyof V]?: FormRuleValue } : Arrayable; type FormRules | string> = string> = UnwrapRef extends Record ? { [P in FieldPath>]?: P extends keyof UnwrapRef ? FormRuleValue[P]> : Arrayable } : Partial | Record>>; type FormValidationResult = Promise; type FormValidateCallback = (isValid: boolean, invalidFields?: ValidateFieldsError) => Promise | void; interface FormValidateFailure { errors: ValidateError[] | null; fields: ValidateFieldsError; } type FormContext = FormProps & UnwrapRef & { emit: SetupContext['emit']; getField: (prop: FormItemProp) => FormItemContext | undefined; addField: (field: FormItemContext) => void; removeField: (field: FormItemContext, oldPropString?: string) => void; resetFields: (props?: Arrayable) => void; setInitialValues: (initModel: Record) => void; clearValidate: (props?: Arrayable) => void; validateField: (props?: Arrayable, callback?: FormValidateCallback) => FormValidationResult; }; interface FormItemContext extends FormItemProps { $el: HTMLDivElement | undefined; size: ComponentSize; validateMessage: string; validateState: FormItemValidateState; isGroup: boolean; labelId: string; inputIds: string[]; hasLabel: boolean; fieldValue: any; propString: string; addInputId: (id: string) => void; removeInputId: (id: string) => void; validate: (trigger: string, callback?: FormValidateCallback) => FormValidationResult; resetField(): void; clearValidate(): void; setInitialValue: (value: any) => void; getInitialValue: () => any; } //#endregion export { FormContext, FormItemContext, FormItemRule, FormLabelWidthContext, FormRules, FormValidateCallback, FormValidateFailure, FormValidationResult };