GitHub

Forms

Field compound, specialised inputs, and flow forms. All a11y-wired out of the box.

Field compound

Label, Input, Helper, Error auto-wired via htmlFor + aria-describedby.

We'll never share your email.

Markdown supported. Visible to subscribed customers.

tsx
<Field name="email" required><Field.Label>Email</Field.Label><Field.Input purpose="email" /></Field>

Combobox

Searchable autocomplete with grouped options.

tsx
<Combobox items={items} value={v} onValueChange={setV} clearable />

NumberInput

Numeric input with step buttons and keyboard support.

Quantity: 4

tsx
<NumberInput value={qty} onValueChange={setQty} min={0} max={100} />

TagInput

Type then Enter to add tags. Backspace removes the last.

designproductengineering
tsx
<TagInput value={tags} onValueChange={setTags} />

OTPInput

Segmented one-time-code input. Paste-safe.

tsx
<OTPInput length={6} />

PhoneInput

International phone input with country selector.

tsx
<PhoneInput value={phone} onValueChange={setPhone} />

CurrencyInput

Currency symbol, locale formatting, and precision clamping.

tsx
<CurrencyInput value={price} onValueChange={setPrice} currency="USD" />

DatePicker

Single-date picker with popover calendar.

tsx
<DatePicker value={date} onValueChange={setDate} />

DateRange

Two-date picker with range preview.

tsx
<DateRange value={range} onValueChange={setRange} />

TimePicker

Hour/minute time input.

tsx
<TimePicker value={time} onValueChange={setTime} />

Slider

Numeric range input. Range mode returns a [min, max] tuple.

tsx
<Slider mode="range" value={[20, 80]} />

FileUpload

Drag & drop or click-to-select with progress state.

Drop files here or click to browse
tsx
<FileUpload accept="image/*" multiple />

ColorPicker

Hex color picker with swatches.

Selected: #483aa0
tsx
<ColorPicker value={color} onValueChange={setColor} />

SignInForm

Full sign-in flow.

Sign in

tsx
<SignInForm onSubmit={async (v) => {}} />

SignUpForm

Sign-up with password strength and terms checkbox.

Create account

tsx
<SignUpForm onSubmit={async (v) => {}} />

AddressForm

International address.

tsx
<AddressForm onSubmit={async (v) => {}} />

PaymentForm

Card number, expiry, CVC.

tsx
<PaymentForm onSubmit={async (v) => {}} />