Ballmac UI home

Combobox

A searchable single-choice select with groups, descriptions, keywords, clearable value, invalid state and hidden-input form submission.

Search by name or ecosystem, like “vue”.

Installation

$ pnpm dlx shadcn@latest add @ballmac/combobox

Usage

import { Combobox } from "@/components/ballmac/combobox"

The full example is in the Code tab above.

Examples

Groups and states

API reference

PropTypeDefault
options*

Options to choose from.

ComboboxOption[]—
value

Controlled selected value ("" for none).

string—
defaultValue

Initial value when uncontrolled.

string""
onValueChange

Called with the new value, or "" when cleared.

(value: string) => void—
placeholder

Text on the trigger when nothing is chosen.

string—
searchPlaceholder

Placeholder inside the search field.

string—
emptyText

Text shown when the search has no matches.

string—
clearable

Show a control that clears the selection.

booleanfalse
invalid

Mark the field invalid (`aria-invalid`, destructive border).

booleanfalse
name

Name for a hidden input, so the value submits with a native form.

string—
contentClassName

Classes for the popup panel.

string—

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Enter / Space / ArrowDownOpens the list from the trigger
TypeFilters options; matches value, label and keywords
ArrowUp / ArrowDown / EnterMoves and selects
EscapeCloses and returns focus to the trigger

Use with AI

Pass options with value and label. It opens a filterable list; the trigger is a combobox button that submits through name. With the shadcn MCP server set up (guide), ask your agent:

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

Use it for

  • Choosing from more than about seven options
  • Time zones, countries, users and frameworks

Not for

  • Short lists; use select or radio-group
  • Choosing several values; use multi-select

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

Credits

Free to use in personal and commercial projects.