@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.
- package/.claude/skills/colamd-themes-preview.skill.md +333 -0
- package/.claude/skills/colamd-themes.skill.md +155 -0
- package/.hermes/skills/tools/colamd-themes/SKILL.md +159 -0
- package/.openclaw/skills/colamd-themes/SKILL.md +166 -0
- package/.opencode/skills/colamd-themes/SKILL.md +162 -0
- package/.trae/rules/colamd-themes.md +150 -0
- package/CHANGELOG.md +102 -0
- package/README.md +373 -0
- package/README_CN.md +373 -0
- package/RELEASENOTE.md +177 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +208 -0
- package/dist/cli.js.map +1 -0
- package/dist/color-systems.d.ts +17 -0
- package/dist/color-systems.js +251 -0
- package/dist/color-systems.js.map +1 -0
- package/dist/color-utils.d.ts +9 -0
- package/dist/color-utils.js +112 -0
- package/dist/color-utils.js.map +1 -0
- package/dist/contrast.d.ts +15 -0
- package/dist/contrast.js +63 -0
- package/dist/contrast.js.map +1 -0
- package/dist/docx-style-paradigm.d.ts +153 -0
- package/dist/docx-style-paradigm.js +640 -0
- package/dist/docx-style-paradigm.js.map +1 -0
- package/dist/export-cli.d.ts +10 -0
- package/dist/export-cli.js +266 -0
- package/dist/export-cli.js.map +1 -0
- package/dist/extractors/base.d.ts +6 -0
- package/dist/extractors/base.js +3 -0
- package/dist/extractors/base.js.map +1 -0
- package/dist/extractors/docx-extractor.d.ts +52 -0
- package/dist/extractors/docx-extractor.js +370 -0
- package/dist/extractors/docx-extractor.js.map +1 -0
- package/dist/extractors/pdf-extractor.d.ts +66 -0
- package/dist/extractors/pdf-extractor.js +430 -0
- package/dist/extractors/pdf-extractor.js.map +1 -0
- package/dist/extractors/url-extractor.d.ts +104 -0
- package/dist/extractors/url-extractor.js +761 -0
- package/dist/extractors/url-extractor.js.map +1 -0
- package/dist/generator.d.ts +4 -0
- package/dist/generator.js +71 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/mermaid-presets.d.ts +14 -0
- package/dist/mermaid-presets.js +122 -0
- package/dist/mermaid-presets.js.map +1 -0
- package/dist/models.d.ts +106 -0
- package/dist/models.js +92 -0
- package/dist/models.js.map +1 -0
- package/dist/renderer.d.ts +70 -0
- package/dist/renderer.js +204 -0
- package/dist/renderer.js.map +1 -0
- package/dist/templates/template.css +498 -0
- package/dist/templates/theme-paradigm.md +658 -0
- package/dist/templates/theme-template.hbs +370 -0
- package/dist/theme-store.d.ts +37 -0
- package/dist/theme-store.js +90 -0
- package/dist/theme-store.js.map +1 -0
- package/dist/validators.d.ts +26 -0
- package/dist/validators.js +144 -0
- package/dist/validators.js.map +1 -0
- package/package.json +36 -0
- package/skills/build-skills.sh +166 -0
- package/skills/colamd-themes/SKILL.md +148 -0
- package/src/cli.ts +200 -0
- package/src/color-systems.ts +289 -0
- package/src/color-utils.ts +120 -0
- package/src/contrast.ts +66 -0
- package/src/docx-style-paradigm.ts +811 -0
- package/src/export-cli.ts +301 -0
- package/src/extractors/base.ts +8 -0
- package/src/extractors/docx-extractor.ts +417 -0
- package/src/extractors/pdf-extractor.ts +527 -0
- package/src/extractors/url-extractor.ts +927 -0
- package/src/generator.ts +88 -0
- package/src/index.ts +29 -0
- package/src/mermaid-presets.ts +142 -0
- package/src/models.ts +212 -0
- package/src/renderer.ts +277 -0
- package/src/templates/template.css +498 -0
- package/src/templates/theme-paradigm.md +658 -0
- package/src/templates/theme-template.hbs +370 -0
- package/src/theme-store.ts +112 -0
- package/src/types/pdf-parse.d.ts +12 -0
- package/src/validators.ts +176 -0
- package/themes/.gitkeep +0 -0
- package/themes/academic-paper-pt.css +1805 -0
- package/themes/academic-paper.css +1099 -0
- package/themes/academic-style.css +2430 -0
- package/themes/colly.css +370 -0
- package/themes/elegant.css +671 -0
- package/themes/forest-ink.css +664 -0
- package/themes/guizang.css +732 -0
- package/themes/meeting-minutes.css +370 -0
- package/themes/pixso-design.css +1261 -0
- package/themes/salvator-blog.css +370 -0
- package/themes/swiss-design copy.css +746 -0
- package/themes/swiss-design.css +746 -0
- package/themes/template.css +498 -0
- package/themes/trae-blue.css +737 -0
- package/themes-preview/colly-preview.html +623 -0
- package/themes-preview/demo-content.md +187 -0
- package/themes-preview/meeting-minutes-preview.html +625 -0
- package/themes-preview/salvator-blog-preview.html +623 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export CLI commands: set-theme, export-html, export-pdf, export (batch).
|
|
3
|
+
*
|
|
4
|
+
* These are registered onto the main Commander program in cli.ts.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync, readdirSync, statSync, mkdirSync } from "node:fs";
|
|
7
|
+
import { join, isAbsolute, resolve, basename } from "node:path";
|
|
8
|
+
import chalk from "chalk";
|
|
9
|
+
import ora from "ora";
|
|
10
|
+
import { BUILTIN_THEMES, getConfig, setDefaultTheme as storeSetDefault, registerTheme as storeRegister, unregisterTheme as storeUnregister, resolveTheme, } from "./theme-store.js";
|
|
11
|
+
import { ColamdRenderer } from "./renderer.js";
|
|
12
|
+
// ── set-theme ──
|
|
13
|
+
function registerSetTheme(program) {
|
|
14
|
+
program
|
|
15
|
+
.command("set-theme")
|
|
16
|
+
.description("Set or register a theme for export")
|
|
17
|
+
.argument("<name>", "Theme name (built-in or custom)")
|
|
18
|
+
.option("--css <file>", "Register as custom theme using this CSS file")
|
|
19
|
+
.option("--default", "Set as the default export theme")
|
|
20
|
+
.option("--remove", "Unregister a custom theme")
|
|
21
|
+
.action((name, options) => {
|
|
22
|
+
// Remove
|
|
23
|
+
if (options.remove) {
|
|
24
|
+
if (storeUnregister(name)) {
|
|
25
|
+
console.log(chalk.green(`✔ Unregistered custom theme "${name}"`));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
console.log(chalk.yellow(`Theme "${name}" is not registered.`));
|
|
29
|
+
}
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
// Register custom theme
|
|
33
|
+
if (options.css) {
|
|
34
|
+
const cssPath = isAbsolute(options.css) ? options.css : resolve(process.cwd(), options.css);
|
|
35
|
+
if (!existsSync(cssPath)) {
|
|
36
|
+
console.error(chalk.red(`CSS file not found: ${cssPath}`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
storeRegister(name, cssPath);
|
|
40
|
+
console.log(chalk.green(`✔ Registered custom theme "${name}" → ${cssPath}`));
|
|
41
|
+
if (options.default) {
|
|
42
|
+
storeSetDefault(name);
|
|
43
|
+
console.log(chalk.green(`✔ Set "${name}" as default theme`));
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Set as default (built-in or already registered)
|
|
48
|
+
if (!BUILTIN_THEMES.includes(name)) {
|
|
49
|
+
const config = getConfig();
|
|
50
|
+
if (!(name in config.themes)) {
|
|
51
|
+
console.error(chalk.red(`Unknown theme "${name}". `) +
|
|
52
|
+
chalk.dim(`Built-in: ${BUILTIN_THEMES.join(", ")}. `) +
|
|
53
|
+
chalk.dim("Or register a custom theme with --css <file>."));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
storeSetDefault(name);
|
|
58
|
+
console.log(chalk.green(`✔ Default theme set to "${name}"`));
|
|
59
|
+
// Show current config
|
|
60
|
+
const config = getConfig();
|
|
61
|
+
console.log(chalk.dim(`\n Default: ${config.defaultTheme}`));
|
|
62
|
+
const customs = Object.keys(config.themes);
|
|
63
|
+
if (customs.length) {
|
|
64
|
+
console.log(chalk.dim(` Custom themes: ${customs.join(", ")}`));
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
// ── export-html ──
|
|
69
|
+
function registerExportHTML(program) {
|
|
70
|
+
program
|
|
71
|
+
.command("export-html")
|
|
72
|
+
.description("Export a Markdown file to standalone HTML with theme applied")
|
|
73
|
+
.argument("<input>", "Path to .md file")
|
|
74
|
+
.option("-t, --theme <name>", "Theme name (built-in, custom, or CSS file path)")
|
|
75
|
+
.option("-o, --output <path>", "Output HTML file path")
|
|
76
|
+
.action(async (input, options) => {
|
|
77
|
+
const inputPath = isAbsolute(input) ? input : resolve(process.cwd(), input);
|
|
78
|
+
if (!existsSync(inputPath)) {
|
|
79
|
+
console.error(chalk.red(`File not found: ${inputPath}`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
const md = readFileSync(inputPath, "utf-8");
|
|
83
|
+
const title = basename(inputPath, ".md");
|
|
84
|
+
const outputPath = options.output
|
|
85
|
+
? (isAbsolute(options.output) ? options.output : resolve(process.cwd(), options.output))
|
|
86
|
+
: inputPath.replace(/\.md$/i, ".html");
|
|
87
|
+
let theme;
|
|
88
|
+
try {
|
|
89
|
+
theme = resolveTheme(options.theme);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
console.error(chalk.red(err.message));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
const spinner = ora(`Rendering ${basename(inputPath)} → HTML (${theme.themeName})...`).start();
|
|
96
|
+
try {
|
|
97
|
+
const { renderMarkdown } = await import("./renderer.js");
|
|
98
|
+
const result = await renderMarkdown({
|
|
99
|
+
markdown: md,
|
|
100
|
+
themeName: theme.themeName,
|
|
101
|
+
customCSS: theme.customCSS,
|
|
102
|
+
title,
|
|
103
|
+
});
|
|
104
|
+
const { writeFileSync } = await import("node:fs");
|
|
105
|
+
writeFileSync(outputPath, result.html, "utf-8");
|
|
106
|
+
spinner.succeed(chalk.green(`Exported: ${outputPath}`));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
spinner.fail(chalk.red(`Export failed: ${err.message}`));
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// ── export-pdf ──
|
|
115
|
+
function registerExportPDF(program) {
|
|
116
|
+
program
|
|
117
|
+
.command("export-pdf")
|
|
118
|
+
.description("Export a Markdown file to PDF with theme applied")
|
|
119
|
+
.argument("<input>", "Path to .md file")
|
|
120
|
+
.option("-t, --theme <name>", "Theme name (built-in, custom, or CSS file path)")
|
|
121
|
+
.option("-o, --output <path>", "Output PDF file path")
|
|
122
|
+
.option("--format <size>", "Page format: A4, Letter, A3", "A4")
|
|
123
|
+
.action(async (input, options) => {
|
|
124
|
+
const inputPath = isAbsolute(input) ? input : resolve(process.cwd(), input);
|
|
125
|
+
if (!existsSync(inputPath)) {
|
|
126
|
+
console.error(chalk.red(`File not found: ${inputPath}`));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
const md = readFileSync(inputPath, "utf-8");
|
|
130
|
+
const title = basename(inputPath, ".md");
|
|
131
|
+
const outputPath = options.output
|
|
132
|
+
? (isAbsolute(options.output) ? options.output : resolve(process.cwd(), options.output))
|
|
133
|
+
: inputPath.replace(/\.md$/i, ".pdf");
|
|
134
|
+
let theme;
|
|
135
|
+
try {
|
|
136
|
+
theme = resolveTheme(options.theme);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
console.error(chalk.red(err.message));
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const spinner = ora(`Rendering ${basename(inputPath)} → PDF (${theme.themeName})...`).start();
|
|
143
|
+
try {
|
|
144
|
+
const { renderPDF } = await import("./renderer.js");
|
|
145
|
+
const pdfBuffer = await renderPDF({
|
|
146
|
+
markdown: md,
|
|
147
|
+
themeName: theme.themeName,
|
|
148
|
+
customCSS: theme.customCSS,
|
|
149
|
+
title,
|
|
150
|
+
}, { format: options.format });
|
|
151
|
+
const { writeFileSync } = await import("node:fs");
|
|
152
|
+
writeFileSync(outputPath, pdfBuffer);
|
|
153
|
+
spinner.succeed(chalk.green(`Exported: ${outputPath}`));
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
spinner.fail(chalk.red(`Export failed: ${err.message}`));
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// ── export (batch) ──
|
|
162
|
+
function registerExport(program) {
|
|
163
|
+
program
|
|
164
|
+
.command("export")
|
|
165
|
+
.description("Batch export Markdown files to HTML or PDF")
|
|
166
|
+
.argument("<inputs...>", "Paths to .md files (supports globs)")
|
|
167
|
+
.option("--format <type>", "Output format: html or pdf", "html")
|
|
168
|
+
.option("-t, --theme <name>", "Theme name")
|
|
169
|
+
.option("-d, --output-dir <dir>", "Output directory", ".")
|
|
170
|
+
.action(async (inputs, options) => {
|
|
171
|
+
// Resolve glob inputs (shell usually expands, but handle edge cases)
|
|
172
|
+
const files = [];
|
|
173
|
+
for (const input of inputs) {
|
|
174
|
+
const p = isAbsolute(input) ? input : resolve(process.cwd(), input);
|
|
175
|
+
if (existsSync(p)) {
|
|
176
|
+
if (statSync(p).isDirectory()) {
|
|
177
|
+
// Directory: include all .md files
|
|
178
|
+
const dirFiles = readdirSync(p)
|
|
179
|
+
.filter((f) => f.endsWith(".md"))
|
|
180
|
+
.map((f) => join(p, f));
|
|
181
|
+
files.push(...dirFiles);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
files.push(p);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log(chalk.yellow(`Skipping (not found): ${input}`));
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (files.length === 0) {
|
|
192
|
+
console.error(chalk.red("No valid input files found."));
|
|
193
|
+
process.exit(1);
|
|
194
|
+
}
|
|
195
|
+
let theme;
|
|
196
|
+
try {
|
|
197
|
+
theme = resolveTheme(options.theme);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
console.error(chalk.red(err.message));
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
const outDir = isAbsolute(options.outputDir ?? ".")
|
|
204
|
+
? (options.outputDir ?? ".")
|
|
205
|
+
: resolve(process.cwd(), options.outputDir ?? ".");
|
|
206
|
+
const fmt = options.format ?? "html";
|
|
207
|
+
// Ensure output directory exists
|
|
208
|
+
if (!existsSync(outDir))
|
|
209
|
+
mkdirSync(outDir, { recursive: true });
|
|
210
|
+
console.log(chalk.bold(`\nBatch export: ${files.length} file(s) → ${fmt.toUpperCase()}`));
|
|
211
|
+
console.log(chalk.dim(` Theme: ${theme.themeName}`));
|
|
212
|
+
console.log(chalk.dim(` Output: ${outDir}/\n`));
|
|
213
|
+
const renderer = new ColamdRenderer();
|
|
214
|
+
let success = 0;
|
|
215
|
+
let failed = 0;
|
|
216
|
+
try {
|
|
217
|
+
await renderer.init();
|
|
218
|
+
for (const file of files) {
|
|
219
|
+
const name = basename(file, ".md");
|
|
220
|
+
const md = readFileSync(file, "utf-8");
|
|
221
|
+
const outPath = join(outDir, `${name}.${fmt === "pdf" ? "pdf" : "html"}`);
|
|
222
|
+
const spinner = ora(` ${name}.md`).start();
|
|
223
|
+
try {
|
|
224
|
+
const input = {
|
|
225
|
+
markdown: md,
|
|
226
|
+
themeName: theme.themeName,
|
|
227
|
+
customCSS: theme.customCSS,
|
|
228
|
+
title: name,
|
|
229
|
+
};
|
|
230
|
+
if (fmt === "pdf") {
|
|
231
|
+
const pdfBuffer = await renderer.exportPDF(input);
|
|
232
|
+
const { writeFileSync } = await import("node:fs");
|
|
233
|
+
writeFileSync(outPath, pdfBuffer);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
const result = await renderer.render(input);
|
|
237
|
+
const { writeFileSync } = await import("node:fs");
|
|
238
|
+
writeFileSync(outPath, result.html, "utf-8");
|
|
239
|
+
}
|
|
240
|
+
spinner.succeed(`${name}.${fmt === "pdf" ? "pdf" : "html"}`);
|
|
241
|
+
success++;
|
|
242
|
+
}
|
|
243
|
+
catch (err) {
|
|
244
|
+
spinner.fail(`${name}.md — ${err.message}`);
|
|
245
|
+
failed++;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
finally {
|
|
250
|
+
await renderer.close();
|
|
251
|
+
}
|
|
252
|
+
console.log(chalk.bold(`\nDone: ${chalk.green(`${success} exported`)}`) +
|
|
253
|
+
(failed ? chalk.red(`, ${failed} failed`) : "") +
|
|
254
|
+
"\n");
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Register all export-related commands onto the program.
|
|
259
|
+
*/
|
|
260
|
+
export function registerExportCommands(program) {
|
|
261
|
+
registerSetTheme(program);
|
|
262
|
+
registerExportHTML(program);
|
|
263
|
+
registerExportPDF(program);
|
|
264
|
+
registerExport(program);
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=export-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-cli.js","sourceRoot":"","sources":["../src/export-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/extractors/base.ts"],"names":[],"mappings":"AAAA,iDAAiD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOCX 文档样式提取器 — v2.0
|
|
3
|
+
*
|
|
4
|
+
* 增强功能:
|
|
5
|
+
* 1. 提取各级标题(H1-H6)的完整字体样式定义
|
|
6
|
+
* 2. 提取正文字体、字号、颜色、行间距
|
|
7
|
+
* 3. 提取表格样式(表头/单元格字体、背景色、边框)
|
|
8
|
+
* 4. 对无法提取的样式应用 DocxStyleParadigm 标准参考值
|
|
9
|
+
* 5. 自动验证 WCAG 对比度合规性
|
|
10
|
+
*/
|
|
11
|
+
import type { Extractor } from "./base.js";
|
|
12
|
+
import { type ThemeStyle } from "../models.js";
|
|
13
|
+
export declare class DocxExtractor implements Extractor {
|
|
14
|
+
canHandle(source: string): boolean;
|
|
15
|
+
extract(source: string): Promise<ThemeStyle>;
|
|
16
|
+
/**
|
|
17
|
+
* 从 HTML 输出中提取详细的文档元素样式
|
|
18
|
+
*/
|
|
19
|
+
private extractDetailedStyles;
|
|
20
|
+
/**
|
|
21
|
+
* 提取正文基础样式(字体、字号、行高)
|
|
22
|
+
*/
|
|
23
|
+
private extractBodyStyles;
|
|
24
|
+
/**
|
|
25
|
+
* 提取各级标题的详细样式
|
|
26
|
+
*/
|
|
27
|
+
private extractHeadingStyles;
|
|
28
|
+
/**
|
|
29
|
+
* 提取表格详细样式(表头、单元格、边框)
|
|
30
|
+
*/
|
|
31
|
+
private extractTableStyles;
|
|
32
|
+
/**
|
|
33
|
+
* 提取全局色彩方案
|
|
34
|
+
*/
|
|
35
|
+
private extractColorPalette;
|
|
36
|
+
/**
|
|
37
|
+
* 提取引用块和代码块样式
|
|
38
|
+
*/
|
|
39
|
+
private extractBlockStyles;
|
|
40
|
+
/**
|
|
41
|
+
* 解析内联 style 字符串为键值对对象
|
|
42
|
+
*/
|
|
43
|
+
private parseInlineStyle;
|
|
44
|
+
/**
|
|
45
|
+
* 应用 DocxStyleParadigm 标准参考值填充缺失字段
|
|
46
|
+
*/
|
|
47
|
+
private applyParadigmDefaults;
|
|
48
|
+
/**
|
|
49
|
+
* 将 ThemeStyle 转换为 DocumentStyleParadigm 用于验证
|
|
50
|
+
*/
|
|
51
|
+
private themeToParadigm;
|
|
52
|
+
}
|