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