id: combobox
label: Combobox
family: family-b-selection
category: Form
intent: Search and select from a list
description: Searchable combo box
composable: true
capabilities: OpenClose, Disabled
required_parts: ["ComboboxTrigger", "ComboboxList", "ComboboxItem"]
optional_parts: []
tags: ["combobox", "search", "autocomplete", "filter", "combo"]
keywords:
pain: Searchable selects break ARIA roles and keyboard navigation
promise: Combobox roles and interaction fully enforced by structure
why: |
ComboboxPrimitive defines proper ARIA roles and input behavior. SelectionState and VisibilityState control dropdown interaction. This guarantees accessible and predictable combobox behavior.
rules: ["CR-001", "CR-004"]
use_cases: ["autocomplete", "search dropdown"]
related: ["select", "radio", "radio_group", "color_picker", "slider"]
file: combobox_ui.css
tokens: combobox-*, space-*, size-*, radius-*, shadow-*, motion-*, font-*
foundation: spacing, size, radius, shadow, motion, typography
states: ["open", "closed", "selected", "disabled"]
island: combobox_boundary.rs
pillar: select
badges: ["SSR Safe", "Hydration Safe", "Token Driven", "Deterministic API", "Zero Drift", "Island Architecture"]
before: |
// ❌ Typical
view! {
<input type="text" />
<ul><li>"Option"</li></ul>
}
after: |
// ✅ CanonRS
view! {
<Combobox>
<ComboboxTrigger>"Select..."</ComboboxTrigger>
<ComboboxList>
<ComboboxItem value="1">"Option"</ComboboxItem>
</ComboboxList>
</Combobox>
}
boundary_type: interaction
ix_group: ix_selection
block: []
blocks_primitives: [stack]