导航组件
命令面板
基于 cmdk 的快速命令搜索面板,支持分组、快捷键、空状态,可嵌入对话框中作为全局命令面板使用。
安装
bash
pnpm dlx shadcn@latest add command -c packages/react基础
tsx
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from "@polyui/react/command"
export function CommandBasic() {
return (
<Command className="rounded-xl border shadow-sm max-w-sm">
<CommandInput placeholder="Type a command or search..." />
<CommandList>
<CommandEmpty>No results found.</CommandEmpty>
<CommandGroup heading="Suggestions">
<CommandItem>Calendar</CommandItem>
<CommandItem>Calculator</CommandItem>
</CommandGroup>
<CommandSeparator />
<CommandGroup heading="Settings">
<CommandItem>
Profile
<CommandShortcut>⌘P</CommandShortcut>
</CommandItem>
<CommandItem>
Settings
<CommandShortcut>⌘S</CommandShortcut>
</CommandItem>
</CommandGroup>
</CommandList>
</Command>
)
}带快捷键
tsx
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator, CommandShortcut } from "@polyui/react/command"
export function CommandWithShortcuts() {
return (
<Command className="rounded-xl border shadow-sm max-w-sm">
<CommandInput placeholder="Search commands..." />
<CommandList>
<CommandEmpty>No results found.</CommandEmpty>
<CommandGroup heading="Actions">
<CommandItem>
New File
<CommandShortcut>⌘N</CommandShortcut>
</CommandItem>
<CommandItem>
Open File
<CommandShortcut>⌘O</CommandShortcut>
</CommandItem>
<CommandItem>
Save
<CommandShortcut>⌘S</CommandShortcut>
</CommandItem>
<CommandItem>
Find
<CommandShortcut>⌘F</CommandShortcut>
</CommandItem>
</CommandGroup>
<CommandSeparator />
<CommandGroup heading="Navigation">
<CommandItem>
Go to Line
<CommandShortcut>⌃G</CommandShortcut>
</CommandItem>
<CommandItem>
Go to Symbol
<CommandShortcut>⌘⇧O</CommandShortcut>
</CommandItem>
</CommandGroup>
</CommandList>
</Command>
)
}分组
tsx
import { Command, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem, CommandSeparator } from "@polyui/react/command"
export function CommandGroups() {
return (
<Command className="rounded-xl border shadow-sm max-w-sm">
<CommandInput placeholder="Search..." />
<CommandList>
<CommandEmpty>No results found.</CommandEmpty>
<CommandGroup heading="Suggestions">
<CommandItem>Calendar</CommandItem>
<CommandItem>Calculator</CommandItem>
<CommandItem>Notes</CommandItem>
</CommandGroup>
<CommandSeparator />
<CommandGroup heading="Settings">
<CommandItem>Profile</CommandItem>
<CommandItem>Billing</CommandItem>
<CommandItem>Settings</CommandItem>
</CommandGroup>
</CommandList>
</Command>
)
}对话框
Press ⌘K or click the button to open
Command Palette
Search for a command to run...
tsx
import { useState, useEffect } from "react"
import { Command, CommandDialog, CommandInput, CommandList, CommandEmpty, CommandGroup, CommandItem } from "@polyui/react/command"
import { Button } from "@polyui/react/button"
export function CommandWithDialog() {
const [open, setOpen] = useState(false)
useEffect(() => {
const handler = (e: KeyboardEvent) => {
if (e.key === "k" && (e.metaKey || e.ctrlKey)) {
e.preventDefault()
setOpen((v) => !v)
}
}
document.addEventListener("keydown", handler)
return () => document.removeEventListener("keydown", handler)
}, [])
return (
<div className="flex flex-col items-center gap-4">
<p className="text-sm text-muted-foreground">
Press{" "}
<kbd className="pointer-events-none inline-flex h-5 select-none items-center gap-1 rounded border bg-muted px-1.5 font-mono text-[10px] font-medium text-muted-foreground">
<span className="text-xs">⌘</span>K
</kbd>{" "}
or click the button to open
</p>
<Button variant="outline" onClick={() => setOpen(true)}>
Open Command Palette
</Button>
<CommandDialog open={open} onOpenChange={setOpen}>
<CommandInput placeholder="Search for a command..." />
<CommandList>
<CommandEmpty>No results found.</CommandEmpty>
<CommandGroup heading="Suggestions">
<CommandItem onSelect={() => setOpen(false)}>Home</CommandItem>
<CommandItem onSelect={() => setOpen(false)}>Settings</CommandItem>
</CommandGroup>
</CommandList>
</CommandDialog>
</div>
)
}属性
CommandDialog
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
open | boolean | — | 受控开关状态。 |
onOpenChange | (open: boolean) => void | — | 状态变化回调。 |
title | string | "Command Palette" | 对话框标题(无障碍)。 |
description | string | "Search for a command to run..." | 对话框描述(无障碍)。 |
CommandItem
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
onSelect | (value: string) => void | — | 选中该项时的回调。 |
disabled | boolean | false | 禁用该项。 |
value | string | — | 用于搜索过滤的值(默认取文本内容)。 |