import { ConstraintCheck } from './utils'; import { InputState, Option } from './RenderInfo'; export type NestedRecord = { [key: string]: NestedRecordField; }; export type NestedRecordField = T | NestedRecord; export type SubmitField = NestedRecord; export type Primitive = NestedRecord; export interface SingleFieldSettings { options?: Option[]; dateFormat?: string; autocompleteUrl?: string; } export interface FormSelectOption extends Option { name: string; value: string | Record | File; definition?: FormField; } export interface ComboboxResult { value: string; displayValue: string; } export interface SingleField { fieldType: 'single'; name: string; label: string; types: string[]; valueWhenMissing: any; additionalSettings?: SingleFieldSettings; constraints: Array; allowsNull: boolean; emptyStringAllowed: boolean; required: boolean; optional: boolean; } export interface FormGroupField { fieldType: 'group'; name: string; label: string | null; types: string[]; valueWhenMissing: any; fields: Array; constraints: Array; } export interface FieldList { fieldType: 'list'; name: string; label: string | null; types: string[]; unique: boolean; valueWhenMissing: any; subField: FormField; constraints: Array; } export interface FieldMap { fieldType: 'map'; name: string; label: string | null; types: string[]; valueWhenMissing: any; subField: FormField; constraints: Array; } export interface FieldSplit { fieldType: 'split'; name: string; label: string | null; subFields: Array; constraints: Array; } export interface Constraint extends ConstraintCheck { fieldType: 'constraint'; serverSide: boolean; } export type FormField = FormGroupField | SingleField | FieldMap | FieldList | FieldSplit; export declare function handlesValidationForField(input: FormField): input is FormGroupField | FieldMap | FieldList | SingleField; export interface FormDefinition { fields: Array; } export interface FormStateDefinition { form: FormDefinition; csrfToken: string | null; value: NestedRecord; initialValue: NestedRecord; internalState: NestedRecord; validationErrors: NestedRecord; } export interface FormFieldState { form: FormField; value: NestedRecord | SubmitField | null; initialValue: NestedRecord | SubmitField | null; internalState: NestedRecord | Primitive | null; validationErrors: NestedRecord | string | null; } export declare function createFormFieldState(formField: FormField, definition: FormStateDefinition): FormFieldState; export declare function toChildState(formField: FormField, state: FormFieldState): FormFieldState; export declare function hasInputOptionValue(state: InputState, value: any): boolean; export declare function changeForm(formField: FormField, state: FormFieldState): FormFieldState; export declare function toFormField(list: NodeListOf): Promise; export declare function getFormConstraints(el: HTMLElement): Promise>; export interface IndividualConstraintResult { message: string; valid: boolean; serverSide: boolean; } export interface ValidationResult { valid: boolean; messages: Array; } export declare function isValid(value: any, constraint: Constraint): boolean; export declare function validate(value: any, constraints: Array): ValidationResult;