@aelig/form-builder

Form Builder

Add

pnpm dlx shadcn@latest add @aelig/form-builder

Builds React Hook Form forms from typed field metadata, including lists, select, radio, checkbox, and dropzone fields.

Preview

Usage

"use client"

import { useForm } from "react-hook-form"
import {
  CancelButton,
  FormBuilder,
  SubmitButton,
} from "@/components/ui/form-builder"

type FormValues = {
  name: string
  email: string
  role: string
  active: boolean
}

const formBuilder = [
  { fieldType: "input", name: "name", label: "Name", required: true },
  { fieldType: "input", name: "email", label: "Email", type: "email" },
  {
    fieldType: "select",
    name: "role",
    label: "Role",
    placeholder: "Select a role",
    options: [
      { value: "admin", label: "Admin" },
      { value: "member", label: "Member" },
    ],
  },
  { fieldType: "checkbox", name: "active", label: "Active" },
]

export function UserForm() {
  const form = useForm<FormValues>({
    defaultValues: { name: "", email: "", role: "", active: true },
    mode: "onChange",
  })

  return (
    <FormBuilder form={form} formBuilder={formBuilder}>
      <CancelButton>Cancel</CancelButton>
      <SubmitButton>Save</SubmitButton>
    </FormBuilder>
  )
}

Variants and options

input

Standard text input field.

textarea

Multiline text field.

select

Single-select dropdown field.

radio

Radio group field.

checkbox

Boolean checkbox field.

dropzone

File upload field backed by the dropzone component.

list

Repeatable field array.

group

Structured section with title, description, and rows.