/** biome-ignore-all lint/correctness/useHookAtTopLevel: effect-fc HOC */ import { Callout, Checkbox, Flex, TextField } from "@radix-ui/themes" import { Array, type Equivalence, Option, ParseResult, type Schema, Struct } from "effect" import { Component } from "effect-fc" import { useInput, useOptionalInput } from "effect-fc/Hooks" import * as React from "react" export type TextFieldInputProps = ( & Omit, "schema" | "equivalence"> & Omit ) export type TextFieldOptionalInputProps = ( & Omit, "schema" | "equivalence"> & Omit ) export const TextFieldInput = (options: { readonly optional?: O readonly schema: Schema.Schema readonly equivalence?: Equivalence.Equivalence }) => Component.makeUntraced("TextFieldInput")(function*(props: O extends true ? TextFieldOptionalInputProps : TextFieldInputProps ) { const input: ( | { readonly optional: true } & useOptionalInput.Result | { readonly optional: false } & useInput.Result ) = options.optional ? { optional: true, ...yield* useOptionalInput({ ...options, ...props as TextFieldOptionalInputProps }), } : { optional: false, ...yield* useInput({ ...options, ...props as TextFieldInputProps }), } const issue = React.useMemo(() => input.error.pipe( Option.map(ParseResult.ArrayFormatter.formatErrorSync), Option.flatMap(Array.head), ), [input.error]) return ( {input.optional && input.setEnabled(checked !== "indeterminate" && checked)} /> } input.setValue(e.target.value)} disabled={input.optional ? !input.enabled : undefined} {...Struct.omit(props as TextFieldOptionalInputProps | TextFieldInputProps, "ref", "defaultValue")} /> {(!(input.optional && !input.enabled) && Option.isSome(issue)) && {issue.value.message} } ) })