@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
package/dist/renderer.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Puppeteer-based rendering engine for ColaMD HTML/PDF export.
|
|
3
|
+
*
|
|
4
|
+
* Uses @bytechain.cn/colamd/renderer to create a headless Milkdown editor,
|
|
5
|
+
* apply themes, render mermaid/math, and export standalone HTML or PDF.
|
|
6
|
+
*
|
|
7
|
+
* Architecture:
|
|
8
|
+
* Local HTTP server (serves renderer.js + page HTML)
|
|
9
|
+
* → Puppeteer page (same-origin, no CORS)
|
|
10
|
+
* → createColaMDEditor()
|
|
11
|
+
* → applyTheme() + setMarkdown() + ensureAllPluginsRendered()
|
|
12
|
+
* → buildExportHTML() / page.pdf()
|
|
13
|
+
*/
|
|
14
|
+
import puppeteer from "puppeteer";
|
|
15
|
+
import { createServer } from "node:http";
|
|
16
|
+
import { existsSync, createReadStream } from "node:fs";
|
|
17
|
+
import { resolve, dirname } from "node:path";
|
|
18
|
+
// ── File resolution ──
|
|
19
|
+
/** Locate the ColaMD renderer ESM bundle in node_modules. */
|
|
20
|
+
function findRendererPath() {
|
|
21
|
+
const candidates = [
|
|
22
|
+
resolve(dirname(new URL(import.meta.url).pathname), "../node_modules/@bytechain.cn/colamd/dist/lib/colamd-renderer.js"),
|
|
23
|
+
resolve(process.cwd(), "node_modules/@bytechain.cn/colamd/dist/lib/colamd-renderer.js"),
|
|
24
|
+
];
|
|
25
|
+
for (const p of candidates) {
|
|
26
|
+
if (existsSync(p))
|
|
27
|
+
return p;
|
|
28
|
+
}
|
|
29
|
+
throw new Error("Cannot find @bytechain.cn/colamd renderer. " +
|
|
30
|
+
"Install it: npm install @bytechain.cn/colamd");
|
|
31
|
+
}
|
|
32
|
+
// ── Local HTTP server ──
|
|
33
|
+
const SHELL_HTML = `<!DOCTYPE html>
|
|
34
|
+
<html><head>
|
|
35
|
+
<meta charset="utf-8">
|
|
36
|
+
<style>body{margin:0;padding:0}#editor{width:100%;min-height:100vh}</style>
|
|
37
|
+
</head><body><div id="editor"></div></body></html>`;
|
|
38
|
+
function startLocalServer(rendererPath) {
|
|
39
|
+
return new Promise((resolveStart, reject) => {
|
|
40
|
+
const server = createServer((req, res) => {
|
|
41
|
+
if (req.url === "/" || req.url === "/index.html") {
|
|
42
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
43
|
+
res.end(SHELL_HTML);
|
|
44
|
+
}
|
|
45
|
+
else if (req.url === "/colamd-renderer.js") {
|
|
46
|
+
res.writeHead(200, { "Content-Type": "application/javascript; charset=utf-8" });
|
|
47
|
+
createReadStream(rendererPath).pipe(res);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
res.writeHead(404);
|
|
51
|
+
res.end();
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
server.listen(0, "127.0.0.1", () => {
|
|
55
|
+
const addr = server.address();
|
|
56
|
+
const port = typeof addr === "object" && addr ? addr.port : 0;
|
|
57
|
+
resolveStart({
|
|
58
|
+
port,
|
|
59
|
+
close: () => new Promise((resolveClose) => server.close(() => resolveClose())),
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
server.on("error", reject);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// ── Renderer ──
|
|
66
|
+
export class ColamdRenderer {
|
|
67
|
+
browser = null;
|
|
68
|
+
page = null;
|
|
69
|
+
server = null;
|
|
70
|
+
ready = false;
|
|
71
|
+
/** Launch Puppeteer and prepare the editor page. */
|
|
72
|
+
async init() {
|
|
73
|
+
if (this.browser)
|
|
74
|
+
return;
|
|
75
|
+
// Start local HTTP server for the renderer bundle
|
|
76
|
+
const rendererPath = findRendererPath();
|
|
77
|
+
this.server = await startLocalServer(rendererPath);
|
|
78
|
+
const origin = `http://127.0.0.1:${this.server.port}`;
|
|
79
|
+
// Launch Puppeteer
|
|
80
|
+
this.browser = await puppeteer.launch({
|
|
81
|
+
headless: true,
|
|
82
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
83
|
+
});
|
|
84
|
+
this.page = await this.browser.newPage();
|
|
85
|
+
// Navigate to shell page (same origin as renderer script)
|
|
86
|
+
await this.page.goto(`${origin}/`, { waitUntil: "domcontentloaded" });
|
|
87
|
+
// Load the ColaMD renderer as ESM (same-origin, no CORS)
|
|
88
|
+
await this.page.addScriptTag({
|
|
89
|
+
type: "module",
|
|
90
|
+
content: `
|
|
91
|
+
import { createColaMDEditor } from '${origin}/colamd-renderer.js';
|
|
92
|
+
window.__colamdReady = createColaMDEditor({
|
|
93
|
+
rootId: 'editor',
|
|
94
|
+
editable: false
|
|
95
|
+
}).then(handle => {
|
|
96
|
+
window.__colamdHandle = handle;
|
|
97
|
+
return true;
|
|
98
|
+
}).catch(err => {
|
|
99
|
+
window.__colamdError = err.message;
|
|
100
|
+
return false;
|
|
101
|
+
});
|
|
102
|
+
`,
|
|
103
|
+
});
|
|
104
|
+
// Wait for the editor to initialize
|
|
105
|
+
await this.page.waitForFunction(() => window.__colamdHandle || window.__colamdError, { timeout: 30000 });
|
|
106
|
+
const error = await this.page.evaluate(() => window.__colamdError);
|
|
107
|
+
if (error)
|
|
108
|
+
throw new Error(`Editor init failed: ${error}`);
|
|
109
|
+
this.ready = true;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Render markdown to a standalone HTML document.
|
|
113
|
+
*/
|
|
114
|
+
async render(input) {
|
|
115
|
+
if (!this.ready || !this.page)
|
|
116
|
+
await this.init();
|
|
117
|
+
const page = this.page;
|
|
118
|
+
// Apply theme
|
|
119
|
+
if (input.themeName) {
|
|
120
|
+
await page.evaluate((name, css) => {
|
|
121
|
+
window.__colamdHandle.applyTheme(name, css || undefined);
|
|
122
|
+
}, input.themeName, input.customCSS);
|
|
123
|
+
}
|
|
124
|
+
// Set markdown content
|
|
125
|
+
await page.evaluate((md) => {
|
|
126
|
+
window.__colamdHandle.setMarkdown(md);
|
|
127
|
+
}, input.markdown);
|
|
128
|
+
// Wait for all plugins (mermaid, math) to finish rendering
|
|
129
|
+
await page.evaluate(async () => {
|
|
130
|
+
await window.__colamdHandle.ensureAllPluginsRendered();
|
|
131
|
+
});
|
|
132
|
+
// Additional settle time for complex diagrams
|
|
133
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
134
|
+
// Build export HTML
|
|
135
|
+
const html = await page.evaluate(() => {
|
|
136
|
+
return window.__colamdHandle.buildExportHTML();
|
|
137
|
+
});
|
|
138
|
+
// Inject custom title if provided
|
|
139
|
+
const finalHtml = input.title
|
|
140
|
+
? html.replace(/<title>[^<]*<\/title>/, `<title>${input.title}</title>`)
|
|
141
|
+
: html;
|
|
142
|
+
return { html: finalHtml };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Render markdown and export as PDF.
|
|
146
|
+
*/
|
|
147
|
+
async exportPDF(input, options = {}) {
|
|
148
|
+
if (!this.ready || !this.page)
|
|
149
|
+
await this.init();
|
|
150
|
+
// First render to HTML
|
|
151
|
+
const { html } = await this.render(input);
|
|
152
|
+
// Load the HTML in a fresh page for PDF generation
|
|
153
|
+
const pdfPage = await this.browser.newPage();
|
|
154
|
+
await pdfPage.setContent(html, { waitUntil: "load", timeout: 30000 });
|
|
155
|
+
// Emulate screen media to preserve theme colors
|
|
156
|
+
await pdfPage.emulateMediaType("screen");
|
|
157
|
+
const pdfBuffer = await pdfPage.pdf({
|
|
158
|
+
format: options.format ?? "A4",
|
|
159
|
+
printBackground: options.printBackground ?? true,
|
|
160
|
+
margin: options.margin ?? { top: "15mm", right: "15mm", bottom: "15mm", left: "15mm" },
|
|
161
|
+
});
|
|
162
|
+
await pdfPage.close();
|
|
163
|
+
return Buffer.from(pdfBuffer);
|
|
164
|
+
}
|
|
165
|
+
/** Shut down the browser and local server. */
|
|
166
|
+
async close() {
|
|
167
|
+
if (this.browser) {
|
|
168
|
+
await this.browser.close();
|
|
169
|
+
this.browser = null;
|
|
170
|
+
this.page = null;
|
|
171
|
+
this.ready = false;
|
|
172
|
+
}
|
|
173
|
+
if (this.server) {
|
|
174
|
+
await this.server.close();
|
|
175
|
+
this.server = null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* One-shot render: init → render → close.
|
|
181
|
+
* Convenience for single-file export.
|
|
182
|
+
*/
|
|
183
|
+
export async function renderMarkdown(input) {
|
|
184
|
+
const renderer = new ColamdRenderer();
|
|
185
|
+
try {
|
|
186
|
+
return await renderer.render(input);
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
await renderer.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* One-shot PDF export: init → render PDF → close.
|
|
194
|
+
*/
|
|
195
|
+
export async function renderPDF(input, options) {
|
|
196
|
+
const renderer = new ColamdRenderer();
|
|
197
|
+
try {
|
|
198
|
+
return await renderer.exportPDF(input, options);
|
|
199
|
+
}
|
|
200
|
+
finally {
|
|
201
|
+
await renderer.close();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
|