Skip to content

Listbox

The Listbox component presents a list of options and allows a user to select one or more of them. The component implements the W3C ARIA APG Listbox Pattern. When assistive technologies present a listbox, the name of an option is calculated by the browser as a flat string. Therefore, the content of an option should not contain any semantic information, such as a heading. In addition, assistive technologies does not provide an accessible way to present a list of interactive elements for the listbox role, such as links, buttons, or checkboxes. Combine it with the Field component to access all functionalities.

Examples

Base

Listboxes are a great and accessible select menus for your app, complete with robust support for keyboard navigation.

Multiple

The v-model can be used to bind the selected value. When the multiple prop is used, more than one value can be selected.

Options

Instead of using the <o-list-item> component directly inside the default slot, an options prop can be defined, which can be used to define the options programmatically. It accepts several different formats of values:

  • An array of primitives ['A', 'B', 'C']
  • An object literal with key-value pairs { a: 'A', b: 'B', c: 'C' }
  • An array of objects with label and value properties
  • Grouped options by adding additional options to the option object.

Note

The options prop works the same as the Select input component options prop.

Filterable

The component provides a built-in filtering feature, which can be enabled by adding the filterable property. A custom filter function can be defined using the filter prop. By default, a label string comparison is performed.

Slots

A custom header and footer can be added before and after the options list by using the header and footer slots. You can also display content, when no options are visible, either because there are no options or because they are hidden through filtering, using the emty slot.

Infinite Scroll & Async Data

The list box is capped on a max-height with the scrollHeight prop. A long list of options will be rendere with a scrollbar. The component will emit a scroll-start or scroll-end event, when the top or bottom of the list is reached. These events can be used to load more options as needed. Consider adding backend-filtering when manually updating options on filter value changes.

Listbox Component

Listbox is used to select one or more values from a list of items.

html
<o-listbox></o-listbox>

Props

Prop nameDescriptionTypeValuesDefault
animationCustom animation (transition name)string-
From config:
listbox: {
  animation: "fade"
}
ariaLabelDefines a string value that labels an interactive element.string-
ariaLabelledbyIdentifier of the underlying input element.string-
backendFilteringItems won't be filtered on clientside, use the filter event to filter in your backendboolean-false
disabledInteraction is disabledboolean-false
emptyLabelA label which is displayed when no options is visiblestring-
From config:
listbox: {
  emptyLabel: undefined
}
filterCustom filter function to filter the items based on the input value - default is label string comparison((option: unknown, value: string) => boolean)-
filterDebounceNumber of milliseconds to delay the filter eventnumber-
From config:
listbox: {
  filterDebounce: 400
}
filterIconIcon of the column search inputstring-
From config:
listbox: {
  filterIcon: undefined
}
filterPlaceholderPlaceholder of the column search inputstring-
From config:
listbox: {
  filterPlaceholder: undefined
}
filterableEnable an additional searchbar below the headerboolean-false
iconPackIcon pack to usestringmdi, fa, fas and any other custom icon pack
From config:
listbox: {
  iconPack: undefined
}
itemTagList item tag nameDynamicComponent-
From config:
listbox: {
  itemTag: "li"
}
listTagList tag nameDynamicComponent-
From config:
listbox: {
  listTag: "ul"
}
v-modelThe selected option value, use v-model to make it two-way bindingstring|number|object-
multipleAllows multiple selections - converts the modelValue into an arrayboolean-
optionsAutocomplete optionsOptionsPropWithGroups<unknown>-
overrideOverride existing theme classes completelyboolean-
scrollHeightHeight of the listbox, a scrollbar is defined if height of list exceeds this valuenumber | string-
From config:
listbox: {
  scrollHeight: "225"
}
selectOnFocusSelect current focused item when focusedboolean-false
selectableEnables item selectionboolean-true

Events

Event namePropertiesDescription
update:model-valuevalue T | T[] - updated modelValue propmodelValue prop two-way binding
selectvalue T - selected valueon select event - fired before update:modelValue
filtervalue string - filter value
event Event - native event
on filter change event
focusevent Event - native eventon list focus event
blurevent Event - native eventon list blur event
scroll-startscrolling the list reached the start
scroll-endscrolling the list inside reached it's end

Slots

NameDescriptionBindings
headerDefine an additional header
filterOverridet the filter inputvalue string - filter input value

defaultPlace items here
optiongroupOverride the option groupgroup object - options group item
index number - group option index
optionOverride the label, default is label propoption object - option item
index number - option index
selected boolean - option is selected
disabled boolean - option is disabled
emptyDefine content for empty state
footerDefine an additional footer

Class Inspector

Classes applied to the element:
Want to know how does the Class Inspector work?
Class propDescriptionPropsSuffixes
rootClassClass of the root element.
disabledClassClass of the root element when disabled.disabled
selectableClassClass of the root element when selectable.selectable
filterableClassClass of the root element when filterable.filterable
multipleClassClass of the root element when multiple.multiple
headerClassClass of the header slot wrapper element.
footerClassClass of the footer slot wrapper element.
emptyClassClass of the empty slot wrapper element.
filterClassClass of the filter wrapper element.
containerClassClass of the list container element.
listClassClass of the list element.
itemClassClass of the item element.
itemSelectedClassClass of the item element when selected.
itemFocusedClassClass of the item element when focused.
itemClickableClassClass of the item element when clickable.
itemDisabledClassClass of the item element when disabled.
inputClassesClasses to apply on the internal input component. More details here.

Sass Variables

Current theme ➜ Oruga

The theme does not have any custom variables for this component.

Current theme ➜ Bulma

The theme does not have any custom variables for this component.

Current theme ➜ Bootstrap

The theme does not have any custom variables for this component.

Released under the MIT License.