Combobox
Create custom select, autocomplete or multiselect inputs
Import
Source
Docs
Package
Usage
Combobox
provides a set of components and hooks to custom select, multiselect or autocomplete components.
The component is very flexible – you have full control of the rendering and logic.
Examples
This page contains only a small set of examples, as the full code of the demos is long. You can find all 50+ examples on a separate page.
useCombobox hook
useCombobox
hook provides combobox store. The store contains the current state of the component
and handlers to update it. Created store must be passed to the store
prop of Combobox
:
useCombobox options
useCombobox
hooks accepts an options object with the following properties:
You can import UseComboboxOptions
type from @mantine/core
package:
Combobox store
Combobox store is an object with the following properties:
You can import ComboboxStore
type from @mantine/core
package:
useCombobox handlers
Combobox store handlers can be used to control Combobox
state.
For example, to open the dropdown, call openDropdown
handler:
You can use store handlers in useCombobox
options. For example, you can
call selectFirstOption
when the dropdown is opened and resetSelectedOption
when it is closed:
Combobox.Target
Combobox.Target
should be used as a wrapper for the target element or component.
Combobox.Target
marks its child as a target for dropdown and sets aria-*
attributes
and adds keyboard event listeners to it.
Combobox.Target
requires a single child element or component. The child component
must accept ref
and ...others
props. You can use any Mantine component as a target without
any additional configuration, for example, Button, TextInput
or InputBase.
Example of using Combobox.Target
with TextInput component:
Example of using Combobox.Target
with Button component:
Split events and dropdown targets
In some cases, you might need to use different elements as an events target and as a dropdown.
Use Combobox.EventsTarget
to add aria-*
attributes and keyboard event handlers, and
Combobox.DropdownTarget
to position the dropdown relative to the target.
You can have as many Combobox.EventsTarget
as you need, but only one Combobox.DropdownTarget
per Combobox
.
Example of using Combobox.EventsTarget
and Combobox.DropdownTarget
with PillsInput component
to create a searchable multiselect component:
Update selected option index
updateSelectedOptionIndex
handler is required to be called when options list changes.
Usually, the options list changes when options are filtered based on the search query. In this case,
you need to call updateSelectedOptionIndex
in onChange
handler of the search input.
Example of using updateSelectedOptionIndex
handler in searchable select component:
Search input
If you prefer search input inside the dropdown, use Combobox.Search
component.
To focus the search input, call combobox.focusSearchInput
, usually it is done
when the dropdown is opened. To prevent focus loss after the dropdown is closed,
call combobox.focusTarget
:
Select first option
Use combobox.selectFirstOption
function to select the first option. It is useful
if you want to select the first option when user searching for options in the list.
If there are no options available, it will do nothing.
Active option
Set active
prop on Combobox.Option
component to mark it as active.
By default, an active option does not have any styles, you can use data-combobox-active
data attribute to style it.
combobox.selectActiveOption
function selects active option. Usually, it is called
when the dropdown is opened:
Options groups
Render Combobox.Option
components inside Combobox.Group
to create options group.
Combobox.Group
label will be automatically hidden if the group does not have any
children.
Scrollable list
Set max-height
style on either Combobox.Dropdown
or Combobox.Options
to make the
options list scrollable. You can use mah
style prop to set
max-height
.
Scrollable list with ScrollArea
You can also use ScrollArea or ScrollArea.Autosize components instead of native scrollbars:
Hide dropdown
Set hidden
prop on Combobox.Dropdown
to hide the dropdown. For example,
it can be useful when you want to show the dropdown only when there is at least
one option available:
Control dropdown opened state
To control the dropdown opened state, pass opened
to useCombobox
hook:
Dropdown is opened/closed when button is clicked
Without dropdown
You can use Combobox
without dropdown. To do so, use Combobox.EventsTarget
instead
of Combobox.Target
:
Styles API
Combobox
supports Styles API, you can add styles to any inner element of the component withclassNames
prop. Follow Styles API documentation to learn more.
Component Styles API
Hover over selectors to highlight corresponding elements