import { DependencyList, FocusEventHandler, ReactElement, ReactNode } from "react"; import type { Atom } from "../atom/index.js"; import type { EnsoUtils as Utils } from "../utils.ts"; declare const hintSymbol: unique symbol; export declare class Field> = Atom.Parent.Default> extends Atom<"field", "exact", Atom.Def, Atom.Qualifier.Internalize, Parent> implements Utils.StaticImplements, Atom.Static.Subclass<"field">>, Field.Exact { static create> = Atom.Parent.Default>(value: Value, parent?: Atom.Parent.Ref<"field", Qualifier, Parent>): Atom.Envelop<"field", "exact", Atom.Def, Qualifier, Parent>; static base>(field: Envelop): Atom.Base.Result<"field", Envelop>; static proxy>(field: Field.Envelop, intoMapper: Atom.Proxy.Into.Mapper, fromMapper: Atom.Proxy.From.Mapper): Atom.Proxy.Envelop<"field", Variant, ValueDef, ComputedValue, Qualifier, Parent>; static use(initialValue: Value, deps: DependencyList): Field.Exact; static useEnsure | Utils.Falsy, MappedType extends Atom.Envelop<"field", any, any> | Utils.Falsy = undefined>(field: FieldType, map?: Atom.Static.Ensure.Mapper<"field", FieldType, MappedType>): Atom.Static.Ensure.Result<"field", FieldType, MappedType>; static Component(props: Field.Component.Props): ReactElement; [hintSymbol]: true; get dirty(): boolean; useDirty: Field.Dirty.Use.Prop>; commit: Field.Commit.Prop>; reset: Field.Reset.Prop>; readonly initial: Atom.Value.Prop>; control(props?: Field.Control.Props): Field.Control.Registration; ref(element: Element | null): void; get errors(): Field.Error[]; useErrors: Field.Errors.Use.Prop>; get valid(): boolean; useValid: Field.Valid.Use.Prop>; readonly validate: Field.Validate.Prop, Atom.Qualifier.Internalize>; addError: Field.AddError.Prop; clearErrors(): void; } export declare namespace Field { type Envelop> = Variant extends "exact" ? Exact.Internal : Variant extends "optional" ? Optional.Internal : Variant extends "base" ? Base.Internal : Variant extends "immutable" ? Immutable.Internal : never; type Prop = "field"; interface Exact> = Atom.Parent.Default> extends Exact.Internal, Atom.Qualifier.Internalize, Parent> { } namespace Exact { interface Internal = Atom.Parent.Default> extends Ish.Value.Write, Atom.Exact<"field", "exact", ValueDef, Qualifier, Parent>, Immutable.Interface<"exact", ValueDef, Qualifier, Parent> { } type Decomposed> = Atom.Parent.Default> = Atom.Decompose.Result<"field", "exact", Atom.Def, Atom.Qualifier.Internalize, Parent>; type DecomposedVariant> = Atom.Parent.Default> = Decomposed & { value: Variant; }; type DecomposedNullish> = Atom.Parent.Default> = Atom.DecomposeNullish.Result<"field", "exact", Atom.Def, Atom.Qualifier.Internalize, Parent>; type Discriminated>, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Atom.Discriminate.Result<"field", "exact", Atom.Def, Discriminator, Atom.Qualifier.Internalize, Parent>; type DiscriminatedVariant>, Variant extends Discriminator extends keyof Value ? Value[Discriminator] : never, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Discriminated & { discriminator: Variant; }; } interface Base> = Atom.Parent.Default> extends Base.Internal, Atom.Qualifier.Internalize, Parent> { } namespace Base { interface Internal = Atom.Parent.Default> extends Base.Interface<"base", ValueDef, Qualifier, Parent> { } interface Interface = Atom.Parent.Default> extends Immutable.Interface { } type Decomposed> = Atom.Parent.Default> = Atom.Decompose.Result<"field", "base", Atom.Def, Atom.Qualifier.Internalize, Parent>; type DecomposedVariant> = Atom.Parent.Default> = Decomposed & { value: Variant; }; type DecomposedNullish> = Atom.Parent.Default> = Atom.DecomposeNullish.Result<"field", "base", Atom.Def, Atom.Qualifier.Internalize, Parent>; type Discriminated>, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Atom.Discriminate.Result<"field", "base", Atom.Def, Discriminator, Atom.Qualifier.Internalize, Parent>; type DiscriminatedVariant>, Variant extends Discriminator extends keyof Value ? Value[Discriminator] : never, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Discriminated & { discriminator: Variant; }; } interface Optional> = Atom.Parent.Default> extends Optional.Internal, Atom.Qualifier.Internalize, Parent> { } namespace Optional { interface Internal = Atom.Parent.Default> extends Optional.Interface<"optional", ValueDef, Qualifier, Parent> { } interface Interface = Atom.Parent.Default> extends Immutable.Interface { } type Decomposed> = Atom.Parent.Default> = Atom.Decompose.Result<"field", "optional", Atom.Def, Atom.Qualifier.Internalize, Parent>; type DecomposedVariant> = Atom.Parent.Default> = Decomposed & { value: Variant; }; type DecomposedNullish> = Atom.Parent.Default> = Atom.DecomposeNullish.Result<"field", "optional", Atom.Def, Atom.Qualifier.Internalize, Parent>; type Discriminated>, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Atom.Discriminate.Result<"field", "optional", Atom.Def, Discriminator, Atom.Qualifier.Internalize, Parent>; type DiscriminatedVariant>, Variant extends Discriminator extends keyof Value ? Value[Discriminator] : never, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Discriminated & { discriminator: Variant; }; } interface Immutable> = Atom.Parent.Default> extends Immutable.Internal, Atom.Qualifier.Internalize, Parent> { } namespace Immutable { interface Internal = Atom.Parent.Default> extends Immutable.Interface<"immutable", ValueDef, Qualifier, Parent> { } interface Interface = Atom.Parent.Default> extends Ish.Value.Read, Ish.Validation, Atom.Immutable<"field", Variant, ValueDef, Qualifier, Parent> { [hintSymbol]: true; control(props?: Field.Control.Props): Field.Control.Registration; ref(element: Element | null): void; readonly validate: Field.Validate.Prop; } type Decomposed> = Atom.Parent.Default> = Atom.Decompose.Result<"field", "immutable", Atom.Def, Atom.Qualifier.Internalize, Parent>; type DecomposedVariant> = Atom.Parent.Default> = Decomposed & { value: Variant; }; type DecomposedNullish> = Atom.Parent.Default> = Atom.DecomposeNullish.Result<"field", "immutable", Atom.Def, Atom.Qualifier.Internalize, Parent>; type Discriminated>, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Atom.Discriminate.Result<"field", "immutable", Atom.Def, Discriminator, Atom.Qualifier.Internalize, Parent>; type DiscriminatedVariant>, Variant extends Discriminator extends keyof Value ? Value[Discriminator] : never, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Discriminated & { discriminator: Variant; }; } type Shared> = Atom.Parent.Default> = Shared.Exact; namespace Shared { type Def = Atom.Shared.Def; type Proxy = Atom.Proxy.Qualifier>; type Exact> = Atom.Parent.Default> = Field.Exact.Internal, Atom.Qualifier.Internalize, Parent>; type Base> = Atom.Parent.Default> = Field.Base.Internal, Atom.Qualifier.Internalize, Parent>; type Immutable> = Atom.Parent.Default> = Field.Immutable.Internal, Atom.Qualifier.Internalize, Parent>; } type Ref> = Atom.Parent.Default> = Field.Immutable>, Parent>; namespace Ref { type Optional> = Atom.Parent.Default> = Field.Optional>, Parent>; } namespace Ish { namespace Value { interface Read { readonly initial: Atom.Value.Prop; dirty: boolean; useDirty: Dirty.Use.Prop; } interface Write { commit: Commit.Prop; reset: Reset.Prop; } } interface Validation { errors: Field.Error[]; useErrors: Field.Errors.Use.Prop; valid: boolean; useValid: Field.Valid.Use.Prop; addError: Field.AddError.Prop; clearErrors(): void; } } type Def = Atom.Def; namespace Value { namespace Use { type IncludeMeta = undefined extends Props ? false : Props extends Use.Props ? Props["meta"] extends true ? true : Props["meta"] extends false ? false : Props["valid"] extends true ? true : Props["dirty"] extends true ? true : false : false; interface Props extends Meta.Props { meta?: boolean | undefined; } } } namespace Dirty { namespace Use { type Prop = Atom.Qualifier.Ref.DisableFor; interface Fn { (enable?: Enable): Atom.Hooks.Result; } } } namespace Commit { type Prop = Atom.Qualifier.Ref.DisableFor; interface Fn { (): void; } } namespace Reset { type Prop = Atom.Qualifier.Ref.DisableFor; interface Fn { (): void; } } type Parent = Atom.Parent.Interface; type Unwatch = Atom.Unwatch; type Decomposed> = Atom.Parent.Default> = Atom.Decompose.Result<"field", "exact", Atom.Def, Atom.Qualifier.Internalize, Parent>; type DecomposedVariant> = Atom.Parent.Default> = Decomposed & { value: Variant; }; type DecomposedNullish> = Atom.Parent.Default> = Atom.DecomposeNullish.Result<"field", "exact", Atom.Def, Atom.Qualifier.Internalize, Parent>; type Discriminated>, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Atom.Discriminate.Result<"field", "exact", Atom.Def, Discriminator, Atom.Qualifier.Internalize, Parent>; type DiscriminatedVariant>, Variant extends Discriminator extends keyof Value ? Value[Discriminator] : never, Qualifier extends Atom.Qualifier.External.Constraint = Atom.Qualifier.External.Default, Parent extends Atom.Parent.Constraint> = Atom.Parent.Default> = Discriminated & { discriminator: Variant; }; type Proxy = Atom.Proxy.Qualifier>; type Meta = Props extends Meta.Props ? { valid: Meta.Enable; errors: Meta.Enable; dirty: Meta.Enable; } : { valid: boolean; errors: Error[]; dirty: boolean; }; namespace Meta { interface Props { valid?: boolean | undefined; errors?: boolean | undefined; dirty?: boolean | undefined; } type Enable = Enable extends true ? Value : Enable extends false ? undefined : Enable extends boolean ? Value | undefined : Enable extends undefined ? undefined : never; } namespace Control { interface Props { ref?: React.RefCallback | React.RefObject | undefined; onBlur?: FocusEventHandler | undefined; } interface Registration { name: string; ref: React.RefCallback; onBlur: FocusEventHandler; } } namespace Component { type Props = { field: Field; render: Render; meta?: MetaEnable; dirty?: DirtyEnable; errors?: ErrorsEnable; valid?: ValidEnable; }; type Render = (input: Input, meta: Meta) => ReactNode; } type Input = { name: string; value: Value; onChange: Input.OnChange; onBlur: FocusEventHandler; }; namespace Input { type OnChange = (value: Value) => void; } interface Error { type?: string | undefined; message: string; } namespace Error { type Type = Error | string; } namespace Valid { namespace Use { type Prop = Atom.Qualifier.Ref.DisableFor; interface Fn { (enable?: Enable): Atom.Hooks.Result; } } } interface Validator { (field: Field.Immutable): Promise | void; } namespace Validate { type Prop = Atom.Qualifier.Ref.DisableFor>; interface Fn { (validator: Field.Validator): Promise; } } namespace Errors { namespace Use { type Prop = Atom.Qualifier.Ref.DisableFor; interface Fn { (enable?: Enable): Atom.Hooks.Result; } } } namespace AddError { type Prop = Fn; interface Fn { (error: Error.Type): void; } } } export {}; //# sourceMappingURL=definition.d.ts.map