Files
aurora-admin/site/sources/steplist/css.txt
T
aurora-admin 16f365a045 feat: P4 阶段A+B — data.js 瘦身 116KB(预计算 + css 分离)
执行 ROADMAP 的 S1-P4,按规划的三阶段走,本次完成 A 与 B。

阶段 A · 预计算 scenarios(验证「构建期预计算 + 运行时回退」链路)
- tools/precompute.mjs:与 app.js 的 extractScenarios 逻辑完全一致,
  构建期算出结果写进 data.components[].scenarios
- app.js 加快速路径:优先读 c.scenarios,缺失时回退运行时解析
- 浏览器实测:预计算值与运行时提取值**完全一致**(逐字节比对)
- 实测收益有限:仅 4 个组件有 ≥2 场景(场景卡片本就少见),
  但链路验证通过,为阶段 C 的 API 预计算铺路

阶段 B · css 源码分离(零风险,css 不参与任何解析)
- css 从 data.js 移到 site/sources/<slug>/css.txt(79 个文件)
- data.js 里改为 sourcesRef.css 引用,data.json 保持完整(For Agents 承诺)
- data.js: 1058 KB → 942 KB(−116 KB)
- app.js 新增 srcOf(c, kind) / hasSrc(c, kind):
  · srcOf 同步返回已有源码,缺失时触发后台 fetch 并缓存
  · __aaSrcReady 回调在加载完成后填充代码区
- 修正回调时机 bug:原实现捕获构建时的 current(初始 tab),
  导致用户后续切换的 tab 收不到通知。改为回调内实时比对当前 tab

关于 P4 的实测修正(已登记 ROADMAP 规划修正记录)
- 规划估计「拆 sources → ~110KB」。实测 css 仅占 119KB/888KB,
  且 html/vue2/vue3/jsx 共 765KB 被**渲染期同步消费**
  (extractComponentAPI 读 vue3/vue2/jsx,extractScenarios 读 html)
- 故需分阶段:A+B 先减 116KB,阶段 C 需先预计算 API 表才能分离其余 4 端

新增构建链(两步,不可省第二步)
- npm run build:site = build-site.ps1 + precompute.mjs
- build-site.ps1 会把 data.js 重写回全量,precompute 才做瘦身
- 已写入 AGENTS.md 的铁律章节(含「只跑第一步会怎样」的后果说明)

验证
- 回归 100%:1003/1003,79 页全通过,N/A 35
- 浏览器实测:展开代码区 → CSS tab → 2121 字符正常显示,
  Network 出现 sources/button/css.txt 请求
- 预计算 vs 运行时场景提取结果逐字节一致
2026-09-11 23:23:08 +08:00

27 lines
2.4 KiB
Plaintext

/* Aurora Admin StepList 样式 — 对齐 组件7.txt StepList:多步骤详细列表,序号/标题/描述/状态图标,连接线串联,可点击 */
.aa-steplist { font-family: var(--font-family, -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif); color: var(--au-color-text-body); }
.aa-steplist-item { position: relative; display: flex; gap: 12px; padding-bottom: 20px; }
.aa-steplist-line { position: absolute; left: 14px; top: 32px; bottom: 0; width: 2px; background: var(--au-color-border); }
.aa-steplist-item:last-child { padding-bottom: 0; }
.aa-steplist-item:last-child .aa-steplist-line { display: none; }
.aa-steplist-node { width: 28px; height: 28px; border-radius: 50%; flex-shrink: 0; display: flex; align-items: center;
justify-content: center; font-size: 13px; font-weight: 500; border: 2px solid var(--au-color-border); background: var(--au-color-card-bg); color: var(--au-color-text-secondary); z-index: 1; box-sizing: border-box; }
.aa-steplist-body { flex: 1; padding-top: 2px; }
.aa-steplist-title { font-size: 14px; font-weight: 500; color: var(--au-color-text-title); }
.aa-steplist-desc { font-size: 13px; color: var(--au-color-text-secondary); margin-top: 2px; line-height: 1.5; }
.aa-steplist-item.is-clickable { cursor: pointer; }
.aa-steplist-item.is-clickable:hover .aa-steplist-title { color: var(--au-color-brand); }
.aa-steplist-item.is-done .aa-steplist-node { background: var(--au-color-brand); border-color: var(--au-color-brand); color: var(--au-color-text-inverse); }
.aa-steplist-item.is-done .aa-steplist-line { background: var(--au-color-brand); }
.aa-steplist-item.is-active .aa-steplist-node { border-color: var(--au-color-brand); color: var(--au-color-brand); box-shadow: 0 0 0 3px rgba(47,84,235,0.2); }
.aa-steplist-item.is-error .aa-steplist-node { background: var(--au-color-error); border-color: var(--au-color-error); color: var(--au-color-text-inverse); }
.aa-steplist-item.is-error .aa-steplist-line { background: var(--au-color-error); }
/* 水平模式 */
.aa-steplist.is-horizontal { display: flex; }
.aa-steplist.is-horizontal > .aa-steplist-item { flex: 1; flex-direction: column; padding-bottom: 0; padding-right: 8px; }
.aa-steplist.is-horizontal > .aa-steplist-item > .aa-steplist-line { left: 28px; top: 14px; bottom: auto; right: 0; width: auto; height: 2px; }
.aa-steplist.is-horizontal > .aa-steplist-item > .aa-steplist-body { padding-top: 8px; }