@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/highlight.js CHANGED
@@ -1,12 +1,16 @@
1
1
  // src/editor/dgmo.grammar.js
2
2
  import { LRParser } from "@lezer/lr";
3
3
 
4
+ // src/editor/tokens.ts
5
+ import { ContextTracker } from "@lezer/lr";
6
+
4
7
  // src/editor/dgmo.grammar.terms.js
5
8
  var ChartType = 1;
6
9
  var TagKeyword = 2;
7
10
  var DirectiveKeyword = 3;
8
11
  var ControlKeyword = 4;
9
12
  var ModifierKeyword = 5;
13
+ var Comment = 7;
10
14
 
11
15
  // src/directives-registry.ts
12
16
  var DIRECTIVES_REGISTRY = [
@@ -14,9 +18,21 @@ var DIRECTIVES_REGISTRY = [
14
18
  // Accepted in every date-bearing chart (gantt, pert, countdown, timeline,
15
19
  // event-line). Handled inline by each parser's prescan — no parser-Set
16
20
  // membership here — so they only contribute highlighting (DIRECTIVE_KEYWORDS).
17
- { token: "year", category: "directive" },
18
- { token: "date-order", category: "directive" },
19
- { token: "no-current-year", category: "directive" },
21
+ {
22
+ token: "year",
23
+ category: "directive",
24
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
25
+ },
26
+ {
27
+ token: "date-order",
28
+ category: "directive",
29
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
30
+ },
31
+ {
32
+ token: "no-current-year",
33
+ category: "directive",
34
+ chartTypes: ["countdown", "event-line", "gantt", "pert", "timeline"]
35
+ },
20
36
  // ── Infra ────────────────────────────────────────────────
21
37
  // Top-level SLO options that are ALSO accepted as node colon-properties
22
38
  // (dual membership). Highlight bare (kept in DIRECTIVE_KEYWORDS) — their
@@ -24,92 +40,413 @@ var DIRECTIVES_REGISTRY = [
24
40
  {
25
41
  token: "slo-availability",
26
42
  category: "directive",
27
- infra: ["top-level", "behavior"]
43
+ infra: ["top-level", "behavior"],
44
+ chartTypes: ["infra"]
28
45
  },
29
46
  {
30
47
  token: "slo-p90-latency-ms",
31
48
  category: "directive",
32
- infra: ["top-level", "behavior"]
49
+ infra: ["top-level", "behavior"],
50
+ chartTypes: ["infra"]
33
51
  },
34
52
  {
35
53
  token: "slo-warning-margin",
36
54
  category: "directive",
37
- infra: ["top-level", "behavior"]
55
+ infra: ["top-level", "behavior"],
56
+ chartTypes: ["infra"]
38
57
  },
39
58
  // Top-level-only options (space-separated, bare).
40
- { token: "default-latency-ms", category: "directive", infra: ["top-level"] },
41
- { token: "default-uptime", category: "directive", infra: ["top-level"] },
42
- { token: "default-rps", category: "directive", infra: ["top-level"] },
59
+ {
60
+ token: "default-latency-ms",
61
+ category: "directive",
62
+ infra: ["top-level"],
63
+ chartTypes: ["infra"]
64
+ },
65
+ {
66
+ token: "default-uptime",
67
+ category: "directive",
68
+ infra: ["top-level"],
69
+ chartTypes: ["infra"]
70
+ },
71
+ {
72
+ token: "default-rps",
73
+ category: "directive",
74
+ infra: ["top-level"],
75
+ chartTypes: ["infra"]
76
+ },
43
77
  // `active-tag` is shared with gantt + map (see below).
44
78
  // Node behavior colon-keys — highlight as propertyName.
45
- { token: "latency-ms", colonKey: true, infra: ["behavior"] },
46
- { token: "uptime", colonKey: true, infra: ["behavior"] },
47
- { token: "instances", colonKey: true, infra: ["behavior"] },
48
- { token: "max-rps", colonKey: true, infra: ["behavior"] },
49
- { token: "cache-hit", colonKey: true, infra: ["behavior"] },
50
- { token: "firewall-block", colonKey: true, infra: ["behavior"] },
51
- { token: "ratelimit-rps", colonKey: true, infra: ["behavior"] },
52
- { token: "buffer", colonKey: true, infra: ["behavior"] },
53
- { token: "drain-rate", colonKey: true, infra: ["behavior"] },
54
- { token: "retention-hours", colonKey: true, infra: ["behavior"] },
55
- { token: "partitions", colonKey: true, infra: ["behavior"] },
56
- { token: "concurrency", colonKey: true, infra: ["behavior"] },
57
- { token: "duration-ms", colonKey: true, infra: ["behavior"] },
58
- { token: "cold-start-ms", colonKey: true, infra: ["behavior"] },
59
- { token: "cb-error-threshold", colonKey: true, infra: ["behavior"] },
60
- { token: "cb-latency-threshold-ms", colonKey: true, infra: ["behavior"] },
79
+ {
80
+ token: "latency-ms",
81
+ colonKey: true,
82
+ infra: ["behavior"],
83
+ chartTypes: ["infra"]
84
+ },
85
+ {
86
+ token: "uptime",
87
+ colonKey: true,
88
+ infra: ["behavior"],
89
+ chartTypes: ["infra"]
90
+ },
91
+ {
92
+ token: "instances",
93
+ colonKey: true,
94
+ infra: ["behavior"],
95
+ chartTypes: ["infra"]
96
+ },
97
+ {
98
+ token: "max-rps",
99
+ colonKey: true,
100
+ infra: ["behavior"],
101
+ chartTypes: ["infra"]
102
+ },
103
+ {
104
+ token: "cache-hit",
105
+ colonKey: true,
106
+ infra: ["behavior"],
107
+ chartTypes: ["infra"]
108
+ },
109
+ {
110
+ token: "firewall-block",
111
+ colonKey: true,
112
+ infra: ["behavior"],
113
+ chartTypes: ["infra"]
114
+ },
115
+ {
116
+ token: "ratelimit-rps",
117
+ colonKey: true,
118
+ infra: ["behavior"],
119
+ chartTypes: ["infra"]
120
+ },
121
+ {
122
+ token: "buffer",
123
+ colonKey: true,
124
+ infra: ["behavior"],
125
+ chartTypes: ["infra"]
126
+ },
127
+ {
128
+ token: "drain-rate",
129
+ colonKey: true,
130
+ infra: ["behavior"],
131
+ chartTypes: ["infra"]
132
+ },
133
+ {
134
+ token: "retention-hours",
135
+ colonKey: true,
136
+ infra: ["behavior"],
137
+ chartTypes: ["infra"]
138
+ },
139
+ {
140
+ token: "partitions",
141
+ colonKey: true,
142
+ infra: ["behavior"],
143
+ chartTypes: ["infra"]
144
+ },
145
+ {
146
+ token: "concurrency",
147
+ colonKey: true,
148
+ infra: ["behavior"],
149
+ chartTypes: ["infra"]
150
+ },
151
+ {
152
+ token: "duration-ms",
153
+ colonKey: true,
154
+ infra: ["behavior"],
155
+ chartTypes: ["infra"]
156
+ },
157
+ {
158
+ token: "cold-start-ms",
159
+ colonKey: true,
160
+ infra: ["behavior"],
161
+ chartTypes: ["infra"]
162
+ },
163
+ {
164
+ token: "cb-error-threshold",
165
+ colonKey: true,
166
+ infra: ["behavior"],
167
+ chartTypes: ["infra"]
168
+ },
169
+ {
170
+ token: "cb-latency-threshold-ms",
171
+ colonKey: true,
172
+ infra: ["behavior"],
173
+ chartTypes: ["infra"]
174
+ },
61
175
  // Edge-only colon-key.
62
- { token: "rps", colonKey: true, infra: ["edge"] },
176
+ { token: "rps", colonKey: true, infra: ["edge"], chartTypes: ["infra"] },
63
177
  // ── Gantt ────────────────────────────────────────────────
64
- { token: "start", category: "directive", gantt: ["option"] },
178
+ {
179
+ token: "start",
180
+ category: "directive",
181
+ gantt: ["option"],
182
+ chartTypes: ["gantt"]
183
+ },
65
184
  {
66
185
  token: "today-marker",
67
186
  category: "directive",
68
- gantt: ["option", "boolean"]
187
+ gantt: ["option", "boolean"],
188
+ chartTypes: ["gantt"]
69
189
  },
70
190
  {
71
191
  token: "critical-path",
72
192
  category: "directive",
73
- gantt: ["option", "boolean"]
74
- },
75
- { token: "sprint-length", category: "directive", gantt: ["option"] },
76
- { token: "sprint-number", category: "directive", gantt: ["option"] },
77
- { token: "sprint-start", category: "directive", gantt: ["option"] },
78
- { token: "fill-tint", category: "directive", gantt: ["boolean"] },
79
- { token: "fill-solid", category: "directive", gantt: ["boolean"] },
80
- { token: "fill-outline", category: "directive", gantt: ["boolean"] },
193
+ gantt: ["option", "boolean"],
194
+ chartTypes: ["gantt"]
195
+ },
196
+ {
197
+ token: "sprint-length",
198
+ category: "directive",
199
+ gantt: ["option"],
200
+ chartTypes: ["gantt", "pert"]
201
+ },
202
+ {
203
+ token: "sprint-number",
204
+ category: "directive",
205
+ gantt: ["option"],
206
+ chartTypes: ["gantt", "pert"]
207
+ },
208
+ {
209
+ token: "sprint-start",
210
+ category: "directive",
211
+ gantt: ["option"],
212
+ chartTypes: ["gantt", "pert"]
213
+ },
214
+ {
215
+ token: "fill-tint",
216
+ category: "directive",
217
+ gantt: ["boolean"],
218
+ chartTypes: [
219
+ "arc",
220
+ "bar",
221
+ "block",
222
+ "body",
223
+ "boxes-and-lines",
224
+ "bracket",
225
+ "c4",
226
+ "class",
227
+ "clock",
228
+ "countdown",
229
+ "cycle",
230
+ "er",
231
+ "event-line",
232
+ "family",
233
+ "flowchart",
234
+ "funnel",
235
+ "gantt",
236
+ "goal",
237
+ "heatmap",
238
+ "journey-map",
239
+ "kanban",
240
+ "line",
241
+ "mindmap",
242
+ "org",
243
+ "pert",
244
+ "pie",
245
+ "polar-area",
246
+ "pyramid",
247
+ "quadrant",
248
+ "raci",
249
+ "radar",
250
+ "ring",
251
+ "scatter",
252
+ "sequence",
253
+ "sitemap",
254
+ "state",
255
+ "swimlane",
256
+ "timeline",
257
+ "treemap",
258
+ "venn",
259
+ "wireframe"
260
+ ]
261
+ },
262
+ {
263
+ token: "fill-solid",
264
+ category: "directive",
265
+ gantt: ["boolean"],
266
+ chartTypes: [
267
+ "arc",
268
+ "bar",
269
+ "block",
270
+ "body",
271
+ "boxes-and-lines",
272
+ "bracket",
273
+ "c4",
274
+ "class",
275
+ "clock",
276
+ "countdown",
277
+ "cycle",
278
+ "er",
279
+ "event-line",
280
+ "family",
281
+ "flowchart",
282
+ "funnel",
283
+ "gantt",
284
+ "goal",
285
+ "heatmap",
286
+ "journey-map",
287
+ "kanban",
288
+ "line",
289
+ "mindmap",
290
+ "org",
291
+ "pert",
292
+ "pie",
293
+ "polar-area",
294
+ "pyramid",
295
+ "quadrant",
296
+ "raci",
297
+ "radar",
298
+ "ring",
299
+ "scatter",
300
+ "sequence",
301
+ "sitemap",
302
+ "state",
303
+ "swimlane",
304
+ "timeline",
305
+ "treemap",
306
+ "venn",
307
+ "wireframe"
308
+ ]
309
+ },
310
+ {
311
+ token: "fill-outline",
312
+ category: "directive",
313
+ gantt: ["boolean"],
314
+ chartTypes: [
315
+ "arc",
316
+ "bar",
317
+ "block",
318
+ "body",
319
+ "boxes-and-lines",
320
+ "bracket",
321
+ "c4",
322
+ "class",
323
+ "clock",
324
+ "countdown",
325
+ "cycle",
326
+ "er",
327
+ "event-line",
328
+ "family",
329
+ "flowchart",
330
+ "funnel",
331
+ "gantt",
332
+ "goal",
333
+ "heatmap",
334
+ "journey-map",
335
+ "kanban",
336
+ "line",
337
+ "mindmap",
338
+ "org",
339
+ "pert",
340
+ "pie",
341
+ "polar-area",
342
+ "pyramid",
343
+ "quadrant",
344
+ "raci",
345
+ "radar",
346
+ "ring",
347
+ "scatter",
348
+ "sequence",
349
+ "sitemap",
350
+ "state",
351
+ "swimlane",
352
+ "timeline",
353
+ "treemap",
354
+ "venn",
355
+ "wireframe"
356
+ ]
357
+ },
81
358
  // `chart` is a wireframe element keyword (CONTROL); gantt also accepts it as
82
359
  // an option. Highlight family is control.
83
- { token: "chart", category: "control", gantt: ["option"] },
360
+ {
361
+ token: "chart",
362
+ category: "control",
363
+ gantt: ["option"],
364
+ chartTypes: ["gantt", "wireframe"]
365
+ },
84
366
  // `dependencies` is ON by default → almost never written bare (authors write
85
367
  // `no-dependencies`, which DOES highlight). Bare word collides with prose and
86
- // the specializer is context-free, so it stays plain. Present for parser
87
- // Set derivation only.
88
- { token: "dependencies", noHighlight: true, gantt: ["option", "boolean"] },
368
+ // it would colour in every gantt task name, so it stays plain. Present for
369
+ // parser Set derivation only.
370
+ {
371
+ token: "dependencies",
372
+ noHighlight: true,
373
+ gantt: ["option", "boolean"],
374
+ chartTypes: ["gantt"]
375
+ },
89
376
  // ── Map ──────────────────────────────────────────────────
90
377
  // Per-element value→channel ramps (decision #20): the directive names the
91
378
  // visual channel — `region-heat` (colour), `poi-size` (marker area),
92
379
  // `flow-width` (stroke). The per-element key mirrors it (`heat:`/`size:`/`width:`).
93
- { token: "region-heat", category: "directive", map: true },
94
- { token: "poi-size", category: "directive", map: true },
95
- { token: "flow-width", category: "directive", map: true },
96
- { token: "locale", category: "directive", map: true },
97
- { token: "caption", category: "directive", map: true },
98
- { token: "no-coastline", category: "directive", map: true },
99
- { token: "no-relief", category: "directive", map: true },
100
- { token: "no-context-labels", category: "directive", map: true },
101
- { token: "no-region-labels", category: "directive", map: true },
102
- { token: "no-region-heat-value", category: "directive", map: true },
103
- { token: "no-poi-labels", category: "directive", map: true },
104
- { token: "no-colorize", category: "directive", map: true },
105
- { token: "no-cities", category: "directive", map: true },
106
- { token: "no-cluster-pois", category: "directive", map: true },
380
+ {
381
+ token: "region-heat",
382
+ category: "directive",
383
+ map: true,
384
+ chartTypes: ["map"]
385
+ },
386
+ { token: "poi-size", category: "directive", map: true, chartTypes: ["map"] },
387
+ {
388
+ token: "flow-width",
389
+ category: "directive",
390
+ map: true,
391
+ chartTypes: ["map"]
392
+ },
393
+ { token: "locale", category: "directive", map: true, chartTypes: ["map"] },
394
+ { token: "caption", category: "directive", map: true, chartTypes: ["map"] },
395
+ {
396
+ token: "no-coastline",
397
+ category: "directive",
398
+ map: true,
399
+ chartTypes: ["map"]
400
+ },
401
+ { token: "no-relief", category: "directive", map: true, chartTypes: ["map"] },
402
+ {
403
+ token: "no-context-labels",
404
+ category: "directive",
405
+ map: true,
406
+ chartTypes: ["map"]
407
+ },
408
+ {
409
+ token: "no-region-labels",
410
+ category: "directive",
411
+ map: true,
412
+ chartTypes: ["map"]
413
+ },
414
+ {
415
+ token: "no-region-heat-value",
416
+ category: "directive",
417
+ map: true,
418
+ chartTypes: ["map"]
419
+ },
420
+ {
421
+ token: "no-poi-labels",
422
+ category: "directive",
423
+ map: true,
424
+ chartTypes: ["map"]
425
+ },
426
+ {
427
+ token: "no-colorize",
428
+ category: "directive",
429
+ map: true,
430
+ chartTypes: ["map"]
431
+ },
432
+ { token: "no-cities", category: "directive", map: true, chartTypes: ["map"] },
433
+ {
434
+ token: "no-cluster-pois",
435
+ category: "directive",
436
+ map: true,
437
+ chartTypes: ["map"]
438
+ },
107
439
  // ── Clock channel (BL-122): live local-time cards on POIs flagged `clock` ──
108
440
  // Activation is the per-POI `clock` flag (peeled in the map parser, not a
109
441
  // directive). `hours 9-17` / `days mon-fri` are the global availability
110
442
  // window (reused verbatim from the clock chart type).
111
- { token: "hours", category: "directive", map: true },
112
- { token: "days", category: "directive", map: true },
443
+ {
444
+ token: "hours",
445
+ category: "directive",
446
+ map: true,
447
+ chartTypes: ["clock", "map"]
448
+ },
449
+ { token: "days", category: "directive", map: true, chartTypes: ["map"] },
113
450
  // ── Shared across types ──────────────────────────────────
114
451
  // `active-tag`: infra top-level option + gantt option + map directive.
115
452
  // Treemap also accepts it (§24C.6, decision #48) — validated inline in its
@@ -120,24 +457,74 @@ var DIRECTIVES_REGISTRY = [
120
457
  category: "directive",
121
458
  infra: ["top-level"],
122
459
  gantt: ["option"],
123
- map: true
460
+ map: true,
461
+ chartTypes: [
462
+ "body",
463
+ "boxes-and-lines",
464
+ "c4",
465
+ "er",
466
+ "event-line",
467
+ "family",
468
+ "gantt",
469
+ "infra",
470
+ "journey-map",
471
+ "kanban",
472
+ "map",
473
+ "mindmap",
474
+ "org",
475
+ "pert",
476
+ "sequence",
477
+ "sitemap",
478
+ "state",
479
+ "swimlane",
480
+ "timeline",
481
+ "treemap",
482
+ "wireframe"
483
+ ]
124
484
  },
125
485
  // `title`: gantt option. (The data-chart `title` directive was removed in
126
486
  // decision #48 — it now raises E_TITLE_DIRECTIVE; the token stays here for
127
487
  // gantt.)
128
- { token: "title", category: "directive", gantt: ["option"] },
488
+ {
489
+ token: "title",
490
+ category: "directive",
491
+ gantt: ["option"],
492
+ chartTypes: ["gantt"]
493
+ },
129
494
  // `sort`: gantt option (also general, hand-listed).
130
- { token: "sort", category: "directive", gantt: ["option"] },
495
+ {
496
+ token: "sort",
497
+ category: "directive",
498
+ gantt: ["option"],
499
+ chartTypes: "all"
500
+ },
131
501
  // `lane-by <group>`: swimlane axis (view-state). NB not `swimlane` — that's a
132
502
  // chart type. Kanban reads it via its own KNOWN_OPTIONS; gantt via the switch.
133
- { token: "lane-by", category: "directive", gantt: ["option"] },
503
+ {
504
+ token: "lane-by",
505
+ category: "directive",
506
+ gantt: ["option"],
507
+ chartTypes: "all"
508
+ },
134
509
  // `no-title`: gantt boolean + map directive (also general, hand-listed).
135
- { token: "no-title", category: "directive", gantt: ["boolean"], map: true },
510
+ {
511
+ token: "no-title",
512
+ category: "directive",
513
+ gantt: ["boolean"],
514
+ map: true,
515
+ chartTypes: "all"
516
+ },
136
517
  // `no-legend`: universal (decision #48) — every chart that renders a legend
137
518
  // accepts it, and charts without one take it as a harmless no-op. Parsed for
138
519
  // most types via GLOBAL_BOOLEANS in utils/parsing; gantt derives its boolean
139
520
  // Set from here, and map from `map: true`.
140
- { token: "no-legend", category: "directive", gantt: ["boolean"], map: true },
521
+ {
522
+ token: "no-legend",
523
+ category: "directive",
524
+ gantt: ["boolean"],
525
+ map: true,
526
+ chartTypes: "all"
527
+ },
141
528
  // `legend-inline`: universal §1.9 boolean (decision #50) — the top-center-
142
529
  // legend data charts (bar/line/radar/scatter/function) render the title and
143
530
  // legend on one line; every other chart accepts it as a harmless no-op.
@@ -145,7 +532,8 @@ var DIRECTIVES_REGISTRY = [
145
532
  token: "legend-inline",
146
533
  category: "directive",
147
534
  gantt: ["boolean"],
148
- map: true
535
+ map: true,
536
+ chartTypes: "all"
149
537
  },
150
538
  // ══════════════════════════════════════════════════════════
151
539
  // Highlight-only vocab (no extractable parser Set).
@@ -155,40 +543,69 @@ var DIRECTIVES_REGISTRY = [
155
543
  // simply their single declaration site for highlighting. Grouped by chart
156
544
  // type. Categories route to the specializer-read sets in keywords.ts.
157
545
  // ── Gantt (extras beyond the option/boolean Sets) ────────
158
- { token: "era", category: "directive" },
159
- { token: "marker", category: "directive" },
160
- { token: "holiday", category: "directive" },
546
+ {
547
+ token: "era",
548
+ category: "directive",
549
+ chartTypes: [
550
+ "bar",
551
+ "gantt",
552
+ "line",
553
+ "pie",
554
+ "polar-area",
555
+ "radar",
556
+ "timeline"
557
+ ]
558
+ },
559
+ { token: "marker", category: "directive", chartTypes: ["gantt", "timeline"] },
560
+ { token: "holiday", category: "directive", chartTypes: ["gantt"] },
161
561
  // `workweek` is also the canonical weekday-window directive on clock and map
162
562
  // clock-cards (decision #48; `days` stays as the legacy alias).
163
- { token: "workweek", category: "directive", map: true },
164
- { token: "no-dependencies", category: "directive" },
563
+ {
564
+ token: "workweek",
565
+ category: "directive",
566
+ map: true,
567
+ chartTypes: ["clock", "gantt", "map"]
568
+ },
569
+ { token: "no-dependencies", category: "directive", chartTypes: ["gantt"] },
165
570
  // ── Tech-radar ───────────────────────────────────────────
166
- { token: "rings", category: "directive" },
571
+ { token: "rings", category: "directive", chartTypes: ["tech-radar"] },
167
572
  // Blip listing is default-on everywhere (decision #48): `no-blip-legend`
168
573
  // suppresses it; `show-blip-legend` stays as the parse-accepted legacy no-op.
169
- { token: "no-blip-legend", category: "directive" },
170
- { token: "show-blip-legend", category: "directive" },
171
- { token: "trend", category: "directive" },
574
+ {
575
+ token: "no-blip-legend",
576
+ category: "directive",
577
+ chartTypes: ["tech-radar"]
578
+ },
579
+ {
580
+ token: "show-blip-legend",
581
+ category: "directive",
582
+ chartTypes: ["tech-radar"]
583
+ },
584
+ { token: "trend", category: "directive", chartTypes: ["tech-radar"] },
172
585
  // ── Tags / shared directives ─────────────────────────────
173
- { token: "tags", category: "directive" },
174
- { token: "import", category: "directive" },
175
- { token: "hide", category: "directive" },
586
+ { token: "tags", category: "directive", chartTypes: "all" },
587
+ { token: "import", category: "directive", chartTypes: "all" },
588
+ {
589
+ token: "hide",
590
+ category: "directive",
591
+ chartTypes: ["boxes-and-lines", "kanban", "org"]
592
+ },
176
593
  // `focus <name>`: org subtree drill-down (view-state, source-backed) — the
177
594
  // export re-roots to that person/team with the ancestor breadcrumb trail.
178
595
  // Org reads it via its own KNOWN_OPTIONS; registered here for highlighting.
179
- { token: "focus", category: "directive" },
180
- { token: "direction", category: "directive" },
596
+ { token: "focus", category: "directive", chartTypes: ["org"] },
597
+ { token: "direction", category: "directive", chartTypes: "all" },
181
598
  // ── Clock ────────────────────────────────────────────────
182
599
  // The board's flat directives — highlight-only (the parser validates them
183
600
  // inline, no extractable Set). `no-title` + `direction` are already listed
184
601
  // above (shared). Values (analog is a bare flag; color-by's
185
602
  // place|work|daylight|time|none) highlight as plain tokens.
186
- { token: "analog", category: "directive" },
187
- { token: "hours", category: "directive" },
188
- { token: "days", category: "directive" },
189
- { token: "no-sun", category: "directive" },
190
- { token: "time-24", category: "directive" },
191
- { token: "color-by", category: "directive" },
603
+ { token: "analog", category: "directive", chartTypes: ["clock"] },
604
+ { token: "hours", category: "directive", chartTypes: ["clock"] },
605
+ { token: "days", category: "directive", chartTypes: ["clock"] },
606
+ { token: "no-sun", category: "directive", chartTypes: ["clock"] },
607
+ { token: "time-24", category: "directive", chartTypes: ["clock"] },
608
+ { token: "color-by", category: "directive", chartTypes: ["clock"] },
192
609
  // ── Boxes-and-lines ──────────────────────────────────────
193
610
  // `heat <Label> [low] [high]` is the value→colour ramp directive, but `heat`
194
611
  // is NOT registered as a directive keyword: it is dual-use with the `heat:`
@@ -198,72 +615,186 @@ var DIRECTIVES_REGISTRY = [
198
615
  // as a property in both positions — exactly the treemap `heat` precedent.
199
616
  // Box values render by default since decision #48; `show-values` stays as
200
617
  // the parse-accepted legacy no-op (suppress with the shared `no-value`).
201
- { token: "show-values", category: "directive" },
618
+ {
619
+ token: "show-values",
620
+ category: "directive",
621
+ chartTypes: ["boxes-and-lines"]
622
+ },
202
623
  // Treemap's legacy plural spelling of the same suppression (decision #48
203
624
  // made the shared singular `no-value` canonical). Registered so a legacy
204
625
  // document still highlights it as a directive rather than plain text.
205
- { token: "no-values", category: "directive" },
626
+ { token: "no-values", category: "directive", chartTypes: ["treemap"] },
206
627
  // ── Swimlane ─────────────────────────────────────────────
207
- { token: "lane", category: "directive" },
628
+ { token: "lane", category: "directive", chartTypes: ["swimlane"] },
208
629
  // ── ER ───────────────────────────────────────────────────
209
- { token: "notation", category: "directive" },
630
+ { token: "notation", category: "directive", chartTypes: ["er"] },
210
631
  // ── Class ────────────────────────────────────────────────
211
- { token: "extends", category: "directive" },
212
- { token: "implements", category: "directive" },
213
- { token: "abstract", category: "directive" },
214
- { token: "interface", category: "directive" },
215
- { token: "enum", category: "directive" },
632
+ { token: "extends", category: "directive", chartTypes: ["class"] },
633
+ { token: "implements", category: "directive", chartTypes: ["class"] },
634
+ { token: "abstract", category: "directive", chartTypes: ["class"] },
635
+ { token: "interface", category: "directive", chartTypes: ["class"] },
636
+ { token: "enum", category: "directive", chartTypes: ["class"] },
216
637
  // ── C4 ───────────────────────────────────────────────────
217
- { token: "containers", category: "directive" },
218
- { token: "components", category: "directive" },
219
- { token: "deployment", category: "directive" },
220
- { token: "technology", category: "directive" },
638
+ { token: "containers", category: "directive", chartTypes: ["c4"] },
639
+ { token: "components", category: "directive", chartTypes: ["c4"] },
640
+ { token: "deployment", category: "directive", chartTypes: ["c4"] },
641
+ { token: "technology", category: "directive", chartTypes: ["c4"] },
221
642
  // ── Infra (directives beyond the option/behavior Sets) ───
222
- { token: "sub-node-label", category: "directive" },
223
- { token: "show-sub-node-count", category: "directive" },
224
- { token: "animate", category: "directive" },
643
+ { token: "sub-node-label", category: "directive", chartTypes: ["org"] },
644
+ { token: "show-sub-node-count", category: "directive", chartTypes: ["org"] },
645
+ { token: "animate", category: "directive", chartTypes: ["infra"] },
225
646
  // ── Sequence ─────────────────────────────────────────────
226
- { token: "activations", category: "directive" },
227
- { token: "no-activations", category: "directive" },
228
- { token: "autonumber", category: "directive" },
647
+ { token: "activations", category: "directive", chartTypes: ["sequence"] },
648
+ { token: "no-activations", category: "directive", chartTypes: ["sequence"] },
649
+ { token: "autonumber", category: "directive", chartTypes: ["sequence"] },
229
650
  // ── Map element leaders (not in DIRECTIVE_SET) ───────────
230
- { token: "poi", category: "directive" },
231
- { token: "route", category: "directive" },
651
+ { token: "poi", category: "directive", chartTypes: ["map"] },
652
+ { token: "route", category: "directive", chartTypes: ["map"] },
232
653
  // ── Data charts ──────────────────────────────────────────
233
- { token: "stacked", category: "directive" },
234
- { token: "no-name", category: "directive" },
235
- { token: "no-value", category: "directive" },
236
- { token: "no-percent", category: "directive" },
237
- { token: "series", category: "directive" },
238
- { token: "orientation", category: "directive" },
239
- { token: "x-label", category: "directive" },
240
- { token: "y-label", category: "directive" },
241
- { token: "size-label", category: "directive" },
242
- { token: "columns", category: "directive" },
243
- { token: "rows", category: "directive" },
244
- { token: "labels", category: "directive" },
245
- { token: "rotate", category: "directive" },
246
- { token: "scale", category: "directive" },
247
- { token: "values", category: "directive" },
248
- { token: "orientation-horizontal", category: "directive" },
654
+ { token: "stacked", category: "directive", chartTypes: "all" },
655
+ {
656
+ token: "no-name",
657
+ category: "directive",
658
+ chartTypes: ["funnel", "pie", "polar-area", "scatter"]
659
+ },
660
+ {
661
+ token: "no-value",
662
+ category: "directive",
663
+ chartTypes: [
664
+ "bar",
665
+ "boxes-and-lines",
666
+ "funnel",
667
+ "goal",
668
+ "heatmap",
669
+ "line",
670
+ "pie",
671
+ "polar-area",
672
+ "radar",
673
+ "treemap"
674
+ ]
675
+ },
676
+ {
677
+ token: "no-percent",
678
+ category: "directive",
679
+ chartTypes: ["funnel", "goal", "pie", "polar-area", "treemap"]
680
+ },
681
+ {
682
+ token: "series",
683
+ category: "directive",
684
+ chartTypes: [
685
+ "bar",
686
+ "function",
687
+ "funnel",
688
+ "heatmap",
689
+ "line",
690
+ "pie",
691
+ "polar-area",
692
+ "radar",
693
+ "sankey",
694
+ "scatter"
695
+ ]
696
+ },
697
+ { token: "orientation", category: "directive", chartTypes: "all" },
698
+ {
699
+ token: "x-label",
700
+ category: "directive",
701
+ chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
702
+ },
703
+ {
704
+ token: "y-label",
705
+ category: "directive",
706
+ chartTypes: ["bar", "function", "line", "quadrant", "scatter"]
707
+ },
708
+ { token: "size-label", category: "directive", chartTypes: ["scatter"] },
709
+ { token: "columns", category: "directive", chartTypes: ["block", "heatmap"] },
710
+ { token: "rows", category: "directive", chartTypes: "all" },
711
+ { token: "labels", category: "directive", chartTypes: "all" },
712
+ { token: "rotate", category: "directive", chartTypes: ["wordcloud"] },
713
+ { token: "scale", category: "directive", chartTypes: "all" },
714
+ {
715
+ token: "values",
716
+ category: "directive",
717
+ chartTypes: ["pert", "tech-radar"]
718
+ },
719
+ {
720
+ token: "orientation-horizontal",
721
+ category: "directive",
722
+ chartTypes: ["bar"]
723
+ },
249
724
  // ── Slope ────────────────────────────────────────────────
250
- { token: "period", category: "directive" },
725
+ { token: "period", category: "directive", chartTypes: "all" },
251
726
  // ── Quadrant ─────────────────────────────────────────────
252
- { token: "x-axis", category: "directive" },
253
- { token: "y-axis", category: "directive" },
254
- { token: "top-right", category: "directive" },
255
- { token: "top-left", category: "directive" },
256
- { token: "bottom-right", category: "directive" },
257
- { token: "bottom-left", category: "directive" },
727
+ { token: "x-axis", category: "directive", chartTypes: "all" },
728
+ { token: "y-axis", category: "directive", chartTypes: "all" },
729
+ {
730
+ token: "top-right",
731
+ category: "directive",
732
+ chartTypes: ["quadrant", "tech-radar"]
733
+ },
734
+ {
735
+ token: "top-left",
736
+ category: "directive",
737
+ chartTypes: ["quadrant", "tech-radar"]
738
+ },
739
+ {
740
+ token: "bottom-right",
741
+ category: "directive",
742
+ chartTypes: ["quadrant", "tech-radar"]
743
+ },
744
+ {
745
+ token: "bottom-left",
746
+ category: "directive",
747
+ chartTypes: ["quadrant", "tech-radar"]
748
+ },
258
749
  // ── Layout (cross-chart) ─────────────────────────────────
259
- { token: "direction-tb", category: "directive" },
260
- { token: "direction-lr", category: "directive" },
261
- { token: "orientation-vertical", category: "directive" },
750
+ {
751
+ token: "direction-tb",
752
+ category: "directive",
753
+ chartTypes: [
754
+ "boxes-and-lines",
755
+ "c4",
756
+ "clock",
757
+ "flowchart",
758
+ "infra",
759
+ "org",
760
+ "pert",
761
+ "sitemap",
762
+ "state",
763
+ "swimlane",
764
+ "version-control"
765
+ ]
766
+ },
767
+ {
768
+ token: "direction-lr",
769
+ category: "directive",
770
+ chartTypes: [
771
+ "boxes-and-lines",
772
+ "c4",
773
+ "clock",
774
+ "flowchart",
775
+ "infra",
776
+ "org",
777
+ "pert",
778
+ "sitemap",
779
+ "state",
780
+ "swimlane",
781
+ "version-control"
782
+ ]
783
+ },
784
+ { token: "orientation-vertical", category: "directive", chartTypes: "all" },
262
785
  // ── Pyramid ──────────────────────────────────────────────
263
- { token: "inverted", category: "directive" },
786
+ { token: "inverted", category: "directive", chartTypes: ["pyramid"] },
264
787
  // ── Color / notes (cross-chart) ──────────────────────────
265
- { token: "color", category: "directive" },
266
- { token: "no-notes", category: "directive" },
788
+ {
789
+ token: "color",
790
+ category: "directive",
791
+ chartTypes: "all"
792
+ },
793
+ {
794
+ token: "no-notes",
795
+ category: "directive",
796
+ chartTypes: ["flowchart", "goal", "state", "whiteboard"]
797
+ },
267
798
  // ── Emphasis family (§1.11, decision #49) ────────────────
268
799
  // `highlight <Name>…` / `dim <Name>…` — the figure/ground axis, orthogonal
269
800
  // to color (§1.5) and to the chart-wide `fill-*` family (§1.9). Both are
@@ -276,122 +807,180 @@ var DIRECTIVES_REGISTRY = [
276
807
  // tokens are registered together so the whole family lights up at once.
277
808
  //
278
809
  // Supported on `sankey` and `family` today; every further chart type is a
279
- // separate decision. Registering them globally is correct regardless: the
280
- // Lezer specializer is context-free (it cannot know the chart type), and the
281
- // same is already true of every other chart-scoped token here.
282
- { token: "highlight", category: "directive" },
283
- { token: "dim", category: "directive" },
810
+ // separate decision, made by adding it to `chartTypes` below (#1734).
811
+ {
812
+ token: "highlight",
813
+ category: "directive",
814
+ chartTypes: ["family", "sankey"]
815
+ },
816
+ { token: "dim", category: "directive", chartTypes: ["family", "sankey"] },
284
817
  // ── RACI ─────────────────────────────────────────────────
285
- { token: "roles", category: "directive" },
818
+ { token: "roles", category: "directive", chartTypes: ["raci"] },
286
819
  // ── Cycle ────────────────────────────────────────────────
287
- { token: "direction-counterclockwise", category: "directive" },
288
- { token: "circle-nodes", category: "directive" },
820
+ {
821
+ token: "direction-counterclockwise",
822
+ category: "directive",
823
+ chartTypes: ["cycle"]
824
+ },
825
+ { token: "circle-nodes", category: "directive", chartTypes: ["cycle"] },
289
826
  // ── Journey-map ──────────────────────────────────────────
290
- { token: "persona", category: "directive" },
827
+ { token: "persona", category: "directive", chartTypes: ["journey-map"] },
291
828
  // ── Function ─────────────────────────────────────────────
292
- { token: "x", category: "directive" },
293
- { token: "fill", category: "directive" },
829
+ { token: "x", category: "directive", chartTypes: ["function"] },
830
+ {
831
+ token: "fill",
832
+ category: "directive",
833
+ chartTypes: ["function", "line", "whiteboard"]
834
+ },
294
835
  // ── Wordcloud ────────────────────────────────────────────
295
- { token: "max", category: "directive" },
296
- { token: "size", category: "directive" },
836
+ { token: "max", category: "directive", chartTypes: ["wordcloud"] },
837
+ {
838
+ token: "size",
839
+ category: "directive",
840
+ chartTypes: ["whiteboard", "wordcloud"]
841
+ },
297
842
  // ── Arc ──────────────────────────────────────────────────
298
- { token: "order", category: "directive" },
843
+ { token: "order", category: "directive", chartTypes: ["arc"] },
299
844
  // ── PERT ─────────────────────────────────────────────────
300
- { token: "time-unit", category: "directive" },
301
- { token: "default-confidence", category: "directive" },
302
- { token: "node-detail", category: "directive" },
303
- { token: "trials", category: "directive" },
304
- { token: "seed", category: "directive" },
305
- { token: "scrubber-trials", category: "directive" },
845
+ { token: "time-unit", category: "directive", chartTypes: ["pert"] },
846
+ { token: "default-confidence", category: "directive", chartTypes: ["pert"] },
847
+ { token: "node-detail", category: "directive", chartTypes: ["pert"] },
848
+ { token: "trials", category: "directive", chartTypes: ["pert"] },
849
+ { token: "seed", category: "directive", chartTypes: ["bracket", "pert"] },
850
+ { token: "scrubber-trials", category: "directive", chartTypes: ["pert"] },
306
851
  // `start-date` is also gantt's canonical project-start option (decision #48;
307
852
  // bare `start` above stays as the legacy alias).
308
- { token: "start-date", category: "directive", gantt: ["option"] },
309
- { token: "end-date", category: "directive" },
853
+ {
854
+ token: "start-date",
855
+ category: "directive",
856
+ gantt: ["option"],
857
+ chartTypes: ["gantt", "pert"]
858
+ },
859
+ { token: "end-date", category: "directive", chartTypes: ["pert"] },
310
860
  // ── Goal ─────────────────────────────────────────────────
311
861
  // Mode flags, value-key leaders, and opt-outs. `now`/`target` collide with
312
862
  // label prose ("start now", "on target"), but the arrow-label demotion pass
313
863
  // (see highlight-api LABEL_WORD_NODES) treats any keyword-bearing label as
314
864
  // text and demotes them, so they highlight only as line leaders.
315
- { token: "thermometer", category: "directive" },
316
- { token: "gauge", category: "directive" },
317
- { token: "now", category: "directive" },
318
- { token: "target", category: "directive" },
319
- { token: "no-note", category: "directive" },
320
- { token: "no-auto-color", category: "directive" },
865
+ { token: "thermometer", category: "directive", chartTypes: ["goal"] },
866
+ { token: "gauge", category: "directive", chartTypes: ["goal"] },
867
+ {
868
+ token: "now",
869
+ category: "directive",
870
+ chartTypes: ["event-line", "goal", "pert"]
871
+ },
872
+ { token: "target", category: "directive", chartTypes: ["countdown", "goal"] },
873
+ { token: "no-note", category: "directive", chartTypes: ["goal"] },
874
+ { token: "no-auto-color", category: "directive", chartTypes: ["goal"] },
321
875
  // ── Control-flow + wireframe element keywords (CONTROL) ──
322
- { token: "if", category: "control" },
323
- { token: "else", category: "control" },
324
- { token: "loop", category: "control" },
325
- { token: "parallel", category: "control" },
326
- { token: "note", category: "control" },
327
- { token: "nav", category: "control" },
328
- { token: "tabs", category: "control" },
329
- { token: "table", category: "control" },
330
- { token: "image", category: "control" },
331
- { token: "modal", category: "control" },
332
- { token: "skeleton", category: "control" },
333
- { token: "alert", category: "control" },
334
- { token: "progress", category: "control" },
335
- { token: "mobile", category: "control" },
876
+ { token: "if", category: "control", chartTypes: ["sequence"] },
877
+ { token: "else", category: "control", chartTypes: ["sequence"] },
878
+ { token: "loop", category: "control", chartTypes: ["sequence"] },
879
+ { token: "parallel", category: "control", chartTypes: ["gantt", "sequence"] },
880
+ {
881
+ token: "note",
882
+ category: "control",
883
+ chartTypes: [
884
+ "boxes-and-lines",
885
+ "class",
886
+ "countdown",
887
+ "er",
888
+ "flowchart",
889
+ "goal",
890
+ "sequence",
891
+ "state",
892
+ "swimlane",
893
+ "version-control",
894
+ "whiteboard"
895
+ ]
896
+ },
897
+ { token: "nav", category: "control", chartTypes: ["wireframe"] },
898
+ { token: "tabs", category: "control", chartTypes: ["wireframe"] },
899
+ { token: "table", category: "control", chartTypes: ["wireframe"] },
900
+ {
901
+ token: "image",
902
+ category: "control",
903
+ chartTypes: ["whiteboard", "wireframe"]
904
+ },
905
+ { token: "modal", category: "control", chartTypes: ["wireframe"] },
906
+ { token: "skeleton", category: "control", chartTypes: ["wireframe"] },
907
+ { token: "alert", category: "control", chartTypes: ["wireframe"] },
908
+ {
909
+ token: "progress",
910
+ category: "control",
911
+ chartTypes: ["gantt", "wireframe"]
912
+ },
913
+ { token: "mobile", category: "control", chartTypes: ["wireframe"] },
336
914
  // Whiteboard element leaders (§39). `image` is shared with wireframe above
337
915
  // and `text` stays an ER modifier; `database` / `queue` are left plain
338
916
  // because sequence uses them as values, not line leaders.
339
- { token: "rectangle", category: "control" },
340
- { token: "ellipse", category: "control" },
341
- { token: "arrow", category: "control" },
342
- { token: "ink", category: "control" },
917
+ { token: "rectangle", category: "control", chartTypes: ["whiteboard"] },
918
+ { token: "ellipse", category: "control", chartTypes: ["whiteboard"] },
919
+ { token: "arrow", category: "control", chartTypes: ["whiteboard"] },
920
+ { token: "ink", category: "control", chartTypes: ["whiteboard"] },
921
+ // ── SWOT section keywords (CONTROL) ──────────────────────
922
+ { token: "strengths", category: "control", chartTypes: ["swot"] },
923
+ { token: "weaknesses", category: "control", chartTypes: ["swot"] },
924
+ { token: "opportunities", category: "control", chartTypes: ["swot"] },
925
+ { token: "threats", category: "control", chartTypes: ["swot"] },
926
+ { token: "no-axes", category: "directive", chartTypes: ["swot"] },
927
+ { token: "no-tint-items", category: "directive", chartTypes: ["swot"] },
343
928
  // ── Kanban status keywords (STATUS) ──────────────────────
344
- { token: "na", category: "status" },
345
- { token: "todo", category: "status" },
346
- { token: "wip", category: "status" },
347
- { token: "done", category: "status" },
348
- { token: "blocked", category: "status" },
349
- { token: "in-progress", category: "status" },
350
- { token: "backlog", category: "status" },
351
- { token: "ready", category: "status" },
929
+ { token: "na", category: "status", chartTypes: ["kanban"] },
930
+ { token: "todo", category: "status", chartTypes: ["kanban"] },
931
+ { token: "wip", category: "status", chartTypes: ["kanban"] },
932
+ { token: "done", category: "status", chartTypes: ["kanban"] },
933
+ { token: "blocked", category: "status", chartTypes: ["kanban"] },
934
+ { token: "in-progress", category: "status", chartTypes: ["kanban"] },
935
+ { token: "backlog", category: "status", chartTypes: ["kanban"] },
936
+ { token: "ready", category: "status", chartTypes: ["kanban"] },
352
937
  // ── Modifiers + ER column types/modifiers (MODIFIER) ─────
353
938
  // `collapsed` is the bare trailing group-line flag made canonical by
354
939
  // decision #48 (`[Fulfillment] collapsed`). It is deliberately a bare
355
940
  // MODIFIER rather than a colon key: the legacy `collapsed: true` form still
356
941
  // parses and still highlights (as `modifier` instead of `propertyName`),
357
942
  // whereas leaving it colon-only left the canonical bare form as plain text.
358
- { token: "collapsed", category: "modifier" },
359
- { token: "as", category: "modifier" },
360
- { token: "alias", category: "modifier" },
361
- { token: "aka", category: "modifier" },
362
- { token: "position", category: "modifier" },
363
- { token: "default", category: "modifier" },
364
- { token: "pk", category: "modifier" },
365
- { token: "fk", category: "modifier" },
366
- { token: "nullable", category: "modifier" },
367
- { token: "unique", category: "modifier" },
368
- { token: "int", category: "modifier" },
369
- { token: "varchar", category: "modifier" },
370
- { token: "text", category: "modifier" },
371
- { token: "boolean", category: "modifier" },
372
- { token: "date", category: "modifier" },
373
- { token: "timestamp", category: "modifier" },
374
- { token: "float", category: "modifier" },
375
- { token: "decimal", category: "modifier" },
943
+ { token: "collapsed", category: "modifier", chartTypes: "all" },
944
+ { token: "as", category: "modifier", chartTypes: "all" },
945
+ { token: "alias", category: "modifier", chartTypes: "all" },
946
+ { token: "aka", category: "modifier", chartTypes: "all" },
947
+ { token: "position", category: "modifier", chartTypes: "all" },
948
+ { token: "default", category: "modifier", chartTypes: "all" },
949
+ { token: "pk", category: "modifier", chartTypes: ["er"] },
950
+ { token: "fk", category: "modifier", chartTypes: ["er"] },
951
+ { token: "nullable", category: "modifier", chartTypes: ["er"] },
952
+ { token: "unique", category: "modifier", chartTypes: ["er"] },
953
+ { token: "int", category: "modifier", chartTypes: ["class", "er"] },
954
+ { token: "varchar", category: "modifier", chartTypes: ["class", "er"] },
955
+ {
956
+ token: "text",
957
+ category: "modifier",
958
+ chartTypes: ["class", "er", "whiteboard"]
959
+ },
960
+ { token: "boolean", category: "modifier", chartTypes: ["class", "er"] },
961
+ { token: "date", category: "modifier", chartTypes: ["class", "er"] },
962
+ { token: "timestamp", category: "modifier", chartTypes: ["class", "er"] },
963
+ { token: "float", category: "modifier", chartTypes: ["class", "er"] },
964
+ { token: "decimal", category: "modifier", chartTypes: ["class", "er"] },
376
965
  // ── Bracket ──────────────────────────────────────────────
377
966
  // `beats` / `vs` are the infix match keywords; the rest are line directives.
378
967
  // (`seed` and `no-legend` already appear above — shared, not re-listed.)
379
- { token: "beats", category: "control" },
380
- { token: "vs", category: "control" },
381
- { token: "rounds", category: "directive" },
382
- { token: "accent", category: "directive" },
383
- { token: "no-round", category: "modifier" },
384
- { token: "no-rounds", category: "modifier" },
385
- { token: "single-elim", category: "modifier" },
386
- { token: "double-elim", category: "modifier" },
387
- { token: "seeded", category: "modifier" },
968
+ { token: "beats", category: "control", chartTypes: ["bracket"] },
969
+ { token: "vs", category: "control", chartTypes: ["bracket"] },
970
+ { token: "rounds", category: "directive", chartTypes: ["bracket"] },
971
+ { token: "accent", category: "directive", chartTypes: "all" },
972
+ { token: "no-round", category: "modifier", chartTypes: ["bracket"] },
973
+ { token: "no-rounds", category: "modifier", chartTypes: ["bracket"] },
974
+ { token: "single-elim", category: "modifier", chartTypes: ["bracket"] },
975
+ { token: "double-elim", category: "modifier", chartTypes: ["bracket"] },
976
+ { token: "seeded", category: "modifier", chartTypes: ["bracket"] },
388
977
  // ── Live link (§38) ──────────────────────────────────────
389
978
  // The pointer type's one directive. Registered so it highlights and
390
979
  // autocompletes like `palette` does — §38 justifies the shape by calling it
391
980
  // "the ordinary DGMO directive shape", and an unregistered `url` would make
392
981
  // that sentence false in the editor: `editor/tokens.ts` specializes only
393
982
  // against the keyword registries, so it would render as plain identifier text.
394
- { token: "url", category: "directive" }
983
+ { token: "url", category: "directive", chartTypes: ["live-link"] }
395
984
  ];
396
985
  function tokensWhere(pred) {
397
986
  const out = /* @__PURE__ */ new Set();
@@ -427,6 +1016,21 @@ var REGISTRY_STATUS_TOKENS = tokensWhere(
427
1016
  var REGISTRY_MODIFIER_TOKENS = tokensWhere(
428
1017
  (e) => e.category === "modifier" && !e.colonKey && !e.noHighlight
429
1018
  );
1019
+ var REGISTRY_TOKEN_CHART_TYPES = (() => {
1020
+ const out = /* @__PURE__ */ new Map();
1021
+ for (const e of DIRECTIVES_REGISTRY) {
1022
+ const prev = out.get(e.token);
1023
+ if (prev === "all") continue;
1024
+ if (e.chartTypes === "all") {
1025
+ out.set(e.token, "all");
1026
+ continue;
1027
+ }
1028
+ const set = prev ?? /* @__PURE__ */ new Set();
1029
+ for (const t of e.chartTypes) set.add(t);
1030
+ out.set(e.token, set);
1031
+ }
1032
+ return out;
1033
+ })();
430
1034
  var REGISTRY_COLON_KEY_TOKENS = tokensWhere((e) => !!e.colonKey);
431
1035
  var REGISTRY_NON_HIGHLIGHT_TOKENS = tokensWhere(
432
1036
  (e) => !!e.noHighlight
@@ -514,6 +1118,10 @@ var chartTypesData = [
514
1118
  id: "kanban",
515
1119
  description: "Task board columns"
516
1120
  },
1121
+ {
1122
+ id: "swot",
1123
+ description: "SWOT analysis: strengths, weaknesses, opportunities and threats in four fixed panels on helpful/harmful and internal/external axes"
1124
+ },
517
1125
  {
518
1126
  id: "raci",
519
1127
  description: "Tasks \xD7 roles responsibility matrix with constraint linting"
@@ -672,8 +1280,66 @@ var STATUS_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_STATUS_TOKENS]);
672
1280
  var MODIFIER_KEYWORDS = /* @__PURE__ */ new Set([...REGISTRY_MODIFIER_TOKENS]);
673
1281
 
674
1282
  // src/editor/tokens.ts
675
- function specializeKeyword(value) {
1283
+ var PENDING = 0;
1284
+ var UNKNOWN = -1;
1285
+ var CHART_TYPE_INDEX = new Map(
1286
+ CHART_TYPE_IDS.map((id, i) => [id, i + 1])
1287
+ );
1288
+ function readToken(input, length) {
1289
+ let s = "";
1290
+ for (let i = 0; i < length; i++) s += String.fromCharCode(input.peek(i));
1291
+ return s;
1292
+ }
1293
+ function decide(term, text) {
1294
+ if (term !== ChartType) return UNKNOWN;
1295
+ return CHART_TYPE_INDEX.get(text()) ?? UNKNOWN;
1296
+ }
1297
+ var chartTypeContext = new ContextTracker({
1298
+ start: PENDING,
1299
+ shift(context, term, stack, input) {
1300
+ if (context !== PENDING) return context;
1301
+ if (term >= stack.parser.nodeSet.types.length || term === Comment)
1302
+ return context;
1303
+ return decide(term, () => readToken(input, stack.pos - input.pos));
1304
+ },
1305
+ // A node reused from an earlier parse is not shifted token by token, so a
1306
+ // reused first line has to decide the context here, from its first leaf.
1307
+ // Not observed (2026-11-06, @lezer/lr 1.4.10: the first line sat in a
1308
+ // re-parsed buffer in every probe), but nothing in Lezer promises that.
1309
+ reuse(context, node, _stack, input) {
1310
+ if (context !== PENDING) return context;
1311
+ const cursor = node.cursor();
1312
+ for (; ; ) {
1313
+ if (cursor.firstChild()) continue;
1314
+ const { from, to } = cursor;
1315
+ const id = cursor.type.id;
1316
+ if (id !== Comment && to > from) {
1317
+ return decide(id, () => {
1318
+ let s = "";
1319
+ for (let i = from; i < to; i++)
1320
+ s += String.fromCharCode(input.peek(i));
1321
+ return s;
1322
+ });
1323
+ }
1324
+ if (!advance(cursor)) return context;
1325
+ }
1326
+ },
1327
+ hash: (context) => context
1328
+ });
1329
+ function advance(cursor) {
1330
+ while (!cursor.nextSibling()) if (!cursor.parent()) return false;
1331
+ return true;
1332
+ }
1333
+ function inScope(value, context) {
1334
+ if (context <= PENDING) return true;
1335
+ const scope = REGISTRY_TOKEN_CHART_TYPES.get(value);
1336
+ if (scope === void 0 || scope === "all") return true;
1337
+ return scope.has(CHART_TYPE_IDS[context - 1]);
1338
+ }
1339
+ function specializeKeyword(value, stack) {
676
1340
  if (CHART_TYPES.has(value)) return ChartType;
1341
+ if (!inScope(value, stack?.context ?? UNKNOWN))
1342
+ return -1;
677
1343
  if (value === TAG_KEYWORD) return TagKeyword;
678
1344
  if (DIRECTIVE_KEYWORDS.has(value)) return DirectiveKeyword;
679
1345
  if (CONTROL_KEYWORDS.has(value)) return ControlKeyword;
@@ -690,6 +1356,7 @@ var parser = LRParser.deserialize({
690
1356
  goto: "!byPPPPPPPPzPPPPPPPPPPPPPPPPPPPPPPPPP!O!UPPPP!]TSOTQTORWTSROTRURVQORT",
691
1357
  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",
692
1358
  maxTerm: 40,
1359
+ context: chartTypeContext,
693
1360
  skippedNodes: [0],
694
1361
  repeatNodeCount: 2,
695
1362
  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",