下拉菜单

trigger + [data-dropdown-menu] 模板;面板 fixed 定位在 trigger 下方 4px,视口 12px margin 内 clamp,空间不足翻上。

<div class="dropdown" data-dropdown>  <button class="btn dropdown-trigger" data-dropdown-trigger aria-haspopup="menu">操作 ▾</button>  <div data-dropdown-menu hidden>    <div class="menu-label">文件</div>    <button class="menu-item pressable" id="dd-rename">      <span class="menu-item-icon"></span>      <span class="menu-item-label">重命名</span>      <span class="menu-item-shortcut">F2</span>    </button>    <button class="menu-item pressable" id="dd-share">      <span class="menu-item-icon"></span>      <span class="menu-item-label">分享</span>    </button>    <div class="menu-separator"></div>    <button class="menu-item pressable menu-item--danger" id="dd-delete">      <span class="menu-item-icon"></span>      <span class="menu-item-label">删除</span>      <span class="menu-item-shortcut"></span>    </button>  </div></div>

安装

bun add @icen.ai/ui

一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):

import { initDropdown } from '@icen.ai/ui/kit/dropdown';initDropdown();

也可以用脚手架直接打印引入行:

bunx --bun @icen.ai/ui add dropdown

Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/menu.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。

用法

import { initDropdown } from '@icen.ai/ui/behaviors/dropdown';initDropdown();// 面板由 JS portal 到 body;click / ArrowDown 打开,↑↓ 高亮,Enter 激活,Esc / 外点 / 滚动关闭