sp-combobox
NPM
1.0.0
Storybook
View Storybook
Attributes and Properties #
autocomplete
autocomplete
| 'list' | 'none' | HTMLInputElement['autocomplete'] | HTMLTextAreaElement['autocomplete'] | undefined
'none'
disabled
disabled
boolean
false
grows
grows
boolean
false
invalid
invalid
boolean
false
label
label
string
''
maxlength
maxlength
number
-1
minlength
minlength
number
-1
multiline
multiline
boolean
false
name
name
string | undefined
open
open
boolean
false
options
options
ComboboxOption[] | undefined
pattern
pattern
string | undefined
pending
pending
boolean
false
pendingLabel
pending-label
string
'Pending'
placeholder
placeholder
string
''
quiet
quiet
boolean
false
readonly
readonly
boolean
false
required
required
boolean
false
rows
rows
number
-1
tabIndex
tabIndex
number
valid
valid
boolean
false
value
value
string | number
Slots #
default slot
help-text
negative-help-text
tooltip
Events #
change
Event
An alteration to the value of the element has been committed by the user.
input
Event
The value of the element has changed.
1.0.0 (2024-10-31) #
Note: Version bump only for package @spectrum-web-components/combobox
0.49.0 (2024-10-15) #
Note: Version bump only for package @spectrum-web-components/combobox
0.48.1 (2024-10-01) #
Note: Version bump only for package @spectrum-web-components/combobox
0.48.0 (2024-09-17) #
Bug Fixes #
- combobox: update selected item state in menu (
#4730 ) (c4cfd2a )
Features #
- reactive-controller: new pending state controller (
#4605 ) (68baf94 )
0.47.2 (2024-09-03) #
Note: Version bump only for package @spectrum-web-components/combobox
0.47.1 (2024-08-27) #
Bug Fixes #
- reactive-controllers: update focusable element's tab-index to 0 on accepting focus (
#4630 ) (d359e84 )
0.47.0 (2024-08-20) #
Note: Version bump only for package @spectrum-web-components/combobox
0.46.0 (2024-08-08) #
Note: Version bump only for package @spectrum-web-components/combobox
0.45.0 (2024-07-30) #
Note: Version bump only for package @spectrum-web-components/combobox
0.44.0 (2024-07-15) #
0.43.0 (2024-06-11) #
Features #
- combobox: add
pending
state (#4462 ) (2d0c388 )
0.42.5 (2024-05-24) #
Note: Version bump only for package @spectrum-web-components/combobox
0.42.4 (2024-05-14) #
Bug Fixes #
- combobox: allow numeric values and trigger change event on keybo… (
#4405 ) (235ae7c ) - combobox: correct package.json listings (
35a69a2 ) - combobox: process styles for invalid state (
#4344 ) (c2b952e )
0.42.3 (2024-05-01) #
Bug Fixes #
- combobox: correct package.json listings (
35a69a2 )
0.42.2 (2024-04-03) #
Note: Version bump only for package @spectrum-web-components/combobox
0.42.1 (2024-04-02) #
Note: Version bump only for package @spectrum-web-components/combobox
0.42.0 (2024-03-19) #
Features #
- asset: use core tokens (
99e76f4 )
0.41.2 (2024-03-05) #
Note: Version bump only for package @spectrum-web-components/combobox
0.41.1 (2024-02-22) #
Note: Version bump only for package @spectrum-web-components/combobox
0.41.0 (2024-02-13) #
Features #
- icon: use core tokens (
a11ef6b )
Performance Improvements #
- combobox: prevent initial list render and update tests to prove that reduces render time (
3dc5b1f )
0.40.5 (2024-02-05) #
Bug Fixes #
- combobox: add combobox pattern (
#3894 ) (47d7d71 ), closes#3887
Description #
An <sp-combobox>
allows users to filter lists to only the options matching a query. It's composed of a textfield, a picker button, and child menu items.
Usage #
yarn add @spectrum-web-components/combobox
Import the side effectful registration of <sp-combobox>
via:
import '@spectrum-web-components/combobox/sp-combobox.js';
When looking to leverage the Combobox
base class as a type and/or for extension purposes, do so via:
import { Combobox } from '@spectrum-web-components/combobox';
Sizes #
<sp-combobox size="s" label="Color"> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
<sp-combobox size="m" label="Color"> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
<sp-combobox size="l" label="Color"> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
<sp-combobox size="xl" label="Color"> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
Labeling #
A combobox must be labeled. Typically, you should render a visible label via <sp-field-label>
. For exceptional cases, provide an accessible label via the label
attribute.
<sp-field-label for="color">Color</sp-field-label> <sp-combobox id="color"> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
Providing options #
Combobox options are presented as a popup menu. Menu items can be provided via markup as <sp-menu-item>
children, or by assigning an array to the options
property of an <sp-combobox>
.
Options property #
Instead of providing <sp-menu-item>
children, you can assign an array of ComboboxOptions
to the options
property, and <sp-combobox>
will create matching menu items:
<sp-combobox id="color" label="Color"></sp-combobox> <script> document.getElementById('color').options = [ { value: "red", itemText: "Red" }, { value: "green", itemText: "Green" }, { value: "blue", itemText: "Blue" } ]; </script>
Dynamic options #
When you replace the options
Array, or add/remove <sp-menu-item>
children, the <sp-combobox>
will detect that change and update its popup menu contents. For example, using
render() { return html`<sp-combobox label="Color" .options=${this.colorOptions}></sp-combobox>`; } mutate() { this.colorOptions = [ ...this.colorOptions, { value: 'purple', itemText: 'Purple' } ]; }
Autocomplete #
The text in an <sp-combobox>
is editable, and the string the user has typed in will become the value
of the combobox unless the user selects a different value in the popup menu.
None #
autocomplete="none"
The suggested popup menu items will remain the same regardless of the currently-input value. Whenever the currently-typed input exactly matches the value
of a popup menu item, that item is automatically selected.
List #
autocomplete="list"
The popup menu items are filtered to only those completing the currently-input value.
States #
Disabled #
<sp-field-label for="color">Color</sp-field-label> <sp-combobox id="color" disabled> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
Invalid #
<sp-field-label for="color">Color</sp-field-label> <sp-combobox id="color" invalid> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> <sp-help-text slot="negative-help-text"> Choose or add at least one color. </sp-help-text> </sp-combobox>
Quiet #
<sp-field-label for="color">Color</sp-field-label> <sp-combobox id="color" quiet> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
Pending #
<sp-field-label for="color">Color</sp-field-label> <sp-combobox id="color" pending> <sp-menu-item value="red">Red</sp-menu-item> <sp-menu-item value="green">Green</sp-menu-item> <sp-menu-item value="blue">Blue</sp-menu-item> </sp-combobox>
Focus and Accessibility #
The combobox supports both mouse and keyboard navigation. Mobile behavior is currently unspecified.
When an <sp-combobox>
is focused, pressing the down arrow moves focus to the first menu item in the popup menu. The up and down arrows then move between available menu items.
The escape key dismisses the popup menu if open. Otherwise, it clears the combobox's textfield.
The enter key sets the value
of the focused <sp-combobox>
. If the popup menu is open, the value is set to the value
of the selected menu item, returning focus back to the combobox's textfield.