Skip to content

菜单 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/domdom.sceneOverlay)、core/statesetPopupOpen
  • 被各菜单 / 弹窗浮层消费

UI 入口

  • 菜单层级 / 入口函数 / 快捷键统一由 menu-map.md 机器生成(勿手改)。
  • 运行时动态生成的菜单项(renderCustom / slideRow 等)无法静态提取,缺口由本卡正文说明。