import * as Atom from "@effect-atom/atom/Atom"; import type * as Registry from "@effect-atom/atom/Registry"; import { Field, FormAtoms } from "@lucas-barake/effect-form"; import type { FieldState as FieldStateModule, Mode } from "@lucas-barake/effect-form"; import type * as FormBuilder from "@lucas-barake/effect-form/FormBuilder"; import type * as Effect from "effect/Effect"; import * as Option from "effect/Option"; import type * as ParseResult from "effect/ParseResult"; import type * as Schema from "effect/Schema"; import * as React from "react"; export type FieldValue = FieldStateModule.FieldValue; export type FieldState = FieldStateModule.FieldState; export type ArrayFieldOperations = FieldStateModule.ArrayFieldOperations; export interface FieldComponentProps> { readonly field: FieldState; readonly props: P; } export type FieldComponent> = React.FC, P>>; export type ExtractExtraProps = C extends React.FC> ? P : Record; type StructFieldsFromSchema = S extends Schema.Struct ? Fields : S extends { readonly from: infer From; } ? StructFieldsFromSchema : never; export type ArrayItemComponentMap = StructFieldsFromSchema extends Schema.Struct.Fields ? { readonly [K in keyof StructFieldsFromSchema]: StructFieldsFromSchema[K] extends Schema.Schema.Any ? React.FC[K]>, any>> : never; } : React.FC, any>>; export type FieldComponentMap = { readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef ? React.FC, any>> : TFields[K] extends Field.ArrayFieldDef ? ArrayItemComponentMap : never; }; export type FieldRefs = FormAtoms.FieldRefs; export type BuiltForm = FieldComponentMap> = { readonly values: Atom.Atom>>; readonly isDirty: Atom.Atom; readonly hasChangedSinceSubmit: Atom.Atom; readonly lastSubmittedValues: Atom.Atom>>; readonly submitCount: Atom.Atom; readonly validationCount: Atom.Atom; readonly schema: Schema.Schema, Field.EncodedFromFields, R>; readonly fields: FieldRefs; readonly Initialize: React.FC<{ readonly defaultValues: Field.EncodedFromFields; readonly validateOnInit?: boolean; readonly children: React.ReactNode; }>; readonly submit: Atom.AtomResultFn; readonly validate: Atom.AtomResultFn; readonly reset: Atom.Writable; readonly revertToLastSubmit: Atom.Writable; readonly setValues: Atom.Writable>; readonly getFieldAtoms: (field: FormBuilder.FieldRef) => FormAtoms.PublicFieldAtoms; readonly mount: Atom.Atom; readonly KeepAlive: React.FC; } & FieldComponents; type FieldComponents> = { readonly [K in keyof TFields]: TFields[K] extends Field.FieldDef ? React.FC> : TFields[K] extends Field.ArrayFieldDef ? ArrayFieldComponent> : never; }; type ExtractArrayItemExtraProps = StructFieldsFromSchema extends Schema.Struct.Fields ? { readonly [K in keyof StructFieldsFromSchema]: CM extends { readonly [P in K]: infer C; } ? ExtractExtraProps : never; } : CM extends React.FC> ? P : never; type ArrayFieldComponent = React.FC<{ readonly children: (ops: ArrayFieldOperations>) => React.ReactNode; }> & { readonly Item: React.FC<{ readonly index: number; readonly children: React.ReactNode | ((props: { readonly remove: () => void; }) => React.ReactNode); }>; } & (StructFieldsFromSchema extends Schema.Struct.Fields ? { readonly [K in keyof StructFieldsFromSchema]: React.FC>; } : unknown); export declare const make: { = FieldComponentMap>(self: FormBuilder.FormBuilder, options: { readonly runtime?: Atom.AtomRuntime; readonly fields: CM; readonly mode?: SubmitArgs extends void ? Mode.FormMode : Mode.FormModeWithoutAutoSubmit; readonly reactivityKeys?: ReadonlyArray | Readonly>> | undefined; readonly onSubmit: (args: SubmitArgs, ctx: { readonly decoded: Field.DecodedFromFields; readonly encoded: Field.EncodedFromFields; readonly get: Atom.FnContext; }) => A | Effect.Effect; }): BuiltForm; = FieldComponentMap>(self: FormBuilder.FormBuilder, options: { readonly runtime: Atom.AtomRuntime; readonly fields: CM; readonly mode?: SubmitArgs extends void ? Mode.FormMode : Mode.FormModeWithoutAutoSubmit; readonly reactivityKeys?: ReadonlyArray | Readonly>> | undefined; readonly onSubmit: (args: SubmitArgs, ctx: { readonly decoded: Field.DecodedFromFields; readonly encoded: Field.EncodedFromFields; readonly get: Atom.FnContext; }) => A | Effect.Effect; }): BuiltForm; }; export {}; //# sourceMappingURL=FormReact.d.ts.map