@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
@@ -0,0 +1,38 @@
1
+ import {
2
+ renderState,
3
+ renderStateForExport
4
+ } from "./chunk-AHXIMHDQ.js";
5
+ import "./chunk-PDKUANDZ.js";
6
+ import "./chunk-3B2GXZCX.js";
7
+ import "./chunk-LP7EC4MI.js";
8
+ import "./chunk-3IUHKMJI.js";
9
+ import "./chunk-6EK55ART.js";
10
+ import "./chunk-UU6LUYUH.js";
11
+ import "./chunk-5DH3KYFH.js";
12
+ import "./chunk-3HDBAXF5.js";
13
+ import "./chunk-BMR4CIEO.js";
14
+ import "./chunk-3CIOJ5YJ.js";
15
+ import "./chunk-YYVTBZZC.js";
16
+ import "./chunk-W5KMNC5U.js";
17
+ import "./chunk-774C2FF3.js";
18
+ import "./chunk-A4GOY3PE.js";
19
+ import "./chunk-6KFWC4CO.js";
20
+ import "./chunk-AN2DQB3G.js";
21
+ import "./chunk-JYDMBWRP.js";
22
+ import "./chunk-4RGZFA7H.js";
23
+ import "./chunk-4ASYQ347.js";
24
+ import "./chunk-CMVZWP32.js";
25
+ import "./chunk-NXMESY4J.js";
26
+ import "./chunk-ZXUAPTCK.js";
27
+ import "./chunk-QZAW5SFH.js";
28
+ import "./chunk-WF64MW5G.js";
29
+ import "./chunk-NOTA6TEI.js";
30
+ import "./chunk-YJVA3QUU.js";
31
+ import "./chunk-ZKPPI6BF.js";
32
+ import "./chunk-4W2PE66Q.js";
33
+ import "./chunk-5WRI5ZAA.js";
34
+ export {
35
+ renderState,
36
+ renderStateForExport
37
+ };
38
+ //# sourceMappingURL=state-renderer-TFEUOP4H.js.map
@@ -1,184 +1,4 @@
1
- type DgmoSeverity = 'error' | 'warning';
2
- interface DgmoError {
3
- line: number;
4
- column?: number;
5
- message: string;
6
- severity: DgmoSeverity;
7
- /**
8
- * Optional stable diagnostic code (e.g. 'E_ARROW_SUBSTRING_IN_LABEL').
9
- * Additive; pre-existing diagnostics omit this field and existing
10
- * substring-on-`.message` assertions keep working unchanged.
11
- */
12
- code?: string;
13
- }
14
- declare function makeDgmoError(line: number, message: string, severity?: DgmoSeverity, code?: string): DgmoError;
15
- /** Runtime params passed to `emit()` and forwarded to a message builder. */
16
- type DiagnosticParams = Record<string, unknown>;
17
- /**
18
- * Parameter type for a `DiagnosticSpec.message` builder body. Typed loosely
19
- * (`any`) on purpose: builders are hand-authored interpolation bags keyed by
20
- * ad-hoc names, and dgmo's tsconfig enables `noPropertyAccessFromIndexSignature`
21
- * (which forbids `p.name` dot-access on a `Record<string, unknown>`). Using
22
- * `any` here keeps builder bodies readable (`p.name`) instead of forcing
23
- * `p['name']` bracket access at every interpolation site.
24
- */
25
- type DiagnosticMessageParams = any;
26
- interface DiagnosticSpec {
27
- /** Stable diagnostic code, e.g. `'E_MAP_UNKNOWN_PLACE'`. */
28
- code: string;
29
- /** Severity — must agree with the `E_`/`W_`/`I_` code prefix. */
30
- severity: DgmoSeverity;
31
- /** Owning chart type (`'map'`, `'swimlane'`, …) or `null` for universal/global codes. */
32
- chartType: string | null;
33
- /** Short human label for the catalog UI. */
34
- title: string;
35
- /**
36
- * Canonical message wording. A plain string for static messages, or a
37
- * builder `(params) => string` when the message interpolates runtime
38
- * values. The builder must tolerate being called with `{}` so the
39
- * catalog can show a representative message without live params.
40
- */
41
- message: string | ((params: DiagnosticMessageParams) => string);
42
- /** Optional fix guidance shown alongside the message. */
43
- hint?: string;
44
- /** Minimal `.dgmo` source that triggers this diagnostic (for docs/console). */
45
- example?: string;
46
- }
47
- /** Optional extras when emitting (currently just an explicit column). */
48
- interface EmitOptions {
49
- column?: number;
50
- }
51
- /**
52
- * Emit a diagnostic from its `DiagnosticSpec`. The code, severity, and
53
- * canonical wording all come from the spec — call sites supply only the
54
- * line and the interpolation params, so the code/severity can never drift
55
- * out of sync with the declared spec. Replaces the per-parser
56
- * `push`/`err`/`fail` wrappers that each re-declared this shape.
57
- */
58
- declare function emit(spec: DiagnosticSpec, line: number, params?: DiagnosticParams, opts?: EmitOptions): DgmoError;
59
- declare function formatDgmoError(err: DgmoError): string;
60
-
61
- /**
62
- * Color definitions for a single mode (light or dark).
63
- * 10 semantic UI colors + 9 named accent colors = 19 total.
64
- *
65
- * `readonly` on every field (and the nested `colors` map) by design —
66
- * palettes flow from the registry into every renderer; nothing in the
67
- * pipeline should ever mutate a palette in place.
68
- */
69
- interface PaletteColors {
70
- /** Main background (#eceff4 light / #2e3440 dark for Nord) */
71
- readonly bg: string;
72
- /** Cards, panels (#e5e9f0 / #3b4252) */
73
- readonly surface: string;
74
- /** Popovers, dropdowns (#e5e9f0 / #434c5e) */
75
- readonly overlay: string;
76
- /** Borders, dividers, muted (#d8dee9 / #4c566a) */
77
- readonly border: string;
78
- /** Primary text (#2e3440 / #eceff4) */
79
- readonly text: string;
80
- /** Secondary/diminished text (#4c566a / #d8dee9) */
81
- readonly textMuted: string;
82
- /**
83
- * Light-mode arg for `contrastText()` when text is rendered on a
84
- * tinted shape fill (e.g. `shapeFill()` output). Must guarantee
85
- * ≥ 4.5:1 WCAG AA against any `shapeFill()` the palette can produce.
86
- * Distinct from `colors.white` because palette-aesthetic anchors don't
87
- * always meet contrast requirements (TD-5).
88
- */
89
- readonly textOnFillLight: string;
90
- /** Dark-mode counterpart to `textOnFillLight`. */
91
- readonly textOnFillDark: string;
92
- /** Primary accent — buttons, links */
93
- readonly primary: string;
94
- /** Secondary accent */
95
- readonly secondary: string;
96
- /** Tertiary accent */
97
- readonly accent: string;
98
- /** Error/danger */
99
- readonly destructive: string;
100
- /**
101
- * Used for: inline annotations (red), pie charts, cScale,
102
- * series rotation, journey actors, Gantt tasks.
103
- */
104
- readonly colors: {
105
- readonly red: string;
106
- readonly orange: string;
107
- readonly yellow: string;
108
- readonly green: string;
109
- readonly blue: string;
110
- readonly purple: string;
111
- readonly teal: string;
112
- readonly cyan: string;
113
- readonly gray: string;
114
- readonly black: string;
115
- readonly white: string;
116
- };
117
- }
118
- /**
119
- * Complete palette definition. One object per color scheme.
120
- * This is what palette authors create — the single artifact for NFR1.
121
- *
122
- * Palettes are immutable from the consumer's perspective; the registry
123
- * hands out the same frozen-shape object on every `getPalette(id)`.
124
- */
125
- interface PaletteConfig {
126
- /** Registry key: 'nord', 'slate', 'catppuccin' */
127
- readonly id: string;
128
- /** Display name: 'Nord', 'Slate', 'Catppuccin' */
129
- readonly name: string;
130
- /** Light mode color definitions */
131
- readonly light: PaletteColors;
132
- /** Dark mode color definitions */
133
- readonly dark: PaletteColors;
134
- }
135
-
136
- /** A single entry inside a tag group: `Value color` */
137
- interface TagEntry {
138
- readonly value: string;
139
- readonly color: string;
140
- /**
141
- * The color NAME the author wrote (one of the recognized palette names),
142
- * when the entry declared an explicit color. Absent for bare/auto-colored
143
- * entries. `color` above is always the RESOLVED hex (auto and explicit are
144
- * indistinguishable there); this preserves the authored-vs-auto distinction
145
- * so a GUI editor can round-trip an explicit color through a reparse.
146
- */
147
- readonly authoredColor?: string;
148
- readonly lineNumber: number;
149
- }
150
- /**
151
- * A tag group block: heading + entries.
152
- *
153
- * Parser internals build via `Writable<TagGroup>` from `utils/brand.ts`;
154
- * once returned to a chart-type parser, consumers see the readonly view.
155
- */
156
- interface TagGroup {
157
- readonly name: string;
158
- readonly alias?: string;
159
- readonly entries: readonly TagEntry[];
160
- /** Default value for nodes without explicit metadata. First entry unless another is marked `default`. */
161
- readonly defaultValue?: string;
162
- readonly lineNumber: number;
163
- }
164
- /**
165
- * DOM-safe key for a tag group — used wherever the group name becomes a
166
- * `data-tag-*` attribute suffix, an entity metadata key, or an `active-tag`
167
- * match target. For a single-identifier name (the only form the parser used to
168
- * accept) this is exactly `name.toLowerCase()`, so swapping it in for existing
169
- * diagrams is byte-identical. A quoted multi-word name (`tag "Trust Zone" as tz`)
170
- * slugs to a hyphenated identifier (`trust-zone`) so it never produces an
171
- * invalid DOM attribute name; the original `name` is kept for the legend label.
172
- */
173
- declare function tagAttrKey(name: string): string;
174
- /**
175
- * The categorical name cycle used to auto-assign colors to bare tag values,
176
- * in deterministic order. Aliased to the shared {@link CATEGORICAL_COLOR_ORDER}
177
- * (RGB-seeded, max-contrast, neutrals excluded) so tag swatches and data-chart
178
- * series colors share one canonical rotation. If a group has more colorless
179
- * entries than free categorical names, the cycle wraps.
180
- */
181
- declare const autoTagColorCycle: readonly string[];
1
+ import { T as TagGroup, D as DgmoError, P as PaletteConfig } from './registry-CaSw0PSH.js';
182
2
 
183
3
  /** A POI / route-stop position: gazetteer name (+ optional ISO scope) or coords. */
184
4
  type PoiPos = {
@@ -638,173 +458,6 @@ interface ResolvedMap {
638
458
  readonly error: string | null;
639
459
  }
640
460
 
641
- /**
642
- * Compact view state schema (ADR-6).
643
- * All fields optional. Only non-default values are encoded.
644
- * `tag: null` means "user chose none"; absent `tag` means "use DSL default" (ADR-5).
645
- */
646
- interface CompactViewState {
647
- tag?: string | null;
648
- cs?: number[];
649
- cg?: string[];
650
- swim?: string | null;
651
- cl?: string[];
652
- cc?: string[];
653
- rm?: string;
654
- htv?: Record<string, string[]>;
655
- ha?: string[];
656
- sem?: boolean;
657
- cm?: boolean;
658
- c4l?: string;
659
- c4s?: string;
660
- c4c?: string;
661
- rps?: number;
662
- spd?: number;
663
- io?: Record<string, number>;
664
- hd?: boolean;
665
- cbd?: boolean;
666
- rq?: string;
667
- an?: boolean;
668
- fl?: boolean;
669
- }
670
- interface DecodedDiagramUrl {
671
- dsl: string;
672
- viewState: CompactViewState;
673
- palette?: string;
674
- theme?: 'light' | 'dark';
675
- filename?: string;
676
- }
677
- interface EncodeDiagramUrlOptions {
678
- baseUrl?: string;
679
- viewState?: CompactViewState;
680
- palette?: string;
681
- theme?: 'light' | 'dark';
682
- filename?: string;
683
- }
684
- type EncodeDiagramUrlResult = {
685
- url: string;
686
- error?: undefined;
687
- } | {
688
- url?: undefined;
689
- error: 'too-large';
690
- compressedSize: number;
691
- limit: number;
692
- };
693
- /**
694
- * Encode a CompactViewState to a compressed string for URL embedding.
695
- * Returns empty string if state has no keys (ADR-4).
696
- */
697
- declare function encodeViewState(state: CompactViewState): string;
698
- /**
699
- * Decode a compressed view state string back to CompactViewState.
700
- * Returns empty object on failure (no crash).
701
- */
702
- declare function decodeViewState(encoded: string): CompactViewState;
703
- /**
704
- * Compress a DGMO DSL string into a shareable URL.
705
- * Returns `{ url }` on success, or `{ error: 'too-large', compressedSize, limit }` if the
706
- * compressed payload exceeds the 8 KB limit.
707
- */
708
- declare function encodeDiagramUrl(dsl: string, options?: EncodeDiagramUrlOptions): EncodeDiagramUrlResult;
709
- /**
710
- * Decode a DGMO DSL string and view state from a URL query string or hash.
711
- * Accepts any of:
712
- * - `?dgmo=<payload>&vs=<state>`
713
- * - `#dgmo=<payload>&vs=<state>` (backwards compat)
714
- * - `dgmo=<payload>`
715
- * - `<bare payload>`
716
- *
717
- * Returns `{ dsl, viewState }`. The DSL is empty string on invalid input.
718
- */
719
- declare function decodeDiagramUrl(hash: string): DecodedDiagramUrl;
720
-
721
- interface ChartTypeMeta {
722
- readonly id: string;
723
- readonly description: string;
724
- readonly fallback?: true;
725
- }
726
- declare const chartTypes: readonly ChartTypeMeta[];
727
-
728
- /** User-visible rendering category for dispatch and routing. */
729
- type RenderCategory = 'data-chart' | 'visualization' | 'diagram';
730
-
731
- /**
732
- * Extracts the chart type from raw file content.
733
- * First tries the first non-empty, non-comment line as a bare chart type name
734
- * (e.g., `gantt Product Launch`).
735
- * Falls back to inference when no explicit chart type is found.
736
- */
737
- declare function parseDgmoChartType(content: string): string | null;
738
-
739
- /**
740
- * Returns the render category for a given chart type, or `null` if unknown.
741
- * Use this instead of the internal framework map for dispatch in consumers.
742
- */
743
- declare function getRenderCategory(chartType: string): RenderCategory | null;
744
- /**
745
- * Returns true if the chart type is an extended chart type
746
- * handled by parseExtendedChart (scatter, sankey, function, heatmap, funnel).
747
- * Returns false for standard chart types and all other types.
748
- */
749
- declare function isExtendedChartType(chartType: string): boolean;
750
- /**
751
- * Returns all supported chart type identifiers in canonical (tier) order,
752
- * derived from `chartTypes`. Consumers that need alphabetical order should
753
- * call `.sort()` explicitly.
754
- */
755
- declare function getAllChartTypes(): string[];
756
- /**
757
- * Canonical descriptions for every supported chart type. Derived from
758
- * `chartTypes` so there is exactly one place to update when adding a new
759
- * type. Consumed by the CLI `dgmo types` command, the editor autocomplete
760
- * popup, and the MCP `list_chart_types` tool.
761
- */
762
- declare const CHART_TYPE_DESCRIPTIONS: Record<string, string>;
763
- type ParseResult = {
764
- diagnostics: readonly DgmoError[];
765
- };
766
- type ParseFn = (content: string) => ParseResult;
767
- /**
768
- * Maps every chart-type id to the parser that handles it, DERIVED from
769
- * `CHART_TYPE_REGISTRY` (src/chart-type-registry.ts). Adding a new chart type
770
- * means adding ONE descriptor there plus its `chartTypes` metadata entry; the
771
- * `chart-type-registry.test.ts` cross-check asserts the registry, `chartTypes`,
772
- * the render-category sites, and the export handlers all stay in sync.
773
- */
774
- declare const chartTypeParsers: ReadonlyArray<readonly [string, ParseFn]>;
775
- /** Ids in the same order as `chartTypeParsers`; used for cross-checks. */
776
- declare const knownChartTypeIds: readonly string[];
777
- /**
778
- * Parse DGMO content and return diagnostics without rendering.
779
- * Useful for the CLI and editor to surface all errors before attempting render.
780
- */
781
- declare function parseDgmo(content: string): {
782
- diagnostics: DgmoError[];
783
- chartType: string | null;
784
- };
785
-
786
- /** Validate that a hex string is well-formed (#RGB or #RRGGBB). */
787
- declare function isValidHex(value: string): boolean;
788
- /**
789
- * Register a palette. Called at module initialization.
790
- * Validates that all 19 color fields per mode are present and valid hex.
791
- * Throws on malformed palettes to catch errors at startup, not at render time.
792
- */
793
- declare function registerPalette(palette: PaletteConfig): void;
794
- /** Get palette by id. Silently returns the default palette if id is unrecognized. */
795
- declare function getPalette(id: string): PaletteConfig;
796
- /**
797
- * Resolve a palette by id, falling back to the default palette when the id is
798
- * unregistered. If a `warn` callback is supplied, it is invoked once with a
799
- * human-readable fallback message on a miss — the single place the "resolve,
800
- * fall back, warn" policy lives, so each host can surface it its own way
801
- * (console.warn, Obsidian Notice, MCP response). Silent when the id resolves or
802
- * when no callback is passed.
803
- */
804
- declare function resolvePaletteOrFallback(id: string, warn?: (message: string) => void): PaletteConfig;
805
- /** List all registered palettes alphabetically (for the selector UI). */
806
- declare function getAvailablePalettes(): PaletteConfig[];
807
-
808
461
  /**
809
462
  * All built-in palettes, keyed by camelCase id. Use directly with render():
810
463
  *
@@ -940,4 +593,4 @@ declare const themes: {
940
593
  readonly transparent: "transparent";
941
594
  };
942
595
 
943
- export { getRenderCategory as $, type AirportData as A, type BoundaryTopology as B, type CompactViewState as C, type DgmoError as D, type EncodeDiagramUrlOptions as E, type ResolvedPoi as F, type GeoExtent as G, type ResolvedRegion as H, type ResolvedRoute as I, type Theme as J, autoTagColorCycle as K, chartTypeParsers as L, type MapData as M, chartTypes as N, completeMapPlaces as O, type PaletteColors as P, completeMapRegions as Q, type ResolvedMap as R, decodeDiagramUrl as S, type TagGroup as T, decodeViewState as U, encodeDiagramUrl as V, encodeViewState as W, formatDgmoError as X, getAllChartTypes as Y, getAvailablePalettes as Z, getPalette as _, type PaletteConfig as a, isExtendedChartType as a0, isValidHex as a1, knownChartTypeIds as a2, makeDgmoError as a3, palettes as a4, parseDgmo as a5, parseDgmoChartType as a6, registerPalette as a7, searchMapLocations as a8, tagAttrKey as a9, themes as aa, type DiagnosticSpec as ab, type DiagnosticParams as ac, type EmitOptions as ad, emit as ae, resolvePaletteOrFallback as af, type TagEntry as b, type ParsedMap as c, type MapLayoutLegend as d, CHART_TYPE_DESCRIPTIONS as e, type ChartTypeMeta as f, type DecodedDiagramUrl as g, type DgmoSeverity as h, type EncodeDiagramUrlResult as i, type Gazetteer as j, type GazetteerEntry as k, type MapCompletionOptions as l, type MapDirectives as m, type MapEdge as n, type MapLocationMatch as o, type MapPlaceCompletion as p, type MapPoi as q, type MapRegion as r, type MapRegionCompletion as s, type MapRoute as t, type PoiPos as u, type ProjectionFamily as v, type RegionName as w, type RegionNames as x, type RenderCategory as y, type ResolvedEdge as z };
596
+ export { type AirportData as A, type BoundaryTopology as B, type Gazetteer as G, type MapCompletionOptions as M, type ParsedMap as P, type RegionName as R, type Theme as T, type GazetteerEntry as a, type MapData as b, type MapLocationMatch as c, type MapPlaceCompletion as d, type MapRegionCompletion as e, type RegionNames as f, completeMapPlaces as g, completeMapRegions as h, type ResolvedMap as i, type MapLayoutLegend as j, type GeoExtent as k, type MapDirectives as l, type MapEdge as m, type MapPoi as n, type MapRegion as o, palettes as p, type MapRoute as q, type PoiPos as r, searchMapLocations as s, themes as t, type ProjectionFamily as u, type ResolvedEdge as v, type ResolvedPoi as w, type ResolvedRegion as x, type ResolvedRoute as y };
@@ -68,7 +68,7 @@ _Generated from `language-reference.md` — the anti-patterns and 50-type index
68
68
  LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the most common parse errors:
69
69
 
70
70
  - **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.
71
- - **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 `<-` / `<~`.
71
+ - **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 `<-` / `<~`.
72
72
  - **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.
73
73
  - **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.)
74
74
  - **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`.
@@ -80,7 +80,7 @@ LLMs default to Mermaid / PlantUML habits; DGMO differs. These rules prevent the
80
80
  - **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.
81
81
  - **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 `//`.)
82
82
 
83
- Two traps in the *other* direction (DGMO wants a colon / a space where you might not expect):
83
+ Two traps in the _other_ direction (DGMO wants a colon / a space where you might not expect):
84
84
 
85
85
  - **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.
86
86
  - **ER columns are space-separated** — `id int pk`, `email varchar` (the one SQL-DDL carve-out; everything else indented-typed uses a colon).
@@ -106,10 +106,11 @@ Billing t: Product
106
106
  Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply these unless the prompt says otherwise:
107
107
 
108
108
  <!-- TITLE start -->
109
+
109
110
  - **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.
110
- <!-- TITLE end -->
111
- <!-- CATEGORIZE start -->
112
- - **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.
111
+ <!-- TITLE end -->
112
+ <!-- CATEGORIZE start -->
113
+ - **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.
113
114
  <!-- CATEGORIZE end -->
114
115
  - **Keep labels short.** A few words per node. Move detail into notes or metadata, never a full sentence inside a label.
115
116
  - **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.
@@ -117,58 +118,58 @@ Valid markup is the floor, not the goal. A good diagram reads at a glance. Apply
117
118
 
118
119
  ### Chart-type index (45) — pick the type, then fetch its section
119
120
 
120
- | id | when to use |
121
- | -- | ----------- |
122
- | `sequence` | message / interaction flows over time |
123
- | `flowchart` | decision trees and process flows |
124
- | `state` | state-machine / lifecycle transitions |
125
- | `class` | UML class hierarchies |
126
- | `er` | database schemas and relationships |
127
- | `c4` | system architecture (context / container / component / deployment) |
128
- | `infra` | infrastructure traffic flow with RPS computation |
129
- | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
130
- | `sitemap` | site / app navigation structure |
131
- | `mindmap` | radial hierarchy of ideas from a central topic |
132
- | `org` | reporting hierarchy |
133
- | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
134
- | `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 |
135
- | `kanban` | task-board columns |
136
- | `gantt` | project scheduling with task dependencies and milestones |
137
- | `pert` | project network with three-point estimates and critical path |
138
- | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
139
- | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
140
- | `timeline` | events, eras, and date ranges |
141
- | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
142
- | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
143
- | `journey-map` | UX flow with emotion scores, phases, annotations |
144
- | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
145
- | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
146
- | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
147
- | `quadrant` | 2×2 positioning matrix |
148
- | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
149
- | `ring` | concentric rings of nested categories |
150
- | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
151
- | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
152
- | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
153
- | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
154
- | `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 |
155
- | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
156
- | `map` | geographic concept map: regions, points, routes |
157
- | `wireframe` | low-fidelity UI layout with panels and controls |
158
- | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
159
- | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
160
- | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
161
- | `radar` | multi-dimensional metrics |
162
- | `polar-area` | radial bar chart |
163
- | `scatter` | 2D points or bubble chart |
164
- | `heatmap` | matrix intensity |
165
- | `funnel` | conversion pipeline |
166
- | `sankey` | flow / allocation |
167
- | `arc` | network relationships (linear, or circular via `layout chord`) |
168
- | `slope` | change between two periods |
169
- | `venn` | set overlaps |
170
- | `wordcloud` | term-frequency |
171
- | `function` | mathematical expressions (colon required: `f(x): x^2`) |
121
+ | id | when to use |
122
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
123
+ | `sequence` | message / interaction flows over time |
124
+ | `flowchart` | decision trees and process flows |
125
+ | `state` | state-machine / lifecycle transitions |
126
+ | `class` | UML class hierarchies |
127
+ | `er` | database schemas and relationships |
128
+ | `c4` | system architecture (context / container / component / deployment) |
129
+ | `infra` | infrastructure traffic flow with RPS computation |
130
+ | `boxes-and-lines` | general-purpose node-edge diagrams with groups and tags |
131
+ | `sitemap` | site / app navigation structure |
132
+ | `mindmap` | radial hierarchy of ideas from a central topic |
133
+ | `org` | reporting hierarchy |
134
+ | `family` | family tree / genealogy: unions (couples), children, remarriage, adoption, GEDCOM-style metadata |
135
+ | `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 |
136
+ | `kanban` | task-board columns |
137
+ | `gantt` | project scheduling with task dependencies and milestones |
138
+ | `pert` | project network with three-point estimates and critical path |
139
+ | `swimlane` | cross-functional process flow with lanes, phases and gateways (BPMN-style) |
140
+ | `version-control` | git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style) |
141
+ | `timeline` | events, eras, and date ranges |
142
+ | `event-line` | annotated narrative timeline — events on a line with descriptions, optionally not to scale (NOT the date-scaled `timeline`) |
143
+ | `body` | human anatomy figure annotated by muscle name — for medical, exercise, and educational diagrams |
144
+ | `journey-map` | UX flow with emotion scores, phases, annotations |
145
+ | `cycle` | cyclical process (PDCA, OODA, DevOps loops) |
146
+ | `raci` | tasks × roles responsibility matrix; variant (RACI / RASCI / DACI) is inferred from the markers used |
147
+ | `tech-radar` | technology adoption quadrants (adopt / trial / assess / hold) |
148
+ | `quadrant` | 2×2 positioning matrix |
149
+ | `pyramid` | stacked hierarchy of layers (Maslow, DIKW) |
150
+ | `ring` | concentric rings of nested categories |
151
+ | `treemap` | nested rectangles sized by value (budgets, disk usage, portfolios) |
152
+ | `block` | author-controlled grid of nested, collapsible blocks (system / architecture layouts) |
153
+ | `sketch` | GUI-first free-placement canvas: uniform shapes on a snap grid, arrows, tags (markup is app-generated) |
154
+ | `goal` | single progress-toward-a-target value (`now` vs `target`) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas |
155
+ | `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 |
156
+ | `clock` | live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line |
157
+ | `map` | geographic concept map: regions, points, routes |
158
+ | `wireframe` | low-fidelity UI layout with panels and controls |
159
+ | `bar` | categorical comparisons (multi-series via `stack` / `group`) |
160
+ | `line` | trends over time (multiple series via a `series` block; filled via `fill`; dual y-axes via `y-label` / `y-right-label`) |
161
+ | `pie` | part-to-whole proportions (ring/doughnut via `hole`) |
162
+ | `radar` | multi-dimensional metrics |
163
+ | `polar-area` | radial bar chart |
164
+ | `scatter` | 2D points or bubble chart |
165
+ | `heatmap` | matrix intensity |
166
+ | `funnel` | conversion pipeline |
167
+ | `sankey` | flow / allocation |
168
+ | `arc` | network relationships (linear, or circular via `layout chord`) |
169
+ | `slope` | change between two periods |
170
+ | `venn` | set overlaps |
171
+ | `wordcloud` | term-frequency |
172
+ | `function` | mathematical expressions (colon required: `f(x): x^2`) |
172
173
 
173
174
  **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.
174
175
 
@@ -182,7 +183,6 @@ _The most common types, inline so you can generate them without a fetch. For the
182
183
 
183
184
  ```dgmo
184
185
  journey-map A Cabin Boy's First Voyage
185
- solid-fill
186
186
 
187
187
  persona Squidlips Sam color: blue
188
188
  Greenhorn cabin boy, first time at sea
@@ -212,7 +212,6 @@ persona Squidlips Sam color: blue
212
212
 
213
213
  ```dgmo
214
214
  c4 Pirate Treasure Map System
215
- solid-fill
216
215
 
217
216
  tag Scope as sc
218
217
  Crew blue
@@ -288,8 +287,6 @@ ports
288
287
  ```dgmo
289
288
  class Ship Class Hierarchy
290
289
 
291
- solid-fill
292
-
293
290
  interface Vessel
294
291
  + sail(): void
295
292
  + anchor(): void
@@ -360,18 +357,25 @@ else
360
357
 
361
358
  ```dgmo
362
359
  state Ship Battle Lifecycle
363
- solid-fill
364
360
 
365
361
  [*] -> Sailing
366
362
 
367
363
  Sailing
368
364
  -enemy spotted-> BattleStations
369
365
 
370
- BattleStations
371
- -in range-> Engaging
372
- -enemy retreats-> Sailing
366
+ [Losses] gray
367
+ Captured -> [*]
368
+ Sinking -> [*]
369
+
370
+ [Aftermath] teal
371
+ Victorious
372
+ -loot taken-> Sailing
373
+
374
+ Retreating
375
+ -escaped-> Sailing
376
+ -caught-> Captured
373
377
 
374
- [Combat]
378
+ [Combat] red
375
379
  Engaging
376
380
  -alongside-> Boarding
377
381
  -hull breach-> Sinking
@@ -381,16 +385,9 @@ BattleStations
381
385
  -crew wins-> Victorious
382
386
  -crew loses-> Captured
383
387
 
384
- [Aftermath]
385
- Victorious
386
- -loot taken-> Sailing
387
-
388
- Retreating
389
- -escaped-> Sailing
390
- -caught-> Captured
391
-
392
- Captured -> [*]
393
- Sinking -> [*]
388
+ BattleStations
389
+ -in range-> Engaging
390
+ -enemy retreats-> Sailing
394
391
  ```
395
392
  #### infra
396
393
 
@@ -453,7 +450,7 @@ RumRunner f: Bonny
453
450
  ```dgmo
454
451
  gantt Blackbeard's Blockade — 1718
455
452
 
456
- start 1718-05-01
453
+ start-date 1718-05-01
457
454
  today-marker 1718-05-15
458
455
 
459
456
  tag Role as r