An <sp-picker-button>
is used as a sub-component of patterns like the <sp-combobox>
(release pending) to pair a button interface with a text input. With its many custom states and alterations, it isn't likely to be leveraged directly outside of more complex UIs.

yarn add @spectrum-web-components/picker-button
Import the side effectful registration of <sp-picker-button>
via:
import '@spectrum-web-components/picker-button/sp-picker-button.js';
When looking to leverage the PickerButton
base class as a type and/or for extension purposes, do so via:
import { PickerButton } from '@spectrum-web-components/picker-button';
With the use of the label
slot, you can deliver an <sp-picker-button>
with both an icon and a text label:
<sp-picker-button><span slot="label">All</span></sp-picker-button>
Without content addressed to the label
slot, the <sp-picker-button>
with both an icon and a text label:
<sp-picker-button></sp-picker-button>
You can customize the icon in an <sp-picker-button>
by addressing a new icon to the icon
slot:
<sp-picker-button><sp-icon-add slot="icon"></sp-icon-add></sp-picker-button>
Small <sp-picker-button size="s"></sp-picker-button>
<br />
<sp-picker-button size="s"><span slot="label">All</span></sp-picker-button>
Medium <sp-picker-button size="m"></sp-picker-button>
<br />
<sp-picker-button size="m"><span slot="label">All</span></sp-picker-button>
Large <sp-picker-button size="l"></sp-picker-button>
<br />
<sp-picker-button size="l"><span slot="label">All</span></sp-picker-button>
Extra Large <sp-picker-button size="xl"></sp-picker-button>
<br />
<sp-picker-button size="xl"><span slot="label">All</span></sp-picker-button>
When delivered as part of the express
system, an <sp-picker-button>
with the rounded
attribute will be given deeply rounded corners:
<sp-picker-button rounded></sp-picker-button>
<br />
<sp-picker-button rounded><span slot="label">All</span></sp-picker-button>
When delivered with the quiet
attribute, the <sp-picker-button>
will take a less pronounced visual delivery:
<sp-picker-button quiet></sp-picker-button>
<br />
<sp-picker-button quiet><span slot="label">All</span></sp-picker-button>
By default the <sp-picker-button>
will be given a position
attribute with the value right
, which is best leveraged at the right edge of an associated <sp-textfield>
element. If your UI desires that the <sp-picker-button>
be placed to the left of the related input, use the position
attribute and set it to left
:
<sp-picker-button position="left"></sp-picker-button>
<br />
<sp-picker-button position="left">
<span slot="label">All</span>
</sp-picker-button>
When paired with an expanded UI, e.g. an <sp-combobox>
with its autocomplete options visible, an <sp-picker-button>
should be given the open
attribute to visual match the delivered state in the larger UI:
<sp-picker-button open></sp-picker-button>
<br />
<sp-picker-button open><span slot="label">All</span></sp-picker-button>
Leveraging the disabled
attribute will dim the <sp-picker-button>
and alter its presentation in the accessibility tree:
<sp-picker-button disabled></sp-picker-button>
<br />
<sp-picker-button disabled><span slot="label">All</span></sp-picker-button>
When delivered as part of the spectrum
system, an <sp-picker-button>
with the invalid
attribute will be given a red border:
<sp-picker-button invalid></sp-picker-button>
<br />
<sp-picker-button invalid><span slot="label">All</span></sp-picker-button>
The example below is for demonstration purposes. For an example implementation of <sp-picker-button>
view Combobox.ts
. For comprehensive information on menu button accessibility, see WAI ARIA Authoring Practice Guide's Menu Button Pattern.
<sp-field-label for="color">Color</sp-field-label>
<sp-textfield id="color"></sp-textfield>
<overlay-trigger type="modal">
<sp-picker-button
aria-controls="colors-menu"
aria-expanded="false"
aria-haspopup="menu"
aria-describedby="color"
slot="trigger"
></sp-picker-button>
<sp-tray slot="click-content">
<sp-menu id="colors-menu">
<sp-menu-item>Red</sp-menu-item>
<sp-menu-item>Blue</sp-menu-item>
</sp-menu>
</sp-tray>
</overlay-trigger>
To ensure menu items can be read by assistive technology, do one of the following:
- Place visible text in the component's
label
slot. - Use
aria-label
attribute. - Set the
aria-labelledby
attribute to the ID reference of the menu element.
To indicate to assistive technology what the button does, do all of the following:
- Set the
aria-controls
property to the ID reference of the menu element. - Set the
aria-haspopup
property to "menu"
or "true"
. - Set the
aria-expanded
property to "menu"
or "true"
or "false"
depending on whether the menu is displayed.
Ensure that picker button can be operated by keyboard users:
- Required: Open the menu and focus on first menu item when Enter or Space is pressed.
- Optional: Open the menu and focus on first menu item when Down Arrow is pressed.
- Optional: Open the menu and focus on last menu item when Up Arrow is pressed.
Changelog
- Updated dependencies []:
- @spectrum-web-components/button@1.4.0
- @spectrum-web-components/icon@1.4.0
- @spectrum-web-components/icons-ui@1.4.0
- @spectrum-web-components/base@1.4.0
- @spectrum-web-components/shared@1.4.0
- Updated dependencies []:
- @spectrum-web-components/button@1.3.0
- @spectrum-web-components/icon@1.3.0
- @spectrum-web-components/icons-ui@1.3.0
- @spectrum-web-components/base@1.3.0
- @spectrum-web-components/shared@1.3.0
All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- lock prerelease versions for Spectrum CSS (#5014) (8aa7734)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- picker-button: update quiet styles (#4383) (42bf291)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- asset: use core tokens (99e76f4)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- icon: use core tokens (a11ef6b)
- combobox: add combobox pattern (#3894) (47d7d71), closes #3887
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- update deps graph, update link docs (#3709) (2deb284)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- picker-button: include missing dependency on @spectrum-web-components/button (#3515) (ed44c2b)
- picker-button: migrate to core tokens (b39219c)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- add Picker Button pattern (31337b8)
- shared pkg versions, devmode define warning, registry-conflicts docs (6e49565)
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
Note: Version bump only for package @spectrum-web-components/picker-button
- add Picker Button pattern (31337b8)