Skip to content

fix(observer): 吐司退场真的画完再消失;门的进入与退出拆成两条互不抵偿的判据 - #230

Merged
DTALEX66 merged 1 commit into
mainfrom
fix/toast-exit-transition-20261029
Oct 28, 2026
Merged

DTALEX66 merged 1 commit into
mainfrom
fix/toast-exit-transition-20261029

Conversation

@DTALEX66

Copy link
Copy Markdown
Owner

缺陷

useToaster.dismiss(id) 在同一拍把条目从列表里删掉:元素没有"摘掉 .show 之后还被画过"的帧,
b10.css 声明的 .toast{transition:.22s ease} 退场永远不发生。上一批(#229)把进入侧修好了,
TOAST_EXIT_MS 当时声明了但没有消费者——本 PR 把它接上。

改法

  • ToastItem 增加 leaving?: boolean;dismiss 先把条目标成 leaving(行因此失去 .show 并开始淡出),
    到 TOAST_EXIT_MS 才真正从列表移除。
  • ToastRow 用 useEnterTransition(!t.leaving, TOAST_EXIT_MS),自己决定何时离开文档。
  • 合同侧:overlays.test.tsx 的"到期就消失"改成三段断言——到期时仍在文档且没有 .show、
    再过预算才消失、错误吐司依旧不自动消失。原写法在"同拍删除"和"淡出后删除"两种产品下都绿,改后才有区分力。

门侧:进入与退出必须各自判定(本批修掉一个我自己写的判据缺陷)

overlay_enter_transitions 第一版用的是"进+退合并后的 moved",于是跳切进场但会淡出的覆盖层会被判绿。
现在两侧各自计数、各自一条判据,新增 overlay_exit_transitions[面];
反证 test_an_overlay_that_appears_at_its_end_state_fails_the_enter_clause 同时断言
"enter 判红"与"exit 判绿",钉住两侧不能互相抵偿。

实测

改前 改后
toast 退场 56 帧在场后直接消失,exitValues 全为空(零中间值) exit:transform: 9, exit:opacity: 9 个不同值、在场帧 69,overlay_exit_transitions[toast] PASS
drawer 退场 18 帧在场、exit:right 有中间值 exit:right: 14,overlay_exit_transitions[drawer] PASS

OVERLAY_MOTION_GATE_PASS overlays=["drawer","toast"],
OVERLAY_MOTION_REPORTED toast: animated:{"transform": 12, "opacity": 12, "exit:transform": 9, "exit:opacity": 9},
收据 .project-local/runs/overlay-gate/overlays-exit.json。

本地门

  • tests/ci/test_overlay_motion_gate.py 16 → 18 例(新增"会淡出但没淡入"与"永不离开文档"两种反证);
  • npx vitest run 78 文件 965 例全绿、npx tsc --noEmit 0 错、npm run build 成功;
  • 台账四门绿:路径门 36 例、normalise_doc_citations --check rewritten=0 blocked=0、
    表形状 rows=42 wrong_width=0、verify_live_doc_paths_resolve missing=0;清单在 git add 之后重发、覆盖门 16 例绿。

顺带:WUI-19 两条原生读回的阻塞点按实测改写

此前措辞暗示"重制一次二进制就闭合",实测两侧各缺一半:本机 where cl.exe 找不到、
vswhere -products * 无输出、Windows Kits\11\Lib 不存在(PATH 上唯一的 link.exe 是 Git 的 coreutils
建链工具,探测时会被误当 MSVC 链接器);而 CI 每次都 cargo build --release --locked 造真 exe 并上传
observer-native-app-exe、U19 也真驱动它,但 runner 上 display/draw PASS 而真实窗口 visible=false、
WebView2 不暴露 CDP 页面目标(run 40326061662),owner 于 2026-10-26 决定该步 REPORTED, NOT REQUIRED。
要闭合需一台兼具 MSVC+SDK 与可见桌面的机器,或 owner 授权在本机装构建工具——属主机级改动,不在本轮授权内,
故如实登记而不伪造原生 PASS,也不动那条 owner 决定。

dismiss 过去在同一拍把条目从列表删掉,元素没有"摘掉 .show 之后还被画过"的帧,
.22s 淡出永不发生。现在先标 leaving(行失去 .show 开始淡出),到 TOAST_EXIT_MS 才移除。
门侧读数:吐司 exit 现在有 9 个不同的 transform/opacity 值、在场帧 56→69;
drawer exit:right 14 值。新增 overlay_exit_transitions[面]。

一条判据自身写错被单测抓到:enter 判据原本用的是"进+退合并的 moved",
于是跳切进场但会淡出的覆盖层会被判绿。改为进入/退出各自计数各自判定,
并让该反证同时断言"enter 红、exit 绿",钉住两侧不能互相抵偿。
门侧测试 16→18 例;前端 78 文件 965 例全绿、tsc 0 错、build 成功、门 PASS。

台账:WUI-19 的"原生键盘/原生 DPI 仍缺"按实测改写为两侧各缺一半——
本机无 cl.exe、vswhere 无输出、Windows Kits 11 Lib 不存在(PATH 上唯一的 link.exe 是 Git 的建链工具),
造不出可运行 exe;CI 每次都 cargo build --release 造真 exe 并上传,但 runner 上真实窗口 visible=false、
WebView2 不暴露 CDP 目标,owner 2026-10-26 已决定该步 REPORTED, NOT REQUIRED。
不伪造原生 PASS,也不动那条 owner 决定。
@DTALEX66
DTALEX66 merged commit 7f7dd57 into main Oct 28, 2026
12 checks passed
@DTALEX66
DTALEX66 deleted the fix/toast-exit-transition-20261029 branch October 28, 2026 19:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant