Combobox

An input with a dropdown list for searching and selecting from a set of options.

Default

A searchable input with a dropdown list of options. Try searching and selecting.

html
Next.js
SvelteKit
Nuxt
Remix
Astro
No results found.
<div class="uc-relative uc-combobox-wrapper">
  <input onfocus="openCombobox('cb1')" type="text" placeholder="Search..." class="uc-input" />
  <div id="cb1" class="uc-dropdown-menu uc-w-full uc-mt-1">
    <div class="uc-combobox-item" onclick="selectComboboxItem(this)">Next.js</div>
    <div class="uc-combobox-item" onclick="selectComboboxItem(this)">SvelteKit</div>
  </div>
</div>

With Groups

Combobox with options organized into labeled groups. Icons are preserved on selection.

html
Suggestions
Calendar
Search
Settings
Results
Calculator
Profile
No results found.
<div class="uc-relative uc-combobox-wrapper" data-keep-icons="true">
  <div class="uc-relative">
    <svg class="uc-absolute uc-left-3 uc-top-1/2 uc--translate-y-1/2 uc-w-4 uc-h-4 uc-text-fg-disabled">...</svg>
    <input type="text" placeholder="Search..." onfocus="openCombobox('cb-groups')" class="uc-input uc-pl-9" />
  </div>
  <div id="cb-groups" class="uc-dropdown-menu uc-w-full uc-mt-1">
    <div class="uc-combobox-group">
      <div class="uc-text-xs uc-font-semibold uc-text-fg-disabled uc-px-2 uc-py-1.5">Suggestions</div>
      <div class="uc-combobox-item" onclick="selectComboboxItem(this)">
        <svg class="uc-w-4 uc-h-4">...</svg>
        Calendar
      </div>
      <div class="uc-combobox-item" onclick="selectComboboxItem(this)">
        <svg class="uc-w-4 uc-h-4">...</svg>
        Search
      </div>
    </div>
    <div class="uc-h-[0.5px] uc-bg-border-default uc-my-1"></div>
    <div class="uc-combobox-group">
      <div class="uc-text-xs uc-font-semibold uc-text-fg-disabled uc-px-2 uc-py-1.5">Results</div>
      <div class="uc-combobox-item" onclick="selectComboboxItem(this)">
        <svg class="uc-w-4 uc-h-4">...</svg>
        Calculator
      </div>
    </div>
  </div>
</div>

Multi-Select

Select multiple items with tags displayed in the input area.

html
React Vue
React
Vue
Angular
Svelte
Solid
No results found.
<div class="uc-relative uc-combobox-wrapper" data-multi="true">
  <div class="uc-combobox-tags uc-flex uc-flex-wrap uc-items-center uc-gap-1.5 uc-min-h-[2.5rem] uc-w-full uc-rounded-lg uc-border uc-border-border-strong uc-bg-neutrals-surface uc-px-3 uc-py-1.5">
    <span class="uc-combobox-tag uc-inline-flex uc-items-center uc-gap-1 uc-rounded uc-bg-neutrals-subtle uc-px-2 uc-py-0.5 uc-text-xs uc-font-medium">
      React
      <button type="button" onclick="removeComboboxTag(this)"><svg class="uc-w-3 uc-h-3">...</svg></button>
    </span>
    <input type="text" onfocus="openCombobox('cb-multi')" class="uc-flex-1 uc-min-w-[40px] uc-bg-transparent uc-text-sm" />
  </div>
  <div id="cb-multi" class="uc-dropdown-menu uc-w-full uc-mt-1">
    <div class="uc-combobox-item uc-selected" onclick="toggleMultiComboboxItem(this)">
      <svg class="uc-w-4 uc-h-4">...</svg>
      React
    </div>
    <div class="uc-combobox-item" onclick="toggleMultiComboboxItem(this)">
      <span class="uc-w-4 uc-h-4"></span>
      Angular
    </div>
  </div>
</div>

With Button Trigger

Combobox with a button trigger instead of an input field.

html
Backlog
Todo
In Progress
Done
Cancelled
<div class="uc-relative uc-combobox-wrapper">
  <button type="button" onclick="toggleCombobox('cb-button')" class="uc-flex uc-h-10 uc-w-full uc-items-center uc-justify-between uc-rounded-lg uc-border uc-border-border-strong uc-bg-neutrals-surface uc-px-3">
    <span class="uc-combobox-button-label uc-text-fg-disabled">Select status...</span>
    <svg class="uc-w-4 uc-h-4">...</svg>
  </button>
  <div id="cb-button" class="uc-dropdown-menu uc-w-full uc-mt-1">
    <div class="uc-combobox-item" onclick="selectComboboxButton(this, 'cb-button')">
      <span class="uc-w-4 uc-h-4"></span>
      Backlog
    </div>
    <div class="uc-combobox-item" onclick="selectComboboxButton(this, 'cb-button')">
      <span class="uc-w-4 uc-h-4"></span>
      Todo
    </div>
  </div>
</div>

Anatomy

HTML structure of the Combobox component.

div.uc-combobox-wrapper                  ← Root (relative positioning)
├── input.uc-input                          ← Search input
└── div.uc-dropdown-menu                    ← Dropdown panel
    ├── div.uc-combobox-group               ← Optional group
    │   ├── div (label)                    ← Group heading
    │   └── div.uc-combobox-item            ← Option
    │       ├── svg / span                 ← Check icon or spacer
    │       └── text                       ← Option label
    └── div.uc-combobox-empty               ← No results message

API Reference

All CSS classes available for the Combobox component.

Class Type Description
uc-combobox-wrapper Base Root wrapper — relative positioning context
uc-combobox-item Base Individual option in the dropdown list
uc-combobox-group Modifier Groups items under a label header
uc-combobox-tags Modifier Multi-select tag container wrapping the input
uc-combobox-tag Modifier Individual tag chip in multi-select mode
uc-combobox-button-label Modifier Label text inside button-trigger variant
uc-combobox-empty Modifier Empty state message when no results match
uc-selected State Marks the currently selected item
uc-open State Shows the dropdown panel
data-multi Modifier HTML attribute on wrapper — enables multi-select mode
data-keep-icons Modifier HTML attribute — preserves icons on selection

Accessibility

Keyboard and screen reader support.

Feature Details
Focus Dropdown opens on input focus, closes on click outside
Keyboard Type to filter options in real-time
Selection Click to select — checkmark icon indicates current selection
Multi-select Tags display selected items, X button removes them
Empty state Shows "No results found" when filter matches nothing