import { Optional } from '../utils/types'; export type FormValue = string | boolean | number | Array | FormData; export declare const validationModes: readonly ["onChange", "onBlur", "onSubmit"]; export type ValidationMode = typeof validationModes[number]; export type FieldType = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | NodeListOf; export interface ValidationResult { error: boolean; message?: string; } export interface FieldMeta { field: FT; initializer: () => void; validators: Array>; errorSetter: (errors: Array>) => void; } export interface FormValidator { name: keyof typeof validators; validator: (element: FT) => ValidationResult | Promise; } export declare const validateFormField: (field: FT, validators: Array>) => Promise>>; export declare const isGroupBlurEvent: (event: FocusEvent) => { groupBlur: boolean; }; export declare const getCheckBoxGroupMeta: (checkboxGroup: NodeListOf) => { isCheckBoxGroup: boolean; selectedBoxes: Array; }; export declare const getMultiSelectMeta: (element: HTMLSelectElement) => { isMultiSelect: boolean; selectedOptions: Array; }; declare const min: (params: { value: number; message?: string; }) => FormValidator; declare const max: (params: { value: number; message?: string; }) => FormValidator; declare const email: (params?: { message?: string; }) => FormValidator; declare const pattern: (params: { pattern: string | RegExp; message?: string; }) => FormValidator; declare const required: (params?: { message?: string; }) => FormValidator; declare const minLength: (params: { length: number; message?: string; }) => FormValidator; declare const maxLength: (params: { length: number; message?: string; }) => FormValidator; declare const define: (callback: FormValidator["validator"]) => FormValidator; /** * Range check for date fields whose value is a `YYYY-MM-DD` string (e.g. * DateField's hidden submission input). Compares by calendar day — time and * timezone are ignored — with both bounds inclusive. An empty or unparseable * value passes (pair with `required` to forbid empty). `min` / `max` are each * optional, so either side can be left open; an invalid `Date` bound is treated * as absent. A misconfigured range (`min` after `max`) disables the rule rather * than rejecting every value — mirroring DateField's own `minDate`/`maxDate` * guard. */ declare const dateRange: (params: { min?: Date; max?: Date; message?: string; }) => FormValidator; export declare const validators: { min: typeof min; max: typeof max; email: typeof email; define: typeof define; pattern: typeof pattern; required: typeof required; minLength: typeof minLength; maxLength: typeof maxLength; dateRange: typeof dateRange; }; export {};