Command

A command palette component for keyboard-driven interactions.

Anatomy

<Command.Root>
  <Command.Input />
  <Command.List>
    <Command.Empty />
    <Command.Group>
      <Command.Item />
    </Command.Group>
    <Command.Separator />
    <Command.Group>
      <Command.Item />
    </Command.Group>
  </Command.List>
</Command.Root>
<Command.Dialog>
  <Command.Input />
  <Command.List>
    <Command.Group>
      <Command.Item />
    </Command.Group>
  </Command.List>
</Command.Dialog>

Usage

import { Command } from '@ivaldi/ui'
<Command.Root>
  <Command.Input placeholder="Type a command..." />
  <Command.List>
    <Command.Empty>No results found.</Command.Empty>
    <Command.Group heading="Actions">
      <Command.Item>New File</Command.Item>
      <Command.Item>Copy Link</Command.Item>
      <Command.Item>Share Document</Command.Item>
    </Command.Group>
  </Command.List>
</Command.Root>

With Dialog

const [open, setOpen] = useState(false)

return (
  <>
    <Button onClick={() => setOpen(true)}>
      Open Command Menu
    </Button>
    <Command.Dialog open={open} onOpenChange={setOpen}>
      <Command.Input />
      <Command.List>
        <Command.Group heading="Suggestions">
          <Command.Item onSelect={() => console.log('selected')}>
            Command palette
          </Command.Item>
        </Command.Group>
      </Command.List>
    </Command.Dialog>
  </>
)

With Icons

<Command.Root>
  <Command.Input placeholder="Search icons..." />
  <Command.List>
    <Command.Group heading="Icons">
      <Command.Item>
        <HomeIcon className="mr-2 size-4" />
        Home
      </Command.Item>
      <Command.Item>
        <SettingsIcon className="mr-2 size-4" />
        Settings
      </Command.Item>
      <Command.Item>
        <UserIcon className="mr-2 size-4" />
        Profile
      </Command.Item>
    </Command.Group>
  </Command.List>
</Command.Root>

With Shortcuts

<Command.Root>
  <Command.Input placeholder="Search commands..." />
  <Command.List>
    <Command.Group heading="Editor">
      <Command.Item>
        <div className="flex items-center justify-between w-full">
          <div className="flex items-center">
            <FileIcon className="mr-2 size-4" />
            New File
          </div>
          <span className="text-xs text-muted">⌘N</span>
        </div>
      </Command.Item>
      <Command.Item>
        <div className="flex items-center justify-between w-full">
          <div className="flex items-center">
            <SaveIcon className="mr-2 size-4" />
            Save
          </div>
          <span className="text-xs text-muted">⌘S</span>
        </div>
      </Command.Item>
    </Command.Group>
  </Command.List>
</Command.Root>

With Loading State

<Command.Root>
  <Command.Input placeholder="Search..." />
  <Command.List>
    {loading ? (
      <div className="p-4 text-center">
        <Spinner className="size-4" />
        <div className="text-sm text-muted">Loading results...</div>
      </div>
    ) : (
      <Command.Group heading="Results">
        <Command.Item>Result 1</Command.Item>
        <Command.Item>Result 2</Command.Item>
        <Command.Item>Result 3</Command.Item>
      </Command.Group>
    )}
  </Command.List>
</Command.Root>

Command.Root Props

PropTypeDefault
childrenReactNode
classNamestring
asChildboolean
labelstring
shouldFilterboolean
filterCommandFilter
valuestring
onValueChangefunction
loopboolean
disablePointerSelectionboolean
vimBindingsboolean

Command.Dialog Props

PropTypeDefault
triggerReactNode
titleReactNode
descriptionReactNode
footerReactNode
panelPropsany
blurboolean
childrenReactNode
openboolean
defaultOpenboolean
onOpenChangefunction
modalboolean
commandPropssee more"{}"

Command.Empty Props

PropTypeDefault
childrenReactNode
classNamestring
asChildboolean

Command.Group Props

PropTypeDefault
childrenReactNode
classNamestring
asChildboolean
headingReactNode
valuestring
forceMountboolean

Command.Input Props

PropTypeDefault
classNamestring
childrenReactNode
asChildboolean
valuestring
onValueChangefunction

Command.Item Props

PropTypeDefault
childrenReactNode
classNamestring
asChildboolean
disabledboolean
onSelectfunction
valuestring
keywordsstring[]
forceMountboolean

Command.List Props

PropTypeDefault
childrenReactNode
classNamestring
asChildboolean
labelstring

Command.Separator Props

PropTypeDefault
classNamestring
childrenReactNode
asChildboolean
alwaysRenderboolean

Command.Shortcut Props

PropTypeDefault
classNamestring
childrenReactNode