右键打开文档操作;也可以聚焦后按 Shift + F10,或在触屏上长按。
区域外右键则是默认菜单:后退 / 前进 / 刷新 / 复制页面链接。
<div class="ctx-zone" tabindex="0" aria-label="文档操作区域" data-icen-context-menu="demo-file"> 右键打开文档操作;也可以聚焦后按 Shift + F10,或在触屏上长按。</div><p class="icen-dim" style="margin:8px 0 0">区域外右键则是默认菜单:后退 / 前进 / 刷新 / 复制页面链接。</p>
特性
- 注册:
registerContextMenu(id, items)注册;元素挂data-icen-context-menu="id"即命中 - 条目:支持 header / separator / danger / disabled
- 触屏:长按触发
- 单例:全局同时只存在一个菜单
接口
- 初始化
initContextMenu()(kit 一行入口可直接命名导入)- 导出
-
openContextMenucloseContextMenuregisterContextMenuunregisterContextMenu - 事件
-
icen:menu-selectdetail 契约见IcenEventMap - 类型
dist/behaviors/context-menu.d.mts(随 npm 包发布,含全部 JSDoc 约束)
安装
bun add @icen.ai/ui pnpm add @icen.ai/ui npm install @icen.ai/ui yarn add @icen.ai/ui 一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):
import '@icen.ai/ui/kit/context-menu';
也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add context-menu
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/menu.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
import { initContextMenu, registerContextMenu } from '@icen.ai/ui/behaviors/context-menu';registerContextMenu('demo-file', [ { type: 'header', label: 'report-2026.qmd', description: '文档 · 2.4 MB' }, { label: '重命名', iconName: 'edit', shortcut: 'F2', onClick: () => toast.success('重命名') }, { label: '复制链接', iconName: 'link', onClick: () => toast.success('已复制链接') }, { type: 'separator' }, { label: '移到回收站', iconName: 'trash', danger: true, shortcut: '⌫', onClick: () => toast.warn('已移到回收站') }, { label: '高级操作(不可用)', disabled: true },]);initContextMenu();