import type { Ref } from "vue"; import type { XyControlStatus, XyFormRuleConfig, XyFormRules, XyFormValidateMessages, XyFormValidateTrigger, XyNamePath, XySemanticClassNames, XySemanticStyles, XySize } from "../core"; export type XyFormLayout = "horizontal" | "inline" | "vertical"; export type XyFormLabelAlign = "left" | "right"; export type XyFormItemLabelVerticalAlign = "center" | "top"; export type XyFormRequiredMark = boolean | "optional"; export interface XyFormValidateOptions { dirty?: boolean; recursive?: boolean; } export interface XyFormFieldState { dirty: boolean; errors: string[]; touched: boolean; validated: boolean; validating: boolean; } export interface XyFormFieldError { errors: string[]; name: XyNamePath; } export interface XyFormFieldData extends XyFormFieldError { touched: boolean; validating: boolean; value: unknown; } export interface XyFormFieldEntity { clearValidate: () => void; dependencies?: XyNamePath[]; name: XyNamePath; onDependencyChange?: () => void; reset: () => void; state: XyFormFieldState; validate: (trigger?: XyFormValidateTrigger, options?: XyFormValidateOptions) => Promise; } export interface XyFormContext { colon: Ref; disabled: Ref; getFieldValue: (name: XyNamePath) => T | undefined; getRule: (name: XyNamePath) => XyFormRuleConfig | undefined; initialValues: Ref>; labelWrap: Ref; model: Ref>; notifyValidate: (name: XyNamePath, valid: boolean, errors: string[]) => void; notifyFieldChange: (name: XyNamePath) => void; notifyValuesChange: (name: XyNamePath, value: unknown) => void; preserve: Ref; readonly: Ref; requiredMark: Ref; registerField: (field: XyFormFieldEntity) => () => void; setFieldValue: (name: XyNamePath, value: unknown) => void; size: Ref; validateMessages: Ref; validateTrigger: Ref; } export interface XyFormExpose { clearValidate: (names?: XyNamePath | XyNamePath[]) => void; getFieldError: (name: XyNamePath) => string[]; getFieldValue: (name: XyNamePath) => T | undefined; getFieldsError: (names?: XyNamePath | XyNamePath[]) => XyFormFieldError[]; getFieldsValue: () => Record; isFieldTouched: (name: XyNamePath) => boolean; isFieldValidating: (name: XyNamePath) => boolean; isFieldsTouched: (names?: XyNamePath | XyNamePath[], allFields?: boolean) => boolean; resetFields: (names?: XyNamePath | XyNamePath[]) => void; scrollToField: (name: XyNamePath, options?: ScrollIntoViewOptions) => void; setFieldValue: (name: XyNamePath, value: unknown) => void; setFieldsValue: (values: Record) => void; submit: () => Promise; validate: (names?: XyNamePath | XyNamePath[], options?: XyFormValidateOptions) => Promise; validateFields: (names?: XyNamePath | XyNamePath[], options?: XyFormValidateOptions) => Promise>; } export interface XyFormFailedInfo { errorFields: Array<{ errors: string[]; name: XyNamePath; }>; values: Record; } export interface XyFormProps { classNames?: XyFormClassNames; clearOnDestroy?: boolean; colon?: boolean; columns?: number; disabled?: boolean; initialValues?: Record; labelAlign?: XyFormLabelAlign; labelWrap?: boolean; labelWidth?: number | string; layout?: XyFormLayout; model?: Record; name?: string; preserve?: boolean; readonly?: boolean; requiredMark?: XyFormRequiredMark; rules?: XyFormRules; scrollToFirstError?: boolean; size?: XySize; styles?: XyFormStyles; validateMessages?: XyFormValidateMessages; validateTrigger?: XyFormValidateTrigger | XyFormValidateTrigger[]; } export interface XyFormItemProps { classNames?: XyFormItemClassNames; dependencies?: XyNamePath[]; error?: string; extra?: string; helper?: string; hidden?: boolean; initialValue?: unknown; label?: string; labelVerticalAlign?: XyFormItemLabelVerticalAlign; labelWidth?: number | string; messageVariables?: Record; name?: XyNamePath; preserve?: boolean; required?: boolean; rules?: XyFormRuleConfig; span?: number; styles?: XyFormItemStyles; validateStatus?: XyControlStatus | "validating"; validateDebounce?: number; validateFirst?: boolean; validateTrigger?: XyFormValidateTrigger | XyFormValidateTrigger[]; } export interface XyFormListField { fieldKey: number; key: number; name: number; } export interface XyFormListProps { initialValue?: unknown[]; name: XyNamePath; rules?: XyFormRuleConfig; } export interface XyFormListOperations { add: (value?: unknown, index?: number) => void; move: (from: number, to: number) => void; remove: (index: number | number[]) => void; } export type XyFormSemanticDom = "actions" | "root"; export type XyFormItemSemanticDom = "control" | "error" | "helper" | "label" | "required" | "root"; export type XyFormClassNames = XySemanticClassNames; export type XyFormStyles = XySemanticStyles; export type XyFormItemClassNames = XySemanticClassNames; export type XyFormItemStyles = XySemanticStyles;