Installation

pnpm dlx shadcn@latest add @cortexcn/commandUsage
import { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandShortcut, CommandSeparator } from "@/components/command";Examples
Inline
import { Card, CardContent } from "@/components/card"import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from "@/components/command"import { CalculatorIcon, CalendarIcon, CreditCardIcon, SettingsIcon, SmileIcon, UserIcon } from "lucide-react"export function CommandInline() { return ( <div className="flex flex-col gap-6"> <Card className="w-full p-0"> <CardContent className="p-0"> <Command> <CommandInput placeholder="Type a command or search..." /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup heading="Suggestions"> <CommandItem> <CalendarIcon /> <span>Calendar</span> </CommandItem> <CommandItem> <SmileIcon /> <span>Search Emoji</span> </CommandItem> <CommandItem> <CalculatorIcon /> <span>Calculator</span> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="Settings"> <CommandItem> <UserIcon /> <span>Profile</span> <CommandShortcut>⌘P</CommandShortcut> </CommandItem> <CommandItem> <CreditCardIcon /> <span>Billing</span> <CommandShortcut>⌘B</CommandShortcut> </CommandItem> <CommandItem> <SettingsIcon /> <span>Settings</span> <CommandShortcut>⌘S</CommandShortcut> </CommandItem> </CommandGroup> </CommandList> </Command> </CardContent> </Card> </div> )}Basic
Command Palette
Search for a command to run...
import * as React from "react"import { Button } from "@/components/button"import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList } from "@/components/command"export function CommandBasic() { const [open, setOpen] = React.useState(false) return ( <div className="flex flex-col gap-6"> <div className="flex flex-col gap-4"> <Button onClick={() => setOpen(true)} variant="outline" className="w-fit" > Open Menu </Button> <CommandDialog open={open} onOpenChange={setOpen}> <Command> <CommandInput placeholder="Type a command or search..." /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup heading="Suggestions"> <CommandItem>Calendar</CommandItem> <CommandItem>Search Emoji</CommandItem> <CommandItem>Calculator</CommandItem> </CommandGroup> </CommandList> </Command> </CommandDialog> </div> </div> )}With shortcuts
Command Palette
Search for a command to run...
import * as React from "react"import { Button } from "@/components/button"import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandShortcut } from "@/components/command"import { CreditCardIcon, SettingsIcon, UserIcon } from "lucide-react"export function CommandWithShortcuts() { const [open, setOpen] = React.useState(false) return ( <div className="flex flex-col gap-6"> <div className="flex flex-col gap-4"> <Button onClick={() => setOpen(true)} variant="outline" className="w-fit" > Open Menu </Button> <CommandDialog open={open} onOpenChange={setOpen}> <Command> <CommandInput placeholder="Type a command or search..." /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup heading="Settings"> <CommandItem> <UserIcon /> <span>Profile</span> <CommandShortcut>⌘P</CommandShortcut> </CommandItem> <CommandItem> <CreditCardIcon /> <span>Billing</span> <CommandShortcut>⌘B</CommandShortcut> </CommandItem> <CommandItem> <SettingsIcon /> <span>Settings</span> <CommandShortcut>⌘S</CommandShortcut> </CommandItem> </CommandGroup> </CommandList> </Command> </CommandDialog> </div> </div> )}With groups
Command Palette
Search for a command to run...
import * as React from "react"import { Button } from "@/components/button"import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from "@/components/command"import { CalculatorIcon, CalendarIcon, CreditCardIcon, SettingsIcon, SmileIcon, UserIcon } from "lucide-react"export function CommandWithGroups() { const [open, setOpen] = React.useState(false) return ( <div className="flex flex-col gap-6"> <div className="flex flex-col gap-4"> <Button onClick={() => setOpen(true)} variant="outline" className="w-fit" > Open Menu </Button> <CommandDialog open={open} onOpenChange={setOpen}> <Command> <CommandInput placeholder="Type a command or search..." /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup heading="Suggestions"> <CommandItem> <CalendarIcon /> <span>Calendar</span> </CommandItem> <CommandItem> <SmileIcon /> <span>Search Emoji</span> </CommandItem> <CommandItem> <CalculatorIcon /> <span>Calculator</span> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="Settings"> <CommandItem> <UserIcon /> <span>Profile</span> <CommandShortcut>⌘P</CommandShortcut> </CommandItem> <CommandItem> <CreditCardIcon /> <span>Billing</span> <CommandShortcut>⌘B</CommandShortcut> </CommandItem> <CommandItem> <SettingsIcon /> <span>Settings</span> <CommandShortcut>⌘S</CommandShortcut> </CommandItem> </CommandGroup> </CommandList> </Command> </CommandDialog> </div> </div> )}Many groups and items
Command Palette
Search for a command to run...
import * as React from "react"import { Button } from "@/components/button"import { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut } from "@/components/command"import { BellIcon, CalculatorIcon, CalendarIcon, ClipboardPasteIcon, CodeIcon, CopyIcon, CreditCardIcon, FileTextIcon, FolderIcon, FolderPlusIcon, HelpCircleIcon, HomeIcon, ImageIcon, InboxIcon, LayoutGridIcon, ListIcon, PlusIcon, ScissorsIcon, SettingsIcon, TrashIcon, UserIcon, ZoomInIcon, ZoomOutIcon } from "lucide-react"export function CommandManyItems() { const [open, setOpen] = React.useState(false) return ( <div className="flex flex-col gap-6"> <div className="flex flex-col gap-4"> <Button onClick={() => setOpen(true)} variant="outline" className="w-fit" > Open Menu </Button> <CommandDialog open={open} onOpenChange={setOpen}> <Command> <CommandInput placeholder="Type a command or search..." /> <CommandList> <CommandEmpty>No results found.</CommandEmpty> <CommandGroup heading="Navigation"> <CommandItem> <HomeIcon /> <span>Home</span> <CommandShortcut>⌘H</CommandShortcut> </CommandItem> <CommandItem> <InboxIcon /> <span>Inbox</span> <CommandShortcut>⌘I</CommandShortcut> </CommandItem> <CommandItem> <FileTextIcon /> <span>Documents</span> <CommandShortcut>⌘D</CommandShortcut> </CommandItem> <CommandItem> <FolderIcon /> <span>Folders</span> <CommandShortcut>⌘F</CommandShortcut> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="Actions"> <CommandItem> <PlusIcon /> <span>New File</span> <CommandShortcut>⌘N</CommandShortcut> </CommandItem> <CommandItem> <FolderPlusIcon /> <span>New Folder</span> <CommandShortcut>⇧⌘N</CommandShortcut> </CommandItem> <CommandItem> <CopyIcon /> <span>Copy</span> <CommandShortcut>⌘C</CommandShortcut> </CommandItem> <CommandItem> <ScissorsIcon /> <span>Cut</span> <CommandShortcut>⌘X</CommandShortcut> </CommandItem> <CommandItem> <ClipboardPasteIcon /> <span>Paste</span> <CommandShortcut>⌘V</CommandShortcut> </CommandItem> <CommandItem> <TrashIcon /> <span>Delete</span> <CommandShortcut>⌫</CommandShortcut> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="View"> <CommandItem> <LayoutGridIcon /> <span>Grid View</span> </CommandItem> <CommandItem> <ListIcon /> <span>List View</span> </CommandItem> <CommandItem> <ZoomInIcon /> <span>Zoom In</span> <CommandShortcut>⌘+</CommandShortcut> </CommandItem> <CommandItem> <ZoomOutIcon /> <span>Zoom Out</span> <CommandShortcut>⌘-</CommandShortcut> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="Account"> <CommandItem> <UserIcon /> <span>Profile</span> <CommandShortcut>⌘P</CommandShortcut> </CommandItem> <CommandItem> <CreditCardIcon /> <span>Billing</span> <CommandShortcut>⌘B</CommandShortcut> </CommandItem> <CommandItem> <SettingsIcon /> <span>Settings</span> <CommandShortcut>⌘S</CommandShortcut> </CommandItem> <CommandItem> <BellIcon /> <span>Notifications</span> </CommandItem> <CommandItem> <HelpCircleIcon /> <span>Help & Support</span> </CommandItem> </CommandGroup> <CommandSeparator /> <CommandGroup heading="Tools"> <CommandItem> <CalculatorIcon /> <span>Calculator</span> </CommandItem> <CommandItem> <CalendarIcon /> <span>Calendar</span> </CommandItem> <CommandItem> <ImageIcon /> <span>Image Editor</span> </CommandItem> <CommandItem> <CodeIcon /> <span>Code Editor</span> </CommandItem> </CommandGroup> </CommandList> </Command> </CommandDialog> </div> </div> )}Adapted from the shadcn/ui Command (MIT).
