Ballmac UI home

Field

Form field layout with label, description and error that wire their ids to the control automatically, plus fieldset, legend, orientation and invalid/disabled state.

We send the invite here.

Letters, numbers and hyphens.

Installation

$ pnpm dlx shadcn@latest add @ballmac/field

Usage

import { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldLegend, FieldSeparator, FieldSet, FieldContent, FieldTitle, useFieldControl } from "@/components/ballmac/field"

The full example is in the Code tab above.

Examples

Switch rows

Notifications

New features, once a month.

Always on for account safety.

API reference

<FieldControl>

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

<FieldLegend>

PropTypeDefault
variant

`legend` for a section title, `label` for a smaller heading.

"legend" | "label""legend"

<Field>

PropTypeDefault
orientation

Layout of label and control. `horizontal` suits checkboxes and switches.

"vertical" | "horizontal" | "responsive""vertical"
invalid

Marks the control invalid: the label turns destructive, the control gets `aria-invalid` and the error is announced.

booleanfalse
disabled

Disables the control and dims the label.

booleanfalse
controlId

Override the generated id shared by the label and control.

string—
orientation"vertical" | "horizontal" | "responsive""vertical"

<FieldLabel>

PropTypeDefault
required

Show a required asterisk after the text. Add `required` to the control too.

boolean—

<FieldError>

PropTypeDefault
errors

Messages to show. Duplicates are removed; one message renders as text, several as a list.

Array<{ message?: string } | string | undefined>—
children

Custom content instead of `errors`.

React.ReactNode—
messagestring—

<FieldSeparator>

PropTypeDefault
children

Text in the middle of the rule, for example "or".

React.ReactNode—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Click labelFocuses the control
Screen readersRead the description, and the error when invalid; the error is announced with role alert

Use with AI

Wrap a control in Field, spread useFieldControl() on it, and label, description, error, aria-invalid and disabled are connected for you. With the shadcn MCP server set up (guide), ask your agent:

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

Use it for

  • Any labelled form control
  • Forms with validation messages
  • Settings rows with a switch or checkbox

Not for

  • A single unlabeled search box; use search-field
  • Complete form state management; combine with your form library

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

Credits

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

Registry
shadcn/utils