@bytechain.cn/colamd-themes 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/.claude/skills/colamd-themes-preview.skill.md +333 -0
  2. package/.claude/skills/colamd-themes.skill.md +155 -0
  3. package/.hermes/skills/tools/colamd-themes/SKILL.md +159 -0
  4. package/.openclaw/skills/colamd-themes/SKILL.md +166 -0
  5. package/.opencode/skills/colamd-themes/SKILL.md +162 -0
  6. package/.trae/rules/colamd-themes.md +150 -0
  7. package/CHANGELOG.md +102 -0
  8. package/README.md +373 -0
  9. package/README_CN.md +373 -0
  10. package/RELEASENOTE.md +177 -0
  11. package/dist/cli.d.ts +2 -0
  12. package/dist/cli.js +208 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/color-systems.d.ts +17 -0
  15. package/dist/color-systems.js +251 -0
  16. package/dist/color-systems.js.map +1 -0
  17. package/dist/color-utils.d.ts +9 -0
  18. package/dist/color-utils.js +112 -0
  19. package/dist/color-utils.js.map +1 -0
  20. package/dist/contrast.d.ts +15 -0
  21. package/dist/contrast.js +63 -0
  22. package/dist/contrast.js.map +1 -0
  23. package/dist/docx-style-paradigm.d.ts +153 -0
  24. package/dist/docx-style-paradigm.js +640 -0
  25. package/dist/docx-style-paradigm.js.map +1 -0
  26. package/dist/export-cli.d.ts +10 -0
  27. package/dist/export-cli.js +266 -0
  28. package/dist/export-cli.js.map +1 -0
  29. package/dist/extractors/base.d.ts +6 -0
  30. package/dist/extractors/base.js +3 -0
  31. package/dist/extractors/base.js.map +1 -0
  32. package/dist/extractors/docx-extractor.d.ts +52 -0
  33. package/dist/extractors/docx-extractor.js +370 -0
  34. package/dist/extractors/docx-extractor.js.map +1 -0
  35. package/dist/extractors/pdf-extractor.d.ts +66 -0
  36. package/dist/extractors/pdf-extractor.js +430 -0
  37. package/dist/extractors/pdf-extractor.js.map +1 -0
  38. package/dist/extractors/url-extractor.d.ts +104 -0
  39. package/dist/extractors/url-extractor.js +761 -0
  40. package/dist/extractors/url-extractor.js.map +1 -0
  41. package/dist/generator.d.ts +4 -0
  42. package/dist/generator.js +71 -0
  43. package/dist/generator.js.map +1 -0
  44. package/dist/index.d.ts +10 -0
  45. package/dist/index.js +9 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/mermaid-presets.d.ts +14 -0
  48. package/dist/mermaid-presets.js +122 -0
  49. package/dist/mermaid-presets.js.map +1 -0
  50. package/dist/models.d.ts +106 -0
  51. package/dist/models.js +92 -0
  52. package/dist/models.js.map +1 -0
  53. package/dist/renderer.d.ts +70 -0
  54. package/dist/renderer.js +204 -0
  55. package/dist/renderer.js.map +1 -0
  56. package/dist/templates/template.css +498 -0
  57. package/dist/templates/theme-paradigm.md +658 -0
  58. package/dist/templates/theme-template.hbs +370 -0
  59. package/dist/theme-store.d.ts +37 -0
  60. package/dist/theme-store.js +90 -0
  61. package/dist/theme-store.js.map +1 -0
  62. package/dist/validators.d.ts +26 -0
  63. package/dist/validators.js +144 -0
  64. package/dist/validators.js.map +1 -0
  65. package/package.json +36 -0
  66. package/skills/build-skills.sh +166 -0
  67. package/skills/colamd-themes/SKILL.md +148 -0
  68. package/src/cli.ts +200 -0
  69. package/src/color-systems.ts +289 -0
  70. package/src/color-utils.ts +120 -0
  71. package/src/contrast.ts +66 -0
  72. package/src/docx-style-paradigm.ts +811 -0
  73. package/src/export-cli.ts +301 -0
  74. package/src/extractors/base.ts +8 -0
  75. package/src/extractors/docx-extractor.ts +417 -0
  76. package/src/extractors/pdf-extractor.ts +527 -0
  77. package/src/extractors/url-extractor.ts +927 -0
  78. package/src/generator.ts +88 -0
  79. package/src/index.ts +29 -0
  80. package/src/mermaid-presets.ts +142 -0
  81. package/src/models.ts +212 -0
  82. package/src/renderer.ts +277 -0
  83. package/src/templates/template.css +498 -0
  84. package/src/templates/theme-paradigm.md +658 -0
  85. package/src/templates/theme-template.hbs +370 -0
  86. package/src/theme-store.ts +112 -0
  87. package/src/types/pdf-parse.d.ts +12 -0
  88. package/src/validators.ts +176 -0
  89. package/themes/.gitkeep +0 -0
  90. package/themes/academic-paper-pt.css +1805 -0
  91. package/themes/academic-paper.css +1099 -0
  92. package/themes/academic-style.css +2430 -0
  93. package/themes/colly.css +370 -0
  94. package/themes/elegant.css +671 -0
  95. package/themes/forest-ink.css +664 -0
  96. package/themes/guizang.css +732 -0
  97. package/themes/meeting-minutes.css +370 -0
  98. package/themes/pixso-design.css +1261 -0
  99. package/themes/salvator-blog.css +370 -0
  100. package/themes/swiss-design copy.css +746 -0
  101. package/themes/swiss-design.css +746 -0
  102. package/themes/template.css +498 -0
  103. package/themes/trae-blue.css +737 -0
  104. package/themes-preview/colly-preview.html +623 -0
  105. package/themes-preview/demo-content.md +187 -0
  106. package/themes-preview/meeting-minutes-preview.html +625 -0
  107. package/themes-preview/salvator-blog-preview.html +623 -0
  108. package/tsconfig.json +18 -0
package/dist/cli.js ADDED
@@ -0,0 +1,208 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
4
+ import { join, isAbsolute } from "node:path";
5
+ import chalk from "chalk";
6
+ import ora from "ora";
7
+ import { UrlExtractor } from "./extractors/url-extractor.js";
8
+ import { DocxExtractor } from "./extractors/docx-extractor.js";
9
+ import { PdfExtractor } from "./extractors/pdf-extractor.js";
10
+ import { writeThemeFile } from "./generator.js";
11
+ import { COLOR_SYSTEMS, getColorSystem } from "./color-systems.js";
12
+ import { MERMAID_PRESETS } from "./mermaid-presets.js";
13
+ import { validateSeedPalette, summarizeIssues } from "./validators.js";
14
+ import { registerExportCommands } from "./export-cli.js";
15
+ const program = new Command();
16
+ program
17
+ .name("colamd-themes")
18
+ .description("ColaMD Theme Development Tool — extract formatting and generate v3.0 paradigm CSS themes")
19
+ .version("0.2.0");
20
+ // ── Shared extract options builder ──
21
+ function addExtractOptions(cmd) {
22
+ return cmd
23
+ .option("-n, --name <name>", "Theme name")
24
+ .option("-o, --output <path>", "Output CSS file path")
25
+ .option("-d, --themes-dir <dir>", "Themes directory", "themes")
26
+ .option("-c, --color-system <id>", "Force a color system (use `color-systems` to list)")
27
+ .option("-m, --mermaid-preset <id>", "Force a Mermaid preset (light/dark/elegant)")
28
+ .option("-A, --auto-match", "Auto-match color system and mermaid preset");
29
+ }
30
+ async function runExtraction(extractor, source, options) {
31
+ const spinner = ora("Extracting styles...").start();
32
+ try {
33
+ const style = await extractor.extract(source);
34
+ if (options.name)
35
+ style.name = options.name;
36
+ if (options.colorSystem) {
37
+ const cs = getColorSystem(options.colorSystem);
38
+ if (!cs) {
39
+ spinner.fail(`Unknown color system: ${options.colorSystem}`);
40
+ process.exit(1);
41
+ }
42
+ style.seed = { ...cs.palette };
43
+ style.colorSystemId = cs.id;
44
+ }
45
+ if (options.mermaidPreset)
46
+ style.mermaidPresetId = options.mermaidPreset;
47
+ if (options.autoMatch) {
48
+ style.colorSystemId = "";
49
+ style.mermaidPresetId = "";
50
+ }
51
+ spinner.text = "Generating CSS (v3.0 paradigm)...";
52
+ const outputPath = writeThemeFile(style, options.output || options.themesDir);
53
+ spinner.succeed(chalk.green(`Theme "${style.name}" generated: ${outputPath}`));
54
+ printSummary(style);
55
+ }
56
+ catch (err) {
57
+ spinner.fail(chalk.red(`Failed: ${err.message}`));
58
+ process.exit(1);
59
+ }
60
+ }
61
+ // ── from-url ──
62
+ addExtractOptions(program.command("from-url")
63
+ .description("Extract theme from a web page URL")
64
+ .argument("<url>", "URL of the web page")).action(async (url, options) => {
65
+ await runExtraction(new UrlExtractor(), url, options);
66
+ });
67
+ // ── from-docx ──
68
+ addExtractOptions(program.command("from-docx")
69
+ .description("Extract theme from a .docx document")
70
+ .argument("<file>", "Path to the .docx file")).action(async (file, options) => {
71
+ if (!existsSync(file)) {
72
+ console.error(chalk.red(`File not found: ${file}`));
73
+ process.exit(1);
74
+ }
75
+ await runExtraction(new DocxExtractor(), file, options);
76
+ });
77
+ // ── from-pdf ──
78
+ addExtractOptions(program.command("from-pdf")
79
+ .description("Extract theme from a PDF document")
80
+ .argument("<file>", "Path to the PDF file")).action(async (file, options) => {
81
+ if (!existsSync(file)) {
82
+ console.error(chalk.red(`File not found: ${file}`));
83
+ process.exit(1);
84
+ }
85
+ await runExtraction(new PdfExtractor(), file, options);
86
+ });
87
+ // ── extract (auto-detect) ──
88
+ addExtractOptions(program.command("extract")
89
+ .description("Auto-detect source type and extract theme")
90
+ .argument("<source>", "URL, .docx file, or .pdf file")).action(async (source, options) => {
91
+ const extractors = [new UrlExtractor(), new DocxExtractor(), new PdfExtractor()];
92
+ const ext = extractors.find((e) => e.canHandle(source));
93
+ if (!ext) {
94
+ console.error(chalk.red(`Cannot detect source type for: ${source}`));
95
+ process.exit(1);
96
+ }
97
+ await runExtraction(ext, source, options);
98
+ });
99
+ // ── color-systems ──
100
+ program
101
+ .command("color-systems")
102
+ .description("List all 15 built-in color systems")
103
+ .option("-j, --json", "Output as JSON")
104
+ .action((options) => {
105
+ if (options.json) {
106
+ console.log(JSON.stringify(COLOR_SYSTEMS, null, 2));
107
+ return;
108
+ }
109
+ const families = {};
110
+ for (const cs of COLOR_SYSTEMS) {
111
+ const fam = cs.nameCN.split(" ")[0];
112
+ (families[fam] ??= []).push(cs);
113
+ }
114
+ for (const [fam, systems] of Object.entries(families)) {
115
+ console.log(chalk.bold(`\n${fam}`));
116
+ for (const cs of systems) {
117
+ console.log(` ${chalk.cyan(cs.id.padEnd(24))} ${chalk.white(cs.nameCN.split(" ").slice(1).join(" "))} ${chalk.dim(cs.palette.accent)}`);
118
+ }
119
+ }
120
+ console.log();
121
+ });
122
+ // ── mermaid-presets ──
123
+ program
124
+ .command("mermaid-presets")
125
+ .description("List Mermaid theme presets (light / dark / elegant)")
126
+ .option("-j, --json", "Output as JSON")
127
+ .action((options) => {
128
+ if (options.json) {
129
+ console.log(JSON.stringify(MERMAID_PRESETS, null, 2));
130
+ return;
131
+ }
132
+ for (const p of MERMAID_PRESETS) {
133
+ console.log(` ${chalk.cyan(p.id.padEnd(12))} ${chalk.white(p.name)} ${chalk.dim(p.description)}`);
134
+ }
135
+ console.log();
136
+ });
137
+ // ── list ──
138
+ program
139
+ .command("list")
140
+ .description("List all generated themes")
141
+ .option("-d, --themes-dir <dir>", "Themes directory", "themes")
142
+ .action((options) => {
143
+ const dirPath = isAbsolute(options.themesDir) ? options.themesDir : join(process.cwd(), options.themesDir);
144
+ if (!existsSync(dirPath)) {
145
+ console.log(chalk.yellow(`No themes directory: ${dirPath}`));
146
+ return;
147
+ }
148
+ const files = readdirSync(dirPath).filter((f) => f.endsWith(".css"));
149
+ if (files.length === 0) {
150
+ console.log(chalk.yellow("No themes found."));
151
+ return;
152
+ }
153
+ console.log(chalk.bold(`\nThemes in ${dirPath}/:`));
154
+ for (const f of files)
155
+ console.log(` ${chalk.cyan("●")} ${chalk.white(f.replace(".css", ""))}`);
156
+ console.log(`\n${files.length} theme(s) total.\n`);
157
+ });
158
+ // ── validate ──
159
+ program
160
+ .command("validate")
161
+ .description("Validate a theme CSS against v3.0 paradigm rules")
162
+ .argument("<file>", "Path to theme CSS file")
163
+ .action((file) => {
164
+ if (!existsSync(file)) {
165
+ console.error(chalk.red(`File not found: ${file}`));
166
+ process.exit(1);
167
+ }
168
+ const css = readFileSync(file, "utf-8");
169
+ const extract = (name) => {
170
+ const m = css.match(new RegExp(`${name}:\\s*([^;]+);`));
171
+ return m ? m[1].trim() : "";
172
+ };
173
+ const seed = {
174
+ accent: extract("--seed-accent"), accentLight: extract("--seed-accent-light"),
175
+ accentDark: extract("--seed-accent-dark"), surface: extract("--seed-surface"),
176
+ panel: extract("--seed-panel"), panelAlt: extract("--seed-panel-alt"),
177
+ ink: extract("--seed-ink"), inkMuted: extract("--seed-ink-muted"),
178
+ inkDim: extract("--seed-ink-dim"), border: extract("--seed-border"),
179
+ borderStrong: extract("--seed-border-strong"),
180
+ };
181
+ if (!seed.accent) {
182
+ console.error(chalk.yellow("Not a v3.0 paradigm theme (no seed palette found)."));
183
+ process.exit(0);
184
+ }
185
+ console.log(chalk.bold("Seed palette:"));
186
+ for (const [k, v] of Object.entries(seed))
187
+ console.log(` ${chalk.dim(k.padEnd(18))} ${v}`);
188
+ const issues = validateSeedPalette(seed);
189
+ console.log(chalk.bold(`\nParadigm validation (${issues.length} issues):`));
190
+ console.log(summarizeIssues(issues));
191
+ if (issues.filter((i) => i.level === "MUST" || i.level === "MUST_NOT").length > 0)
192
+ process.exit(1);
193
+ });
194
+ // ── Export commands (set-theme, export-html, export-pdf, export) ──
195
+ registerExportCommands(program);
196
+ // ── Summary ──
197
+ function printSummary(style) {
198
+ const s = style.seed;
199
+ console.log(chalk.dim("\n Seed palette:"));
200
+ console.log(` ${chalk.white("surface:")} ${s.surface} ${chalk.white("ink:")} ${s.ink} ${chalk.white("accent:")} ${s.accent}`);
201
+ console.log(` ${chalk.white("panel:")} ${s.panel} ${chalk.white("panel-alt:")} ${s.panelAlt}`);
202
+ if (style.colorSystemId) {
203
+ console.log(chalk.dim(` Color system: ${style.colorSystemId} Mermaid: ${style.mermaidPresetId}`));
204
+ }
205
+ }
206
+ export function main() { program.parse(); }
207
+ main();
208
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Local color system library — predefined seed palettes for popular color schemes.
3
+ * Each scheme provides a complete SeedPalette (5 seed colors + variants).
4
+ */
5
+ import type { SeedPalette } from "./validators.js";
6
+ export interface ColorSystem {
7
+ id: string;
8
+ name: string;
9
+ nameCN: string;
10
+ description: string;
11
+ mode: "light" | "dark";
12
+ palette: SeedPalette;
13
+ }
14
+ export declare const COLOR_SYSTEMS: ColorSystem[];
15
+ export declare function getColorSystem(id: string): ColorSystem | undefined;
16
+ /** Match extracted accent/surface to the nearest color system by hue + saturation distance. */
17
+ export declare function matchColorSystem(accent: string, surface: string): ColorSystem;
@@ -0,0 +1,251 @@
1
+ /**
2
+ * Local color system library — predefined seed palettes for popular color schemes.
3
+ * Each scheme provides a complete SeedPalette (5 seed colors + variants).
4
+ */
5
+ import { hslHue, hslSaturation, hslLightness } from "./contrast.js";
6
+ // ═══════════════════════════════════════════════════════════
7
+ // 莫兰迪 (Morandi) — 低饱和度灰调
8
+ // ═══════════════════════════════════════════════════════════
9
+ const morandiPink = {
10
+ id: "morandi-pink",
11
+ name: "Morandi Pink",
12
+ nameCN: "莫兰迪 灰粉",
13
+ description: "低饱和度灰粉基调,柔和慵懒",
14
+ mode: "light",
15
+ palette: {
16
+ accent: "#b08a82", accentLight: "#e8ddd8", accentDark: "#8b6b63",
17
+ surface: "#f5f2f0", panel: "#ece6e2", panelAlt: "#e2dad5",
18
+ ink: "#3a3533", inkMuted: "#8a807c", inkDim: "#b0a8a4",
19
+ border: "#d8d2ce", borderStrong: "#c0b8b4",
20
+ },
21
+ };
22
+ const morandiGreen = {
23
+ id: "morandi-green",
24
+ name: "Morandi Green",
25
+ nameCN: "莫兰迪 灰绿",
26
+ description: "低饱和度灰绿调,沉静淡雅",
27
+ mode: "light",
28
+ palette: {
29
+ accent: "#8a9b7a", accentLight: "#e2e8dc", accentDark: "#6b7a5e",
30
+ surface: "#f4f5f2", panel: "#e8ebe4", panelAlt: "#dce0d5",
31
+ ink: "#3a3d35", inkMuted: "#8a8d82", inkDim: "#b0b4a8",
32
+ border: "#d4d8ce", borderStrong: "#bcc0b4",
33
+ },
34
+ };
35
+ const morandiBlue = {
36
+ id: "morandi-blue",
37
+ name: "Morandi Blue",
38
+ nameCN: "莫兰迪 灰蓝",
39
+ description: "低饱和度灰蓝调,冷静克制",
40
+ mode: "light",
41
+ palette: {
42
+ accent: "#7a8fa0", accentLight: "#dce4e8", accentDark: "#5e7080",
43
+ surface: "#f2f4f6", panel: "#e6eaee", panelAlt: "#dae0e6",
44
+ ink: "#353a3f", inkMuted: "#828a92", inkDim: "#a8b0b8",
45
+ border: "#ced4dc", borderStrong: "#b4bcc4",
46
+ },
47
+ };
48
+ // ═══════════════════════════════════════════════════════════
49
+ // 马卡龙 (Macaron) — 粉彩糖果色
50
+ // ═══════════════════════════════════════════════════════════
51
+ const macaronStrawberry = {
52
+ id: "macaron-strawberry",
53
+ name: "Macaron Strawberry",
54
+ nameCN: "马卡龙 草莓",
55
+ description: "柔粉奶油色,甜美活泼",
56
+ mode: "light",
57
+ palette: {
58
+ accent: "#e893a6", accentLight: "#fde8ec", accentDark: "#c47082",
59
+ surface: "#fefafb", panel: "#faf0f2", panelAlt: "#f4e4e8",
60
+ ink: "#4a3035", inkMuted: "#9a8086", inkDim: "#c0a8ae",
61
+ border: "#eed4d8", borderStrong: "#dab8be",
62
+ },
63
+ };
64
+ const macaronMint = {
65
+ id: "macaron-mint",
66
+ name: "Macaron Mint",
67
+ nameCN: "马卡龙 薄荷",
68
+ description: "清新薄荷绿,轻盈爽朗",
69
+ mode: "light",
70
+ palette: {
71
+ accent: "#8cc9a8", accentLight: "#e6f6ee", accentDark: "#6aaa88",
72
+ surface: "#f8fcfa", panel: "#eef6f2", panelAlt: "#e2f0e8",
73
+ ink: "#304538", inkMuted: "#809588", inkDim: "#a8c0b0",
74
+ border: "#cce8d6", borderStrong: "#b0d4bc",
75
+ },
76
+ };
77
+ const macaronBlueberry = {
78
+ id: "macaron-blueberry",
79
+ name: "Macaron Blueberry",
80
+ nameCN: "马卡龙 蓝莓",
81
+ description: "淡紫蓝调,温柔梦幻",
82
+ mode: "light",
83
+ palette: {
84
+ accent: "#9aa8e0", accentLight: "#eaecf8", accentDark: "#7888c0",
85
+ surface: "#f8f8fc", panel: "#f0f2f8", panelAlt: "#e6e8f4",
86
+ ink: "#303548", inkMuted: "#808898", inkDim: "#a8b0c0",
87
+ border: "#d0d4e8", borderStrong: "#b8bcd4",
88
+ },
89
+ };
90
+ // ═══════════════════════════════════════════════════════════
91
+ // 北欧 (Nordic) — 极简自然色
92
+ // ═══════════════════════════════════════════════════════════
93
+ const nordicWood = {
94
+ id: "nordic-wood",
95
+ name: "Nordic Wood",
96
+ nameCN: "北欧 原木",
97
+ description: "浅木色与暖白搭配,自然温馨",
98
+ mode: "light",
99
+ palette: {
100
+ accent: "#8b7355", accentLight: "#e8e0d4", accentDark: "#6b5a40",
101
+ surface: "#faf8f4", panel: "#f2eeea", panelAlt: "#e8e2dc",
102
+ ink: "#3a3530", inkMuted: "#8a8078", inkDim: "#b0a89e",
103
+ border: "#d8d0c4", borderStrong: "#c0b8aa",
104
+ },
105
+ };
106
+ const nordicMinimal = {
107
+ id: "nordic-minimal",
108
+ name: "Nordic Minimal",
109
+ nameCN: "北欧 极简白",
110
+ description: "纯白基调,冷蓝点缀,极致简洁",
111
+ mode: "light",
112
+ palette: {
113
+ accent: "#4a7c96", accentLight: "#dce6ec", accentDark: "#3a6078",
114
+ surface: "#fefefe", panel: "#f6f8fa", panelAlt: "#eef2f6",
115
+ ink: "#2a2a2a", inkMuted: "#7a7a7a", inkDim: "#aaaaaa",
116
+ border: "#e0e0e0", borderStrong: "#c8c8c8",
117
+ },
118
+ };
119
+ const nordicGray = {
120
+ id: "nordic-gray",
121
+ name: "Nordic Gray",
122
+ nameCN: "北欧 灰调",
123
+ description: "中灰基调,森林绿点缀,沉稳自然",
124
+ mode: "light",
125
+ palette: {
126
+ accent: "#6b8a7a", accentLight: "#dce6e0", accentDark: "#4e6b5c",
127
+ surface: "#f6f5f4", panel: "#edebe8", panelAlt: "#e2e0dc",
128
+ ink: "#3a3a3a", inkMuted: "#8a8a8a", inkDim: "#b0b0b0",
129
+ border: "#d8d6d2", borderStrong: "#c0beb8",
130
+ },
131
+ };
132
+ // ═══════════════════════════════════════════════════════════
133
+ // 复古 (Vintage) — 暖棕岁月感
134
+ // ═══════════════════════════════════════════════════════════
135
+ const vintageWarmBrown = {
136
+ id: "vintage-brown",
137
+ name: "Vintage Warm Brown",
138
+ nameCN: "复古 暖棕",
139
+ description: "暖棕纸色,旧时光氛围",
140
+ mode: "light",
141
+ palette: {
142
+ accent: "#8b5e3c", accentLight: "#e8dcd0", accentDark: "#6b4428",
143
+ surface: "#f8f2ea", panel: "#f0e8dc", panelAlt: "#e6dcc8",
144
+ ink: "#3a3028", inkMuted: "#8a7a6a", inkDim: "#b0a090",
145
+ border: "#d4c8b8", borderStrong: "#bca898",
146
+ },
147
+ };
148
+ const vintageNewspaper = {
149
+ id: "vintage-newspaper",
150
+ name: "Vintage Newspaper",
151
+ nameCN: "复古 旧报纸",
152
+ description: "泛黄纸色,怀旧阅读感",
153
+ mode: "light",
154
+ palette: {
155
+ accent: "#7a5a3a", accentLight: "#e8dcc8", accentDark: "#5a4028",
156
+ surface: "#f4f0e0", panel: "#ece4d0", panelAlt: "#e2d8c0",
157
+ ink: "#3a3528", inkMuted: "#8a8070", inkDim: "#b0a898",
158
+ border: "#c8c0a8", borderStrong: "#b0a890",
159
+ },
160
+ };
161
+ const vintageWine = {
162
+ id: "vintage-wine",
163
+ name: "Vintage Wine",
164
+ nameCN: "复古 酒红",
165
+ description: "暗酒红点缀,浓郁优雅",
166
+ mode: "light",
167
+ palette: {
168
+ accent: "#8b3a3a", accentLight: "#e8d4d4", accentDark: "#6b2828",
169
+ surface: "#f8f2f2", panel: "#f0e8e8", panelAlt: "#e6dcdc",
170
+ ink: "#3a2a2a", inkMuted: "#8a7070", inkDim: "#b09898",
171
+ border: "#d4c0c0", borderStrong: "#bca8a8",
172
+ },
173
+ };
174
+ // ═══════════════════════════════════════════════════════════
175
+ // 薄荷绿 (Mint) — 清新自然
176
+ // ═══════════════════════════════════════════════════════════
177
+ const mintFresh = {
178
+ id: "mint-fresh",
179
+ name: "Mint Fresh",
180
+ nameCN: "薄荷绿 清新",
181
+ description: "鲜嫩薄荷叶色,清爽宜人",
182
+ mode: "light",
183
+ palette: {
184
+ accent: "#5aaa80", accentLight: "#dceee4", accentDark: "#408860",
185
+ surface: "#f8fcfa", panel: "#eef6f2", panelAlt: "#e2f0e8",
186
+ ink: "#2a3a30", inkMuted: "#708a78", inkDim: "#98b0a0",
187
+ border: "#c8e4d4", borderStrong: "#a8ccb8",
188
+ },
189
+ };
190
+ const mintDeep = {
191
+ id: "mint-deep",
192
+ name: "Mint Deep",
193
+ nameCN: "薄荷绿 深薄荷",
194
+ description: "深邃薄荷绿,沉稳清新",
195
+ mode: "light",
196
+ palette: {
197
+ accent: "#3a8a60", accentLight: "#d4e8dc", accentDark: "#286a48",
198
+ surface: "#f4f8f6", panel: "#e8f0ec", panelAlt: "#dce8e2",
199
+ ink: "#283830", inkMuted: "#708878", inkDim: "#98b0a0",
200
+ border: "#b8dcc8", borderStrong: "#98c4ac",
201
+ },
202
+ };
203
+ const mintDew = {
204
+ id: "mint-dew",
205
+ name: "Mint Dew",
206
+ nameCN: "薄荷绿 晨露",
207
+ description: "晨露般清透浅绿,轻柔温和",
208
+ mode: "light",
209
+ palette: {
210
+ accent: "#7ab898", accentLight: "#e0f0e8", accentDark: "#5a9878",
211
+ surface: "#fafdfc", panel: "#f2f8f4", panelAlt: "#e8f2ec",
212
+ ink: "#2c3832", inkMuted: "#788880", inkDim: "#a0b0a8",
213
+ border: "#d0e8dc", borderStrong: "#b8d4c4",
214
+ },
215
+ };
216
+ // ── Registry ──
217
+ export const COLOR_SYSTEMS = [
218
+ morandiPink, morandiGreen, morandiBlue,
219
+ macaronStrawberry, macaronMint, macaronBlueberry,
220
+ nordicWood, nordicMinimal, nordicGray,
221
+ vintageWarmBrown, vintageNewspaper, vintageWine,
222
+ mintFresh, mintDeep, mintDew,
223
+ ];
224
+ export function getColorSystem(id) {
225
+ return COLOR_SYSTEMS.find((cs) => cs.id === id);
226
+ }
227
+ /** Match extracted accent/surface to the nearest color system by hue + saturation distance. */
228
+ export function matchColorSystem(accent, surface) {
229
+ const hAccent = hslHue(accent);
230
+ const sAccent = hslSaturation(accent);
231
+ const lSurface = hslLightness(surface);
232
+ let best = COLOR_SYSTEMS[0];
233
+ let bestDist = Infinity;
234
+ for (const cs of COLOR_SYSTEMS) {
235
+ const hCs = hslHue(cs.palette.accent);
236
+ const sCs = hslSaturation(cs.palette.accent);
237
+ const lCs = hslLightness(cs.palette.surface);
238
+ // Weighted distance: hue 40%, saturation 30%, lightness 30%
239
+ const dH = Math.abs(hAccent - hCs);
240
+ const hueDist = Math.min(dH, 360 - dH) / 360; // wrap around
241
+ const satDist = Math.abs(sAccent - sCs);
242
+ const lumDist = Math.abs(lSurface - lCs);
243
+ const dist = hueDist * 0.4 + satDist * 0.3 + lumDist * 0.3;
244
+ if (dist < bestDist) {
245
+ bestDist = dist;
246
+ best = cs;
247
+ }
248
+ }
249
+ return best;
250
+ }
251
+ //# sourceMappingURL=color-systems.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-systems.js","sourceRoot":"","sources":["../src/color-systems.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** Color manipulation utilities. */
2
+ export declare function hexToRgb(hex: string): [number, number, number];
3
+ export declare function rgbToHex(r: number, g: number, b: number): string;
4
+ export declare function lighten(hex: string, factor?: number): string;
5
+ export declare function darken(hex: string, factor?: number): string;
6
+ export declare function toRgba(hex: string, alpha?: number): string;
7
+ export declare function rgbToHsl(r: number, g: number, b: number): [number, number, number];
8
+ export declare function deriveSyntaxColors(baseHex: string): Record<string, string>;
9
+ export declare function normalizeThemeStyle(style: import("./models.js").ThemeStyle): void;
@@ -0,0 +1,112 @@
1
+ /** Color manipulation utilities. */
2
+ export function hexToRgb(hex) {
3
+ hex = hex.replace("#", "");
4
+ if (hex.length === 3)
5
+ hex = hex.split("").map((c) => c + c).join("");
6
+ return [
7
+ parseInt(hex.substring(0, 2), 16),
8
+ parseInt(hex.substring(2, 4), 16),
9
+ parseInt(hex.substring(4, 6), 16),
10
+ ];
11
+ }
12
+ export function rgbToHex(r, g, b) {
13
+ const clamp = (v) => Math.max(0, Math.min(255, Math.round(v)));
14
+ return `#${clamp(r).toString(16).padStart(2, "0")}${clamp(g).toString(16).padStart(2, "0")}${clamp(b).toString(16).padStart(2, "0")}`;
15
+ }
16
+ export function lighten(hex, factor = 0.3) {
17
+ const [r, g, b] = hexToRgb(hex);
18
+ return rgbToHex(r + (255 - r) * factor, g + (255 - g) * factor, b + (255 - b) * factor);
19
+ }
20
+ export function darken(hex, factor = 0.15) {
21
+ const [r, g, b] = hexToRgb(hex);
22
+ return rgbToHex(r * (1 - factor), g * (1 - factor), b * (1 - factor));
23
+ }
24
+ export function toRgba(hex, alpha = 0.18) {
25
+ const [r, g, b] = hexToRgb(hex);
26
+ return `rgba(${r}, ${g}, ${b}, ${alpha})`;
27
+ }
28
+ export function rgbToHsl(r, g, b) {
29
+ r /= 255;
30
+ g /= 255;
31
+ b /= 255;
32
+ const max = Math.max(r, g, b);
33
+ const min = Math.min(r, g, b);
34
+ let h = 0, s;
35
+ const l = (max + min) / 2;
36
+ if (max === min) {
37
+ h = s = 0;
38
+ }
39
+ else {
40
+ const d = max - min;
41
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
42
+ switch (max) {
43
+ case r:
44
+ h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
45
+ break;
46
+ case g:
47
+ h = ((b - r) / d + 2) / 6;
48
+ break;
49
+ case b:
50
+ h = ((r - g) / d + 4) / 6;
51
+ break;
52
+ }
53
+ }
54
+ return [h, s, l];
55
+ }
56
+ export function deriveSyntaxColors(baseHex) {
57
+ const [r, g, b] = hexToRgb(baseHex);
58
+ const [, , l] = rgbToHsl(r, g, b);
59
+ const isDark = l < 0.5;
60
+ if (isDark) {
61
+ return {
62
+ comment: lighten(baseHex, 0.4),
63
+ punctuation: lighten(baseHex, 0.2),
64
+ keyword: "#569cd6",
65
+ booleanBuiltinTag: "#569cd6",
66
+ string: "#ce9178",
67
+ number: "#b5cea8",
68
+ functionClass: "#dcdcaa",
69
+ operator: lighten(baseHex, 0.2),
70
+ variable: lighten(baseHex, 0.2),
71
+ regex: "#d16969",
72
+ };
73
+ }
74
+ else {
75
+ return {
76
+ comment: darken(baseHex, 0.4),
77
+ punctuation: baseHex,
78
+ keyword: "#0000ff",
79
+ booleanBuiltinTag: "#0000ff",
80
+ string: "#a31515",
81
+ number: "#098658",
82
+ functionClass: "#795e26",
83
+ operator: baseHex,
84
+ variable: baseHex,
85
+ regex: "#811f3f",
86
+ };
87
+ }
88
+ }
89
+ export function normalizeThemeStyle(style) {
90
+ const p = style.palette;
91
+ const t = style.typography;
92
+ const s = style.syntax;
93
+ if (!p.headingColor)
94
+ p.headingColor = p.textColor;
95
+ if (!p.codeColor)
96
+ p.codeColor = p.textColor;
97
+ if (!p.blockquoteBorder)
98
+ p.blockquoteBorder = p.accentColor;
99
+ if (!p.selectionBg)
100
+ p.selectionBg = toRgba(p.accentColor);
101
+ if (!t.headingFontFamily)
102
+ t.headingFontFamily = t.bodyFontFamily;
103
+ if (!s.comment) {
104
+ const derived = deriveSyntaxColors(p.codeBlockText);
105
+ for (const [key, value] of Object.entries(derived)) {
106
+ const k = key;
107
+ if (!s[k])
108
+ s[key] = value;
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=color-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../src/color-utils.ts"],"names":[],"mappings":"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"}