import type { ZodTypeAny } from "zod"; import { FormInstance } from "../form/types"; type HintFunction = | ZodTypeAny | ((val: T, form: FormInstance) => Promise); type ValidationFunction = | ZodTypeAny | ((val: T, form: FormInstance) => Promise); type TransformFunction = | ZodTypeAny | ((val: T, form: FormInstance) => any); export interface FieldInstanceBaseProps { name: string; onChangeValidate?: ValidationFunction; onSubmitValidate?: ValidationFunction; onSubmitTransform?: TransformFunction; onChangeHint?: HintFunction; onSubmitHint?: HintFunction; listenTo?: string[]; } export interface FieldInstanceProps extends FieldInstanceBaseProps { onBlurValidate?: ValidationFunction; onBlurHint?: HintFunction; onMountValidate?: ValidationFunction; onMountHint?: HintFunction; initialValue?: T; resetWithValue?: T; memoChild?: any[]; preserveValue?: boolean; } export interface FieldInstance { value: T; setValue: (val: T | ((prevState: T) => T)) => void; onBlur: () => void; props: FieldInstanceProps; _normalizedDotName: string; _setIsValidating: (val: boolean) => void; setErrors: (error: string[]) => void; errors: string[]; setHints: (hint: string[]) => void; hints: string[]; isValid: boolean; setIsTouched: (val: boolean) => void; isTouched: boolean; setIsDirty: (val: boolean) => void; isDirty: boolean; isValidating: boolean; isSubmitted: boolean; validate: ( validationType: "onChangeValidate" | "onBlurValidate" | "onMountValidate" ) => void; checkHint: (hintType: "onChangeHint" | "onBlurHint" | "onMountHint") => void; }