@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
@@ -9,10 +9,10 @@ import {
9
9
  } from "./chunk-YYVTBZZC.js";
10
10
  import {
11
11
  renderIntegratedLegend
12
- } from "./chunk-OU7HLO7I.js";
12
+ } from "./chunk-W5KMNC5U.js";
13
13
  import {
14
14
  getMaxLegendReservedHeight
15
- } from "./chunk-YAA6IID3.js";
15
+ } from "./chunk-774C2FF3.js";
16
16
  import {
17
17
  TITLE_FONT_SIZE,
18
18
  TITLE_FONT_WEIGHT,
@@ -21,25 +21,29 @@ import {
21
21
  import {
22
22
  FONT_FAMILY
23
23
  } from "./chunk-6KFWC4CO.js";
24
- import {
25
- measureText,
26
- truncateText
27
- } from "./chunk-WCT3NYCV.js";
28
24
  import {
29
25
  contrastText,
30
26
  mix,
31
27
  shapeFill,
32
28
  themeBaseBg
33
- } from "./chunk-P6T66CCZ.js";
29
+ } from "./chunk-JYDMBWRP.js";
30
+ import {
31
+ measureText,
32
+ truncateText
33
+ } from "./chunk-4ASYQ347.js";
34
34
  import {
35
35
  isSequenceBlock,
36
36
  isSequenceNote,
37
37
  isSequenceSection
38
- } from "./chunk-RLFVAKEO.js";
38
+ } from "./chunk-22OQWBWD.js";
39
39
  import {
40
40
  resolveActiveTagGroup,
41
41
  tagAttrKey
42
- } from "./chunk-467TVMQL.js";
42
+ } from "./chunk-CMVZWP32.js";
43
+ import {
44
+ fillModeFromOptions,
45
+ legendSuppressed
46
+ } from "./chunk-YJVA3QUU.js";
43
47
 
44
48
  // src/sequence/renderer.ts
45
49
  import * as d3Selection from "d3-selection";
@@ -286,15 +290,13 @@ function wrapLabelWords(words, maxWidth, fontSize) {
286
290
  if (current) lines.push(current);
287
291
  return lines;
288
292
  }
289
- var fill = (palette, isDark, color, solid) => color ? shapeFill(palette, color, isDark, {
290
- ...solid !== void 0 && { solid }
291
- }) : isDark ? mix(palette.overlay, palette.surface, 50) : mix(palette.bg, palette.surface, 50);
293
+ var fill = (palette, isDark, color, fillMode) => color ? shapeFill(palette, color, isDark, { mode: fillMode }) : isDark ? mix(palette.overlay, palette.surface, 50) : mix(palette.bg, palette.surface, 50);
292
294
  var stroke = (palette, color) => color || palette.border;
293
295
  var SW = 1.5;
294
296
  var W = PARTICIPANT_BOX_WIDTH;
295
297
  var H = PARTICIPANT_BOX_HEIGHT;
296
- function renderRectParticipant(g, palette, isDark, color, solid, w = W, h = H) {
297
- g.append("rect").attr("x", -w / 2).attr("y", 0).attr("width", w).attr("height", h).attr("rx", 2).attr("ry", 2).attr("fill", fill(palette, isDark, color, solid)).attr("stroke", stroke(palette, color)).attr("stroke-width", SW);
298
+ function renderRectParticipant(g, palette, isDark, color, fillMode, w = W, h = H) {
299
+ g.append("rect").attr("x", -w / 2).attr("y", 0).attr("width", w).attr("height", h).attr("rx", 2).attr("ry", 2).attr("fill", fill(palette, isDark, color, fillMode)).attr("stroke", stroke(palette, color)).attr("stroke-width", SW);
298
300
  }
299
301
  function renderActorParticipant(g, palette, color, h = H) {
300
302
  const sc = h / H;
@@ -315,11 +317,11 @@ function renderActorParticipant(g, palette, color, h = H) {
315
317
  g.append("line").attr("x1", cx).attr("y1", bodyBottomY).attr("x2", cx - legSpan).attr("y2", legY).attr("stroke", s).attr("stroke-width", actorSW);
316
318
  g.append("line").attr("x1", cx).attr("y1", bodyBottomY).attr("x2", cx + legSpan).attr("y2", legY).attr("stroke", s).attr("stroke-width", actorSW);
317
319
  }
318
- function renderDatabaseParticipant(g, palette, isDark, color, solid, w = W, h = H) {
320
+ function renderDatabaseParticipant(g, palette, isDark, color, fillMode, w = W, h = H) {
319
321
  const ry = 7;
320
322
  const topY = ry;
321
323
  const bodyH = h - ry * 2;
322
- const f = fill(palette, isDark, color, solid);
324
+ const f = fill(palette, isDark, color, fillMode);
323
325
  const s = stroke(palette, color);
324
326
  g.append("ellipse").attr("cx", 0).attr("cy", topY + bodyH).attr("rx", w / 2).attr("ry", ry).attr("fill", f).attr("stroke", s).attr("stroke-width", SW);
325
327
  g.append("rect").attr("class", "participant-body").attr("x", -w / 2).attr("y", topY).attr("width", w).attr("height", bodyH).attr("fill", f).attr("stroke", "none");
@@ -327,11 +329,11 @@ function renderDatabaseParticipant(g, palette, isDark, color, solid, w = W, h =
327
329
  g.append("line").attr("x1", w / 2).attr("y1", topY).attr("x2", w / 2).attr("y2", topY + bodyH).attr("stroke", s).attr("stroke-width", SW);
328
330
  g.append("ellipse").attr("cx", 0).attr("cy", topY).attr("rx", w / 2).attr("ry", ry).attr("fill", f).attr("stroke", s).attr("stroke-width", SW);
329
331
  }
330
- function renderQueueParticipant(g, palette, isDark, color, solid, w = W, h = H) {
332
+ function renderQueueParticipant(g, palette, isDark, color, fillMode, w = W, h = H) {
331
333
  const rx = 10;
332
334
  const leftX = -w / 2 + rx;
333
335
  const bodyW = w - rx * 2;
334
- const f = fill(palette, isDark, color, solid);
336
+ const f = fill(palette, isDark, color, fillMode);
335
337
  const s = stroke(palette, color);
336
338
  g.append("ellipse").attr("cx", leftX + bodyW).attr("cy", h / 2).attr("rx", rx).attr("ry", h / 2).attr("fill", f).attr("stroke", s).attr("stroke-width", SW);
337
339
  g.append("rect").attr("class", "participant-body").attr("x", leftX).attr("y", 0).attr("width", bodyW).attr("height", h).attr("fill", f).attr("stroke", "none");
@@ -339,11 +341,11 @@ function renderQueueParticipant(g, palette, isDark, color, solid, w = W, h = H)
339
341
  g.append("line").attr("x1", leftX).attr("y1", h).attr("x2", leftX + bodyW).attr("y2", h).attr("stroke", s).attr("stroke-width", SW);
340
342
  g.append("ellipse").attr("cx", leftX).attr("cy", h / 2).attr("rx", rx).attr("ry", h / 2).attr("fill", f).attr("stroke", s).attr("stroke-width", SW);
341
343
  }
342
- function renderCacheParticipant(g, palette, isDark, color, solid, w = W, h = H) {
344
+ function renderCacheParticipant(g, palette, isDark, color, fillMode, w = W, h = H) {
343
345
  const ry = 7;
344
346
  const topY = ry;
345
347
  const bodyH = h - ry * 2;
346
- const f = fill(palette, isDark, color, solid);
348
+ const f = fill(palette, isDark, color, fillMode);
347
349
  const s = stroke(palette, color);
348
350
  const dash = "4 3";
349
351
  g.append("ellipse").attr("cx", 0).attr("cy", topY + bodyH).attr("rx", w / 2).attr("ry", ry).attr("fill", f).attr("stroke", s).attr("stroke-width", SW).attr("stroke-dasharray", dash);
@@ -586,7 +588,7 @@ function applyGroupOrdering(participants, groups, messages = []) {
586
588
  function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateToLine, options) {
587
589
  d3Selection.select(container).selectAll("*").remove();
588
590
  const { title, options: parsedOptions } = parsed;
589
- const solid = parsedOptions["solid-fill"] === "on";
591
+ const fillMode = fillModeFromOptions(parsedOptions);
590
592
  const effectiveCollapsedGroups = options?.collapsedGroups ? new Set(options.collapsedGroups) : new Set(
591
593
  parsed.groups.filter((g) => g.collapsed).map((g) => g.lineNumber)
592
594
  );
@@ -1001,7 +1003,8 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1001
1003
  position: { placement: "top-center", titleRelation: "below-title" },
1002
1004
  mode: "preview"
1003
1005
  };
1004
- const legendTopSpace = parsed.tagGroups.length > 0 ? getMaxLegendReservedHeight(legendConfig, containerWidth) + LEGEND_FIXED_GAP : 0;
1006
+ const noLegend = legendSuppressed(parsedOptions);
1007
+ const legendTopSpace = parsed.tagGroups.length > 0 && !noLegend ? getMaxLegendReservedHeight(legendConfig, containerWidth) + LEGEND_FIXED_GAP : 0;
1005
1008
  const groupOffset = parsed.groups.length > 0 ? GROUP_PADDING_TOP + GROUP_LABEL_SIZE : 0;
1006
1009
  const participantStartY = sTopMargin + titleOffset + legendTopSpace + sParticipantYOffset + groupOffset;
1007
1010
  const lifelineStartY0 = participantStartY + sBoxH;
@@ -1146,7 +1149,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1146
1149
  }
1147
1150
  let rightMargin = Math.max(rightProjection + 10, sGap / 2);
1148
1151
  let leftMargin = sGap / 2;
1149
- const diagramWidth = participants.length * sGap;
1152
+ const diagramWidth = Math.max(0, participants.length - 1) * sGap;
1150
1153
  let totalWidth = Math.max(
1151
1154
  leftMargin + diagramWidth + rightMargin,
1152
1155
  sBoxW + 40
@@ -1273,7 +1276,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1273
1276
  titleEl.attr("data-line-number", parsed.titleLineNumber);
1274
1277
  }
1275
1278
  }
1276
- const hasTagGroups = parsed.tagGroups.length > 0;
1279
+ const hasTagGroups = parsed.tagGroups.length > 0 && !noLegend;
1277
1280
  const collapsedGroupNames = /* @__PURE__ */ new Set();
1278
1281
  const collapsedGroupMeta = /* @__PURE__ */ new Map();
1279
1282
  for (const group of parsed.groups) {
@@ -1327,7 +1330,7 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1327
1330
  isDark,
1328
1331
  effectiveTagColor,
1329
1332
  pTagAttr,
1330
- solid,
1333
+ fillMode,
1331
1334
  sBoxW,
1332
1335
  sBoxH,
1333
1336
  sLabelTextWidth,
@@ -1551,7 +1554,9 @@ function renderSequenceDiagram(container, parsed, palette, isDark, _onNavigateTo
1551
1554
  const actTagColor = getTagColor(actTagValue);
1552
1555
  const actBaseColor = actTagColor || palette.primary;
1553
1556
  svg.append("rect").attr("x", x).attr("y", y1).attr("width", sActivationWidth).attr("height", y2 - y1).attr("fill", themeBaseBg(palette, isDark));
1554
- const actFill = shapeFill(palette, actBaseColor, isDark, { solid });
1557
+ const actFill = shapeFill(palette, actBaseColor, isDark, {
1558
+ mode: fillMode
1559
+ });
1555
1560
  const actRect = svg.append("rect").attr("x", x).attr("y", y1).attr("width", sActivationWidth).attr("height", y2 - y1).attr("fill", actFill).attr("stroke", actBaseColor).attr("stroke-width", 1).attr("stroke-opacity", 0.5).attr("data-participant-id", act.participantId).attr("data-msg-lines", coveredLines.join(",")).attr("data-line-number", coveredLines[0] ?? "").attr("class", "activation");
1556
1561
  if (tagKey && actTagValue) {
1557
1562
  actRect.attr(`data-tag-${tagKey}`, actTagValue.toLowerCase());
@@ -1789,7 +1794,7 @@ function buildNoteMessageMap(elements) {
1789
1794
  walk(elements);
1790
1795
  return map;
1791
1796
  }
1792
- function renderParticipant(svg, participant, cx, cy, palette, isDark, color, tagAttr, solid, boxW = W, boxH = H, labelTextW = labelTextWidth(W), labelFontSize = LABEL_FONT_SIZE) {
1797
+ function renderParticipant(svg, participant, cx, cy, palette, isDark, color, tagAttr, fillMode, boxW = W, boxH = H, labelTextW = labelTextWidth(W), labelFontSize = LABEL_FONT_SIZE) {
1793
1798
  const g = svg.append("g").attr("transform", `translate(${cx}, ${cy})`).attr("class", "participant").attr("data-participant-id", participant.id);
1794
1799
  if (tagAttr) {
1795
1800
  g.attr(`data-tag-${tagAttr.key}`, tagAttr.value);
@@ -1799,16 +1804,24 @@ function renderParticipant(svg, participant, cx, cy, palette, isDark, color, tag
1799
1804
  renderActorParticipant(g, palette, color, boxH);
1800
1805
  break;
1801
1806
  case "database":
1802
- renderDatabaseParticipant(g, palette, isDark, color, solid, boxW, boxH);
1807
+ renderDatabaseParticipant(
1808
+ g,
1809
+ palette,
1810
+ isDark,
1811
+ color,
1812
+ fillMode,
1813
+ boxW,
1814
+ boxH
1815
+ );
1803
1816
  break;
1804
1817
  case "queue":
1805
- renderQueueParticipant(g, palette, isDark, color, solid, boxW, boxH);
1818
+ renderQueueParticipant(g, palette, isDark, color, fillMode, boxW, boxH);
1806
1819
  break;
1807
1820
  case "cache":
1808
- renderCacheParticipant(g, palette, isDark, color, solid, boxW, boxH);
1821
+ renderCacheParticipant(g, palette, isDark, color, fillMode, boxW, boxH);
1809
1822
  break;
1810
1823
  default:
1811
- renderRectParticipant(g, palette, isDark, color, solid, boxW, boxH);
1824
+ renderRectParticipant(g, palette, isDark, color, fillMode, boxW, boxH);
1812
1825
  break;
1813
1826
  }
1814
1827
  const isActor = participant.type === "actor";
@@ -1820,7 +1833,7 @@ function renderParticipant(svg, participant, cx, cy, palette, isDark, color, tag
1820
1833
  const fontSize = labelFontSize;
1821
1834
  const lineHeight = fontSize + 2;
1822
1835
  const labelFill = isActor ? palette.text : contrastText(
1823
- fill(palette, isDark, color, solid),
1836
+ fill(palette, isDark, color, fillMode),
1824
1837
  palette.textOnFillLight,
1825
1838
  palette.textOnFillDark
1826
1839
  );
@@ -1848,4 +1861,4 @@ export {
1848
1861
  renderSequenceDiagram,
1849
1862
  buildNoteMessageMap
1850
1863
  };
1851
- //# sourceMappingURL=chunk-3YSQZ75W.js.map
1864
+ //# sourceMappingURL=chunk-65V6IRFN.js.map
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  parseDateToken,
3
3
  toInternal
4
- } from "./chunk-RBDIYLA5.js";
4
+ } from "./chunk-DAOFNU6J.js";
5
5
  import {
6
6
  TIMELINE_REGISTRY,
7
7
  splitNameAndMeta,
8
8
  warnUnknownMetaKeys,
9
9
  withTagAliases
10
- } from "./chunk-LV4BETUU.js";
10
+ } from "./chunk-YJVA3QUU.js";
11
11
  import {
12
12
  makeDgmoError
13
- } from "./chunk-CXK4DZH3.js";
13
+ } from "./chunk-4W2PE66Q.js";
14
14
 
15
15
  // src/timeline/parser.ts
16
16
  var TIMELINE_DURATION_RE = /^(\d+(?:\.\d{1,2})?)(min|[dwmyhs])(\?)?$/;
@@ -314,4 +314,4 @@ export {
314
314
  parseTimelineDate,
315
315
  parseTimelineEventLine
316
316
  };
317
- //# sourceMappingURL=chunk-TMACGPW5.js.map
317
+ //# sourceMappingURL=chunk-6AUZPPAV.js.map
@@ -65,7 +65,9 @@ var DIRECTIVES_REGISTRY = [
65
65
  { token: "sprint-length", category: "directive", gantt: ["option"] },
66
66
  { token: "sprint-number", category: "directive", gantt: ["option"] },
67
67
  { token: "sprint-start", category: "directive", gantt: ["option"] },
68
- { token: "solid-fill", category: "directive", gantt: ["boolean"] },
68
+ { token: "fill-tint", category: "directive", gantt: ["boolean"] },
69
+ { token: "fill-solid", category: "directive", gantt: ["boolean"] },
70
+ { token: "fill-outline", category: "directive", gantt: ["boolean"] },
69
71
  // `chart` is a wireframe element keyword (CONTROL); gantt also accepts it as
70
72
  // an option. Highlight family is control.
71
73
  { token: "chart", category: "control", gantt: ["option"] },
@@ -83,7 +85,6 @@ var DIRECTIVES_REGISTRY = [
83
85
  { token: "flow-width", category: "directive", map: true },
84
86
  { token: "locale", category: "directive", map: true },
85
87
  { token: "caption", category: "directive", map: true },
86
- { token: "no-legend", category: "directive", map: true },
87
88
  { token: "no-coastline", category: "directive", map: true },
88
89
  { token: "no-relief", category: "directive", map: true },
89
90
  { token: "no-context-labels", category: "directive", map: true },
@@ -101,6 +102,9 @@ var DIRECTIVES_REGISTRY = [
101
102
  { token: "days", category: "directive", map: true },
102
103
  // ── Shared across types ──────────────────────────────────
103
104
  // `active-tag`: infra top-level option + gantt option + map directive.
105
+ // Treemap also accepts it (§24C.6, decision #48) — validated inline in its
106
+ // parser, so no chart-scoped Set is derived for it; highlighting comes from
107
+ // the global directive category here.
104
108
  {
105
109
  token: "active-tag",
106
110
  category: "directive",
@@ -108,7 +112,9 @@ var DIRECTIVES_REGISTRY = [
108
112
  gantt: ["option"],
109
113
  map: true
110
114
  },
111
- // `title`: gantt option (also a general data-chart directive, hand-listed).
115
+ // `title`: gantt option. (The data-chart `title` directive was removed in
116
+ // decision #48 — it now raises E_TITLE_DIRECTIVE; the token stays here for
117
+ // gantt.)
112
118
  { token: "title", category: "directive", gantt: ["option"] },
113
119
  // `sort`: gantt option (also general, hand-listed).
114
120
  { token: "sort", category: "directive", gantt: ["option"] },
@@ -117,6 +123,11 @@ var DIRECTIVES_REGISTRY = [
117
123
  { token: "lane-by", category: "directive", gantt: ["option"] },
118
124
  // `no-title`: gantt boolean + map directive (also general, hand-listed).
119
125
  { token: "no-title", category: "directive", gantt: ["boolean"], map: true },
126
+ // `no-legend`: universal (decision #48) — every chart that renders a legend
127
+ // accepts it, and charts without one take it as a harmless no-op. Parsed for
128
+ // most types via GLOBAL_BOOLEANS in utils/parsing; gantt derives its boolean
129
+ // Set from here, and map from `map: true`.
130
+ { token: "no-legend", category: "directive", gantt: ["boolean"], map: true },
120
131
  // ══════════════════════════════════════════════════════════
121
132
  // Highlight-only vocab (no extractable parser Set).
122
133
  // ══════════════════════════════════════════════════════════
@@ -128,10 +139,15 @@ var DIRECTIVES_REGISTRY = [
128
139
  { token: "era", category: "directive" },
129
140
  { token: "marker", category: "directive" },
130
141
  { token: "holiday", category: "directive" },
131
- { token: "workweek", category: "directive" },
142
+ // `workweek` is also the canonical weekday-window directive on clock and map
143
+ // clock-cards (decision #48; `days` stays as the legacy alias).
144
+ { token: "workweek", category: "directive", map: true },
132
145
  { token: "no-dependencies", category: "directive" },
133
146
  // ── Tech-radar ───────────────────────────────────────────
134
147
  { token: "rings", category: "directive" },
148
+ // Blip listing is default-on everywhere (decision #48): `no-blip-legend`
149
+ // suppresses it; `show-blip-legend` stays as the parse-accepted legacy no-op.
150
+ { token: "no-blip-legend", category: "directive" },
135
151
  { token: "show-blip-legend", category: "directive" },
136
152
  { token: "trend", category: "directive" },
137
153
  // ── Tags / shared directives ─────────────────────────────
@@ -157,7 +173,13 @@ var DIRECTIVES_REGISTRY = [
157
173
  // ATTRIBUTE_KEYS colon-gate from reclassifying `heat:` as a propertyName. So
158
174
  // `heat` lives only in the reserved-key registry + ATTRIBUTE_KEYS and highlights
159
175
  // as a property in both positions — exactly the treemap `heat` precedent.
176
+ // Box values render by default since decision #48; `show-values` stays as
177
+ // the parse-accepted legacy no-op (suppress with the shared `no-value`).
160
178
  { token: "show-values", category: "directive" },
179
+ // Treemap's legacy plural spelling of the same suppression (decision #48
180
+ // made the shared singular `no-value` canonical). Registered so a legacy
181
+ // document still highlights it as a directive rather than plain text.
182
+ { token: "no-values", category: "directive" },
161
183
  // ── Swimlane ─────────────────────────────────────────────
162
184
  { token: "lane", category: "directive" },
163
185
  // ── ER ───────────────────────────────────────────────────
@@ -240,7 +262,9 @@ var DIRECTIVES_REGISTRY = [
240
262
  { token: "trials", category: "directive" },
241
263
  { token: "seed", category: "directive" },
242
264
  { token: "scrubber-trials", category: "directive" },
243
- { token: "start-date", category: "directive" },
265
+ // `start-date` is also gantt's canonical project-start option (decision #48;
266
+ // bare `start` above stays as the legacy alias).
267
+ { token: "start-date", category: "directive", gantt: ["option"] },
244
268
  { token: "end-date", category: "directive" },
245
269
  // ── Goal ─────────────────────────────────────────────────
246
270
  // Mode flags, value-key leaders, and opt-outs. `now`/`target` collide with
@@ -278,6 +302,12 @@ var DIRECTIVES_REGISTRY = [
278
302
  { token: "backlog", category: "status" },
279
303
  { token: "ready", category: "status" },
280
304
  // ── Modifiers + ER column types/modifiers (MODIFIER) ─────
305
+ // `collapsed` is the bare trailing group-line flag made canonical by
306
+ // decision #48 (`[Fulfillment] collapsed`). It is deliberately a bare
307
+ // MODIFIER rather than a colon key: the legacy `collapsed: true` form still
308
+ // parses and still highlights (as `modifier` instead of `propertyName`),
309
+ // whereas leaving it colon-only left the canonical bare form as plain text.
310
+ { token: "collapsed", category: "modifier" },
281
311
  { token: "as", category: "modifier" },
282
312
  { token: "alias", category: "modifier" },
283
313
  { token: "aka", category: "modifier" },
@@ -359,4 +389,4 @@ export {
359
389
  REGISTRY_MODIFIER_TOKENS,
360
390
  REGISTRY_COLON_KEY_TOKENS
361
391
  };
362
- //# sourceMappingURL=chunk-6H7O2OPM.js.map
392
+ //# sourceMappingURL=chunk-6DCOIN4W.js.map
@@ -1,13 +1,14 @@
1
1
  import {
2
2
  extractColor,
3
+ fillModeFromOptions,
3
4
  measureIndent,
4
5
  parseFirstLine,
5
6
  tryParseSharedOption
6
- } from "./chunk-LV4BETUU.js";
7
+ } from "./chunk-YJVA3QUU.js";
7
8
  import {
8
9
  makeDgmoError,
9
10
  makeFail
10
- } from "./chunk-CXK4DZH3.js";
11
+ } from "./chunk-4W2PE66Q.js";
11
12
 
12
13
  // src/goal/parser.ts
13
14
  function parseGoalNumber(token) {
@@ -19,7 +20,7 @@ function parseGoal(content, palette) {
19
20
  const options = {
20
21
  noPercent: false,
21
22
  noValue: false,
22
- solidFill: false,
23
+ fillMode: void 0,
23
24
  noTitle: false,
24
25
  noAutoColor: false,
25
26
  noNote: false
@@ -108,12 +109,12 @@ function parseGoal(content, palette) {
108
109
  options.noAutoColor = true;
109
110
  continue;
110
111
  }
111
- if (lower === "no-note") {
112
+ if (lower === "no-notes" || lower === "no-note") {
112
113
  options.noNote = true;
113
114
  continue;
114
115
  }
115
116
  if (tryParseSharedOption(trimmed, sharedOpts)) {
116
- if (sharedOpts["solid-fill"] === "on") options.solidFill = true;
117
+ options.fillMode = fillModeFromOptions(sharedOpts);
117
118
  if (sharedOpts["no-title"] === "on") options.noTitle = true;
118
119
  continue;
119
120
  }
@@ -155,4 +156,4 @@ function parseGoal(content, palette) {
155
156
  export {
156
157
  parseGoal
157
158
  };
158
- //# sourceMappingURL=chunk-GTWKD3QT.js.map
159
+ //# sourceMappingURL=chunk-6HTRCTAS.js.map
@@ -13,15 +13,18 @@ import {
13
13
  contrastText,
14
14
  mix,
15
15
  themeBaseBg
16
- } from "./chunk-P6T66CCZ.js";
16
+ } from "./chunk-JYDMBWRP.js";
17
17
  import {
18
18
  resolveTagColor,
19
19
  tagAttrKey
20
- } from "./chunk-467TVMQL.js";
20
+ } from "./chunk-CMVZWP32.js";
21
+ import {
22
+ fillModeFromOptions
23
+ } from "./chunk-YJVA3QUU.js";
21
24
  import {
22
25
  CATEGORICAL_COLOR_ORDER,
23
26
  resolveColor
24
- } from "./chunk-TLVIHFRO.js";
27
+ } from "./chunk-ZKPPI6BF.js";
25
28
 
26
29
  // src/swimlane/renderer.ts
27
30
  import * as d3Selection from "d3-selection";
@@ -124,7 +127,7 @@ function renderSwimlaneForExport(container, parsed, layout, palette, isDark, opt
124
127
  laneColorById.set(lane.id, hex);
125
128
  });
126
129
  const isLR = parsed.direction === "LR";
127
- const solid = parsed.options["solid-fill"] === "on";
130
+ const fillMode = fillModeFromOptions(parsed.options);
128
131
  const laneFill = (hex) => mix(hex, baseBg, 9);
129
132
  const haloAt = (cross) => {
130
133
  for (const band of layout.lanes) {
@@ -173,28 +176,35 @@ function renderSwimlaneForExport(container, parsed, layout, palette, isDark, opt
173
176
  phaseG.append("text").attr("x", isLR ? band.x + band.width / 2 : band.headerSize / 2).attr("y", isLR ? band.headerSize / 2 : band.y + band.height / 2).attr("text-anchor", "middle").attr("dominant-baseline", "middle").attr("font-size", PHASE_LABEL_FONT).attr("font-weight", "700").attr("letter-spacing", "0.06em").attr("fill", palette.textMuted).attr("data-line-number", String(band.lineNumber)).text(band.label);
174
177
  });
175
178
  const activeTag = opts.activeTagGroup ?? null;
179
+ const outline = fillMode === "outline";
176
180
  const nodeFill = (n) => {
177
181
  if (activeTag) {
178
182
  const key = tagAttrKey(activeTag);
179
183
  if (n.tags[key]) {
180
184
  const c = resolveTagColor(n.tags, [...parsed.tagGroups], activeTag);
181
185
  if (c && c !== "#999999")
182
- return { fill: solid ? c : mix(c, baseBg, 22), stroke: c };
186
+ return {
187
+ fill: fillMode === "solid" ? c : outline ? baseBg : mix(c, baseBg, 22),
188
+ stroke: c
189
+ };
183
190
  }
184
191
  }
185
192
  if (n.shape === "terminal") {
186
193
  if (n.event === "error")
187
194
  return {
188
- fill: solid ? ev.error : mix(ev.error, baseBg, 22),
195
+ fill: fillMode === "solid" ? ev.error : outline ? baseBg : mix(ev.error, baseBg, 22),
189
196
  stroke: ev.error
190
197
  };
191
198
  if (n.event === "success")
192
199
  return {
193
- fill: solid ? ev.success : mix(ev.success, baseBg, 22),
200
+ fill: fillMode === "solid" ? ev.success : outline ? baseBg : mix(ev.success, baseBg, 22),
194
201
  stroke: ev.success
195
202
  };
196
203
  if (n.event === "terminate")
197
- return { fill: mix(palette.text, baseBg, 30), stroke: palette.text };
204
+ return {
205
+ fill: outline ? baseBg : mix(palette.text, baseBg, 30),
206
+ stroke: palette.text
207
+ };
198
208
  return { fill: palette.bg, stroke: palette.textMuted };
199
209
  }
200
210
  if (n.shape === "exclusive" || n.shape === "parallel") {
@@ -205,8 +215,8 @@ function renderSwimlaneForExport(container, parsed, layout, palette, isDark, opt
205
215
  }
206
216
  const hex = laneColorById.get(n.lane) ?? palette.border;
207
217
  return {
208
- fill: solid ? hex : mix(hex, baseBg, 20),
209
- stroke: mix(hex, palette.text, 40)
218
+ fill: fillMode === "solid" ? hex : outline ? baseBg : mix(hex, baseBg, 20),
219
+ stroke: outline ? hex : mix(hex, palette.text, 40)
210
220
  };
211
221
  };
212
222
  const nodeById = new Map(layout.nodes.map((n) => [n.id, n]));
@@ -391,4 +401,4 @@ function drawCenteredLabel(g, label, cx, cy, fill, fontSize, tight = false, halo
391
401
  export {
392
402
  renderSwimlaneForExport
393
403
  };
394
- //# sourceMappingURL=chunk-VB4UJ3H2.js.map
404
+ //# sourceMappingURL=chunk-6KY7OCZC.js.map
@@ -13,7 +13,7 @@ import {
13
13
  LEGEND_TOGGLE_DOT_R,
14
14
  measureLegendText,
15
15
  truncateLegendText
16
- } from "./chunk-QOOUC2J5.js";
16
+ } from "./chunk-4RGZFA7H.js";
17
17
 
18
18
  // src/utils/number-format.ts
19
19
  function compactNumber(n) {
@@ -545,4 +545,4 @@ export {
545
545
  getLegendReservedHeight,
546
546
  getMaxLegendReservedHeight
547
547
  };
548
- //# sourceMappingURL=chunk-YAA6IID3.js.map
548
+ //# sourceMappingURL=chunk-774C2FF3.js.map
@@ -7,23 +7,27 @@ import {
7
7
  } from "./chunk-YYVTBZZC.js";
8
8
  import {
9
9
  renderIntegratedLegend
10
- } from "./chunk-OU7HLO7I.js";
10
+ } from "./chunk-W5KMNC5U.js";
11
11
  import {
12
12
  getMaxLegendReservedHeight
13
- } from "./chunk-YAA6IID3.js";
13
+ } from "./chunk-774C2FF3.js";
14
14
  import {
15
15
  FONT_FAMILY
16
16
  } from "./chunk-6KFWC4CO.js";
17
+ import {
18
+ contrastText,
19
+ mix,
20
+ shapeFill
21
+ } from "./chunk-JYDMBWRP.js";
17
22
  import {
18
23
  measureText,
19
24
  truncateText,
20
25
  wrapTextToWidth
21
- } from "./chunk-WCT3NYCV.js";
26
+ } from "./chunk-4ASYQ347.js";
22
27
  import {
23
- contrastText,
24
- mix,
25
- shapeFill
26
- } from "./chunk-P6T66CCZ.js";
28
+ fillModeFromOptions,
29
+ legendSuppressed
30
+ } from "./chunk-YJVA3QUU.js";
27
31
 
28
32
  // src/tech-radar/renderer.ts
29
33
  import * as d3Selection2 from "d3-selection";
@@ -440,7 +444,7 @@ function clearDim(root) {
440
444
  function renderHtmlPanel(panel, parsed, quadrant, qColor, palette, isDark, rootContainer, onClickItem) {
441
445
  const ringOrder = parsed.rings.map((r) => r.name);
442
446
  const fillColor = shapeFill(palette, qColor, isDark, {
443
- solid: parsed.options["solid-fill"] === "on"
447
+ mode: fillModeFromOptions(parsed.options)
444
448
  });
445
449
  let expandedLineNum = null;
446
450
  function render() {
@@ -819,7 +823,7 @@ function renderQuarterCircleStatic(svg, parsed, quadrant, qColor, palette, isDar
819
823
  function renderStaticHtmlPanel(panel, parsed, quadrant, qColor, palette, isDark) {
820
824
  const ringOrder = parsed.rings.map((r) => r.name);
821
825
  const fillColor = shapeFill(palette, qColor, isDark, {
822
- solid: parsed.options["solid-fill"] === "on"
826
+ mode: fillModeFromOptions(parsed.options)
823
827
  });
824
828
  for (const ringName of ringOrder) {
825
829
  const blips = quadrant.blips.filter((b) => b.ring === ringName);
@@ -932,8 +936,8 @@ function renderTechRadar(container, parsed, palette, isDark, onClickItem, export
932
936
  );
933
937
  return;
934
938
  }
935
- const directiveOn = parsed.options["show-blip-legend"] === "on";
936
- const showListing = exportDims ? true : options?.showListing ?? directiveOn;
939
+ const directiveOff = parsed.options["no-blip-legend"] === "on";
940
+ const showListing = exportDims ? !directiveOff : options?.showListing ?? !directiveOff;
937
941
  const init = initRadarSvg(container, palette, exportDims);
938
942
  if (!init) return;
939
943
  const { svg, width, height, textColor, mutedColor } = init;
@@ -965,7 +969,7 @@ function renderTechRadar(container, parsed, palette, isDark, onClickItem, export
965
969
  svg.append("text").attr("x", radarWidth / 2).attr("y", titleY).attr("text-anchor", "middle").attr("fill", textColor).attr("font-family", FONT_FAMILY).attr("font-size", sTitleFontSize).attr("font-weight", "bold").text(parsed.title);
966
970
  }
967
971
  let legendReservedHeight = 0;
968
- if (!exportDims && options?.onToggleListing) {
972
+ if (!exportDims && options?.onToggleListing && !legendSuppressed(parsed.options)) {
969
973
  const legendY = showTitle ? titleY + 8 : 4;
970
974
  const legendG = svg.append("g").attr("transform", `translate(0, ${legendY})`);
971
975
  const legendConfig = {
@@ -1173,7 +1177,7 @@ function renderTechRadar(container, parsed, palette, isDark, onClickItem, export
1173
1177
  // Tech-radar opts out of solid-fill: blip popover stays in tinted
1174
1178
  // form so it reads consistently against the radar bg regardless of
1175
1179
  // the diagram's option setting.
1176
- false
1180
+ void 0
1177
1181
  );
1178
1182
  showBlipHighlight(lineNum, bx, by, blipGroup);
1179
1183
  }).on("mousemove", (event) => {
@@ -1202,7 +1206,7 @@ function renderTechRadar(container, parsed, palette, isDark, onClickItem, export
1202
1206
  // Tech-radar opts out of solid-fill: blip popover stays in tinted
1203
1207
  // form so it reads consistently against the radar bg regardless of
1204
1208
  // the diagram's option setting.
1205
- false
1209
+ void 0
1206
1210
  );
1207
1211
  popover.style.pointerEvents = "auto";
1208
1212
  showBlipHighlight(lineNum, bx, by, blipGroup);
@@ -1246,7 +1250,7 @@ function renderTechRadar(container, parsed, palette, isDark, onClickItem, export
1246
1250
  // Tech-radar opts out of solid-fill: blip popover stays in tinted
1247
1251
  // form so it reads consistently against the radar bg regardless of
1248
1252
  // the diagram's option setting.
1249
- false
1253
+ void 0
1250
1254
  );
1251
1255
  }
1252
1256
  const lineNum = String(blip.lineNumber);
@@ -1440,10 +1444,8 @@ function createBlipPopover(container, _palette, isDark) {
1440
1444
  container.appendChild(el);
1441
1445
  return el;
1442
1446
  }
1443
- function showBlipPopover(popover, blip, qColor, palette, isDark, event, solid) {
1444
- const fillColor = shapeFill(palette, qColor, isDark, {
1445
- ...solid !== void 0 && { solid }
1446
- });
1447
+ function showBlipPopover(popover, blip, qColor, palette, isDark, event, fillMode) {
1448
+ const fillColor = shapeFill(palette, qColor, isDark, { mode: fillMode });
1447
1449
  const hasDesc = blip.description.length > 0;
1448
1450
  const onFillText = contrastText(
1449
1451
  fillColor,
@@ -1601,4 +1603,4 @@ export {
1601
1603
  renderTechRadar,
1602
1604
  renderTechRadarForExport
1603
1605
  };
1604
- //# sourceMappingURL=chunk-WJ7RW65H.js.map
1606
+ //# sourceMappingURL=chunk-7GUF6SDR.js.map
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-6KFWC4CO.js";
9
9
  import {
10
10
  getSeriesColors
11
- } from "./chunk-P6T66CCZ.js";
11
+ } from "./chunk-JYDMBWRP.js";
12
12
  import {
13
13
  resolveColor
14
- } from "./chunk-TLVIHFRO.js";
14
+ } from "./chunk-ZKPPI6BF.js";
15
15
 
16
16
  // src/version-control/renderer.ts
17
17
  import * as d3Selection from "d3-selection";
@@ -399,4 +399,4 @@ export {
399
399
  renderVersionControl,
400
400
  renderVersionControlForExport
401
401
  };
402
- //# sourceMappingURL=chunk-QYTPPDAO.js.map
402
+ //# sourceMappingURL=chunk-7JDTNFAK.js.map