Combobox
Flexible and accessible combobox component with keyboard navigation support. Built on top of Dropdown and Popover modules.
Installation
import { Combobox } from '@svelte-atoms/core';Preset Configuration
Customize the combobox appearance using presets
You can customize the default styles for Combobox components by defining presets in your configuration:
Examples
Explore different combobox variations and use cases
Basic Combobox
Simple combobox with single selection
<script lang="ts">
import { Combobox } from '@svelte-atoms/core';
import { Input } from '@svelte-atoms/core';
let value = $state<string | undefined>();
let label = $state<string | undefined>();
const options = [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' }
];
</script>
<Combobox.Root bind:value bind:label>
<Combobox.Trigger base={Input.Root}>
<Combobox.Control placeholder="Select an option..." />
</Combobox.Trigger>
<Combobox.Content>
{#each options as option (option.value)}
<Combobox.Item value={option.value}>{option.label}</Combobox.Item>
{/each}
</Combobox.Content>
</Combobox.Root>Multiple Selection
Combobox with multiple selection support. Supports selecting from list items and creating custom entries by pressing Enter when in multiple mode.
<script lang="ts">
import { Combobox } from '@svelte-atoms/core';
import { Input } from '@svelte-atoms/core';
let values = $state<string[]>([]);
let labels = $state<string[]>([]);
const options = [
{ value: 'option1', label: 'Option 1' },
{ value: 'option2', label: 'Option 2' },
{ value: 'option3', label: 'Option 3' }
];
</script>
<Combobox.Root bind:values bind:labels multiple>
<Combobox.Trigger base={Input.Root} class="flex h-auto min-h-10 flex-col items-start gap-2">
<Combobox.Control placeholder="Select multiple options..." />
<Combobox.Selections />
</Combobox.Trigger>
<Combobox.Content>
{#each options as option (option.value)}
<Combobox.Item value={option.value}>{option.label}</Combobox.Item>
{/each}
</Combobox.Content>
</Combobox.Root>With Filtering
Combobox with search/filter functionality using the Query component and filterDropdownData helper
<script lang="ts">
import { Combobox } from '@svelte-atoms/core';
import { Input, Divider } from '@svelte-atoms/core';
import { filterDropdownData } from '@svelte-atoms/core/components/dropdown';
let value = $state<string | undefined>();
let label = $state<string | undefined>();
let currencies = [
{ value: 'usd', label: 'US Dollar' },
{ value: 'eur', label: 'Euro' },
{ value: 'gbp', label: 'British Pound' }
];
const filteredItems = filterDropdownData(
() => currencies,
(query, item) => item.label.toLowerCase().includes(query.toLowerCase())
);
</script>
<Combobox.Root bind:value bind:label>
<Combobox.Trigger base={Input.Root}>
<Input.Icon class="text-foreground/50">$</Input.Icon>
<Divider vertical class="mx-1" />
<Combobox.Control placeholder="Select a currency..." />
</Combobox.Trigger>
<Combobox.Content>
<input
bind:value={filteredItems.query}
class="border-border border-b px-4 py-3"
placeholder="Type to filter..."
/>
{#each filteredItems.current as item (item.value)}
<Combobox.Item value={item.value}>{item.label}</Combobox.Item>
{/each}
</Combobox.Content>
</Combobox.Root>API Reference
Combobox.Root Props
Combobox.Trigger Props
Inherits all props from the base component (typically Input.Root). Common props include class, as, and base.
Combobox.Item Props
Re-exported from Dropdown.Item. See Dropdown component documentation for full props list. Key props include value (string), data (custom data), and preset ('dropdown.item').
Combobox.Control Props
Combobox.Selections Props
Combobox.Selection Props
Available Components
Combobox.Root- Main combobox container (manages state)Combobox.Trigger- Trigger element (typically composed with Input.Root using base prop)Combobox.Control- Input control for filtering and displaying selected valueCombobox.Item- Individual selectable combobox itemCombobox.Selections- Container for displaying selected items (multi-select mode)Combobox.Arrow- Popover arrow indicator (re-exported from Dropdown)Combobox.Indicator- Custom indicator element (re-exported from Dropdown)Combobox.Content- List container for items (re-exported from Dropdown)Combobox.Group- Group container for items (re-exported from Dropdown)Combobox.Divider- Visual divider between items (re-exported from Dropdown)Combobox.Title- Title element for groups (re-exported from Dropdown)Combobox.Selection- Individual selection badge/chip (re-exported from Dropdown)Combobox.Placeholder- Placeholder element (re-exported from Dropdown)
Helper Functions
filterDropdownData
A reactive helper function for filtering dropdown/combobox data based on a query string.
Accessibility
Built-in Accessibility Features
- • Full ARIA attributes support with proper roles (combobox, listbox, option)
- • Keyboard navigation (Arrow keys to navigate, Escape to close, Enter to select)
- • Screen reader announcements for selection changes
- • Focus management with proper focus trapping
- • aria-activedescendant for highlighted items
- • aria-multiselectable for multiple selection mode
- • Proper labeling and descriptions