@diagrammo/dgmo 0.51.0 → 0.53.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 (336) hide show
  1. package/.cursorrules +74 -77
  2. package/.github/copilot-instructions.md +74 -77
  3. package/.windsurfrules +74 -77
  4. package/SKILL.md +74 -77
  5. package/dist/advanced.d.ts +109 -246
  6. package/dist/advanced.js +296 -633
  7. package/dist/analyzer-TDN5KJFP.js +15 -0
  8. package/dist/auto.css +14 -6
  9. package/dist/auto.js +141 -129
  10. package/dist/auto.mjs +2062 -937
  11. package/dist/block.css +14 -6
  12. package/dist/block.js +123 -73
  13. package/dist/calculator-VBIT6GQF.js +11 -0
  14. package/dist/chart-meta-CPNVUZ5J.d.ts +232 -0
  15. package/dist/chart-meta.d.ts +2 -0
  16. package/dist/chart-meta.js +105 -0
  17. package/dist/charts-d3-DH2XA45I.js +26 -0
  18. package/dist/{chunk-RLFVAKEO.js → chunk-22OQWBWD.js} +25 -8
  19. package/dist/{chunk-I2QZFCS2.js → chunk-27STWBOK.js} +10 -8
  20. package/dist/{chunk-5PZT4DQG.js → chunk-2QC4HXCY.js} +41 -21
  21. package/dist/{chunk-HFMYN6N2.js → chunk-3B2GXZCX.js} +4 -3
  22. package/dist/{chunk-F3FYUFUH.js → chunk-3BEKKRH5.js} +18 -17
  23. package/dist/{chunk-2UJSV2VT.js → chunk-3CZLWOCI.js} +17 -7
  24. package/dist/{chunk-JEUJOX5X.js → chunk-3IUHKMJI.js} +2 -2
  25. package/dist/{chunk-7L4UJOY6.js → chunk-3TYUXC7D.js} +2 -2
  26. package/dist/{chunk-Y2ZE3MSG.js → chunk-43E26CDA.js} +2 -2
  27. package/dist/{chunk-ZO27FGJS.js → chunk-4ASVFYB2.js} +10 -7
  28. package/dist/{chunk-WCT3NYCV.js → chunk-4ASYQ347.js} +33 -8
  29. package/dist/{chunk-2ILHQOL3.js → chunk-4K42RUGC.js} +41 -13
  30. package/dist/{chunk-I5IGB56C.js → chunk-4QV26TEG.js} +41 -1
  31. package/dist/{chunk-QOOUC2J5.js → chunk-4RGZFA7H.js} +2 -2
  32. package/dist/{chunk-CXK4DZH3.js → chunk-4W2PE66Q.js} +12 -2
  33. package/dist/{chunk-EXOQP75F.js → chunk-4WGMGKCZ.js} +53 -33
  34. package/dist/{chunk-JED6ZDEE.js → chunk-5HWPEYWB.js} +2 -2
  35. package/dist/{chunk-3YSQZ75W.js → chunk-65V6IRFN.js} +46 -33
  36. package/dist/{chunk-TMACGPW5.js → chunk-6AUZPPAV.js} +4 -4
  37. package/dist/{chunk-6H7O2OPM.js → chunk-6DCOIN4W.js} +36 -6
  38. package/dist/{chunk-GTWKD3QT.js → chunk-6HTRCTAS.js} +7 -6
  39. package/dist/{chunk-VB4UJ3H2.js → chunk-6KY7OCZC.js} +21 -11
  40. package/dist/{chunk-YAA6IID3.js → chunk-774C2FF3.js} +2 -2
  41. package/dist/{chunk-WJ7RW65H.js → chunk-7GUF6SDR.js} +22 -20
  42. package/dist/{chunk-QYTPPDAO.js → chunk-7JDTNFAK.js} +3 -3
  43. package/dist/{chunk-U6EQI3U6.js → chunk-ADYKAKE3.js} +3 -3
  44. package/dist/{chunk-VNSXLA6G.js → chunk-AHXIMHDQ.js} +84 -20
  45. package/dist/chunk-AIMLCDAO.js +404 -0
  46. package/dist/{chunk-6MNGECP2.js → chunk-ALYZ3MAA.js} +4 -4
  47. package/dist/{chunk-5F5ELR3V.js → chunk-AN2DQB3G.js} +151 -20
  48. package/dist/{chunk-IEWG6J7C.js → chunk-AZNXGWDC.js} +91 -36
  49. package/dist/{chunk-4XFBQT5O.js → chunk-B4XS2AF2.js} +3 -3
  50. package/dist/{chunk-CC4YRBWV.js → chunk-BD3WGY4T.js} +18 -8
  51. package/dist/{chunk-RAHVMKBG.js → chunk-BFDVEO5R.js} +2 -2
  52. package/dist/{chunk-332ZR4QU.js → chunk-BR7AYN76.js} +8 -8
  53. package/dist/{chunk-P3NRSSUU.js → chunk-BULHGPHK.js} +3 -3
  54. package/dist/{chunk-PZDBOK2Q.js → chunk-CK2GMDXD.js} +11 -5
  55. package/dist/{chunk-467TVMQL.js → chunk-CMVZWP32.js} +3 -3
  56. package/dist/{chunk-GNSFLJAA.js → chunk-CQFNIIQN.js} +7 -7
  57. package/dist/{chunk-RBDIYLA5.js → chunk-DAOFNU6J.js} +17 -1
  58. package/dist/{chunk-AFIEPDLX.js → chunk-DWUMPMV2.js} +23 -11
  59. package/dist/{chunk-USZW2HHU.js → chunk-EQW6HOP4.js} +4 -3
  60. package/dist/{chunk-6BQFET7X.js → chunk-FFXCKZOU.js} +12 -4
  61. package/dist/{chunk-WRNFDFPU.js → chunk-FGDSTT3F.js} +2 -2
  62. package/dist/{chunk-6NFYEQDX.js → chunk-FLDC7ZAK.js} +34 -7
  63. package/dist/{chunk-IUJODQKX.js → chunk-FT7TPPZ5.js} +25 -23
  64. package/dist/{chunk-IEDMFNU7.js → chunk-FUKNRLIJ.js} +19 -7
  65. package/dist/{chunk-JJXGQIRV.js → chunk-FXCB7H5O.js} +4 -4
  66. package/dist/{chunk-GGHRAITI.js → chunk-GABSL6TH.js} +4 -4
  67. package/dist/{chunk-RXKTSFDL.js → chunk-GAWKIIPO.js} +35 -43
  68. package/dist/{chunk-ZJ3LS7DW.js → chunk-GMAH572Z.js} +6 -6
  69. package/dist/{chunk-TRM2J7ZN.js → chunk-GMIJ35PW.js} +28 -29
  70. package/dist/{chunk-AB7INMR5.js → chunk-GQ644SPD.js} +26 -25
  71. package/dist/{chunk-5QKQSSPO.js → chunk-GRM2A4BG.js} +4 -4
  72. package/dist/{chunk-3ODS2VGL.js → chunk-GWQJKTFS.js} +161 -704
  73. package/dist/{chunk-OTOHI4JO.js → chunk-H3HFC3SQ.js} +2 -2
  74. package/dist/{chunk-JSSX2SX4.js → chunk-HE5J53SZ.js} +4 -4
  75. package/dist/{chunk-2EQMXBBQ.js → chunk-HNBY6CNV.js} +3 -3
  76. package/dist/{chunk-J76PIKAT.js → chunk-HO3RCNF6.js} +3 -3
  77. package/dist/{chunk-OJTXTQA2.js → chunk-HORZ5H2L.js} +38 -31
  78. package/dist/{chunk-MX2EY5Y7.js → chunk-HOXKNRON.js} +2 -2
  79. package/dist/{chunk-E7Y3SYKW.js → chunk-I64ECJX3.js} +18 -8
  80. package/dist/{chunk-JM4LEPY3.js → chunk-IQJCVREL.js} +11 -8
  81. package/dist/{chunk-3JLKYGBQ.js → chunk-J7HI6G3G.js} +9 -6
  82. package/dist/{chunk-Q62FEYK3.js → chunk-JHOAH4TI.js} +3 -3
  83. package/dist/{chunk-OZPBJM5Q.js → chunk-JTMSWEIW.js} +11 -8
  84. package/dist/{chunk-P6T66CCZ.js → chunk-JYDMBWRP.js} +37 -19
  85. package/dist/{chunk-7DF4J4RL.js → chunk-KKHCNSKK.js} +17 -11
  86. package/dist/{chunk-ENRS56GC.js → chunk-KUSAVOWZ.js} +11 -8
  87. package/dist/{chunk-BYJBIALT.js → chunk-LC3FFD43.js} +23 -18
  88. package/dist/{chunk-65WJYYKJ.js → chunk-LHILKFDP.js} +16 -11
  89. package/dist/{chunk-NEQ6GJXB.js → chunk-LQHVDZYC.js} +52 -16
  90. package/dist/{chunk-5WPNFSXP.js → chunk-MA3HJZHB.js} +5 -5
  91. package/dist/{chunk-Z6XJQ6KO.js → chunk-MEQYZZFR.js} +3 -3
  92. package/dist/{chunk-MVN25IF6.js → chunk-NNUMX6WX.js} +42 -12
  93. package/dist/{chunk-7DYOELRK.js → chunk-NNYFQOTK.js} +78 -38
  94. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  95. package/dist/{chunk-H6PI3KJT.js → chunk-ODUT5WMC.js} +2 -2
  96. package/dist/{chunk-5PDTIBLV.js → chunk-P3H7QVDH.js} +56 -19
  97. package/dist/{chunk-ND76YJCN.js → chunk-PIXZTCKH.js} +84 -117
  98. package/dist/{chunk-3LV2NCB6.js → chunk-PKNNHU7H.js} +22 -9
  99. package/dist/{chunk-TK2VQQX2.js → chunk-PT4SW76W.js} +20 -18
  100. package/dist/{chunk-AE7II3E3.js → chunk-PV2QO7QL.js} +4 -4
  101. package/dist/{chunk-FTBZV6NE.js → chunk-PYO4TJJ3.js} +34 -26
  102. package/dist/{chunk-QZPEGJOM.js → chunk-Q7AH665U.js} +28 -14
  103. package/dist/{chunk-QHI5XVUJ.js → chunk-QAALSCKI.js} +27 -26
  104. package/dist/{chunk-GD6L76WD.js → chunk-QI3BOLQB.js} +23 -11
  105. package/dist/{chunk-Y6GBQTBK.js → chunk-QWIBT6DS.js} +50 -28
  106. package/dist/{chunk-GU46PPT3.js → chunk-QXGACPS2.js} +5 -5
  107. package/dist/{chunk-FMDSF3OV.js → chunk-QZAW5SFH.js} +2 -2
  108. package/dist/{chunk-YGJZWZTY.js → chunk-R5NH5BZG.js} +12 -9
  109. package/dist/{chunk-U5SI5NIM.js → chunk-RJ5LBZ5U.js} +43 -26
  110. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  111. package/dist/{chunk-XEQXCIBC.js → chunk-RW5PEJ7D.js} +18 -6
  112. package/dist/{chunk-4VWJ4LW2.js → chunk-SG4PRYO3.js} +61 -49
  113. package/dist/{chunk-RBHWPDBB.js → chunk-SGPFVDUL.js} +18 -7
  114. package/dist/{chunk-KJGG2JKQ.js → chunk-SQCBSFT5.js} +84 -79
  115. package/dist/{chunk-5X6YQA2J.js → chunk-U7NKYLX2.js} +18 -16
  116. package/dist/chunk-U7VO6JAA.js +566 -0
  117. package/dist/{chunk-32XPAAET.js → chunk-UFQJMOVZ.js} +10 -10
  118. package/dist/{chunk-Z72XRXD4.js → chunk-UJRTPOHH.js} +3 -3
  119. package/dist/{chunk-EDA6C7MV.js → chunk-UK6DKJLD.js} +34 -14
  120. package/dist/{chunk-GROLTAWZ.js → chunk-UKP5HWB5.js} +149 -89
  121. package/dist/{chunk-DY7XLRHK.js → chunk-UQRIKAMH.js} +28 -27
  122. package/dist/{chunk-TYS6CSS5.js → chunk-UU6LUYUH.js} +2 -2
  123. package/dist/{chunk-NI3XQBPB.js → chunk-UVDCHR4E.js} +18 -6
  124. package/dist/{chunk-6K2M4VSR.js → chunk-VAO6ANGC.js} +23 -10
  125. package/dist/{chunk-6NYWYNBI.js → chunk-VGNIDAPQ.js} +4 -4
  126. package/dist/{chunk-VL2O2F3W.js → chunk-VHO3YBTB.js} +2 -2
  127. package/dist/{chunk-IUO34HKW.js → chunk-VIRANCNY.js} +36 -32
  128. package/dist/{chunk-4QZ43D7I.js → chunk-VJHBSPGF.js} +12 -14
  129. package/dist/{chunk-BGP54HVR.js → chunk-VKNCC2GX.js} +12 -8
  130. package/dist/{chunk-FC5I2KXV.js → chunk-VRRDUYOK.js} +7 -7
  131. package/dist/{chunk-G3PF3S7P.js → chunk-W2DINCHL.js} +15 -15
  132. package/dist/{chunk-OU7HLO7I.js → chunk-W5KMNC5U.js} +8 -8
  133. package/dist/{chunk-FFUN5D66.js → chunk-WF64MW5G.js} +2 -2
  134. package/dist/{chunk-X7EC3L2H.js → chunk-X3RXGSCZ.js} +48 -30
  135. package/dist/{chunk-KFNWFNAA.js → chunk-XEAQDIMF.js} +7 -6
  136. package/dist/{chunk-AXW3M6OQ.js → chunk-XG4NWFPY.js} +38 -27
  137. package/dist/{chunk-B63YB7X3.js → chunk-XQ4KN6JQ.js} +127 -65
  138. package/dist/{chunk-WBRZJOEC.js → chunk-XY3UDKKH.js} +4 -4
  139. package/dist/{chunk-IE477RQZ.js → chunk-YG2BEIQU.js} +14 -13
  140. package/dist/{chunk-LV4BETUU.js → chunk-YJVA3QUU.js} +55 -5
  141. package/dist/{chunk-5SVOCD5W.js → chunk-YR43LJT5.js} +20 -16
  142. package/dist/{chunk-TLVIHFRO.js → chunk-ZKPPI6BF.js} +2 -2
  143. package/dist/{chunk-WQLMU7VG.js → chunk-ZXUAPTCK.js} +3 -3
  144. package/dist/cli.cjs +158 -155
  145. package/dist/clock.js +25 -23
  146. package/dist/countdown.js +4 -3
  147. package/dist/dgmo-router-B4S23EBH.js +86 -0
  148. package/dist/dimensions-K6PGYYGT.js +22 -0
  149. package/dist/editor.js +36 -6
  150. package/dist/element.js +143 -131
  151. package/dist/element.mjs +2062 -937
  152. package/dist/flowchart-parser-LALR6J6F.js +21 -0
  153. package/dist/{flowchart-renderer-AQSMEMYF.js → flowchart-renderer-DXYB5YRF.js} +14 -14
  154. package/dist/highlight.d.ts +21 -1
  155. package/dist/highlight.js +129 -8
  156. package/dist/index.d.ts +4 -2
  157. package/dist/index.js +80 -75
  158. package/dist/layout-3BVDMKXI.js +15 -0
  159. package/dist/layout-3M5UYJHY.js +14 -0
  160. package/dist/{layout-JDJAEQ3P.js → layout-3V2A4MUE.js} +8 -8
  161. package/dist/layout-4IHCMWZN.js +19 -0
  162. package/dist/layout-5XGYNYVT.js +9 -0
  163. package/dist/layout-AZUPXWSK.js +15 -0
  164. package/dist/{layout-F4WO357A.js → layout-CAAKQX4W.js} +3 -3
  165. package/dist/layout-CB3XWCOI.js +10 -0
  166. package/dist/{layout-OAC4PEAC.js → layout-E6HR6PXH.js} +7 -7
  167. package/dist/{layout-7QXCNOVS.js → layout-HBWT2G23.js} +3 -3
  168. package/dist/layout-KPQWJNAG.js +14 -0
  169. package/dist/layout-OL2XFJXA.js +17 -0
  170. package/dist/layout-WCAIKGZG.js +19 -0
  171. package/dist/layout-WSMPBQ4Q.js +17 -0
  172. package/dist/layout-ZE5DRJWX.js +20 -0
  173. package/dist/{layout-search-55FU6HD3.js → layout-search-34DPZD43.js} +51 -35
  174. package/dist/legend-constants-P5EQWRQQ.js +49 -0
  175. package/dist/{palettes-PRJ2RI6D.js → palettes-FGTNFARW.js} +4 -4
  176. package/dist/{parser-KKTJ6M3Y.js → parser-275KP7JO.js} +8 -8
  177. package/dist/parser-27Z76SN3.js +22 -0
  178. package/dist/parser-3CODK6RG.js +15 -0
  179. package/dist/{parser-EH5VE7ZN.js → parser-3KIGEEJM.js} +6 -6
  180. package/dist/parser-3VSWEKBF.js +15 -0
  181. package/dist/parser-4E4I3GNT.js +13 -0
  182. package/dist/parser-5FGJSQNS.js +12 -0
  183. package/dist/parser-5HQXCNOS.js +12 -0
  184. package/dist/parser-5QPFOB5F.js +12 -0
  185. package/dist/parser-6B6SSZT7.js +11 -0
  186. package/dist/parser-6PPHAXXH.js +14 -0
  187. package/dist/parser-7JHWEWXM.js +13 -0
  188. package/dist/{parser-5PDYJGWA.js → parser-7JVIDLLR.js} +7 -7
  189. package/dist/parser-CKA3QMAG.js +18 -0
  190. package/dist/parser-CRKLXGW7.js +13 -0
  191. package/dist/parser-EXNBDNGY.js +11 -0
  192. package/dist/parser-FF4BMRSB.js +16 -0
  193. package/dist/parser-FOOFEJQU.js +13 -0
  194. package/dist/parser-G26MTBFS.js +11 -0
  195. package/dist/parser-GKP2MHHL.js +11 -0
  196. package/dist/parser-GN2MM5CC.js +11 -0
  197. package/dist/parser-IKWK2ZU3.js +18 -0
  198. package/dist/parser-IVGHXLZP.js +14 -0
  199. package/dist/parser-NNIL3HXU.js +11 -0
  200. package/dist/parser-RNLTBIJ6.js +19 -0
  201. package/dist/parser-UWRX52PC.js +16 -0
  202. package/dist/parser-VOERD6XR.js +14 -0
  203. package/dist/parser-XNKJCMMA.js +13 -0
  204. package/dist/parser-XVPTRWZ4.js +15 -0
  205. package/dist/parser-YSLNDFLV.js +22 -0
  206. package/dist/parser-ZGNXYFPS.js +15 -0
  207. package/dist/parser-ZQDQTB4X.js +20 -0
  208. package/dist/pert.d.ts +4 -2
  209. package/dist/registry-CaSw0PSH.d.ts +350 -0
  210. package/dist/renderer-2C6DJRYN.js +24 -0
  211. package/dist/renderer-5MPN7CXZ.js +19 -0
  212. package/dist/renderer-6EN5XXJZ.js +27 -0
  213. package/dist/renderer-6WRYVM5R.js +24 -0
  214. package/dist/renderer-7NQSTQMQ.js +16 -0
  215. package/dist/renderer-7ZNVOVFG.js +16 -0
  216. package/dist/{renderer-KQB7UGDS.js → renderer-AK2WO4EI.js} +7 -6
  217. package/dist/renderer-COLQFSFV.js +26 -0
  218. package/dist/renderer-CWEFGEIC.js +36 -0
  219. package/dist/renderer-D3BRNOMV.js +29 -0
  220. package/dist/renderer-HIFQVEJA.js +22 -0
  221. package/dist/renderer-JCZG6AYU.js +28 -0
  222. package/dist/{renderer-6RKQPNJI.js → renderer-JTCX6PCG.js} +13 -13
  223. package/dist/renderer-JWGQSTMR.js +37 -0
  224. package/dist/{renderer-3YPZHMOU.js → renderer-K7XLVPH5.js} +6 -6
  225. package/dist/renderer-KARQF3F3.js +22 -0
  226. package/dist/renderer-LVZAHRP6.js +34 -0
  227. package/dist/{renderer-QXGN5H3A.js → renderer-NE5W7CQP.js} +8 -8
  228. package/dist/renderer-QD2SJF2I.js +34 -0
  229. package/dist/renderer-RLMOTXZ6.js +37 -0
  230. package/dist/renderer-SQ54MDSA.js +26 -0
  231. package/dist/{renderer-UV6MI64M.js → renderer-TYHGXAVT.js} +7 -6
  232. package/dist/renderer-UKXW2QPE.js +23 -0
  233. package/dist/renderer-UPF7NRTI.js +28 -0
  234. package/dist/renderer-VMH6L6CP.js +24 -0
  235. package/dist/{renderer-GHPZMFU2.js → renderer-WCWI4I6A.js} +5 -5
  236. package/dist/renderer-WFSUBKUL.js +25 -0
  237. package/dist/renderer-WNFXYYGL.js +21 -0
  238. package/dist/{renderer-RGIYOTKJ.js → renderer-XTXSOK3L.js} +14 -14
  239. package/dist/renderer-YUKPS27O.js +24 -0
  240. package/dist/renderer-YUXGXGSW.js +27 -0
  241. package/dist/renderer-ZBTEX2JK.js +16 -0
  242. package/dist/renderer-radial-WF6VOUOD.js +21 -0
  243. package/dist/{resolver-EMTGNR3D.js → resolver-WFKZYBJ2.js} +4 -4
  244. package/dist/state-parser-L7DHZIQO.js +19 -0
  245. package/dist/state-renderer-TFEUOP4H.js +38 -0
  246. package/dist/{themes-32xj5ZTW.d.ts → themes-tbBkIVsn.d.ts} +2 -349
  247. package/docs/ai-integration.md +74 -77
  248. package/docs/language-reference.md +329 -290
  249. package/fonts/Inter-Bold.woff2 +0 -0
  250. package/fonts/Inter-Regular.woff2 +0 -0
  251. package/gallery/fixtures/boxes-and-lines-diverging.dgmo +1 -2
  252. package/gallery/fixtures/boxes-and-lines.dgmo +1 -1
  253. package/gallery/fixtures/clock.dgmo +1 -1
  254. package/gallery/fixtures/event-line.dgmo +1 -1
  255. package/gallery/fixtures/gantt-full.dgmo +1 -1
  256. package/gallery/fixtures/gantt-sprints.dgmo +9 -9
  257. package/gallery/fixtures/gantt.dgmo +1 -1
  258. package/gallery/fixtures/legacy-syntax-backcompat.dgmo +16 -0
  259. package/gallery/fixtures/state-tags.dgmo +40 -0
  260. package/gallery/fixtures/swimlane.dgmo +1 -1
  261. package/gallery/fixtures/timeline-intraday.dgmo +1 -1
  262. package/package.json +5 -1
  263. package/dist/analyzer-BJ54GIFB.js +0 -15
  264. package/dist/calculator-LDYQCDDY.js +0 -11
  265. package/dist/charts-d3-7E4B4IMW.js +0 -26
  266. package/dist/dgmo-router-Y2VEX46B.js +0 -86
  267. package/dist/dimensions-F7B5C4BJ.js +0 -22
  268. package/dist/flowchart-parser-MY53QWTZ.js +0 -21
  269. package/dist/layout-46366KBT.js +0 -10
  270. package/dist/layout-46N4JJYK.js +0 -17
  271. package/dist/layout-4DIUOX2T.js +0 -14
  272. package/dist/layout-AM2JWW3X.js +0 -15
  273. package/dist/layout-CBCLPMSG.js +0 -15
  274. package/dist/layout-EE6GE46Y.js +0 -17
  275. package/dist/layout-G23F7LDH.js +0 -9
  276. package/dist/layout-HYZPWAK5.js +0 -18
  277. package/dist/layout-MUPRALE5.js +0 -14
  278. package/dist/layout-YVTNOTN4.js +0 -20
  279. package/dist/layout-ZDOSXL5G.js +0 -19
  280. package/dist/parser-2Q2T4C3B.js +0 -22
  281. package/dist/parser-3A42DZ72.js +0 -11
  282. package/dist/parser-4RFTKAQX.js +0 -15
  283. package/dist/parser-57ILIFZ2.js +0 -20
  284. package/dist/parser-5A2UWU6B.js +0 -11
  285. package/dist/parser-6BJEXUFX.js +0 -13
  286. package/dist/parser-6ZKABF5S.js +0 -22
  287. package/dist/parser-AIMHGJRR.js +0 -19
  288. package/dist/parser-AZJ25OKK.js +0 -13
  289. package/dist/parser-B77S5SZM.js +0 -11
  290. package/dist/parser-BEPSWJAD.js +0 -11
  291. package/dist/parser-BKI42XBQ.js +0 -16
  292. package/dist/parser-C3D7MVXY.js +0 -11
  293. package/dist/parser-CDG7CHV5.js +0 -14
  294. package/dist/parser-CZOJ7XQ6.js +0 -15
  295. package/dist/parser-E2RL6JYF.js +0 -18
  296. package/dist/parser-FQ6GZFMR.js +0 -13
  297. package/dist/parser-GKLZKEIK.js +0 -13
  298. package/dist/parser-H6ABKHZZ.js +0 -12
  299. package/dist/parser-I6GGFKOQ.js +0 -12
  300. package/dist/parser-JA7JQ7NF.js +0 -15
  301. package/dist/parser-OK22AC6Y.js +0 -14
  302. package/dist/parser-OK2ILHRT.js +0 -16
  303. package/dist/parser-OUTPNJWC.js +0 -11
  304. package/dist/parser-PORDUX5E.js +0 -15
  305. package/dist/parser-SRVFR7PM.js +0 -13
  306. package/dist/parser-UKFFZCFJ.js +0 -14
  307. package/dist/parser-UMWPLORP.js +0 -18
  308. package/dist/parser-Z4TZV2CB.js +0 -12
  309. package/dist/renderer-2AUFT3E2.js +0 -24
  310. package/dist/renderer-2HTNBIF2.js +0 -34
  311. package/dist/renderer-3K3IB7D5.js +0 -22
  312. package/dist/renderer-3YNIWF5I.js +0 -16
  313. package/dist/renderer-4WR6WMVF.js +0 -26
  314. package/dist/renderer-66MERVQ2.js +0 -24
  315. package/dist/renderer-ARMJBP6C.js +0 -28
  316. package/dist/renderer-CO2DW7S7.js +0 -37
  317. package/dist/renderer-EDJ2O4S5.js +0 -34
  318. package/dist/renderer-F7U3MFCV.js +0 -22
  319. package/dist/renderer-GD2COXVL.js +0 -16
  320. package/dist/renderer-GQIESYEM.js +0 -25
  321. package/dist/renderer-HCKJDFXD.js +0 -37
  322. package/dist/renderer-HYGHO4SJ.js +0 -28
  323. package/dist/renderer-JC3RDUT7.js +0 -23
  324. package/dist/renderer-NKJ24TEA.js +0 -19
  325. package/dist/renderer-OYO67VZK.js +0 -26
  326. package/dist/renderer-QIWVHWZO.js +0 -15
  327. package/dist/renderer-QRWACQRI.js +0 -21
  328. package/dist/renderer-QXPP4TA2.js +0 -27
  329. package/dist/renderer-RHT4MHFU.js +0 -24
  330. package/dist/renderer-RYR3TJ46.js +0 -36
  331. package/dist/renderer-SRKDNDFB.js +0 -27
  332. package/dist/renderer-TGTUABCI.js +0 -24
  333. package/dist/renderer-TXJFKPOG.js +0 -29
  334. package/dist/renderer-radial-FWABAZHB.js +0 -21
  335. package/dist/state-parser-6T6CNMPX.js +0 -18
  336. package/dist/state-renderer-AWZ3ECAX.js +0 -34
package/.cursorrules CHANGED
@@ -13,7 +13,7 @@ _Generated from `language-reference.md` — the anti-patterns and 50-type index
13
13
  LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the most common parse errors:
14
14
 
15
15
  - **No colons in declarations, directives, tags, or data rows.** `bar Revenue` (not `bar: Revenue`); `series Cloud blue, Legacy red` (not `series: ...`); `North 850` (not `North: 850`); `tag Team as t` (not `tag: Team`). A colon binds a value only in metadata (`key: value`), class/function type separators, and a few scoped spots — see §26.
16
- - **No Mermaid arrow-labels.** Put the label *between* the dashes: `A -Login-> B`, never `A -> B: Login`. Sequence: `->` sync, `~>` async; left-to-right only — no `<-` / `<~`.
16
+ - **No Mermaid arrow-labels.** Put the label _between_ the dashes: `A -Login-> B`, never `A -> B: Login`. Sequence: `->` sync, `~>` async; left-to-right only — no `<-` / `<~`.
17
17
  - **No indented edges on a map.** Every map connection is ONE full line — `JFK ~daily~> LAX`; for a hub repeat the origin per spoke (`JFK ~daily~> LHR`, …). A bare source with indented `-> dest` legs errors as `Malformed edge`; indented legs are valid ONLY inside a `route` block (an ordered stop→stop voyage). Edge endpoints auto-create their POIs — don't add separate `poi` lines for places already in an edge.
18
18
  - **No `|` metadata delimiter** (removed 0.18.0 → `E_PIPE_OPERATOR_REMOVED`). Use same-line `Name key: value, k2: v2` or indented `key: value`. (`|` survives only in wireframe `{A | B}` dropdowns, in-arrow label text, and quoted names.)
19
19
  - **No removed participant keywords.** Do not write `X is a service` / `external` / `frontend` / `networking` / `gateway` — these were removed and error. A bare name renders the default shape; for a typed glyph use `is a person` / `is a database` / `is a queue`.
@@ -25,7 +25,7 @@ LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the
25
25
  - **Declare before reference.** An edge target must be declared on a prior line; put metadata and edges on/under one declaration to avoid `Duplicate node` warnings.
26
26
  - **No reference scaffolding in output.** Emit only DGMO source. This doc is organized with HTML-comment anchors (the `TYPE`, `TIPS`, and `AI-CORE` markers, each wrapped in comment delimiters); never copy any such `<!-- … -->` comment into a diagram. They mark sections of the docs, not DGMO syntax; the parser flags a stray HTML comment as an `Unexpected line` warning. (DGMO's only comment form is `//`.)
27
27
 
28
- Two traps in the *other* direction (DGMO wants a colon / a space where you might not expect):
28
+ Two traps in the _other_ direction (DGMO wants a colon / a space where you might not expect):
29
29
 
30
30
  - **Infra node properties REQUIRE the colon** — `cache-hit: 80%`, `instances: 3`, `max-rps: 8000`, `latency-ms: 45`. But top-level infra **options** are space-separated (`default-rps 100`). Don't conflate them.
31
31
  - **ER columns are space-separated** — `id int pk`, `email varchar` (the one SQL-DDL carve-out; everything else indented-typed uses a colon).
@@ -51,10 +51,11 @@ Billing t: Product
51
51
  Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply these unless the prompt says otherwise:
52
52
 
53
53
  <!-- TITLE start -->
54
+
54
55
  - **Always title it.** Every diagram gets a short title on the type-declaration line (`flowchart Checkout Flow`, `sequence Checkout`, `boxes-and-lines Service Map`) so it is self-describing — never leave the bare type keyword alone. Infer a fitting title from the request when the user gives none.
55
- <!-- TITLE end -->
56
- <!-- CATEGORIZE start -->
57
- - **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have *fewer* values than it has members: each color should bucket two or more items so the palette compresses the diagram into a few meaningful kinds (aim for ~2–4 categories, and keep distinct colors well under half the item count). If you find yourself giving nearly every item its own value, you've enumerated, not categorized — merge the singletons up a level until each color groups at least two (a `cache` and a `database` are both `datastore`; a caller and a gateway are both `client`; two microservices are both `service`). One color per item is the same visual noise as random colors — the grouping only earns its place when a color means "these belong together." Leave items uncolored only when they genuinely form a single undifferentiated kind, or the user asked for no color.
56
+ <!-- TITLE end -->
57
+ <!-- CATEGORIZE start -->
58
+ - **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have _fewer_ values than it has members: each color should bucket two or more items so the palette compresses the diagram into a few meaningful kinds (aim for ~2–4 categories, and keep distinct colors well under half the item count). If you find yourself giving nearly every item its own value, you've enumerated, not categorized — merge the singletons up a level until each color groups at least two (a `cache` and a `database` are both `datastore`; a caller and a gateway are both `client`; two microservices are both `service`). One color per item is the same visual noise as random colors — the grouping only earns its place when a color means "these belong together." Leave items uncolored only when they genuinely form a single undifferentiated kind, or the user asked for no color.
58
59
  <!-- CATEGORIZE end -->
59
60
  - **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
60
61
  - **Let the defaults show.** Don't add `no-*` opt-outs unless the user asked to hide or disable something — they strip helpful labels, values, and color.
@@ -62,58 +63,58 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
62
63
 
63
64
  ### Chart-type index (45) — pick the type, then fetch its section
64
65
 
65
- | id | when to use |
66
- | -- | ----------- |
67
- | `sequence` | message / interaction flows over time |
68
- | `flowchart` | decision trees and process flows |
69
- | `state` | state-machine / lifecycle transitions |
70
- | `class` | UML class hierarchies |
71
- | `er` | database schemas and relationships |
72
- | `c4` | system architecture (context / container / component / deployment) |
73
- | `infra` | infrastructure traffic flow with RPS computation |
74
- | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
75
- | `sitemap` | site / app navigation structure |
76
- | `mindmap` | radial hierarchy of ideas from a central topic |
77
- | `org` | reporting hierarchy |
78
- | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
79
- | `bracket` | single-elimination tournament bracket: winners auto-advance; seed the field for a day-0 skeleton or list results casually; two sides mirror to a championship |
80
- | `kanban` | task-board columns |
81
- | `gantt` | project scheduling with task dependencies and milestones |
82
- | `pert` | project network with three-point estimates and critical path |
83
- | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
84
- | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
85
- | `timeline` | events, eras, and date ranges |
86
- | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
87
- | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
88
- | `journey-map` | UX flow with emotion scores, phases, annotations |
89
- | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
90
- | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
91
- | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
92
- | `quadrant` | 2×2 positioning matrix |
93
- | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
94
- | `ring` | concentric rings of nested categories |
95
- | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
96
- | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
97
- | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
98
- | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
99
- | `countdown` | live "N days until X" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type |
100
- | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
101
- | `map` | geographic concept map: regions, points, routes |
102
- | `wireframe` | low-fidelity UI layout with panels and controls |
103
- | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
104
- | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
105
- | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
106
- | `radar` | multi-dimensional metrics |
107
- | `polar-area` | radial bar chart |
108
- | `scatter` | 2D points or bubble chart |
109
- | `heatmap` | matrix intensity |
110
- | `funnel` | conversion pipeline |
111
- | `sankey` | flow / allocation |
112
- | `arc` | network relationships (linear, or circular via `layout chord`) |
113
- | `slope` | change between two periods |
114
- | `venn` | set overlaps |
115
- | `wordcloud` | term-frequency |
116
- | `function` | mathematical expressions (colon required: `f(x): x^2`) |
66
+ | id | when to use |
67
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
68
+ | `sequence` | message / interaction flows over time |
69
+ | `flowchart` | decision trees and process flows |
70
+ | `state` | state-machine / lifecycle transitions |
71
+ | `class` | UML class hierarchies |
72
+ | `er` | database schemas and relationships |
73
+ | `c4` | system architecture (context / container / component / deployment) |
74
+ | `infra` | infrastructure traffic flow with RPS computation |
75
+ | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
76
+ | `sitemap` | site / app navigation structure |
77
+ | `mindmap` | radial hierarchy of ideas from a central topic |
78
+ | `org` | reporting hierarchy |
79
+ | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
80
+ | `bracket` | single-elimination tournament bracket: winners auto-advance; seed the field for a day-0 skeleton or list results casually; two sides mirror to a championship |
81
+ | `kanban` | task-board columns |
82
+ | `gantt` | project scheduling with task dependencies and milestones |
83
+ | `pert` | project network with three-point estimates and critical path |
84
+ | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
85
+ | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
86
+ | `timeline` | events, eras, and date ranges |
87
+ | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
88
+ | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
89
+ | `journey-map` | UX flow with emotion scores, phases, annotations |
90
+ | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
91
+ | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
92
+ | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
93
+ | `quadrant` | 2×2 positioning matrix |
94
+ | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
95
+ | `ring` | concentric rings of nested categories |
96
+ | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
97
+ | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
98
+ | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
99
+ | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
100
+ | `countdown` | live "N days until X" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type |
101
+ | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
102
+ | `map` | geographic concept map: regions, points, routes |
103
+ | `wireframe` | low-fidelity UI layout with panels and controls |
104
+ | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
105
+ | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
106
+ | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
107
+ | `radar` | multi-dimensional metrics |
108
+ | `polar-area` | radial bar chart |
109
+ | `scatter` | 2D points or bubble chart |
110
+ | `heatmap` | matrix intensity |
111
+ | `funnel` | conversion pipeline |
112
+ | `sankey` | flow / allocation |
113
+ | `arc` | network relationships (linear, or circular via `layout chord`) |
114
+ | `slope` | change between two periods |
115
+ | `venn` | set overlaps |
116
+ | `wordcloud` | term-frequency |
117
+ | `function` | mathematical expressions (colon required: `f(x): x^2`) |
117
118
 
118
119
  **Need more than the index gives you?** Fetch the per-type section: MCP `get_language_reference(type)` / `get_examples(type)`, or read that type's section below. The `suggest_chart_type` tool returns the chosen type's section automatically.
119
120
 
@@ -127,7 +128,6 @@ _The most common types, inline so you can generate them without a fetch. For the
127
128
 
128
129
  ```dgmo
129
130
  journey-map A Cabin Boy's First Voyage
130
- solid-fill
131
131
 
132
132
  persona Squidlips Sam color: blue
133
133
  Greenhorn cabin boy, first time at sea
@@ -157,7 +157,6 @@ persona Squidlips Sam color: blue
157
157
 
158
158
  ```dgmo
159
159
  c4 Pirate Treasure Map System
160
- solid-fill
161
160
 
162
161
  tag Scope as sc
163
162
  Crew blue
@@ -233,8 +232,6 @@ ports
233
232
  ```dgmo
234
233
  class Ship Class Hierarchy
235
234
 
236
- solid-fill
237
-
238
235
  interface Vessel
239
236
  + sail(): void
240
237
  + anchor(): void
@@ -305,18 +302,25 @@ else
305
302
 
306
303
  ```dgmo
307
304
  state Ship Battle Lifecycle
308
- solid-fill
309
305
 
310
306
  [*] -> Sailing
311
307
 
312
308
  Sailing
313
309
  -enemy spotted-> BattleStations
314
310
 
315
- BattleStations
316
- -in range-> Engaging
317
- -enemy retreats-> Sailing
311
+ [Losses] gray
312
+ Captured -> [*]
313
+ Sinking -> [*]
314
+
315
+ [Aftermath] teal
316
+ Victorious
317
+ -loot taken-> Sailing
318
+
319
+ Retreating
320
+ -escaped-> Sailing
321
+ -caught-> Captured
318
322
 
319
- [Combat]
323
+ [Combat] red
320
324
  Engaging
321
325
  -alongside-> Boarding
322
326
  -hull breach-> Sinking
@@ -326,16 +330,9 @@ BattleStations
326
330
  -crew wins-> Victorious
327
331
  -crew loses-> Captured
328
332
 
329
- [Aftermath]
330
- Victorious
331
- -loot taken-> Sailing
332
-
333
- Retreating
334
- -escaped-> Sailing
335
- -caught-> Captured
336
-
337
- Captured -> [*]
338
- Sinking -> [*]
333
+ BattleStations
334
+ -in range-> Engaging
335
+ -enemy retreats-> Sailing
339
336
  ```
340
337
  #### infra
341
338
 
@@ -398,7 +395,7 @@ RumRunner f: Bonny
398
395
  ```dgmo
399
396
  gantt Blackbeard's Blockade — 1718
400
397
 
401
- start 1718-05-01
398
+ start-date 1718-05-01
402
399
  today-marker 1718-05-15
403
400
 
404
401
  tag Role as r
@@ -13,7 +13,7 @@ _Generated from `language-reference.md` — the anti-patterns and 50-type index
13
13
  LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the most common parse errors:
14
14
 
15
15
  - **No colons in declarations, directives, tags, or data rows.** `bar Revenue` (not `bar: Revenue`); `series Cloud blue, Legacy red` (not `series: ...`); `North 850` (not `North: 850`); `tag Team as t` (not `tag: Team`). A colon binds a value only in metadata (`key: value`), class/function type separators, and a few scoped spots — see §26.
16
- - **No Mermaid arrow-labels.** Put the label *between* the dashes: `A -Login-> B`, never `A -> B: Login`. Sequence: `->` sync, `~>` async; left-to-right only — no `<-` / `<~`.
16
+ - **No Mermaid arrow-labels.** Put the label _between_ the dashes: `A -Login-> B`, never `A -> B: Login`. Sequence: `->` sync, `~>` async; left-to-right only — no `<-` / `<~`.
17
17
  - **No indented edges on a map.** Every map connection is ONE full line — `JFK ~daily~> LAX`; for a hub repeat the origin per spoke (`JFK ~daily~> LHR`, …). A bare source with indented `-> dest` legs errors as `Malformed edge`; indented legs are valid ONLY inside a `route` block (an ordered stop→stop voyage). Edge endpoints auto-create their POIs — don't add separate `poi` lines for places already in an edge.
18
18
  - **No `|` metadata delimiter** (removed 0.18.0 → `E_PIPE_OPERATOR_REMOVED`). Use same-line `Name key: value, k2: v2` or indented `key: value`. (`|` survives only in wireframe `{A | B}` dropdowns, in-arrow label text, and quoted names.)
19
19
  - **No removed participant keywords.** Do not write `X is a service` / `external` / `frontend` / `networking` / `gateway` — these were removed and error. A bare name renders the default shape; for a typed glyph use `is a person` / `is a database` / `is a queue`.
@@ -25,7 +25,7 @@ LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the
25
25
  - **Declare before reference.** An edge target must be declared on a prior line; put metadata and edges on/under one declaration to avoid `Duplicate node` warnings.
26
26
  - **No reference scaffolding in output.** Emit only DGMO source. This doc is organized with HTML-comment anchors (the `TYPE`, `TIPS`, and `AI-CORE` markers, each wrapped in comment delimiters); never copy any such `<!-- … -->` comment into a diagram. They mark sections of the docs, not DGMO syntax; the parser flags a stray HTML comment as an `Unexpected line` warning. (DGMO's only comment form is `//`.)
27
27
 
28
- Two traps in the *other* direction (DGMO wants a colon / a space where you might not expect):
28
+ Two traps in the _other_ direction (DGMO wants a colon / a space where you might not expect):
29
29
 
30
30
  - **Infra node properties REQUIRE the colon** — `cache-hit: 80%`, `instances: 3`, `max-rps: 8000`, `latency-ms: 45`. But top-level infra **options** are space-separated (`default-rps 100`). Don't conflate them.
31
31
  - **ER columns are space-separated** — `id int pk`, `email varchar` (the one SQL-DDL carve-out; everything else indented-typed uses a colon).
@@ -51,10 +51,11 @@ Billing t: Product
51
51
  Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply these unless the prompt says otherwise:
52
52
 
53
53
  <!-- TITLE start -->
54
+
54
55
  - **Always title it.** Every diagram gets a short title on the type-declaration line (`flowchart Checkout Flow`, `sequence Checkout`, `boxes-and-lines Service Map`) so it is self-describing — never leave the bare type keyword alone. Infer a fitting title from the request when the user gives none.
55
- <!-- TITLE end -->
56
- <!-- CATEGORIZE start -->
57
- - **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have *fewer* values than it has members: each color should bucket two or more items so the palette compresses the diagram into a few meaningful kinds (aim for ~2–4 categories, and keep distinct colors well under half the item count). If you find yourself giving nearly every item its own value, you've enumerated, not categorized — merge the singletons up a level until each color groups at least two (a `cache` and a `database` are both `datastore`; a caller and a gateway are both `client`; two microservices are both `service`). One color per item is the same visual noise as random colors — the grouping only earns its place when a color means "these belong together." Leave items uncolored only when they genuinely form a single undifferentiated kind, or the user asked for no color.
56
+ <!-- TITLE end -->
57
+ <!-- CATEGORIZE start -->
58
+ - **Categorize and color — by default, not only when obvious.** Before drawing, find the axis that sorts the items into kinds and color by it: layer (frontend / backend / data), role (client / service / datastore), trust zone (internal / external / third-party), status (done / active / blocked), owner/team, or read-path vs write-path. Almost every diagram has such an axis — actively look for one rather than leaving everything monochrome. Express it with a **tag group**, never ad-hoc per-node colors: declare `tag <Axis> as t` (the name is a single word — `tag TrustZone as tz` — or quote a multi-word name: `tag "Trust Zone" as tz`), indent the category values (a trailing color is optional — bare values auto-pick a palette color), set `active-tag <Axis>`, then assign each item `Node t: <Category>` (see the tag-group syntax in the per-type section below). Only the 11 named palette colors exist, and they re-resolve per palette/theme. Color the grouping so the categories — and the boundaries between them — read at a glance. **Buckets, not name tags — never 1:1.** A tag group must have _fewer_ values than it has members: each color should bucket two or more items so the palette compresses the diagram into a few meaningful kinds (aim for ~2–4 categories, and keep distinct colors well under half the item count). If you find yourself giving nearly every item its own value, you've enumerated, not categorized — merge the singletons up a level until each color groups at least two (a `cache` and a `database` are both `datastore`; a caller and a gateway are both `client`; two microservices are both `service`). One color per item is the same visual noise as random colors — the grouping only earns its place when a color means "these belong together." Leave items uncolored only when they genuinely form a single undifferentiated kind, or the user asked for no color.
58
59
  <!-- CATEGORIZE end -->
59
60
  - **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
60
61
  - **Let the defaults show.** Don't add `no-*` opt-outs unless the user asked to hide or disable something — they strip helpful labels, values, and color.
@@ -62,58 +63,58 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
62
63
 
63
64
  ### Chart-type index (45) — pick the type, then fetch its section
64
65
 
65
- | id | when to use |
66
- | -- | ----------- |
67
- | `sequence` | message / interaction flows over time |
68
- | `flowchart` | decision trees and process flows |
69
- | `state` | state-machine / lifecycle transitions |
70
- | `class` | UML class hierarchies |
71
- | `er` | database schemas and relationships |
72
- | `c4` | system architecture (context / container / component / deployment) |
73
- | `infra` | infrastructure traffic flow with RPS computation |
74
- | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
75
- | `sitemap` | site / app navigation structure |
76
- | `mindmap` | radial hierarchy of ideas from a central topic |
77
- | `org` | reporting hierarchy |
78
- | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
79
- | `bracket` | single-elimination tournament bracket: winners auto-advance; seed the field for a day-0 skeleton or list results casually; two sides mirror to a championship |
80
- | `kanban` | task-board columns |
81
- | `gantt` | project scheduling with task dependencies and milestones |
82
- | `pert` | project network with three-point estimates and critical path |
83
- | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
84
- | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
85
- | `timeline` | events, eras, and date ranges |
86
- | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
87
- | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
88
- | `journey-map` | UX flow with emotion scores, phases, annotations |
89
- | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
90
- | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
91
- | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
92
- | `quadrant` | 2×2 positioning matrix |
93
- | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
94
- | `ring` | concentric rings of nested categories |
95
- | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
96
- | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
97
- | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
98
- | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
99
- | `countdown` | live "N days until X" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type |
100
- | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
101
- | `map` | geographic concept map: regions, points, routes |
102
- | `wireframe` | low-fidelity UI layout with panels and controls |
103
- | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
104
- | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
105
- | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
106
- | `radar` | multi-dimensional metrics |
107
- | `polar-area` | radial bar chart |
108
- | `scatter` | 2D points or bubble chart |
109
- | `heatmap` | matrix intensity |
110
- | `funnel` | conversion pipeline |
111
- | `sankey` | flow / allocation |
112
- | `arc` | network relationships (linear, or circular via `layout chord`) |
113
- | `slope` | change between two periods |
114
- | `venn` | set overlaps |
115
- | `wordcloud` | term-frequency |
116
- | `function` | mathematical expressions (colon required: `f(x): x^2`) |
66
+ | id | when to use |
67
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
68
+ | `sequence` | message / interaction flows over time |
69
+ | `flowchart` | decision trees and process flows |
70
+ | `state` | state-machine / lifecycle transitions |
71
+ | `class` | UML class hierarchies |
72
+ | `er` | database schemas and relationships |
73
+ | `c4` | system architecture (context / container / component / deployment) |
74
+ | `infra` | infrastructure traffic flow with RPS computation |
75
+ | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
76
+ | `sitemap` | site / app navigation structure |
77
+ | `mindmap` | radial hierarchy of ideas from a central topic |
78
+ | `org` | reporting hierarchy |
79
+ | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
80
+ | `bracket` | single-elimination tournament bracket: winners auto-advance; seed the field for a day-0 skeleton or list results casually; two sides mirror to a championship |
81
+ | `kanban` | task-board columns |
82
+ | `gantt` | project scheduling with task dependencies and milestones |
83
+ | `pert` | project network with three-point estimates and critical path |
84
+ | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
85
+ | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
86
+ | `timeline` | events, eras, and date ranges |
87
+ | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
88
+ | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
89
+ | `journey-map` | UX flow with emotion scores, phases, annotations |
90
+ | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
91
+ | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
92
+ | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
93
+ | `quadrant` | 2×2 positioning matrix |
94
+ | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
95
+ | `ring` | concentric rings of nested categories |
96
+ | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
97
+ | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
98
+ | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
99
+ | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
100
+ | `countdown` | live "N days until X" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type |
101
+ | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
102
+ | `map` | geographic concept map: regions, points, routes |
103
+ | `wireframe` | low-fidelity UI layout with panels and controls |
104
+ | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
105
+ | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
106
+ | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
107
+ | `radar` | multi-dimensional metrics |
108
+ | `polar-area` | radial bar chart |
109
+ | `scatter` | 2D points or bubble chart |
110
+ | `heatmap` | matrix intensity |
111
+ | `funnel` | conversion pipeline |
112
+ | `sankey` | flow / allocation |
113
+ | `arc` | network relationships (linear, or circular via `layout chord`) |
114
+ | `slope` | change between two periods |
115
+ | `venn` | set overlaps |
116
+ | `wordcloud` | term-frequency |
117
+ | `function` | mathematical expressions (colon required: `f(x): x^2`) |
117
118
 
118
119
  **Need more than the index gives you?** Fetch the per-type section: MCP `get_language_reference(type)` / `get_examples(type)`, or read that type's section below. The `suggest_chart_type` tool returns the chosen type's section automatically.
119
120
 
@@ -127,7 +128,6 @@ _The most common types, inline so you can generate them without a fetch. For the
127
128
 
128
129
  ```dgmo
129
130
  journey-map A Cabin Boy's First Voyage
130
- solid-fill
131
131
 
132
132
  persona Squidlips Sam color: blue
133
133
  Greenhorn cabin boy, first time at sea
@@ -157,7 +157,6 @@ persona Squidlips Sam color: blue
157
157
 
158
158
  ```dgmo
159
159
  c4 Pirate Treasure Map System
160
- solid-fill
161
160
 
162
161
  tag Scope as sc
163
162
  Crew blue
@@ -233,8 +232,6 @@ ports
233
232
  ```dgmo
234
233
  class Ship Class Hierarchy
235
234
 
236
- solid-fill
237
-
238
235
  interface Vessel
239
236
  + sail(): void
240
237
  + anchor(): void
@@ -305,18 +302,25 @@ else
305
302
 
306
303
  ```dgmo
307
304
  state Ship Battle Lifecycle
308
- solid-fill
309
305
 
310
306
  [*] -> Sailing
311
307
 
312
308
  Sailing
313
309
  -enemy spotted-> BattleStations
314
310
 
315
- BattleStations
316
- -in range-> Engaging
317
- -enemy retreats-> Sailing
311
+ [Losses] gray
312
+ Captured -> [*]
313
+ Sinking -> [*]
314
+
315
+ [Aftermath] teal
316
+ Victorious
317
+ -loot taken-> Sailing
318
+
319
+ Retreating
320
+ -escaped-> Sailing
321
+ -caught-> Captured
318
322
 
319
- [Combat]
323
+ [Combat] red
320
324
  Engaging
321
325
  -alongside-> Boarding
322
326
  -hull breach-> Sinking
@@ -326,16 +330,9 @@ BattleStations
326
330
  -crew wins-> Victorious
327
331
  -crew loses-> Captured
328
332
 
329
- [Aftermath]
330
- Victorious
331
- -loot taken-> Sailing
332
-
333
- Retreating
334
- -escaped-> Sailing
335
- -caught-> Captured
336
-
337
- Captured -> [*]
338
- Sinking -> [*]
333
+ BattleStations
334
+ -in range-> Engaging
335
+ -enemy retreats-> Sailing
339
336
  ```
340
337
  #### infra
341
338
 
@@ -398,7 +395,7 @@ RumRunner f: Bonny
398
395
  ```dgmo
399
396
  gantt Blackbeard's Blockade — 1718
400
397
 
401
- start 1718-05-01
398
+ start-date 1718-05-01
402
399
  today-marker 1718-05-15
403
400
 
404
401
  tag Role as r