Files
blog/public/admin/typography-classes.js
T
wait4xandGLM-5.3 2cab243891 feat(typography): 可视化排版选择器(Sveltia inline 组件)+ 颜色扩充 + 方案 10
- 可视化选择(核心痛点解决):Sveltia 原生支持 registerEditorComponent
  的 inline 形态且 onInsert 能拿到 selectedText → 实现「选中文字 → Insert ▸
  排版 → 选字体/颜色 → 自动包 span class」完整链路;因 inline 组件只能进
  Insert 菜单(field-based 虽可上工具栏但拿不到 selectedText),两个独立组件
  会互相抢 pattern 匹配,故收敛为单入口 + 18 项分组面板(键盘可达/Esc 取消/
  onEdit 回填当前类)
- public/admin/typography-classes.js 为单一事实源(扩展与文档共用)
- 颜色扩充 4 类:ink-warm / ink-cool / ink-faint / ink-accent-soft,全部亮暗
  双态实测 ≥4.5:1(ink-faint 取白底达标的最淡值 4.69/4.75)
- 字体:体积账否决 webfont 新增(@fontsource zcool-xiaowei 用到即 +647.7KB,
  远超 150KB 阈值;smiley-sans 无可用版本、sarasa 包为空壳),改为落地 4 个
  **系统回退类**(font-song/font-kai-sys/font-hei-sys/font-fangsong,零下载,
  文档注明依赖访客设备)
- 白名单 17 类同步;docs/写作指南.md 三表更新
- docs/research/10-页面后台化方案.md:五方案对比 + 推荐方案 E(页面骨架 blocks
  / 区块字段 / 局部自由区 / 样式即数据四层)+ 关于页九类区块 + 消毒与验收断言
  + 分阶段清单(约 7.2d)

验证: 16/16 颜色 computed 与对比度实测;选择器 7/7(桩 CMS 覆盖注册/插入/
      编辑三层);构建 48 页 exit 0;E2E 37/37

Spec: none (排版能力 + 方案文档)

Co-authored-by: GLM-5.3
2026-11-02 16:57:54 +08:00

29 lines
1.3 KiB
JavaScript

/**
* 排版类清单 —— 单一事实源(后台编辑器面板与文档共用)。
* 与 src/styles/global.css 的「受限排版类」段、src/lib/rehype-class-whitelist.ts 的白名单三处保持一致:
* 加类时三处同改,否则构建期白名单会把新类剥掉。
*/
window.TYPOGRAPHY_CLASSES = {
font: [
{ cls: 'font-serif', label: '思源宋(书评正文)' },
{ cls: 'font-kai', label: '霞鹜文楷(金句)' },
{ cls: 'font-sans', label: '思源黑(UI/技术)' },
{ cls: 'font-mono', label: 'JetBrains Mono(等宽)' },
{ cls: 'font-song', label: '宋体(系统)' },
{ cls: 'font-kai-sys', label: '楷体(系统)' },
{ cls: 'font-hei-sys', label: '黑体(系统)' },
{ cls: 'font-fangsong', label: '仿宋(系统)' },
],
color: [
{ cls: 'ink-1', label: '最重(标题级)' },
{ cls: 'ink-2', label: '正文' },
{ cls: 'ink-3', label: '次要(日期/元信息)' },
{ cls: 'ink-muted', label: '最淡(注释感)' },
{ cls: 'ink-accent', label: '强调(链接色)' },
{ cls: 'ink-accent-soft', label: '弱强调' },
{ cls: 'ink-warm', label: '暖调正文' },
{ cls: 'ink-cool', label: '冷调正文' },
{ cls: 'ink-faint', label: '最淡可读档' },
],
};