import type { TemplateResult } from '@miurajs/miura-render'; export type FormPath> = Extract | `${Extract}.${string}`; export type FormErrors> = Partial | string, string>>; export type AsyncValidationMode = 'manual' | 'blur' | 'change'; export interface FormViewOptions, R extends TemplateResult> { idle?: (values: Readonly, form: Form) => R; validating?: (values: Readonly, form: Form) => R; submitting?: (values: Readonly, form: Form) => R; success?: (result: unknown, values: Readonly, form: Form) => R; error?: (error: unknown, values: Readonly, form: Form) => R; } export interface FormField { value: T; set: (value: T) => void; touch: () => void; isTouched: boolean; isDirty: boolean; showError: boolean; error?: string; } export interface FormOptions> { validate?: (values: Readonly) => FormErrors | void; validateAsync?: (values: Readonly) => Promise | void>; validateAsyncOn?: AsyncValidationMode; validateAsyncDebounce?: number; touchOnChange?: boolean; } export interface Form> { readonly values: Readonly; readonly data: Readonly; readonly initialValues: Readonly; readonly errors: Readonly>; readonly visibleErrors: Readonly>; readonly dirty: boolean; readonly valid: boolean; readonly validating: boolean; readonly submitting: boolean; readonly submitError: unknown; readonly submitResult: unknown; readonly submitSucceeded: boolean; readonly touched: ReadonlySet; field | string>(name: K): FormField; get | string>(name: K): any; set | string>(name: K, value: any): void; patch(values: Partial): void; reset(values?: T): void; touch | string>(name: K): void; touchAll(): void; isTouched | string>(name: K): boolean; isDirty | string>(name: K): boolean; shouldShowError | string>(name: K): boolean; validate(): boolean; validateAsync(): Promise; clearSubmitState(): void; setErrors(errors: FormErrors, options?: { touch?: boolean; }): void; clearErrors(options?: { touch?: boolean; }): void; failSubmit(error: unknown, options?: { errors?: FormErrors; touch?: boolean; }): never; view(options: FormViewOptions): R | undefined; submit(handler: (values: Readonly, form: Form) => Promise | R): Promise; handleSubmit(handler: (values: Readonly, form: Form) => Promise | R): (event?: Event) => Promise; } export declare function createForm>(initialValues: T, onChange: () => void, options?: FormOptions): Form; //# sourceMappingURL=form.d.ts.map