Skip to content

theme · 主题与排版量 ​

把「颜色名 + 字号」解析成具体值。产出切成两半:排版量给 layout 量文字,调色板给 build 上色。

导出 ​

resolveTheme、resolveToken、ResolvedTheme、ThemeInput、Typography、TokenValue、DEFAULT_TOKENS、DEFAULT_TYPOGRAPHY。

签名 ​

ts
type TokenValue = string | number;
type Typography = { fontFamily: string; fontSize: number; lineHeight: number; captionSize: number };
type ThemeInput = {
  tokens?: Record<string, TokenValue>;
  typography?: Partial<Typography>;
  typeStyles?: Record<string, StyleDecl>;
};
type ResolvedTheme = {
  tokens: Record<string, TokenValue>;
  typography: Typography;
  typeStyles: Record<string, StyleDecl>;
};

function resolveTheme(input?: ThemeInput): Result<ResolvedTheme>;
function resolveToken(
  value: TokenValue | { token: string } | undefined,
  tokens: Record<string, TokenValue>,
  diagnostics: Diagnostic[],
  subject?: string,
): TokenValue | undefined;

三类产出 ​

半边给谁为什么
typographylayout(度量)行高 / 字号参与尺寸计算
tokensbuild(上色)调色板与几何无关
typeStylesbuild(类型默认外观)同一类 shape / edge 共用样式

只做:合并输入与默认值,产出具体值。 绝不做:不认识 DrawDocument、不认识节点类型、不量文本。

未知 token 不在这里报 ​

resolveTheme 只收到 ThemeInput,看不到文档引用了哪些 token,物理上无从判断「未知」。 因此 UNKNOWN_TOKEN 由 build 在解析样式时产生。

非法排版量(如 fontSize: 0)是可回落的:默认值永远可用,所以返回 ok: true + TYPOGRAPHY_INVALID 警告,而不是 ok: false。

相关 BDD ​

C5(换 tokens → 几何不变、只有样式变)· C6(未知 token → 回落 + 诊断)· E1(非法 typography 回落)。

MIT License