import type * as Registry from "@effect-atom/atom/Registry"; import type * as Effect from "effect/Effect"; import type * as Option from "effect/Option"; import * as Schema from "effect/Schema"; import type { ArrayFieldDef, DecodedFromFields, EncodedFromFields, FieldDef, FieldsRecord } from "./Field.ts"; export interface SubmittedValues { readonly encoded: EncodedFromFields; readonly decoded: DecodedFromFields; } export declare const FieldTypeId: unique symbol; export type FieldTypeId = typeof FieldTypeId; export interface FieldRef { readonly [FieldTypeId]: FieldTypeId; readonly _S: S; readonly key: string; } export declare const makeFieldRef: (key: string) => FieldRef; export declare const TypeId: unique symbol; export type TypeId = typeof TypeId; export interface FormState { readonly values: EncodedFromFields; readonly initialValues: EncodedFromFields; readonly lastSubmittedValues: Option.Option>; readonly touched: { readonly [K in keyof TFields]: boolean; }; readonly submitCount: number; readonly validationCount: number; readonly dirtyFields: ReadonlySet; } interface SyncRefinement { readonly _tag: "sync"; readonly fn: (values: unknown) => Schema.FilterOutput; } interface AsyncRefinement { readonly _tag: "async"; readonly fn: (values: unknown) => Effect.Effect; } type Refinement = SyncRefinement | AsyncRefinement; export interface FormBuilder { readonly [TypeId]: TypeId; readonly fields: TFields; readonly refinements: ReadonlyArray; readonly _R?: R; addField(this: FormBuilder, field: FieldDef): FormBuilder; }, R | Schema.Schema.Context>; addField(this: FormBuilder, field: ArrayFieldDef): FormBuilder; }, R | Schema.Schema.Context>; addField(this: FormBuilder, key: K, schema: S): FormBuilder; }, R | Schema.Schema.Context>; merge(this: FormBuilder, other: FormBuilder): FormBuilder; refine(this: FormBuilder, predicate: (values: DecodedFromFields) => Schema.FilterOutput): FormBuilder; refineEffect(this: FormBuilder, predicate: (values: DecodedFromFields) => Effect.Effect): FormBuilder>; } export declare const isFormBuilder: (u: unknown) => u is FormBuilder; export declare const empty: FormBuilder<{}, never>; export declare const buildSchema: (self: FormBuilder) => Schema.Schema, EncodedFromFields, R>; export {}; //# sourceMappingURL=FormBuilder.d.ts.map