Combobox
Autocomplete input and command palette with a list of suggestions.
Installation
pnpm dlx shadcn-vue@latest add combobox
Usage
vue
<script setup lang="ts">
import { Check, Search } from 'lucide-vue-next'
import { ref } from 'vue'
import {
Combobox,
ComboboxAnchor,
ComboboxEmpty,
ComboboxGroup,
ComboboxInput,
ComboboxItem,
ComboboxItemIndicator,
ComboboxList,
} from '@/components/ui/combobox'
interface Framework { value: string, label: string }
const frameworks: Framework[] = [
{ value: 'next.js', label: 'Next.js' },
{ value: 'sveltekit', label: 'SvelteKit' },
{ value: 'nuxt', label: 'Nuxt' },
{ value: 'remix', label: 'Remix' },
{ value: 'astro', label: 'Astro' },
]
const value = ref<Framework | undefined>()
</script>
<template>
<Combobox v-model="value" by="value">
<ComboboxAnchor>
<div class="relative w-full max-w-sm items-center">
<ComboboxInput
class="pl-9"
:display-value="(val) => val?.label ?? ''"
placeholder="Select framework..."
/>
<span class="absolute start-0 inset-y-0 flex items-center justify-center px-3">
<Search class="size-4 text-muted-foreground" />
</span>
</div>
</ComboboxAnchor>
<ComboboxList>
<ComboboxEmpty>
No framework found.
</ComboboxEmpty>
<ComboboxGroup>
<ComboboxItem
v-for="framework in frameworks"
:key="framework.value"
:value="framework"
>
{{ framework.label }}
<ComboboxItemIndicator>
<Check class="ml-auto size-4" />
</ComboboxItemIndicator>
</ComboboxItem>
</ComboboxGroup>
</ComboboxList>
</Combobox>
</template>