界面入口自定义
设置 → 外观 → 自定义界面入口。两类入口可以隐藏或显示。
一、两类入口
| 类别 | 内容 | 存法 |
|---|---|---|
| 顶栏控件 | 搜索、更新、主题、语言 | controls 布尔表 |
| 导航项 | 按路径记录(如隐藏 /checkins) | hiddenNav 路径数组 |
偏好存在浏览器本地的 meta-gateway.topbar-items,并且会广播一个 meta-gateway:topbar-changed 事件,让所有已挂载的壳层同时更新。
二、旧格式迁移
早期存的是扁平形状:
json
{ "checkin": true, "update": true, "theme": true, "language": true }读取时会自动迁移:checkin 映射成 hiddenNav: ["/checkins"],其余键仍然是控件。
迁移是容错的:localStorage 里可能存着任何东西,读不出来就用默认值,而不是把偏好清空。
三、隐藏不等于删除
| 行为 | 说明 |
|---|---|
| 路由 | 照旧挂载——直接输入 URL 仍然可达 |
| 命令面板 | paletteNav 始终列出全部页面 |
| 恢复 | 面板里有「恢复默认」 |
| 退出登录 | 不参与开关——它是控制台唯一一处登出 |
四、一个页面只有一个入口
顶栏的签到快捷按钮已经被删掉了——它和导航里的「签到」指向同一页,两个副本反而各自需要一个开关才不含糊。
别再为某个页面另加顶栏按钮。 要入口换位置就改导航或控件,而不是再加一个。
五、入口图标与标签同源
顶栏的入口图标与导航标签来自同一份定义(web/src/lib/chromeNav.ts),App 与面板共用。所以改标签只改 i18n,不在两处重复写死。
六、新增一个入口要同步三处
TOP_BAR_CONTROLS(若是顶栏控件)或CHROME_NAV_ITEMS(若是导航项);- 两个主题包的
Chrome.tsx——经典与现代各自读useTopBarControls(); - 双语
appearance.chrome.*文案(zh / en 必须同步,否则 parity 测试红)。