--- title: Combobox storybookPath: forms-combobox--default isExperimentalPackage: true ---
---
title: Combobox
storybookPath: forms-combobox--default
isExperimentalPackage: true
---
The Combobox allows the user to browse, search, and make a single selection
from a large list of values.
``jsx live
const [value, setValue] = React.useState(null);
return (
items={[
{ label: 'Jake', value: 'jake' },
{ label: 'Finn', value: 'finn' },
{ label: 'BMO', value: 'bmo' },
]}
onChange={value => setValue(value)}
value={value}
/>
);
`
`jsx live`
items={[
{ label: 'Jake', value: 'jake' },
{ label: 'Finn', value: 'finn' },
{ label: 'BMO', value: 'bmo' },
]}
/>
`jsx live
const [items, setItems] = React.useState([]);
const [value, setValue] = React.useState(null);
const fetchItems = async input => {
if (!input) return [];
await new Promise(resolve => setTimeout(resolve, 1000));
return [{ label: input, value: input }];
};
return (
items={items}
onChange={value => setValue(value)}
onInputChange={input => setItems(fetchItems(input))}
value={value}
/>
);
`
`jsx live
const [value, setValue] = React.useState(null);
return (
message={JSON.stringify(value ?? {})}
>
items={[
{ title: 'The Shawshank Redemption', year: 1994 },
{ title: 'The Godfather', year: 1972 },
{ title: 'The Godfather: Part II', year: 1974 },
{ title: 'The Dark Knight', year: 2008 },
{ title: '12 Angry Men', year: 1957 },
{ title: "Schindler's List", year: 1993 },
]}
onChange={value => setValue(value)}
value={value}
getOptionLabel={option => option.title}
getOptionValue={option => ${option.year}}`
/>
);
`jsx live`
items={[
{
label: 'Futurama',
options: [
{ label: 'Fry', value: 'fry' },
{ label: 'Leela', value: 'leela' },
{ label: 'Bender', value: 'bender' },
{ label: 'Zoidberg', value: 'zoidberg' },
],
},
{
label: 'South Park',
options: [
{ label: 'Stan', value: 'stan' },
{ label: 'Kyle', value: 'kyle' },
{ label: 'Cartman', value: 'cartman' },
{ label: 'Kenny', value: 'kenny' },
],
},
]}
/>
`jsx live`
items={[
{ label: 'Jake', value: 'jake' },
{ label: 'Finn', value: 'finn' },
{ label: 'BMO', value: 'bmo' },
]}
defaultOption={{
option: { label: 'The Ice King', value: 'ice king' },
position: 'start',
}}
/>
`jsx live`
items={[
{ label: 'Jake', value: 'jake' },
{ label: 'Finn', value: 'finn' },
{ label: 'BMO', value: 'bmo' },
]}
/>
`jsx live``
tone="critical"
message="Required"
>
items={[
{ label: 'Jake', value: 'jake' },
{ label: 'Finn', value: 'finn' },
{ label: 'BMO', value: 'bmo' },
]}
/>
[data-attribute-map]:
https://github.com/brighte-labs/spark-web/blob/e7f6f4285b4cfd876312cc89fbdd094039aa239a/packages/utils/src/internal/buildDataAttributes.ts#L1