Validation patterns + async submit.
Form wrapper that handles async submit + inline error display + disable-while-pending. Use with Label + Input + Button to assemble any small form quickly.
import { Form } from "@/components/ui/form";
<Form onSubmit={async (data) => save(data)}>
<Label htmlFor="name" required>Name</Label>
<Input id="name" name="name" />
<Button type="submit">Save</Button>
</Form>components/ui/ folder. You own the code.