@form-atoms/field
v6.2.0
Published
<div align="center"> <img width="180" style="margin: 32px" src="./form-atoms-field.svg"> <h1>@form-atoms/field</h1> </div>
Maintainers
Readme
A zod powered fieldAtoms with pre-configured schemas for type & runtime safety.
npm install @form-atoms/field jotai-effect zodFeatures
- [x] Well-typed fields required & validated by default
- [x] Initialized field values, commonly with
undefinedempty value - [x] Optional fields with schema defaulting to
z.optional() - [x] Conditionally required fields - the required state can depend on other jotai atoms
- [x] Generic Single-choice Components RadioGroup and Select
- [x] Generic Multi-choice Components CheckboxGroup and MultiSelect
Quick Start
import { textField, numberField, stringField, Select } from "@form-atoms/field";
import { fromAtom, useForm, InputField } from "form-atoms";
const personForm = formAtom({
name: textField(),
age: numberField({ schema: (s) => s.min(18) }); // extend the default schema
character: stringField().optional(); // make field optional
});
export const Form = () => {
const { fieldAtoms, submit } = useForm(personForm);
return (
<form onSubmit={submit(console.log)}>
<InputField atom={fieldAtoms.name} label="Your Name" />
<InputField atom={fieldAtoms.age} label="Your age (min 18)" />
<Select
field={fieldAtoms.character}
label="Character"
options={["the good", "the bad", "the ugly"]}
getValue={(option) => option}
getLabel={(option) => option}
/>
</form>
);
};See Docs for more.
Integrations
@form-atoms/field comes pre-wired to popular UI libraries:
| 📦Package | 🎨 Storybook | About | | -------------------------------------------------- | --------------------------------------------------------- | ---------------------------------------------- | | flowbite | Flowbite Fields | Bindigs to Tailwind component library Flowbite |
