8.0k New

Command

Command menu for search and quick actions.

Docs API Reference

Epicenter

Local-first, open source apps

Special Sponsor
<script lang="ts">
  import CalculatorIcon from "@lucide/svelte/icons/calculator";
  import CalendarIcon from "@lucide/svelte/icons/calendar";
  import CreditCardIcon from "@lucide/svelte/icons/credit-card";
  import SettingsIcon from "@lucide/svelte/icons/settings";
  import SmileIcon from "@lucide/svelte/icons/smile";
  import UserIcon from "@lucide/svelte/icons/user";
  import * as Command from "$lib/components/ui/command/index.js";
</script>
 
<Command.Root class="max-w-sm rounded-lg border">
  <Command.Input placeholder="Type a command or search..." />
  <Command.List>
    <Command.Empty>No results found.</Command.Empty>
    <Command.Group heading="Suggestions">
      <Command.Item>
        <CalendarIcon />
        <span>Calendar</span>
      </Command.Item>
      <Command.Item>
        <SmileIcon />
        <span>Search Emoji</span>
      </Command.Item>
      <Command.Item disabled>
        <CalculatorIcon />
        <span>Calculator</span>
      </Command.Item>
    </Command.Group>
    <Command.Separator />
    <Command.Group heading="Settings">
      <Command.Item>
        <UserIcon />
        <span>Profile</span>
        <Command.Shortcut>⌘P</Command.Shortcut>
      </Command.Item>
      <Command.Item>
        <CreditCardIcon />
        <span>Billing</span>
        <Command.Shortcut>⌘B</Command.Shortcut>
      </Command.Item>
      <Command.Item>
        <SettingsIcon />
        <span>Settings</span>
        <Command.Shortcut>⌘S</Command.Shortcut>
      </Command.Item>
    </Command.Group>
  </Command.List>
</Command.Root>

About

The <Command /> component uses the Command component from Bits UI, which is inspired by cmdk.

Installation

pnpm dlx shadcn-svelte@latest add command

Usage

<script lang="ts">
  import * as Command from "$lib/components/ui/command/index.js";
</script>
<Command.Root>
  <Command.Input placeholder="Type a command or search..." />
  <Command.List>
    <Command.Empty>No results found.</Command.Empty>
    <Command.Group heading="Suggestions">
      <Command.Item>Calendar</Command.Item>
      <Command.Item>Search Emoji</Command.Item>
      <Command.Item>Calculator</Command.Item>
    </Command.Group>
    <Command.Separator />
    <Command.Group heading="Settings">
      <Command.Item>Profile</Command.Item>
      <Command.Item>Billing</Command.Item>
      <Command.Item>Settings</Command.Item>
    </Command.Group>
  </Command.List>
</Command.Root>

Basic

A simple command menu in a dialog.

Command Palette
Search for a command to run...
<script lang="ts">
  import * as Command from "$lib/components/ui/command/index.js";
  import { Button } from "$lib/components/ui/button/index.js";
 
  let open = $state(false);
</script>
 
<div class="flex flex-col gap-4">
  <Button onclick={() => (open = true)} variant="outline" class="w-fit"
    >Open Menu</Button
  >
  <Command.Dialog bind:open>
    <Command.Input placeholder="Type a command or search..." />
    <Command.List>
      <Command.Empty>No results found.</Command.Empty>
      <Command.Group heading="Suggestions">
        <Command.Item>Calendar</Command.Item>
        <Command.Item>Search Emoji</Command.Item>
        <Command.Item>Calculator</Command.Item>
      </Command.Group>
    </Command.List>
  </Command.Dialog>
</div>

Shortcuts

Command Palette
Search for a command to run...
<script lang="ts">
  import CreditCardIcon from "@lucide/svelte/icons/credit-card";
  import SettingsIcon from "@lucide/svelte/icons/settings";
  import UserIcon from "@lucide/svelte/icons/user";
  import * as Command from "$lib/components/ui/command/index.js";
  import { Button } from "$lib/components/ui/button/index.js";
 
  let open = $state(false);
</script>
 
<div class="flex flex-col gap-4">
  <Button onclick={() => (open = true)} variant="outline" class="w-fit"
    >Open Menu</Button
  >
  <Command.Dialog bind:open>
    <Command.Input placeholder="Type a command or search..." />
    <Command.List>
      <Command.Empty>No results found.</Command.Empty>
      <Command.Group heading="Settings">
        <Command.Item>
          <UserIcon />
          <span>Profile</span>
          <Command.Shortcut>⌘P</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <CreditCardIcon />
          <span>Billing</span>
          <Command.Shortcut>⌘B</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <SettingsIcon />
          <span>Settings</span>
          <Command.Shortcut>⌘S</Command.Shortcut>
        </Command.Item>
      </Command.Group>
    </Command.List>
  </Command.Dialog>
</div>

Groups

A command menu with groups, icons and separators.

Command Palette
Search for a command to run...
<script lang="ts">
  import CalculatorIcon from "@lucide/svelte/icons/calculator";
  import CalendarIcon from "@lucide/svelte/icons/calendar";
  import CreditCardIcon from "@lucide/svelte/icons/credit-card";
  import SettingsIcon from "@lucide/svelte/icons/settings";
  import SmileIcon from "@lucide/svelte/icons/smile";
  import UserIcon from "@lucide/svelte/icons/user";
  import * as Command from "$lib/components/ui/command/index.js";
  import { Button } from "$lib/components/ui/button/index.js";
 
  let open = $state(false);
</script>
 
<div class="flex flex-col gap-4">
  <Button onclick={() => (open = true)} variant="outline" class="w-fit"
    >Open Menu</Button
  >
  <Command.Dialog bind:open>
    <Command.Input placeholder="Type a command or search..." />
    <Command.List>
      <Command.Empty>No results found.</Command.Empty>
      <Command.Group heading="Suggestions">
        <Command.Item>
          <CalendarIcon />
          <span>Calendar</span>
        </Command.Item>
        <Command.Item>
          <SmileIcon />
          <span>Search Emoji</span>
        </Command.Item>
        <Command.Item>
          <CalculatorIcon />
          <span>Calculator</span>
        </Command.Item>
      </Command.Group>
      <Command.Separator />
      <Command.Group heading="Settings">
        <Command.Item>
          <UserIcon />
          <span>Profile</span>
          <Command.Shortcut>⌘P</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <CreditCardIcon />
          <span>Billing</span>
          <Command.Shortcut>⌘B</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <SettingsIcon />
          <span>Settings</span>
          <Command.Shortcut>⌘S</Command.Shortcut>
        </Command.Item>
      </Command.Group>
    </Command.List>
  </Command.Dialog>
</div>

Scrollable

Scrollable command menu with multiple items.

Command Palette
Search for a command to run...
<script lang="ts">
  import BellIcon from "@lucide/svelte/icons/bell";
  import CalculatorIcon from "@lucide/svelte/icons/calculator";
  import CalendarIcon from "@lucide/svelte/icons/calendar";
  import CircleQuestionMarkIcon from "@lucide/svelte/icons/circle-question-mark";
  import ClipboardPasteIcon from "@lucide/svelte/icons/clipboard-paste";
  import CodeIcon from "@lucide/svelte/icons/code";
  import CopyIcon from "@lucide/svelte/icons/copy";
  import CreditCardIcon from "@lucide/svelte/icons/credit-card";
  import FileTextIcon from "@lucide/svelte/icons/file-text";
  import FolderIcon from "@lucide/svelte/icons/folder";
  import FolderPlusIcon from "@lucide/svelte/icons/folder-plus";
  import HouseIcon from "@lucide/svelte/icons/house";
  import ImageIcon from "@lucide/svelte/icons/image";
  import InboxIcon from "@lucide/svelte/icons/inbox";
  import LayoutGridIcon from "@lucide/svelte/icons/layout-grid";
  import ListIcon from "@lucide/svelte/icons/list";
  import PlusIcon from "@lucide/svelte/icons/plus";
  import ScissorsIcon from "@lucide/svelte/icons/scissors";
  import SettingsIcon from "@lucide/svelte/icons/settings";
  import TrashIcon from "@lucide/svelte/icons/trash";
  import UserIcon from "@lucide/svelte/icons/user";
  import ZoomInIcon from "@lucide/svelte/icons/zoom-in";
  import ZoomOutIcon from "@lucide/svelte/icons/zoom-out";
  import * as Command from "$lib/components/ui/command/index.js";
  import { Button } from "$lib/components/ui/button/index.js";
 
  let open = $state(false);
</script>
 
<div class="flex flex-col gap-4">
  <Button onclick={() => (open = true)} variant="outline" class="w-fit"
    >Open Menu</Button
  >
  <Command.Dialog bind:open>
    <Command.Input placeholder="Type a command or search..." />
    <Command.List>
      <Command.Empty>No results found.</Command.Empty>
      <Command.Group heading="Navigation">
        <Command.Item>
          <HouseIcon />
          <span>Home</span>
          <Command.Shortcut>⌘H</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <InboxIcon />
          <span>Inbox</span>
          <Command.Shortcut>⌘I</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <FileTextIcon />
          <span>Documents</span>
          <Command.Shortcut>⌘D</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <FolderIcon />
          <span>Folders</span>
          <Command.Shortcut>⌘F</Command.Shortcut>
        </Command.Item>
      </Command.Group>
      <Command.Separator />
      <Command.Group heading="Actions">
        <Command.Item>
          <PlusIcon />
          <span>New File</span>
          <Command.Shortcut>⌘N</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <FolderPlusIcon />
          <span>New Folder</span>
          <Command.Shortcut>⇧⌘N</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <CopyIcon />
          <span>Copy</span>
          <Command.Shortcut>⌘C</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <ScissorsIcon />
          <span>Cut</span>
          <Command.Shortcut>⌘X</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <ClipboardPasteIcon />
          <span>Paste</span>
          <Command.Shortcut>⌘V</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <TrashIcon />
          <span>Delete</span>
          <Command.Shortcut>⌫</Command.Shortcut>
        </Command.Item>
      </Command.Group>
      <Command.Separator />
      <Command.Group heading="View">
        <Command.Item>
          <LayoutGridIcon />
          <span>Grid View</span>
        </Command.Item>
        <Command.Item>
          <ListIcon />
          <span>List View</span>
        </Command.Item>
        <Command.Item>
          <ZoomInIcon />
          <span>Zoom In</span>
          <Command.Shortcut>⌘+</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <ZoomOutIcon />
          <span>Zoom Out</span>
          <Command.Shortcut>⌘-</Command.Shortcut>
        </Command.Item>
      </Command.Group>
      <Command.Separator />
      <Command.Group heading="Account">
        <Command.Item>
          <UserIcon />
          <span>Profile</span>
          <Command.Shortcut>⌘P</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <CreditCardIcon />
          <span>Billing</span>
          <Command.Shortcut>⌘B</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <SettingsIcon />
          <span>Settings</span>
          <Command.Shortcut>⌘S</Command.Shortcut>
        </Command.Item>
        <Command.Item>
          <BellIcon />
          <span>Notifications</span>
        </Command.Item>
        <Command.Item>
          <CircleQuestionMarkIcon />
          <span>Help & Support</span>
        </Command.Item>
      </Command.Group>
      <Command.Separator />
      <Command.Group heading="Tools">
        <Command.Item>
          <CalculatorIcon />
          <span>Calculator</span>
        </Command.Item>
        <Command.Item>
          <CalendarIcon />
          <span>Calendar</span>
        </Command.Item>
        <Command.Item>
          <ImageIcon />
          <span>Image Editor</span>
        </Command.Item>
        <Command.Item>
          <CodeIcon />
          <span>Code Editor</span>
        </Command.Item>
      </Command.Group>
    </Command.List>
  </Command.Dialog>
</div>