schematex 0.1.0 → 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.
Files changed (194) hide show
  1. package/README.md +229 -40
  2. package/dist/api-bQZ98gkJ.d.cts +22 -0
  3. package/dist/api-bQZ98gkJ.d.ts +22 -0
  4. package/dist/browser.cjs +46 -0
  5. package/dist/browser.cjs.map +1 -0
  6. package/dist/browser.d.cts +27 -0
  7. package/dist/browser.d.ts +27 -0
  8. package/dist/browser.js +40 -0
  9. package/dist/browser.js.map +1 -0
  10. package/dist/{chunk-XXU36667.js → chunk-2OIW3MAE.js} +4 -3
  11. package/dist/chunk-2OIW3MAE.js.map +1 -0
  12. package/dist/{chunk-3FTUWAXK.cjs → chunk-3M7QWADF.cjs} +5 -4
  13. package/dist/chunk-3M7QWADF.cjs.map +1 -0
  14. package/dist/{chunk-BE5HNDA5.cjs → chunk-4HPT4BOI.cjs} +5 -4
  15. package/dist/{chunk-BE5HNDA5.cjs.map → chunk-4HPT4BOI.cjs.map} +1 -1
  16. package/dist/{chunk-CZRM7LT7.js → chunk-4TS5NB7L.js} +4 -3
  17. package/dist/chunk-4TS5NB7L.js.map +1 -0
  18. package/dist/{chunk-4G7ZIBHN.js → chunk-5SH5NUDW.js} +3 -2
  19. package/dist/{chunk-4G7ZIBHN.js.map → chunk-5SH5NUDW.js.map} +1 -1
  20. package/dist/{chunk-47ZC6EMJ.js → chunk-7WXAAVR3.js} +4 -3
  21. package/dist/{chunk-47ZC6EMJ.js.map → chunk-7WXAAVR3.js.map} +1 -1
  22. package/dist/{chunk-5C7DPDHQ.js → chunk-A74ZCP5I.js} +4 -3
  23. package/dist/{chunk-5C7DPDHQ.js.map → chunk-A74ZCP5I.js.map} +1 -1
  24. package/dist/{chunk-DS47NTWZ.cjs → chunk-AMP2FFES.cjs} +11 -10
  25. package/dist/chunk-AMP2FFES.cjs.map +1 -0
  26. package/dist/{chunk-2UKC6ZCY.cjs → chunk-CEV3GZA3.cjs} +12 -11
  27. package/dist/chunk-CEV3GZA3.cjs.map +1 -0
  28. package/dist/{chunk-NYCIK4SU.cjs → chunk-DTMCQXXC.cjs} +13 -12
  29. package/dist/chunk-DTMCQXXC.cjs.map +1 -0
  30. package/dist/{chunk-FDLZEKEB.js → chunk-GEPBET4L.js} +3 -2
  31. package/dist/chunk-GEPBET4L.js.map +1 -0
  32. package/dist/chunk-HAIBAF6J.cjs +1880 -0
  33. package/dist/chunk-HAIBAF6J.cjs.map +1 -0
  34. package/dist/{chunk-FGPTCDUT.cjs → chunk-HKRYKEOV.cjs} +5 -4
  35. package/dist/chunk-HKRYKEOV.cjs.map +1 -0
  36. package/dist/{chunk-D4JTSPOL.js → chunk-HLYA4QBB.js} +4 -3
  37. package/dist/chunk-HLYA4QBB.js.map +1 -0
  38. package/dist/{chunk-URSKIHSY.cjs → chunk-IMHR3S5H.cjs} +6 -5
  39. package/dist/chunk-IMHR3S5H.cjs.map +1 -0
  40. package/dist/{chunk-U4I37IBN.js → chunk-IQIJ6WW6.js} +4 -3
  41. package/dist/chunk-IQIJ6WW6.js.map +1 -0
  42. package/dist/{chunk-UHLYS3W5.cjs → chunk-IY52OWPG.cjs} +5 -4
  43. package/dist/{chunk-UHLYS3W5.cjs.map → chunk-IY52OWPG.cjs.map} +1 -1
  44. package/dist/chunk-JZGFSRVT.js +1873 -0
  45. package/dist/chunk-JZGFSRVT.js.map +1 -0
  46. package/dist/{chunk-3J7TFUOC.js → chunk-L6IHSTPP.js} +4 -3
  47. package/dist/{chunk-3J7TFUOC.js.map → chunk-L6IHSTPP.js.map} +1 -1
  48. package/dist/{chunk-4DBRNOPA.cjs → chunk-LKHWBDWZ.cjs} +5 -4
  49. package/dist/{chunk-4DBRNOPA.cjs.map → chunk-LKHWBDWZ.cjs.map} +1 -1
  50. package/dist/{chunk-34X3ZJ6E.cjs → chunk-LXNFVHDT.cjs} +3 -2
  51. package/dist/{chunk-34X3ZJ6E.cjs.map → chunk-LXNFVHDT.cjs.map} +1 -1
  52. package/dist/chunk-M6AMNXQ7.js +4539 -0
  53. package/dist/chunk-M6AMNXQ7.js.map +1 -0
  54. package/dist/{chunk-XX4BKS7Y.js → chunk-MRGS54WN.js} +4 -3
  55. package/dist/chunk-MRGS54WN.js.map +1 -0
  56. package/dist/{chunk-ROFLJ74T.js → chunk-MXJ6FHSY.js} +4 -3
  57. package/dist/chunk-MXJ6FHSY.js.map +1 -0
  58. package/dist/{chunk-V6WO7RK7.cjs → chunk-PIQG2Z5N.cjs} +5 -4
  59. package/dist/chunk-PIQG2Z5N.cjs.map +1 -0
  60. package/dist/{chunk-U5GGE6PJ.js → chunk-RQX53J6M.js} +4 -3
  61. package/dist/chunk-RQX53J6M.js.map +1 -0
  62. package/dist/{chunk-N7KOXOMX.cjs → chunk-S6VPECM3.cjs} +72 -2
  63. package/dist/chunk-S6VPECM3.cjs.map +1 -0
  64. package/dist/{chunk-VFQCTXOX.js → chunk-SPIW4VWP.js} +4 -3
  65. package/dist/chunk-SPIW4VWP.js.map +1 -0
  66. package/dist/{chunk-IX554O5K.js → chunk-TIGP2OEJ.js} +72 -3
  67. package/dist/chunk-TIGP2OEJ.js.map +1 -0
  68. package/dist/{chunk-LMFSHK45.js → chunk-TPA36ULU.js} +4 -3
  69. package/dist/{chunk-LMFSHK45.js.map → chunk-TPA36ULU.js.map} +1 -1
  70. package/dist/{chunk-ZX7QKZK2.cjs → chunk-ULERCTGS.cjs} +5 -4
  71. package/dist/{chunk-ZX7QKZK2.cjs.map → chunk-ULERCTGS.cjs.map} +1 -1
  72. package/dist/chunk-VP54YPOX.cjs +4544 -0
  73. package/dist/chunk-VP54YPOX.cjs.map +1 -0
  74. package/dist/{chunk-XQ52ICHU.cjs → chunk-YKO7DY2F.cjs} +14 -13
  75. package/dist/chunk-YKO7DY2F.cjs.map +1 -0
  76. package/dist/{chunk-PDPHRZZT.js → chunk-YO4GU6JX.js} +4 -3
  77. package/dist/chunk-YO4GU6JX.js.map +1 -0
  78. package/dist/{chunk-S6BK5DB6.cjs → chunk-ZGKEFVJQ.cjs} +13 -12
  79. package/dist/chunk-ZGKEFVJQ.cjs.map +1 -0
  80. package/dist/{chunk-2MQWZ2XY.cjs → chunk-ZO77FHBF.cjs} +3 -2
  81. package/dist/chunk-ZO77FHBF.cjs.map +1 -0
  82. package/dist/diagrams/blockdiagram/index.cjs +5 -5
  83. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  84. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  85. package/dist/diagrams/blockdiagram/index.js +1 -1
  86. package/dist/diagrams/circuit/index.cjs +8 -8
  87. package/dist/diagrams/circuit/index.d.cts +1 -1
  88. package/dist/diagrams/circuit/index.d.ts +1 -1
  89. package/dist/diagrams/circuit/index.js +2 -2
  90. package/dist/diagrams/ecomap/index.cjs +7 -7
  91. package/dist/diagrams/ecomap/index.d.cts +1 -1
  92. package/dist/diagrams/ecomap/index.d.ts +1 -1
  93. package/dist/diagrams/ecomap/index.js +2 -2
  94. package/dist/diagrams/entity/index.cjs +6 -6
  95. package/dist/diagrams/entity/index.d.cts +1 -1
  96. package/dist/diagrams/entity/index.d.ts +1 -1
  97. package/dist/diagrams/entity/index.js +2 -2
  98. package/dist/diagrams/fishbone/index.cjs +8 -8
  99. package/dist/diagrams/fishbone/index.d.cts +9 -9
  100. package/dist/diagrams/fishbone/index.d.ts +9 -9
  101. package/dist/diagrams/fishbone/index.js +2 -2
  102. package/dist/diagrams/flowchart/index.cjs +8 -8
  103. package/dist/diagrams/flowchart/index.d.cts +2 -2
  104. package/dist/diagrams/flowchart/index.d.ts +2 -2
  105. package/dist/diagrams/flowchart/index.js +2 -2
  106. package/dist/diagrams/genogram/index.cjs +9 -9
  107. package/dist/diagrams/genogram/index.d.cts +1 -1
  108. package/dist/diagrams/genogram/index.d.ts +1 -1
  109. package/dist/diagrams/genogram/index.js +2 -2
  110. package/dist/diagrams/ladder/index.cjs +6 -6
  111. package/dist/diagrams/ladder/index.d.cts +1 -1
  112. package/dist/diagrams/ladder/index.d.ts +1 -1
  113. package/dist/diagrams/ladder/index.js +2 -2
  114. package/dist/diagrams/logic/index.cjs +6 -6
  115. package/dist/diagrams/logic/index.d.cts +1 -1
  116. package/dist/diagrams/logic/index.d.ts +1 -1
  117. package/dist/diagrams/logic/index.js +2 -2
  118. package/dist/diagrams/orgchart/index.cjs +7 -7
  119. package/dist/diagrams/orgchart/index.d.cts +1 -1
  120. package/dist/diagrams/orgchart/index.d.ts +1 -1
  121. package/dist/diagrams/orgchart/index.js +2 -2
  122. package/dist/diagrams/pedigree/index.cjs +7 -7
  123. package/dist/diagrams/pedigree/index.d.cts +1 -1
  124. package/dist/diagrams/pedigree/index.d.ts +1 -1
  125. package/dist/diagrams/pedigree/index.js +2 -2
  126. package/dist/diagrams/phylo/index.cjs +7 -7
  127. package/dist/diagrams/phylo/index.d.cts +1 -1
  128. package/dist/diagrams/phylo/index.d.ts +1 -1
  129. package/dist/diagrams/phylo/index.js +2 -2
  130. package/dist/diagrams/sld/index.cjs +6 -6
  131. package/dist/diagrams/sld/index.d.cts +1 -1
  132. package/dist/diagrams/sld/index.d.ts +1 -1
  133. package/dist/diagrams/sld/index.js +2 -2
  134. package/dist/diagrams/sociogram/index.cjs +6 -6
  135. package/dist/diagrams/sociogram/index.d.cts +1 -1
  136. package/dist/diagrams/sociogram/index.d.ts +1 -1
  137. package/dist/diagrams/sociogram/index.js +2 -2
  138. package/dist/diagrams/timing/index.cjs +4 -4
  139. package/dist/diagrams/timing/index.d.cts +1 -1
  140. package/dist/diagrams/timing/index.d.ts +1 -1
  141. package/dist/diagrams/timing/index.js +1 -1
  142. package/dist/diagrams/venn/index.cjs +9 -9
  143. package/dist/diagrams/venn/index.d.cts +1 -1
  144. package/dist/diagrams/venn/index.d.ts +1 -1
  145. package/dist/diagrams/venn/index.js +2 -2
  146. package/dist/export.cjs +87 -0
  147. package/dist/export.cjs.map +1 -0
  148. package/dist/export.d.cts +38 -0
  149. package/dist/export.d.ts +38 -0
  150. package/dist/export.js +83 -0
  151. package/dist/export.js.map +1 -0
  152. package/dist/{index-BXefHVce.d.cts → index-SSGpCggE.d.cts} +52 -3
  153. package/dist/{index-BSlza1YY.d.ts → index-ga04CTBI.d.ts} +52 -3
  154. package/dist/index.cjs +65 -1948
  155. package/dist/index.cjs.map +1 -1
  156. package/dist/index.d.cts +7 -12
  157. package/dist/index.d.ts +7 -12
  158. package/dist/index.js +19 -1942
  159. package/dist/index.js.map +1 -1
  160. package/dist/react.cjs +56 -0
  161. package/dist/react.cjs.map +1 -0
  162. package/dist/react.d.cts +24 -0
  163. package/dist/react.d.ts +24 -0
  164. package/dist/react.js +54 -0
  165. package/dist/react.js.map +1 -0
  166. package/dist/{types-DqfcYkcY.d.ts → types-BcPhMdHd.d.cts} +6 -2
  167. package/dist/{types-DqfcYkcY.d.cts → types-BcPhMdHd.d.ts} +6 -2
  168. package/package.json +31 -2
  169. package/dist/chunk-2MQWZ2XY.cjs.map +0 -1
  170. package/dist/chunk-2UKC6ZCY.cjs.map +0 -1
  171. package/dist/chunk-3FTUWAXK.cjs.map +0 -1
  172. package/dist/chunk-ADOXGKAK.js +0 -1251
  173. package/dist/chunk-ADOXGKAK.js.map +0 -1
  174. package/dist/chunk-CZRM7LT7.js.map +0 -1
  175. package/dist/chunk-D4JTSPOL.js.map +0 -1
  176. package/dist/chunk-DS47NTWZ.cjs.map +0 -1
  177. package/dist/chunk-FDLZEKEB.js.map +0 -1
  178. package/dist/chunk-FGPTCDUT.cjs.map +0 -1
  179. package/dist/chunk-IX554O5K.js.map +0 -1
  180. package/dist/chunk-MDICUK6F.cjs +0 -1258
  181. package/dist/chunk-MDICUK6F.cjs.map +0 -1
  182. package/dist/chunk-N7KOXOMX.cjs.map +0 -1
  183. package/dist/chunk-NYCIK4SU.cjs.map +0 -1
  184. package/dist/chunk-PDPHRZZT.js.map +0 -1
  185. package/dist/chunk-ROFLJ74T.js.map +0 -1
  186. package/dist/chunk-S6BK5DB6.cjs.map +0 -1
  187. package/dist/chunk-U4I37IBN.js.map +0 -1
  188. package/dist/chunk-U5GGE6PJ.js.map +0 -1
  189. package/dist/chunk-URSKIHSY.cjs.map +0 -1
  190. package/dist/chunk-V6WO7RK7.cjs.map +0 -1
  191. package/dist/chunk-VFQCTXOX.js.map +0 -1
  192. package/dist/chunk-XQ52ICHU.cjs.map +0 -1
  193. package/dist/chunk-XX4BKS7Y.js.map +0 -1
  194. package/dist/chunk-XXU36667.js.map +0 -1
@@ -1,38 +1,38 @@
1
1
  'use strict';
2
2
 
3
- var chunk3FTUWAXK_cjs = require('../../chunk-3FTUWAXK.cjs');
4
- require('../../chunk-N7KOXOMX.cjs');
3
+ var chunk3M7QWADF_cjs = require('../../chunk-3M7QWADF.cjs');
4
+ require('../../chunk-S6VPECM3.cjs');
5
5
  require('../../chunk-HDKDQAEQ.cjs');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "VennParseError", {
10
10
  enumerable: true,
11
- get: function () { return chunk3FTUWAXK_cjs.VennParseError; }
11
+ get: function () { return chunk3M7QWADF_cjs.VennParseError; }
12
12
  });
13
13
  Object.defineProperty(exports, "layoutVenn", {
14
14
  enumerable: true,
15
- get: function () { return chunk3FTUWAXK_cjs.layoutVenn; }
15
+ get: function () { return chunk3M7QWADF_cjs.layoutVenn; }
16
16
  });
17
17
  Object.defineProperty(exports, "parseVennDSL", {
18
18
  enumerable: true,
19
- get: function () { return chunk3FTUWAXK_cjs.parseVennDSL; }
19
+ get: function () { return chunk3M7QWADF_cjs.parseVennDSL; }
20
20
  });
21
21
  Object.defineProperty(exports, "renderVenn", {
22
22
  enumerable: true,
23
- get: function () { return chunk3FTUWAXK_cjs.renderVenn; }
23
+ get: function () { return chunk3M7QWADF_cjs.renderVenn; }
24
24
  });
25
25
  Object.defineProperty(exports, "renderVennAST", {
26
26
  enumerable: true,
27
- get: function () { return chunk3FTUWAXK_cjs.renderVennAST; }
27
+ get: function () { return chunk3M7QWADF_cjs.renderVennAST; }
28
28
  });
29
29
  Object.defineProperty(exports, "renderVennLayout", {
30
30
  enumerable: true,
31
- get: function () { return chunk3FTUWAXK_cjs.renderVennLayout; }
31
+ get: function () { return chunk3M7QWADF_cjs.renderVennLayout; }
32
32
  });
33
33
  Object.defineProperty(exports, "venn", {
34
34
  enumerable: true,
35
- get: function () { return chunk3FTUWAXK_cjs.venn; }
35
+ get: function () { return chunk3M7QWADF_cjs.venn; }
36
36
  });
37
37
  //# sourceMappingURL=index.cjs.map
38
38
  //# sourceMappingURL=index.cjs.map
@@ -1,4 +1,4 @@
1
- import { V as VennAST, m as VennLayoutResult, b as DiagramPlugin } from '../../types-DqfcYkcY.cjs';
1
+ import { V as VennAST, m as VennLayoutResult, D as DiagramPlugin } from '../../types-BcPhMdHd.cjs';
2
2
 
3
3
  /**
4
4
  * Venn / Euler DSL parser (hand-written recursive descent).
@@ -1,4 +1,4 @@
1
- import { V as VennAST, m as VennLayoutResult, b as DiagramPlugin } from '../../types-DqfcYkcY.js';
1
+ import { V as VennAST, m as VennLayoutResult, D as DiagramPlugin } from '../../types-BcPhMdHd.js';
2
2
 
3
3
  /**
4
4
  * Venn / Euler DSL parser (hand-written recursive descent).
@@ -1,5 +1,5 @@
1
- export { VennParseError, layoutVenn, parseVennDSL, renderVenn, renderVennAST, renderVennLayout, venn } from '../../chunk-ROFLJ74T.js';
2
- import '../../chunk-IX554O5K.js';
1
+ export { VennParseError, layoutVenn, parseVennDSL, renderVenn, renderVennAST, renderVennLayout, venn } from '../../chunk-MXJ6FHSY.js';
2
+ import '../../chunk-TIGP2OEJ.js';
3
3
  import '../../chunk-KLJEK547.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -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 };
@@ -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, b as DiagramPlugin } from './types-DqfcYkcY.cjs';
1
+ import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-BcPhMdHd.cjs';
2
2
 
3
3
  /**
4
- * Flowchart DSL parser (M1).
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 VennTokens as e, flowchart as f, resolveBiologyTheme as g, resolveFishboneTheme as h, resolveGenogramTheme as i, resolvePersonTheme as j, resolveVennTheme as k, layoutFlowchart as l, renderFlowchart as m, renderFlowchartAST as n, parseFlowchart as p, resolveBaseTheme as r };
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, b as DiagramPlugin } from './types-DqfcYkcY.js';
1
+ import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-BcPhMdHd.js';
2
2
 
3
3
  /**
4
- * Flowchart DSL parser (M1).
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 VennTokens as e, flowchart as f, resolveBiologyTheme as g, resolveFishboneTheme as h, resolveGenogramTheme as i, resolvePersonTheme as j, resolveVennTheme as k, layoutFlowchart as l, renderFlowchart as m, renderFlowchartAST as n, parseFlowchart as p, resolveBaseTheme as r };
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 };