Component gallery

Input

One field for text, numbers, or a single checkbox or toggle.

Table toolbar search

useDebounce waits for a pause in typing before it narrows the list

8 catalogs

  • AC Delco Q3
  • Brake & Chassis
  • Lighting SKUs
  • Filters (May)
  • Timing Components
  • Ignition Systems
  • Suspension Parts
  • Cooling Systems

Field chrome

Select takes the same top label as Input, a disabled field says why, and an end action stays on the field row
Name
required
Category
required
Webhook
Owner
Only admins can change the owner
Region
Locked after the first run

Settings form

A required field that validates on blur, plus disabled and readonly rows
Email
required
Display name
Shown to teammates in the workspace
Plan
Workspace ID

Presets

email, password, search, url, numeric: the field shapes both apps kept spelling out, as one word each; explicit props win
Email
Password
Search
Website
Max pages per part
Job id
Notes

Numeric field with a unit

presets="numeric" plus the unit prop: decimal keypad, tabular right-aligned figures, the unit behind the value
Diameter

≈ 45.7 cm

Filters panel

A checkbox group and a toggle row, both narrowing the same list live

Module

37 of 37 jobs match

Login form footer

Submit stays disabled until the email and password both validate
Email
Password
At least 8 characters

Three field shapes

element switches between input, textarea, and checkbox
Text
Textarea
Checkbox
Toggle

Icons and suffixes in the frame

before and after put content inside the field without breaking its layout
Prefixed
Suffixed

Label and helper text

top and bottom caption the field above and below; required adds the asterisk
Name
As it appears on your ID
Coupon
required
API key
required

Five sizes

size and textSize scale independently

Outline, flat, or shadow

surface controls how the field's edge is drawn
Outline
Flat
Shadow

Error, changed, disabled, readonly

The states a field moves through outside plain editing
Plain
Error
Error (custom)
Warning
Looks unusual, worth a second look
Changed
Disabled
Readonly

Hide instead of gray out

hideIfDisabled renders null entirely once the field is disabled

(Nothing renders above: the field returned null.)

Same chrome around a custom control

InputContainer wraps the label/error frame around a control it doesn't own
Custom control
Read-only
Disabled

Styling slots

Every className the component exposes, and what it reaches
className
the native input or textarea element
_className
the outer container
labelClassName
the field's frame holding before, control, and after
beforeClassName
the leading before slot
afterClassName
the trailing after slot
topClassName
the label-above row
bottomClassName
the helper-text row below the field
errorClassName
the error message text
@versable-git/ui · all states, both themes