2026-06-21 开发日志
记录时间:2026-06-21

今天做了什么
今天原本只想解决一个很具体的问题:Offcanvas 能不能直接设置宽度或高度。结果顺着这根线一拉,发现尺寸能力最好不要只照顾一个组件,于是把 Modal、Offcanvas、Toast 和 Context Menu 一起整理了。
现在四类组件都支持 width 和 height:
- 数字按像素处理,例如
width: 480。 - 字符串直接使用 CSS 尺寸,例如
42rem、80vh、40vw或calc(...)。 - Modal 使用显式尺寸时,不再让自动适配在下一帧把它覆盖掉。
- Toast 可以通过
handle.update()动态调整尺寸。 - Context Menu 保留
minWidth和maxHeight作为安全边界。
这类 API 最怕“每个组件都有一点,但每个组件都不一样”。趁接口还没有长成灌木丛,今天把规则统一了。
那条第一次出现的黑框
右键菜单第一次唤出时,第一项会被程序主动聚焦。之前为了让键盘导航更明显,样式同时给 :focus 和 :focus-visible 画了轮廓,结果鼠标右键也吃到了那圈焦点线,看起来像菜单突然套了一层粗黑边框。
修复方式很克制:删除普通 :focus 规则,只保留 :focus-visible。鼠标打开时不再冒黑框,键盘用户仍然能看到清晰的焦点位置。可访问性没有被拿去祭天,视觉问题也消失了。
文档站和上下文卫生
文档站地址统一到了 https://sodialog.sohophp.app,避免 canonical 与实际部署地址各说各话。
另外补了 .codexignore,把构建产物、缓存、报告和日志挡在日常上下文之外。代码助手最擅长读很多东西,但“能读”不等于“每次都值得读”;减少噪声,本质上也是给真正相关的源码多留一点注意力。
验证结果
- 44 个组件单元测试全部通过。
- ESLint 通过。
- 生产构建与类型声明生成通过。
- API、README 和组件指南已同步。
发布决定
这次改动保持向后兼容,但新增了完整的尺寸能力并修复了可见交互问题,因此发布补丁版本 v0.2.5。
今天的体会是:尺寸参数看起来只是两个字段,真正的工作却是决定谁拥有最终布局控制权。答案应该很简单——使用者明确传了值,就听使用者的。