# Combobox >> Use Cases ||20
A combobox is a widget made up of the combination of two distinct elements:
- a single-line textbox
- an associated listbox overlay
Based on the combobox configuration and entered textbox value, options in the listbox will be
filtered, checked, focused and the textbox value may be autocompleted.
Optionally the combobox contains a graphical button adjacent to the textbox, indicating the
availability of the popup.
> Fore more information, consult [Combobox wai-aria design pattern](https://www.w3.org/TR/wai-aria-practices/#combobox)
```js script
import { LitElement, html, repeat } from '@mdjs/mdjs-preview';
import { listboxData } from '../listbox/src/listboxData.js';
import { LionCombobox } from '@lion/combobox';
import '@lion/listbox/define';
import '@lion/combobox/define';
import './src/demo-selection-display.js';
import { lazyRender } from './src/lazyRender.js';
import levenshtein from './src/levenshtein.js';
```
## Autocomplete
Below you will find an overview of all possible `autocomplete` behaviors and how they correspond
to the configurable values `none`, `list`, `inline` and `both`.
| | list | filter | focus | check | complete |
| -----: | :--: | :----: | :---: | :---: | :------: |
| none | ✓ | | | | |
| list | ✓ | ✓ | ✓ | ✓ | |
| inline | ✓ | | ✓ | ✓ | ✓ |
| both | ✓ | ✓ | ✓ | ✓ | ✓ |
- **list** shows a list on keydown character press
- **filter** filters list of potential matches according to `matchmode` or provided `matchCondition`
- **focus** automatically focuses closest match (makes it the activedescendant)
- **check** automatically checks/selects closest match when `selection-follows-focus` is enabled (this is the default configuration)
- **complete** completes the textbox value inline (the 'missing characters' will be added as selected text)
When `autocomplete="none"` is configured, the suggested options in the overlay are not filtered
based on the characters typed in the textbox.
Selection will happen manually by the user.
```js preview-story
export const autocompleteNone = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
When `autocomplete="list"` is configured, it will filter listbox suggestions based on textbox value.
```js preview-story
export const autocompleteList = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
When `autocomplete="inline"` is configured, it will present a value completion prediction inside the text input itself.
It does NOT filter list of potential matches.
```js preview-story
export const autocompleteInline = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
When `autocomplete="both"` is configured, it combines the filtered list from `'list'` with the text input value completion prediction from `'inline'`.
This is the default value for `autocomplete`.
```js preview-story
export const autocompleteBoth = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
## Match Mode
When `match-mode="begin"` is applied, the entered text in the textbox only filters
options whose values begin with the entered text. For instance, the entered text 'ch' will match
with value 'Chard', but not with 'Artichoke'.
By default `match-mode="all"` is applied. This will also match parts of a word.
So 'ch' will both match 'Chard' and 'Artichoke'.
```js preview-story
export const matchModeBegin = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
```js preview-story
export const matchModeAll = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
When the preconfigurable `match-mode` conditions are not sufficient,
one can define a custom matching function.
The example below matches when the Levenshtein distance is below 3 (including some other conditions).
```js preview-story
export const customMatchCondition = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
## Options
```js preview-story
export const showAllOnEmpty = () => html`
${lazyRender(
listboxData.map(entry => html` ${entry} `),
)}
`;
```
### Changing defaults
By default `selection-follows-focus` will be true (aligned with the
wai-aria examples and the native `