Docs
Combobox
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
"use client"
import * as React from "react"
import { Check, ChevronsUpDown } from "lucide-react"
import { cn } from "@/lib/utils"
import { Button } from "@brudi/react-button"
import {
Command,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
} from "@brudi/react-command"
import {
Popover,
PopoverContent,
PopoverTrigger,
} from "@brudi/react-popover"
const types = [
{
value: "native",
label: "Native Device",
},
{
value: "virtual",
label: "Virtual Thing",
},
{
value: "api",
label: "External API",
},
{
value: "custom",
label: "Custom",
},
]
export function ComboboxDemo() {
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
? thingTypes.find((thingType) => thingType.value === value)?.label
: "Select thingType..."}
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
</Button>
</PopoverTrigger>
<PopoverContent className="w-[200px] p-0">
<Command>
<CommandInput placeholder="Search type..." />
<CommandEmpty>No thingType found.</CommandEmpty>
<CommandGroup>
{thingTypes.map((thingType) => (
<CommandItem
key={thingType.value}
onSelect={(currentValue) => {
setValue(currentValue === value ? "" : currentValue)
setOpen(false)
}}
>
<Check
className={cn(
"mr-2 h-4 w-4",
value === thingType.value ? "opacity-100" : "opacity-0"
)}
/>
{thingType.label}
</CommandItem>
))}
</CommandGroup>
</Command>
</PopoverContent>
</Popover>
)
}
Examples
Combobox
Popover
Status
Dropdown menu
featureCreate a new project