ComponentsSelect

formstexulinot agent-emittableapp

Select

select

A single-value select root with size and variant chrome.

Live examples

Outline select

Outline select

Loading demo…

Props

Public props for Select
NameKindRequiredDefaultDescription
openbooleannofalse—
valuestringno——
defaultValuestringno——
namestringno——
disabledbooleannofalse—
requiredbooleannofalse—
formstringno—Associated form id
typeenum (single)no"single"—
itemsarrayno—Optional value/label catalog when items are not registered by Select.Item
sideOffsetnumberno4—
positioningbooleannotrue—
sizeenum (sm, md, lg)no"md"—
variantenum (outline, soft)no"outline"—
onOpenChangeeventno——
onValueChangeeventno——
childrenslotno——

Keyboard

Keyboard behavior for Select
KeyAction
a, ArrowDown, Enter, SpaceTrigger is a real button; listbox opens on ArrowDown/Enter/Space
EscapeTypeahead highlights matching items; Escape closes and restores focus

Accessibility

  • Trigger is a real button; listbox opens on ArrowDown/Enter/Space
  • Typeahead highlights matching items; Escape closes and restores focus

Evidence for select

Latest committed gates for select (as of 2026-10-23). Static snapshot — not live CI.

Behavior

checkedscenario select

10 checks

Rows in tests/behavior/scenarios/select.spec.ts, held to the WAI-ARIA APG pattern, run on Chromium, WebKit and the Pixel 7.

Size (gzip)

@texuli/primitives/select · measured 13.4 KiB · budget 20.0 KiB

Measured gzip from docs/quality/perf-primitives.md (2026-10-23).

Axe

documented

  • tests/e2e/site-component-pages.spec.ts
  • docs/quality (a11y-*)

Site component pages axe gate; package-level a11y docs under docs/quality when present.

Browsers

  • chromium
  • webkit
  • mobile

Playwright projects: Desktop Chrome, Desktop Safari, Pixel 7. Firefox is a known gap on this host.

When to use

Use when

  • Pick one value from a moderate closed list

Don’t use when

Prefer another component

  • A short exclusive set that fits on the page (use radio-group)
  • Free text with suggestions (use combobox)