Install & Download:
# NPM
$ npm i @politico/vue-accessible-componentsDescription:
A custom, accessible, searchable select dropdown component that supports multiple selection.
How to use it:
1. Import the component into your Vue project.
import {
// single selection
SelectSingle,
// multiple selection
SelectMulti,
// core
SelectOption
} from '@politico/vue-accessible-selects'2. Add the single & multiple select components to the template.
<SelectSingle v-model="selectSingleValue" :options="myOptions" label="Single Select" :labelIsVisible="true" @select="handleSelectEvent" /> <SelectMulti v-model="selectMultiValues" :options="myOptions" label="Multiple Select" :labelIsVisible="true" placeholder="Placeholder" @select="handleSelectEvent" @remove="handleRemoveEvent" @searchChange="handleSearchChangeEvent" />
3. Register the component and define the data to be presented in the select.
const myOptions: SelectOption[] = [{
label: 'Option 1',
value: 'option1'
}, {
label: 'Option 2',
value: 'option2'
}, {
label: 'Option 3',
value: 'option3'
}]export default Vue.extend({
components: { SelectSingle, SelectMulti },
data() {
return {
myOptions,
selectSingleValue: {} as SelectOption,
selectMultiValues: [] as SelectOption[]
}
},
methods: {
handleSelectEvent(selectedValue: SelectOption) {
// do something
},
handleRemoveEvent(selectedValue: SelectOption) {
// do something
},
handleSearchChangeEvent(inputValue: string) {
// do something
}
}
})4. All default component props.
disabled: {
type: Boolean,
default: false
},
label: {
type: String,
required: true
},
loading: {
type: Boolean,
default: false
},
options: {
type: Array as PropType<SelectOption[]>,
required: true
},
labelIsVisible: {
type: Boolean,
required: false,
default: true
},
placeholder: {
type: String,
required: false,
default: () => null
},
/**
* When using a slot to display each option in the select,
* you'll want to pass in a way for the select to *search* for those options as a user types,
* in order to accurately filter the available options
* @example
* ```
* :optionLabelForSearching="a => a.label + '-' + a.value"
* ```
*/
optionLabelForSearching: {
type: Function as PropType<(option: SelectOption) => string>,
required: false,
default: null
},
displayPillsBelowInput: {
type: Boolean,
default: false
},
/**
* By default, the list will be empty when either no options are passed in,
* or a user has typed a string that doesn't match any of the options.
* If you'd like to display a messsage instead when that occurs, pass it in here
*/
noResultsMessage: {
type: String,
default: ''
},
/** Generally, there's no need to set this via a prop - it will be set automatically when using v-model */
values: {
type: Array as PropType<SelectOption[]>,
required: false,
default: () => []
}Preview:

Changelog:
v1.9.1 (02/29/2024)
- feature (USPE-886): Make default plus icon not clickable
v1.9.0 (10/05/2023)
- Update
v1.8.8 (09/16/2023)
- feature (AIQ-4292): add straight aria-label for single select
v1.8.8 (09/16/2023)
- feature (AIQ-4292): add straight aria-label for single select
v1.8.7 (06/16/2023)
- add aria-placeholder attr
v1.8.6 (06/06/2023)
- Bugfix
v1.8.1 (04/25/2023)
- Bugfix
v1.8.0 (04/12/2023)
- Bugfix
v1.7.0 (04/06/2023)
- Bugfix
v1.6.0 (03/30/2023)
- Bugfix
v1.5.0 (03/27/2023)
- Bugfix
v1.4.0 (11/30/2022)
- Bugfix
v1.3.0 (08/30/2022)
- Add aria-label for selected option
v1.1.6 (07/25/2022)
- fix: add aria-roledescription to inform user about multiple options
v1.1.5 (07/11/2022)
- fix: add aria label for list
v1.1.4 (07/07/2022)
- fix (PROJ-4856): Add aria-label for selected option
v1.1.3 (04/21/2022)
- Change the color of placeholer
v1.1.2 (01/26/2022)
- Add label for screen reader
v1.1.0 (12/23/2021)
- Fix scroll jumping
v1.0.1 (12/22/2021)
- Fix filtering when async data
v1.0.0 (11/24/2021)
- feature (FEP-642): Change slashes to math.div in scss mixin file
v0.17.0 (07/30/2021)
- Add optional chaining for checking key presence in getActionFromKey
v0.16.0 (04/29/2021)
- Add default value for not required function param
v0.15.0 (04/28/2021)
- Update
v0.14.0 (04/15/2021)
- Add placeholder and isDisabled property for option
v0.13.1 (03/20/2021)
- fix: Fix scroll to focused option
v0.13.0 (02/25/2021)
- refactor
v0.12.0 (12/21/2020)
- Update prop name
v0.11.2 (12/18/2020)
- fix: update activeIndex after changing selectedIndex
v0.11.0 (12/12/2020)
- feat: add loading slot
v0.10.0 (12/10/2020)
- emit filtered options as well as input value when it changes
v0.8.2 (11/22/2020)
- Fix changing selected option on click
v0.8.1 (11/19/2020)
- SelectSingle – add option-selected class to selected option
v0.8.0 (11/11/2020)
- Add a watcher on loading to invoke opening the filter options
v0.7.1 (11/07/2020)
- Updated
v0.7.0 (10/29/2020)
- Add loading prop. add icons slot
v0.6.0 (10/28/2020)
- Add optional no results msg





