项目正在快速迭代中,API 与视觉细节可能随版本调整,请勿用于生产环境。

EtCommandPalette · 命令面板 ​

底座命令面板的命令表适配器:条目来自注册表,快捷键平台符号化,最近使用可置顶。

vue
<script setup>
import { ref } from 'vue'
const open = ref(false)
const ctx = { hasSelection: true }
</script>

<template>
  <et-command-palette
    v-model="open"
    :registry="registry"
    :ctx="ctx"
    recent-key="my-app-recent"
    hotkey="mod+k"
    @command="onCommand"
  />
</template>

API ​

import { EtCommandPalette } from '@wil-works/evoke-tools-ui'公共工具命令功能块

Props

名称类型默认说明
registryObject必填命令注册表
modelValueBooleanfalse面板开关
ctxObject() => ({})推演 enabled 的上下文
placeholderString—不传则用底座自带占位符
recentKeyString''非空即按该键在 localStorage 存最近 5 个命令 id 并置顶
hotkeyString'mod+k'开面板快捷键;仅作声明与展示,全局绑定归消费方
runOnSelectBooleanfalse选中条目时的执行体归属(两种模式,默认走「声明式一致」): false(默认)—— 只 emit('command', id) 后返回 undefined 让底座关闭面板;是否执行、 如何执行完全由消费方接到 @command 后自行调 registry.run 决定。与 EtRibbonBar 的 @command / EtContextMenu 的 @command 约定一致(执行体归消费方),避免同一命令在两处 「一处自动跑、一处要自己跑」的分裂。 true —— 「快速自足」便捷模式:先 registry.run(id, ctx) 再 emit('command', id), 适合一次性演示 / 无集中命令总线的场景。两种模式下禁用命令都只保持面板打开、不 emit。

Emits

事件载荷说明
update:modelValuevaluev-model(modelValue)的写入
commandid, cmd.id条目被选中;载荷 = 命令 id。runOnSelect=false(默认)时只发不跑,执行归消费方

Slots

槽吃什么作用域
default触发器内容(透传底座;底座支持时生效,多数场景用键盘唤起)

暴露(ref 方法)

方法说明
open()打开面板(直通底座;与 v-model 等价,供命令式入口调用)
close()收起面板

键盘 · 可访问名 · 密度

键盘不接管按键
可访问名 无 ARIA 属性(原生语义)
密度件内无令牌引用

行为 ​

  • 条目由 registry.list() 生成:label = title、hint = desc、hotkey = 平台符号化 keys、group = group。
  • 禁用命令不过滤:item 标 disabled 且 action 返回 false,面板保持打开(用户要看见为什么不可用)。
  • 最近使用按「选中」记录,与是否自动执行无关;隐私模式下降级为不记录。
  • 打开时刷新一次(拿最新 enabled 与最近使用序)。
  • 暴露 open() / close()。

令牌与门禁 ​

  • 快捷键列走 runtime/keys 平台符号化,不手拼字符。
  • 焦点陷阱 / Esc / 焦点归还与 EtDialog、EtBackstage 同一套 runtime/focus/trap。
  • G3:状态只从 registry.state 读。