command-dialog

PreviousNext
Docs
takiexample

Preview

Loading preview…
registry/new-york/examples/command-dialog.tsx
"use client"

import * as React from "react"
import {
  Calculator,
  Calendar,
  CreditCard,
  Settings,
  Smile,
  User,
} from "lucide-react"

import {
  Command,
  CommandDialog,
  CommandGroup,
  CommandInput,
  CommandItem,
  CommandList,
  CommandSeparator,
  CommandShortcut,
} from "@/registry/new-york/ui/command"

export default function CommandDialogDemo() {
  const [open, setOpen] = React.useState(false)

  React.useEffect(() => {
    const down = (e: KeyboardEvent) => {
      if (e.key === "j" && (e.metaKey || e.ctrlKey)) {
        e.preventDefault()
        setOpen((open) => !open)
      }
    }

    document.addEventListener("keydown", down)
    return () => document.removeEventListener("keydown", down)
  }, [])

  return (
    <>
      <p className="text-muted-foreground text-sm">
        Press{" "}
        <kbd className="bg-muted text-muted-foreground pointer-events-none inline-flex h-5 items-center gap-1 rounded border px-1.5 font-mono text-[10px] font-medium opacity-100 select-none">
          <span className="text-xs">⌘</span>J
        </kbd>
      </p>
      <Command>
        <CommandDialog isOpen={open} onOpenChange={setOpen}>
          <CommandInput autoFocus placeholder="Type a command or search..." />
          <CommandList emptyMessage="No results found.">
            <CommandGroup heading="Suggestions">
              <CommandItem id="calendar" textValue="Calendar">
                <Calendar />
                <span>Calendar</span>
              </CommandItem>
              <CommandItem id="search-emoji" textValue="Search Emoji">
                <Smile />
                <span>Search Emoji</span>
              </CommandItem>
              <CommandItem id="calculator" textValue="Calculator">
                <Calculator />
                <span>Calculator</span>
              </CommandItem>
            </CommandGroup>
            <CommandSeparator />
            <CommandGroup heading="Settings">
              <CommandItem id="profile" textValue="Profile">
                <User />
                <span>Profile</span>
                <CommandShortcut>⌘P</CommandShortcut>
              </CommandItem>
              <CommandItem id="billing" textValue="Billing">
                <CreditCard />
                <span>Billing</span>
                <CommandShortcut>⌘B</CommandShortcut>
              </CommandItem>
              <CommandItem id="settings" textValue="Settings">
                <Settings />
                <span>Settings</span>
                <CommandShortcut>⌘S</CommandShortcut>
              </CommandItem>
            </CommandGroup>
          </CommandList>
        </CommandDialog>
      </Command>
    </>
  )
}

Installation

npx shadcn@latest add @taki/command-dialog

Usage

import { CommandDialog } from "@/components/command-dialog"
<CommandDialog />