import { Validator, ValidationError, FormValidator } from './validation'; export declare type SubmitFn = (values: T, args: A) => void; export declare type ErrorFn = (errors: ValidationError[]) => void; export declare type FormErrors = { [key in (keyof T | keyof E)]?: ValidationError; }; export declare type FormValidators = { [key in keyof E]: FormValidator | FormValidator[]; }; declare type Descriptor = { id?: string; onSubmit?: SubmitFn; onError?: ErrorFn; validate?: FormValidators; validateOnSubmit?: boolean; validateOnFieldsChange?: (keyof T)[]; }; declare type ExternalFieldDescriptor = K | FieldDescriptor; declare type ExternalFieldsDescriptors = { [key in keyof T]: ExternalFieldDescriptor; }; export interface FormDescriptor extends Descriptor { fields: ExternalFieldsDescriptors; errors?: FormErrors; } export declare type FieldsDescriptors = { [key in keyof T]: FieldDescriptor; }; interface InternalDescriptor extends FormDescriptor { fields: FieldsDescriptors; } export interface FieldDescriptor { validateOnBlur?: boolean; validateOnSubmit?: boolean; validateOnChange?: boolean; validate?: Validator | Validator[]; resetErrorOnChange?: boolean; value?: K; error?: ValidationError; isFieldArray?: boolean; onChange?: (input: any) => K; onRender?: (value: K) => any; } export declare enum FormEvent { FIELD_UPDATE = 0, FIELD_ERROR = 1, FIELD_ERRORS = 2, FORM_UPDATE = 3, FORM_ERROR = 4, FORM_SUBMIT = 5 } export declare type UpdateListenerOptions = { ignoreOnRender: boolean; }; export declare type ErrorListenerOptions = { ignoreOnRender: boolean; }; export declare type FormListener = { event: FormEvent; fieldName?: keyof T; listener: (args: any) => void; options: A; }; export declare class Forminator { descriptor: InternalDescriptor; private _externalDescriptor; private _listeners; id: string; constructor(descriptor: FormDescriptor); private initDescriptor; private normalizeFields; private informListeners; private informUpdate; get fields(): [keyof T, FieldDescriptor][]; get fieldValues(): T; get formErrors(): FormErrors; setFieldValue(name: keyof T, value: any): void; setFieldArrayValue(name: keyof T, index: number, value: any): void; setFieldError(fieldName: keyof T, error: ValidationError): void; addFieldToArray(name: keyof T, value?: any): void; removeFieldFromArray(name: keyof T, idx: number): void; setFieldValues(values: Partial, merge?: boolean): void; setFieldValidators(fieldName: keyof T, validate: Validator | Validator[]): void; getFieldValue(fieldName: keyof T): T[keyof T]; submit(args?: A): T; validateField(name: keyof T, field: FieldDescriptor, fields: FieldsDescriptors): ValidationError; validateFields(): void; validateForm(): FormErrors; onFieldUpdate(name: keyof T, listenerFn: (value: any) => void, options?: UpdateListenerOptions): void; onFieldError(name: keyof T, listenerFn: (error: ValidationError) => void, options?: ErrorListenerOptions): void; onFormUpdate(listenerFn: (values: T) => void): void; onFormError(listenerFn: (errors: FormErrors) => void, options?: ErrorListenerOptions): void; onFieldErrors(listenerFn: (errors: ValidationError[]) => void, options?: ErrorListenerOptions): void; reset(): void; } export {};