设计系统换回 shadcn 原版,只保留自家的蓝;SheetForm 重做;修掉一个让 vite dev 下所有管理页停在骨架屏的老问题。
修复
vite dev 管理页不水合(#21)。tls-trust.ts 在 proxy 子路径顶层静态 import "node:fs";starter 的 @/auth 桶文件把路由守卫和服务端 runtime 放在一起导出,于是每个页面都把 proxy 拖进客户端模块图,浏览器里整棵 @/auth 求值失败,根组件永远水合不了。自 0.1.2 起就是这样,SSR 骨架屏掩盖了它。
现在 node 内建模块在调用时经 process.getBuiltinModule 取——installExtraCa 只在服务端被调,没有该 API 的运行时(Node < 22.3)本来也没有 CA API,照旧返回 "unsupported"。CULTURE_COOKIE 挪到 auth 子路径(proxy 继续 re-export,公共 API 不变)。examples/starter 客户端构建的四条 "externalized for browser compatibility" 警告随之清零。
主题:退回 shadcn 原版 + 自家的蓝
app-theme.css 381 → 300 行。shadcn blue preset 原样采用,相对原版每主题只差三个 token:--primary、--primary-foreground、--ring。自家这支蓝在暗色下变亮(0.55 → 0.57),一个值同时能当填充、链接与焦点环,两个主题都过 WCAG AA;preset 那支在暗色下压在近黑页底上只有 2.24:1。
保留的只有原版没覆盖的东西:CJK 字体回退栈、--text-sm 13px(唯一的密度杠杆)、status-* / brand-* 语义色、降低动效偏好块。删掉的:自定义刻度、510/590 字重、逐档负字距、四级 surface 阶梯、五层模态阴影、整个 :lang(zh) 覆盖——它们修的都是自定义排版自己造出来的问题。账在 docs/theme-spike.md。
SheetForm
- 标题领衔记录:新建态给宾语(「新建图书」),编辑/查看态以记录本身为标题、次级标识(邮箱、作者 · 日期)放副标题。
useAbpSheet新增title/subtitle解析器。 - 四条关闭路径(Esc、右上角 ×、遮罩、取消)收敛到一道闸门:有未保存改动先问「放弃未保存的修改?」。
useAbpSheet上报dirty。 - 标「选填」而非红星,由表单层决定(
OptionalMarkscontext):录入表单多数必填、标少数派;查询表单全是选填、不标。红色留给错误。 - 查看态渲染成定义列表(
divide-y rounded-lg border bg-card、值右对齐、行高与表格同源),不再是一排禁用输入框。每个字段给出自己的display;未接的字段回退到禁用控件,不会碎。 - 说明文字放标签下、控件上;控件下方永远留给错误。底栏单行右对齐,取消用 ghost。
表格
- 行高改为声明值(
h-10/ 紧凑h-8),此前由行尾操作按钮撑出,同一档里带菜单的行比纯文本行高 12px。 col.bool默认渲染普通文字(否为 muted),只有传了trueStatus才出徽章。徽章的含义是「处于某状态」,isDefault/isPublic是属性——此前同一个「是」在角色页是蓝色、在用户页是绿色。用户页isActive仍显式传success。
文档
DESIGN.md 785 → 236 行。token 数值只在主题文件里,文档讲「相对 shadcn 原版改了什么、为什么」、原版没覆盖的产品约定、以及每条定制层规则的一行理由。四份分析文档随行:docs/design-review.md、sheetform-review.md、sheetform-design.md、theme-spike.md。
升级注意
useAbpSheet的title/subtitle可选,不传维持「新增 / 编辑 / 查看」。col.bool的默认观感变了:想保留徽章,显式传trueStatus。required-mark.tsx改名optional-mark.tsx;form块新增alert-dialog依赖,jc-abp add form会自动带上。- 若你覆盖过
app-theme.css里的自定义刻度类(text-2xs之外的自定义档)或:lang(zh)规则,它们已不存在。