Skyroc UI
弹层覆盖

Command

用于搜索、筛选并执行命令的命令面板组件

命令面板(Command)基于 cmdk 封装,用于构建可搜索的操作入口、快捷跳转、全局命令菜单或局部筛选列表。

import {
  Command,
  CommandDialog,
  CommandEmpty,
  CommandGroup,
  CommandInput,
  CommandItem,
  CommandList,
  CommandLoading,
  CommandRoot,
  CommandSeparator,
  CommandShortcut
} from '@skyroc/web-ui';

架构说明

Command 提供两种使用方式:主组件通过 items 数据驱动渲染完整命令面板;基础子组件可用于更细粒度的自定义组合。

  • Command:数据驱动主组件,自动组合输入框、列表、空状态和选项。
  • CommandDialog:用 Dialog 包裹的命令面板,适合全局快捷命令入口。
  • CommandRoot:cmdk 根容器。
  • CommandInput:搜索输入框,默认带搜索图标,支持前后插槽。
  • CommandList:命令列表滚动容器。
  • CommandGroup:分组容器,支持分组标题。
  • CommandItem:单个命令项,支持前置图标、后置内容和快捷键。
  • CommandSeparator:分隔线。
  • CommandEmpty:无匹配结果时显示。
  • CommandShortcut:快捷键展示。
  • CommandLoading:直接从 cmdk 透出,用于加载状态。

何时使用

  • 需要通过输入快速筛选并执行操作时。
  • 需要构建全局命令菜单、快捷跳转或应用内搜索入口时。
  • 命令项需要分组、图标、快捷键和空状态时。
  • 如果只是普通下拉选择,优先使用 Select;如果只是简单菜单,优先使用 DropdownMenu 或 Menu。

基础用法

通过 items 传入命令数据。每个 option 可以是分组、分隔线或单个命令项。

Preview
Code
Loading...

弹窗命令面板

CommandDialog 提供 Dialog 容器,适合全局命令面板。打开状态通过 openonOpenChange 控制。

Preview
Code
Loading...

数据结构

items 支持三种节点:

类型识别方式说明
item默认,或 type: 'item'可选择命令项
group包含 children,或 type: 'group'分组选项
separatortype: 'separator'分隔线

API

Command

通用属性参考:根容器支持 cmdk Command Root 的属性;主组件使用 items 数据驱动渲染,不接收自定义 children。

属性说明类型默认值
items*命令选项数据,支持 item / group / separatorCommandOptionData[]-
empty无匹配结果时显示的内容ReactNode'No results.'
inputProps传递给 CommandInput 的属性CommandInputProps-
size尺寸,影响输入框、列表、选项和快捷键间距'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className根容器 class;存在时优先于 classNames.rootClassValue-
classNames各 slot 的自定义 classCommandClassNames-
valuecmdk 受控搜索值string-
onValueChangecmdk 搜索值变化回调(value: string) => void-
filtercmdk 自定义筛选函数(value: string, search: string, keywords?: string[]) => number-
shouldFilter是否启用 cmdk 内置筛选boolean-

CommandDialog

CommandDialog 负责 Dialog 外壳,命令内容通常放入其 children 中。

属性说明类型默认值
children弹窗内容,通常是 CommandReactNode-
open受控打开状态boolean-
defaultOpen非受控默认打开状态boolean-
onOpenChange打开状态变化回调(open: boolean) => void-
title弹窗标题ReactNode-
description弹窗描述ReactNode-
className内容容器 class;存在时优先于 classNames.contentClassValue-
classNamesDialog 相关 slot classCommandDialogClassNames-
size内容容器尺寸,透传给 DialogContent'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'-

子组件

属性说明类型默认值
CommandRootcmdk 根容器CommandRootProps-
CommandInput搜索输入框CommandInputProps-
CommandList命令列表容器CommandListProps-
CommandEmpty空状态内容CommandEmptyProps-
CommandGroup命令分组容器CommandGroupProps-
CommandItem单个命令项CommandItemProps-
CommandSeparator分隔线CommandSeparatorProps-
CommandShortcut快捷键展示CommandShortcutProps-

类型

CommandProps

主组件属性。继承 CommandRootProps,但使用 items 数据驱动渲染命令列表。

字段类型说明
items*CommandOptionData[]命令选项数据。
emptyReactNode空状态内容。
inputPropsCommandInputProps输入框属性。
classNameClassValue根容器 class。
classNamesCommandClassNames各 slot 的自定义 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。
valuestringcmdk 搜索值。来自 CommandRootProps。
onValueChange(value: string) => void搜索值变化回调。来自 CommandRootProps。
filter(value: string, search: string, keywords?: string[]) => number自定义筛选函数。来自 CommandRootProps。
shouldFilterboolean是否启用内置筛选。来自 CommandRootProps。

CommandClassNames

Command 全部 slot 的 class 配置。

字段类型说明
rootClassValue根容器 class。
inputWrapperClassValue输入框外层容器 class。
inputIconClassValue默认搜索图标 class。
inputClassValue输入框 class。
listClassValue列表容器 class。
emptyClassValue空状态 class。
groupClassValue分组容器 class。
groupLabelClassValue分组标题 class。
itemClassValue命令项 class。
itemIconClassValue命令项前置图标 class。
separatorClassValue分隔线 class。
shortcutClassValue快捷键区域 class。
dialogClassValueDialog 场景预留 slot。

CommandGroupOptionProps

分组选项数据。

字段类型说明
type'group'显式声明为分组选项;包含 children 时可省略。
labelReactNode分组标题。
children*CommandOptionData[]分组内选项。
classNameClassValue分组容器 class。
classNamesPick<CommandClassNames, 'group' | 'groupLabel'>分组相关 slot class。

CommandItemOptionProps

单个命令项数据。

字段类型说明
type'item'显式声明为命令项;默认可省略。
labelReactNode命令项显示内容。
valuestringcmdk 命令值。
keywordsstring[]cmdk 搜索关键词。
disabledboolean禁用命令项。
onSelect(value: string) => void命令项被选择时触发。
leadingReactNode前置内容,常用于图标。
trailingReactNode后置内容。
shortcutstring | string[]快捷键展示。
classNameClassValue命令项 class。

CommandSeparatorOptionProps

分隔线选项数据。

字段类型说明
type*'separator'声明为分隔线。
alwaysRenderbooleancmdk 分隔线是否始终渲染。
classNameClassValue分隔线 class。

CommandInputProps

搜索输入框属性。继承 cmdk CommandInput 属性,并增加前后插槽和 slot class。

字段类型说明
placeholderstring占位文本。
valuestring受控输入值。
onValueChange(search: string) => void输入值变化回调。
leadingReactNode前置内容;默认显示搜索图标。
trailingReactNode后置内容。
classNameClassValue输入框 class。
classNamesPick<CommandClassNames, 'input' | 'inputIcon' | 'inputWrapper'>输入框相关 slot class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandItemProps

命令项组件属性。继承 cmdk CommandItem 属性,并增加插槽和快捷键。

字段类型说明
childrenReactNode命令项内容。
valuestringcmdk 命令值。
keywordsstring[]cmdk 搜索关键词。
disabledboolean禁用命令项。
onSelect(value: string) => void选择回调。
leadingReactNode前置内容。
trailingReactNode后置内容。
shortcutstring | string[]快捷键。
classNameClassValue命令项 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandDialogProps

弹窗命令面板属性。打开状态来自 Dialog Root,内容属性透传给 DialogContent。

字段类型说明
childrenReactNode弹窗内容。
openboolean受控打开状态。
defaultOpenboolean非受控默认打开状态。
onOpenChange(open: boolean) => void打开状态变化回调。
titleReactNode弹窗标题。
descriptionReactNode弹窗描述。
classNameClassValue内容容器 class。
classNamesCommandDialogClassNamesDialog 相关 slot class。
forceMounttrue强制挂载内容容器。来自 DialogContent。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'内容容器尺寸。

CommandDialogClassNames

CommandDialog 可配置的 Dialog slot class。

字段类型说明
overlayClassValue遮罩层 class。
contentClassValue内容容器 class。
closeClassValue关闭按钮 class。
headerClassValue头部 class。
titleClassValue标题 class。
descriptionClassValue描述 class。

CommandRootProps

cmdk 根容器属性。

字段类型说明
classNameClassValue根容器 class。
valuestring受控搜索值。
onValueChange(value: string) => void搜索值变化回调。
filter(value: string, search: string, keywords?: string[]) => number自定义筛选函数。
shouldFilterboolean是否启用内置筛选。
loopboolean键盘导航是否循环。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandListProps

命令列表容器属性。

字段类型说明
childrenReactNode列表内容。
classNameClassValue列表 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandEmptyProps

空状态属性。

字段类型说明
childrenReactNode空状态内容。
classNameClassValue空状态 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandGroupProps

分组组件属性。

字段类型说明
childrenReactNode分组内容。
headingReactNode分组标题。
classNameClassValue分组容器 class。
classNamesPick<CommandClassNames, 'group' | 'groupLabel'>分组相关 slot class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandSeparatorProps

分隔线组件属性。

字段类型说明
classNameClassValue分隔线 class。
alwaysRenderboolean是否始终渲染。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

CommandShortcutProps

快捷键展示组件属性。

字段类型说明
childrenReactNode自定义快捷键内容。
valuestring | string[]快捷键值。
classNameClassValue快捷键容器 class。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'尺寸。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page