Zetta v0.10

Components · Forms & selection

Combobox

A single-select control with typeahead filtering — a Select you can type into. The trigger matches the input surface with a chevron affordance; the open list reuses the Select / popover menu. Use it when the option set is long enough that scanning is slow.

Preview

The closed trigger across the three themes. The filtered list is the framework primitive's job.

Light
Dark
Accessibility

Spec

Values and token references straight from the Zetta spec.

combobox-trigger
backgroundColor
{colors.surface-card}
textColor
{colors.ink}
placeholderColor
{colors.placeholder}
placeholderStyle
italic
borderColor
{colors.border-strong}
borderWidth
1px
borderRadius
{rounded.base}
fontFamily
Geist
fontSize
14px
fontWeight
400
lineHeight
1.6
height
32px
paddingX
14px
chevronSize
16px
chevronColor
{colors.muted}
display
flex
alignItems
center
justifyContent
space-between
cursor
pointer
combobox-trigger-hover
borderColor
{colors.border-strong}
boxShadow
{shadows.sm}
combobox-trigger-focus
borderColor
{colors.border-focus}
outline
2px solid {colors.border-focus}
outlineOffset
2px
combobox-trigger-invalid
borderColor
{colors.danger}
combobox-trigger-invalid-focus
borderColor
{colors.danger}
outline
2px solid {colors.danger}
outlineOffset
2px
combobox-trigger-disabled
backgroundColor
{colors.disabled-bg}
textColor
{colors.disabled-text}
borderColor
{colors.disabled-border}
cursor
not-allowed

Build with the skill

No package to install — hand this to your AI to generate the combobox in your stack.

Prompt for your AI
Implement the Zetta "Combobox" component in this project's stack using the zetta-design-md skill.

- Apply the `combobox` spec from the skill (variants: default, invalid, disabled).
- Use this project's own component conventions and framework idioms.
- Reference the Zetta design tokens (CSS variables) for every color, radius, and shadow — never hardcode values.
- Implement all states (hover, focus, active, disabled, and invalid where applicable) with a visible 2px focus ring.
- Honor the Zetta guardrails (brand never shifts hue, shadows for overlays only, etc.) and verify in Light, Dark, and Accessibility.

Anatomy & rules

  • 32px trigger, base radius, hairline-strong border, 16px muted chevron; hover lifts shadow-sm, focus rings, invalid goes danger.
  • Filter on input, highlight the active option, and commit on Enter. Reach for a plain Select when there are only a handful of options.

Accessibility

  • Wire the ARIA combobox pattern: role="combobox", aria-expanded, aria-controls and aria-activedescendant. Full keyboard support — type to filter, arrows to move, Enter to select, Escape to close.

Known gaps

  • The spec defines the trigger surface only; list item, group and empty-state styling follow the Select / multi-select list tokens.