# Select

> Three token-driven listbox fields — single-select, multi-select with a Select all row, and a searchable multi-select — each a button trigger paired with a popup listbox, with full keyboard navigation, type-ahead, dark mode, and a responsive grid.

- Category: Input
- Frameworks: Vanilla, React + CSS, React + Tailwind
- Design system: Triangulum
- Dark mode: yes
- Access: premium (Atheros AI Pass)
- Tags: combobox, multi-select, search
- Page: https://builder.atheros.ai/components/select
- Preview: https://d17nmjscumqk5d.cloudfront.net/builder/templates/tpl_builder_select/preview-78ad18a64851.webp

## Features

- Three independent fields on one stage, each driven by a `data-mode` attribute: `single`, `multi`, and `search`
- Single-select mode commits a value to the trigger label and closes the popup, marking the chosen row with a filled radio disc
- Multi-select mode keeps the popup open, tracks chosen values in a `Set`, lists the chosen values on the trigger label, and shows a count badge with a clear-all affordance
- Selected rows carry a primary-tinted background with an inset accent bar in addition to their filled radio/check marker, so every chosen option reads as selected at a glance
- Select all row with a three-state check: empty, filled tick when everything is chosen, and a dash when the selection is partial
- Search mode filters options as you type and scopes Select all to the rows currently visible
- Full keyboard navigation: arrows, Home, End, Enter, Space, Escape, Tab, and type-ahead matching on the option value
- Opening one field closes the other two; all fields close on outside click
- Reveal animation driven by `opacity` and `transform` only — never layout properties
- Fully respects `prefers-reduced-motion`

## Accessibility

- **Combobox role** — Single and multi triggers are `role="combobox"` with `aria-haspopup="listbox"`, `aria-controls`, and `aria-expanded`
- **Listbox semantics** — `role="listbox"` containing `role="option"` items with `aria-selected`; multi and search listboxes add `aria-multiselectable`
- **Active descendant** — `aria-activedescendant` on the focused element — the trigger, or the search input when present — tracks the highlighted option and is dropped when the highlight clears
- **Search field** — Labelled via `aria-label` and wired to its listbox with `aria-controls`
- **Accessible names** — Each trigger carries an `aria-label` describing the field
- **Focus indicators** — `:focus-visible` with `--ring` outline on all interactive elements
- **Reduced motion** — `prefers-reduced-motion: reduce` disables all animations

## Keyboard shortcuts

- `ArrowDown` — Open the listbox from a closed trigger, or move to the next visible option
- `ArrowUp` — Open the listbox from a closed trigger, or move to the previous visible option
- `Home` — Jump to the first visible option (trigger only)
- `End` — Jump to the last visible option (trigger only)
- `Enter` — Activate the highlighted option (trigger only)
- `Space` — Activate the highlighted option; single mode returns focus to the trigger (trigger only)
- `Escape` — Close the listbox and return focus to the trigger
- `Tab` — Close the listbox and move focus onward
- `Printable key` — Type-ahead — highlight the next visible option whose value starts with the buffered keys (trigger only)

## Common questions

**Which frameworks is Select available in?**

Select ships as Vanilla, React + CSS and React + Tailwind — HTML, CSS, JS and React source you can copy, download or clone into Atheros AI Builder.

**Is the Select input component free?**

Select is a premium component. Anyone can preview it; the source, downloads and AI customisation are included with Atheros AI Pass.

**Does Select support dark mode?**

Yes. Select ships light and dark themes, both drawn from the Triangulum design system's tokens. Switch the preview to dark mode to compare them.

## Get the code

Preview Select live, then sign in to copy or download the source, apply another design system, or ask the AI assistant to change it: https://builder.atheros.ai/components/select

Every component on https://builder.atheros.ai is also reachable from Claude Code, Cursor and Codex through the Atheros MCP server (paid plans). Component index: https://builder.atheros.ai/llms-components.txt
