import type { Schema } from "effect" import type * as FormTree from "./FormTree.ts" export interface FormField { readonly schema: S } export interface GenericFormField extends FormField { readonly _tag: "GenericFormField" readonly value: S["Type"] } export interface TupleFormField< S extends Schema.TupleType, Elements extends Schema.TupleType.Elements, Rest extends Schema.TupleType.Rest, > extends FormField { readonly _tag: "TupleFormField" readonly elements: [...{ readonly [K in keyof Elements]: FormTree.FormTree }] } export interface ArrayFormField< S extends Schema.Array$, Value extends Schema.Schema.Any, > extends FormField { readonly _tag: "ArrayFormField" readonly elements: readonly FormTree.FormTree[] } export interface StructFormField< S extends Schema.Struct, Fields extends Schema.Struct.Fields, > extends FormField { readonly _tag: "StructFormField" readonly fields: { readonly [K in keyof Fields]: FormTree.FormTree } }