90.4k

Combobox

Autocomplete input and command palette with a list of suggestions.

Installation

The Combobox is built using a composition of the <Popover /> and the <Command /> components.

See installation instructions for the Popover and the Command components.

Usage

components/example-combobox.tsx
"use client"   import * as React from "react" import { CheckIcon, ChevronsUpDownIcon } from "lucide-react"   import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" import {  Command,  CommandEmpty,  CommandGroup,  CommandInput,  CommandItem,  CommandList, } from "@/components/ui/command" import {  Popover,  PopoverContent,  PopoverTrigger, } from "@/components/ui/popover"   const frameworks = [  {  value: "next.js",  label: "Next.js",  },  {  value: "sveltekit",  label: "SvelteKit",  },  {  value: "nuxt.js",  label: "Nuxt.js",  },  {  value: "remix",  label: "Remix",  },  {  value: "astro",  label: "Astro",  }, ]   export function ExampleCombobox() {  const [open, setOpen] = React.useState(false)  const [value, setValue] = React.useState("")    return (  <Popover open={open} onOpenChange={setOpen}>  <PopoverTrigger asChild>  <Button  variant="outline"  role="combobox"  aria-expanded={open}  className="w-[200px] justify-between"  >  {value  ? frameworks.find((framework) => framework.value === value)?.label  : "Select framework..."}  <ChevronsUpDownIcon className="ml-2 h-4 w-4 shrink-0 opacity-50" />  </Button>  </PopoverTrigger>  <PopoverContent className="w-[200px] p-0">  <Command>  <CommandInput placeholder="Search framework..." />  <CommandList>  <CommandEmpty>No framework found.</CommandEmpty>  <CommandGroup>  {frameworks.map((framework) => (  <CommandItem  key={framework.value}  value={framework.value}  onSelect={(currentValue) => {  setValue(currentValue === value ? "" : currentValue)  setOpen(false)  }}  >  <CheckIcon  className={cn(  "mr-2 h-4 w-4",  value === framework.value ? "opacity-100" : "opacity-0"  )}  />  {framework.label}  </CommandItem>  ))}  </CommandGroup>  </CommandList>  </Command>  </PopoverContent>  </Popover>  ) }

Examples

Combobox

Popover

Responsive

You can create a responsive combobox by using the <Popover /> on desktop and the <Drawer /> components on mobile.

Form