Installation
pnpm add @viliha/vui-uiThen import from @viliha/vui-ui/form.
Usage
A thin wrapper over React Hook Form. FormField wires each control to the form; FormMessage renders the field error.
form-demo.tsx
import { useForm } from "react-hook-form";
import {
Form, FormField, FormItem, FormLabel, FormControl,
FormDescription, FormMessage,
} from "@viliha/vui-ui/form";
import { Input } from "@viliha/vui-ui/input";
import { Button } from "@viliha/vui-ui/button";
export function Example() {
const form = useForm({ defaultValues: { username: "" } });
return (
<Form {...form}>
<form onSubmit={form.handleSubmit(console.log)}>
<FormField
control={form.control}
name="username"
rules={{ required: "Username is required" }}
render={({ field }) => (
<FormItem>
<FormLabel>Username</FormLabel>
<FormControl>
<Input placeholder="viliha" {...field} />
</FormControl>
<FormDescription>Your public display name.</FormDescription>
<FormMessage />
</FormItem>
)}
/>
<Button type="submit">Submit</Button>
</form>
</Form>
);
}Validation
Use RHF
rules (shown here) or plug in a schema resolver like zod via @hookform/resolvers; both are consumer-side; the package only depends on react-hook-form.