This commit is contained in:
oneao committed 2026-10-13 22:32:50 +08:00
1 parent f3936cec61
commit 15e0ae5b67
115 files changed
+11399 -2741

No files matched your search

@@ -0,0 +1,12 @@
---
'@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 焦点环。摘掉修复后两条都会红(实测)。