@diagrammo/dgmo 0.96.0 → 0.98.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 (264) hide show
  1. package/dist/advanced.d.ts +178 -8
  2. package/dist/advanced.js +232 -246
  3. package/dist/block.d.ts +8 -0
  4. package/dist/block.js +138 -66
  5. package/dist/{calculator-GIB7POFX.js → calculator-CIGGTURF.js} +2 -2
  6. package/dist/{chart-meta-uImk4eTn.d.ts → chart-meta-B7niEd52.d.ts} +3 -1
  7. package/dist/chart-meta.d.ts +2 -2
  8. package/dist/chart-meta.js +19 -19
  9. package/dist/{chart-types-CBVYiLqy.d.ts → chart-types-Dxtv4XSz.d.ts} +3 -0
  10. package/dist/{charts-d3-IRP5VANE.js → charts-d3-INWEGMSD.js} +14 -14
  11. package/dist/{chunk-VLI6AWS3.js → chunk-3C4OXVZJ.js} +2 -2
  12. package/dist/{chunk-I3ZRIMR7.js → chunk-3EDV56HL.js} +15 -15
  13. package/dist/{chunk-OO4GUE4E.js → chunk-3F74NDUY.js} +63 -18
  14. package/dist/{chunk-RGFVHYDP.js → chunk-3IUMSK72.js} +2 -2
  15. package/dist/chunk-42AZPI2W.js +150 -0
  16. package/dist/{chunk-H7AXCRO7.js → chunk-453IWXZ3.js} +0 -11
  17. package/dist/{chunk-FHX373L5.js → chunk-47INRTZ6.js} +2 -2
  18. package/dist/{chunk-IN7XI6NO.js → chunk-4NMRS6HW.js} +1 -1
  19. package/dist/{chunk-JBAFAKGX.js → chunk-4PZP6URA.js} +41 -51
  20. package/dist/{chunk-5LG526X7.js → chunk-5TGZBHEJ.js} +1 -1
  21. package/dist/{chunk-BD4O4D2A.js → chunk-5WZYJC2P.js} +2 -2
  22. package/dist/{chunk-DPNSDCR3.js → chunk-65JFUANT.js} +1 -1
  23. package/dist/{chunk-EZ6BI5LL.js → chunk-6OUMYNAJ.js} +1 -1
  24. package/dist/{chunk-U6N547QA.js → chunk-6PUBFB6D.js} +24 -3
  25. package/dist/{chunk-IKXQ6NVR.js → chunk-6Q46GMKH.js} +21 -58
  26. package/dist/{chunk-DKCVAQU3.js → chunk-6YRTBI2F.js} +53 -75
  27. package/dist/{chunk-RTRORHSP.js → chunk-7QKWU7FX.js} +3 -3
  28. package/dist/{chunk-A6YINTY6.js → chunk-7RACGVUY.js} +1 -1
  29. package/dist/{chunk-H7RQG4PH.js → chunk-A3N4UHHL.js} +2 -2
  30. package/dist/{chunk-UNCCZ3NU.js → chunk-A3V72YIL.js} +14 -1
  31. package/dist/chunk-AHUBG6GR.js +188 -0
  32. package/dist/{chunk-P3PSLC2K.js → chunk-AULFF7L2.js} +2 -2
  33. package/dist/{chunk-SCYVGPLI.js → chunk-B7ZH5EQ2.js} +2 -2
  34. package/dist/{chunk-TUOZ6AXC.js → chunk-BTFB7W5Z.js} +16 -4
  35. package/dist/{chunk-THTYCJGF.js → chunk-BWVJTYTJ.js} +4 -4
  36. package/dist/{chunk-VGAMBOOC.js → chunk-C6ME2L4T.js} +2 -2
  37. package/dist/{chunk-H7JVKUA5.js → chunk-CES7REQM.js} +44 -60
  38. package/dist/{chunk-B2YVZ3QU.js → chunk-CGP7RGLJ.js} +1 -1
  39. package/dist/{chunk-34JOHSVE.js → chunk-CUTEHGXO.js} +2 -2
  40. package/dist/{chunk-NERQSSYD.js → chunk-D67YE4LR.js} +1 -1
  41. package/dist/{chunk-TPCP2UOI.js → chunk-D6XR22KO.js} +3 -3
  42. package/dist/{chunk-OAZ6BIIB.js → chunk-D7FHY6DO.js} +9 -7
  43. package/dist/{chunk-67N26CER.js → chunk-DA2GIHAY.js} +38 -5
  44. package/dist/{chunk-PGD6CNWO.js → chunk-DFEVFLEG.js} +3 -3
  45. package/dist/{chunk-VVTCUIPN.js → chunk-DKMZ4VMV.js} +1 -1
  46. package/dist/{chunk-VJ7NLYFE.js → chunk-DYI73PFY.js} +3 -3
  47. package/dist/{chunk-IQZSKWE5.js → chunk-E6GHXMH2.js} +8 -8
  48. package/dist/{chunk-I2I2FKAK.js → chunk-EBJLT7PH.js} +1 -1
  49. package/dist/{chunk-K2SFH3GJ.js → chunk-ENXENGW5.js} +3 -3
  50. package/dist/{chunk-FKJWZWNU.js → chunk-EUPUVYWO.js} +1 -1
  51. package/dist/{chunk-26EVL454.js → chunk-F4DGHT3F.js} +20 -0
  52. package/dist/{chunk-WLGOIMTI.js → chunk-FDVUD3PR.js} +4 -4
  53. package/dist/{chunk-IU7XKZA6.js → chunk-FK6HZYGK.js} +4 -14
  54. package/dist/{chunk-67RKJEKF.js → chunk-FTRW6YGU.js} +35 -11
  55. package/dist/{chunk-2M3K6GD2.js → chunk-FTW2E2YH.js} +6 -6
  56. package/dist/{chunk-5P2L5QXE.js → chunk-FZVCS2XY.js} +4 -2
  57. package/dist/chunk-G24NSISJ.js +69 -0
  58. package/dist/{chunk-4B45SNZH.js → chunk-G36XKXWT.js} +17 -15
  59. package/dist/{chunk-5H7SA5ZD.js → chunk-GFQFLLP3.js} +2 -2
  60. package/dist/{chunk-MAYTYF5S.js → chunk-GMJBBFKC.js} +3 -3
  61. package/dist/{chunk-5BG4OSWJ.js → chunk-GNQYARON.js} +20 -57
  62. package/dist/{chunk-RVOSA4RR.js → chunk-GNWCMWTO.js} +441 -267
  63. package/dist/{chunk-VLC6WNRD.js → chunk-GULGSH2Z.js} +4 -0
  64. package/dist/{chunk-H5NVCOEJ.js → chunk-GXBH7WNN.js} +2 -2
  65. package/dist/{chunk-7UWVHNPM.js → chunk-H242TVAE.js} +9 -9
  66. package/dist/{chunk-CD7VQCDL.js → chunk-H7XXQSYA.js} +63 -53
  67. package/dist/{chunk-GLCMUTO5.js → chunk-HQNZJMNS.js} +1 -1
  68. package/dist/{chunk-WTPS73RM.js → chunk-II6D6NWX.js} +8 -8
  69. package/dist/{chunk-3W73ZP6W.js → chunk-IMBFWXHF.js} +3 -3
  70. package/dist/{chunk-5ARANBIE.js → chunk-IUFTAFGN.js} +2 -2
  71. package/dist/{chunk-AQRSEQZV.js → chunk-IZEKHIV6.js} +3 -3
  72. package/dist/{chunk-WGNP5ND2.js → chunk-J3YM6RA5.js} +3 -3
  73. package/dist/{chunk-YFIUABSF.js → chunk-J467QBZF.js} +23 -3
  74. package/dist/{chunk-EPDBWATV.js → chunk-K7RRXZHS.js} +4 -2
  75. package/dist/{chunk-TIPNNOZC.js → chunk-KKJG3LBY.js} +41 -19
  76. package/dist/{chunk-YVIPJGFG.js → chunk-KMB754DO.js} +33 -6
  77. package/dist/chunk-KNKZGRRB.js +439 -0
  78. package/dist/{chunk-SIABEREK.js → chunk-KTGJQJB3.js} +2 -2
  79. package/dist/{chunk-LGUFJ7Y2.js → chunk-KW3CC7SB.js} +1 -1
  80. package/dist/{chunk-ITDF3MWD.js → chunk-L3K5O3Z5.js} +3 -3
  81. package/dist/{chunk-NI4L6HEU.js → chunk-LZATSXAA.js} +1 -1
  82. package/dist/{chunk-EPB3UEMD.js → chunk-NBISN6FH.js} +2 -2
  83. package/dist/{chunk-VNAPEZX2.js → chunk-NHN6GBG7.js} +1 -1
  84. package/dist/{chunk-EM5SA7NC.js → chunk-NQFZ7LXC.js} +4 -4
  85. package/dist/chunk-NTDWVTEY.js +12 -0
  86. package/dist/{chunk-ZBOIYC2G.js → chunk-NXOIH5JK.js} +8 -13
  87. package/dist/{chunk-AUXUNV73.js → chunk-O3HRF25Z.js} +1 -1
  88. package/dist/{chunk-KDWEOT54.js → chunk-O5APWRZN.js} +192 -230
  89. package/dist/{chunk-GLL237AP.js → chunk-OSSA5UWA.js} +3 -3
  90. package/dist/{chunk-UOCWYLYT.js → chunk-OZXKW5NA.js} +1 -1
  91. package/dist/{chunk-QEU6VM4O.js → chunk-PLQZJZ2K.js} +1 -1
  92. package/dist/chunk-PRG7NIUU.js +272 -0
  93. package/dist/{chunk-CP73WWLN.js → chunk-PRYAVMU6.js} +48 -14
  94. package/dist/{chunk-KAO7JL4I.js → chunk-PU5X3P3T.js} +6 -5
  95. package/dist/{chunk-B7BSRVNC.js → chunk-PZ5LAAO3.js} +2 -2
  96. package/dist/{chunk-TOHTKLKE.js → chunk-Q5Q5JLRT.js} +1 -1
  97. package/dist/{chunk-MVUNMJKO.js → chunk-Q6OKTHYL.js} +71 -57
  98. package/dist/{chunk-ZOKD5F7M.js → chunk-QDPTOIG7.js} +5 -5
  99. package/dist/{chunk-2BYFNZVM.js → chunk-QGSQ2LMB.js} +57 -15
  100. package/dist/{chunk-ERT7XDQW.js → chunk-QIITSGI5.js} +1 -1
  101. package/dist/{chunk-K2WXMXI2.js → chunk-QLIZ7SB7.js} +1 -1
  102. package/dist/{chunk-P6LKX3IQ.js → chunk-QOLRTPGH.js} +6 -6
  103. package/dist/{chunk-FBK32S4D.js → chunk-R4SXMBGF.js} +1 -1
  104. package/dist/chunk-R4U7IIRX.js +178 -0
  105. package/dist/{chunk-DWMQ24JR.js → chunk-RC6PISCK.js} +4 -2
  106. package/dist/{chunk-R5L5E3TC.js → chunk-REKLKGR6.js} +3 -3
  107. package/dist/{chunk-FUYEXLAN.js → chunk-RFGQDIOI.js} +837 -220
  108. package/dist/{chunk-W5MMPPGX.js → chunk-ROFSIFSY.js} +4 -4
  109. package/dist/{chunk-JCC3B2GS.js → chunk-ROH4LYBL.js} +65 -21
  110. package/dist/{chunk-MYHR3PMH.js → chunk-S5VZLZUQ.js} +7 -7
  111. package/dist/{chunk-JRN2CRXJ.js → chunk-TDUBTDXS.js} +1 -1
  112. package/dist/{chunk-IZFJZCF6.js → chunk-TGQQD2KC.js} +84 -16
  113. package/dist/{chunk-GM2SLMQW.js → chunk-TMB4YY3J.js} +34 -4
  114. package/dist/{chunk-HH3DHNQA.js → chunk-UWWQECLC.js} +2 -2
  115. package/dist/{chunk-HZX4QZGR.js → chunk-V65EDV6S.js} +3 -3
  116. package/dist/{chunk-OYGJZA24.js → chunk-VHVQT4EW.js} +39 -19
  117. package/dist/{chunk-KQAPFIYF.js → chunk-VQWLASDC.js} +2 -2
  118. package/dist/chunk-VTGGPBLW.js +14 -0
  119. package/dist/{chunk-LRHPBWOY.js → chunk-VUBCCY65.js} +32 -69
  120. package/dist/{chunk-JILEYZ2V.js → chunk-VVL2KKG4.js} +1 -1
  121. package/dist/{chunk-D7DGLJ7N.js → chunk-VVZDBUHA.js} +2 -2
  122. package/dist/{chunk-B5CEV7IR.js → chunk-VYEIMHL5.js} +38 -14
  123. package/dist/{chunk-XCKNFFKM.js → chunk-WH6E6SHC.js} +2 -4
  124. package/dist/{chunk-P2GNNEMN.js → chunk-WPYJAHRP.js} +1 -1
  125. package/dist/{chunk-RIK6WUMO.js → chunk-XCYGOCMS.js} +43 -26
  126. package/dist/{chunk-PWZEJNO6.js → chunk-XMUFXJI2.js} +6 -6
  127. package/dist/{chunk-5G4DOOX2.js → chunk-XPOEE2RW.js} +9 -5
  128. package/dist/{chunk-EMGNCG5C.js → chunk-XZGXVN4T.js} +5 -5
  129. package/dist/{chunk-BUVLLK3D.js → chunk-Y24QPREP.js} +27 -17
  130. package/dist/{chunk-GEHK4UD5.js → chunk-YCIOLYWL.js} +92 -23
  131. package/dist/{chunk-V2NQV7VL.js → chunk-YFIDR7JH.js} +2 -2
  132. package/dist/{chunk-6XLMTAEX.js → chunk-YIHRLY55.js} +33 -6
  133. package/dist/{chunk-CYRB2JTN.js → chunk-YLKPRT6U.js} +1 -1
  134. package/dist/{chunk-KMU65FYM.js → chunk-YSDSFXQD.js} +1 -1
  135. package/dist/{chunk-M4ZUIW3J.js → chunk-Z6V73LD6.js} +3 -3
  136. package/dist/{chunk-ZI6WC24V.js → chunk-ZBJV4KNU.js} +1 -1
  137. package/dist/{chunk-YSGOXZBB.js → chunk-ZMVMGZAJ.js} +1 -1
  138. package/dist/{chunk-O2HNVNKO.js → chunk-ZTKO2RD4.js} +5 -5
  139. package/dist/{chunk-5GU6C5WB.js → chunk-ZXPSNBZC.js} +3 -3
  140. package/dist/collapse-6IGH2B24.js +31 -0
  141. package/dist/collapse-GOWNCVHZ.js +7 -0
  142. package/dist/collapse-HNTPLB2Q.js +11 -0
  143. package/dist/collapse-NUM7DPJA.js +10 -0
  144. package/dist/completion-registry.js +27 -4
  145. package/dist/dgmo-router-RXV7BNPN.js +101 -0
  146. package/dist/dimensions-KXAI7U2B.js +21 -0
  147. package/dist/editor.js +882 -215
  148. package/dist/{flowchart-parser-SM5LHF2D.js → flowchart-parser-JAZRKKKJ.js} +5 -5
  149. package/dist/flowchart-renderer-JED3RESY.js +40 -0
  150. package/dist/fold-at-line-DmSAa1eU.d.ts +11 -0
  151. package/dist/highlight.js +883 -216
  152. package/dist/index.d.ts +52 -5
  153. package/dist/index.js +79 -63
  154. package/dist/{layout-LNVIH45F.js → layout-6QXAC2WA.js} +7 -6
  155. package/dist/{layout-2WESJYRE.js → layout-7E7BNOGO.js} +3 -2
  156. package/dist/layout-BSK374N6.js +11 -0
  157. package/dist/{layout-FCFUVCRI.js → layout-DJOZCSAP.js} +10 -10
  158. package/dist/{layout-R6G4MEO3.js → layout-FJDBY3WG.js} +5 -5
  159. package/dist/{layout-H2KP5A6M.js → layout-GC5XX2RH.js} +2 -2
  160. package/dist/{layout-KELSNWBD.js → layout-LCHMEGTV.js} +10 -10
  161. package/dist/{layout-PPIVGJXD.js → layout-ROI5KVSO.js} +3 -3
  162. package/dist/{layout-3TSVAGWH.js → layout-SPPS225I.js} +3 -3
  163. package/dist/{layout-AF4KA5B2.js → layout-VHBM32OD.js} +6 -6
  164. package/dist/{layout-HF3PMI4H.js → layout-VTGOYGRC.js} +2 -2
  165. package/dist/layout-WTHBGTH2.js +15 -0
  166. package/dist/layout-ZCCABSV7.js +15 -0
  167. package/dist/{layout-MPSH3YWE.js → layout-ZDMJL4KO.js} +10 -10
  168. package/dist/{layout-search-C2TYUH4L.js → layout-search-UZYZE4PR.js} +8 -8
  169. package/dist/{legend-constants-55MFBXYF.js → legend-constants-KF3MKWL2.js} +2 -2
  170. package/dist/{parser-6WURFLOB.js → parser-3KMY23A2.js} +3 -3
  171. package/dist/{parser-DGLKH4NT.js → parser-3PMYAVFL.js} +2 -2
  172. package/dist/{parser-OHBBDCG4.js → parser-5KVFS4RN.js} +2 -2
  173. package/dist/{parser-QWTECQEC.js → parser-ASXY2CPV.js} +6 -6
  174. package/dist/{parser-UHKROC7Z.js → parser-BA43YPIQ.js} +3 -3
  175. package/dist/{parser-F75WNYMK.js → parser-CFAYEWLF.js} +3 -3
  176. package/dist/{parser-MWINQNQW.js → parser-DRFEX6OX.js} +3 -3
  177. package/dist/{parser-W6NX3AIV.js → parser-DWVBRBB2.js} +3 -3
  178. package/dist/{parser-DRUGM3R6.js → parser-FWQY3HJX.js} +2 -2
  179. package/dist/{parser-4GHAYZKZ.js → parser-GBB5MYAN.js} +6 -6
  180. package/dist/{parser-GBQY3WOZ.js → parser-GMCXCJSP.js} +3 -3
  181. package/dist/{parser-BPYHIG24.js → parser-IHFHPFL7.js} +3 -3
  182. package/dist/{parser-TTGZYLYD.js → parser-JQGUTDSX.js} +3 -3
  183. package/dist/{parser-BNRX35NT.js → parser-JRKPOO2Z.js} +3 -3
  184. package/dist/{parser-B7SCN7FG.js → parser-KI2XYB2R.js} +2 -2
  185. package/dist/parser-LDVVBP7S.js +12 -0
  186. package/dist/{parser-L7SI3PW4.js → parser-MAGFK6OK.js} +4 -4
  187. package/dist/{parser-722KLLAQ.js → parser-MH5BDN7X.js} +3 -3
  188. package/dist/{parser-5RUD4A3X.js → parser-MUHFEM4G.js} +3 -3
  189. package/dist/{parser-Y7QXD2UR.js → parser-P375HO7Q.js} +2 -2
  190. package/dist/{parser-LUJX7AXO.js → parser-PYY5BRLQ.js} +2 -2
  191. package/dist/parser-QEMFMVF5.js +12 -0
  192. package/dist/{parser-WIKXZP4X.js → parser-QIPDBT5M.js} +2 -2
  193. package/dist/{parser-2AXU2MHJ.js → parser-RNBDDEGL.js} +3 -3
  194. package/dist/{parser-H6HT2WFQ.js → parser-SGX2PVR5.js} +2 -2
  195. package/dist/{parser-ZWWQZ4XZ.js → parser-SJUEFKNM.js} +3 -3
  196. package/dist/{parser-4BOP77CD.js → parser-UMNBPXG2.js} +2 -2
  197. package/dist/{parser-GM5B2EPW.js → parser-WE4VSBBY.js} +3 -3
  198. package/dist/{parser-XEJP37GQ.js → parser-WKEYS7N3.js} +3 -3
  199. package/dist/{parser-DWV2CYBS.js → parser-WPXUUNA2.js} +3 -3
  200. package/dist/{parser-5HQPPVHJ.js → parser-XP3RCOTN.js} +3 -3
  201. package/dist/{parser-F3JJNIFC.js → parser-YV4RBHG7.js} +3 -3
  202. package/dist/{parser-CRJYLOHA.js → parser-YZ3J542U.js} +2 -2
  203. package/dist/{parser-ZV756RMP.js → parser-ZSBMGGTD.js} +6 -6
  204. package/dist/renderer-37LMEGLD.js +26 -0
  205. package/dist/{renderer-TS5NHOQD.js → renderer-3EIZRVO3.js} +12 -11
  206. package/dist/renderer-4LK2RFHD.js +28 -0
  207. package/dist/{renderer-BYLQ37T2.js → renderer-4WD4ZIEH.js} +16 -15
  208. package/dist/renderer-67PNYODC.js +32 -0
  209. package/dist/{renderer-GKY55M4Z.js → renderer-6O5SV5YE.js} +10 -10
  210. package/dist/{renderer-VNJOZPSH.js → renderer-6VBL2DWH.js} +17 -17
  211. package/dist/{renderer-F7YGMEGQ.js → renderer-7OXMSF4R.js} +4 -4
  212. package/dist/{renderer-6HU44IGJ.js → renderer-A36NL2SS.js} +8 -8
  213. package/dist/renderer-CC6O6GQK.js +18 -0
  214. package/dist/renderer-CUEMI3PI.js +85 -0
  215. package/dist/{renderer-QZJZIAT3.js → renderer-D6BEC6LI.js} +6 -4
  216. package/dist/{renderer-5GP7YUS4.js → renderer-DT2PP7NJ.js} +7 -6
  217. package/dist/{renderer-MGF2NNGG.js → renderer-E7LC7HCU.js} +5 -5
  218. package/dist/{renderer-PEJF6R2I.js → renderer-F3JYZERE.js} +4 -4
  219. package/dist/{renderer-CVCCW7UT.js → renderer-FAFSRFGR.js} +9 -9
  220. package/dist/renderer-GHYW6Y3A.js +27 -0
  221. package/dist/{renderer-VUXAAGUG.js → renderer-HRUKL4T6.js} +12 -11
  222. package/dist/renderer-INQMQPNN.js +22 -0
  223. package/dist/{renderer-LJPUCG3U.js → renderer-KOPJ76GS.js} +10 -10
  224. package/dist/renderer-KVC7Z4T2.js +39 -0
  225. package/dist/{renderer-MVBAQP3M.js → renderer-MYKL6VG6.js} +6 -6
  226. package/dist/{renderer-D6EH5UQ6.js → renderer-QVUPRQ4L.js} +13 -12
  227. package/dist/{renderer-SYRH3B62.js → renderer-RBAMFLZQ.js} +14 -13
  228. package/dist/{renderer-YJVQT7QG.js → renderer-S6L3JR6C.js} +11 -11
  229. package/dist/{renderer-ONENGXFQ.js → renderer-SGRZKIMS.js} +14 -12
  230. package/dist/{renderer-NOYLNVTI.js → renderer-SYWVZ4CY.js} +3 -3
  231. package/dist/{renderer-66NCRXSC.js → renderer-TJPBVNVG.js} +14 -11
  232. package/dist/renderer-WK2BPXND.js +41 -0
  233. package/dist/renderer-ZG7WOBBN.js +30 -0
  234. package/dist/{renderer-N6PM5CSG.js → renderer-ZRPL5COW.js} +14 -13
  235. package/dist/{renderer-2V2XY2V7.js → renderer-ZTHXOBXW.js} +8 -8
  236. package/dist/{renderer-radial-4R7AKETK.js → renderer-radial-FC25BDCZ.js} +8 -8
  237. package/dist/{state-parser-EQBBEKHR.js → state-parser-LSFAJFMV.js} +6 -6
  238. package/dist/state-renderer-QTDBFB4F.js +43 -0
  239. package/dist/{themes-CbJL3w8L.d.ts → themes-DoLdhUXV.d.ts} +1 -1
  240. package/docs/ai-integration.md +4 -3
  241. package/docs/language-reference.md +100 -14
  242. package/gallery/fixtures/swot-relabel.dgmo +19 -0
  243. package/gallery/fixtures/swot-tags.dgmo +16 -0
  244. package/gallery/fixtures/swot.dgmo +13 -0
  245. package/package.json +1 -1
  246. package/dist/chunk-R2K5L4UA.js +0 -49
  247. package/dist/collapse-TCVK3RPO.js +0 -8
  248. package/dist/dgmo-router-EPBQKQW2.js +0 -100
  249. package/dist/dimensions-DBCRBZIU.js +0 -21
  250. package/dist/flowchart-renderer-PPS2GTTD.js +0 -40
  251. package/dist/layout-3J72UULM.js +0 -15
  252. package/dist/layout-IXQNVRBE.js +0 -15
  253. package/dist/layout-VDCJOZSH.js +0 -11
  254. package/dist/parser-HM6FEX5K.js +0 -14
  255. package/dist/renderer-2MCV75JQ.js +0 -41
  256. package/dist/renderer-5AEDVLAA.js +0 -31
  257. package/dist/renderer-7C76HP5W.js +0 -30
  258. package/dist/renderer-7RAMBMTH.js +0 -22
  259. package/dist/renderer-E3334XLT.js +0 -84
  260. package/dist/renderer-LFZKG2GR.js +0 -26
  261. package/dist/renderer-MZIWP55B.js +0 -28
  262. package/dist/renderer-N75E3UVY.js +0 -25
  263. package/dist/renderer-VNUDN6F5.js +0 -39
  264. package/dist/state-renderer-SOGZ2CNN.js +0 -42
package/dist/editor.js CHANGED
@@ -4,12 +4,16 @@ import { LRLanguage, LanguageSupport } from "@codemirror/language";
4
4
  // src/editor/dgmo.grammar.js
5
5
  import { LRParser } from "@lezer/lr";
6
6
 
7
+ // src/editor/tokens.ts
8
+ import { ContextTracker } from "@lezer/lr";
9
+
7
10
  // src/editor/dgmo.grammar.terms.js
8
11
  var ChartType = 1;
9
12
  var TagKeyword = 2;
10
13
  var DirectiveKeyword = 3;
11
14
  var ControlKeyword = 4;
12
15
  var ModifierKeyword = 5;
16
+ var Comment = 7;
13
17
 
14
18
  // src/directives-registry.ts
15
19
  var DIRECTIVES_REGISTRY = [
@@ -17,9 +21,21 @@ var DIRECTIVES_REGISTRY = [
17
21
  // Accepted in every date-bearing chart (gantt, pert, countdown, timeline,
18
22
  // event-line). Handled inline by each parser's prescan — no parser-Set
19
23
  // membership here — so they only contribute highlighting (DIRECTIVE_KEYWORDS).
20
- { token: "year", category: "directive" },
21
- { token: "date-order", category: "directive" },
22
- { token: "no-current-year", category: "directive" },
24
+ {
25
+ token: "year",
26
+ category: "directive",
27
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
28
+ },
29
+ {
30
+ token: "date-order",
31
+ category: "directive",
32
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
33
+ },
34
+ {
35
+ token: "no-current-year",
36
+ category: "directive",
37
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
38
+ },
23
39
  // ── Infra ────────────────────────────────────────────────
24
40
  // Top-level SLO options that are ALSO accepted as node colon-properties
25
41
  // (dual membership). Highlight bare (kept in DIRECTIVE_KEYWORDS) — their
@@ -27,92 +43,413 @@ var DIRECTIVES_REGISTRY = [
27
43
  {
28
44
  token: "slo-availability",
29
45
  category: "directive",
30
- infra: ["top-level", "behavior"]
46
+ infra: ["top-level", "behavior"],
47
+ chartTypes: ["infra"]
31
48
  },
32
49
  {
33
50
  token: "slo-p90-latency-ms",
34
51
  category: "directive",
35
- infra: ["top-level", "behavior"]
52
+ infra: ["top-level", "behavior"],
53
+ chartTypes: ["infra"]
36
54
  },
37
55
  {
38
56
  token: "slo-warning-margin",
39
57
  category: "directive",
40
- infra: ["top-level", "behavior"]
58
+ infra: ["top-level", "behavior"],
59
+ chartTypes: ["infra"]
41
60
  },
42
61
  // Top-level-only options (space-separated, bare).
43
- { token: "default-latency-ms", category: "directive", infra: ["top-level"] },
44
- { token: "default-uptime", category: "directive", infra: ["top-level"] },
45
- { token: "default-rps", category: "directive", infra: ["top-level"] },
62
+ {
63
+ token: "default-latency-ms",
64
+ category: "directive",
65
+ infra: ["top-level"],
66
+ chartTypes: ["infra"]
67
+ },
68
+ {
69
+ token: "default-uptime",
70
+ category: "directive",
71
+ infra: ["top-level"],
72
+ chartTypes: ["infra"]
73
+ },
74
+ {
75
+ token: "default-rps",
76
+ category: "directive",
77
+ infra: ["top-level"],
78
+ chartTypes: ["infra"]
79
+ },
46
80
  // `active-tag` is shared with gantt + map (see below).
47
81
  // Node behavior colon-keys — highlight as propertyName.
48
- { token: "latency-ms", colonKey: true, infra: ["behavior"] },
49
- { token: "uptime", colonKey: true, infra: ["behavior"] },
50
- { token: "instances", colonKey: true, infra: ["behavior"] },
51
- { token: "max-rps", colonKey: true, infra: ["behavior"] },
52
- { token: "cache-hit", colonKey: true, infra: ["behavior"] },
53
- { token: "firewall-block", colonKey: true, infra: ["behavior"] },
54
- { token: "ratelimit-rps", colonKey: true, infra: ["behavior"] },
55
- { token: "buffer", colonKey: true, infra: ["behavior"] },
56
- { token: "drain-rate", colonKey: true, infra: ["behavior"] },
57
- { token: "retention-hours", colonKey: true, infra: ["behavior"] },
58
- { token: "partitions", colonKey: true, infra: ["behavior"] },
59
- { token: "concurrency", colonKey: true, infra: ["behavior"] },
60
- { token: "duration-ms", colonKey: true, infra: ["behavior"] },
61
- { token: "cold-start-ms", colonKey: true, infra: ["behavior"] },
62
- { token: "cb-error-threshold", colonKey: true, infra: ["behavior"] },
63
- { token: "cb-latency-threshold-ms", colonKey: true, infra: ["behavior"] },
82
+ {
83
+ token: "latency-ms",
84
+ colonKey: true,
85
+ infra: ["behavior"],
86
+ chartTypes: ["infra"]
87
+ },
88
+ {
89
+ token: "uptime",
90
+ colonKey: true,
91
+ infra: ["behavior"],
92
+ chartTypes: ["infra"]
93
+ },
94
+ {
95
+ token: "instances",
96
+ colonKey: true,
97
+ infra: ["behavior"],
98
+ chartTypes: ["infra"]
99
+ },
100
+ {
101
+ token: "max-rps",
102
+ colonKey: true,
103
+ infra: ["behavior"],
104
+ chartTypes: ["infra"]
105
+ },
106
+ {
107
+ token: "cache-hit",
108
+ colonKey: true,
109
+ infra: ["behavior"],
110
+ chartTypes: ["infra"]
111
+ },
112
+ {
113
+ token: "firewall-block",
114
+ colonKey: true,
115
+ infra: ["behavior"],
116
+ chartTypes: ["infra"]
117
+ },
118
+ {
119
+ token: "ratelimit-rps",
120
+ colonKey: true,
121
+ infra: ["behavior"],
122
+ chartTypes: ["infra"]
123
+ },
124
+ {
125
+ token: "buffer",
126
+ colonKey: true,
127
+ infra: ["behavior"],
128
+ chartTypes: ["infra"]
129
+ },
130
+ {
131
+ token: "drain-rate",
132
+ colonKey: true,
133
+ infra: ["behavior"],
134
+ chartTypes: ["infra"]
135
+ },
136
+ {
137
+ token: "retention-hours",
138
+ colonKey: true,
139
+ infra: ["behavior"],
140
+ chartTypes: ["infra"]
141
+ },
142
+ {
143
+ token: "partitions",
144
+ colonKey: true,
145
+ infra: ["behavior"],
146
+ chartTypes: ["infra"]
147
+ },
148
+ {
149
+ token: "concurrency",
150
+ colonKey: true,
151
+ infra: ["behavior"],
152
+ chartTypes: ["infra"]
153
+ },
154
+ {
155
+ token: "duration-ms",
156
+ colonKey: true,
157
+ infra: ["behavior"],
158
+ chartTypes: ["infra"]
159
+ },
160
+ {
161
+ token: "cold-start-ms",
162
+ colonKey: true,
163
+ infra: ["behavior"],
164
+ chartTypes: ["infra"]
165
+ },
166
+ {
167
+ token: "cb-error-threshold",
168
+ colonKey: true,
169
+ infra: ["behavior"],
170
+ chartTypes: ["infra"]
171
+ },
172
+ {
173
+ token: "cb-latency-threshold-ms",
174
+ colonKey: true,
175
+ infra: ["behavior"],
176
+ chartTypes: ["infra"]
177
+ },
64
178
  // Edge-only colon-key.
65
- { token: "rps", colonKey: true, infra: ["edge"] },
179
+ { token: "rps", colonKey: true, infra: ["edge"], chartTypes: ["infra"] },
66
180
  // ── Gantt ────────────────────────────────────────────────
67
- { token: "start", category: "directive", gantt: ["option"] },
181
+ {
182
+ token: "start",
183
+ category: "directive",
184
+ gantt: ["option"],
185
+ chartTypes: ["gantt"]
186
+ },
68
187
  {
69
188
  token: "today-marker",
70
189
  category: "directive",
71
- gantt: ["option", "boolean"]
190
+ gantt: ["option", "boolean"],
191
+ chartTypes: ["gantt"]
72
192
  },
73
193
  {
74
194
  token: "critical-path",
75
195
  category: "directive",
76
- gantt: ["option", "boolean"]
196
+ gantt: ["option", "boolean"],
197
+ chartTypes: ["gantt"]
198
+ },
199
+ {
200
+ token: "sprint-length",
201
+ category: "directive",
202
+ gantt: ["option"],
203
+ chartTypes: ["gantt", "pert"]
204
+ },
205
+ {
206
+ token: "sprint-number",
207
+ category: "directive",
208
+ gantt: ["option"],
209
+ chartTypes: ["gantt", "pert"]
210
+ },
211
+ {
212
+ token: "sprint-start",
213
+ category: "directive",
214
+ gantt: ["option"],
215
+ chartTypes: ["gantt", "pert"]
216
+ },
217
+ {
218
+ token: "fill-tint",
219
+ category: "directive",
220
+ gantt: ["boolean"],
221
+ chartTypes: [
222
+ "arc",
223
+ "bar",
224
+ "block",
225
+ "body",
226
+ "boxes-and-lines",
227
+ "bracket",
228
+ "c4",
229
+ "class",
230
+ "clock",
231
+ "countdown",
232
+ "cycle",
233
+ "er",
234
+ "event-line",
235
+ "family",
236
+ "flowchart",
237
+ "funnel",
238
+ "gantt",
239
+ "goal",
240
+ "heatmap",
241
+ "journey-map",
242
+ "kanban",
243
+ "line",
244
+ "mindmap",
245
+ "org",
246
+ "pert",
247
+ "pie",
248
+ "polar-area",
249
+ "pyramid",
250
+ "quadrant",
251
+ "raci",
252
+ "radar",
253
+ "ring",
254
+ "scatter",
255
+ "sequence",
256
+ "sitemap",
257
+ "state",
258
+ "swimlane",
259
+ "timeline",
260
+ "treemap",
261
+ "venn",
262
+ "wireframe"
263
+ ]
264
+ },
265
+ {
266
+ token: "fill-solid",
267
+ category: "directive",
268
+ gantt: ["boolean"],
269
+ chartTypes: [
270
+ "arc",
271
+ "bar",
272
+ "block",
273
+ "body",
274
+ "boxes-and-lines",
275
+ "bracket",
276
+ "c4",
277
+ "class",
278
+ "clock",
279
+ "countdown",
280
+ "cycle",
281
+ "er",
282
+ "event-line",
283
+ "family",
284
+ "flowchart",
285
+ "funnel",
286
+ "gantt",
287
+ "goal",
288
+ "heatmap",
289
+ "journey-map",
290
+ "kanban",
291
+ "line",
292
+ "mindmap",
293
+ "org",
294
+ "pert",
295
+ "pie",
296
+ "polar-area",
297
+ "pyramid",
298
+ "quadrant",
299
+ "raci",
300
+ "radar",
301
+ "ring",
302
+ "scatter",
303
+ "sequence",
304
+ "sitemap",
305
+ "state",
306
+ "swimlane",
307
+ "timeline",
308
+ "treemap",
309
+ "venn",
310
+ "wireframe"
311
+ ]
312
+ },
313
+ {
314
+ token: "fill-outline",
315
+ category: "directive",
316
+ gantt: ["boolean"],
317
+ chartTypes: [
318
+ "arc",
319
+ "bar",
320
+ "block",
321
+ "body",
322
+ "boxes-and-lines",
323
+ "bracket",
324
+ "c4",
325
+ "class",
326
+ "clock",
327
+ "countdown",
328
+ "cycle",
329
+ "er",
330
+ "event-line",
331
+ "family",
332
+ "flowchart",
333
+ "funnel",
334
+ "gantt",
335
+ "goal",
336
+ "heatmap",
337
+ "journey-map",
338
+ "kanban",
339
+ "line",
340
+ "mindmap",
341
+ "org",
342
+ "pert",
343
+ "pie",
344
+ "polar-area",
345
+ "pyramid",
346
+ "quadrant",
347
+ "raci",
348
+ "radar",
349
+ "ring",
350
+ "scatter",
351
+ "sequence",
352
+ "sitemap",
353
+ "state",
354
+ "swimlane",
355
+ "timeline",
356
+ "treemap",
357
+ "venn",
358
+ "wireframe"
359
+ ]
77
360
  },
78
- { token: "sprint-length", category: "directive", gantt: ["option"] },
79
- { token: "sprint-number", category: "directive", gantt: ["option"] },
80
- { token: "sprint-start", category: "directive", gantt: ["option"] },
81
- { token: "fill-tint", category: "directive", gantt: ["boolean"] },
82
- { token: "fill-solid", category: "directive", gantt: ["boolean"] },
83
- { token: "fill-outline", category: "directive", gantt: ["boolean"] },
84
361
  // `chart` is a wireframe element keyword (CONTROL); gantt also accepts it as
85
362
  // an option. Highlight family is control.
86
- { token: "chart", category: "control", gantt: ["option"] },
363
+ {
364
+ token: "chart",
365
+ category: "control",
366
+ gantt: ["option"],
367
+ chartTypes: ["gantt", "wireframe"]
368
+ },
87
369
  // `dependencies` is ON by default → almost never written bare (authors write
88
370
  // `no-dependencies`, which DOES highlight). Bare word collides with prose and
89
- // the specializer is context-free, so it stays plain. Present for parser
90
- // Set derivation only.
91
- { token: "dependencies", noHighlight: true, gantt: ["option", "boolean"] },
371
+ // it would colour in every gantt task name, so it stays plain. Present for
372
+ // parser Set derivation only.
373
+ {
374
+ token: "dependencies",
375
+ noHighlight: true,
376
+ gantt: ["option", "boolean"],
377
+ chartTypes: ["gantt"]
378
+ },
92
379
  // ── Map ──────────────────────────────────────────────────
93
380
  // Per-element value→channel ramps (decision #20): the directive names the
94
381
  // visual channel — `region-heat` (colour), `poi-size` (marker area),
95
382
  // `flow-width` (stroke). The per-element key mirrors it (`heat:`/`size:`/`width:`).
96
- { token: "region-heat", category: "directive", map: true },
97
- { token: "poi-size", category: "directive", map: true },
98
- { token: "flow-width", category: "directive", map: true },
99
- { token: "locale", category: "directive", map: true },
100
- { token: "caption", category: "directive", map: true },
101
- { token: "no-coastline", category: "directive", map: true },
102
- { token: "no-relief", category: "directive", map: true },
103
- { token: "no-context-labels", category: "directive", map: true },
104
- { token: "no-region-labels", category: "directive", map: true },
105
- { token: "no-region-heat-value", category: "directive", map: true },
106
- { token: "no-poi-labels", category: "directive", map: true },
107
- { token: "no-colorize", category: "directive", map: true },
108
- { token: "no-cities", category: "directive", map: true },
109
- { token: "no-cluster-pois", category: "directive", map: true },
383
+ {
384
+ token: "region-heat",
385
+ category: "directive",
386
+ map: true,
387
+ chartTypes: ["map"]
388
+ },
389
+ { token: "poi-size", category: "directive", map: true, chartTypes: ["map"] },
390
+ {
391
+ token: "flow-width",
392
+ category: "directive",
393
+ map: true,
394
+ chartTypes: ["map"]
395
+ },
396
+ { token: "locale", category: "directive", map: true, chartTypes: ["map"] },
397
+ { token: "caption", category: "directive", map: true, chartTypes: ["map"] },
398
+ {
399
+ token: "no-coastline",
400
+ category: "directive",
401
+ map: true,
402
+ chartTypes: ["map"]
403
+ },
404
+ { token: "no-relief", category: "directive", map: true, chartTypes: ["map"] },
405
+ {
406
+ token: "no-context-labels",
407
+ category: "directive",
408
+ map: true,
409
+ chartTypes: ["map"]
410
+ },
411
+ {
412
+ token: "no-region-labels",
413
+ category: "directive",
414
+ map: true,
415
+ chartTypes: ["map"]
416
+ },
417
+ {
418
+ token: "no-region-heat-value",
419
+ category: "directive",
420
+ map: true,
421
+ chartTypes: ["map"]
422
+ },
423
+ {
424
+ token: "no-poi-labels",
425
+ category: "directive",
426
+ map: true,
427
+ chartTypes: ["map"]
428
+ },
429
+ {
430
+ token: "no-colorize",
431
+ category: "directive",
432
+ map: true,
433
+ chartTypes: ["map"]
434
+ },
435
+ { token: "no-cities", category: "directive", map: true, chartTypes: ["map"] },
436
+ {
437
+ token: "no-cluster-pois",
438
+ category: "directive",
439
+ map: true,
440
+ chartTypes: ["map"]
441
+ },
110
442
  // ── Clock channel (BL-122): live local-time cards on POIs flagged `clock` ──
111
443
  // Activation is the per-POI `clock` flag (peeled in the map parser, not a
112
444
  // directive). `hours 9-17` / `days mon-fri` are the global availability
113
445
  // window (reused verbatim from the clock chart type).
114
- { token: "hours", category: "directive", map: true },
115
- { token: "days", category: "directive", map: true },
446
+ {
447
+ token: "hours",
448
+ category: "directive",
449
+ map: true,
450
+ chartTypes: ["clock", "map"]
451
+ },
452
+ { token: "days", category: "directive", map: true, chartTypes: ["map"] },
116
453
  // ── Shared across types ──────────────────────────────────
117
454
  // `active-tag`: infra top-level option + gantt option + map directive.
118
455
  // Treemap also accepts it (§24C.6, decision #48) — validated inline in its
@@ -123,24 +460,74 @@ var DIRECTIVES_REGISTRY = [
123
460
  category: "directive",
124
461
  infra: ["top-level"],
125
462
  gantt: ["option"],
126
- map: true
463
+ map: true,
464
+ chartTypes: [
465
+ "body",
466
+ "boxes-and-lines",
467
+ "c4",
468
+ "er",
469
+ "event-line",
470
+ "family",
471
+ "gantt",
472
+ "infra",
473
+ "journey-map",
474
+ "kanban",
475
+ "map",
476
+ "mindmap",
477
+ "org",
478
+ "pert",
479
+ "sequence",
480
+ "sitemap",
481
+ "state",
482
+ "swimlane",
483
+ "timeline",
484
+ "treemap",
485
+ "wireframe"
486
+ ]
127
487
  },
128
488
  // `title`: gantt option. (The data-chart `title` directive was removed in
129
489
  // decision #48 — it now raises E_TITLE_DIRECTIVE; the token stays here for
130
490
  // gantt.)
131
- { token: "title", category: "directive", gantt: ["option"] },
491
+ {
492
+ token: "title",
493
+ category: "directive",
494
+ gantt: ["option"],
495
+ chartTypes: ["gantt"]
496
+ },
132
497
  // `sort`: gantt option (also general, hand-listed).
133
- { token: "sort", category: "directive", gantt: ["option"] },
498
+ {
499
+ token: "sort",
500
+ category: "directive",
501
+ gantt: ["option"],
502
+ chartTypes: "all"
503
+ },
134
504
  // `lane-by <group>`: swimlane axis (view-state). NB not `swimlane` — that's a
135
505
  // chart type. Kanban reads it via its own KNOWN_OPTIONS; gantt via the switch.
136
- { token: "lane-by", category: "directive", gantt: ["option"] },
506
+ {
507
+ token: "lane-by",
508
+ category: "directive",
509
+ gantt: ["option"],
510
+ chartTypes: "all"
511
+ },
137
512
  // `no-title`: gantt boolean + map directive (also general, hand-listed).
138
- { token: "no-title", category: "directive", gantt: ["boolean"], map: true },
513
+ {
514
+ token: "no-title",
515
+ category: "directive",
516
+ gantt: ["boolean"],
517
+ map: true,
518
+ chartTypes: "all"
519
+ },
139
520
  // `no-legend`: universal (decision #48) — every chart that renders a legend
140
521
  // accepts it, and charts without one take it as a harmless no-op. Parsed for
141
522
  // most types via GLOBAL_BOOLEANS in utils/parsing; gantt derives its boolean
142
523
  // Set from here, and map from `map: true`.
143
- { token: "no-legend", category: "directive", gantt: ["boolean"], map: true },
524
+ {
525
+ token: "no-legend",
526
+ category: "directive",
527
+ gantt: ["boolean"],
528
+ map: true,
529
+ chartTypes: "all"
530
+ },
144
531
  // `legend-inline`: universal §1.9 boolean (decision #50) — the top-center-
145
532
  // legend data charts (bar/line/radar/scatter/function) render the title and
146
533
  // legend on one line; every other chart accepts it as a harmless no-op.
@@ -148,7 +535,8 @@ var DIRECTIVES_REGISTRY = [
148
535
  token: "legend-inline",
149
536
  category: "directive",
150
537
  gantt: ["boolean"],
151
- map: true
538
+ map: true,
539
+ chartTypes: "all"
152
540
  },
153
541
  // ══════════════════════════════════════════════════════════
154
542
  // Highlight-only vocab (no extractable parser Set).
@@ -158,40 +546,69 @@ var DIRECTIVES_REGISTRY = [
158
546
  // simply their single declaration site for highlighting. Grouped by chart
159
547
  // type. Categories route to the specializer-read sets in keywords.ts.
160
548
  // ── Gantt (extras beyond the option/boolean Sets) ────────
161
- { token: "era", category: "directive" },
162
- { token: "marker", category: "directive" },
163
- { token: "holiday", category: "directive" },
549
+ {
550
+ token: "era",
551
+ category: "directive",
552
+ chartTypes: [
553
+ "bar",
554
+ "gantt",
555
+ "line",
556
+ "pie",
557
+ "polar-area",
558
+ "radar",
559
+ "timeline"
560
+ ]
561
+ },
562
+ { token: "marker", category: "directive", chartTypes: ["gantt", "timeline"] },
563
+ { token: "holiday", category: "directive", chartTypes: ["gantt"] },
164
564
  // `workweek` is also the canonical weekday-window directive on clock and map
165
565
  // clock-cards (decision #48; `days` stays as the legacy alias).
166
- { token: "workweek", category: "directive", map: true },
167
- { token: "no-dependencies", category: "directive" },
566
+ {
567
+ token: "workweek",
568
+ category: "directive",
569
+ map: true,
570
+ chartTypes: ["clock", "gantt", "map"]
571
+ },
572
+ { token: "no-dependencies", category: "directive", chartTypes: ["gantt"] },
168
573
  // ── Tech-radar ───────────────────────────────────────────
169
- { token: "rings", category: "directive" },
574
+ { token: "rings", category: "directive", chartTypes: ["tech-radar"] },
170
575
  // Blip listing is default-on everywhere (decision #48): `no-blip-legend`
171
576
  // suppresses it; `show-blip-legend` stays as the parse-accepted legacy no-op.
172
- { token: "no-blip-legend", category: "directive" },
173
- { token: "show-blip-legend", category: "directive" },
174
- { token: "trend", category: "directive" },
577
+ {
578
+ token: "no-blip-legend",
579
+ category: "directive",
580
+ chartTypes: ["tech-radar"]
581
+ },
582
+ {
583
+ token: "show-blip-legend",
584
+ category: "directive",
585
+ chartTypes: ["tech-radar"]
586
+ },
587
+ { token: "trend", category: "directive", chartTypes: ["tech-radar"] },
175
588
  // ── Tags / shared directives ─────────────────────────────
176
- { token: "tags", category: "directive" },
177
- { token: "import", category: "directive" },
178
- { token: "hide", category: "directive" },
589
+ { token: "tags", category: "directive", chartTypes: "all" },
590
+ { token: "import", category: "directive", chartTypes: "all" },
591
+ {
592
+ token: "hide",
593
+ category: "directive",
594
+ chartTypes: ["boxes-and-lines", "kanban", "org"]
595
+ },
179
596
  // `focus <name>`: org subtree drill-down (view-state, source-backed) — the
180
597
  // export re-roots to that person/team with the ancestor breadcrumb trail.
181
598
  // Org reads it via its own KNOWN_OPTIONS; registered here for highlighting.
182
- { token: "focus", category: "directive" },
183
- { token: "direction", category: "directive" },
599
+ { token: "focus", category: "directive", chartTypes: ["org"] },
600
+ { token: "direction", category: "directive", chartTypes: "all" },
184
601
  // ── Clock ────────────────────────────────────────────────
185
602
  // The board's flat directives — highlight-only (the parser validates them
186
603
  // inline, no extractable Set). `no-title` + `direction` are already listed
187
604
  // above (shared). Values (analog is a bare flag; color-by's
188
605
  // place|work|daylight|time|none) highlight as plain tokens.
189
- { token: "analog", category: "directive" },
190
- { token: "hours", category: "directive" },
191
- { token: "days", category: "directive" },
192
- { token: "no-sun", category: "directive" },
193
- { token: "time-24", category: "directive" },
194
- { token: "color-by", category: "directive" },
606
+ { token: "analog", category: "directive", chartTypes: ["clock"] },
607
+ { token: "hours", category: "directive", chartTypes: ["clock"] },
608
+ { token: "days", category: "directive", chartTypes: ["clock"] },
609
+ { token: "no-sun", category: "directive", chartTypes: ["clock"] },
610
+ { token: "time-24", category: "directive", chartTypes: ["clock"] },
611
+ { token: "color-by", category: "directive", chartTypes: ["clock"] },
195
612
  // ── Boxes-and-lines ──────────────────────────────────────
196
613
  // `heat <Label> [low] [high]` is the value→colour ramp directive, but `heat`
197
614
  // is NOT registered as a directive keyword: it is dual-use with the `heat:`
@@ -201,72 +618,186 @@ var DIRECTIVES_REGISTRY = [
201
618
  // as a property in both positions — exactly the treemap `heat` precedent.
202
619
  // Box values render by default since decision #48; `show-values` stays as
203
620
  // the parse-accepted legacy no-op (suppress with the shared `no-value`).
204
- { token: "show-values", category: "directive" },
621
+ {
622
+ token: "show-values",
623
+ category: "directive",
624
+ chartTypes: ["boxes-and-lines"]
625
+ },
205
626
  // Treemap's legacy plural spelling of the same suppression (decision #48
206
627
  // made the shared singular `no-value` canonical). Registered so a legacy
207
628
  // document still highlights it as a directive rather than plain text.
208
- { token: "no-values", category: "directive" },
629
+ { token: "no-values", category: "directive", chartTypes: ["treemap"] },
209
630
  // ── Swimlane ─────────────────────────────────────────────
210
- { token: "lane", category: "directive" },
631
+ { token: "lane", category: "directive", chartTypes: ["swimlane"] },
211
632
  // ── ER ───────────────────────────────────────────────────
212
- { token: "notation", category: "directive" },
633
+ { token: "notation", category: "directive", chartTypes: ["er"] },
213
634
  // ── Class ────────────────────────────────────────────────
214
- { token: "extends", category: "directive" },
215
- { token: "implements", category: "directive" },
216
- { token: "abstract", category: "directive" },
217
- { token: "interface", category: "directive" },
218
- { token: "enum", category: "directive" },
635
+ { token: "extends", category: "directive", chartTypes: ["class"] },
636
+ { token: "implements", category: "directive", chartTypes: ["class"] },
637
+ { token: "abstract", category: "directive", chartTypes: ["class"] },
638
+ { token: "interface", category: "directive", chartTypes: ["class"] },
639
+ { token: "enum", category: "directive", chartTypes: ["class"] },
219
640
  // ── C4 ───────────────────────────────────────────────────
220
- { token: "containers", category: "directive" },
221
- { token: "components", category: "directive" },
222
- { token: "deployment", category: "directive" },
223
- { token: "technology", category: "directive" },
641
+ { token: "containers", category: "directive", chartTypes: ["c4"] },
642
+ { token: "components", category: "directive", chartTypes: ["c4"] },
643
+ { token: "deployment", category: "directive", chartTypes: ["c4"] },
644
+ { token: "technology", category: "directive", chartTypes: ["c4"] },
224
645
  // ── Infra (directives beyond the option/behavior Sets) ───
225
- { token: "sub-node-label", category: "directive" },
226
- { token: "show-sub-node-count", category: "directive" },
227
- { token: "animate", category: "directive" },
646
+ { token: "sub-node-label", category: "directive", chartTypes: ["org"] },
647
+ { token: "show-sub-node-count", category: "directive", chartTypes: ["org"] },
648
+ { token: "animate", category: "directive", chartTypes: ["infra"] },
228
649
  // ── Sequence ─────────────────────────────────────────────
229
- { token: "activations", category: "directive" },
230
- { token: "no-activations", category: "directive" },
231
- { token: "autonumber", category: "directive" },
650
+ { token: "activations", category: "directive", chartTypes: ["sequence"] },
651
+ { token: "no-activations", category: "directive", chartTypes: ["sequence"] },
652
+ { token: "autonumber", category: "directive", chartTypes: ["sequence"] },
232
653
  // ── Map element leaders (not in DIRECTIVE_SET) ───────────
233
- { token: "poi", category: "directive" },
234
- { token: "route", category: "directive" },
654
+ { token: "poi", category: "directive", chartTypes: ["map"] },
655
+ { token: "route", category: "directive", chartTypes: ["map"] },
235
656
  // ── Data charts ──────────────────────────────────────────
236
- { token: "stacked", category: "directive" },
237
- { token: "no-name", category: "directive" },
238
- { token: "no-value", category: "directive" },
239
- { token: "no-percent", category: "directive" },
240
- { token: "series", category: "directive" },
241
- { token: "orientation", category: "directive" },
242
- { token: "x-label", category: "directive" },
243
- { token: "y-label", category: "directive" },
244
- { token: "size-label", category: "directive" },
245
- { token: "columns", category: "directive" },
246
- { token: "rows", category: "directive" },
247
- { token: "labels", category: "directive" },
248
- { token: "rotate", category: "directive" },
249
- { token: "scale", category: "directive" },
250
- { token: "values", category: "directive" },
251
- { token: "orientation-horizontal", category: "directive" },
657
+ { token: "stacked", category: "directive", chartTypes: "all" },
658
+ {
659
+ token: "no-name",
660
+ category: "directive",
661
+ chartTypes: ["funnel", "pie", "polar-area", "scatter"]
662
+ },
663
+ {
664
+ token: "no-value",
665
+ category: "directive",
666
+ chartTypes: [
667
+ "bar",
668
+ "boxes-and-lines",
669
+ "funnel",
670
+ "goal",
671
+ "heatmap",
672
+ "line",
673
+ "pie",
674
+ "polar-area",
675
+ "radar",
676
+ "treemap"
677
+ ]
678
+ },
679
+ {
680
+ token: "no-percent",
681
+ category: "directive",
682
+ chartTypes: ["funnel", "goal", "pie", "polar-area", "treemap"]
683
+ },
684
+ {
685
+ token: "series",
686
+ category: "directive",
687
+ chartTypes: [
688
+ "bar",
689
+ "function",
690
+ "funnel",
691
+ "heatmap",
692
+ "line",
693
+ "pie",
694
+ "polar-area",
695
+ "radar",
696
+ "sankey",
697
+ "scatter"
698
+ ]
699
+ },
700
+ { token: "orientation", category: "directive", chartTypes: "all" },
701
+ {
702
+ token: "x-label",
703
+ category: "directive",
704
+ chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
705
+ },
706
+ {
707
+ token: "y-label",
708
+ category: "directive",
709
+ chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
710
+ },
711
+ { token: "size-label", category: "directive", chartTypes: ["scatter"] },
712
+ { token: "columns", category: "directive", chartTypes: ["block", "heatmap"] },
713
+ { token: "rows", category: "directive", chartTypes: "all" },
714
+ { token: "labels", category: "directive", chartTypes: "all" },
715
+ { token: "rotate", category: "directive", chartTypes: ["wordcloud"] },
716
+ { token: "scale", category: "directive", chartTypes: "all" },
717
+ {
718
+ token: "values",
719
+ category: "directive",
720
+ chartTypes: ["pert", "tech-radar"]
721
+ },
722
+ {
723
+ token: "orientation-horizontal",
724
+ category: "directive",
725
+ chartTypes: ["bar"]
726
+ },
252
727
  // ── Slope ────────────────────────────────────────────────
253
- { token: "period", category: "directive" },
728
+ { token: "period", category: "directive", chartTypes: "all" },
254
729
  // ── Quadrant ─────────────────────────────────────────────
255
- { token: "x-axis", category: "directive" },
256
- { token: "y-axis", category: "directive" },
257
- { token: "top-right", category: "directive" },
258
- { token: "top-left", category: "directive" },
259
- { token: "bottom-right", category: "directive" },
260
- { token: "bottom-left", category: "directive" },
730
+ { token: "x-axis", category: "directive", chartTypes: "all" },
731
+ { token: "y-axis", category: "directive", chartTypes: "all" },
732
+ {
733
+ token: "top-right",
734
+ category: "directive",
735
+ chartTypes: ["quadrant", "tech-radar"]
736
+ },
737
+ {
738
+ token: "top-left",
739
+ category: "directive",
740
+ chartTypes: ["quadrant", "tech-radar"]
741
+ },
742
+ {
743
+ token: "bottom-right",
744
+ category: "directive",
745
+ chartTypes: ["quadrant", "tech-radar"]
746
+ },
747
+ {
748
+ token: "bottom-left",
749
+ category: "directive",
750
+ chartTypes: ["quadrant", "tech-radar"]
751
+ },
261
752
  // ── Layout (cross-chart) ─────────────────────────────────
262
- { token: "direction-tb", category: "directive" },
263
- { token: "direction-lr", category: "directive" },
264
- { token: "orientation-vertical", category: "directive" },
753
+ {
754
+ token: "direction-tb",
755
+ category: "directive",
756
+ chartTypes: [
757
+ "boxes-and-lines",
758
+ "c4",
759
+ "clock",
760
+ "flowchart",
761
+ "infra",
762
+ "org",
763
+ "pert",
764
+ "sitemap",
765
+ "state",
766
+ "swimlane",
767
+ "version-control"
768
+ ]
769
+ },
770
+ {
771
+ token: "direction-lr",
772
+ category: "directive",
773
+ chartTypes: [
774
+ "boxes-and-lines",
775
+ "c4",
776
+ "clock",
777
+ "flowchart",
778
+ "infra",
779
+ "org",
780
+ "pert",
781
+ "sitemap",
782
+ "state",
783
+ "swimlane",
784
+ "version-control"
785
+ ]
786
+ },
787
+ { token: "orientation-vertical", category: "directive", chartTypes: "all" },
265
788
  // ── Pyramid ──────────────────────────────────────────────
266
- { token: "inverted", category: "directive" },
789
+ { token: "inverted", category: "directive", chartTypes: ["pyramid"] },
267
790
  // ── Color / notes (cross-chart) ──────────────────────────
268
- { token: "color", category: "directive" },
269
- { token: "no-notes", category: "directive" },
791
+ {
792
+ token: "color",
793
+ category: "directive",
794
+ chartTypes: "all"
795
+ },
796
+ {
797
+ token: "no-notes",
798
+ category: "directive",
799
+ chartTypes: ["flowchart", "goal", "state", "whiteboard"]
800
+ },
270
801
  // ── Emphasis family (§1.11, decision #49) ────────────────
271
802
  // `highlight <Name>…` / `dim <Name>…` — the figure/ground axis, orthogonal
272
803
  // to color (§1.5) and to the chart-wide `fill-*` family (§1.9). Both are
@@ -279,122 +810,180 @@ var DIRECTIVES_REGISTRY = [
279
810
  // tokens are registered together so the whole family lights up at once.
280
811
  //
281
812
  // Supported on `sankey` and `family` today; every further chart type is a
282
- // separate decision. Registering them globally is correct regardless: the
283
- // Lezer specializer is context-free (it cannot know the chart type), and the
284
- // same is already true of every other chart-scoped token here.
285
- { token: "highlight", category: "directive" },
286
- { token: "dim", category: "directive" },
813
+ // separate decision, made by adding it to `chartTypes` below (#1734).
814
+ {
815
+ token: "highlight",
816
+ category: "directive",
817
+ chartTypes: ["family", "sankey"]
818
+ },
819
+ { token: "dim", category: "directive", chartTypes: ["family", "sankey"] },
287
820
  // ── RACI ─────────────────────────────────────────────────
288
- { token: "roles", category: "directive" },
821
+ { token: "roles", category: "directive", chartTypes: ["raci"] },
289
822
  // ── Cycle ────────────────────────────────────────────────
290
- { token: "direction-counterclockwise", category: "directive" },
291
- { token: "circle-nodes", category: "directive" },
823
+ {
824
+ token: "direction-counterclockwise",
825
+ category: "directive",
826
+ chartTypes: ["cycle"]
827
+ },
828
+ { token: "circle-nodes", category: "directive", chartTypes: ["cycle"] },
292
829
  // ── Journey-map ──────────────────────────────────────────
293
- { token: "persona", category: "directive" },
830
+ { token: "persona", category: "directive", chartTypes: ["journey-map"] },
294
831
  // ── Function ─────────────────────────────────────────────
295
- { token: "x", category: "directive" },
296
- { token: "fill", category: "directive" },
832
+ { token: "x", category: "directive", chartTypes: ["function"] },
833
+ {
834
+ token: "fill",
835
+ category: "directive",
836
+ chartTypes: ["function", "line", "whiteboard"]
837
+ },
297
838
  // ── Wordcloud ────────────────────────────────────────────
298
- { token: "max", category: "directive" },
299
- { token: "size", category: "directive" },
839
+ { token: "max", category: "directive", chartTypes: ["wordcloud"] },
840
+ {
841
+ token: "size",
842
+ category: "directive",
843
+ chartTypes: ["whiteboard", "wordcloud"]
844
+ },
300
845
  // ── Arc ──────────────────────────────────────────────────
301
- { token: "order", category: "directive" },
846
+ { token: "order", category: "directive", chartTypes: ["arc"] },
302
847
  // ── PERT ─────────────────────────────────────────────────
303
- { token: "time-unit", category: "directive" },
304
- { token: "default-confidence", category: "directive" },
305
- { token: "node-detail", category: "directive" },
306
- { token: "trials", category: "directive" },
307
- { token: "seed", category: "directive" },
308
- { token: "scrubber-trials", category: "directive" },
848
+ { token: "time-unit", category: "directive", chartTypes: ["pert"] },
849
+ { token: "default-confidence", category: "directive", chartTypes: ["pert"] },
850
+ { token: "node-detail", category: "directive", chartTypes: ["pert"] },
851
+ { token: "trials", category: "directive", chartTypes: ["pert"] },
852
+ { token: "seed", category: "directive", chartTypes: ["bracket", "pert"] },
853
+ { token: "scrubber-trials", category: "directive", chartTypes: ["pert"] },
309
854
  // `start-date` is also gantt's canonical project-start option (decision #48;
310
855
  // bare `start` above stays as the legacy alias).
311
- { token: "start-date", category: "directive", gantt: ["option"] },
312
- { token: "end-date", category: "directive" },
856
+ {
857
+ token: "start-date",
858
+ category: "directive",
859
+ gantt: ["option"],
860
+ chartTypes: ["gantt", "pert"]
861
+ },
862
+ { token: "end-date", category: "directive", chartTypes: ["pert"] },
313
863
  // ── Goal ─────────────────────────────────────────────────
314
864
  // Mode flags, value-key leaders, and opt-outs. `now`/`target` collide with
315
865
  // label prose ("start now", "on target"), but the arrow-label demotion pass
316
866
  // (see highlight-api LABEL_WORD_NODES) treats any keyword-bearing label as
317
867
  // text and demotes them, so they highlight only as line leaders.
318
- { token: "thermometer", category: "directive" },
319
- { token: "gauge", category: "directive" },
320
- { token: "now", category: "directive" },
321
- { token: "target", category: "directive" },
322
- { token: "no-note", category: "directive" },
323
- { token: "no-auto-color", category: "directive" },
868
+ { token: "thermometer", category: "directive", chartTypes: ["goal"] },
869
+ { token: "gauge", category: "directive", chartTypes: ["goal"] },
870
+ {
871
+ token: "now",
872
+ category: "directive",
873
+ chartTypes: ["event-line", "goal", "pert"]
874
+ },
875
+ { token: "target", category: "directive", chartTypes: ["countdown", "goal"] },
876
+ { token: "no-note", category: "directive", chartTypes: ["goal"] },
877
+ { token: "no-auto-color", category: "directive", chartTypes: ["goal"] },
324
878
  // ── Control-flow + wireframe element keywords (CONTROL) ──
325
- { token: "if", category: "control" },
326
- { token: "else", category: "control" },
327
- { token: "loop", category: "control" },
328
- { token: "parallel", category: "control" },
329
- { token: "note", category: "control" },
330
- { token: "nav", category: "control" },
331
- { token: "tabs", category: "control" },
332
- { token: "table", category: "control" },
333
- { token: "image", category: "control" },
334
- { token: "modal", category: "control" },
335
- { token: "skeleton", category: "control" },
336
- { token: "alert", category: "control" },
337
- { token: "progress", category: "control" },
338
- { token: "mobile", category: "control" },
879
+ { token: "if", category: "control", chartTypes: ["sequence"] },
880
+ { token: "else", category: "control", chartTypes: ["sequence"] },
881
+ { token: "loop", category: "control", chartTypes: ["sequence"] },
882
+ { token: "parallel", category: "control", chartTypes: ["gantt", "sequence"] },
883
+ {
884
+ token: "note",
885
+ category: "control",
886
+ chartTypes: [
887
+ "boxes-and-lines",
888
+ "class",
889
+ "countdown",
890
+ "er",
891
+ "flowchart",
892
+ "goal",
893
+ "sequence",
894
+ "state",
895
+ "swimlane",
896
+ "version-control",
897
+ "whiteboard"
898
+ ]
899
+ },
900
+ { token: "nav", category: "control", chartTypes: ["wireframe"] },
901
+ { token: "tabs", category: "control", chartTypes: ["wireframe"] },
902
+ { token: "table", category: "control", chartTypes: ["wireframe"] },
903
+ {
904
+ token: "image",
905
+ category: "control",
906
+ chartTypes: ["whiteboard", "wireframe"]
907
+ },
908
+ { token: "modal", category: "control", chartTypes: ["wireframe"] },
909
+ { token: "skeleton", category: "control", chartTypes: ["wireframe"] },
910
+ { token: "alert", category: "control", chartTypes: ["wireframe"] },
911
+ {
912
+ token: "progress",
913
+ category: "control",
914
+ chartTypes: ["gantt", "wireframe"]
915
+ },
916
+ { token: "mobile", category: "control", chartTypes: ["wireframe"] },
339
917
  // Whiteboard element leaders (§39). `image` is shared with wireframe above
340
918
  // and `text` stays an ER modifier; `database` / `queue` are left plain
341
919
  // because sequence uses them as values, not line leaders.
342
- { token: "rectangle", category: "control" },
343
- { token: "ellipse", category: "control" },
344
- { token: "arrow", category: "control" },
345
- { token: "ink", category: "control" },
920
+ { token: "rectangle", category: "control", chartTypes: ["whiteboard"] },
921
+ { token: "ellipse", category: "control", chartTypes: ["whiteboard"] },
922
+ { token: "arrow", category: "control", chartTypes: ["whiteboard"] },
923
+ { token: "ink", category: "control", chartTypes: ["whiteboard"] },
924
+ // ── SWOT section keywords (CONTROL) ──────────────────────
925
+ { token: "strengths", category: "control", chartTypes: ["swot"] },
926
+ { token: "weaknesses", category: "control", chartTypes: ["swot"] },
927
+ { token: "opportunities", category: "control", chartTypes: ["swot"] },
928
+ { token: "threats", category: "control", chartTypes: ["swot"] },
929
+ { token: "no-axes", category: "directive", chartTypes: ["swot"] },
930
+ { token: "no-tint-items", category: "directive", chartTypes: ["swot"] },
346
931
  // ── Kanban status keywords (STATUS) ──────────────────────
347
- { token: "na", category: "status" },
348
- { token: "todo", category: "status" },
349
- { token: "wip", category: "status" },
350
- { token: "done", category: "status" },
351
- { token: "blocked", category: "status" },
352
- { token: "in-progress", category: "status" },
353
- { token: "backlog", category: "status" },
354
- { token: "ready", category: "status" },
932
+ { token: "na", category: "status", chartTypes: ["kanban"] },
933
+ { token: "todo", category: "status", chartTypes: ["kanban"] },
934
+ { token: "wip", category: "status", chartTypes: ["kanban"] },
935
+ { token: "done", category: "status", chartTypes: ["kanban"] },
936
+ { token: "blocked", category: "status", chartTypes: ["kanban"] },
937
+ { token: "in-progress", category: "status", chartTypes: ["kanban"] },
938
+ { token: "backlog", category: "status", chartTypes: ["kanban"] },
939
+ { token: "ready", category: "status", chartTypes: ["kanban"] },
355
940
  // ── Modifiers + ER column types/modifiers (MODIFIER) ─────
356
941
  // `collapsed` is the bare trailing group-line flag made canonical by
357
942
  // decision #48 (`[Fulfillment] collapsed`). It is deliberately a bare
358
943
  // MODIFIER rather than a colon key: the legacy `collapsed: true` form still
359
944
  // parses and still highlights (as `modifier` instead of `propertyName`),
360
945
  // whereas leaving it colon-only left the canonical bare form as plain text.
361
- { token: "collapsed", category: "modifier" },
362
- { token: "as", category: "modifier" },
363
- { token: "alias", category: "modifier" },
364
- { token: "aka", category: "modifier" },
365
- { token: "position", category: "modifier" },
366
- { token: "default", category: "modifier" },
367
- { token: "pk", category: "modifier" },
368
- { token: "fk", category: "modifier" },
369
- { token: "nullable", category: "modifier" },
370
- { token: "unique", category: "modifier" },
371
- { token: "int", category: "modifier" },
372
- { token: "varchar", category: "modifier" },
373
- { token: "text", category: "modifier" },
374
- { token: "boolean", category: "modifier" },
375
- { token: "date", category: "modifier" },
376
- { token: "timestamp", category: "modifier" },
377
- { token: "float", category: "modifier" },
378
- { token: "decimal", category: "modifier" },
946
+ { token: "collapsed", category: "modifier", chartTypes: "all" },
947
+ { token: "as", category: "modifier", chartTypes: "all" },
948
+ { token: "alias", category: "modifier", chartTypes: "all" },
949
+ { token: "aka", category: "modifier", chartTypes: "all" },
950
+ { token: "position", category: "modifier", chartTypes: "all" },
951
+ { token: "default", category: "modifier", chartTypes: "all" },
952
+ { token: "pk", category: "modifier", chartTypes: ["er"] },
953
+ { token: "fk", category: "modifier", chartTypes: ["er"] },
954
+ { token: "nullable", category: "modifier", chartTypes: ["er"] },
955
+ { token: "unique", category: "modifier", chartTypes: ["er"] },
956
+ { token: "int", category: "modifier", chartTypes: ["class", "er"] },
957
+ { token: "varchar", category: "modifier", chartTypes: ["class", "er"] },
958
+ {
959
+ token: "text",
960
+ category: "modifier",
961
+ chartTypes: ["class", "er", "whiteboard"]
962
+ },
963
+ { token: "boolean", category: "modifier", chartTypes: ["class", "er"] },
964
+ { token: "date", category: "modifier", chartTypes: ["class", "er"] },
965
+ { token: "timestamp", category: "modifier", chartTypes: ["class", "er"] },
966
+ { token: "float", category: "modifier", chartTypes: ["class", "er"] },
967
+ { token: "decimal", category: "modifier", chartTypes: ["class", "er"] },
379
968
  // ── Bracket ──────────────────────────────────────────────
380
969
  // `beats` / `vs` are the infix match keywords; the rest are line directives.
381
970
  // (`seed` and `no-legend` already appear above — shared, not re-listed.)
382
- { token: "beats", category: "control" },
383
- { token: "vs", category: "control" },
384
- { token: "rounds", category: "directive" },
385
- { token: "accent", category: "directive" },
386
- { token: "no-round", category: "modifier" },
387
- { token: "no-rounds", category: "modifier" },
388
- { token: "single-elim", category: "modifier" },
389
- { token: "double-elim", category: "modifier" },
390
- { token: "seeded", category: "modifier" },
971
+ { token: "beats", category: "control", chartTypes: ["bracket"] },
972
+ { token: "vs", category: "control", chartTypes: ["bracket"] },
973
+ { token: "rounds", category: "directive", chartTypes: ["bracket"] },
974
+ { token: "accent", category: "directive", chartTypes: "all" },
975
+ { token: "no-round", category: "modifier", chartTypes: ["bracket"] },
976
+ { token: "no-rounds", category: "modifier", chartTypes: ["bracket"] },
977
+ { token: "single-elim", category: "modifier", chartTypes: ["bracket"] },
978
+ { token: "double-elim", category: "modifier", chartTypes: ["bracket"] },
979
+ { token: "seeded", category: "modifier", chartTypes: ["bracket"] },
391
980
  // ── Live link (§38) ──────────────────────────────────────
392
981
  // The pointer type's one directive. Registered so it highlights and
393
982
  // autocompletes like `palette` does — §38 justifies the shape by calling it
394
983
  // "the ordinary DGMO directive shape", and an unregistered `url` would make
395
984
  // that sentence false in the editor: `editor/tokens.ts` specializes only
396
985
  // against the keyword registries, so it would render as plain identifier text.
397
- { token: "url", category: "directive" }
986
+ { token: "url", category: "directive", chartTypes: ["live-link"] }
398
987
  ];
399
988
  function tokensWhere(pred) {
400
989
  const out = /* @__PURE__ */ new Set();
@@ -430,6 +1019,21 @@ var REGISTRY_STATUS_TOKENS = tokensWhere(
430
1019
  var REGISTRY_MODIFIER_TOKENS = tokensWhere(
431
1020
  (e) => e.category === "modifier" && !e.colonKey && !e.noHighlight
432
1021
  );
1022
+ var REGISTRY_TOKEN_CHART_TYPES = (() => {
1023
+ const out = /* @__PURE__ */ new Map();
1024
+ for (const e of DIRECTIVES_REGISTRY) {
1025
+ const prev = out.get(e.token);
1026
+ if (prev === "all") continue;
1027
+ if (e.chartTypes === "all") {
1028
+ out.set(e.token, "all");
1029
+ continue;
1030
+ }
1031
+ const set = prev ?? /* @__PURE__ */ new Set();
1032
+ for (const t2 of e.chartTypes) set.add(t2);
1033
+ out.set(e.token, set);
1034
+ }
1035
+ return out;
1036
+ })();
433
1037
  var REGISTRY_COLON_KEY_TOKENS = tokensWhere((e) => !!e.colonKey);
434
1038
  var REGISTRY_NON_HIGHLIGHT_TOKENS = tokensWhere(
435
1039
  (e) => !!e.noHighlight
@@ -517,6 +1121,10 @@ var chartTypesData = [
517
1121
  id: "kanban",
518
1122
  description: "Task board columns"
519
1123
  },
1124
+ {
1125
+ id: "swot",
1126
+ description: "SWOT analysis: strengths, weaknesses, opportunities and threats in four fixed panels on helpful/harmful and internal/external axes"
1127
+ },
520
1128
  {
521
1129
  id: "raci",
522
1130
  description: "Tasks \xD7 roles responsibility matrix with constraint linting"
@@ -718,8 +1326,66 @@ var STATUS_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_STATUS_TOKENS]);
718
1326
  var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_MODIFIER_TOKENS]);
719
1327
 
720
1328
  // src/editor/tokens.ts
721
- function specializeKeyword(value) {
1329
+ var PENDING = 0;
1330
+ var UNKNOWN = -1;
1331
+ var CHART_TYPE_INDEX = new Map(
1332
+ CHART_TYPE_IDS.map((id, i) => [id, i + 1])
1333
+ );
1334
+ function readToken(input, length) {
1335
+ let s = "";
1336
+ for (let i = 0; i < length; i++) s += String.fromCharCode(input.peek(i));
1337
+ return s;
1338
+ }
1339
+ function decide(term, text) {
1340
+ if (term !== ChartType) return UNKNOWN;
1341
+ return CHART_TYPE_INDEX.get(text()) ?? UNKNOWN;
1342
+ }
1343
+ var chartTypeContext = new ContextTracker({
1344
+ start: PENDING,
1345
+ shift(context, term, stack, input) {
1346
+ if (context !== PENDING) return context;
1347
+ if (term >= stack.parser.nodeSet.types.length || term === Comment)
1348
+ return context;
1349
+ return decide(term, () => readToken(input, stack.pos - input.pos));
1350
+ },
1351
+ // A node reused from an earlier parse is not shifted token by token, so a
1352
+ // reused first line has to decide the context here, from its first leaf.
1353
+ // Not observed (2026-11-06, @lezer/lr 1.4.10: the first line sat in a
1354
+ // re-parsed buffer in every probe), but nothing in Lezer promises that.
1355
+ reuse(context, node, _stack, input) {
1356
+ if (context !== PENDING) return context;
1357
+ const cursor = node.cursor();
1358
+ for (; ; ) {
1359
+ if (cursor.firstChild()) continue;
1360
+ const { from, to } = cursor;
1361
+ const id = cursor.type.id;
1362
+ if (id !== Comment && to > from) {
1363
+ return decide(id, () => {
1364
+ let s = "";
1365
+ for (let i = from; i < to; i++)
1366
+ s += String.fromCharCode(input.peek(i));
1367
+ return s;
1368
+ });
1369
+ }
1370
+ if (!advance(cursor)) return context;
1371
+ }
1372
+ },
1373
+ hash: (context) => context
1374
+ });
1375
+ function advance(cursor) {
1376
+ while (!cursor.nextSibling()) if (!cursor.parent()) return false;
1377
+ return true;
1378
+ }
1379
+ function inScope(value, context) {
1380
+ if (context <= PENDING) return true;
1381
+ const scope = REGISTRY_TOKEN_CHART_TYPES.get(value);
1382
+ if (scope === void 0 || scope === "all") return true;
1383
+ return scope.has(CHART_TYPE_IDS[context - 1]);
1384
+ }
1385
+ function specializeKeyword(value, stack) {
722
1386
  if (CHART_TYPES.has(value)) return ChartType;
1387
+ if (!inScope(value, stack?.context ?? UNKNOWN))
1388
+ return -1;
723
1389
  if (value === TAG_KEYWORD) return TagKeyword;
724
1390
  if (DIRECTIVE_KEYWORDS.has(value)) return DirectiveKeyword;
725
1391
  if (CONTROL_KEYWORDS.has(value)) return ControlKeyword;
@@ -736,6 +1402,7 @@ var parser = LRParser.deserialize({
736
1402
  goto: "!byPPPPPPPPzPPPPPPPPPPPPPPPPPPPPPPPPP!O!UPPPP!]TSOTQTORWTSROTRURVQORT",
737
1403
  nodeNames: "\u26A0 ChartType TagKeyword DirectiveKeyword ControlKeyword ModifierKeyword Document Comment ContentLine SyncArrow AsyncArrow Duration DateLiteral Percentage Number SectionMarker Url OpenBracket CloseBracket OpenParen CloseParen OpenAngle CloseAngle Pipe Colon Comma Plus Dash Tilde Star Question QuotedString Identifier Punct",
738
1404
  maxTerm: 40,
1405
+ context: chartTypeContext,
739
1406
  skippedNodes: [0],
740
1407
  repeatNodeCount: 2,
741
1408
  tokenData: ">w~RzOX#uXY#zYZ$VZp#upq#zqr#urs$[st#uux#uxy%eyz%lz{%s{|%z|}&R}!O&Y!O!P#u!P!Q&i!Q!['Y![!]1|!]!^#u!^!_2T!_!`2[!`!a2i!a!b2p!b!c#u!c!}2w!}#O5}#O#P#u#P#Q6S#Q#R#u#R#S2w#S#T#u#T#[2w#[#]6Z#]#o2w#o#p#u#p#q>Z#q#r#u#r#s>b#s;'S#u;'S;=`>q<%lO#u~#zOq~~$PQv~XY#zpq#z~$[Ow~~$aUq~OY$sZr$srs%Ys;'S$s;'S;=`%_<%lO$s~$vUOY$sZr$srs%Ys;'S$s;'S;=`%_<%lO$s~%_Oo~~%bP;=`<%l$s~%lOc~q~~%sOd~q~~%zOm~q~~&ROj~q~~&YOi~q~~&aPk~q~!`!a&d~&iOX~~&nPq~!P!Q&q~&vSV~OY&qZ;'S&q;'S;=`'S<%lO&q~'VP;=`<%l&q~'a_^~q~uv(`|}(e}!O)b!O!P*l!P!Q,h!Q![-R#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~(eO]~~(hP!Q![(k~(nP!Q![(q~(tP!Q![(w~(|Q^~|}(e!O!P)S~)VP!Q![)Y~)_P^~!Q![)Y~)eP!Q![)h~)mQ[~}!O)s!Q![*d~)vP!Q![)y~)|P!Q![*P~*UP[~!Q![*X~*[P!Q![*_~*dO[~~*iP[~}!O)s~*oP!Q![*r~*wY^~uv(`!Q![*r#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~+jP#W#X+m~+rPZ~!a!b+u~+zOZ~~,PQZ~!a!b+u#]#^,V~,YP#b#c+m~,bQZ~!a!b+u#d#e+m~,kP!Q![,n~,sQ[~!P!Q)s!Q![,y~-OP[~!P!Q)s~-W_^~uv(`|}(e}!O)b!O!P*l!P!Q,h!Q![.V#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~.[]^~uv(`|}(e!O!P*l!Q![/T#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~/Y]^~uv(`}!O0R!O!P*l!Q![0m#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~0UP!Q![0X~0[P!Q![0_~0dP[~}!O0g~0jP!Q![*X~0r[^~uv(`!O!P*l!Q![0m#R#S1h#U#V+g#W#X+m#[#]+m#a#b+z#e#f+m#g#h,]#k#l+m#m#n+m~1kP!Q![1n~1sR^~!O!P)S!Q![1n#R#S1h~2TOh~q~~2[Oe~q~~2aPq~!_!`2d~2iO_~~2pOf~q~~2wOn~q~~3O_p~q~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~4S_p~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~5U]qr3}st3}vw3}wx3}{|3}!O!P3}!P!Q3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~6SOa~~6ZOb~q~~6bap~q~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#h3}#h#i7g#i#o3}~7lap~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#h3}#h#i8q#i#o3}~8vap~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#d3}#d#e9{#e#o3}~:Qbp~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}![!];Y!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#g3}#g#h=S#h#o3}~;]P!P!Q;`~;cP!P!Q;f~;iYOX<XZp<Xqy<Xz|<X}!`<X!a#P<X#Q#p<X#q;'S<X;'S;=`<|<%lO<X~<^Y`~OX<XZp<Xqy<Xz|<X}!`<X!a#P<X#Q#p<X#q;'S<X;'S;=`<|<%lO<X~=PP;=`<%l<X~=X`p~qr3}st3}vw3}wx3}{|3}}!O5R!O!P3}!P!Q3}!Q![3}![!];Y!_!`3}!a!b3}!b!c3}!c!}3}#R#S3}#T#o3}~>bOg~q~~>iPl~q~!`!a>l~>qOY~~>tP;=`<%l#u",