@diagrammo/dgmo 0.50.2 → 0.52.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 (257) hide show
  1. package/.cursorrules +15 -19
  2. package/.github/copilot-instructions.md +15 -19
  3. package/.windsurfrules +15 -19
  4. package/SKILL.md +15 -19
  5. package/dist/advanced.d.ts +155 -65
  6. package/dist/advanced.js +231 -189
  7. package/dist/{analyzer-UYKBXAKR.js → analyzer-BJ54GIFB.js} +3 -3
  8. package/dist/auto.css +31 -8
  9. package/dist/auto.d.ts +6 -0
  10. package/dist/auto.js +171 -133
  11. package/dist/auto.mjs +3062 -1478
  12. package/dist/block.css +28 -8
  13. package/dist/block.js +138 -72
  14. package/dist/charts-d3-MXEP6BNP.js +26 -0
  15. package/dist/{chunk-3YPY3OXD.js → chunk-3HF5YEFJ.js} +17 -7
  16. package/dist/{chunk-4MJ7M6YL.js → chunk-3HGU63UY.js} +14 -13
  17. package/dist/chunk-3LK5DNED.js +35 -0
  18. package/dist/{chunk-3Y2DRD7S.js → chunk-3QD7VP3U.js} +9 -4
  19. package/dist/{chunk-6BFZKBGD.js → chunk-3YRPZ7ZZ.js} +2 -2
  20. package/dist/{chunk-WW32K72E.js → chunk-44VCIPHF.js} +25 -21
  21. package/dist/{chunk-TN35C5KM.js → chunk-4AQRFDXL.js} +2 -2
  22. package/dist/{chunk-HHXOONLX.js → chunk-4B5YISOR.js} +38 -1
  23. package/dist/{chunk-PGEGPSCZ.js → chunk-4IHAV6O7.js} +2 -2
  24. package/dist/{chunk-7L3R6I3U.js → chunk-4UNQ6X24.js} +10 -7
  25. package/dist/{chunk-O7NUCTFU.js → chunk-4YFKQ5WT.js} +7 -4
  26. package/dist/{chunk-5WFIYXQ6.js → chunk-5223KXFD.js} +122 -242
  27. package/dist/{chunk-PFHVU7UA.js → chunk-5BHJZH62.js} +3 -3
  28. package/dist/{chunk-QYTPPDAO.js → chunk-5HILBT7X.js} +2 -2
  29. package/dist/{chunk-GKC3HILQ.js → chunk-5NGAO4QK.js} +27 -4
  30. package/dist/{chunk-IAEC4KLA.js → chunk-5QKQSSPO.js} +2 -2
  31. package/dist/{chunk-DSWVNQVS.js → chunk-5RP7JRVP.js} +4 -59
  32. package/dist/{chunk-MCZ5LBZD.js → chunk-5SEVICBT.js} +8 -8
  33. package/dist/{chunk-GBE54KY6.js → chunk-6EJITS44.js} +8 -5
  34. package/dist/{chunk-BBGDM4NQ.js → chunk-6HQH6JZE.js} +35 -16
  35. package/dist/{chunk-66NVRO4K.js → chunk-6LBQ7ELG.js} +17 -18
  36. package/dist/{chunk-4XK3FLFB.js → chunk-6NYWYNBI.js} +3 -3
  37. package/dist/{chunk-VBYSIOOY.js → chunk-75G3Q4DK.js} +3 -3
  38. package/dist/{chunk-3NODSS6A.js → chunk-77FGAVZC.js} +13 -10
  39. package/dist/{chunk-6IAA2QQ2.js → chunk-7BIZCTAX.js} +2 -2
  40. package/dist/{chunk-TWQUYVP3.js → chunk-7DF4J4RL.js} +4 -4
  41. package/dist/{chunk-66RUL3XF.js → chunk-7KINELPI.js} +111 -49
  42. package/dist/{chunk-L3UHP6TD.js → chunk-7L4UJOY6.js} +1 -2
  43. package/dist/{chunk-QJP6PG7F.js → chunk-7QE3XMRK.js} +19 -18
  44. package/dist/{chunk-P7CE7LXL.js → chunk-AAXZDUOV.js} +18 -17
  45. package/dist/{chunk-SXRTRMEE.js → chunk-AL672HNE.js} +3 -3
  46. package/dist/chunk-APKUAJ2L.js +220 -0
  47. package/dist/{chunk-SCHXJTZL.js → chunk-ARGMQ3H4.js} +2 -2
  48. package/dist/{chunk-HEVYAHLW.js → chunk-AUIM2NVH.js} +5 -5
  49. package/dist/{chunk-3LH5CLP4.js → chunk-BKVOYV6I.js} +143 -6
  50. package/dist/{chunk-RZ6YKEUJ.js → chunk-BPIZNB5O.js} +17 -15
  51. package/dist/{chunk-QROYX7TT.js → chunk-BPY242XU.js} +6 -4
  52. package/dist/{chunk-OTAL43EH.js → chunk-BRENJ2BQ.js} +39 -3
  53. package/dist/{chunk-FA6K3FWM.js → chunk-CCNDLW7Z.js} +44 -22
  54. package/dist/{chunk-2KGXHFYK.js → chunk-CIRFIL4M.js} +49 -29
  55. package/dist/chunk-DAOFNU6J.js +283 -0
  56. package/dist/{chunk-QJJZSROI.js → chunk-DYWQFQJP.js} +48 -38
  57. package/dist/{chunk-XEGTMVYY.js → chunk-EMLPOL77.js} +15 -8
  58. package/dist/{chunk-NWED7CYO.js → chunk-FHGVORFO.js} +29 -25
  59. package/dist/{chunk-U2HGPLZS.js → chunk-FQ7HTV52.js} +17 -2
  60. package/dist/{chunk-H73FP42Q.js → chunk-FQMUHRVC.js} +70 -31
  61. package/dist/{chunk-BTUTZMPT.js → chunk-FT3ZYWET.js} +108 -42
  62. package/dist/{chunk-T5SHNNGP.js → chunk-FUPF2UYQ.js} +92 -34
  63. package/dist/{chunk-3XPUDB7B.js → chunk-FY5MSZAP.js} +279 -39
  64. package/dist/{chunk-M5RXSRO2.js → chunk-GCYTI3DE.js} +42 -33
  65. package/dist/{chunk-DN66GPY5.js → chunk-GJFAMOGK.js} +24 -3
  66. package/dist/{chunk-F2L5GCQ4.js → chunk-GU46PPT3.js} +3 -3
  67. package/dist/{chunk-6IUAK7RZ.js → chunk-H6PI3KJT.js} +2 -2
  68. package/dist/{chunk-ONA5KPV3.js → chunk-H7KENAZO.js} +18 -14
  69. package/dist/{chunk-SQLNBA64.js → chunk-HBPDFCQY.js} +3 -3
  70. package/dist/{chunk-SCQ5VPUF.js → chunk-HFMYN6N2.js} +2 -2
  71. package/dist/{chunk-FJUNPCYI.js → chunk-HHKO6SKY.js} +2 -2
  72. package/dist/{chunk-DZXYF2F5.js → chunk-HQQNCY7W.js} +21 -8
  73. package/dist/{chunk-7TV5Y53Y.js → chunk-HWX6ZHF3.js} +3 -3
  74. package/dist/{chunk-3P2DKJCG.js → chunk-ICPJPQ5C.js} +2 -2
  75. package/dist/{chunk-VUJGMJE6.js → chunk-IM6PDDCE.js} +4 -4
  76. package/dist/{chunk-JJUOHGX2.js → chunk-INE5YJBZ.js} +13 -8
  77. package/dist/{chunk-HTMN2Z6U.js → chunk-J6QROYDA.js} +58 -11
  78. package/dist/{chunk-NX4EQS3U.js → chunk-J76PIKAT.js} +2 -2
  79. package/dist/{chunk-SVTI362O.js → chunk-J7KJR3R6.js} +129 -109
  80. package/dist/{chunk-JEUJOX5X.js → chunk-J7TLCB2Q.js} +2 -2
  81. package/dist/{chunk-O7WP4ZD4.js → chunk-JED6ZDEE.js} +2 -2
  82. package/dist/{chunk-J6K7RP6P.js → chunk-JRCOYRRH.js} +19 -7
  83. package/dist/{chunk-7QKLIMRZ.js → chunk-K2I2XOZD.js} +46 -51
  84. package/dist/{chunk-EAMEADTV.js → chunk-K4EOKJA6.js} +96 -24
  85. package/dist/{chunk-5OWVC2A6.js → chunk-KGVZ5VGH.js} +13 -10
  86. package/dist/{chunk-DFTFPYUD.js → chunk-LBMS4AW6.js} +22 -21
  87. package/dist/{chunk-VVW3F3MD.js → chunk-LGT3PZCJ.js} +27 -19
  88. package/dist/{chunk-OMNGQPEZ.js → chunk-LTXOLDUZ.js} +9 -6
  89. package/dist/{chunk-Q4V4XQWV.js → chunk-MUE65OTD.js} +5 -4
  90. package/dist/{chunk-5GJYGP5Z.js → chunk-MUVJ57EP.js} +14 -18
  91. package/dist/{chunk-CLD2OKV7.js → chunk-MX2EY5Y7.js} +2 -2
  92. package/dist/{chunk-OTQKUHRS.js → chunk-NNS4E7CW.js} +6 -4
  93. package/dist/{chunk-NNAAJVBU.js → chunk-NR5HCAUD.js} +1 -1
  94. package/dist/{chunk-KFZYNWWO.js → chunk-ONU3U4GL.js} +4 -4
  95. package/dist/{chunk-YNRDWYZP.js → chunk-OQKP2X3D.js} +170 -51
  96. package/dist/{chunk-AHGF2YYA.js → chunk-OTOHI4JO.js} +2 -2
  97. package/dist/{chunk-EOFPYPAU.js → chunk-P3NRSSUU.js} +51 -11
  98. package/dist/{chunk-QXKWYZNR.js → chunk-PRI2OD4E.js} +10 -3
  99. package/dist/{chunk-U6EQI3U6.js → chunk-QBZYACOG.js} +3 -3
  100. package/dist/{chunk-C2CVAM3U.js → chunk-QGATPIPX.js} +170 -91
  101. package/dist/{chunk-PZFVK3IH.js → chunk-QHXCAEMX.js} +8 -5
  102. package/dist/{chunk-BH3UYK36.js → chunk-QJMKPUYK.js} +15 -5
  103. package/dist/{chunk-HQCHYB5F.js → chunk-QOOUC2J5.js} +2 -2
  104. package/dist/{chunk-Z6XJQ6KO.js → chunk-QVENJMNX.js} +2 -2
  105. package/dist/{chunk-IUMPEA64.js → chunk-QZX5S6R3.js} +4 -4
  106. package/dist/{chunk-I7F2A35O.js → chunk-R3YSD62R.js} +25 -47
  107. package/dist/{chunk-NU3XLTGP.js → chunk-REJAIQ5S.js} +4 -4
  108. package/dist/{chunk-2C56LEML.js → chunk-ROOE4R4Y.js} +8 -5
  109. package/dist/{chunk-XHVV4NVW.js → chunk-RT7ACF77.js} +12 -2
  110. package/dist/{chunk-I2WKW7C7.js → chunk-SMRFPVLQ.js} +3 -3
  111. package/dist/{chunk-VDOOQZUD.js → chunk-SWSIKFEB.js} +4 -4
  112. package/dist/{chunk-HLJVEAOF.js → chunk-T4A4TSTJ.js} +19 -45
  113. package/dist/{chunk-KHEYDLMT.js → chunk-TJVLKNGR.js} +20 -10
  114. package/dist/{chunk-GL5UZ6NY.js → chunk-TPFKKXCB.js} +3 -3
  115. package/dist/{chunk-X6EZPSW6.js → chunk-TTIM6YTT.js} +31 -21
  116. package/dist/{chunk-BCYVE3N5.js → chunk-TYS6CSS5.js} +2 -2
  117. package/dist/{chunk-T4VOVZT5.js → chunk-UBLHQTLV.js} +15 -14
  118. package/dist/{chunk-3LKM6FMW.js → chunk-UNURMIQO.js} +2 -2
  119. package/dist/{chunk-TSA237IM.js → chunk-VILVLS7P.js} +5 -3
  120. package/dist/{chunk-HGN652MU.js → chunk-VL2O2F3W.js} +2 -2
  121. package/dist/{chunk-3XGZF2QJ.js → chunk-VQOCMUWI.js} +39 -28
  122. package/dist/{chunk-P6T66CCZ.js → chunk-WBM7ZNDI.js} +3 -2
  123. package/dist/{chunk-CMCR5WBW.js → chunk-WBRZJOEC.js} +3 -3
  124. package/dist/{chunk-5LWQH6QV.js → chunk-WCT3NYCV.js} +1 -1
  125. package/dist/{chunk-C4GQDB5L.js → chunk-WRNFDFPU.js} +2 -2
  126. package/dist/{chunk-6HJBFVLO.js → chunk-XD6ZYURY.js} +9 -4
  127. package/dist/{chunk-C63UWAKM.js → chunk-Y2ZE3MSG.js} +2 -2
  128. package/dist/{chunk-7UEMZREK.js → chunk-YAA6IID3.js} +2 -2
  129. package/dist/{chunk-F7BFXWNQ.js → chunk-YIBAWQGJ.js} +7 -4
  130. package/dist/{chunk-PH5X4GIP.js → chunk-YTMTPUH4.js} +8 -5
  131. package/dist/{chunk-3UIKSPFB.js → chunk-Z5QVYKR7.js} +11 -3
  132. package/dist/{chunk-KQ57MHRO.js → chunk-ZEF5M5MB.js} +155 -87
  133. package/dist/{chunk-LE4MYMLI.js → chunk-ZJV7GYR4.js} +6 -6
  134. package/dist/{chunk-XJLKLU4D.js → chunk-ZNWAYU6N.js} +11 -7
  135. package/dist/cli.cjs +165 -148
  136. package/dist/clock.js +105 -25
  137. package/dist/countdown.js +208 -82
  138. package/dist/dgmo-router-X7ZGAPIE.js +86 -0
  139. package/dist/dimensions-45H6JQEY.js +22 -0
  140. package/dist/editor.js +17 -2
  141. package/dist/element.d.ts +6 -0
  142. package/dist/element.js +172 -134
  143. package/dist/element.mjs +3026 -1463
  144. package/dist/{flowchart-parser-OE4WHLTF.js → flowchart-parser-UKELHBSB.js} +4 -4
  145. package/dist/{flowchart-renderer-GPCSMTOR.js → flowchart-renderer-MNCDS7MV.js} +10 -10
  146. package/dist/highlight.d.ts +21 -1
  147. package/dist/highlight.js +106 -3
  148. package/dist/index.d.ts +2 -2
  149. package/dist/index.js +59 -57
  150. package/dist/{layout-FWODLIMP.js → layout-2L3WMRYU.js} +6 -6
  151. package/dist/{layout-7SKMFYHL.js → layout-46N4JJYK.js} +5 -5
  152. package/dist/{layout-7H4H46CS.js → layout-7QXCNOVS.js} +3 -3
  153. package/dist/layout-A4XWNVID.js +14 -0
  154. package/dist/{layout-46366KBT.js → layout-A5UHRWVH.js} +3 -3
  155. package/dist/{layout-NXG63LWH.js → layout-AM2JWW3X.js} +4 -4
  156. package/dist/{layout-DC4TVXER.js → layout-EE6GE46Y.js} +5 -5
  157. package/dist/{layout-FGQWRYYW.js → layout-F4WO357A.js} +3 -3
  158. package/dist/layout-G23F7LDH.js +9 -0
  159. package/dist/{layout-QNUQLEHU.js → layout-GM4UGR7B.js} +5 -4
  160. package/dist/{layout-7MZ5NF2N.js → layout-GQQJXNYH.js} +5 -5
  161. package/dist/{layout-5BG6DFCU.js → layout-IIE2S5FK.js} +6 -6
  162. package/dist/{layout-34CLNICW.js → layout-OAC4PEAC.js} +5 -5
  163. package/dist/layout-VMCRX66I.js +14 -0
  164. package/dist/{layout-PUQCB6AN.js → layout-ZDOSXL5G.js} +7 -7
  165. package/dist/{layout-search-QS44PI5R.js → layout-search-55FU6HD3.js} +6 -157
  166. package/dist/map-data/gazetteer.json +1 -1
  167. package/dist/{palettes-PRJ2RI6D.js → palettes-UDLZ2SA4.js} +2 -2
  168. package/dist/{parser-D5VILGN2.js → parser-2ECN6JA2.js} +4 -4
  169. package/dist/{parser-LWKKBNSA.js → parser-4WTIHM5J.js} +3 -3
  170. package/dist/{parser-DFFEDKHH.js → parser-5H2BTSJQ.js} +3 -3
  171. package/dist/{parser-4NO6VZ6S.js → parser-75KVXUNS.js} +4 -4
  172. package/dist/{parser-VKOJM7KS.js → parser-774AC53T.js} +4 -4
  173. package/dist/{parser-IBWNAPY4.js → parser-BE4YCSRU.js} +3 -3
  174. package/dist/{parser-4AI5ZN5F.js → parser-CNGUQUQI.js} +3 -3
  175. package/dist/{parser-36HVKU5U.js → parser-DEUUSQIN.js} +7 -6
  176. package/dist/{parser-H3XEPFPV.js → parser-DQAFLUJB.js} +4 -4
  177. package/dist/{parser-5OXGPNBF.js → parser-EYCKNKQA.js} +5 -5
  178. package/dist/{parser-TGQZJ5OT.js → parser-FXISIU6A.js} +4 -4
  179. package/dist/{parser-JJR52VAT.js → parser-GTB4XC7P.js} +5 -5
  180. package/dist/{parser-AGVYTQXV.js → parser-GVEPAUSD.js} +4 -4
  181. package/dist/{parser-WAV5JRPT.js → parser-HSQGTY4G.js} +4 -4
  182. package/dist/{parser-YS7TOS2K.js → parser-HVKRINUS.js} +3 -3
  183. package/dist/{parser-W4PQUGX3.js → parser-J5MIEYO4.js} +5 -5
  184. package/dist/parser-KMZIXLDZ.js +13 -0
  185. package/dist/{parser-HYRTF3DO.js → parser-LJHXWSXU.js} +3 -3
  186. package/dist/{parser-KCR2WS3V.js → parser-PT3W72G5.js} +4 -4
  187. package/dist/{parser-CVMEDULU.js → parser-SBJQDPHL.js} +4 -4
  188. package/dist/{parser-RZPVAQVX.js → parser-SUWWWCMX.js} +4 -3
  189. package/dist/{parser-TXND652E.js → parser-SXDRNZOA.js} +4 -4
  190. package/dist/parser-UMILOW3M.js +14 -0
  191. package/dist/{parser-RV4M6AS2.js → parser-UP3AZ367.js} +4 -4
  192. package/dist/{parser-IJBMRXMC.js → parser-WHPRV3X5.js} +5 -5
  193. package/dist/{parser-MPCE5JBG.js → parser-WX3UODSJ.js} +4 -4
  194. package/dist/{parser-K3XXLMUW.js → parser-XCIEN3KN.js} +4 -4
  195. package/dist/{parser-AXKBDGNO.js → parser-XIRTUMVN.js} +5 -5
  196. package/dist/{parser-B5FVS7O6.js → parser-YKCGIG45.js} +3 -3
  197. package/dist/{parser-PSA4UBSP.js → parser-YKYMQG3B.js} +4 -4
  198. package/dist/{parser-MTOMTWTD.js → parser-ZGM2OJ6Y.js} +6 -5
  199. package/dist/{parser-CSFUN3CT.js → parser-ZL5QUFVH.js} +5 -4
  200. package/dist/pert.d.ts +2 -2
  201. package/dist/{renderer-PPIHO5FI.js → renderer-3F7OS2AX.js} +14 -13
  202. package/dist/{renderer-SBS3YWU5.js → renderer-4QB4K7Q3.js} +9 -9
  203. package/dist/{renderer-GHPZMFU2.js → renderer-5DAKMIU2.js} +3 -3
  204. package/dist/{renderer-R2WNIC2C.js → renderer-5H4SY7YY.js} +9 -9
  205. package/dist/{renderer-DAXMXIKD.js → renderer-5PIQPFOX.js} +5 -4
  206. package/dist/{renderer-45PSOL3E.js → renderer-6MU37QF5.js} +6 -6
  207. package/dist/renderer-AQVMWJ4M.js +27 -0
  208. package/dist/{renderer-A5VE5BCI.js → renderer-BDDW6K7N.js} +9 -9
  209. package/dist/{renderer-AUW2BE6G.js → renderer-BNB3VIDY.js} +10 -10
  210. package/dist/{renderer-4ITCHBT7.js → renderer-CQY6ATOS.js} +6 -6
  211. package/dist/{renderer-6OKF44KS.js → renderer-CVW75CXL.js} +15 -15
  212. package/dist/{renderer-7RH2SI3B.js → renderer-DT4XRFEP.js} +5 -4
  213. package/dist/{renderer-B5TBNZJE.js → renderer-ERHBSTQT.js} +9 -9
  214. package/dist/{renderer-HVCU2C3Z.js → renderer-HSHHVYWF.js} +5 -4
  215. package/dist/renderer-IDPVUFNB.js +28 -0
  216. package/dist/renderer-ILX6BGKR.js +21 -0
  217. package/dist/renderer-JP663HKG.js +22 -0
  218. package/dist/{renderer-KS7YZJE2.js → renderer-KNFTTOBL.js} +11 -11
  219. package/dist/{renderer-2AZ5HJFK.js → renderer-MVUZBESR.js} +5 -5
  220. package/dist/{renderer-QAOBLRXV.js → renderer-N4EBR2FV.js} +11 -11
  221. package/dist/{renderer-P5ROYQGU.js → renderer-NHO46CT2.js} +4 -4
  222. package/dist/{renderer-NGXZTRK6.js → renderer-NO2QJ5LZ.js} +10 -10
  223. package/dist/{renderer-FPE3J5VZ.js → renderer-OGFV5RXX.js} +12 -12
  224. package/dist/{renderer-ODUUOPVT.js → renderer-PDLESJMS.js} +15 -15
  225. package/dist/renderer-T4MTNINC.js +24 -0
  226. package/dist/renderer-TOUGFGTM.js +24 -0
  227. package/dist/{renderer-BSR2O2H6.js → renderer-U3KPD43Y.js} +14 -13
  228. package/dist/{renderer-JCCHNECZ.js → renderer-X334IJU2.js} +10 -10
  229. package/dist/{renderer-5DSEWF74.js → renderer-Y5OAMOCR.js} +9 -9
  230. package/dist/{renderer-5KVCNMOJ.js → renderer-YONAKAJU.js} +5 -3
  231. package/dist/{renderer-7SD6MSBS.js → renderer-YWMI6Y2U.js} +12 -12
  232. package/dist/{renderer-2QPMJ2DA.js → renderer-ZWIH4WDW.js} +10 -10
  233. package/dist/renderer-radial-7CGZMVMS.js +21 -0
  234. package/dist/{resolver-FHBCO3PL.js → resolver-EMTGNR3D.js} +4 -3
  235. package/dist/{state-parser-3REXRK3R.js → state-parser-BATWAID2.js} +4 -4
  236. package/dist/{state-renderer-XYLNRWXR.js → state-renderer-3FKZJ3LP.js} +10 -10
  237. package/dist/{themes-PdPR1-hC.d.ts → themes-32xj5ZTW.d.ts} +27 -0
  238. package/docs/ai-integration.md +15 -19
  239. package/docs/language-reference.md +106 -21
  240. package/gallery/fixtures/clock.dgmo +3 -3
  241. package/gallery/fixtures/countdown-tz.dgmo +5 -0
  242. package/package.json +1 -1
  243. package/dist/charts-d3-MUW3LTML.js +0 -26
  244. package/dist/dgmo-router-CE2G67FV.js +0 -84
  245. package/dist/dimensions-OTBKC5M6.js +0 -22
  246. package/dist/layout-6RDJHS6E.js +0 -9
  247. package/dist/layout-J36454XU.js +0 -14
  248. package/dist/layout-LD6XTLD6.js +0 -14
  249. package/dist/parser-4WQQQXCG.js +0 -13
  250. package/dist/parser-O4HIUN6G.js +0 -13
  251. package/dist/renderer-CYB4LK3G.js +0 -22
  252. package/dist/renderer-FF24KZCI.js +0 -24
  253. package/dist/renderer-FYSVXL7M.js +0 -28
  254. package/dist/renderer-HDCCZURL.js +0 -24
  255. package/dist/renderer-PSMMZCKH.js +0 -21
  256. package/dist/renderer-UYMQQCJK.js +0 -24
  257. package/dist/renderer-radial-F7X5F2VU.js +0 -21
@@ -182,7 +182,6 @@ _The most common types, inline so you can generate them without a fetch. For the
182
182
 
183
183
  ```dgmo
184
184
  journey-map A Cabin Boy's First Voyage
185
- solid-fill
186
185
 
187
186
  persona Squidlips Sam color: blue
188
187
  Greenhorn cabin boy, first time at sea
@@ -212,7 +211,6 @@ persona Squidlips Sam color: blue
212
211
 
213
212
  ```dgmo
214
213
  c4 Pirate Treasure Map System
215
- solid-fill
216
214
 
217
215
  tag Scope as sc
218
216
  Crew blue
@@ -288,8 +286,6 @@ ports
288
286
  ```dgmo
289
287
  class Ship Class Hierarchy
290
288
 
291
- solid-fill
292
-
293
289
  interface Vessel
294
290
  + sail(): void
295
291
  + anchor(): void
@@ -360,18 +356,25 @@ else
360
356
 
361
357
  ```dgmo
362
358
  state Ship Battle Lifecycle
363
- solid-fill
364
359
 
365
360
  [*] -> Sailing
366
361
 
367
362
  Sailing
368
363
  -enemy spotted-> BattleStations
369
364
 
370
- BattleStations
371
- -in range-> Engaging
372
- -enemy retreats-> Sailing
365
+ [Losses] gray
366
+ Captured -> [*]
367
+ Sinking -> [*]
368
+
369
+ [Aftermath] teal
370
+ Victorious
371
+ -loot taken-> Sailing
372
+
373
+ Retreating
374
+ -escaped-> Sailing
375
+ -caught-> Captured
373
376
 
374
- [Combat]
377
+ [Combat] red
375
378
  Engaging
376
379
  -alongside-> Boarding
377
380
  -hull breach-> Sinking
@@ -381,16 +384,9 @@ BattleStations
381
384
  -crew wins-> Victorious
382
385
  -crew loses-> Captured
383
386
 
384
- [Aftermath]
385
- Victorious
386
- -loot taken-> Sailing
387
-
388
- Retreating
389
- -escaped-> Sailing
390
- -caught-> Captured
391
-
392
- Captured -> [*]
393
- Sinking -> [*]
387
+ BattleStations
388
+ -in range-> Engaging
389
+ -enemy retreats-> Sailing
394
390
  ```
395
391
  #### infra
396
392
 
@@ -10,6 +10,7 @@
10
10
  1. [Universal Constructs](#1-universal-constructs)
11
11
  2. [Universal Name Handling](#2-universal-name-handling)
12
12
  2A. [Universal Aliases (`as` keyword)](#2a-universal-aliases-as-keyword)
13
+ 2B. [Universal Date Handling](#2b-universal-date-handling)
13
14
  3. [Sequence Diagrams](#3-sequence-diagrams)
14
15
  4. [Infrastructure Diagrams](#4-infrastructure-diagrams)
15
16
  5. [Flowchart Diagrams](#5-flowchart-diagrams)
@@ -290,7 +291,9 @@ no-option-name // off
290
291
 
291
292
  | Directive | Effect |
292
293
  | ------------ | --------------------------------------------------------------------------------------- |
293
- | `solid-fill` | Render nodes/bars at full intent saturation instead of the canonical 25% tint |
294
+ | `fill-tint` | The default, spelled explicitly — shapes get the canonical 25% tint fill with a solid intent-color outline |
295
+ | `fill-solid` | Render nodes/bars at full intent saturation instead of the canonical 25% tint |
296
+ | `fill-outline` | No fill — shapes take the theme background fill; the intent color is carried entirely by the outline |
294
297
  | `no-title` | Hide the diagram banner title in the rendered output (does not mutate the parsed model) |
295
298
 
296
299
  Examples: `no-legend` (journey-map), `no-color` (flowchart, state), `no-title` (all chart types with a banner title).
@@ -509,6 +512,51 @@ rarely benefit. Aliases should aid comprehension, not obscure it.
509
512
 
510
513
  ---
511
514
 
515
+ ## 2B. Universal Date Handling
516
+
517
+ <a id="2b-universal-date-handling"></a>
518
+
519
+ Every date-bearing chart — **gantt (§13), pert (§13A), timeline (§15),
520
+ event-line (§28), countdown (§36)** — accepts one liberal date grammar. Write
521
+ dates however is natural; they store internally as ISO. (Family uses year-grain
522
+ only; clock has no date input.)
523
+
524
+ **Accepted forms** (all equivalent to `2026-07-04`):
525
+
526
+ - `2026-07-04` — ISO, canonical, always unambiguous
527
+ - `2026-07-04 14:30` — datetime (where the type supports a time)
528
+ - `2026-07` / `2026` — month- / year-grain
529
+ - `07-04` / `7/4` — numeric, **US month-first by default**
530
+ - `Jul 4` / `July 4` / `July 4, 2026` / `4 Jul 2026` — month-name
531
+ - `753 BCE` / `14 CE` — era-signed year (timeline)
532
+
533
+ **Rarely type a year.** A bare month-day resolves via: (1) an explicit year on
534
+ the date → (2) a `year 20XX` directive → (3) a sibling dated row (timeline/
535
+ event-line carry forward + roll across New Year; gantt/pert anchor to the first
536
+ full date, usually `start`) → (4) the current render year (only if the chart has
537
+ no full date at all; emits a soft `year 20XX` hint).
538
+
539
+ **Directives** (any date-bearing chart; position-independent):
540
+
541
+ | Directive | Effect |
542
+ | --------- | ------ |
543
+ | `year 2026` | base year for bare month-days |
544
+ | `date-order dmy` | numeric slash/dash dates read day-first (default `mdy`) |
545
+ | `no-current-year` | a fully-bare chart errors instead of assuming this year |
546
+
547
+ **TIPS (AI authoring):**
548
+
549
+ - Prefer `Jul 4` or `07-04` + one `year 2026` line over repeating the ISO year
550
+ on every row — shorter and reproducible.
551
+ - `7/4` is **Jul 4** (US month-first). For day-first documents add `date-order
552
+ dmy` once at the top; then `7/4` is **Apr 7**.
553
+ - Month-name forms (`Jul 4`) are never ambiguous and ignore `date-order` — use
554
+ them when a mixed audience will read the source.
555
+ - Existing ISO dates keep working unchanged; this is a superset, not a
556
+ migration.
557
+
558
+ ---
559
+
512
560
  ## 3. Sequence Diagrams
513
561
 
514
562
  <!-- TYPE:sequence -->
@@ -793,7 +841,7 @@ tag Team as t
793
841
  - `animate` / `no-animate`
794
842
  - `active-tag GroupName` / `active-tag none` — pre-select a tag filter on render
795
843
 
796
- The universal options `solid-fill` and `no-title` also apply.
844
+ The universal options `no-title` and the `fill-*` family also apply — but severity/SLO status tints are data and are never restyled by the fill family.
797
845
 
798
846
  ### 4.8 Edge Nodes
799
847
 
@@ -888,10 +936,10 @@ Bracket syntax only.
888
936
  - `direction-lr` (boolean; default is TB)
889
937
  - `orientation-vertical` (boolean; default is horizontal)
890
938
  - `no-color` (boolean; default off — when on, all nodes resolve to the muted neutral fill instead of their default intent color)
891
- - `solid-fill` (boolean; default off — render shapes with their full intent color instead of the canonical 25% tint)
939
+ - `fill-solid` / `fill-outline` (fill family; default is the 25% tint — `fill-solid` renders shapes at full intent color, `fill-outline` drops the fill and carries color on the outline alone)
892
940
  - `no-notes` (boolean; default off — suppress all note boxes, see §4.7)
893
941
 
894
- `no-color` + `solid-fill` precedence: `no-color` wins for nodes with no explicit color (the muted neutral path bypasses `solid-fill`). Nodes with an explicit color survive `no-color` and are then rendered at full saturation if `solid-fill` is also on.
942
+ `no-color` + `fill-solid` precedence: `no-color` wins for nodes with no explicit color (the muted neutral path bypasses `fill-solid`). Nodes with an explicit color survive `no-color` and are then rendered at full saturation if `fill-solid` is also on.
895
943
 
896
944
  ### 4.7 Notes (Nodes)
897
945
 
@@ -974,10 +1022,10 @@ Pending p: Active
974
1022
  Shipped p: Done
975
1023
  Pending -ship-> Shipped
976
1024
  ```
977
- - `solid-fill` (boolean; default off — render states with their full intent color instead of the canonical 25% tint; collapsed groups are also rendered at full saturation)
1025
+ - `fill-solid` / `fill-outline` (fill family; default is the 25% tint — collapsed groups follow the same mode, e.g. full saturation under `fill-solid`)
978
1026
  - `no-notes` (boolean; default off — suppress all note boxes, see §4.7)
979
1027
 
980
- `no-color` + `solid-fill` precedence: `no-color` wins for states with no explicit color (the muted neutral path bypasses `solid-fill`). Group colors survive `no-color` and are then rendered at full saturation if `solid-fill` is also on.
1028
+ `no-color` + `fill-solid` precedence: `no-color` wins for states with no explicit color (the muted neutral path bypasses `fill-solid`). Group colors survive `no-color` and are then rendered at full saturation if `fill-solid` is also on.
981
1029
 
982
1030
  ---
983
1031
 
@@ -3380,7 +3428,7 @@ LayerLabel green
3380
3428
  ```
3381
3429
  ring Captain's Sphere of Influence
3382
3430
 
3383
- solid-fill
3431
+ fill-solid
3384
3432
 
3385
3433
  Captain purple
3386
3434
  Final word on heading and plunder,
@@ -3413,7 +3461,7 @@ Indented lines under a layer are description text. Markdown inline formatting is
3413
3461
 
3414
3462
  | Directive | Effect |
3415
3463
  | ------------ | -------------------------------------------------------------------- |
3416
- | `solid-fill` | Render rings with full intent color instead of the default 25% tint. |
3464
+ | `fill-solid` / `fill-outline` | Render rings with full intent color, or outline-only, instead of the default 25% tint (fill family). |
3417
3465
 
3418
3466
  `inverted` is **not** valid on ring diagrams (rings are rotationally symmetric). Using it emits an error-severity diagnostic and the line is discarded.
3419
3467
 
@@ -3709,7 +3757,7 @@ In the desktop and web app a sketch opens in the **canvas editor** (the code pan
3709
3757
  <!-- TYPE:goal -->
3710
3758
 
3711
3759
  <!-- TIPS start -->
3712
- **Styling tips:** A single progress-toward-a-target reading — one `now` against one `target`, answering "how close am I?". Reach for it for a KPI tile, a fundraising thermometer, a quarterly quota, or a completion percentage; there is no time axis, series, or milestones (use `line` for a trend, `countdown` for a live deadline). Put the **unit in the title** (`Marathon Fund ($)`, `Grog Barrel Fill (L)`) — there is no format/currency directive. `now` and `target` are **space-separated `key value`** directives, no colon (`now 6400` / `target 10000`); the percent is `now / target` and values auto-compact (`6.4k`, `1.2M`). Pick the face for the story with a bare flag on its own line: the default progress **bar** for a plain KPI, `thermometer` for fundraising/fill-the-tank framings, `gauge` for a speedometer/quota dial — all three read the same value pair. The fill is **auto traffic-light** by completion (`< 50%` red, `50–80%` orange, `≥ 80%` green; over-target stays green) so the color already reads the number's health — leave it unless you have reason to override with a trailing color on the title line (`goal Marathon Fund ($) green`) or `no-auto-color` (flat palette color). Over-target clamps the fill at 100% while the `%` label stays truthful (`120%`). Add a `note` — inline (`note Still waiting on three crews`) or a block header on its own line with an indented body — to caption the number with context (who's still owed, what's left); it takes simple markdown (`**bold**`, `*italic*`, `` `code` ``) and `- ` bullets. `solid-fill` for a bolder fill; `no-percent` / `no-value` / `no-title` / `no-note` to drop labels.
3760
+ **Styling tips:** A single progress-toward-a-target reading — one `now` against one `target`, answering "how close am I?". Reach for it for a KPI tile, a fundraising thermometer, a quarterly quota, or a completion percentage; there is no time axis, series, or milestones (use `line` for a trend, `countdown` for a live deadline). Put the **unit in the title** (`Marathon Fund ($)`, `Grog Barrel Fill (L)`) — there is no format/currency directive. `now` and `target` are **space-separated `key value`** directives, no colon (`now 6400` / `target 10000`); the percent is `now / target` and values auto-compact (`6.4k`, `1.2M`). Pick the face for the story with a bare flag on its own line: the default progress **bar** for a plain KPI, `thermometer` for fundraising/fill-the-tank framings, `gauge` for a speedometer/quota dial — all three read the same value pair. The fill is **auto traffic-light** by completion (`< 50%` red, `50–80%` orange, `≥ 80%` green; over-target stays green) so the color already reads the number's health — leave it unless you have reason to override with a trailing color on the title line (`goal Marathon Fund ($) green`) or `no-auto-color` (flat palette color). Over-target clamps the fill at 100% while the `%` label stays truthful (`120%`). Add a `note` — inline (`note Still waiting on three crews`) or a block header on its own line with an indented body — to caption the number with context (who's still owed, what's left); it takes simple markdown (`**bold**`, `*italic*`, `` `code` ``) and `- ` bullets. `fill-solid` for a bolder fill; `no-percent` / `no-value` / `no-title` / `no-note` to drop labels.
3713
3761
  <!-- TIPS end -->
3714
3762
 
3715
3763
  A single progress-toward-a-target value: one `now` measured against one `target`, drawn in one of three static faces. No time axis, no series, no milestones — just "how close am I?". The face is a bare-flag mode directive under the title (like treemap's `radial`); all three faces consume the same value pair.
@@ -3744,7 +3792,7 @@ target 10000
3744
3792
  | `target <number>` | Goal value (required; must be > 0). |
3745
3793
  | `no-percent` | Hide the `%` label. |
3746
3794
  | `no-value` | Hide the raw `now / target` label. |
3747
- | `solid-fill` | Full-saturation fill instead of the default 25% tint. |
3795
+ | `fill-solid` | Full-saturation fill instead of the default 25% tint (`fill-outline` hollows the meter — color on the rim). |
3748
3796
  | `no-title` | Hide the banner title. |
3749
3797
  | `no-note` | Suppress the `note` block even if one is authored. |
3750
3798
  | `no-auto-color` | Disable the traffic-light bands; use the flat palette color. |
@@ -3769,7 +3817,7 @@ The body supports inline `**bold**` / `*italic*` / `` `code` ``, `- `/`* ` bulle
3769
3817
 
3770
3818
  ### Values & color
3771
3819
 
3772
- Values accept `_` separators (`10_000`) but not thousands commas; the unit lives in the title. Color precedence: (1) an explicit trailing color token on the title line (`goal Marathon Fund ($) green`, §1.5) always wins; (2) otherwise the **auto traffic-light** band by completion — `< 50%` red, `50–80%` orange, `≥ 80%` green (over-target stays green), which needs a `target`; (3) `no-auto-color` disables the bands and falls back to the palette series color. The fill is a 25% tint of the resolved color; `solid-fill` opts into full saturation.
3820
+ Values accept `_` separators (`10_000`) but not thousands commas; the unit lives in the title. Color precedence: (1) an explicit trailing color token on the title line (`goal Marathon Fund ($) green`, §1.5) always wins; (2) otherwise the **auto traffic-light** band by completion — `< 50%` red, `50–80%` orange, `≥ 80%` green (over-target stays green), which needs a `target`; (3) `no-auto-color` disables the bands and falls back to the palette series color. The fill is a 25% tint of the resolved color; `fill-solid` opts into full saturation; `fill-outline` hollows the meter (color on the rim, advancement reads from the outlined extent).
3773
3821
 
3774
3822
  ### Semantics
3775
3823
 
@@ -3782,7 +3830,7 @@ Percent is `now / target`. Over-target clamps the fill at 100% while the `%` lab
3782
3830
  <!-- TYPE:countdown -->
3783
3831
 
3784
3832
  <!-- TIPS start -->
3785
- **Styling tips:** The only dynamic chart — it ticks every second and is accurate on every load, so use it for a live "N days until X" widget, not a static report. Keep the title to the event (`Trip to Japan`); the target date renders as a caption automatically. `target` is a space-separated `key value` directive (no colon): a bare date (`2026-08-21`) counts to the viewer's local midnight, a datetime or offset is honored. Default `units days` reads best for weeks/months out; use `units full` for a launch-day `Nd HH:MM:SS` clock. Set `expired` to the celebration text (`🚀 Shipped!`); after the target passes every live surface shows it and the tick stops. On images (PNG export, `.svg` via `<img>`, GitHub camo) it can't tick and shows the whole-day count baked at export time — the correct fallback.
3833
+ **Styling tips:** The only dynamic chart — it ticks every second and is accurate on every load, so use it for a live "N days until X" widget, not a static report. Keep the title to the event (`Trip to Japan`); the target date renders as a caption automatically. `target` is a space-separated `key value` directive (no colon): a bare date (`2026-08-21`) counts to midnight, a datetime or offset is honored. By default those times are **viewer-local** — each person sees their own; add `tz America/New_York` (any IANA zone, no colon) to **pin** the count so a shared launch/livestream page shows everyone the same remaining time and it doesn't shift when you carry the laptop to another zone. Default `units days` reads best for weeks/months out; use `units full` for a launch-day `Nd HH:MM:SS` clock. Set `expired` to the celebration text (`🚀 Shipped!`); after the target passes every live surface shows it and the tick stops. On images (PNG export, `.svg` via `<img>`, GitHub camo) it can't tick and shows the whole-day count baked at export time — the correct fallback.
3786
3834
  <!-- TIPS end -->
3787
3835
 
3788
3836
  The only *dynamic* dgmo chart: a single "N days until X" recomputed against the viewer's clock on every load and ticking every second on any live surface. Distinct from `goal` (static) — a countdown has no `now`/`target` pair, just one future instant. The renderer bakes a whole-day fallback number (the no-JS floor); a tiny page-level ticker overwrites it live and, in `units full`, upgrades it to `Nd HH:MM:SS`.
@@ -3810,12 +3858,13 @@ target 2026-08-21
3810
3858
  | Directive | Effect |
3811
3859
  | ----------------------- | ---------------------------------------------------------------------- |
3812
3860
  | `target <iso>` | The future instant (required). `2026-08-21`, `2026-08-21T18:00`, or with a tz offset. The literal `now` resolves at render (→ immediately expired; for testing). |
3861
+ | `tz <IANA>` | Pin authored times to a zone (`America/New_York`, `Asia/Kolkata`, `UTC`) so the count is the **same for every viewer** and doesn't drift when the host moves zones. Default viewer-local. Footer then shows the in-zone time + a `UTC±` tag. |
3813
3862
  | `units <days\|full>` | `days` (default) shows whole days (ceil); `full` ticks `Nd HH:MM:SS` on live surfaces. |
3814
3863
  | `expired <text>` | Shown once the target passes; the tick stops. Default `"Now!"`. |
3815
3864
 
3816
3865
  ### Values & color
3817
3866
 
3818
- A bare `YYYY-MM-DD` counts to the viewer's **local midnight**; a datetime with no offset is viewer-local; an explicit offset is honored. The trailing-token color rule (§1.5) applies to the title line (`countdown Trip to Japan blue`) and tints the figure.
3867
+ A bare `YYYY-MM-DD` counts to **midnight** and a datetime with no offset to that wall-clock time — both in the `tz` zone if one is set (`tz America/New_York`), otherwise **viewer-local**; an explicit ISO offset is always an absolute instant. Pin a `tz` when a shared page must show everyone the same countdown (a launch, a livestream); leave it off for a personal "my local deadline" widget. The trailing-token color rule (§1.5) applies to the title line (`countdown Trip to Japan blue`) and tints the figure.
3819
3868
 
3820
3869
  ### Semantics
3821
3870
 
@@ -3828,7 +3877,7 @@ Days mode uses `ceil` — a target later *today* reads "1 day", not "0". Full mo
3828
3877
  <!-- TYPE:clock -->
3829
3878
 
3830
3879
  <!-- TIPS start -->
3831
- **Styling tips:** A live world clock — one panel per person or place, each showing the CURRENT time in its zone and ticking every second, accurate the instant the page loads. Reach for it to answer "what time is it for the crew right now": a distributed team's local times, a single collaborator's clock, or the overlap window for scheduling a call. The first line declares the type and a title (`Crew standups`). Each entry is one line, `<place> <IANA/Zone> [as <label>]`: a human-readable place, then a real IANA zone (`Europe/London`, `America/New_York`, `America/Los_Angeles`, `Asia/Tokyo`) — never a bare offset like `GMT+1`, which doesn't track daylight saving. Use `as <label>` to name the person or role behind a zone (`New York America/New_York as Dani (NY)`); the label becomes the caption. The single-clock case is common and encouraged — one title, one entry (`clock Dani` / `New York America/New_York`). Global directives are flat, no colon: `analog` for analog dials (digital is the default face), `time-24` for a 24-hour readout (12h am/pm is the default), and optional context bands `hours 9-17` + `days mon-fri` (the window accepts `HH:MM` and am/pm, e.g. `hours 8:30-17:15`) to shade each zone's working window so out-of-hours people read at a glance. `no-sun` hides the sunrise/sundown indicator (on by default). Add `hours`/`days` only when the point is scheduling overlap; drop them for a plain "current time" widget. Zones are **colorized by default** (`color-by`, default `place` — a distinct palette accent per place); reach for a semantic mode when color should *mean* something: `color-by time` or `color-by daylight` make an at-a-glance world board read as day-vs-night (order the zones west→east so the daylight sweeps across), and `color-by work` turns a standup/team board green/amber/grey by availability — it needs `hours` set. A hand-set per-zone color (`London Europe/London as UK team purple`) is a **defined** shade that always wins over the dimension, so you can pin one zone and let the rest follow. `color-by none` goes neutral. On image surfaces (PNG, `.svg` via `<img>`, GitHub camo) it can't tick and bakes the time at export — the correct graceful fallback.
3880
+ **Styling tips:** A live world clock — one panel per person or place, each showing the CURRENT time in its zone and ticking every second, accurate the instant the page loads. Reach for it to answer "what time is it for the crew right now": a distributed team's local times, a single collaborator's clock, or the overlap window for scheduling a call. The first line declares the type and a title (`Crew standups`). Each entry is one line, `<anchor> [as <label>] [color]`: name the zone once as the anchor — a plain **city name** (`London`, `NYC`, `Bombay`, `Los Angeles` — easiest, resolved through the bundled gazetteer to its canonical zone and displayed as the canonical city), a full **IANA id** (the token containing `/`, like `Europe/London` or `America/New_York`), or a **UTC/GMT offset** (`UTC`, `UTC+1`, `UTC+5:30`, `GMT+2`) which pins a **fixed** offset with no daylight-saving shift (bare `UTC`/`GMT` = +00:00, and no sun line). Use `as <label>` to name the person or role behind a zone (`New York as Dani (NY)`); the label becomes the caption and defaults to the resolved city (or the offset label for a fixed row). The single-clock case is common and encouraged — one title, one entry (`clock Dani` / `New York`). Global directives are flat, no colon: `analog` for analog dials (digital is the default face), `time-24` for a 24-hour readout (12h am/pm is the default), and optional context bands `hours 9-17` + `days mon-fri` (the window accepts `HH:MM` and am/pm, e.g. `hours 8:30-17:15`) to shade each zone's working window so out-of-hours people read at a glance. `no-sun` hides the sunrise/sundown indicator (on by default). Add `hours`/`days` only when the point is scheduling overlap; drop them for a plain "current time" widget. Zones are **colorized by default** (`color-by`, default `place` — a distinct palette accent per place); reach for a semantic mode when color should *mean* something: `color-by time` or `color-by daylight` make an at-a-glance world board read as day-vs-night (order the zones west→east so the daylight sweeps across), and `color-by work` turns a standup/team board green/amber/grey by availability — it needs `hours` set. A hand-set per-zone color (`London as UK team purple`, or just `London purple`) is a **defined** shade that always wins over the dimension, so you can pin one zone and let the rest follow. `color-by none` goes neutral. On image surfaces (PNG, `.svg` via `<img>`, GitHub camo) it can't tick and bakes the time at export — the correct graceful fallback.
3832
3881
  <!-- TIPS end -->
3833
3882
 
3834
3883
  The second *dynamic* dgmo chart (with `countdown`): a live board of world clocks recomputed against the viewer's clock every second. Flat syntax — the first line is `clock <Title>`; every other non-blank line is either a board-level directive (its first token is an option keyword) or a place row. Order-independent; no colons anywhere.
@@ -3847,7 +3896,7 @@ no-title // suppress the board title
3847
3896
  direction lr // lay the panels out in a row
3848
3897
  color-by <place|work|daylight|time|none> // zone coloring; default place
3849
3898
 
3850
- <place tokens…> <IANA/Zone> [as <label…>]
3899
+ <anchor> [as <label…>] [color]
3851
3900
  ```
3852
3901
 
3853
3902
  ### Example
@@ -3857,9 +3906,20 @@ clock Crew standups
3857
3906
  hours 9-17
3858
3907
  days mon-fri
3859
3908
 
3860
- London Europe/London as UK team
3861
- New York America/New_York as Dani (NY)
3862
- Los Angeles America/Los_Angeles as West coast
3909
+ London as UK team
3910
+ New York as Dani (NY)
3911
+ Los Angeles as West coast
3912
+ ```
3913
+
3914
+ A UTC-offset board (offsets are fixed — no DST, no sun line):
3915
+
3916
+ ```
3917
+ clock Bridge watch
3918
+ time-24
3919
+
3920
+ London as UK team
3921
+ UTC+5:30 as Bangalore ops
3922
+ UTC as Servers
3863
3923
  ```
3864
3924
 
3865
3925
  ### Directives
@@ -3877,7 +3937,13 @@ Los Angeles America/Los_Angeles as West coast
3877
3937
 
3878
3938
  ### Entry grammar
3879
3939
 
3880
- Each place row is `<place tokens…> <IANA/Zone> [as <label…>]`. The zone is the token containing `/` (a full IANA name like `America/New_York`); text before it is the place, and `as <label>` sets the display alias (default = place). A row that is just a zone (`Asia/Tokyo`) uses the zone's city as the place.
3940
+ Each place row is `<anchor> [as <label…>] [color]`. The **anchor** names the zone exactly once and is resolved in this order:
3941
+
3942
+ 1. **UTC/GMT offset** — `UTC`, `UTC+1`, `UTC-7`, `UTC+5:30`, `GMT+2`. A **fixed** offset with no DST (bare `UTC`/`GMT` = +00:00); renders a "no DST" marker and no sun line.
3943
+ 2. **IANA id** — the token containing `/` (`Europe/London`, `America/New_York`). DST-correct.
3944
+ 3. **City name** — via the bundled gazetteer (`London`, `NYC`, `Bombay`, `Los Angeles`). Resolves to the canonical IANA zone and displays the canonical city. An ambiguous name (`San Jose`) errors and lists the candidates; an unknown name is skipped with a warning and a did-you-mean.
3945
+
3946
+ `as <label>` sets the display alias (default = the resolved city, or the offset label for a fixed row). A trailing palette color token pins the row's shade (`London as UK team purple`, or `London purple`).
3881
3947
 
3882
3948
  ### Semantics
3883
3949
 
@@ -4038,7 +4104,7 @@ Markers in cells are always **rendered in canonical alphabet order** (`R A C I`,
4038
4104
  <!-- TYPE:map -->
4039
4105
 
4040
4106
  <!-- TIPS start -->
4041
- **Styling tips:** the zero-config map already looks good — name places and stop. When POIs fall into categories, tag them so each category gets its own color; keep place labels to the place name; leave region colorize and coastlines on unless the user asks to hide them. **For flights and airport routes, use IATA codes, not city names** — `LHR ~> JFK`, `LHR ~> DXB`, `LHR ~> SIN`, `LHR ~> HND` — the bundled airport set (large international hubs + all US commercial airports) resolves them to the right coordinates and labels them with the code. **For cities, use the exact canonical name**: "New York City" (NOT "New York"), "Washington, D.C.", etc. — a name the gazetteer doesn't have **silently drops that point** and the map just reframes around the rest, so it looks fine but is wrong. When unsure of the exact token, look it up: `dgmo map-search "<place>"` (or the `lookup_map_location` MCP tool) returns the city name or airport code to paste; fall back to coordinates (`poi Name as 40.71,-74.0`) for anything not found. **For routes/flows from a hub** (an airport's daily flights, a distribution center's shipments), write ONE edge per line and repeat the origin — never indented edges (those error). Use **arcs** (`~>`) for flights and long-haul links so the spokes separate; the connector label carries the relationship (`~daily~>`, `~2x daily~>`). Endpoints auto-create POIs, so don't add separate `poi` lines for places already in an edge. Reach for a `route` block only when the trip is an **ordered voyage** that continues stop→stop (a cruise itinerary), not a set of independent routes from one origin.
4107
+ **Styling tips:** the zero-config map already looks good — name places and stop. When POIs fall into categories, tag them so each category gets its own color; keep place labels to the place name; leave region colorize and coastlines on unless the user asks to hide them. **For flights and airport routes, use IATA codes, not city names** — `LHR ~> JFK`, `LHR ~> DXB`, `LHR ~> SIN`, `LHR ~> HND` — the bundled airport set (large international hubs + all US commercial airports) resolves them to the right coordinates and labels them with the code. **For cities, use the exact canonical name**: "New York City" (NOT "New York"), "Washington, D.C.", etc. — a name the gazetteer doesn't have **silently drops that point** and the map just reframes around the rest, so it looks fine but is wrong. When unsure of the exact token, look it up: `dgmo map-search "<place>"` (or the `lookup_map_location` MCP tool) returns the city name or airport code to paste; fall back to coordinates (`poi Name as 40.71,-74.0`) for anything not found. **For routes/flows from a hub** (an airport's daily flights, a distribution center's shipments), write ONE edge per line and repeat the origin — never indented edges (those error). Use **arcs** (`~>`) for flights and long-haul links so the spokes separate; the connector label carries the relationship (`~daily~>`, `~2x daily~>`). Endpoints auto-create POIs, so don't add separate `poi` lines for places already in an edge. Reach for a `route` block only when the trip is an **ordered voyage** that continues stop→stop (a cruise itinerary), not a set of independent routes from one origin. **For a "what time is it at each office" map**, flag each POI with `clock` — the zone comes from the place automatically, so just `poi Denver clock`; add `hours 9-17` + `days mon-fri` for open/closed dots, and `clock: <IANA>` only on bare-coordinate pins. Use `label:` (not `as`) for a multi-word office name.
4042
4108
  <!-- TIPS end -->
4043
4109
 
4044
4110
  Geographic concept maps: highlight/shade political subdivisions, drop points of interest (POIs), and connect them with routes or edges. For "share a concept" business maps, not cartography. Renders at a fixed, auto-fit position — no pan/zoom. Basemap and viewport are **inferred from the content you reference** — most maps need no directives. v1 boundaries: world countries + US states.
@@ -4109,9 +4175,28 @@ poi Austin red # direct marker color (trailing token, §1.5
4109
4175
  ```
4110
4176
 
4111
4177
  - **Coordinates are positional** — two leading signed numbers (lat then lon); cities never start with a number.
4112
- - `size:` scales marker area (use `poi-size <label>` for the legend key). A trailing color (`poi Austin red`) sets the marker fill directly — winning over a tag color and the default orange. POI properties: `label`, `size`, `style`, applied tag alias, `as`. No `icon` in v1.
4178
+ - `size:` scales marker area (use `poi-size <label>` for the legend key). A trailing color (`poi Austin red`) sets the marker fill directly — winning over a tag color and the default orange. POI properties: `label`, `size`, `style`, applied tag alias, `as`, `clock`. No `icon` in v1.
4113
4179
  - Coord-positioned or relabeled POIs take `as <alias>` for route/edge references; named POIs are referenced by name.
4114
4180
 
4181
+ ### Local-time cards (`clock`)
4182
+
4183
+ Flag a POI with `clock` and it grows a **live local-time card** above the marker — for a team/office map that shows what time it is at each site.
4184
+
4185
+ ```
4186
+ map Team offices
4187
+ hours 9-17 # per-pin availability window (open/closed dot)
4188
+ days mon-fri
4189
+ poi San Francisco clock # zone auto-derived from the place
4190
+ poi London clock
4191
+ poi Bengaluru clock
4192
+ poi 1.29 103.85 as SG clock: Asia/Singapore # bare-coord pin names its zone
4193
+ ```
4194
+
4195
+ - **The place picks the zone — don't type it.** A named city derives its IANA zone from the gazetteer (correct by construction, e.g. Austin → Central). Only a **bare-coordinate** pin needs the valued form `clock: <zone>` — an IANA id (`Asia/Tokyo`) or a fixed offset (`clock: UTC+9`, no DST). The valued form also *overrides* a city, but a mismatch warns (you almost never want it).
4196
+ - `hours 9-17` + `days mon-fri` (map-level) give a status dot per pin — green open / amber opening soon / hollow closed·weekend — evaluated in **each pin's own zone**.
4197
+ - Use `label:` for a multi-word office name (`poi Los Angeles clock, label: El Segundo`); the `as` alias is a single word and doesn't render.
4198
+ - The card ticks every second on live surfaces and bakes a snapshot for PNG/SVG. It shows the weekday only when the pin's day differs from the viewer's.
4199
+
4115
4200
  ### Routes & connectors
4116
4201
 
4117
4202
  `route <origin>` — an ordered, auto-numbered voyage; the origin gets a distinct marker, and the header takes **no shape option**. Each indented line is a `<arrow> destination` leg that continues from the previous stop, using the same indented arrow idiom as a sitemap — a leg is an edge (in-arrow label, `width:` thickness, and the **arrow glyph alone sets shape**: `-…->` straight, `~…~>` arc, mixable per leg). The **arrow is required and must be directional** — a bare destination errors, and so does an undirected `--`/`~~` glyph (a voyage always flows forward; use `->`/`~>`). A **tag on a leg colours the LINE** (categorical leg-type colouring — flights vs cruises vs trains); `label:`/`as` still name the destination stop. Repeat the origin as a leg's destination to close a loop (no second marker):
@@ -3,6 +3,6 @@ hours 9-17
3
3
  days mon-fri
4
4
  color-by work
5
5
 
6
- London Europe/London as UK team
7
- New York America/New_York as Dani (NY)
8
- Los Angeles America/Los_Angeles as West coast
6
+ London as UK team
7
+ New York as Dani (NY)
8
+ Los Angeles as West coast
@@ -0,0 +1,5 @@
1
+ countdown The Black Pearl sets sail
2
+ target 2026-09-01T18:00
3
+ tz America/New_York
4
+ units full
5
+ expired 🏴‍☠️ Anchors aweigh!
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diagrammo/dgmo",
3
- "version": "0.50.2",
3
+ "version": "0.52.0",
4
4
  "description": "DGMO diagram markup language — parser, renderer, and color system",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,26 +0,0 @@
1
- import {
2
- D3_DATA_CHART_TYPES,
3
- renderDataChartD3,
4
- supportsD3DataChart
5
- } from "./chunk-QJJZSROI.js";
6
- import "./chunk-HGN652MU.js";
7
- import "./chunk-U6EQI3U6.js";
8
- import "./chunk-7UEMZREK.js";
9
- import "./chunk-A4GOY3PE.js";
10
- import "./chunk-6KFWC4CO.js";
11
- import "./chunk-HQCHYB5F.js";
12
- import "./chunk-5LWQH6QV.js";
13
- import "./chunk-XEGTMVYY.js";
14
- import "./chunk-R3XI2VC7.js";
15
- import "./chunk-P6T66CCZ.js";
16
- import "./chunk-FJUNPCYI.js";
17
- import "./chunk-OTAL43EH.js";
18
- import "./chunk-TLVIHFRO.js";
19
- import "./chunk-CXK4DZH3.js";
20
- import "./chunk-5WRI5ZAA.js";
21
- export {
22
- D3_DATA_CHART_TYPES,
23
- renderDataChartD3,
24
- supportsD3DataChart
25
- };
26
- //# sourceMappingURL=charts-d3-MUW3LTML.js.map
@@ -1,84 +0,0 @@
1
- import {
2
- CHART_TYPE_DESCRIPTIONS,
3
- chartTypeParsers,
4
- getAllChartTypes,
5
- getRenderCategory,
6
- isExtendedChartType,
7
- knownChartTypeIds,
8
- looksLikeC4,
9
- looksLikeGantt,
10
- parseDgmo,
11
- parseDgmoChartType
12
- } from "./chunk-KQ57MHRO.js";
13
- import "./chunk-Q4V4XQWV.js";
14
- import "./chunk-BTUTZMPT.js";
15
- import "./chunk-YNRDWYZP.js";
16
- import "./chunk-3XPUDB7B.js";
17
- import "./chunk-QXKWYZNR.js";
18
- import "./chunk-PGEGPSCZ.js";
19
- import "./chunk-3UIKSPFB.js";
20
- import "./chunk-BDXC7MDK.js";
21
- import "./chunk-XEGTMVYY.js";
22
- import "./chunk-I2WKW7C7.js";
23
- import "./chunk-TSA237IM.js";
24
- import "./chunk-6IAA2QQ2.js";
25
- import "./chunk-6HJBFVLO.js";
26
- import "./chunk-3P2DKJCG.js";
27
- import "./chunk-3LKM6FMW.js";
28
- import "./chunk-XJLKLU4D.js";
29
- import "./chunk-7L3R6I3U.js";
30
- import "./chunk-NNAAJVBU.js";
31
- import "./chunk-VUJGMJE6.js";
32
- import "./chunk-C2CVAM3U.js";
33
- import "./chunk-GKC3HILQ.js";
34
- import "./chunk-U2HGPLZS.js";
35
- import "./chunk-DSWVNQVS.js";
36
- import "./chunk-DZXYF2F5.js";
37
- import "./chunk-XHVV4NVW.js";
38
- import "./chunk-OMNGQPEZ.js";
39
- import "./chunk-VBYSIOOY.js";
40
- import "./chunk-QQJUTGQH.js";
41
- import "./chunk-SXRTRMEE.js";
42
- import "./chunk-NU3XLTGP.js";
43
- import "./chunk-OTQKUHRS.js";
44
- import "./chunk-SQLNBA64.js";
45
- import "./chunk-EAMEADTV.js";
46
- import "./chunk-L3UHP6TD.js";
47
- import "./chunk-USZW2HHU.js";
48
- import "./chunk-HTMN2Z6U.js";
49
- import "./chunk-I7F2A35O.js";
50
- import "./chunk-6BFZKBGD.js";
51
- import "./chunk-3Y2DRD7S.js";
52
- import "./chunk-QROYX7TT.js";
53
- import "./chunk-IYULMRBE.js";
54
- import "./chunk-R3XI2VC7.js";
55
- import "./chunk-P6T66CCZ.js";
56
- import "./chunk-BH3UYK36.js";
57
- import "./chunk-C3Z4DX3V.js";
58
- import "./chunk-FJUNPCYI.js";
59
- import "./chunk-GBE54KY6.js";
60
- import "./chunk-I46X5VUA.js";
61
- import "./chunk-2C56LEML.js";
62
- import "./chunk-NXMESY4J.js";
63
- import "./chunk-GL5UZ6NY.js";
64
- import "./chunk-SCHXJTZL.js";
65
- import "./chunk-FMDSF3OV.js";
66
- import "./chunk-FFUN5D66.js";
67
- import "./chunk-NOTA6TEI.js";
68
- import "./chunk-OTAL43EH.js";
69
- import "./chunk-TLVIHFRO.js";
70
- import "./chunk-CXK4DZH3.js";
71
- import "./chunk-5WRI5ZAA.js";
72
- export {
73
- CHART_TYPE_DESCRIPTIONS,
74
- chartTypeParsers,
75
- getAllChartTypes,
76
- getRenderCategory,
77
- isExtendedChartType,
78
- knownChartTypeIds,
79
- looksLikeC4,
80
- looksLikeGantt,
81
- parseDgmo,
82
- parseDgmoChartType
83
- };
84
- //# sourceMappingURL=dgmo-router-CE2G67FV.js.map
@@ -1,22 +0,0 @@
1
- import {
2
- mapContentAspect,
3
- mapExportDimensions
4
- } from "./chunk-TN35C5KM.js";
5
- import "./chunk-LE4MYMLI.js";
6
- import "./chunk-I5IGB56C.js";
7
- import "./chunk-HGN652MU.js";
8
- import "./chunk-7UEMZREK.js";
9
- import "./chunk-A4GOY3PE.js";
10
- import "./chunk-HQCHYB5F.js";
11
- import "./chunk-5LWQH6QV.js";
12
- import "./chunk-P6T66CCZ.js";
13
- import "./chunk-FJUNPCYI.js";
14
- import "./chunk-OTAL43EH.js";
15
- import "./chunk-TLVIHFRO.js";
16
- import "./chunk-CXK4DZH3.js";
17
- import "./chunk-5WRI5ZAA.js";
18
- export {
19
- mapContentAspect,
20
- mapExportDimensions
21
- };
22
- //# sourceMappingURL=dimensions-OTBKC5M6.js.map
@@ -1,9 +0,0 @@
1
- import {
2
- layoutWireframe
3
- } from "./chunk-6IUAK7RZ.js";
4
- import "./chunk-5LWQH6QV.js";
5
- import "./chunk-5WRI5ZAA.js";
6
- export {
7
- layoutWireframe
8
- };
9
- //# sourceMappingURL=layout-6RDJHS6E.js.map
@@ -1,14 +0,0 @@
1
- import {
2
- layoutOrg
3
- } from "./chunk-IUMPEA64.js";
4
- import "./chunk-HQCHYB5F.js";
5
- import "./chunk-5LWQH6QV.js";
6
- import "./chunk-FJUNPCYI.js";
7
- import "./chunk-OTAL43EH.js";
8
- import "./chunk-TLVIHFRO.js";
9
- import "./chunk-CXK4DZH3.js";
10
- import "./chunk-5WRI5ZAA.js";
11
- export {
12
- layoutOrg
13
- };
14
- //# sourceMappingURL=layout-J36454XU.js.map
@@ -1,14 +0,0 @@
1
- import {
2
- layoutSitemap
3
- } from "./chunk-VDOOQZUD.js";
4
- import "./chunk-HQCHYB5F.js";
5
- import "./chunk-5LWQH6QV.js";
6
- import "./chunk-FJUNPCYI.js";
7
- import "./chunk-OTAL43EH.js";
8
- import "./chunk-TLVIHFRO.js";
9
- import "./chunk-CXK4DZH3.js";
10
- import "./chunk-5WRI5ZAA.js";
11
- export {
12
- layoutSitemap
13
- };
14
- //# sourceMappingURL=layout-LD6XTLD6.js.map
@@ -1,13 +0,0 @@
1
- import {
2
- parseEventLine
3
- } from "./chunk-HTMN2Z6U.js";
4
- import "./chunk-I7F2A35O.js";
5
- import "./chunk-FJUNPCYI.js";
6
- import "./chunk-OTAL43EH.js";
7
- import "./chunk-TLVIHFRO.js";
8
- import "./chunk-CXK4DZH3.js";
9
- import "./chunk-5WRI5ZAA.js";
10
- export {
11
- parseEventLine
12
- };
13
- //# sourceMappingURL=parser-4WQQQXCG.js.map
@@ -1,13 +0,0 @@
1
- import {
2
- parseBlock
3
- } from "./chunk-7L3R6I3U.js";
4
- import "./chunk-NNAAJVBU.js";
5
- import "./chunk-FJUNPCYI.js";
6
- import "./chunk-OTAL43EH.js";
7
- import "./chunk-TLVIHFRO.js";
8
- import "./chunk-CXK4DZH3.js";
9
- import "./chunk-5WRI5ZAA.js";
10
- export {
11
- parseBlock
12
- };
13
- //# sourceMappingURL=parser-O4HIUN6G.js.map
@@ -1,22 +0,0 @@
1
- import {
2
- renderTreemap,
3
- renderTreemapForExport
4
- } from "./chunk-66NVRO4K.js";
5
- import "./chunk-PFHVU7UA.js";
6
- import "./chunk-HEVYAHLW.js";
7
- import "./chunk-7UEMZREK.js";
8
- import "./chunk-A4GOY3PE.js";
9
- import "./chunk-6KFWC4CO.js";
10
- import "./chunk-HQCHYB5F.js";
11
- import "./chunk-5LWQH6QV.js";
12
- import "./chunk-P6T66CCZ.js";
13
- import "./chunk-FJUNPCYI.js";
14
- import "./chunk-OTAL43EH.js";
15
- import "./chunk-TLVIHFRO.js";
16
- import "./chunk-CXK4DZH3.js";
17
- import "./chunk-5WRI5ZAA.js";
18
- export {
19
- renderTreemap,
20
- renderTreemapForExport
21
- };
22
- //# sourceMappingURL=renderer-CYB4LK3G.js.map
@@ -1,24 +0,0 @@
1
- import {
2
- authoredCollapsedIds,
3
- renderBlock,
4
- renderBlockForExport
5
- } from "./chunk-RZ6YKEUJ.js";
6
- import "./chunk-HEVYAHLW.js";
7
- import "./chunk-7UEMZREK.js";
8
- import "./chunk-A4GOY3PE.js";
9
- import "./chunk-6KFWC4CO.js";
10
- import "./chunk-HQCHYB5F.js";
11
- import "./chunk-5LWQH6QV.js";
12
- import "./chunk-NNAAJVBU.js";
13
- import "./chunk-P6T66CCZ.js";
14
- import "./chunk-FJUNPCYI.js";
15
- import "./chunk-OTAL43EH.js";
16
- import "./chunk-TLVIHFRO.js";
17
- import "./chunk-CXK4DZH3.js";
18
- import "./chunk-5WRI5ZAA.js";
19
- export {
20
- authoredCollapsedIds,
21
- renderBlock,
22
- renderBlockForExport
23
- };
24
- //# sourceMappingURL=renderer-FF24KZCI.js.map