Files
workspace/code/g3soft-libs/.changeset/table-editing-cell-visual.md
T
2026-10-13 22:32:50 +08:00

2.0 KiB
Raw Blame History

@g3soft/ui
@g3soft/ui
patch

G3Table:修两个编辑态底色/描边的视觉问题(都与「select 展开后焦点被移进浮层」有关)。

  • 修复:select 编辑格的底色会变成选区色(浅蓝)而不是基色。 编辑格白底的判据原先写在 CSS 的 td:focus-within 上,而 G3Select 展开时会把 DOM 焦点移进下拉浮层(浮层 Teleport 到 body),那一刻 :focus-within 立刻失效,底色退回库的 td[data-cs-s] { background-color: var(--cs-bgc) }。症状是「时白时不白」——取决于此刻焦点在触发器还是浮层里;input 没有浮层,所以只有 select 会这样。
    • 判据改为编辑器上的标记类(is-cell-editing,由内容节点带出,与「按行禁用的灰底」「校验态」同一套路子),td:has(> …) 精确命中该格,与焦点在格内 / 浮层 / 换格瞬间落到 body 都无关。
    • 焦点环同样补上这个标记(:focus-within 与标记取并集):编辑格始终有环,不再随焦点漂移。
  • 修复:冻结列上的选中格没有选中描边(蓝色边框)。 冻结列的「行状态叠色」用的是 box-shadow,而库的选区描边(td[data-cs-s] 的 4 个方向 inset)也在 box-shadow 上 —— 单值属性,只写叠色就会把选中框整体替换掉。非冻结列没有这条规则,所以只有冻结列会缺,很容易被当成「选中态没生效」。现在叠色规则连同选区描边一起写。
  • 冻结列的编辑格不再叠行状态色:与普通列一致地保持「纯基色 + 焦点环」。否则同一行里冻结列的编辑格带行色、普通列的却是纯色,一眼看得出不一致。
  • 两条都由真浏览器 e2e 锁住(e2e/table.spec.ts):select 那条必须在浮层已夺焦的状态下断言(否则测不出),冻结列那条断言选中格的 box-shadow 里确实含有选区描边色、编辑格带 2px 焦点环。摘掉修复后两条都会红(实测)。