@diagrammo/dgmo 0.52.0 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/.cursorrules +59 -58
  2. package/.github/copilot-instructions.md +59 -58
  3. package/.windsurfrules +59 -58
  4. package/SKILL.md +59 -58
  5. package/dist/advanced.d.ts +65 -230
  6. package/dist/advanced.js +278 -611
  7. package/dist/analyzer-TDN5KJFP.js +15 -0
  8. package/dist/auto.css +14 -6
  9. package/dist/auto.js +142 -132
  10. package/dist/auto.mjs +1117 -452
  11. package/dist/block.css +14 -6
  12. package/dist/block.js +85 -72
  13. package/dist/calculator-VBIT6GQF.js +11 -0
  14. package/dist/chart-meta-CPNVUZ5J.d.ts +232 -0
  15. package/dist/chart-meta.d.ts +2 -0
  16. package/dist/chart-meta.js +105 -0
  17. package/dist/charts-d3-DH2XA45I.js +26 -0
  18. package/dist/{chunk-QJMKPUYK.js → chunk-22OQWBWD.js} +14 -7
  19. package/dist/{chunk-5NGAO4QK.js → chunk-27STWBOK.js} +10 -8
  20. package/dist/{chunk-QGATPIPX.js → chunk-2QC4HXCY.js} +31 -17
  21. package/dist/{chunk-HFMYN6N2.js → chunk-3B2GXZCX.js} +4 -3
  22. package/dist/{chunk-6HQH6JZE.js → chunk-3BEKKRH5.js} +10 -10
  23. package/dist/{chunk-AL672HNE.js → chunk-3CZLWOCI.js} +17 -7
  24. package/dist/{chunk-J7TLCB2Q.js → chunk-3IUHKMJI.js} +2 -2
  25. package/dist/{chunk-7L4UJOY6.js → chunk-3TYUXC7D.js} +2 -2
  26. package/dist/{chunk-Y2ZE3MSG.js → chunk-43E26CDA.js} +2 -2
  27. package/dist/{chunk-YTMTPUH4.js → chunk-4ASVFYB2.js} +6 -6
  28. package/dist/{chunk-WCT3NYCV.js → chunk-4ASYQ347.js} +33 -8
  29. package/dist/{chunk-ZNWAYU6N.js → chunk-4K42RUGC.js} +33 -9
  30. package/dist/{chunk-I5IGB56C.js → chunk-4QV26TEG.js} +41 -1
  31. package/dist/{chunk-QOOUC2J5.js → chunk-4RGZFA7H.js} +2 -2
  32. package/dist/{chunk-CXK4DZH3.js → chunk-4W2PE66Q.js} +12 -2
  33. package/dist/{chunk-CIRFIL4M.js → chunk-4WGMGKCZ.js} +13 -13
  34. package/dist/{chunk-JED6ZDEE.js → chunk-5HWPEYWB.js} +2 -2
  35. package/dist/{chunk-VQOCMUWI.js → chunk-65V6IRFN.js} +16 -14
  36. package/dist/{chunk-R3YSD62R.js → chunk-6AUZPPAV.js} +3 -3
  37. package/dist/{chunk-FQ7HTV52.js → chunk-6DCOIN4W.js} +33 -5
  38. package/dist/{chunk-MUE65OTD.js → chunk-6HTRCTAS.js} +4 -4
  39. package/dist/{chunk-TJVLKNGR.js → chunk-6KY7OCZC.js} +5 -5
  40. package/dist/{chunk-YAA6IID3.js → chunk-774C2FF3.js} +2 -2
  41. package/dist/{chunk-UBLHQTLV.js → chunk-7GUF6SDR.js} +15 -14
  42. package/dist/{chunk-5HILBT7X.js → chunk-7JDTNFAK.js} +3 -3
  43. package/dist/{chunk-QBZYACOG.js → chunk-ADYKAKE3.js} +3 -3
  44. package/dist/{chunk-H7KENAZO.js → chunk-AHXIMHDQ.js} +74 -14
  45. package/dist/chunk-AIMLCDAO.js +404 -0
  46. package/dist/{chunk-4IHAV6O7.js → chunk-ALYZ3MAA.js} +4 -4
  47. package/dist/{chunk-ROOE4R4Y.js → chunk-AN2DQB3G.js} +146 -18
  48. package/dist/{chunk-GCYTI3DE.js → chunk-AZNXGWDC.js} +56 -10
  49. package/dist/{chunk-3LK5DNED.js → chunk-B4XS2AF2.js} +3 -3
  50. package/dist/{chunk-3HF5YEFJ.js → chunk-BD3WGY4T.js} +4 -4
  51. package/dist/{chunk-4AQRFDXL.js → chunk-BFDVEO5R.js} +2 -2
  52. package/dist/{chunk-REJAIQ5S.js → chunk-BR7AYN76.js} +8 -8
  53. package/dist/{chunk-P3NRSSUU.js → chunk-BULHGPHK.js} +3 -3
  54. package/dist/{chunk-VILVLS7P.js → chunk-CK2GMDXD.js} +8 -4
  55. package/dist/{chunk-HHKO6SKY.js → chunk-CMVZWP32.js} +3 -3
  56. package/dist/{chunk-GJFAMOGK.js → chunk-CQFNIIQN.js} +7 -7
  57. package/dist/{chunk-FT3ZYWET.js → chunk-DWUMPMV2.js} +11 -10
  58. package/dist/{chunk-USZW2HHU.js → chunk-EQW6HOP4.js} +4 -3
  59. package/dist/{chunk-Z5QVYKR7.js → chunk-FFXCKZOU.js} +4 -4
  60. package/dist/{chunk-WRNFDFPU.js → chunk-FGDSTT3F.js} +2 -2
  61. package/dist/{chunk-FY5MSZAP.js → chunk-FLDC7ZAK.js} +21 -6
  62. package/dist/{chunk-AAXZDUOV.js → chunk-FT7TPPZ5.js} +17 -16
  63. package/dist/{chunk-3QD7VP3U.js → chunk-FUKNRLIJ.js} +14 -7
  64. package/dist/{chunk-3YRPZ7ZZ.js → chunk-FXCB7H5O.js} +4 -4
  65. package/dist/{chunk-SMRFPVLQ.js → chunk-GABSL6TH.js} +4 -4
  66. package/dist/{chunk-BKVOYV6I.js → chunk-GAWKIIPO.js} +17 -17
  67. package/dist/{chunk-HWX6ZHF3.js → chunk-GMAH572Z.js} +6 -6
  68. package/dist/{chunk-MUVJ57EP.js → chunk-GMIJ35PW.js} +23 -20
  69. package/dist/{chunk-7QE3XMRK.js → chunk-GQ644SPD.js} +18 -18
  70. package/dist/{chunk-5QKQSSPO.js → chunk-GRM2A4BG.js} +4 -4
  71. package/dist/{chunk-J7KJR3R6.js → chunk-GWQJKTFS.js} +133 -696
  72. package/dist/{chunk-OTOHI4JO.js → chunk-H3HFC3SQ.js} +2 -2
  73. package/dist/{chunk-SWSIKFEB.js → chunk-HE5J53SZ.js} +4 -4
  74. package/dist/{chunk-7BIZCTAX.js → chunk-HNBY6CNV.js} +3 -3
  75. package/dist/{chunk-J76PIKAT.js → chunk-HO3RCNF6.js} +3 -3
  76. package/dist/{chunk-44VCIPHF.js → chunk-HORZ5H2L.js} +26 -23
  77. package/dist/{chunk-MX2EY5Y7.js → chunk-HOXKNRON.js} +2 -2
  78. package/dist/{chunk-LTXOLDUZ.js → chunk-I64ECJX3.js} +12 -5
  79. package/dist/{chunk-4YFKQ5WT.js → chunk-IQJCVREL.js} +8 -8
  80. package/dist/{chunk-YIBAWQGJ.js → chunk-J7HI6G3G.js} +7 -7
  81. package/dist/{chunk-ICPJPQ5C.js → chunk-JHOAH4TI.js} +3 -3
  82. package/dist/{chunk-6EJITS44.js → chunk-JTMSWEIW.js} +6 -6
  83. package/dist/{chunk-WBM7ZNDI.js → chunk-JYDMBWRP.js} +35 -18
  84. package/dist/{chunk-7DF4J4RL.js → chunk-KKHCNSKK.js} +17 -11
  85. package/dist/{chunk-4UNQ6X24.js → chunk-KUSAVOWZ.js} +4 -4
  86. package/dist/{chunk-77FGAVZC.js → chunk-LC3FFD43.js} +21 -19
  87. package/dist/{chunk-INE5YJBZ.js → chunk-LHILKFDP.js} +10 -10
  88. package/dist/{chunk-ONU3U4GL.js → chunk-LQHVDZYC.js} +52 -16
  89. package/dist/{chunk-75G3Q4DK.js → chunk-MA3HJZHB.js} +5 -5
  90. package/dist/{chunk-QVENJMNX.js → chunk-MEQYZZFR.js} +2 -2
  91. package/dist/{chunk-IM6PDDCE.js → chunk-NNUMX6WX.js} +42 -12
  92. package/dist/{chunk-FQMUHRVC.js → chunk-NNYFQOTK.js} +14 -13
  93. package/dist/{chunk-H6PI3KJT.js → chunk-ODUT5WMC.js} +2 -2
  94. package/dist/{chunk-K4EOKJA6.js → chunk-P3H7QVDH.js} +42 -15
  95. package/dist/{chunk-FUPF2UYQ.js → chunk-PIXZTCKH.js} +51 -108
  96. package/dist/{chunk-BPY242XU.js → chunk-PKNNHU7H.js} +19 -8
  97. package/dist/{chunk-BPIZNB5O.js → chunk-PT4SW76W.js} +11 -11
  98. package/dist/{chunk-UNURMIQO.js → chunk-PV2QO7QL.js} +4 -4
  99. package/dist/{chunk-LGT3PZCJ.js → chunk-PYO4TJJ3.js} +17 -17
  100. package/dist/{chunk-EMLPOL77.js → chunk-Q7AH665U.js} +15 -8
  101. package/dist/{chunk-LBMS4AW6.js → chunk-QAALSCKI.js} +14 -14
  102. package/dist/{chunk-JRCOYRRH.js → chunk-QI3BOLQB.js} +8 -8
  103. package/dist/{chunk-CCNDLW7Z.js → chunk-QWIBT6DS.js} +13 -13
  104. package/dist/{chunk-GU46PPT3.js → chunk-QXGACPS2.js} +5 -5
  105. package/dist/{chunk-FMDSF3OV.js → chunk-QZAW5SFH.js} +2 -2
  106. package/dist/{chunk-QHXCAEMX.js → chunk-R5NH5BZG.js} +8 -8
  107. package/dist/{chunk-5223KXFD.js → chunk-RJ5LBZ5U.js} +7 -7
  108. package/dist/{chunk-PRI2OD4E.js → chunk-RW5PEJ7D.js} +11 -6
  109. package/dist/{chunk-DYWQFQJP.js → chunk-SG4PRYO3.js} +22 -20
  110. package/dist/{chunk-NNS4E7CW.js → chunk-SGPFVDUL.js} +15 -6
  111. package/dist/{chunk-ZEF5M5MB.js → chunk-SQCBSFT5.js} +72 -74
  112. package/dist/{chunk-3HGU63UY.js → chunk-U7NKYLX2.js} +14 -13
  113. package/dist/chunk-U7VO6JAA.js +566 -0
  114. package/dist/{chunk-ZJV7GYR4.js → chunk-UFQJMOVZ.js} +10 -10
  115. package/dist/{chunk-Z72XRXD4.js → chunk-UJRTPOHH.js} +3 -3
  116. package/dist/{chunk-J6QROYDA.js → chunk-UK6DKJLD.js} +26 -10
  117. package/dist/{chunk-QZX5S6R3.js → chunk-UKP5HWB5.js} +149 -89
  118. package/dist/{chunk-T4A4TSTJ.js → chunk-UQRIKAMH.js} +21 -19
  119. package/dist/{chunk-TYS6CSS5.js → chunk-UU6LUYUH.js} +2 -2
  120. package/dist/{chunk-5BHJZH62.js → chunk-UVDCHR4E.js} +18 -6
  121. package/dist/{chunk-HQQNCY7W.js → chunk-VAO6ANGC.js} +5 -5
  122. package/dist/{chunk-6NYWYNBI.js → chunk-VGNIDAPQ.js} +4 -4
  123. package/dist/{chunk-VL2O2F3W.js → chunk-VHO3YBTB.js} +2 -2
  124. package/dist/{chunk-FHGVORFO.js → chunk-VIRANCNY.js} +14 -14
  125. package/dist/{chunk-XD6ZYURY.js → chunk-VJHBSPGF.js} +7 -14
  126. package/dist/{chunk-5RP7JRVP.js → chunk-VKNCC2GX.js} +12 -8
  127. package/dist/{chunk-TPFKKXCB.js → chunk-VRRDUYOK.js} +7 -7
  128. package/dist/{chunk-K2I2XOZD.js → chunk-W2DINCHL.js} +11 -11
  129. package/dist/{chunk-AUIM2NVH.js → chunk-W5KMNC5U.js} +8 -8
  130. package/dist/{chunk-FFUN5D66.js → chunk-WF64MW5G.js} +2 -2
  131. package/dist/{chunk-6LBQ7ELG.js → chunk-X3RXGSCZ.js} +40 -21
  132. package/dist/{chunk-HBPDFCQY.js → chunk-XEAQDIMF.js} +7 -6
  133. package/dist/{chunk-TTIM6YTT.js → chunk-XG4NWFPY.js} +17 -16
  134. package/dist/{chunk-7KINELPI.js → chunk-XQ4KN6JQ.js} +23 -23
  135. package/dist/{chunk-WBRZJOEC.js → chunk-XY3UDKKH.js} +4 -4
  136. package/dist/{chunk-5SEVICBT.js → chunk-YG2BEIQU.js} +14 -13
  137. package/dist/{chunk-BRENJ2BQ.js → chunk-YJVA3QUU.js} +24 -4
  138. package/dist/{chunk-KGVZ5VGH.js → chunk-YR43LJT5.js} +16 -15
  139. package/dist/{chunk-TLVIHFRO.js → chunk-ZKPPI6BF.js} +2 -2
  140. package/dist/{chunk-ARGMQ3H4.js → chunk-ZXUAPTCK.js} +3 -3
  141. package/dist/cli.cjs +156 -154
  142. package/dist/clock.js +9 -1
  143. package/dist/countdown.js +4 -3
  144. package/dist/dgmo-router-B4S23EBH.js +86 -0
  145. package/dist/dimensions-K6PGYYGT.js +22 -0
  146. package/dist/editor.js +33 -5
  147. package/dist/element.js +142 -132
  148. package/dist/element.mjs +1117 -452
  149. package/dist/flowchart-parser-LALR6J6F.js +21 -0
  150. package/dist/{flowchart-renderer-MNCDS7MV.js → flowchart-renderer-DXYB5YRF.js} +14 -14
  151. package/dist/highlight.js +37 -6
  152. package/dist/index.d.ts +4 -2
  153. package/dist/index.js +78 -73
  154. package/dist/layout-3BVDMKXI.js +15 -0
  155. package/dist/layout-3M5UYJHY.js +14 -0
  156. package/dist/{layout-2L3WMRYU.js → layout-3V2A4MUE.js} +8 -8
  157. package/dist/layout-4IHCMWZN.js +19 -0
  158. package/dist/layout-5XGYNYVT.js +9 -0
  159. package/dist/layout-AZUPXWSK.js +15 -0
  160. package/dist/{layout-F4WO357A.js → layout-CAAKQX4W.js} +3 -3
  161. package/dist/{layout-A5UHRWVH.js → layout-CB3XWCOI.js} +3 -3
  162. package/dist/{layout-OAC4PEAC.js → layout-E6HR6PXH.js} +7 -7
  163. package/dist/{layout-7QXCNOVS.js → layout-HBWT2G23.js} +3 -3
  164. package/dist/layout-KPQWJNAG.js +14 -0
  165. package/dist/layout-OL2XFJXA.js +17 -0
  166. package/dist/layout-WCAIKGZG.js +19 -0
  167. package/dist/layout-WSMPBQ4Q.js +17 -0
  168. package/dist/layout-ZE5DRJWX.js +20 -0
  169. package/dist/{layout-search-55FU6HD3.js → layout-search-34DPZD43.js} +51 -35
  170. package/dist/legend-constants-P5EQWRQQ.js +49 -0
  171. package/dist/{palettes-UDLZ2SA4.js → palettes-FGTNFARW.js} +4 -4
  172. package/dist/{parser-EYCKNKQA.js → parser-275KP7JO.js} +8 -8
  173. package/dist/parser-27Z76SN3.js +22 -0
  174. package/dist/parser-3CODK6RG.js +15 -0
  175. package/dist/{parser-YKYMQG3B.js → parser-3KIGEEJM.js} +6 -6
  176. package/dist/parser-3VSWEKBF.js +15 -0
  177. package/dist/parser-4E4I3GNT.js +13 -0
  178. package/dist/parser-5FGJSQNS.js +12 -0
  179. package/dist/parser-5HQXCNOS.js +12 -0
  180. package/dist/parser-5QPFOB5F.js +12 -0
  181. package/dist/parser-6B6SSZT7.js +11 -0
  182. package/dist/parser-6PPHAXXH.js +14 -0
  183. package/dist/parser-7JHWEWXM.js +13 -0
  184. package/dist/{parser-DQAFLUJB.js → parser-7JVIDLLR.js} +7 -7
  185. package/dist/parser-CKA3QMAG.js +18 -0
  186. package/dist/parser-CRKLXGW7.js +13 -0
  187. package/dist/parser-EXNBDNGY.js +11 -0
  188. package/dist/parser-FF4BMRSB.js +16 -0
  189. package/dist/parser-FOOFEJQU.js +13 -0
  190. package/dist/parser-G26MTBFS.js +11 -0
  191. package/dist/parser-GKP2MHHL.js +11 -0
  192. package/dist/parser-GN2MM5CC.js +11 -0
  193. package/dist/parser-IKWK2ZU3.js +18 -0
  194. package/dist/parser-IVGHXLZP.js +14 -0
  195. package/dist/parser-NNIL3HXU.js +11 -0
  196. package/dist/parser-RNLTBIJ6.js +19 -0
  197. package/dist/parser-UWRX52PC.js +16 -0
  198. package/dist/parser-VOERD6XR.js +14 -0
  199. package/dist/parser-XNKJCMMA.js +13 -0
  200. package/dist/parser-XVPTRWZ4.js +15 -0
  201. package/dist/parser-YSLNDFLV.js +22 -0
  202. package/dist/{parser-ZL5QUFVH.js → parser-ZGNXYFPS.js} +5 -5
  203. package/dist/parser-ZQDQTB4X.js +20 -0
  204. package/dist/pert.d.ts +2 -0
  205. package/dist/registry-CaSw0PSH.d.ts +350 -0
  206. package/dist/renderer-2C6DJRYN.js +24 -0
  207. package/dist/renderer-5MPN7CXZ.js +19 -0
  208. package/dist/renderer-6EN5XXJZ.js +27 -0
  209. package/dist/renderer-6WRYVM5R.js +24 -0
  210. package/dist/renderer-7NQSTQMQ.js +16 -0
  211. package/dist/renderer-7ZNVOVFG.js +16 -0
  212. package/dist/{renderer-DT4XRFEP.js → renderer-AK2WO4EI.js} +7 -7
  213. package/dist/renderer-COLQFSFV.js +26 -0
  214. package/dist/{renderer-3F7OS2AX.js → renderer-CWEFGEIC.js} +15 -15
  215. package/dist/renderer-D3BRNOMV.js +29 -0
  216. package/dist/renderer-HIFQVEJA.js +22 -0
  217. package/dist/renderer-JCZG6AYU.js +28 -0
  218. package/dist/{renderer-ZWIH4WDW.js → renderer-JTCX6PCG.js} +13 -13
  219. package/dist/renderer-JWGQSTMR.js +37 -0
  220. package/dist/{renderer-NHO46CT2.js → renderer-K7XLVPH5.js} +6 -6
  221. package/dist/renderer-KARQF3F3.js +22 -0
  222. package/dist/renderer-LVZAHRP6.js +34 -0
  223. package/dist/{renderer-CQY6ATOS.js → renderer-NE5W7CQP.js} +8 -8
  224. package/dist/renderer-QD2SJF2I.js +34 -0
  225. package/dist/renderer-RLMOTXZ6.js +37 -0
  226. package/dist/renderer-SQ54MDSA.js +26 -0
  227. package/dist/{renderer-HSHHVYWF.js → renderer-TYHGXAVT.js} +7 -7
  228. package/dist/renderer-UKXW2QPE.js +23 -0
  229. package/dist/renderer-UPF7NRTI.js +28 -0
  230. package/dist/renderer-VMH6L6CP.js +24 -0
  231. package/dist/{renderer-5DAKMIU2.js → renderer-WCWI4I6A.js} +5 -5
  232. package/dist/renderer-WFSUBKUL.js +25 -0
  233. package/dist/renderer-WNFXYYGL.js +21 -0
  234. package/dist/{renderer-KNFTTOBL.js → renderer-XTXSOK3L.js} +14 -14
  235. package/dist/renderer-YUKPS27O.js +24 -0
  236. package/dist/renderer-YUXGXGSW.js +27 -0
  237. package/dist/renderer-ZBTEX2JK.js +16 -0
  238. package/dist/renderer-radial-WF6VOUOD.js +21 -0
  239. package/dist/{resolver-EMTGNR3D.js → resolver-WFKZYBJ2.js} +4 -4
  240. package/dist/state-parser-L7DHZIQO.js +19 -0
  241. package/dist/state-renderer-TFEUOP4H.js +38 -0
  242. package/dist/{themes-32xj5ZTW.d.ts → themes-tbBkIVsn.d.ts} +2 -349
  243. package/docs/ai-integration.md +59 -58
  244. package/docs/language-reference.md +323 -286
  245. package/fonts/Inter-Bold.woff2 +0 -0
  246. package/fonts/Inter-Regular.woff2 +0 -0
  247. package/gallery/fixtures/boxes-and-lines-diverging.dgmo +1 -2
  248. package/gallery/fixtures/boxes-and-lines.dgmo +1 -1
  249. package/gallery/fixtures/clock.dgmo +1 -1
  250. package/gallery/fixtures/event-line.dgmo +1 -1
  251. package/gallery/fixtures/gantt-full.dgmo +1 -1
  252. package/gallery/fixtures/gantt-sprints.dgmo +9 -9
  253. package/gallery/fixtures/gantt.dgmo +1 -1
  254. package/gallery/fixtures/legacy-syntax-backcompat.dgmo +16 -0
  255. package/gallery/fixtures/state-tags.dgmo +40 -0
  256. package/gallery/fixtures/swimlane.dgmo +1 -1
  257. package/gallery/fixtures/timeline-intraday.dgmo +1 -1
  258. package/package.json +5 -1
  259. package/dist/analyzer-BJ54GIFB.js +0 -15
  260. package/dist/calculator-LDYQCDDY.js +0 -11
  261. package/dist/charts-d3-MXEP6BNP.js +0 -26
  262. package/dist/dgmo-router-X7ZGAPIE.js +0 -86
  263. package/dist/dimensions-45H6JQEY.js +0 -22
  264. package/dist/flowchart-parser-UKELHBSB.js +0 -21
  265. package/dist/layout-46N4JJYK.js +0 -17
  266. package/dist/layout-A4XWNVID.js +0 -14
  267. package/dist/layout-AM2JWW3X.js +0 -15
  268. package/dist/layout-EE6GE46Y.js +0 -17
  269. package/dist/layout-G23F7LDH.js +0 -9
  270. package/dist/layout-GM4UGR7B.js +0 -19
  271. package/dist/layout-GQQJXNYH.js +0 -15
  272. package/dist/layout-IIE2S5FK.js +0 -20
  273. package/dist/layout-VMCRX66I.js +0 -14
  274. package/dist/layout-ZDOSXL5G.js +0 -19
  275. package/dist/parser-2ECN6JA2.js +0 -16
  276. package/dist/parser-4WTIHM5J.js +0 -11
  277. package/dist/parser-5H2BTSJQ.js +0 -11
  278. package/dist/parser-75KVXUNS.js +0 -16
  279. package/dist/parser-774AC53T.js +0 -13
  280. package/dist/parser-BE4YCSRU.js +0 -11
  281. package/dist/parser-CNGUQUQI.js +0 -11
  282. package/dist/parser-DEUUSQIN.js +0 -22
  283. package/dist/parser-FXISIU6A.js +0 -14
  284. package/dist/parser-GTB4XC7P.js +0 -18
  285. package/dist/parser-GVEPAUSD.js +0 -12
  286. package/dist/parser-HSQGTY4G.js +0 -19
  287. package/dist/parser-HVKRINUS.js +0 -11
  288. package/dist/parser-J5MIEYO4.js +0 -15
  289. package/dist/parser-KMZIXLDZ.js +0 -13
  290. package/dist/parser-LJHXWSXU.js +0 -14
  291. package/dist/parser-PT3W72G5.js +0 -15
  292. package/dist/parser-SBJQDPHL.js +0 -15
  293. package/dist/parser-SUWWWCMX.js +0 -12
  294. package/dist/parser-SXDRNZOA.js +0 -13
  295. package/dist/parser-UMILOW3M.js +0 -14
  296. package/dist/parser-UP3AZ367.js +0 -13
  297. package/dist/parser-WHPRV3X5.js +0 -20
  298. package/dist/parser-WX3UODSJ.js +0 -12
  299. package/dist/parser-XCIEN3KN.js +0 -13
  300. package/dist/parser-XIRTUMVN.js +0 -18
  301. package/dist/parser-YKCGIG45.js +0 -11
  302. package/dist/parser-ZGM2OJ6Y.js +0 -22
  303. package/dist/renderer-4QB4K7Q3.js +0 -24
  304. package/dist/renderer-5H4SY7YY.js +0 -22
  305. package/dist/renderer-5PIQPFOX.js +0 -16
  306. package/dist/renderer-6MU37QF5.js +0 -19
  307. package/dist/renderer-AQVMWJ4M.js +0 -27
  308. package/dist/renderer-BDDW6K7N.js +0 -24
  309. package/dist/renderer-BNB3VIDY.js +0 -26
  310. package/dist/renderer-CVW75CXL.js +0 -37
  311. package/dist/renderer-ERHBSTQT.js +0 -25
  312. package/dist/renderer-IDPVUFNB.js +0 -28
  313. package/dist/renderer-ILX6BGKR.js +0 -21
  314. package/dist/renderer-JP663HKG.js +0 -22
  315. package/dist/renderer-MVUZBESR.js +0 -16
  316. package/dist/renderer-N4EBR2FV.js +0 -28
  317. package/dist/renderer-NO2QJ5LZ.js +0 -27
  318. package/dist/renderer-OGFV5RXX.js +0 -34
  319. package/dist/renderer-PDLESJMS.js +0 -37
  320. package/dist/renderer-T4MTNINC.js +0 -24
  321. package/dist/renderer-TOUGFGTM.js +0 -24
  322. package/dist/renderer-U3KPD43Y.js +0 -34
  323. package/dist/renderer-X334IJU2.js +0 -26
  324. package/dist/renderer-Y5OAMOCR.js +0 -23
  325. package/dist/renderer-YONAKAJU.js +0 -16
  326. package/dist/renderer-YWMI6Y2U.js +0 -29
  327. package/dist/renderer-radial-7CGZMVMS.js +0 -21
  328. package/dist/state-parser-BATWAID2.js +0 -18
  329. package/dist/state-renderer-3FKZJ3LP.js +0 -34
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-PDKUANDZ.js";
5
5
  import {
6
6
  layoutGraph
7
- } from "./chunk-HFMYN6N2.js";
7
+ } from "./chunk-3B2GXZCX.js";
8
8
  import {
9
9
  appendArrowheadMarkers
10
10
  } from "./chunk-LP7EC4MI.js";
@@ -14,7 +14,7 @@ import {
14
14
  renderNoteBadge,
15
15
  renderNoteBox,
16
16
  renderNoteConnector
17
- } from "./chunk-J7TLCB2Q.js";
17
+ } from "./chunk-3IUHKMJI.js";
18
18
  import {
19
19
  EDGE_STROKE_WIDTH,
20
20
  NODE_STROKE_WIDTH
@@ -22,6 +22,12 @@ import {
22
22
  import {
23
23
  ScaleContext
24
24
  } from "./chunk-YYVTBZZC.js";
25
+ import {
26
+ renderIntegratedLegend
27
+ } from "./chunk-W5KMNC5U.js";
28
+ import {
29
+ getMaxLegendReservedHeight
30
+ } from "./chunk-774C2FF3.js";
25
31
  import {
26
32
  TITLE_FONT_SIZE,
27
33
  TITLE_FONT_WEIGHT,
@@ -31,20 +37,26 @@ import {
31
37
  FONT_FAMILY
32
38
  } from "./chunk-6KFWC4CO.js";
33
39
  import {
34
- measureText
35
- } from "./chunk-WCT3NYCV.js";
40
+ parseState
41
+ } from "./chunk-AN2DQB3G.js";
36
42
  import {
37
43
  contrastText,
38
44
  mix,
39
45
  shapeFill,
40
46
  themeBaseBg
41
- } from "./chunk-WBM7ZNDI.js";
47
+ } from "./chunk-JYDMBWRP.js";
42
48
  import {
43
- parseState
44
- } from "./chunk-ROOE4R4Y.js";
49
+ measureText
50
+ } from "./chunk-4ASYQ347.js";
45
51
  import {
46
- fillModeFromOptions
47
- } from "./chunk-BRENJ2BQ.js";
52
+ resolveActiveTagGroup,
53
+ resolveTagColor,
54
+ tagAttrKey
55
+ } from "./chunk-CMVZWP32.js";
56
+ import {
57
+ fillModeFromOptions,
58
+ legendSuppressed
59
+ } from "./chunk-YJVA3QUU.js";
48
60
 
49
61
  // src/graph/state-renderer.ts
50
62
  import * as d3Selection from "d3-selection";
@@ -100,6 +112,23 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
100
112
  const sGroupExtraPadding = ctx.aesthetic(GROUP_EXTRA_PADDING);
101
113
  const showTitle = !!graph.title && graph.options["no-title"] !== "on";
102
114
  const titleHeight = showTitle ? 40 : 0;
115
+ const tagGroups = graph.tagGroups ?? [];
116
+ const activeTagGroup = resolveActiveTagGroup(
117
+ tagGroups,
118
+ graph.options["active-tag"]
119
+ );
120
+ const legendGroups = tagGroups;
121
+ const hasLegend = legendGroups.length > 0 && !legendSuppressed(graph.options);
122
+ const legendH = hasLegend ? ctx.structural(
123
+ getMaxLegendReservedHeight(
124
+ {
125
+ groups: legendGroups,
126
+ position: { placement: "top-center", titleRelation: "below-title" },
127
+ mode: exportDims ? "export" : "preview"
128
+ },
129
+ width
130
+ )
131
+ ) + 8 : 0;
103
132
  const diagramW = layout.width;
104
133
  const diagramH = layout.height;
105
134
  const { scale, offsetX, offsetY, canvasHeight } = fitDiagramToCanvas({
@@ -108,7 +137,9 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
108
137
  diagramW,
109
138
  diagramH,
110
139
  padding: sDiagramPadding,
111
- titleHeight,
140
+ // The legend band sits directly under the title, so it reserves the same
141
+ // top strip fitDiagramToCanvas already offsets the diagram by.
142
+ titleHeight: titleHeight + legendH,
112
143
  maxScale: MAX_SCALE,
113
144
  exportMode: !!exportDims
114
145
  });
@@ -141,6 +172,21 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
141
172
  }
142
173
  }
143
174
  }
175
+ if (hasLegend) {
176
+ const legendG = svg.append("g").attr("transform", `translate(0, ${titleHeight + 4})`);
177
+ renderIntegratedLegend(legendG, {
178
+ groups: legendGroups,
179
+ activeGroup: activeTagGroup,
180
+ mode: exportDims ? "export" : "preview",
181
+ // Inactive sibling groups stay visible as collapsed pills so the user
182
+ // can click one to flip the active colouring dimension (as in b&l).
183
+ showInactivePills: true,
184
+ palette,
185
+ isDark,
186
+ width
187
+ });
188
+ legendG.selectAll("[data-legend-group]").classed("st-legend-group", true);
189
+ }
144
190
  const contentG = svg.append("g").attr("transform", `translate(${offsetX}, ${offsetY}) scale(${scale})`);
145
191
  for (const group of layout.groups) {
146
192
  if (group.collapsed) continue;
@@ -246,9 +292,22 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
246
292
  const colorOff = graph.options?.["color"] === "off";
247
293
  const fillMode = fillModeFromOptions(graph.options ?? {});
248
294
  const noNotes = graph.options?.["no-notes"] === "on";
295
+ const mutableTagGroups = [...tagGroups];
296
+ const nodeIntentColor = (node) => node.color ?? (activeTagGroup ? resolveTagColor(
297
+ node.metadata ?? {},
298
+ mutableTagGroups,
299
+ activeTagGroup
300
+ ) : void 0);
249
301
  for (const node of layout.nodes) {
250
302
  const isCollapsedGroup = collapsedGroupIds.has(node.id);
251
303
  const nodeG = contentG.append("g").attr("transform", `translate(${node.x}, ${node.y})`).attr("class", isCollapsedGroup ? "st-group-wrapper st-node" : "st-node").attr("data-line-number", String(node.lineNumber)).attr("data-node-id", node.id).style("cursor", "pointer");
304
+ if (activeTagGroup && node.shape !== "pseudostate") {
305
+ const tagKey = tagAttrKey(activeTagGroup);
306
+ const metaValue = node.metadata?.[tagKey];
307
+ if (metaValue) {
308
+ nodeG.attr(`data-tag-${tagKey}`, metaValue.toLowerCase());
309
+ }
310
+ }
252
311
  if (isCollapsedGroup) {
253
312
  nodeG.attr("data-group-toggle", node.id).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", "false").attr("aria-label", `Expand group ${node.label}`);
254
313
  }
@@ -263,7 +322,7 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
263
322
  } else if (isCollapsedGroup) {
264
323
  const w = node.width;
265
324
  const h = node.height;
266
- const groupColor = node.color ?? stateDefaultColor(palette, colorOff);
325
+ const groupColor = nodeIntentColor(node) ?? stateDefaultColor(palette, colorOff);
267
326
  const fillColor = shapeFill(palette, groupColor, isDark, {
268
327
  mode: fillMode
269
328
  });
@@ -284,14 +343,15 @@ function renderState(container, graph, layout, palette, isDark, onClickItem, exp
284
343
  } else {
285
344
  const w = node.width;
286
345
  const h = node.height;
346
+ const intentColor = nodeIntentColor(node);
287
347
  const resolvedFill = stateFill(
288
348
  palette,
289
349
  isDark,
290
- node.color,
350
+ intentColor,
291
351
  colorOff,
292
352
  fillMode
293
353
  );
294
- nodeG.append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", sStateCornerRadius).attr("ry", sStateCornerRadius).attr("fill", resolvedFill).attr("stroke", stateStroke(palette, node.color, colorOff)).attr("stroke-width", sNodeStrokeWidth);
354
+ nodeG.append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", sStateCornerRadius).attr("ry", sStateCornerRadius).attr("fill", resolvedFill).attr("stroke", stateStroke(palette, intentColor, colorOff)).attr("stroke-width", sNodeStrokeWidth);
295
355
  nodeG.append("text").attr("x", 0).attr("y", 0).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr(
296
356
  "fill",
297
357
  contrastText(
@@ -379,4 +439,4 @@ export {
379
439
  renderState,
380
440
  renderStateForExport
381
441
  };
382
- //# sourceMappingURL=chunk-H7KENAZO.js.map
442
+ //# sourceMappingURL=chunk-AHXIMHDQ.js.map
@@ -0,0 +1,404 @@
1
+ import {
2
+ formatLocalISODate
3
+ } from "./chunk-3TYUXC7D.js";
4
+ import {
5
+ isTagBlockHeading,
6
+ matchTagBlockHeading
7
+ } from "./chunk-CMVZWP32.js";
8
+ import {
9
+ makeDgmoError
10
+ } from "./chunk-4W2PE66Q.js";
11
+
12
+ // src/pert/share-normalize.ts
13
+ var START_DATE_NOW_RE = /^(\s*start-date\s+)now(\s*)$/i;
14
+ function splitTrailingComment(line) {
15
+ const m = line.match(/^(.*?)(\s+#.*)$/);
16
+ if (!m) return { code: line, comment: "" };
17
+ return { code: m[1], comment: m[2] };
18
+ }
19
+ function normalizePertSourceForShare(dsl) {
20
+ const today = formatLocalISODate(/* @__PURE__ */ new Date());
21
+ const lines = dsl.split("\n");
22
+ const out = [];
23
+ for (const line of lines) {
24
+ const { code, comment } = splitTrailingComment(line);
25
+ const m = code.match(START_DATE_NOW_RE);
26
+ if (m) {
27
+ out.push(`${m[1]}${today}${m[2]}${comment}`);
28
+ } else {
29
+ out.push(line);
30
+ }
31
+ }
32
+ return out.join("\n");
33
+ }
34
+
35
+ // src/org/resolver.ts
36
+ var MAX_DEPTH = 10;
37
+ var IMPORT_RE = /^(\s+)import:?\s+(.+\.dgmo)\s*$/i;
38
+ var TAGS_RE = /^tags:?\s+(.+\.dgmo)\s*$/i;
39
+ var HEADER_RE = /^(org|kanban|title\s*:)/i;
40
+ var KNOWN_HEADER_OPTIONS = /* @__PURE__ */ new Set([
41
+ "direction-tb",
42
+ "direction-lr",
43
+ "sub-node-label",
44
+ "hide",
45
+ "show-sub-node-count",
46
+ "color-off",
47
+ "fill-tint",
48
+ "fill-solid",
49
+ "fill-outline",
50
+ "active-tag"
51
+ ]);
52
+ function dirname(filePath) {
53
+ const last = filePath.lastIndexOf("/");
54
+ return last > 0 ? filePath.substring(0, last) : "/";
55
+ }
56
+ function resolvePath(base, relative) {
57
+ const parts = dirname(base).split("/");
58
+ for (const seg of relative.split("/")) {
59
+ if (seg === "..") {
60
+ if (parts.length > 1) parts.pop();
61
+ } else if (seg !== "." && seg !== "") {
62
+ parts.push(seg);
63
+ }
64
+ }
65
+ return parts.join("/") || "/";
66
+ }
67
+ function extractTagGroups(lines) {
68
+ const blocks = [];
69
+ let current = null;
70
+ for (const line of lines) {
71
+ const trimmed = line.trim();
72
+ const headingMatch = matchTagBlockHeading(trimmed);
73
+ if (headingMatch) {
74
+ const name = headingMatch.name.toLowerCase();
75
+ current = { name, lines: [line] };
76
+ blocks.push(current);
77
+ } else if (current) {
78
+ if (trimmed === "" || trimmed.startsWith("//")) {
79
+ current = null;
80
+ } else if (line.match(/^\s+/)) {
81
+ current.lines.push(line);
82
+ } else {
83
+ current = null;
84
+ }
85
+ }
86
+ }
87
+ return blocks;
88
+ }
89
+ function parseFileHeader(lines) {
90
+ const tagGroups = extractTagGroups(lines);
91
+ const tagGroupLineSet = /* @__PURE__ */ new Set();
92
+ for (const group of tagGroups) {
93
+ for (let i = 0; i < lines.length; i++) {
94
+ if (lines[i] === group.lines[0]) {
95
+ for (let j = 0; j < group.lines.length; j++) {
96
+ tagGroupLineSet.add(i + j);
97
+ }
98
+ break;
99
+ }
100
+ }
101
+ }
102
+ let tagsDirective = null;
103
+ const contentLines = [];
104
+ const contentLineIndices = [];
105
+ let headerDone = false;
106
+ for (let i = 0; i < lines.length; i++) {
107
+ if (tagGroupLineSet.has(i)) continue;
108
+ const rawLine = lines[i];
109
+ const trimmed = rawLine.trim();
110
+ if (!headerDone && (trimmed === "" || trimmed.startsWith("//"))) continue;
111
+ if (!headerDone) {
112
+ if (HEADER_RE.test(trimmed)) continue;
113
+ const tagsMatch = trimmed.match(TAGS_RE);
114
+ if (tagsMatch) {
115
+ tagsDirective = tagsMatch[1].trim();
116
+ continue;
117
+ }
118
+ if (!rawLine.match(/^\s/) && !isTagBlockHeading(trimmed) && !trimmed.includes("|")) {
119
+ const firstToken = trimmed.split(/\s/)[0].toLowerCase();
120
+ if (KNOWN_HEADER_OPTIONS.has(firstToken)) {
121
+ continue;
122
+ }
123
+ }
124
+ headerDone = true;
125
+ }
126
+ contentLines.push(rawLine);
127
+ contentLineIndices.push(i);
128
+ }
129
+ return { contentLines, contentLineIndices, tagGroups, tagsDirective };
130
+ }
131
+ async function resolveOrgImports(content, filePath, readFileFn) {
132
+ const diagnostics = [];
133
+ const result = await resolveFile(
134
+ content,
135
+ filePath,
136
+ readFileFn,
137
+ diagnostics,
138
+ /* @__PURE__ */ new Set([filePath]),
139
+ 0
140
+ );
141
+ return {
142
+ content: result.content,
143
+ diagnostics,
144
+ lineMap: result.lineMap,
145
+ importSourceMap: result.importSourceMap
146
+ };
147
+ }
148
+ async function resolveFile(content, filePath, readFileFn, diagnostics, ancestorChain, depth) {
149
+ const lines = content.split("\n");
150
+ const headerLines = [];
151
+ let tagsDirective = null;
152
+ const inlineTagGroups = extractTagGroups(lines);
153
+ const bodyStartIndex = findBodyStart(lines);
154
+ let tagsLineNumber = 0;
155
+ for (let i = 0; i < bodyStartIndex; i++) {
156
+ const rawLine = lines[i];
157
+ const trimmed = rawLine.trim();
158
+ if (trimmed === "" || trimmed.startsWith("//")) {
159
+ headerLines.push({ text: rawLine, originalLine: i + 1 });
160
+ continue;
161
+ }
162
+ if (isTagBlockHeading(trimmed)) continue;
163
+ if (/^\s/.test(rawLine)) continue;
164
+ const tagsMatch = trimmed.match(TAGS_RE);
165
+ if (tagsMatch) {
166
+ tagsDirective = tagsMatch[1].trim();
167
+ tagsLineNumber = i + 1;
168
+ continue;
169
+ }
170
+ headerLines.push({ text: rawLine, originalLine: i + 1 });
171
+ }
172
+ let tagsFileGroups = [];
173
+ if (tagsDirective) {
174
+ const tagsPath = resolvePath(filePath, tagsDirective);
175
+ try {
176
+ const tagsContent = await readFileFn(tagsPath);
177
+ const tagsLines = tagsContent.split("\n");
178
+ tagsFileGroups = extractTagGroups(tagsLines);
179
+ } catch {
180
+ diagnostics.push(
181
+ makeDgmoError(tagsLineNumber, `Tags file not found: ${tagsDirective}`)
182
+ );
183
+ }
184
+ }
185
+ const bodyLines = lines.slice(bodyStartIndex);
186
+ const resolvedBodyLines = [];
187
+ const importedTagGroups = [];
188
+ for (let i = 0; i < bodyLines.length; i++) {
189
+ const line = bodyLines[i];
190
+ const lineNumber = bodyStartIndex + i + 1;
191
+ const importMatch = line.match(IMPORT_RE);
192
+ if (!importMatch) {
193
+ const trimmed = line.trim();
194
+ if (isTagBlockHeading(trimmed) || inlineTagGroups.length > 0 && isTagGroupEntry(line, bodyLines, i)) {
195
+ continue;
196
+ }
197
+ resolvedBodyLines.push({
198
+ text: line,
199
+ originalLine: lineNumber,
200
+ importSource: null
201
+ });
202
+ continue;
203
+ }
204
+ const indent = importMatch[1];
205
+ const importRelPath = importMatch[2].trim();
206
+ const importAbsPath = resolvePath(filePath, importRelPath);
207
+ if (depth >= MAX_DEPTH) {
208
+ diagnostics.push(
209
+ makeDgmoError(
210
+ lineNumber,
211
+ `Import depth limit exceeded (${MAX_DEPTH}): ${importRelPath}`
212
+ )
213
+ );
214
+ continue;
215
+ }
216
+ if (ancestorChain.has(importAbsPath)) {
217
+ const chain = [...ancestorChain, importAbsPath].map((p) => p.split("/").pop()).join(" -> ");
218
+ diagnostics.push(
219
+ makeDgmoError(lineNumber, `Circular import detected: ${chain}`)
220
+ );
221
+ continue;
222
+ }
223
+ let importedContent;
224
+ try {
225
+ importedContent = await readFileFn(importAbsPath);
226
+ } catch {
227
+ diagnostics.push(
228
+ makeDgmoError(lineNumber, `Import file not found: ${importRelPath}`)
229
+ );
230
+ continue;
231
+ }
232
+ const nestedChain = new Set(ancestorChain);
233
+ nestedChain.add(importAbsPath);
234
+ const resolved = await resolveFile(
235
+ importedContent,
236
+ importAbsPath,
237
+ readFileFn,
238
+ diagnostics,
239
+ nestedChain,
240
+ depth + 1
241
+ );
242
+ const resolvedLines = resolved.content.split("\n");
243
+ const parsed = parseFileHeader(resolvedLines);
244
+ for (const group of parsed.tagGroups) {
245
+ importedTagGroups.push(group);
246
+ }
247
+ const importedContentLines = [];
248
+ for (let j = 0; j < parsed.contentLines.length; j++) {
249
+ const cText = parsed.contentLines[j];
250
+ const cIndex = parsed.contentLineIndices[j];
251
+ if (cText.trim() !== "") {
252
+ importedContentLines.push({
253
+ text: cText,
254
+ index: cIndex
255
+ });
256
+ }
257
+ }
258
+ let lastNonEmpty = importedContentLines.length - 1;
259
+ while (lastNonEmpty >= 0 && importedContentLines[lastNonEmpty].text.trim() === "") {
260
+ lastNonEmpty--;
261
+ }
262
+ const trimmedImported = importedContentLines.slice(0, lastNonEmpty + 1);
263
+ for (const entry of trimmedImported) {
264
+ const resolvedLineNum = entry.index + 1;
265
+ let importSource = null;
266
+ if (resolved.importSourceMap[resolvedLineNum]) {
267
+ importSource = resolved.importSourceMap[resolvedLineNum];
268
+ } else {
269
+ const origLine = resolved.lineMap[resolvedLineNum];
270
+ if (origLine != null) {
271
+ importSource = { filePath: importAbsPath, sourceLine: origLine };
272
+ }
273
+ }
274
+ if (entry.text.trim() === "") {
275
+ resolvedBodyLines.push({
276
+ text: "",
277
+ originalLine: lineNumber,
278
+ importSource
279
+ });
280
+ } else {
281
+ resolvedBodyLines.push({
282
+ text: indent + entry.text,
283
+ originalLine: lineNumber,
284
+ importSource
285
+ });
286
+ }
287
+ }
288
+ }
289
+ const mergedGroups = mergeTagGroups(
290
+ inlineTagGroups,
291
+ tagsFileGroups,
292
+ importedTagGroups
293
+ );
294
+ const outputLines = [];
295
+ const lineMap = [null];
296
+ const importSourceMap = [null];
297
+ for (const entry of headerLines) {
298
+ outputLines.push(entry.text);
299
+ lineMap.push(entry.originalLine);
300
+ importSourceMap.push(null);
301
+ }
302
+ if (mergedGroups.length > 0) {
303
+ if (outputLines.length > 0 && // In-bounds by length guard.
304
+ outputLines[outputLines.length - 1].trim() !== "") {
305
+ outputLines.push("");
306
+ lineMap.push(null);
307
+ importSourceMap.push(null);
308
+ }
309
+ for (const group of mergedGroups) {
310
+ const inlineMatch = inlineTagGroups.find((g) => g.name === group.name);
311
+ for (const line of group.lines) {
312
+ outputLines.push(line);
313
+ if (inlineMatch) {
314
+ const srcIdx = lines.indexOf(line);
315
+ lineMap.push(srcIdx >= 0 ? srcIdx + 1 : null);
316
+ } else {
317
+ lineMap.push(null);
318
+ }
319
+ importSourceMap.push(null);
320
+ }
321
+ outputLines.push("");
322
+ lineMap.push(null);
323
+ importSourceMap.push(null);
324
+ }
325
+ }
326
+ if (resolvedBodyLines.length > 0 && outputLines.length > 0 && // In-bounds by length guard.
327
+ outputLines[outputLines.length - 1].trim() !== "") {
328
+ outputLines.push("");
329
+ lineMap.push(null);
330
+ importSourceMap.push(null);
331
+ }
332
+ for (const entry of resolvedBodyLines) {
333
+ outputLines.push(entry.text);
334
+ lineMap.push(entry.originalLine);
335
+ importSourceMap.push(entry.importSource);
336
+ }
337
+ return { content: outputLines.join("\n"), lineMap, importSourceMap };
338
+ }
339
+ function findBodyStart(lines) {
340
+ let inTagGroup = false;
341
+ for (let i = 0; i < lines.length; i++) {
342
+ const rawLine = lines[i];
343
+ const trimmed = rawLine.trim();
344
+ if (trimmed === "" || trimmed.startsWith("//")) {
345
+ if (inTagGroup) inTagGroup = false;
346
+ continue;
347
+ }
348
+ if (isTagBlockHeading(trimmed)) {
349
+ inTagGroup = true;
350
+ continue;
351
+ }
352
+ if (inTagGroup && rawLine.match(/^\s+/)) {
353
+ continue;
354
+ }
355
+ if (inTagGroup) {
356
+ inTagGroup = false;
357
+ }
358
+ if (HEADER_RE.test(trimmed)) continue;
359
+ if (TAGS_RE.test(trimmed)) continue;
360
+ if (!rawLine.match(/^\s/) && !trimmed.includes("|") && !isTagBlockHeading(trimmed)) {
361
+ const firstToken = trimmed.split(/\s/)[0].toLowerCase();
362
+ if (KNOWN_HEADER_OPTIONS.has(firstToken)) {
363
+ continue;
364
+ }
365
+ }
366
+ return i;
367
+ }
368
+ return lines.length;
369
+ }
370
+ function isTagGroupEntry(line, allLines, index) {
371
+ if (!line.match(/^\s+/)) return false;
372
+ for (let i = index - 1; i >= 0; i--) {
373
+ const prevRaw = allLines[i];
374
+ const prev = prevRaw.trim();
375
+ if (prev === "" || prev.startsWith("//")) continue;
376
+ if (isTagBlockHeading(prev)) return true;
377
+ if (prevRaw.match(/^\s+/)) continue;
378
+ return false;
379
+ }
380
+ return false;
381
+ }
382
+ function mergeTagGroups(inline, tagsFile, imported) {
383
+ const seen = /* @__PURE__ */ new Map();
384
+ for (const group of inline) {
385
+ seen.set(group.name, group);
386
+ }
387
+ for (const group of tagsFile) {
388
+ if (!seen.has(group.name)) {
389
+ seen.set(group.name, group);
390
+ }
391
+ }
392
+ for (const group of imported) {
393
+ if (!seen.has(group.name)) {
394
+ seen.set(group.name, group);
395
+ }
396
+ }
397
+ return Array.from(seen.values());
398
+ }
399
+
400
+ export {
401
+ normalizePertSourceForShare,
402
+ resolveOrgImports
403
+ };
404
+ //# sourceMappingURL=chunk-AIMLCDAO.js.map
@@ -10,10 +10,10 @@ import {
10
10
  splitNameAndMeta,
11
11
  tryParseSharedOption,
12
12
  warnUnknownMetaKeys
13
- } from "./chunk-BRENJ2BQ.js";
13
+ } from "./chunk-YJVA3QUU.js";
14
14
  import {
15
15
  resolveColorWithDiagnostic
16
- } from "./chunk-TLVIHFRO.js";
16
+ } from "./chunk-ZKPPI6BF.js";
17
17
  import {
18
18
  NAME_DIAGNOSTIC_CODES,
19
19
  emit,
@@ -21,7 +21,7 @@ import {
21
21
  makeFail,
22
22
  nameMergedMessage,
23
23
  suggest
24
- } from "./chunk-CXK4DZH3.js";
24
+ } from "./chunk-4W2PE66Q.js";
25
25
 
26
26
  // src/raci/diagnostics.ts
27
27
  var RACI_DX = {
@@ -952,4 +952,4 @@ export {
952
952
  parseRaci,
953
953
  allTasks
954
954
  };
955
- //# sourceMappingURL=chunk-4IHAV6O7.js.map
955
+ //# sourceMappingURL=chunk-ALYZ3MAA.js.map