Appearance
菜单 Overlay 与 Wrapper 管理
系统概览
管理菜单 overlay 浮层与 .menu-wrapper 容器。从 @/core/utils 抽出(ADR-191 去桶化),因依赖 DOM 与 popup 状态而置于 menus 子系统而非 core。
核心职责
_onCloseAllOverlays回调钩子(setOnCloseAllOverlays注册,供外部统一拦截关闭)closeAllOverlays()— 关闭所有[data-overlay].visible、重置setPopupOpen(false)、aria-expanded=false、隐藏mmd-dialog-overlay,最后触发回调_menuWrapperRegistry: Map<menuId, HTMLElement>:getMenuWrapper(menuId)惰性创建.menu-wrapper挂到dom.sceneOverlay并仅显示当前;disposeMenuWrapper(menuId)移除并删除;clearAllMenuWrappers()全清
对外 API(节选)
setOnCloseAllOverlays(fn)closeAllOverlays()getMenuWrapper(menuId)/disposeMenuWrapper(menuId)/clearAllMenuWrappers()
关键约定
disposeMenuWrapper必须配对 DOM 移除与 registry 删除- overlay 关闭时
inert=true,防止键盘/AI 聚焦不可见元素
与其他子系统关系
- 依赖
core/dom(dom.sceneOverlay)、core/state(setPopupOpen) - 被各菜单 / 弹窗浮层消费
UI 入口
- 菜单层级 / 入口函数 / 快捷键统一由 menu-map.md 机器生成(勿手改)。
- 运行时动态生成的菜单项(renderCustom / slideRow 等)无法静态提取,缺口由本卡正文说明。