Ballmac UI home

Form

React Hook Form wired to Ballmac Field: one FormField renders label, control, description and error with ids, aria-invalid and aria-describedby linked, plus a pending submit button.

Create your account

Free for 14 days. No card needed.

We send a confirmation link here.

Installation

$ pnpm dlx shadcn@latest add @ballmac/form

Usage

import { Form, FormField, FormSubmit, useFormContext } from "@/components/ballmac/form"

The full example is in the Code tab above.

Examples

Pending submit

Up to 200 characters.

API reference

<Form>

PropTypeDefault
form*

The object returned by `useForm()`.

UseFormReturn<TValues>—
onSubmit*

Called with validated values when the form is submitted.

SubmitHandler<TValues>—
onError

Called with the errors when validation fails. By default the first invalid control is focused.

SubmitErrorHandler<TValues>—

<FormControl>

PropTypeDefault
idstring—
"aria-invalid"true—
"aria-describedby"string—

<FormField>

PropTypeDefault
name*

Field name, typed from your form values (supports paths such as `address.city`).

TName—
label*

Visible label.

React.ReactNode—
description

Help text under the control. It stays readable to screen readers when an error is shown.

React.ReactNode—
required

Show the required asterisk. Pair it with a schema rule.

boolean—
orientation

Label and control layout. `horizontal` suits checkboxes and switches.

FieldProps["orientation"]—
rules

Built-in validation rules (`required`, `minLength`, `pattern`, `validate`…). Not needed when you use a schema resolver.

ControllerProps<TValues, TName>["rules"]—
form

Optional form object; defaults to the nearest `<Form>`.

UseFormReturn<TValues>—
render*

Renders the control. Spread the props onto it: `render={(props) => <Input {...props} />}`. For checkboxes or switches map `props.value` to `checked` and `props.onChange` to `onCheckedChange`.

(props: FormControlProps<TValues, TName>) => React.ReactNode—
classNamestring—

<FormSubmit>

PropTypeDefault
pendingText

Text shown on the button while the submit handler is running.

React.ReactNode—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
EnterSubmits; focus moves to the first invalid control
Screen readersLabels, hints and errors are linked; errors use role alert

Use with AI

const form = useForm(); <Form form onSubmit><FormField name label render={(props) => <Input {...props}/>}/><FormSubmit/></Form>. Use rules or a resolver for validation. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Form (@ballmac/form) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Any form with client validation
  • Forms that need per-field errors announced

Not for

  • A single uncontrolled input; use field
  • Server actions without client state

Registry JSON: https://ui.ballmac.com/r/form.json

Credits

Based on shadcn/ui Form, adapted by Ballmac. Free to use in personal and commercial projects.