Invalid
.is-invalid on the root.
Custom select — combobox trigger with elevated listbox menu.
Live
<div class="ui-select">
<button type="button" class="ui-select__trigger field-control" role="combobox"
aria-haspopup="listbox" aria-expanded="false" aria-labelledby="role-label">
<span class="ui-select__value">Engineer</span>
<span class="ui-icon ui-icon--chevron-down ui-select__chevron" aria-hidden="true"></span>
</button>
<ul class="ui-select__menu" role="listbox">
<li role="presentation">
<button type="button" class="ui-select__option is-selected" role="option" aria-selected="true">
<span class="ui-select__option-label">Engineer</span>
<span class="ui-icon ui-icon--check ui-select__check" aria-hidden="true"></span>
</button>
</li>
</ul>
</div>
import { Select } from 'caustica-design/core'
import 'caustica-design/css'
<Select
value={role}
onChange={setRole}
options={[
{ value: 'engineer', label: 'Engineer' },
{ value: 'designer', label: 'Designer' },
]}
aria-labelledby="role-label"
/>
.is-invalid on the root.
.is-disabled + disabled trigger.
Menu option states.
aria-labelledby or aria-label on the trigger.invalid / aria-invalid.| Class | Description |
|---|---|
.ui-select / .is-open / .is-invalid / .is-disabled |
Root states. |
.ui-select__trigger / __value / __chevron |
Combobox chrome. |
.ui-select__menu / .is-drop-up |
Portaled listbox. |
.ui-select__option / .is-selected / .is-active |
Option states. |
.ui-select__check |
Selected check icon. |
From src/core/Select.tsx — controlled value + options.
| Prop | Type | Default | Description |
|---|---|---|---|
value / onChange |
string / fn |
— | Controlled value (required). |
options |
SelectOption[] |
— | { value, label } list (required). |
disabled / invalid |
boolean |
false |
Disabled / invalid states. |
aria-* |
string |
— | label, labelledby, describedby, invalid. |