Form

A form wrapper that provides validation, error handling, and accessible form controls. Built to work with React Hook Form and Zod for schema-based validation.

Preview

Usage

tsx
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import * as z from "zod";
import {
  Form,
  FormField,
  FormItem,
  FormLabel,
  FormControl,
  FormMessage,
} from "zostel-ui";
import { Input } from "zostel-ui";
import { Button } from "zostel-ui";

const schema = z.object({
  name: z.string().min(1, "Name is required"),
  email: z.string().email("Invalid email"),
});

function BookingForm() {
  const form = useForm({
    resolver: zodResolver(schema),
  });

  return (
    <Form {...form}>
      <form onSubmit={form.handleSubmit(onSubmit)}>
        <FormField
          control={form.control}
          name="name"
          render={({ field }) => (
            <FormItem>
              <FormLabel>Name</FormLabel>
              <FormControl>
                <Input {...field} />
              </FormControl>
              <FormMessage />
            </FormItem>
          )}
        />
        <Button type="submit">Submit</Button>
      </form>
    </Form>
  );
}

Props

form
Type: UseFormReturn
Default:

The form instance from react-hook-form useForm().

children
Type: ReactNode
Default:

Form content including FormField components.

Sub-components

FormField
Type: component
Default:

Connects a form field to react-hook-form with control and name props.

FormItem
Type: component
Default:

Wraps a form field with consistent spacing.

FormLabel
Type: component
Default:

An accessible label connected to the form field.

FormControl
Type: component
Default:

Wraps the input control with aria attributes.

FormDescription
Type: component
Default:

Helper text displayed below the input.

FormMessage
Type: component
Default:

Displays validation error messages.