schematex 0.3.4 → 0.4.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 (178) hide show
  1. package/README.md +5 -4
  2. package/dist/ai/ai-sdk.cjs +20 -19
  3. package/dist/ai/ai-sdk.cjs.map +1 -1
  4. package/dist/ai/ai-sdk.d.cts +2 -2
  5. package/dist/ai/ai-sdk.d.ts +2 -2
  6. package/dist/ai/ai-sdk.js +15 -14
  7. package/dist/ai/ai-sdk.js.map +1 -1
  8. package/dist/ai/index.cjs +23 -22
  9. package/dist/ai/index.d.cts +2 -2
  10. package/dist/ai/index.d.ts +2 -2
  11. package/dist/ai/index.js +15 -14
  12. package/dist/{api-BuFilDQB.d.cts → api-BIj9t4Oc.d.cts} +1 -1
  13. package/dist/{api-BuFilDQB.d.ts → api-BIj9t4Oc.d.ts} +1 -1
  14. package/dist/browser.cjs +17 -16
  15. package/dist/browser.cjs.map +1 -1
  16. package/dist/browser.d.cts +2 -2
  17. package/dist/browser.d.ts +2 -2
  18. package/dist/browser.js +15 -14
  19. package/dist/browser.js.map +1 -1
  20. package/dist/{chunk-4THC4VUA.cjs → chunk-2Z543TC3.cjs} +7 -6
  21. package/dist/chunk-2Z543TC3.cjs.map +1 -0
  22. package/dist/{chunk-DNZV4V4R.js → chunk-3ADSXODY.js} +428 -10
  23. package/dist/chunk-3ADSXODY.js.map +1 -0
  24. package/dist/{chunk-ZKDL6Y3O.js → chunk-5FF2IT3C.js} +5 -4
  25. package/dist/chunk-5FF2IT3C.js.map +1 -0
  26. package/dist/chunk-5IKOLUWK.js +89 -0
  27. package/dist/chunk-5IKOLUWK.js.map +1 -0
  28. package/dist/{chunk-3RAVPXLN.js → chunk-6URNSB6G.js} +5 -4
  29. package/dist/chunk-6URNSB6G.js.map +1 -0
  30. package/dist/{chunk-J3Y2QDJR.cjs → chunk-7LNIBHO6.cjs} +430 -12
  31. package/dist/chunk-7LNIBHO6.cjs.map +1 -0
  32. package/dist/{chunk-MIKCKV27.cjs → chunk-BW4KGTV7.cjs} +65 -31
  33. package/dist/chunk-BW4KGTV7.cjs.map +1 -0
  34. package/dist/{chunk-6ULC3UHJ.cjs → chunk-E2EJRVWS.cjs} +43 -12
  35. package/dist/chunk-E2EJRVWS.cjs.map +1 -0
  36. package/dist/{chunk-5CTERELC.js → chunk-EPKIJEH7.js} +5 -4
  37. package/dist/chunk-EPKIJEH7.js.map +1 -0
  38. package/dist/{chunk-IFR34VTL.cjs → chunk-GZY4CJ23.cjs} +5 -4
  39. package/dist/chunk-GZY4CJ23.cjs.map +1 -0
  40. package/dist/{chunk-TWAC2IIS.js → chunk-I55HO32M.js} +5 -4
  41. package/dist/chunk-I55HO32M.js.map +1 -0
  42. package/dist/{chunk-5SKT7RYR.js → chunk-J7JWMQD5.js} +7 -6
  43. package/dist/chunk-J7JWMQD5.js.map +1 -0
  44. package/dist/{chunk-PWI4NFYR.js → chunk-JDBG5DU2.js} +5 -4
  45. package/dist/chunk-JDBG5DU2.js.map +1 -0
  46. package/dist/{chunk-VRE5VWDQ.js → chunk-KVP7AORH.js} +43 -12
  47. package/dist/chunk-KVP7AORH.js.map +1 -0
  48. package/dist/{chunk-IURM4ZWE.js → chunk-L3CTXXVZ.js} +65 -31
  49. package/dist/chunk-L3CTXXVZ.js.map +1 -0
  50. package/dist/chunk-NAGUZFXX.cjs +94 -0
  51. package/dist/chunk-NAGUZFXX.cjs.map +1 -0
  52. package/dist/{chunk-DBMZEZLF.cjs → chunk-O2HN4WRG.cjs} +6229 -51
  53. package/dist/chunk-O2HN4WRG.cjs.map +1 -0
  54. package/dist/{chunk-HKJRHXGZ.js → chunk-O4RHSAHR.js} +6217 -39
  55. package/dist/chunk-O4RHSAHR.js.map +1 -0
  56. package/dist/{chunk-H5JYZ5YS.cjs → chunk-OIZ4MYSF.cjs} +5 -4
  57. package/dist/chunk-OIZ4MYSF.cjs.map +1 -0
  58. package/dist/{chunk-T47A6XUK.cjs → chunk-QUKVGHN4.cjs} +5 -4
  59. package/dist/chunk-QUKVGHN4.cjs.map +1 -0
  60. package/dist/{chunk-V4OVUBLA.cjs → chunk-RYVV5UVI.cjs} +5 -4
  61. package/dist/chunk-RYVV5UVI.cjs.map +1 -0
  62. package/dist/{chunk-CQP5YHVK.cjs → chunk-S2KJRHDZ.cjs} +4 -5
  63. package/dist/chunk-S2KJRHDZ.cjs.map +1 -0
  64. package/dist/{chunk-5COUZTVA.cjs → chunk-ST5YRTTV.cjs} +5 -4
  65. package/dist/chunk-ST5YRTTV.cjs.map +1 -0
  66. package/dist/{chunk-CS67UBP3.cjs → chunk-SUIDD2C5.cjs} +5 -4
  67. package/dist/chunk-SUIDD2C5.cjs.map +1 -0
  68. package/dist/{chunk-DHKKDIVT.js → chunk-SZK376QB.js} +5 -4
  69. package/dist/chunk-SZK376QB.js.map +1 -0
  70. package/dist/{chunk-WIFGBWET.cjs → chunk-UUBNQV2T.cjs} +4 -5
  71. package/dist/chunk-UUBNQV2T.cjs.map +1 -0
  72. package/dist/{chunk-I6VEXSUK.js → chunk-VDSYMSUY.js} +4 -5
  73. package/dist/chunk-VDSYMSUY.js.map +1 -0
  74. package/dist/{chunk-XSNNGYXZ.cjs → chunk-YLEVMOK2.cjs} +22 -8
  75. package/dist/chunk-YLEVMOK2.cjs.map +1 -0
  76. package/dist/{chunk-ZQZNWAHH.js → chunk-ZX74KJPM.js} +4 -5
  77. package/dist/chunk-ZX74KJPM.js.map +1 -0
  78. package/dist/{chunk-IZMAZOQI.js → chunk-ZYRCPSBU.js} +22 -8
  79. package/dist/chunk-ZYRCPSBU.js.map +1 -0
  80. package/dist/diagrams/blockdiagram/index.cjs +6 -5
  81. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  82. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  83. package/dist/diagrams/blockdiagram/index.js +2 -1
  84. package/dist/diagrams/circuit/index.cjs +8 -7
  85. package/dist/diagrams/circuit/index.d.cts +1 -1
  86. package/dist/diagrams/circuit/index.d.ts +1 -1
  87. package/dist/diagrams/circuit/index.js +2 -1
  88. package/dist/diagrams/ecomap/index.d.cts +1 -1
  89. package/dist/diagrams/ecomap/index.d.ts +1 -1
  90. package/dist/diagrams/entity/index.cjs +6 -5
  91. package/dist/diagrams/entity/index.d.cts +1 -1
  92. package/dist/diagrams/entity/index.d.ts +1 -1
  93. package/dist/diagrams/entity/index.js +2 -1
  94. package/dist/diagrams/fishbone/index.d.cts +1 -1
  95. package/dist/diagrams/fishbone/index.d.ts +1 -1
  96. package/dist/diagrams/flowchart/index.cjs +7 -7
  97. package/dist/diagrams/flowchart/index.d.cts +2 -2
  98. package/dist/diagrams/flowchart/index.d.ts +2 -2
  99. package/dist/diagrams/flowchart/index.js +1 -1
  100. package/dist/diagrams/genogram/index.d.cts +1 -1
  101. package/dist/diagrams/genogram/index.d.ts +1 -1
  102. package/dist/diagrams/ladder/index.cjs +6 -5
  103. package/dist/diagrams/ladder/index.d.cts +1 -1
  104. package/dist/diagrams/ladder/index.d.ts +1 -1
  105. package/dist/diagrams/ladder/index.js +2 -1
  106. package/dist/diagrams/logic/index.cjs +6 -5
  107. package/dist/diagrams/logic/index.d.cts +1 -1
  108. package/dist/diagrams/logic/index.d.ts +1 -1
  109. package/dist/diagrams/logic/index.js +2 -1
  110. package/dist/diagrams/orgchart/index.cjs +7 -6
  111. package/dist/diagrams/orgchart/index.d.cts +1 -1
  112. package/dist/diagrams/orgchart/index.d.ts +1 -1
  113. package/dist/diagrams/orgchart/index.js +2 -1
  114. package/dist/diagrams/pedigree/index.d.cts +1 -1
  115. package/dist/diagrams/pedigree/index.d.ts +1 -1
  116. package/dist/diagrams/phylo/index.cjs +7 -6
  117. package/dist/diagrams/phylo/index.d.cts +1 -1
  118. package/dist/diagrams/phylo/index.d.ts +1 -1
  119. package/dist/diagrams/phylo/index.js +2 -1
  120. package/dist/diagrams/sld/index.cjs +6 -5
  121. package/dist/diagrams/sld/index.d.cts +1 -1
  122. package/dist/diagrams/sld/index.d.ts +1 -1
  123. package/dist/diagrams/sld/index.js +2 -1
  124. package/dist/diagrams/sociogram/index.cjs +6 -5
  125. package/dist/diagrams/sociogram/index.d.cts +1 -1
  126. package/dist/diagrams/sociogram/index.d.ts +1 -1
  127. package/dist/diagrams/sociogram/index.js +2 -1
  128. package/dist/diagrams/timing/index.cjs +5 -4
  129. package/dist/diagrams/timing/index.d.cts +1 -1
  130. package/dist/diagrams/timing/index.d.ts +1 -1
  131. package/dist/diagrams/timing/index.js +2 -1
  132. package/dist/diagrams/venn/index.cjs +9 -8
  133. package/dist/diagrams/venn/index.d.cts +1 -1
  134. package/dist/diagrams/venn/index.d.ts +1 -1
  135. package/dist/diagrams/venn/index.js +2 -1
  136. package/dist/{index-D3u6vcA4.d.ts → index-CGK0xVls.d.ts} +3 -3
  137. package/dist/{index-bdfj6FpQ.d.cts → index-OW8eDrKj.d.cts} +3 -3
  138. package/dist/index.cjs +32 -31
  139. package/dist/index.d.cts +3 -3
  140. package/dist/index.d.ts +3 -3
  141. package/dist/index.js +14 -13
  142. package/dist/react.cjs +15 -14
  143. package/dist/react.cjs.map +1 -1
  144. package/dist/react.d.cts +1 -1
  145. package/dist/react.d.ts +1 -1
  146. package/dist/react.js +14 -13
  147. package/dist/react.js.map +1 -1
  148. package/dist/{types-DnU2UlWz.d.ts → types-Gkyab1sL.d.cts} +5 -1
  149. package/dist/{types-DnU2UlWz.d.cts → types-Gkyab1sL.d.ts} +5 -1
  150. package/package.json +2 -2
  151. package/dist/chunk-3RAVPXLN.js.map +0 -1
  152. package/dist/chunk-4THC4VUA.cjs.map +0 -1
  153. package/dist/chunk-5COUZTVA.cjs.map +0 -1
  154. package/dist/chunk-5CTERELC.js.map +0 -1
  155. package/dist/chunk-5SKT7RYR.js.map +0 -1
  156. package/dist/chunk-6ULC3UHJ.cjs.map +0 -1
  157. package/dist/chunk-CQP5YHVK.cjs.map +0 -1
  158. package/dist/chunk-CS67UBP3.cjs.map +0 -1
  159. package/dist/chunk-DBMZEZLF.cjs.map +0 -1
  160. package/dist/chunk-DHKKDIVT.js.map +0 -1
  161. package/dist/chunk-DNZV4V4R.js.map +0 -1
  162. package/dist/chunk-H5JYZ5YS.cjs.map +0 -1
  163. package/dist/chunk-HKJRHXGZ.js.map +0 -1
  164. package/dist/chunk-I6VEXSUK.js.map +0 -1
  165. package/dist/chunk-IFR34VTL.cjs.map +0 -1
  166. package/dist/chunk-IURM4ZWE.js.map +0 -1
  167. package/dist/chunk-IZMAZOQI.js.map +0 -1
  168. package/dist/chunk-J3Y2QDJR.cjs.map +0 -1
  169. package/dist/chunk-MIKCKV27.cjs.map +0 -1
  170. package/dist/chunk-PWI4NFYR.js.map +0 -1
  171. package/dist/chunk-T47A6XUK.cjs.map +0 -1
  172. package/dist/chunk-TWAC2IIS.js.map +0 -1
  173. package/dist/chunk-V4OVUBLA.cjs.map +0 -1
  174. package/dist/chunk-VRE5VWDQ.js.map +0 -1
  175. package/dist/chunk-WIFGBWET.cjs.map +0 -1
  176. package/dist/chunk-XSNNGYXZ.cjs.map +0 -1
  177. package/dist/chunk-ZKDL6Y3O.js.map +0 -1
  178. package/dist/chunk-ZQZNWAHH.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-DnU2UlWz.cjs';
1
+ import { n as FlowchartAST, o as FlowchartLayoutResult, D as DiagramPlugin } from './types-Gkyab1sL.cjs';
2
2
 
3
3
  /**
4
4
  * Flowchart DSL parser.
@@ -63,8 +63,8 @@ declare function parseFlowchart(source: string): FlowchartAST;
63
63
  declare const FC_CONST: {
64
64
  readonly nodeWidth: 120;
65
65
  readonly nodeHeight: 44;
66
- readonly nodeSpacingX: 32;
67
- readonly layerSpacingY: 56;
66
+ readonly nodeSpacingX: 40;
67
+ readonly layerSpacingY: 76;
68
68
  readonly dummyWidth: 1;
69
69
  readonly padding: 24;
70
70
  /** Latin/digit avg width at 12px font. CJK uses cjkCharWidth instead. */
package/dist/index.cjs CHANGED
@@ -1,75 +1,76 @@
1
1
  'use strict';
2
2
 
3
- var chunkDBMZEZLF_cjs = require('./chunk-DBMZEZLF.cjs');
4
- var chunkT47A6XUK_cjs = require('./chunk-T47A6XUK.cjs');
5
- var chunk4THC4VUA_cjs = require('./chunk-4THC4VUA.cjs');
6
- var chunkCS67UBP3_cjs = require('./chunk-CS67UBP3.cjs');
7
- var chunkIFR34VTL_cjs = require('./chunk-IFR34VTL.cjs');
8
- var chunkH5JYZ5YS_cjs = require('./chunk-H5JYZ5YS.cjs');
9
- var chunkV4OVUBLA_cjs = require('./chunk-V4OVUBLA.cjs');
3
+ var chunkO2HN4WRG_cjs = require('./chunk-O2HN4WRG.cjs');
4
+ var chunkQUKVGHN4_cjs = require('./chunk-QUKVGHN4.cjs');
5
+ var chunk2Z543TC3_cjs = require('./chunk-2Z543TC3.cjs');
6
+ var chunkSUIDD2C5_cjs = require('./chunk-SUIDD2C5.cjs');
7
+ var chunkGZY4CJ23_cjs = require('./chunk-GZY4CJ23.cjs');
8
+ var chunkOIZ4MYSF_cjs = require('./chunk-OIZ4MYSF.cjs');
9
+ var chunkRYVV5UVI_cjs = require('./chunk-RYVV5UVI.cjs');
10
10
  var chunk6WORZSL3_cjs = require('./chunk-6WORZSL3.cjs');
11
- var chunkMIKCKV27_cjs = require('./chunk-MIKCKV27.cjs');
12
- var chunk6ULC3UHJ_cjs = require('./chunk-6ULC3UHJ.cjs');
11
+ var chunkBW4KGTV7_cjs = require('./chunk-BW4KGTV7.cjs');
12
+ var chunkE2EJRVWS_cjs = require('./chunk-E2EJRVWS.cjs');
13
13
  var chunkK6RAUXRQ_cjs = require('./chunk-K6RAUXRQ.cjs');
14
14
  var chunk3MJKJX27_cjs = require('./chunk-3MJKJX27.cjs');
15
15
  var chunkO5POCPXZ_cjs = require('./chunk-O5POCPXZ.cjs');
16
- var chunkCQP5YHVK_cjs = require('./chunk-CQP5YHVK.cjs');
17
- var chunkWIFGBWET_cjs = require('./chunk-WIFGBWET.cjs');
16
+ var chunkS2KJRHDZ_cjs = require('./chunk-S2KJRHDZ.cjs');
17
+ var chunkUUBNQV2T_cjs = require('./chunk-UUBNQV2T.cjs');
18
18
  require('./chunk-5UCXMYE7.cjs');
19
- var chunk5COUZTVA_cjs = require('./chunk-5COUZTVA.cjs');
20
- var chunkXSNNGYXZ_cjs = require('./chunk-XSNNGYXZ.cjs');
19
+ var chunkST5YRTTV_cjs = require('./chunk-ST5YRTTV.cjs');
20
+ var chunkYLEVMOK2_cjs = require('./chunk-YLEVMOK2.cjs');
21
21
  var chunkD7EHZFK4_cjs = require('./chunk-D7EHZFK4.cjs');
22
+ require('./chunk-NAGUZFXX.cjs');
22
23
  require('./chunk-3WNW5Y7P.cjs');
23
24
 
24
25
 
25
26
 
26
27
  Object.defineProperty(exports, "decisiontree", {
27
28
  enumerable: true,
28
- get: function () { return chunkDBMZEZLF_cjs.decisiontree; }
29
+ get: function () { return chunkO2HN4WRG_cjs.decisiontree; }
29
30
  });
30
31
  Object.defineProperty(exports, "parse", {
31
32
  enumerable: true,
32
- get: function () { return chunkDBMZEZLF_cjs.parse; }
33
+ get: function () { return chunkO2HN4WRG_cjs.parse; }
33
34
  });
34
35
  Object.defineProperty(exports, "pid", {
35
36
  enumerable: true,
36
- get: function () { return chunkDBMZEZLF_cjs.pid; }
37
+ get: function () { return chunkO2HN4WRG_cjs.pid; }
37
38
  });
38
39
  Object.defineProperty(exports, "render", {
39
40
  enumerable: true,
40
- get: function () { return chunkDBMZEZLF_cjs.render; }
41
+ get: function () { return chunkO2HN4WRG_cjs.render; }
41
42
  });
42
43
  Object.defineProperty(exports, "state", {
43
44
  enumerable: true,
44
- get: function () { return chunkDBMZEZLF_cjs.state; }
45
+ get: function () { return chunkO2HN4WRG_cjs.state; }
45
46
  });
46
47
  Object.defineProperty(exports, "timeline", {
47
48
  enumerable: true,
48
- get: function () { return chunkDBMZEZLF_cjs.timeline; }
49
+ get: function () { return chunkO2HN4WRG_cjs.timeline; }
49
50
  });
50
51
  Object.defineProperty(exports, "orgchart", {
51
52
  enumerable: true,
52
- get: function () { return chunkT47A6XUK_cjs.orgchart; }
53
+ get: function () { return chunkQUKVGHN4_cjs.orgchart; }
53
54
  });
54
55
  Object.defineProperty(exports, "circuit", {
55
56
  enumerable: true,
56
- get: function () { return chunk4THC4VUA_cjs.circuit; }
57
+ get: function () { return chunk2Z543TC3_cjs.circuit; }
57
58
  });
58
59
  Object.defineProperty(exports, "blockdiagram", {
59
60
  enumerable: true,
60
- get: function () { return chunkCS67UBP3_cjs.blockdiagram; }
61
+ get: function () { return chunkSUIDD2C5_cjs.blockdiagram; }
61
62
  });
62
63
  Object.defineProperty(exports, "ladder", {
63
64
  enumerable: true,
64
- get: function () { return chunkIFR34VTL_cjs.ladder; }
65
+ get: function () { return chunkGZY4CJ23_cjs.ladder; }
65
66
  });
66
67
  Object.defineProperty(exports, "sld", {
67
68
  enumerable: true,
68
- get: function () { return chunkH5JYZ5YS_cjs.sld; }
69
+ get: function () { return chunkOIZ4MYSF_cjs.sld; }
69
70
  });
70
71
  Object.defineProperty(exports, "entity", {
71
72
  enumerable: true,
72
- get: function () { return chunkV4OVUBLA_cjs.entity; }
73
+ get: function () { return chunkRYVV5UVI_cjs.entity; }
73
74
  });
74
75
  Object.defineProperty(exports, "fishbone", {
75
76
  enumerable: true,
@@ -77,11 +78,11 @@ Object.defineProperty(exports, "fishbone", {
77
78
  });
78
79
  Object.defineProperty(exports, "venn", {
79
80
  enumerable: true,
80
- get: function () { return chunkMIKCKV27_cjs.venn; }
81
+ get: function () { return chunkBW4KGTV7_cjs.venn; }
81
82
  });
82
83
  Object.defineProperty(exports, "flowchart", {
83
84
  enumerable: true,
84
- get: function () { return chunk6ULC3UHJ_cjs.flowchart; }
85
+ get: function () { return chunkE2EJRVWS_cjs.flowchart; }
85
86
  });
86
87
  Object.defineProperty(exports, "genogram", {
87
88
  enumerable: true,
@@ -97,19 +98,19 @@ Object.defineProperty(exports, "pedigree", {
97
98
  });
98
99
  Object.defineProperty(exports, "phylo", {
99
100
  enumerable: true,
100
- get: function () { return chunkCQP5YHVK_cjs.phylo; }
101
+ get: function () { return chunkS2KJRHDZ_cjs.phylo; }
101
102
  });
102
103
  Object.defineProperty(exports, "sociogram", {
103
104
  enumerable: true,
104
- get: function () { return chunkWIFGBWET_cjs.sociogram; }
105
+ get: function () { return chunkUUBNQV2T_cjs.sociogram; }
105
106
  });
106
107
  Object.defineProperty(exports, "timing", {
107
108
  enumerable: true,
108
- get: function () { return chunk5COUZTVA_cjs.timing; }
109
+ get: function () { return chunkST5YRTTV_cjs.timing; }
109
110
  });
110
111
  Object.defineProperty(exports, "logic", {
111
112
  enumerable: true,
112
- get: function () { return chunkXSNNGYXZ_cjs.logic; }
113
+ get: function () { return chunkYLEVMOK2_cjs.logic; }
113
114
  });
114
115
  Object.defineProperty(exports, "BASE_THEMES", {
115
116
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { S as SchematexConfig, p as parse, r as render } from './api-BuFilDQB.cjs';
1
+ export { S as SchematexConfig, p as parse, r as render } from './api-BIj9t4Oc.cjs';
2
2
  export { genogram } from './diagrams/genogram/index.cjs';
3
3
  export { ecomap } from './diagrams/ecomap/index.cjs';
4
4
  export { pedigree } from './diagrams/pedigree/index.cjs';
@@ -13,9 +13,9 @@ export { sld } from './diagrams/sld/index.cjs';
13
13
  export { entity } from './diagrams/entity/index.cjs';
14
14
  export { fishbone } from './diagrams/fishbone/index.cjs';
15
15
  export { venn } from './diagrams/venn/index.cjs';
16
- export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, e as TimelineTokens, V as VENN_TOKENS, f as VennTokens, g as flowchart, r as resolveBaseTheme, h as resolveBiologyTheme, i as resolveFishboneTheme, j as resolveGenogramTheme, k as resolvePersonTheme, l as resolveTimelineTheme, m as resolveVennTheme } from './index-bdfj6FpQ.cjs';
16
+ export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, e as TimelineTokens, V as VENN_TOKENS, f as VennTokens, g as flowchart, r as resolveBaseTheme, h as resolveBiologyTheme, i as resolveFishboneTheme, j as resolveGenogramTheme, k as resolvePersonTheme, l as resolveTimelineTheme, m as resolveVennTheme } from './index-OW8eDrKj.cjs';
17
17
  export { orgchart } from './diagrams/orgchart/index.cjs';
18
- import { D as DiagramPlugin } from './types-DnU2UlWz.cjs';
18
+ import { D as DiagramPlugin } from './types-Gkyab1sL.cjs';
19
19
 
20
20
  declare const decisiontree: DiagramPlugin;
21
21
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { S as SchematexConfig, p as parse, r as render } from './api-BuFilDQB.js';
1
+ export { S as SchematexConfig, p as parse, r as render } from './api-BIj9t4Oc.js';
2
2
  export { genogram } from './diagrams/genogram/index.js';
3
3
  export { ecomap } from './diagrams/ecomap/index.js';
4
4
  export { pedigree } from './diagrams/pedigree/index.js';
@@ -13,9 +13,9 @@ export { sld } from './diagrams/sld/index.js';
13
13
  export { entity } from './diagrams/entity/index.js';
14
14
  export { fishbone } from './diagrams/fishbone/index.js';
15
15
  export { venn } from './diagrams/venn/index.js';
16
- export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, e as TimelineTokens, V as VENN_TOKENS, f as VennTokens, g as flowchart, r as resolveBaseTheme, h as resolveBiologyTheme, i as resolveFishboneTheme, j as resolveGenogramTheme, k as resolvePersonTheme, l as resolveTimelineTheme, m as resolveVennTheme } from './index-D3u6vcA4.js';
16
+ export { B as BASE_THEMES, a as BIOLOGY_TOKENS, b as BaseTheme, c as BiologyTokens, P as PERSON_TOKENS, d as PersonTokens, R as ResolvedTheme, T as ThemeName, e as TimelineTokens, V as VENN_TOKENS, f as VennTokens, g as flowchart, r as resolveBaseTheme, h as resolveBiologyTheme, i as resolveFishboneTheme, j as resolveGenogramTheme, k as resolvePersonTheme, l as resolveTimelineTheme, m as resolveVennTheme } from './index-CGK0xVls.js';
17
17
  export { orgchart } from './diagrams/orgchart/index.js';
18
- import { D as DiagramPlugin } from './types-DnU2UlWz.js';
18
+ import { D as DiagramPlugin } from './types-Gkyab1sL.js';
19
19
 
20
20
  declare const decisiontree: DiagramPlugin;
21
21
 
package/dist/index.js CHANGED
@@ -1,22 +1,23 @@
1
- export { decisiontree, parse, pid, render, state, timeline } from './chunk-HKJRHXGZ.js';
2
- export { orgchart } from './chunk-TWAC2IIS.js';
3
- export { circuit } from './chunk-5SKT7RYR.js';
4
- export { blockdiagram } from './chunk-5CTERELC.js';
5
- export { ladder } from './chunk-ZKDL6Y3O.js';
6
- export { sld } from './chunk-PWI4NFYR.js';
7
- export { entity } from './chunk-DHKKDIVT.js';
1
+ export { decisiontree, parse, pid, render, state, timeline } from './chunk-O4RHSAHR.js';
2
+ export { orgchart } from './chunk-I55HO32M.js';
3
+ export { circuit } from './chunk-J7JWMQD5.js';
4
+ export { blockdiagram } from './chunk-EPKIJEH7.js';
5
+ export { ladder } from './chunk-5FF2IT3C.js';
6
+ export { sld } from './chunk-JDBG5DU2.js';
7
+ export { entity } from './chunk-SZK376QB.js';
8
8
  export { fishbone } from './chunk-YWDODCW2.js';
9
- export { venn } from './chunk-IURM4ZWE.js';
10
- export { flowchart } from './chunk-VRE5VWDQ.js';
9
+ export { venn } from './chunk-L3CTXXVZ.js';
10
+ export { flowchart } from './chunk-KVP7AORH.js';
11
11
  export { genogram } from './chunk-WHNIK4LK.js';
12
12
  export { ecomap } from './chunk-LPKVIRYT.js';
13
13
  export { pedigree } from './chunk-6XGSEG3K.js';
14
- export { phylo } from './chunk-I6VEXSUK.js';
15
- export { sociogram } from './chunk-ZQZNWAHH.js';
14
+ export { phylo } from './chunk-VDSYMSUY.js';
15
+ export { sociogram } from './chunk-ZX74KJPM.js';
16
16
  import './chunk-FO7BLCEW.js';
17
- export { timing } from './chunk-3RAVPXLN.js';
18
- export { logic } from './chunk-IZMAZOQI.js';
17
+ export { timing } from './chunk-6URNSB6G.js';
18
+ export { logic } from './chunk-ZYRCPSBU.js';
19
19
  export { BASE_THEMES, BIOLOGY_TOKENS, PERSON_TOKENS, VENN_TOKENS, resolveBaseTheme, resolveBiologyTheme, resolveFishboneTheme, resolveGenogramTheme, resolvePersonTheme, resolveTimelineTheme, resolveVennTheme } from './chunk-2VNMKOUO.js';
20
+ import './chunk-5IKOLUWK.js';
20
21
  import './chunk-SYYBKDL7.js';
21
22
  //# sourceMappingURL=index.js.map
22
23
  //# sourceMappingURL=index.js.map
package/dist/react.cjs CHANGED
@@ -1,24 +1,25 @@
1
1
  'use strict';
2
2
 
3
- var chunkDBMZEZLF_cjs = require('./chunk-DBMZEZLF.cjs');
4
- require('./chunk-T47A6XUK.cjs');
5
- require('./chunk-4THC4VUA.cjs');
6
- require('./chunk-CS67UBP3.cjs');
7
- require('./chunk-IFR34VTL.cjs');
8
- require('./chunk-H5JYZ5YS.cjs');
9
- require('./chunk-V4OVUBLA.cjs');
3
+ var chunkO2HN4WRG_cjs = require('./chunk-O2HN4WRG.cjs');
4
+ require('./chunk-QUKVGHN4.cjs');
5
+ require('./chunk-2Z543TC3.cjs');
6
+ require('./chunk-SUIDD2C5.cjs');
7
+ require('./chunk-GZY4CJ23.cjs');
8
+ require('./chunk-OIZ4MYSF.cjs');
9
+ require('./chunk-RYVV5UVI.cjs');
10
10
  require('./chunk-6WORZSL3.cjs');
11
- require('./chunk-MIKCKV27.cjs');
12
- require('./chunk-6ULC3UHJ.cjs');
11
+ require('./chunk-BW4KGTV7.cjs');
12
+ require('./chunk-E2EJRVWS.cjs');
13
13
  require('./chunk-K6RAUXRQ.cjs');
14
14
  require('./chunk-3MJKJX27.cjs');
15
15
  require('./chunk-O5POCPXZ.cjs');
16
- require('./chunk-CQP5YHVK.cjs');
17
- require('./chunk-WIFGBWET.cjs');
16
+ require('./chunk-S2KJRHDZ.cjs');
17
+ require('./chunk-UUBNQV2T.cjs');
18
18
  require('./chunk-5UCXMYE7.cjs');
19
- require('./chunk-5COUZTVA.cjs');
20
- require('./chunk-XSNNGYXZ.cjs');
19
+ require('./chunk-ST5YRTTV.cjs');
20
+ require('./chunk-YLEVMOK2.cjs');
21
21
  require('./chunk-D7EHZFK4.cjs');
22
+ require('./chunk-NAGUZFXX.cjs');
22
23
  require('./chunk-3WNW5Y7P.cjs');
23
24
  var react = require('react');
24
25
  var jsxRuntime = require('react/jsx-runtime');
@@ -35,7 +36,7 @@ function SchematexDiagram({
35
36
  }) {
36
37
  const svg = react.useMemo(() => {
37
38
  try {
38
- return chunkDBMZEZLF_cjs.render(dsl, { type, theme, fontFamily, padding });
39
+ return chunkO2HN4WRG_cjs.render(dsl, { type, theme, fontFamily, padding });
39
40
  } catch (err) {
40
41
  const e = err instanceof Error ? err : new Error(String(err));
41
42
  onError?.(e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"names":["useMemo","render","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAMA,cAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAOC,yBAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.cjs","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/react.tsx"],"names":["useMemo","render","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAMA,cAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAOC,yBAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.cjs","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
package/dist/react.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as SchematexConfig } from './api-BuFilDQB.cjs';
2
+ import { S as SchematexConfig } from './api-BIj9t4Oc.cjs';
3
3
 
4
4
  interface SchematexDiagramProps {
5
5
  /** DSL text to render */
package/dist/react.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { S as SchematexConfig } from './api-BuFilDQB.js';
2
+ import { S as SchematexConfig } from './api-BIj9t4Oc.js';
3
3
 
4
4
  interface SchematexDiagramProps {
5
5
  /** DSL text to render */
package/dist/react.js CHANGED
@@ -1,22 +1,23 @@
1
- import { render } from './chunk-HKJRHXGZ.js';
2
- import './chunk-TWAC2IIS.js';
3
- import './chunk-5SKT7RYR.js';
4
- import './chunk-5CTERELC.js';
5
- import './chunk-ZKDL6Y3O.js';
6
- import './chunk-PWI4NFYR.js';
7
- import './chunk-DHKKDIVT.js';
1
+ import { render } from './chunk-O4RHSAHR.js';
2
+ import './chunk-I55HO32M.js';
3
+ import './chunk-J7JWMQD5.js';
4
+ import './chunk-EPKIJEH7.js';
5
+ import './chunk-5FF2IT3C.js';
6
+ import './chunk-JDBG5DU2.js';
7
+ import './chunk-SZK376QB.js';
8
8
  import './chunk-YWDODCW2.js';
9
- import './chunk-IURM4ZWE.js';
10
- import './chunk-VRE5VWDQ.js';
9
+ import './chunk-L3CTXXVZ.js';
10
+ import './chunk-KVP7AORH.js';
11
11
  import './chunk-WHNIK4LK.js';
12
12
  import './chunk-LPKVIRYT.js';
13
13
  import './chunk-6XGSEG3K.js';
14
- import './chunk-I6VEXSUK.js';
15
- import './chunk-ZQZNWAHH.js';
14
+ import './chunk-VDSYMSUY.js';
15
+ import './chunk-ZX74KJPM.js';
16
16
  import './chunk-FO7BLCEW.js';
17
- import './chunk-3RAVPXLN.js';
18
- import './chunk-IZMAZOQI.js';
17
+ import './chunk-6URNSB6G.js';
18
+ import './chunk-ZYRCPSBU.js';
19
19
  import './chunk-2VNMKOUO.js';
20
+ import './chunk-5IKOLUWK.js';
20
21
  import './chunk-SYYBKDL7.js';
21
22
  import { useMemo } from 'react';
22
23
  import { jsx } from 'react/jsx-runtime';
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.js","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.js","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
@@ -8,7 +8,7 @@
8
8
  * - Layout: DiagramAST → LayoutResult
9
9
  * - Renderer: LayoutResult → SVG string
10
10
  */
11
- type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid";
11
+ type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc";
12
12
  type GenogramMode = "medical" | "heritage";
13
13
  /**
14
14
  * Standard legend positions:
@@ -388,6 +388,8 @@ interface LogicGateInput {
388
388
  id: string;
389
389
  label: string;
390
390
  isActiveLow?: boolean;
391
+ /** True when the parser inferred this input from a gate reference rather than an explicit declaration. */
392
+ autoDeclared?: boolean;
391
393
  }
392
394
  interface LogicGateOutput {
393
395
  id: string;
@@ -405,6 +407,8 @@ interface LogicGateAST {
405
407
  gates: LogicGateNode[];
406
408
  modules?: LogicGateModule[];
407
409
  metadata?: Record<string, string>;
410
+ /** Non-fatal parser warnings (e.g. signals auto-declared as inputs). */
411
+ warnings?: string[];
408
412
  }
409
413
  type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "terminal_block" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
410
414
  type CircuitDirection = "right" | "left" | "up" | "down";
@@ -8,7 +8,7 @@
8
8
  * - Layout: DiagramAST → LayoutResult
9
9
  * - Renderer: LayoutResult → SVG string
10
10
  */
11
- type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid";
11
+ type DiagramType = "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc";
12
12
  type GenogramMode = "medical" | "heritage";
13
13
  /**
14
14
  * Standard legend positions:
@@ -388,6 +388,8 @@ interface LogicGateInput {
388
388
  id: string;
389
389
  label: string;
390
390
  isActiveLow?: boolean;
391
+ /** True when the parser inferred this input from a gate reference rather than an explicit declaration. */
392
+ autoDeclared?: boolean;
391
393
  }
392
394
  interface LogicGateOutput {
393
395
  id: string;
@@ -405,6 +407,8 @@ interface LogicGateAST {
405
407
  gates: LogicGateNode[];
406
408
  modules?: LogicGateModule[];
407
409
  metadata?: Record<string, string>;
410
+ /** Non-fatal parser warnings (e.g. signals auto-declared as inputs). */
411
+ warnings?: string[];
408
412
  }
409
413
  type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "terminal_block" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
410
414
  type CircuitDirection = "right" | "left" | "up" | "down";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "schematex",
3
- "version": "0.3.4",
4
- "description": "Every diagram a doctor, engineer, or lawyer would actually use. 22 industry-standard diagrams (genogram, pedigree, ladder logic, SLD, P&ID, UML state diagram, phylo, fishbone, entity structure, ...) from a text DSL. Free, fully open source, made for AI. Pure SVG, zero dependencies.",
3
+ "version": "0.4.0",
4
+ "description": "Every diagram a doctor, engineer, or lawyer would actually use. 27 industry-standard diagrams (genogram, pedigree, ladder logic, SLD, FBD, SFC, P&ID, UML state diagram, phylo, fishbone, entity structure, ...) from a text DSL. Free, fully open source, made for AI. Pure SVG, zero dependencies.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
7
7
  "module": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/timing/parser.ts","../src/diagrams/timing/renderer.ts","../src/diagrams/timing/index.ts"],"names":["text","title"],"mappings":"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","file":"chunk-3RAVPXLN.js","sourcesContent":["import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\n\nexport class TimingParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"TimingParseError\";\n }\n}\n\nconst VALID_STATES = /^[01xzpPnNhHlLudD=.23456789]+$/;\n\nfunction splitDataList(rest: string): { wave: string; data: string[] } {\n // Wave string is first token; remaining tokens are quoted strings or a `data: [...]` form\n const trimmed = rest.trim();\n // Accept: `wave data: [\"a\",\"b\"]` or `wave \"a\" \"b\" \"c\"`\n const m = trimmed.match(/^(\\S+)\\s*(.*)$/);\n if (!m) return { wave: trimmed, data: [] };\n const wave = m[1];\n const remainder = m[2].trim();\n if (!remainder) return { wave, data: [] };\n\n const data: string[] = [];\n // Strip `data:` prefix + optional brackets\n let r = remainder.replace(/^data\\s*:\\s*/, \"\").trim();\n if (r.startsWith(\"[\") && r.endsWith(\"]\")) r = r.slice(1, -1);\n const re = /\"([^\"]*)\"/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(r)) !== null) data.push(match[1]);\n return { wave, data };\n}\n\nexport function parseTiming(text: string): TimingAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const signals: Array<TimingSignal | TimingGroup> = [];\n let title: string | undefined;\n let hscale: number | undefined;\n let currentGroup: TimingGroup | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i] ?? \"\";\n const lineNo = i + 1;\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n // Header: `timing \"title\" [hscale: 2]`\n if (/^timing\\b/i.test(line)) {\n const titleMatch = line.match(/\"([^\"]*)\"/);\n if (titleMatch) title = titleMatch[1];\n const hs = line.match(/hscale\\s*:\\s*(\\d+(?:\\.\\d+)?)/);\n if (hs) hscale = parseFloat(hs[1]);\n continue;\n }\n\n // Group start: `[GroupName]` or `group \"name\" {`\n const groupOpen = line.match(/^\\[([^\\]]+)\\]$/) || line.match(/^group\\s+\"([^\"]+)\"\\s*\\{?$/);\n if (groupOpen) {\n currentGroup = { label: groupOpen[1], signals: [] };\n signals.push(currentGroup);\n continue;\n }\n if (line === \"}\") {\n currentGroup = null;\n continue;\n }\n if (line === \"---\") {\n currentGroup = null;\n continue;\n }\n\n // Signal: `NAME: wave ...`\n const sigMatch = line.match(/^([^:]+):\\s*(.+)$/);\n if (sigMatch) {\n const name = sigMatch[1].trim();\n const { wave, data } = splitDataList(sigMatch[2]);\n if (!VALID_STATES.test(wave)) {\n throw new TimingParseError(`Invalid wave string \"${wave}\" for signal ${name}`, lineNo, undefined, line);\n }\n const signal: TimingSignal = { name, wave, data: data.length ? data : undefined };\n if (currentGroup) currentGroup.signals.push(signal);\n else signals.push(signal);\n continue;\n }\n }\n\n return { type: \"timing\", title, hscale, signals };\n}\n","import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\nimport { svgRoot, defs, group, el, text, title as titleEl, desc } from \"../../core/svg\";\n\nconst NAME_W = 120;\nconst SIG_H = 36;\nconst PAD_TOP = 12;\nconst PAD_BOT = 12;\nconst PAD_V = 6; // vertical padding inside band for rail spacing\nconst DEFAULT_PW = 40;\nconst GROUP_LABEL_H = 22;\n\ntype FlatRow =\n | { kind: \"signal\"; signal: TimingSignal; indent: number }\n | { kind: \"group\"; label: string; indent: number };\n\nfunction flatten(items: Array<TimingSignal | TimingGroup>, indent = 0): FlatRow[] {\n const out: FlatRow[] = [];\n for (const item of items) {\n if (\"wave\" in item) {\n out.push({ kind: \"signal\", signal: item, indent });\n } else {\n out.push({ kind: \"group\", label: item.label, indent });\n out.push(...flatten(item.signals, indent + 1));\n }\n }\n return out;\n}\n\ninterface WaveCtx {\n pw: number;\n yHi: number;\n yLo: number;\n yMid: number;\n h: number;\n}\n\ntype PrevState = \"hi\" | \"lo\" | \"bus\" | \"z\" | \"x\" | \"none\";\n\nfunction renderWave(signal: TimingSignal, ctx: WaveCtx): { svg: string; labels: string } {\n const { pw, yHi, yLo, yMid } = ctx;\n const wave = signal.wave;\n const paths: string[] = [];\n const busRects: string[] = [];\n const busTexts: string[] = [];\n const xPatchRects: string[] = [];\n const zLines: string[] = [];\n\n let prev: PrevState = \"none\";\n let prevChar = \"\";\n let busStartX = 0;\n let busIndex = 0;\n let dataIdx = 0;\n let linePath = \"\";\n\n const startLine = (x: number, y: number) => {\n if (linePath) paths.push(linePath);\n linePath = `M ${x},${y}`;\n };\n const extendLineTo = (x: number, y: number) => {\n linePath += ` L ${x},${y}`;\n };\n const flushLine = () => {\n if (linePath) {\n paths.push(linePath);\n linePath = \"\";\n }\n };\n\n const closeBus = (x: number) => {\n const start = busStartX;\n const end = x;\n const inset = Math.min(5, (end - start) / 2);\n // Trapezoid outline\n const d = `M ${start + inset},${yHi} L ${end - inset},${yHi} L ${end},${yMid} L ${end - inset},${yLo} L ${start + inset},${yLo} L ${start},${yMid} Z`;\n busRects.push(\n el(\"path\", { class: \"schematex-timing-bus\", d, \"data-bus-index\": String(busIndex) })\n );\n // Data label\n const label = signal.data?.[dataIdx] ?? \"\";\n if (label) {\n busTexts.push(\n text(\n {\n x: (start + end) / 2,\n y: yMid + 4,\n class: \"schematex-timing-bus-label\",\n \"text-anchor\": \"middle\",\n },\n label\n )\n );\n }\n dataIdx++;\n busIndex++;\n };\n\n for (let i = 0; i < wave.length; i++) {\n const ch = wave[i];\n const x = i * pw;\n const xNext = x + pw;\n\n // Handle continuation '.'\n const effective = ch === \".\" ? prevChar : ch;\n\n switch (effective) {\n case \"0\":\n case \"l\":\n case \"L\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yLo);\n } else if (prev === \"hi\") {\n extendLineTo(x, yLo);\n }\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"1\":\n case \"h\":\n case \"H\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yHi);\n } else if (prev === \"lo\") {\n extendLineTo(x, yHi);\n }\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"p\":\n case \"P\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n // One-period positive clock: lo→hi at x, hi until midpoint, lo at mid, lo until xNext\n startLine(x, yLo);\n extendLineTo(x, yHi);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(xNext, yLo);\n flushLine();\n prev = \"lo\";\n break;\n }\n case \"n\":\n case \"N\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(x, yLo);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(xNext, yHi);\n flushLine();\n prev = \"hi\";\n break;\n }\n case \"u\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yLo);\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"d\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"z\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n zLines.push(\n el(\"line\", {\n x1: x,\n y1: yMid,\n x2: xNext,\n y2: yMid,\n class: \"schematex-timing-hiz\",\n })\n );\n prev = \"z\";\n break;\n }\n case \"x\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n break;\n }\n case \"=\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n // Each fresh bus char (not '.') begins a new segment.\n const isContinuation = ch === \".\";\n if (!isContinuation && prev === \"bus\") closeBus(x);\n if (prev !== \"bus\" || !isContinuation) {\n flushLine();\n busStartX = x;\n }\n prev = \"bus\";\n break;\n }\n default: {\n // unknown char -> treat as x\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n }\n }\n\n prevChar = effective;\n }\n\n // Close trailing bus\n if (prev === \"bus\") closeBus(wave.length * pw);\n flushLine();\n\n const waveSvg = paths\n .map((d) => el(\"path\", { class: \"schematex-timing-wave\", d }))\n .concat(xPatchRects, zLines, busRects)\n .join(\"\");\n\n return { svg: waveSvg, labels: busTexts.join(\"\") };\n}\n\nexport function renderTiming(ast: TimingAST): string {\n const pw = DEFAULT_PW * (ast.hscale ?? 1);\n const rows = flatten(ast.signals);\n const maxWaveLen = Math.max(\n 1,\n ...rows.flatMap((r) => (r.kind === \"signal\" ? [r.signal.wave.length] : []))\n );\n const waveAreaW = maxWaveLen * pw;\n const width = NAME_W + waveAreaW + 20;\n\n let y = PAD_TOP;\n const rowYs: number[] = [];\n for (const r of rows) {\n rowYs.push(y);\n y += r.kind === \"group\" ? GROUP_LABEL_H : SIG_H;\n }\n const height = y + PAD_BOT + 10;\n\n // Render rows\n const waveSvgs: string[] = [];\n const labelSvgs: string[] = [];\n const nameSvgs: string[] = [];\n const gridLines: string[] = [];\n\n // Grid: vertical period ticks across signal area\n for (let i = 0; i <= maxWaveLen; i++) {\n const xg = NAME_W + i * pw;\n gridLines.push(\n el(\"line\", {\n x1: xg,\n y1: PAD_TOP,\n x2: xg,\n y2: height - PAD_BOT,\n class: \"schematex-timing-grid\",\n })\n );\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const ry = rowYs[i];\n\n if (row.kind === \"group\") {\n nameSvgs.push(\n text(\n {\n x: 6 + row.indent * 10,\n y: ry + GROUP_LABEL_H - 6,\n class: \"schematex-timing-group-label\",\n },\n row.label\n )\n );\n continue;\n }\n\n const signal = row.signal;\n const yHi = ry + PAD_V;\n const yLo = ry + SIG_H - PAD_V;\n const yMid = ry + SIG_H / 2;\n\n // Signal name (right-aligned in name column). `~NAME` or `/NAME` → overlined active-low.\n const activeLow = signal.name.startsWith(\"~\") || signal.name.startsWith(\"/\");\n const displayName = activeLow ? signal.name.slice(1) : signal.name;\n nameSvgs.push(\n text(\n {\n x: NAME_W - 8,\n y: yMid + 4,\n class: activeLow\n ? \"schematex-timing-name schematex-timing-name-activelow\"\n : \"schematex-timing-name\",\n \"text-anchor\": \"end\",\n },\n displayName\n )\n );\n\n const { svg, labels } = renderWave(signal, {\n pw,\n yHi,\n yLo,\n yMid,\n h: SIG_H - 2 * PAD_V,\n });\n\n waveSvgs.push(\n group(\n {\n transform: `translate(${NAME_W}, 0)`,\n \"data-signal\": signal.name,\n },\n [svg]\n )\n );\n labelSvgs.push(\n group({ transform: `translate(${NAME_W}, 0)` }, [labels])\n );\n }\n\n const xhatch = el(\n \"pattern\",\n {\n id: \"schematex-timing-xhatch\",\n patternUnits: \"userSpaceOnUse\",\n width: 6,\n height: 6,\n },\n [\n el(\"rect\", { x: 0, y: 0, width: 6, height: 6, fill: \"#f5f5f5\" }),\n el(\"path\", {\n d: \"M 0,6 L 6,0 M -1,1 L 1,-1 M 5,7 L 7,5\",\n stroke: \"#999\",\n \"stroke-width\": 0.8,\n }),\n ]\n );\n\n const css = `\n.schematex-timing { font-family: system-ui, -apple-system, sans-serif; }\n.schematex-timing-name { font: 12px monospace; fill: #111; }\n.schematex-timing-name-activelow { text-decoration: overline; }\n.schematex-timing-group-label { font: bold 12px sans-serif; fill: #111; }\n.schematex-timing-wave { stroke: #111; stroke-width: 1.75; fill: none; stroke-linejoin: miter; stroke-linecap: square; }\n.schematex-timing-bus { fill: none; stroke: #111; stroke-width: 1.5; }\n.schematex-timing-bus-label { font: 11px monospace; fill: #111; }\n.schematex-timing-unknown { stroke: #555; stroke-width: 0.5; }\n.schematex-timing-hiz { stroke: #555; stroke-width: 1.5; stroke-dasharray: 4 3; }\n.schematex-timing-grid { stroke: #eee; stroke-width: 0.5; }\n`.trim();\n\n return svgRoot(\n {\n class: \"schematex-timing\",\n viewBox: `0 0 ${width} ${height}`,\n width,\n height,\n role: \"img\",\n \"data-diagram-type\": \"timing\",\n },\n [\n titleEl(ast.title ?? \"Timing Diagram\"),\n desc(`Digital timing diagram with ${rows.filter((r) => r.kind === \"signal\").length} signals`),\n defs([xhatch, el(\"style\", {}, css)]),\n group({ class: \"schematex-timing-grid-g\" }, gridLines),\n group({ class: \"schematex-timing-waves\" }, waveSvgs),\n group({ class: \"schematex-timing-labels\" }, labelSvgs),\n group({ class: \"schematex-timing-names\" }, nameSvgs),\n ast.title\n ? text(\n {\n x: width / 2,\n y: 14,\n \"text-anchor\": \"middle\",\n class: \"schematex-timing-title\",\n style: \"font: bold 13px sans-serif; fill: #333;\",\n },\n ast.title\n )\n : \"\",\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseTiming } from \"./parser\";\nimport { renderTiming } from \"./renderer\";\n\nexport const timing: DiagramPlugin = {\n type: \"timing\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"timing\");\n },\n parse: parseTiming,\n\n render(text: string): string {\n const ast = parseTiming(text);\n return renderTiming(ast);\n },\n};\n\nexport { parseTiming } from \"./parser\";\nexport { renderTiming } from \"./renderer\";\n"]}