schematex 0.1.1 → 0.2.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/README.md +130 -15
- package/dist/api-bQZ98gkJ.d.cts +22 -0
- package/dist/api-bQZ98gkJ.d.ts +22 -0
- package/dist/browser.cjs +46 -0
- package/dist/browser.cjs.map +1 -0
- package/dist/browser.d.cts +27 -0
- package/dist/browser.d.ts +27 -0
- package/dist/browser.js +40 -0
- package/dist/browser.js.map +1 -0
- package/dist/{chunk-XXU36667.js → chunk-2OIW3MAE.js} +4 -3
- package/dist/chunk-2OIW3MAE.js.map +1 -0
- package/dist/{chunk-3FTUWAXK.cjs → chunk-3M7QWADF.cjs} +5 -4
- package/dist/chunk-3M7QWADF.cjs.map +1 -0
- package/dist/{chunk-BE5HNDA5.cjs → chunk-4HPT4BOI.cjs} +5 -4
- package/dist/{chunk-BE5HNDA5.cjs.map → chunk-4HPT4BOI.cjs.map} +1 -1
- package/dist/{chunk-CZRM7LT7.js → chunk-4TS5NB7L.js} +4 -3
- package/dist/chunk-4TS5NB7L.js.map +1 -0
- package/dist/{chunk-4G7ZIBHN.js → chunk-5SH5NUDW.js} +3 -2
- package/dist/{chunk-4G7ZIBHN.js.map → chunk-5SH5NUDW.js.map} +1 -1
- package/dist/{chunk-47ZC6EMJ.js → chunk-7WXAAVR3.js} +4 -3
- package/dist/{chunk-47ZC6EMJ.js.map → chunk-7WXAAVR3.js.map} +1 -1
- package/dist/{chunk-5C7DPDHQ.js → chunk-A74ZCP5I.js} +4 -3
- package/dist/{chunk-5C7DPDHQ.js.map → chunk-A74ZCP5I.js.map} +1 -1
- package/dist/{chunk-DS47NTWZ.cjs → chunk-AMP2FFES.cjs} +11 -10
- package/dist/chunk-AMP2FFES.cjs.map +1 -0
- package/dist/{chunk-2UKC6ZCY.cjs → chunk-CEV3GZA3.cjs} +12 -11
- package/dist/chunk-CEV3GZA3.cjs.map +1 -0
- package/dist/{chunk-NYCIK4SU.cjs → chunk-DTMCQXXC.cjs} +13 -12
- package/dist/chunk-DTMCQXXC.cjs.map +1 -0
- package/dist/{chunk-FDLZEKEB.js → chunk-GEPBET4L.js} +3 -2
- package/dist/chunk-GEPBET4L.js.map +1 -0
- package/dist/chunk-HAIBAF6J.cjs +1880 -0
- package/dist/chunk-HAIBAF6J.cjs.map +1 -0
- package/dist/{chunk-FGPTCDUT.cjs → chunk-HKRYKEOV.cjs} +5 -4
- package/dist/chunk-HKRYKEOV.cjs.map +1 -0
- package/dist/{chunk-D4JTSPOL.js → chunk-HLYA4QBB.js} +4 -3
- package/dist/chunk-HLYA4QBB.js.map +1 -0
- package/dist/{chunk-7FZSPKX3.cjs → chunk-IMHR3S5H.cjs} +6 -5
- package/dist/chunk-IMHR3S5H.cjs.map +1 -0
- package/dist/{chunk-HGHWCB6K.js → chunk-IQIJ6WW6.js} +4 -3
- package/dist/chunk-IQIJ6WW6.js.map +1 -0
- package/dist/{chunk-UHLYS3W5.cjs → chunk-IY52OWPG.cjs} +5 -4
- package/dist/{chunk-UHLYS3W5.cjs.map → chunk-IY52OWPG.cjs.map} +1 -1
- package/dist/chunk-JZGFSRVT.js +1873 -0
- package/dist/chunk-JZGFSRVT.js.map +1 -0
- package/dist/{chunk-3J7TFUOC.js → chunk-L6IHSTPP.js} +4 -3
- package/dist/{chunk-3J7TFUOC.js.map → chunk-L6IHSTPP.js.map} +1 -1
- package/dist/{chunk-4DBRNOPA.cjs → chunk-LKHWBDWZ.cjs} +5 -4
- package/dist/{chunk-4DBRNOPA.cjs.map → chunk-LKHWBDWZ.cjs.map} +1 -1
- package/dist/{chunk-34X3ZJ6E.cjs → chunk-LXNFVHDT.cjs} +3 -2
- package/dist/{chunk-34X3ZJ6E.cjs.map → chunk-LXNFVHDT.cjs.map} +1 -1
- package/dist/chunk-M6AMNXQ7.js +4539 -0
- package/dist/chunk-M6AMNXQ7.js.map +1 -0
- package/dist/{chunk-XX4BKS7Y.js → chunk-MRGS54WN.js} +4 -3
- package/dist/chunk-MRGS54WN.js.map +1 -0
- package/dist/{chunk-ROFLJ74T.js → chunk-MXJ6FHSY.js} +4 -3
- package/dist/chunk-MXJ6FHSY.js.map +1 -0
- package/dist/{chunk-V6WO7RK7.cjs → chunk-PIQG2Z5N.cjs} +5 -4
- package/dist/chunk-PIQG2Z5N.cjs.map +1 -0
- package/dist/{chunk-U5GGE6PJ.js → chunk-RQX53J6M.js} +4 -3
- package/dist/chunk-RQX53J6M.js.map +1 -0
- package/dist/{chunk-N7KOXOMX.cjs → chunk-S6VPECM3.cjs} +72 -2
- package/dist/chunk-S6VPECM3.cjs.map +1 -0
- package/dist/{chunk-VFQCTXOX.js → chunk-SPIW4VWP.js} +4 -3
- package/dist/chunk-SPIW4VWP.js.map +1 -0
- package/dist/{chunk-IX554O5K.js → chunk-TIGP2OEJ.js} +72 -3
- package/dist/chunk-TIGP2OEJ.js.map +1 -0
- package/dist/{chunk-LMFSHK45.js → chunk-TPA36ULU.js} +4 -3
- package/dist/{chunk-LMFSHK45.js.map → chunk-TPA36ULU.js.map} +1 -1
- package/dist/{chunk-ZX7QKZK2.cjs → chunk-ULERCTGS.cjs} +5 -4
- package/dist/{chunk-ZX7QKZK2.cjs.map → chunk-ULERCTGS.cjs.map} +1 -1
- package/dist/chunk-VP54YPOX.cjs +4544 -0
- package/dist/chunk-VP54YPOX.cjs.map +1 -0
- package/dist/{chunk-XQ52ICHU.cjs → chunk-YKO7DY2F.cjs} +14 -13
- package/dist/chunk-YKO7DY2F.cjs.map +1 -0
- package/dist/{chunk-PDPHRZZT.js → chunk-YO4GU6JX.js} +4 -3
- package/dist/chunk-YO4GU6JX.js.map +1 -0
- package/dist/{chunk-S6BK5DB6.cjs → chunk-ZGKEFVJQ.cjs} +13 -12
- package/dist/chunk-ZGKEFVJQ.cjs.map +1 -0
- package/dist/{chunk-2MQWZ2XY.cjs → chunk-ZO77FHBF.cjs} +3 -2
- package/dist/chunk-ZO77FHBF.cjs.map +1 -0
- package/dist/diagrams/blockdiagram/index.cjs +5 -5
- package/dist/diagrams/blockdiagram/index.d.cts +1 -1
- package/dist/diagrams/blockdiagram/index.d.ts +1 -1
- package/dist/diagrams/blockdiagram/index.js +1 -1
- package/dist/diagrams/circuit/index.cjs +8 -8
- package/dist/diagrams/circuit/index.d.cts +1 -1
- package/dist/diagrams/circuit/index.d.ts +1 -1
- package/dist/diagrams/circuit/index.js +2 -2
- package/dist/diagrams/ecomap/index.cjs +7 -7
- package/dist/diagrams/ecomap/index.d.cts +1 -1
- package/dist/diagrams/ecomap/index.d.ts +1 -1
- package/dist/diagrams/ecomap/index.js +2 -2
- package/dist/diagrams/entity/index.cjs +6 -6
- package/dist/diagrams/entity/index.d.cts +1 -1
- package/dist/diagrams/entity/index.d.ts +1 -1
- package/dist/diagrams/entity/index.js +2 -2
- package/dist/diagrams/fishbone/index.cjs +8 -8
- package/dist/diagrams/fishbone/index.d.cts +1 -1
- package/dist/diagrams/fishbone/index.d.ts +1 -1
- package/dist/diagrams/fishbone/index.js +2 -2
- package/dist/diagrams/flowchart/index.cjs +8 -8
- package/dist/diagrams/flowchart/index.d.cts +2 -2
- package/dist/diagrams/flowchart/index.d.ts +2 -2
- package/dist/diagrams/flowchart/index.js +2 -2
- package/dist/diagrams/genogram/index.cjs +9 -9
- package/dist/diagrams/genogram/index.d.cts +1 -1
- package/dist/diagrams/genogram/index.d.ts +1 -1
- package/dist/diagrams/genogram/index.js +2 -2
- package/dist/diagrams/ladder/index.cjs +6 -6
- package/dist/diagrams/ladder/index.d.cts +1 -1
- package/dist/diagrams/ladder/index.d.ts +1 -1
- package/dist/diagrams/ladder/index.js +2 -2
- package/dist/diagrams/logic/index.cjs +6 -6
- package/dist/diagrams/logic/index.d.cts +1 -1
- package/dist/diagrams/logic/index.d.ts +1 -1
- package/dist/diagrams/logic/index.js +2 -2
- package/dist/diagrams/orgchart/index.cjs +7 -7
- package/dist/diagrams/orgchart/index.d.cts +1 -1
- package/dist/diagrams/orgchart/index.d.ts +1 -1
- package/dist/diagrams/orgchart/index.js +2 -2
- package/dist/diagrams/pedigree/index.cjs +7 -7
- package/dist/diagrams/pedigree/index.d.cts +1 -1
- package/dist/diagrams/pedigree/index.d.ts +1 -1
- package/dist/diagrams/pedigree/index.js +2 -2
- package/dist/diagrams/phylo/index.cjs +7 -7
- package/dist/diagrams/phylo/index.d.cts +1 -1
- package/dist/diagrams/phylo/index.d.ts +1 -1
- package/dist/diagrams/phylo/index.js +2 -2
- package/dist/diagrams/sld/index.cjs +6 -6
- package/dist/diagrams/sld/index.d.cts +1 -1
- package/dist/diagrams/sld/index.d.ts +1 -1
- package/dist/diagrams/sld/index.js +2 -2
- package/dist/diagrams/sociogram/index.cjs +6 -6
- package/dist/diagrams/sociogram/index.d.cts +1 -1
- package/dist/diagrams/sociogram/index.d.ts +1 -1
- package/dist/diagrams/sociogram/index.js +2 -2
- package/dist/diagrams/timing/index.cjs +4 -4
- package/dist/diagrams/timing/index.d.cts +1 -1
- package/dist/diagrams/timing/index.d.ts +1 -1
- package/dist/diagrams/timing/index.js +1 -1
- package/dist/diagrams/venn/index.cjs +9 -9
- package/dist/diagrams/venn/index.d.cts +1 -1
- package/dist/diagrams/venn/index.d.ts +1 -1
- package/dist/diagrams/venn/index.js +2 -2
- package/dist/export.cjs +87 -0
- package/dist/export.cjs.map +1 -0
- package/dist/export.d.cts +38 -0
- package/dist/export.d.ts +38 -0
- package/dist/export.js +83 -0
- package/dist/export.js.map +1 -0
- package/dist/{index-BXefHVce.d.cts → index-SSGpCggE.d.cts} +52 -3
- package/dist/{index-BSlza1YY.d.ts → index-ga04CTBI.d.ts} +52 -3
- package/dist/index.cjs +65 -1948
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -12
- package/dist/index.d.ts +7 -12
- package/dist/index.js +19 -1942
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +56 -0
- package/dist/react.cjs.map +1 -0
- package/dist/react.d.cts +24 -0
- package/dist/react.d.ts +24 -0
- package/dist/react.js +54 -0
- package/dist/react.js.map +1 -0
- package/dist/{types-DqfcYkcY.d.ts → types-BcPhMdHd.d.cts} +6 -2
- package/dist/{types-DqfcYkcY.d.cts → types-BcPhMdHd.d.ts} +6 -2
- package/package.json +31 -2
- package/dist/chunk-2MQWZ2XY.cjs.map +0 -1
- package/dist/chunk-2UKC6ZCY.cjs.map +0 -1
- package/dist/chunk-3FTUWAXK.cjs.map +0 -1
- package/dist/chunk-7FZSPKX3.cjs.map +0 -1
- package/dist/chunk-ADOXGKAK.js +0 -1251
- package/dist/chunk-ADOXGKAK.js.map +0 -1
- package/dist/chunk-CZRM7LT7.js.map +0 -1
- package/dist/chunk-D4JTSPOL.js.map +0 -1
- package/dist/chunk-DS47NTWZ.cjs.map +0 -1
- package/dist/chunk-FDLZEKEB.js.map +0 -1
- package/dist/chunk-FGPTCDUT.cjs.map +0 -1
- package/dist/chunk-HGHWCB6K.js.map +0 -1
- package/dist/chunk-IX554O5K.js.map +0 -1
- package/dist/chunk-MDICUK6F.cjs +0 -1258
- package/dist/chunk-MDICUK6F.cjs.map +0 -1
- package/dist/chunk-N7KOXOMX.cjs.map +0 -1
- package/dist/chunk-NYCIK4SU.cjs.map +0 -1
- package/dist/chunk-PDPHRZZT.js.map +0 -1
- package/dist/chunk-ROFLJ74T.js.map +0 -1
- package/dist/chunk-S6BK5DB6.cjs.map +0 -1
- package/dist/chunk-U5GGE6PJ.js.map +0 -1
- package/dist/chunk-V6WO7RK7.cjs.map +0 -1
- package/dist/chunk-VFQCTXOX.js.map +0 -1
- package/dist/chunk-XQ52ICHU.cjs.map +0 -1
- package/dist/chunk-XX4BKS7Y.js.map +0 -1
- package/dist/chunk-XXU36667.js.map +0 -1
package/dist/export.cjs
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/export.ts
|
|
4
|
+
function svgToPngBlob(svgString, options = {}) {
|
|
5
|
+
const { scale = 2, background = "white" } = options;
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const blob = new Blob([svgString], { type: "image/svg+xml;charset=utf-8" });
|
|
8
|
+
const url = URL.createObjectURL(blob);
|
|
9
|
+
const img = new Image();
|
|
10
|
+
img.onload = () => {
|
|
11
|
+
const w = img.naturalWidth || img.width || 800;
|
|
12
|
+
const h = img.naturalHeight || img.height || 600;
|
|
13
|
+
const canvas = document.createElement("canvas");
|
|
14
|
+
canvas.width = w * scale;
|
|
15
|
+
canvas.height = h * scale;
|
|
16
|
+
const ctx = canvas.getContext("2d");
|
|
17
|
+
if (!ctx) {
|
|
18
|
+
URL.revokeObjectURL(url);
|
|
19
|
+
reject(new Error("Could not get 2D canvas context"));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
ctx.scale(scale, scale);
|
|
23
|
+
if (background) {
|
|
24
|
+
ctx.fillStyle = background;
|
|
25
|
+
ctx.fillRect(0, 0, w, h);
|
|
26
|
+
}
|
|
27
|
+
ctx.drawImage(img, 0, 0);
|
|
28
|
+
URL.revokeObjectURL(url);
|
|
29
|
+
canvas.toBlob(
|
|
30
|
+
(pngBlob) => {
|
|
31
|
+
if (pngBlob) resolve(pngBlob);
|
|
32
|
+
else reject(new Error("canvas.toBlob returned null"));
|
|
33
|
+
},
|
|
34
|
+
"image/png"
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
img.onerror = () => {
|
|
38
|
+
URL.revokeObjectURL(url);
|
|
39
|
+
reject(new Error("Failed to load SVG as image"));
|
|
40
|
+
};
|
|
41
|
+
img.src = url;
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function downloadBlob(blob, filename) {
|
|
45
|
+
const url = URL.createObjectURL(blob);
|
|
46
|
+
const a = document.createElement("a");
|
|
47
|
+
a.href = url;
|
|
48
|
+
a.download = filename;
|
|
49
|
+
document.body.appendChild(a);
|
|
50
|
+
a.click();
|
|
51
|
+
document.body.removeChild(a);
|
|
52
|
+
URL.revokeObjectURL(url);
|
|
53
|
+
}
|
|
54
|
+
function printSvgAsPdf(svgString, title = "Schematex Diagram") {
|
|
55
|
+
const html = `<!DOCTYPE html>
|
|
56
|
+
<html>
|
|
57
|
+
<head>
|
|
58
|
+
<meta charset="UTF-8">
|
|
59
|
+
<title>${title}</title>
|
|
60
|
+
<style>
|
|
61
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
62
|
+
body { display: flex; justify-content: center; align-items: flex-start; }
|
|
63
|
+
svg { max-width: 100%; height: auto; display: block; }
|
|
64
|
+
@media print {
|
|
65
|
+
body { display: block; }
|
|
66
|
+
svg { width: 100%; page-break-inside: avoid; }
|
|
67
|
+
}
|
|
68
|
+
</style>
|
|
69
|
+
</head>
|
|
70
|
+
<body>${svgString}</body>
|
|
71
|
+
</html>`;
|
|
72
|
+
const win = window.open("", "_blank", "width=900,height=700");
|
|
73
|
+
if (!win) {
|
|
74
|
+
const blob = new Blob([svgString], { type: "image/svg+xml" });
|
|
75
|
+
window.open(URL.createObjectURL(blob), "_blank");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
win.document.write(html);
|
|
79
|
+
win.document.close();
|
|
80
|
+
win.onload = () => win.print();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
exports.downloadBlob = downloadBlob;
|
|
84
|
+
exports.printSvgAsPdf = printSvgAsPdf;
|
|
85
|
+
exports.svgToPngBlob = svgToPngBlob;
|
|
86
|
+
//# sourceMappingURL=export.cjs.map
|
|
87
|
+
//# sourceMappingURL=export.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/export.ts"],"names":[],"mappings":"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","file":"export.cjs","sourcesContent":["/**\n * Browser export utilities for Schematex SVG output.\n *\n * All APIs require a browser DOM + Canvas environment.\n * For Node.js PNG generation, use sharp or puppeteer externally.\n *\n * @example\n * ```ts\n * import { render } from 'schematex';\n * import { svgToPngBlob, downloadBlob } from 'schematex/export';\n *\n * const svg = render('genogram\\n alice [female]');\n * const png = await svgToPngBlob(svg, { scale: 2 });\n * downloadBlob(png, 'diagram.png');\n * ```\n */\n\nexport interface PngExportOptions {\n /** Pixel ratio multiplier. Default: 2 (retina/2×). */\n scale?: number;\n /** Background fill color. Default: 'white'. Pass null for transparent. */\n background?: string | null;\n}\n\n/**\n * Convert an SVG string to a PNG Blob using Canvas.\n * Resolves at @2× by default for crisp retina output.\n */\nexport function svgToPngBlob(\n svgString: string,\n options: PngExportOptions = {}\n): Promise<Blob> {\n const { scale = 2, background = \"white\" } = options;\n\n return new Promise((resolve, reject) => {\n const blob = new Blob([svgString], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const img = new Image();\n\n img.onload = () => {\n const w = img.naturalWidth || img.width || 800;\n const h = img.naturalHeight || img.height || 600;\n const canvas = document.createElement(\"canvas\");\n canvas.width = w * scale;\n canvas.height = h * scale;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n URL.revokeObjectURL(url);\n reject(new Error(\"Could not get 2D canvas context\"));\n return;\n }\n ctx.scale(scale, scale);\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, w, h);\n }\n ctx.drawImage(img, 0, 0);\n URL.revokeObjectURL(url);\n canvas.toBlob(\n (pngBlob) => {\n if (pngBlob) resolve(pngBlob);\n else reject(new Error(\"canvas.toBlob returned null\"));\n },\n \"image/png\"\n );\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"Failed to load SVG as image\"));\n };\n\n img.src = url;\n });\n}\n\n/**\n * Trigger a browser file download from a Blob.\n */\nexport function downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\n/**\n * Open SVG in a print-ready popup and trigger the browser's print dialog\n * (allows Save as PDF via the OS print driver).\n */\nexport function printSvgAsPdf(svgString: string, title = \"Schematex Diagram\"): void {\n const html = `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>${title}</title>\n<style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { display: flex; justify-content: center; align-items: flex-start; }\n svg { max-width: 100%; height: auto; display: block; }\n @media print {\n body { display: block; }\n svg { width: 100%; page-break-inside: avoid; }\n }\n</style>\n</head>\n<body>${svgString}</body>\n</html>`;\n\n const win = window.open(\"\", \"_blank\", \"width=900,height=700\");\n if (!win) {\n // Popup blocked — fallback: open SVG directly\n const blob = new Blob([svgString], { type: \"image/svg+xml\" });\n window.open(URL.createObjectURL(blob), \"_blank\");\n return;\n }\n win.document.write(html);\n win.document.close();\n win.onload = () => win.print();\n}\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser export utilities for Schematex SVG output.
|
|
3
|
+
*
|
|
4
|
+
* All APIs require a browser DOM + Canvas environment.
|
|
5
|
+
* For Node.js PNG generation, use sharp or puppeteer externally.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { render } from 'schematex';
|
|
10
|
+
* import { svgToPngBlob, downloadBlob } from 'schematex/export';
|
|
11
|
+
*
|
|
12
|
+
* const svg = render('genogram\n alice [female]');
|
|
13
|
+
* const png = await svgToPngBlob(svg, { scale: 2 });
|
|
14
|
+
* downloadBlob(png, 'diagram.png');
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
interface PngExportOptions {
|
|
18
|
+
/** Pixel ratio multiplier. Default: 2 (retina/2×). */
|
|
19
|
+
scale?: number;
|
|
20
|
+
/** Background fill color. Default: 'white'. Pass null for transparent. */
|
|
21
|
+
background?: string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert an SVG string to a PNG Blob using Canvas.
|
|
25
|
+
* Resolves at @2× by default for crisp retina output.
|
|
26
|
+
*/
|
|
27
|
+
declare function svgToPngBlob(svgString: string, options?: PngExportOptions): Promise<Blob>;
|
|
28
|
+
/**
|
|
29
|
+
* Trigger a browser file download from a Blob.
|
|
30
|
+
*/
|
|
31
|
+
declare function downloadBlob(blob: Blob, filename: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Open SVG in a print-ready popup and trigger the browser's print dialog
|
|
34
|
+
* (allows Save as PDF via the OS print driver).
|
|
35
|
+
*/
|
|
36
|
+
declare function printSvgAsPdf(svgString: string, title?: string): void;
|
|
37
|
+
|
|
38
|
+
export { type PngExportOptions, downloadBlob, printSvgAsPdf, svgToPngBlob };
|
package/dist/export.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser export utilities for Schematex SVG output.
|
|
3
|
+
*
|
|
4
|
+
* All APIs require a browser DOM + Canvas environment.
|
|
5
|
+
* For Node.js PNG generation, use sharp or puppeteer externally.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* import { render } from 'schematex';
|
|
10
|
+
* import { svgToPngBlob, downloadBlob } from 'schematex/export';
|
|
11
|
+
*
|
|
12
|
+
* const svg = render('genogram\n alice [female]');
|
|
13
|
+
* const png = await svgToPngBlob(svg, { scale: 2 });
|
|
14
|
+
* downloadBlob(png, 'diagram.png');
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
interface PngExportOptions {
|
|
18
|
+
/** Pixel ratio multiplier. Default: 2 (retina/2×). */
|
|
19
|
+
scale?: number;
|
|
20
|
+
/** Background fill color. Default: 'white'. Pass null for transparent. */
|
|
21
|
+
background?: string | null;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert an SVG string to a PNG Blob using Canvas.
|
|
25
|
+
* Resolves at @2× by default for crisp retina output.
|
|
26
|
+
*/
|
|
27
|
+
declare function svgToPngBlob(svgString: string, options?: PngExportOptions): Promise<Blob>;
|
|
28
|
+
/**
|
|
29
|
+
* Trigger a browser file download from a Blob.
|
|
30
|
+
*/
|
|
31
|
+
declare function downloadBlob(blob: Blob, filename: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Open SVG in a print-ready popup and trigger the browser's print dialog
|
|
34
|
+
* (allows Save as PDF via the OS print driver).
|
|
35
|
+
*/
|
|
36
|
+
declare function printSvgAsPdf(svgString: string, title?: string): void;
|
|
37
|
+
|
|
38
|
+
export { type PngExportOptions, downloadBlob, printSvgAsPdf, svgToPngBlob };
|
package/dist/export.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// src/export.ts
|
|
2
|
+
function svgToPngBlob(svgString, options = {}) {
|
|
3
|
+
const { scale = 2, background = "white" } = options;
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
const blob = new Blob([svgString], { type: "image/svg+xml;charset=utf-8" });
|
|
6
|
+
const url = URL.createObjectURL(blob);
|
|
7
|
+
const img = new Image();
|
|
8
|
+
img.onload = () => {
|
|
9
|
+
const w = img.naturalWidth || img.width || 800;
|
|
10
|
+
const h = img.naturalHeight || img.height || 600;
|
|
11
|
+
const canvas = document.createElement("canvas");
|
|
12
|
+
canvas.width = w * scale;
|
|
13
|
+
canvas.height = h * scale;
|
|
14
|
+
const ctx = canvas.getContext("2d");
|
|
15
|
+
if (!ctx) {
|
|
16
|
+
URL.revokeObjectURL(url);
|
|
17
|
+
reject(new Error("Could not get 2D canvas context"));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
ctx.scale(scale, scale);
|
|
21
|
+
if (background) {
|
|
22
|
+
ctx.fillStyle = background;
|
|
23
|
+
ctx.fillRect(0, 0, w, h);
|
|
24
|
+
}
|
|
25
|
+
ctx.drawImage(img, 0, 0);
|
|
26
|
+
URL.revokeObjectURL(url);
|
|
27
|
+
canvas.toBlob(
|
|
28
|
+
(pngBlob) => {
|
|
29
|
+
if (pngBlob) resolve(pngBlob);
|
|
30
|
+
else reject(new Error("canvas.toBlob returned null"));
|
|
31
|
+
},
|
|
32
|
+
"image/png"
|
|
33
|
+
);
|
|
34
|
+
};
|
|
35
|
+
img.onerror = () => {
|
|
36
|
+
URL.revokeObjectURL(url);
|
|
37
|
+
reject(new Error("Failed to load SVG as image"));
|
|
38
|
+
};
|
|
39
|
+
img.src = url;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
function downloadBlob(blob, filename) {
|
|
43
|
+
const url = URL.createObjectURL(blob);
|
|
44
|
+
const a = document.createElement("a");
|
|
45
|
+
a.href = url;
|
|
46
|
+
a.download = filename;
|
|
47
|
+
document.body.appendChild(a);
|
|
48
|
+
a.click();
|
|
49
|
+
document.body.removeChild(a);
|
|
50
|
+
URL.revokeObjectURL(url);
|
|
51
|
+
}
|
|
52
|
+
function printSvgAsPdf(svgString, title = "Schematex Diagram") {
|
|
53
|
+
const html = `<!DOCTYPE html>
|
|
54
|
+
<html>
|
|
55
|
+
<head>
|
|
56
|
+
<meta charset="UTF-8">
|
|
57
|
+
<title>${title}</title>
|
|
58
|
+
<style>
|
|
59
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
60
|
+
body { display: flex; justify-content: center; align-items: flex-start; }
|
|
61
|
+
svg { max-width: 100%; height: auto; display: block; }
|
|
62
|
+
@media print {
|
|
63
|
+
body { display: block; }
|
|
64
|
+
svg { width: 100%; page-break-inside: avoid; }
|
|
65
|
+
}
|
|
66
|
+
</style>
|
|
67
|
+
</head>
|
|
68
|
+
<body>${svgString}</body>
|
|
69
|
+
</html>`;
|
|
70
|
+
const win = window.open("", "_blank", "width=900,height=700");
|
|
71
|
+
if (!win) {
|
|
72
|
+
const blob = new Blob([svgString], { type: "image/svg+xml" });
|
|
73
|
+
window.open(URL.createObjectURL(blob), "_blank");
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
win.document.write(html);
|
|
77
|
+
win.document.close();
|
|
78
|
+
win.onload = () => win.print();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { downloadBlob, printSvgAsPdf, svgToPngBlob };
|
|
82
|
+
//# sourceMappingURL=export.js.map
|
|
83
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/export.ts"],"names":[],"mappings":"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","file":"export.js","sourcesContent":["/**\n * Browser export utilities for Schematex SVG output.\n *\n * All APIs require a browser DOM + Canvas environment.\n * For Node.js PNG generation, use sharp or puppeteer externally.\n *\n * @example\n * ```ts\n * import { render } from 'schematex';\n * import { svgToPngBlob, downloadBlob } from 'schematex/export';\n *\n * const svg = render('genogram\\n alice [female]');\n * const png = await svgToPngBlob(svg, { scale: 2 });\n * downloadBlob(png, 'diagram.png');\n * ```\n */\n\nexport interface PngExportOptions {\n /** Pixel ratio multiplier. Default: 2 (retina/2×). */\n scale?: number;\n /** Background fill color. Default: 'white'. Pass null for transparent. */\n background?: string | null;\n}\n\n/**\n * Convert an SVG string to a PNG Blob using Canvas.\n * Resolves at @2× by default for crisp retina output.\n */\nexport function svgToPngBlob(\n svgString: string,\n options: PngExportOptions = {}\n): Promise<Blob> {\n const { scale = 2, background = \"white\" } = options;\n\n return new Promise((resolve, reject) => {\n const blob = new Blob([svgString], { type: \"image/svg+xml;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const img = new Image();\n\n img.onload = () => {\n const w = img.naturalWidth || img.width || 800;\n const h = img.naturalHeight || img.height || 600;\n const canvas = document.createElement(\"canvas\");\n canvas.width = w * scale;\n canvas.height = h * scale;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n URL.revokeObjectURL(url);\n reject(new Error(\"Could not get 2D canvas context\"));\n return;\n }\n ctx.scale(scale, scale);\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, w, h);\n }\n ctx.drawImage(img, 0, 0);\n URL.revokeObjectURL(url);\n canvas.toBlob(\n (pngBlob) => {\n if (pngBlob) resolve(pngBlob);\n else reject(new Error(\"canvas.toBlob returned null\"));\n },\n \"image/png\"\n );\n };\n\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error(\"Failed to load SVG as image\"));\n };\n\n img.src = url;\n });\n}\n\n/**\n * Trigger a browser file download from a Blob.\n */\nexport function downloadBlob(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n}\n\n/**\n * Open SVG in a print-ready popup and trigger the browser's print dialog\n * (allows Save as PDF via the OS print driver).\n */\nexport function printSvgAsPdf(svgString: string, title = \"Schematex Diagram\"): void {\n const html = `<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"UTF-8\">\n<title>${title}</title>\n<style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body { display: flex; justify-content: center; align-items: flex-start; }\n svg { max-width: 100%; height: auto; display: block; }\n @media print {\n body { display: block; }\n svg { width: 100%; page-break-inside: avoid; }\n }\n</style>\n</head>\n<body>${svgString}</body>\n</html>`;\n\n const win = window.open(\"\", \"_blank\", \"width=900,height=700\");\n if (!win) {\n // Popup blocked — fallback: open SVG directly\n const blob = new Blob([svgString], { type: \"image/svg+xml\" });\n window.open(URL.createObjectURL(blob), \"_blank\");\n return;\n }\n win.document.write(html);\n win.document.close();\n win.onload = () => win.print();\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as FlowchartAST, o as FlowchartLayoutResult,
|
|
1
|
+
import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-BcPhMdHd.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Flowchart DSL parser
|
|
4
|
+
* Flowchart DSL parser.
|
|
5
5
|
*
|
|
6
6
|
* Supports a mermaid-inspired subset:
|
|
7
7
|
* flowchart TD | TB | BT | LR | RL
|
|
@@ -10,6 +10,15 @@ import { n as FlowchartAST, o as FlowchartLayoutResult, b as DiagramPlugin } fro
|
|
|
10
10
|
* A([Label]) stadium
|
|
11
11
|
* A{Label} diamond
|
|
12
12
|
* A[/Label/] parallelogram
|
|
13
|
+
* A[\Label\] parallelogram-alt
|
|
14
|
+
* A[/Label\] trapezoid
|
|
15
|
+
* A[\Label/] trapezoid-alt
|
|
16
|
+
* A[[Label]] subroutine
|
|
17
|
+
* A[(Label)] cylinder
|
|
18
|
+
* A((Label)) circle
|
|
19
|
+
* A(((Label))) double-circle
|
|
20
|
+
* A{{Label}} hexagon
|
|
21
|
+
* A>Label] asymmetric
|
|
13
22
|
* A --> B solid edge
|
|
14
23
|
* A --- B no-arrow edge
|
|
15
24
|
* A -.-> B dotted
|
|
@@ -20,6 +29,13 @@ import { n as FlowchartAST, o as FlowchartLayoutResult, b as DiagramPlugin } fro
|
|
|
20
29
|
* A -->|yes| B edge with pipe label
|
|
21
30
|
* A -- yes --> B edge with inline label
|
|
22
31
|
* A --> B --> C chain
|
|
32
|
+
* A & B --> C & D fan-out (cross-product edges)
|
|
33
|
+
* subgraph "Title" cluster grouping
|
|
34
|
+
* ...
|
|
35
|
+
* end
|
|
36
|
+
* class A,B className semantic class assignment
|
|
37
|
+
* style A fill:#f9f,... per-node style
|
|
38
|
+
* classDef name ... class definition (stored, applied in renderer)
|
|
23
39
|
* %% comment
|
|
24
40
|
*
|
|
25
41
|
* Hand-written tokenizer + recursive descent. Zero deps.
|
|
@@ -116,11 +132,44 @@ interface VennTokens {
|
|
|
116
132
|
vennCountColor: string;
|
|
117
133
|
vennLeaderColor: string;
|
|
118
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Tokens for timeline diagrams. Palette-driven so categories/tracks share
|
|
137
|
+
* colors with the rest of the diagram family (ecomap/sociogram/phylo).
|
|
138
|
+
* Era bands and card surfaces use theme-neutral tints so no magic hex codes
|
|
139
|
+
* leak into the renderer.
|
|
140
|
+
*/
|
|
141
|
+
interface TimelineTokens {
|
|
142
|
+
axis: string;
|
|
143
|
+
axisLabel: string;
|
|
144
|
+
eraLabel: string;
|
|
145
|
+
eraOpacity: number;
|
|
146
|
+
eraPlotOpacity: number;
|
|
147
|
+
/** Alternating lane stripe fill. */
|
|
148
|
+
laneStripe: string;
|
|
149
|
+
laneStripeOpacity: number;
|
|
150
|
+
/** Category / task bar palette. Cycled by `category` (fallback to trackIdx). */
|
|
151
|
+
categoryPalette: readonly string[];
|
|
152
|
+
/** Point/milestone ring — defaults to accent but configurable. */
|
|
153
|
+
markerRing: string;
|
|
154
|
+
markerFill: string;
|
|
155
|
+
milestoneFill: string;
|
|
156
|
+
/** Gantt vertical pin shaft. */
|
|
157
|
+
pinShaft: string;
|
|
158
|
+
/** Lollipop card. */
|
|
159
|
+
cardBg: string;
|
|
160
|
+
cardStroke: string;
|
|
161
|
+
cardText: string;
|
|
162
|
+
cardShadow: string;
|
|
163
|
+
/** Gantt legend chip background. */
|
|
164
|
+
legendBg: string;
|
|
165
|
+
legendStroke: string;
|
|
166
|
+
}
|
|
119
167
|
type ResolvedTheme<T = object> = BaseTheme & T;
|
|
120
168
|
declare const BASE_THEMES: Record<ThemeName, BaseTheme>;
|
|
121
169
|
declare const PERSON_TOKENS: Record<ThemeName, PersonTokens>;
|
|
122
170
|
declare const BIOLOGY_TOKENS: Record<ThemeName, BiologyTokens>;
|
|
123
171
|
declare const VENN_TOKENS: Record<ThemeName, VennTokens>;
|
|
172
|
+
declare function resolveTimelineTheme(name: string): ResolvedTheme<TimelineTokens>;
|
|
124
173
|
declare function resolveBaseTheme(name: string): BaseTheme;
|
|
125
174
|
declare function resolvePersonTheme(name: string): ResolvedTheme<PersonTokens>;
|
|
126
175
|
declare function resolveBiologyTheme(name: string): ResolvedTheme<BiologyTokens>;
|
|
@@ -147,4 +196,4 @@ declare function renderFlowchart(text: string, themeName?: ThemeName): string;
|
|
|
147
196
|
|
|
148
197
|
declare const flowchart: DiagramPlugin;
|
|
149
198
|
|
|
150
|
-
export { BASE_THEMES as B, FC_CONST as F, PERSON_TOKENS as P, type ResolvedTheme as R, type ThemeName as T, VENN_TOKENS as V, BIOLOGY_TOKENS as a, type BaseTheme as b, type BiologyTokens as c, type PersonTokens as d, type
|
|
199
|
+
export { BASE_THEMES as B, FC_CONST as F, PERSON_TOKENS as P, type ResolvedTheme as R, type ThemeName as T, VENN_TOKENS as V, BIOLOGY_TOKENS as a, type BaseTheme as b, type BiologyTokens as c, type PersonTokens as d, type TimelineTokens as e, type VennTokens as f, flowchart as g, resolveBiologyTheme as h, resolveFishboneTheme as i, resolveGenogramTheme as j, resolvePersonTheme as k, resolveTimelineTheme as l, resolveVennTheme as m, layoutFlowchart as n, renderFlowchart as o, parseFlowchart as p, renderFlowchartAST as q, resolveBaseTheme as r };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as FlowchartAST, o as FlowchartLayoutResult,
|
|
1
|
+
import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-BcPhMdHd.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Flowchart DSL parser
|
|
4
|
+
* Flowchart DSL parser.
|
|
5
5
|
*
|
|
6
6
|
* Supports a mermaid-inspired subset:
|
|
7
7
|
* flowchart TD | TB | BT | LR | RL
|
|
@@ -10,6 +10,15 @@ import { n as FlowchartAST, o as FlowchartLayoutResult, b as DiagramPlugin } fro
|
|
|
10
10
|
* A([Label]) stadium
|
|
11
11
|
* A{Label} diamond
|
|
12
12
|
* A[/Label/] parallelogram
|
|
13
|
+
* A[\Label\] parallelogram-alt
|
|
14
|
+
* A[/Label\] trapezoid
|
|
15
|
+
* A[\Label/] trapezoid-alt
|
|
16
|
+
* A[[Label]] subroutine
|
|
17
|
+
* A[(Label)] cylinder
|
|
18
|
+
* A((Label)) circle
|
|
19
|
+
* A(((Label))) double-circle
|
|
20
|
+
* A{{Label}} hexagon
|
|
21
|
+
* A>Label] asymmetric
|
|
13
22
|
* A --> B solid edge
|
|
14
23
|
* A --- B no-arrow edge
|
|
15
24
|
* A -.-> B dotted
|
|
@@ -20,6 +29,13 @@ import { n as FlowchartAST, o as FlowchartLayoutResult, b as DiagramPlugin } fro
|
|
|
20
29
|
* A -->|yes| B edge with pipe label
|
|
21
30
|
* A -- yes --> B edge with inline label
|
|
22
31
|
* A --> B --> C chain
|
|
32
|
+
* A & B --> C & D fan-out (cross-product edges)
|
|
33
|
+
* subgraph "Title" cluster grouping
|
|
34
|
+
* ...
|
|
35
|
+
* end
|
|
36
|
+
* class A,B className semantic class assignment
|
|
37
|
+
* style A fill:#f9f,... per-node style
|
|
38
|
+
* classDef name ... class definition (stored, applied in renderer)
|
|
23
39
|
* %% comment
|
|
24
40
|
*
|
|
25
41
|
* Hand-written tokenizer + recursive descent. Zero deps.
|
|
@@ -116,11 +132,44 @@ interface VennTokens {
|
|
|
116
132
|
vennCountColor: string;
|
|
117
133
|
vennLeaderColor: string;
|
|
118
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Tokens for timeline diagrams. Palette-driven so categories/tracks share
|
|
137
|
+
* colors with the rest of the diagram family (ecomap/sociogram/phylo).
|
|
138
|
+
* Era bands and card surfaces use theme-neutral tints so no magic hex codes
|
|
139
|
+
* leak into the renderer.
|
|
140
|
+
*/
|
|
141
|
+
interface TimelineTokens {
|
|
142
|
+
axis: string;
|
|
143
|
+
axisLabel: string;
|
|
144
|
+
eraLabel: string;
|
|
145
|
+
eraOpacity: number;
|
|
146
|
+
eraPlotOpacity: number;
|
|
147
|
+
/** Alternating lane stripe fill. */
|
|
148
|
+
laneStripe: string;
|
|
149
|
+
laneStripeOpacity: number;
|
|
150
|
+
/** Category / task bar palette. Cycled by `category` (fallback to trackIdx). */
|
|
151
|
+
categoryPalette: readonly string[];
|
|
152
|
+
/** Point/milestone ring — defaults to accent but configurable. */
|
|
153
|
+
markerRing: string;
|
|
154
|
+
markerFill: string;
|
|
155
|
+
milestoneFill: string;
|
|
156
|
+
/** Gantt vertical pin shaft. */
|
|
157
|
+
pinShaft: string;
|
|
158
|
+
/** Lollipop card. */
|
|
159
|
+
cardBg: string;
|
|
160
|
+
cardStroke: string;
|
|
161
|
+
cardText: string;
|
|
162
|
+
cardShadow: string;
|
|
163
|
+
/** Gantt legend chip background. */
|
|
164
|
+
legendBg: string;
|
|
165
|
+
legendStroke: string;
|
|
166
|
+
}
|
|
119
167
|
type ResolvedTheme<T = object> = BaseTheme & T;
|
|
120
168
|
declare const BASE_THEMES: Record<ThemeName, BaseTheme>;
|
|
121
169
|
declare const PERSON_TOKENS: Record<ThemeName, PersonTokens>;
|
|
122
170
|
declare const BIOLOGY_TOKENS: Record<ThemeName, BiologyTokens>;
|
|
123
171
|
declare const VENN_TOKENS: Record<ThemeName, VennTokens>;
|
|
172
|
+
declare function resolveTimelineTheme(name: string): ResolvedTheme<TimelineTokens>;
|
|
124
173
|
declare function resolveBaseTheme(name: string): BaseTheme;
|
|
125
174
|
declare function resolvePersonTheme(name: string): ResolvedTheme<PersonTokens>;
|
|
126
175
|
declare function resolveBiologyTheme(name: string): ResolvedTheme<BiologyTokens>;
|
|
@@ -147,4 +196,4 @@ declare function renderFlowchart(text: string, themeName?: ThemeName): string;
|
|
|
147
196
|
|
|
148
197
|
declare const flowchart: DiagramPlugin;
|
|
149
198
|
|
|
150
|
-
export { BASE_THEMES as B, FC_CONST as F, PERSON_TOKENS as P, type ResolvedTheme as R, type ThemeName as T, VENN_TOKENS as V, BIOLOGY_TOKENS as a, type BaseTheme as b, type BiologyTokens as c, type PersonTokens as d, type
|
|
199
|
+
export { BASE_THEMES as B, FC_CONST as F, PERSON_TOKENS as P, type ResolvedTheme as R, type ThemeName as T, VENN_TOKENS as V, BIOLOGY_TOKENS as a, type BaseTheme as b, type BiologyTokens as c, type PersonTokens as d, type TimelineTokens as e, type VennTokens as f, flowchart as g, resolveBiologyTheme as h, resolveFishboneTheme as i, resolveGenogramTheme as j, resolvePersonTheme as k, resolveTimelineTheme as l, resolveVennTheme as m, layoutFlowchart as n, renderFlowchart as o, parseFlowchart as p, renderFlowchartAST as q, resolveBaseTheme as r };
|