浮层要收敛到一个共享 primitive

**所有弹出卡片(菜单/弹窗/下拉)应共用同一个 primitive,而不是每个局部各写一套。用户对这类浮层有一套固定规范,散着实现必然逐项漂移。**

用户定的浮层规范

  • 浅色模式白色 raised 底
  • 点击其他区域可关闭
  • 默认从触发器「右下」弹出,符合右手习惯
  • 开/关都有过渡动画(不要 display 硬切)
  • 每个选项都有 icon

共享 primitive 要承担的公共行为

  • portal 到 body + fixed 定位 + 视口夹取(clamp)
  • 外部点击、Escape 关闭;嵌套时 Escape 只关最上层(capture 阶段处理并阻止冒泡,避免一次 Escape 同时关掉下拉和整个弹窗)
  • 动画原点跟随 clamp 后的实际方向(被右边界拉左则 origin 切到 right,被底部拉上则切到 bottom),否则动效方向与弹出方向打架
  • 边界不只按 window:AI 栏/侧栏打开时,主工作区内的浮层要按主内容区域夹取,否则会压进 AI 栏

相关