Skip to content

[Bug] 批注高亮块显示优先级仍高于会话顶栏,选区高亮与编号遮挡顶栏内容(同 #50 / #44 的层级问题) #62

Description

@Ztyss

环境

  • DSH Desktop 2.0.11(兼容模式窗口)/ 内核 0.1.5-rc.2 / Windows 11
  • @changfenhuang/dsh-annotation 1.4.10(npm 最新;已核对 main 上的 1.4.11-preview.1 变更日志,无相关修复)

现象

选中助手回复里靠近会话顶部的文本后,黄色选区高亮块(.dsh-ann-hl)连同蓝色编号胶囊(.dsh-ann-num,如「1」)会绘制在会话顶栏之上,把顶栏那一栏(标题 / 面包屑 / 右上操作按钮,._0cyzDW_header,min-height:76px)压住。

实测截图(窗口标题栏下方):一条约 230×14px 的黄色高亮横条 + 左端蓝色「1」胶囊,正好落在顶栏所占的横带里,顶栏内容被遮住。

复现

  1. 在会话顶部附近(顶栏下方一屏内)选中助手文本 → 出现高亮矩形与编号;
  2. 向上滚动,让被批注的原文滚到顶栏之下 —— 高亮矩形仍按视口坐标绘制,于是压在顶栏上;
  3. 或:已有批注时切换会话 / 刷新重绘,高亮同样可能落在顶栏区域(标记层是常驻的 body 级图层,不受会话滚动容器裁剪)。

根因(读 1.4.10 出厂 bundle)

  • 标记层挂在 document.body 上,是全局图层:overlay.style.cssText = 'position:fixed;inset:0;pointer-events:none;z-index:900;'([data-annotation-overlay]);
  • 高亮 .dsh-ann-hl { position: fixed; z-index: 900; ... };编号 .dsh-ann-num { position: fixed; z-index: 940; ... };
  • renderMarkers() 只用 evenodd clipPath 挖掉了输入框:polygon(evenodd, 0 0, 100% 0, 100% 100%, 0 100%, 0 0, <composer-card 四角>),锚点是 [data-composer-card] —— 这是 [Bug] 批注高亮块显示优先级高于输入框,选区高亮遮挡输入内容 #50 的修法,顶栏没有对应的洞;
  • 而会话顶栏是普通文档流元素:._0cyzDW_header { box-sizing:border-box; border-bottom:.5px solid var(--dsw-alias-border-l3); flex:none; min-height:76px; padding:10px 28px 0 20px } —— 无 position、无 z-index(z-index:auto),在根层叠上下文里必然被 body 级 fixed 图层(900 / 940)压住;
  • 编号定位里还有一处会把胶囊推向顶部:var chipTop = anchor.top - 20; if (chipTop < 4) ...; if (chipTop < 4) chipTop = 4; —— 只有「视口上沿 4px」的保护,没有「顶栏高度」的保护,所以顶栏区域的编号尤其显眼。

建议修法

把 #50 的「挖洞」从「只挖输入框」扩成「挖输入框 + 挖顶栏」,或给标记层加一个顶部 inset:

  1. clipPath 再加一个洞覆盖顶栏横带:(0,0) → (100%, headerBottom)。headerBottom 有现成稳定钩子:document.querySelector('[data-conversation-scroll]').getBoundingClientRect().top —— 顶栏(conversation.session.header 槽)渲染在会话根容器的首个子节点,[data-conversation-scroll] 紧随其后,两者边界严丝合缝,不需要新增宿主钩子;
  2. 编号同样加 inset:把 chipTop 的下限从 4 改成 headerBottom + 4(保留 window.innerHeight 上限与冲突避让逻辑);
  3. 若希望按元素定位而不是按 scrollBody 推算,可向上游请求一个稳定钩子:目前宿主只给了 data-conversation-header-corner(顶栏内的角标槽),顶栏本体只有 CSS Modules 哈希类名 _0cyzDW_header,插件不宜依赖。

关联

本次是同一层级问题在会话顶栏上的残留:#44 修的是「高于设置页」,#50 修的是「高于输入框」,这次是「高于顶栏」——建议按「标记层必须被会话内容区裁剪」的思路一次性收口(例如把高亮层挂进会话滚动容器,而不是 document.body)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions