diff --git a/client/electron/src/components/AddressInput.tsx b/client/electron/src/components/AddressInput.tsx index 6b46f16..acc535e 100644 --- a/client/electron/src/components/AddressInput.tsx +++ b/client/electron/src/components/AddressInput.tsx @@ -181,7 +181,7 @@ export default function AddressInput({ {open && items.length > 0 && (
= 0.99 && card !== null && menu > card, + `正文面 α=${card} 弹层 α=${menu}(弹层必须 ≥0.99)` ); } finally { await page.close(); diff --git a/client/electron/test/narrow-layout.test.mjs b/client/electron/test/narrow-layout.test.mjs index fa9dc5d..5c4030e 100644 --- a/client/electron/test/narrow-layout.test.mjs +++ b/client/electron/test/narrow-layout.test.mjs @@ -2,7 +2,7 @@ // // 不做视觉快照:那需要 headless 浏览器,且像素级比对在字体差异下极脆。 // 这里守住几条真正会坏掉的不变量。 -import { prose } from './lib/read.mjs'; +import { code, prose } from './lib/read.mjs'; import { check, finish } from './lib/checks.mjs'; const read = p => prose(new URL(p, import.meta.url)); @@ -205,9 +205,43 @@ check( ); check( '弹层(控件档滚动区)不做边缘淡出', - /\.overflow-y-auto\.glass-control\s*\{[\s\S]*?mask-image:\s*none/.test(css), + /\.overflow-y-auto\.(glass-control|popup-surface)\s*\{[\s\S]*?mask-image:\s*none/.test(css), '候选菜单这类弹层还在淡 —— 它高度只有几十像素,首尾项会被洗白' ); + +/* + * 候选/转发两个选择框的菜单必须是**不透明**表面(2026-09-15 用户: + * 「你在选择框的模糊逻辑上用力过猛,导致只能显示一条信息」)。 + * + * 判据钉的是**结构**而不是某个具体颜色值: + * ① 弹层类必须存在,且用 rgb(var(--c-white)) 而不是带 alpha 的 rgb(... / α); + * ② 弹层规则里不允许出现 backdrop-filter(背后的表单被模糊正是那份乱); + * ③ 壁纸开着时也得另有规则压回不透明(`html[data-bg='on'] .bg-white` 会抢); + * ④ AddressInput 的菜单必须穿这个类,不许再穿 .glass-control。 + */ +const popupRule = (css.match(/\.popup-surface\s*\{[\s\S]*?\n\}/) || [''])[0]; +const popupBgOn = (css.match(/html\[data-bg='on'\]\s*\.popup-surface\s*\{[\s\S]*?\n\}/) || [''])[0]; +const addrSrc = code('src/components/AddressInput.tsx'); // 判「代码里穿了哪个类」→ 用剥注释版 +check( + '弹层表面存在且不透明', + /\.popup-surface\s*\{/.test(css) && /background-color:\s*rgb\(var\(--c-white\)\)/.test(popupRule), + '弹层没有独立的不透明表面 —— 半透明列表叠在表单上,下面的行会被背后控件糊掉' +); +check( + '弹层不取背景模糊', + !/backdrop-filter:\s*blur/.test(popupRule), + '弹层又开了 background blur —— 背后的控件被糊住后和候选行叠在一起' +); +check( + '壁纸开时弹层也不透明', + /background-color:\s*rgb\(var\(--c-white\)\)/.test(popupBgOn) && !/backdrop-filter:\s*blur/.test(popupBgOn), + "`html[data-bg='on'] .bg-white` 会把弹层拉回半透明那档(0.88),必须单独压回去" +); +check( + '候选菜单穿的是弹层类', + /absolute[^`]*popup-surface/.test(addrSrc) && !/absolute[^`]*glass-control/.test(addrSrc), + 'AddressInput 的菜单还穿着控件档(.glass-control) —— 那档是给贴着面板的小控件用的' +); check( '淡出规则同时带 -webkit- 前缀(Electron 里以哪个为准不由我们定)', (maskRule.match(/-webkit-mask-image:/g) || []).length === 1 && diff --git a/client/electron/test/nav-merge.test.mjs b/client/electron/test/nav-merge.test.mjs index 31ae9c4..bd02ce2 100644 --- a/client/electron/test/nav-merge.test.mjs +++ b/client/electron/test/nav-merge.test.mjs @@ -106,7 +106,18 @@ test('③ 复选框与地址建议用"控件档"透度(比正文面更透)', assert.match(mailView, /import \{[^}]*ComposerChip[^}]*\} from '\.\/Composer'/, 'MailView 要用共用的胶囊组件'); assert.match(mailView, / 嵌套 > 控件)