@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
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  extractDatePrefix,
3
3
  parseTimelineDate
4
- } from "./chunk-R3YSD62R.js";
4
+ } from "./chunk-6AUZPPAV.js";
5
5
  import {
6
6
  makeYearContext,
7
7
  parseDateToken,
@@ -16,7 +16,7 @@ import {
16
16
  tagAttrKey,
17
17
  validateTagGroupNames,
18
18
  validateTagValues
19
- } from "./chunk-HHKO6SKY.js";
19
+ } from "./chunk-CMVZWP32.js";
20
20
  import {
21
21
  EVENT_LINE_REGISTRY,
22
22
  extractColor,
@@ -27,14 +27,14 @@ import {
27
27
  tryParseSharedOption,
28
28
  warnUnknownMetaKeys,
29
29
  withTagAliases
30
- } from "./chunk-BRENJ2BQ.js";
30
+ } from "./chunk-YJVA3QUU.js";
31
31
  import {
32
32
  emit,
33
33
  formatDgmoError,
34
34
  makeDgmoError,
35
35
  makeFail,
36
36
  suggest
37
- } from "./chunk-CXK4DZH3.js";
37
+ } from "./chunk-4W2PE66Q.js";
38
38
 
39
39
  // src/event-line/diagnostics.ts
40
40
  var EVENT_LINE_DX = {
@@ -65,8 +65,9 @@ var EVENT_LINE_DX = {
65
65
  },
66
66
  // parser.ts emits three wordings under this one code (each passes the full
67
67
  // wording as `reason`):
68
- // directive handler: `event-line is horizontal-only in v1; \`direction ${dir}\`
69
- // (vertical orientation) is a fast-follow.`
68
+ // directive handler: `event-line is horizontal-only in v1; \`direction-tb\`
69
+ // (vertical orientation) is a fast-follow.` (the
70
+ // legacy key+value form words it as \`direction ${dir}\`)
70
71
  // `section` seam: 'Group events with `[Name]` era brackets (§28.6a), not `section`.'
71
72
  // parseEventHeader: 'event-line events are points; a date range (`->`) is not
72
73
  // supported — using the start date.'
@@ -76,10 +77,10 @@ var EVENT_LINE_DX = {
76
77
  severity: "warning",
77
78
  chartType: "event-line",
78
79
  title: "Unsupported construct",
79
- message: (p) => typeof p.reason === "string" && p.reason ? p.reason : "event-line is horizontal-only in v1; `direction TB` (vertical orientation) is a fast-follow.",
80
- hint: "Only horizontal (`direction LR`) is supported; use `[Name]` era brackets (not `section`); events are single points, not date ranges (`->`).",
80
+ message: (p) => typeof p.reason === "string" && p.reason ? p.reason : "event-line is horizontal-only in v1; `direction-tb` (vertical orientation) is a fast-follow.",
81
+ hint: "Only horizontal (`direction-lr`) is supported; use `[Name]` era brackets (not `section`); events are single points, not date ranges (`->`).",
81
82
  example: `event-line X
82
- direction TB
83
+ direction-tb
83
84
 
84
85
  2020 A
85
86
  one`
@@ -297,6 +298,12 @@ function parseEventLine(content, palette) {
297
298
  if (cm) {
298
299
  collapsed = cm[1].toLowerCase() === "true";
299
300
  rest = (rest.slice(0, cm.index) + rest.slice(cm.index + cm[0].length)).trim();
301
+ } else {
302
+ const bare = rest.match(/(?:^|\s)collapsed(?=\s|$)/);
303
+ if (bare) {
304
+ collapsed = true;
305
+ rest = (rest.slice(0, bare.index) + " " + rest.slice(bare.index + bare[0].length)).trim();
306
+ }
300
307
  }
301
308
  let color = null;
302
309
  if (rest) {
@@ -344,6 +351,15 @@ function parseEventLine(content, palette) {
344
351
  continue;
345
352
  }
346
353
  }
354
+ if (/^direction-lr$/i.test(trimmed)) continue;
355
+ if (/^direction-tb$/i.test(trimmed)) {
356
+ result.diagnostics.push(
357
+ emit(EVENT_LINE_DX.UNSUPPORTED, lineNumber, {
358
+ reason: "event-line is horizontal-only in v1; `direction-tb` (vertical orientation) is a fast-follow."
359
+ })
360
+ );
361
+ continue;
362
+ }
347
363
  const dirMatch = trimmed.match(DIRECTION_RE);
348
364
  if (dirMatch) {
349
365
  const dir = dirMatch[1].toUpperCase();
@@ -602,4 +618,4 @@ export {
602
618
  EVENT_LINE_DIAGNOSTICS,
603
619
  parseEventLine
604
620
  };
605
- //# sourceMappingURL=chunk-J6QROYDA.js.map
621
+ //# sourceMappingURL=chunk-UK6DKJLD.js.map
@@ -11,15 +11,18 @@ import {
11
11
  LEGEND_PILL_FONT_SIZE,
12
12
  LEGEND_PILL_PAD,
13
13
  measureLegendText
14
- } from "./chunk-QOOUC2J5.js";
14
+ } from "./chunk-4RGZFA7H.js";
15
15
  import {
16
16
  measureText
17
- } from "./chunk-WCT3NYCV.js";
17
+ } from "./chunk-4ASYQ347.js";
18
18
  import {
19
19
  injectDefaultTagMetadata,
20
20
  resolveTagColor,
21
21
  tagAttrKey
22
- } from "./chunk-HHKO6SKY.js";
22
+ } from "./chunk-CMVZWP32.js";
23
+ import {
24
+ legendSuppressed
25
+ } from "./chunk-YJVA3QUU.js";
23
26
 
24
27
  // src/org/layout.ts
25
28
  import { hierarchy, tree } from "d3-hierarchy";
@@ -183,7 +186,10 @@ function injectDefaultMetadata(roots, tagGroups) {
183
186
  function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expandAllLegend) {
184
187
  if (parsed.roots.length === 0) {
185
188
  const showEyeIcons2 = hiddenAttributes !== void 0;
186
- const legendGroups2 = computeLegendGroups(parsed.tagGroups, showEyeIcons2);
189
+ const legendGroups2 = computeLegendGroups(
190
+ legendSuppressed(parsed.options) ? [] : parsed.tagGroups,
191
+ showEyeIcons2
192
+ );
187
193
  if (legendGroups2.length === 0) {
188
194
  return {
189
195
  nodes: [],
@@ -211,6 +217,11 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
211
217
  height: cy - LEGEND_GROUP_GAP + MARGIN
212
218
  };
213
219
  }
220
+ const isLR = parsed.direction === "LR";
221
+ const depthExtent = (tn) => isLR ? tn.width : tn.height;
222
+ const crossExtent = (tn) => isLR ? tn.height : tn.width;
223
+ const ptToScreen = (ax, ay) => isLR ? { x: ay, y: ax } : { x: ax, y: ay };
224
+ const screenTopLeft = (ax, ay, w, h2) => isLR ? { left: ay, top: ax - h2 / 2 } : { left: ax - w / 2, top: ay };
214
225
  injectDefaultMetadata(parsed.roots, parsed.tagGroups);
215
226
  const subNodeLabel = parsed.options["sub-node-label"] ?? void 0;
216
227
  const showSubNodeCount = ["yes", "on"].includes(
@@ -257,6 +268,10 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
257
268
  for (const tn of allTreeNodes) {
258
269
  tn.width = maxWidth;
259
270
  }
271
+ const maxDepthExtent = isLR ? maxWidth : maxHeight;
272
+ const maxCrossExtent = isLR ? maxHeight : maxWidth;
273
+ const depthGap = V_GAP;
274
+ const crossGap = H_GAP;
260
275
  const leafStacks = /* @__PURE__ */ new Map();
261
276
  const collapseLeafContainers = (tn) => {
262
277
  for (const child of tn.children) collapseLeafContainers(child);
@@ -270,7 +285,8 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
270
285
  for (const child of tn.children) {
271
286
  child.width = maxW;
272
287
  }
273
- const totalH = tn.children.reduce((s, c) => s + c.height, 0) + (tn.children.length - 1) * STACK_V_GAP;
288
+ const stackDepth = tn.children.reduce((s, c) => s + depthExtent(c), 0) + (tn.children.length - 1) * STACK_V_GAP;
289
+ const stackCross = Math.max(...tn.children.map((c) => crossExtent(c)));
274
290
  tn.children = [
275
291
  {
276
292
  orgNode: {
@@ -283,8 +299,8 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
283
299
  lineNumber: 0
284
300
  },
285
301
  children: [],
286
- width: maxW,
287
- height: totalH
302
+ width: isLR ? stackDepth : stackCross,
303
+ height: isLR ? stackCross : stackDepth
288
304
  }
289
305
  ];
290
306
  }
@@ -293,8 +309,8 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
293
309
  centerHeavyChildren(root);
294
310
  const h = hierarchy(root, (d) => d.children);
295
311
  const treeLayout = tree().nodeSize([
296
- maxWidth + H_GAP,
297
- maxHeight + V_GAP
312
+ maxCrossExtent + crossGap,
313
+ maxDepthExtent + depthGap
298
314
  ]);
299
315
  treeLayout(h);
300
316
  {
@@ -303,16 +319,17 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
303
319
  for (const d of descendants) {
304
320
  if (d.data.orgNode.id.startsWith("__stack_")) continue;
305
321
  const cur = levelMaxHeight.get(d.depth) ?? 0;
306
- if (d.data.height > cur) levelMaxHeight.set(d.depth, d.data.height);
322
+ const ext = depthExtent(d.data);
323
+ if (ext > cur) levelMaxHeight.set(d.depth, ext);
307
324
  }
308
325
  const maxDepth = Math.max(...levelMaxHeight.keys(), 0);
309
326
  const compactedY = /* @__PURE__ */ new Map();
310
327
  const rootDepth = treeNodes.length === 1 ? 0 : 1;
311
328
  compactedY.set(rootDepth, 0);
312
329
  for (let d = rootDepth + 1; d <= maxDepth; d++) {
313
- const parentH = levelMaxHeight.get(d - 1) ?? maxHeight;
330
+ const parentH = levelMaxHeight.get(d - 1) ?? maxDepthExtent;
314
331
  const prevY = compactedY.get(d - 1) ?? 0;
315
- compactedY.set(d, prevY + parentH + V_GAP);
332
+ compactedY.set(d, prevY + parentH + depthGap);
316
333
  }
317
334
  for (const d of h.descendants()) {
318
335
  if (d.data.orgNode.id === "__virtual_root__") continue;
@@ -327,7 +344,7 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
327
344
  const actualLevelGap = childY - d.y;
328
345
  const metaCount = Object.keys(d.data.orgNode.metadata).length;
329
346
  const headerHeight = CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
330
- const desiredGap = headerHeight + 15;
347
+ const desiredGap = isLR ? CONTAINER_PAD_X : headerHeight + 15;
331
348
  const shiftUp = actualLevelGap - desiredGap;
332
349
  if (shiftUp <= 0) continue;
333
350
  const shift = (node) => {
@@ -345,10 +362,10 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
345
362
  if (d.data.orgNode.isContainer) continue;
346
363
  if (!d.children || d.children.length === 0) continue;
347
364
  if (!d.children.every((c) => c.data.orgNode.isContainer)) continue;
348
- const parentBottomY = d.y + d.data.height;
365
+ const parentBottomY = d.y + depthExtent(d.data);
349
366
  const firstChildY = Math.min(...d.children.map((c) => c.y));
350
367
  const currentGap = firstChildY - parentBottomY;
351
- const desiredGap = V_GAP * 0.6;
368
+ const desiredGap = depthGap * 0.6;
352
369
  const shiftUp = currentGap - desiredGap;
353
370
  if (shiftUp <= 0) continue;
354
371
  const shiftDown = (node) => {
@@ -365,8 +382,8 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
365
382
  }
366
383
  {
367
384
  const subtreeExtent = (node) => {
368
- let min = node.x - node.data.width / 2;
369
- let max = node.x + node.data.width / 2;
385
+ let min = node.x - crossExtent(node.data) / 2;
386
+ let max = node.x + crossExtent(node.data) / 2;
370
387
  if (node.children) {
371
388
  for (const child of node.children) {
372
389
  const childExt = subtreeExtent(child);
@@ -377,6 +394,10 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
377
394
  if (node.data.orgNode.isContainer) {
378
395
  min -= CONTAINER_PAD_X;
379
396
  max += CONTAINER_PAD_X;
397
+ if (isLR) {
398
+ const metaCount = Object.keys(node.data.orgNode.metadata).length;
399
+ min -= CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
400
+ }
380
401
  }
381
402
  return { minX: min, maxX: max };
382
403
  };
@@ -398,7 +419,7 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
398
419
  const positions = [0];
399
420
  for (let i = 1; i < children.length; i++) {
400
421
  const prevRight = positions[i - 1] + extents[i - 1].relRight;
401
- positions[i] = prevRight + H_GAP - extents[i].relLeft;
422
+ positions[i] = prevRight + crossGap - extents[i].relLeft;
402
423
  }
403
424
  const newCenter = (positions[0] + positions[positions.length - 1]) / 2;
404
425
  const centerShift = currentCenter - newCenter;
@@ -443,29 +464,33 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
443
464
  cx: d.x,
444
465
  cy: currentY
445
466
  });
446
- currentY += child.height + STACK_V_GAP;
467
+ currentY += depthExtent(child) + STACK_V_GAP;
447
468
  }
448
469
  }
470
+ const screenRect = (ax, ay, w, h2) => {
471
+ const { left, top } = screenTopLeft(ax, ay, w, h2);
472
+ return { left, top, right: left + w, bottom: top + h2 };
473
+ };
474
+ const growBBox = (r) => {
475
+ if (r.left < minX) minX = r.left;
476
+ if (r.right > maxX) maxX = r.right;
477
+ if (r.top < minY) minY = r.top;
478
+ if (r.bottom > maxY) maxY = r.bottom;
479
+ };
449
480
  for (const d of h.descendants()) {
450
481
  if (d.data.orgNode.id === "__virtual_root__") continue;
451
482
  if (d.data.orgNode.id.startsWith("__stack_")) continue;
452
- const w = d.data.width;
453
- const ht = d.data.height;
454
- const cx = d.x;
455
- const cy = d.y;
456
- if (cx - w / 2 < minX) minX = cx - w / 2;
457
- if (cx + w / 2 > maxX) maxX = cx + w / 2;
458
- if (cy < minY) minY = cy;
459
- if (cy + ht > maxY) maxY = cy + ht;
483
+ growBBox(screenRect(d.x, d.y, d.data.width, d.data.height));
460
484
  }
461
485
  for (const ec of expandedChildren) {
462
- if (ec.cx - ec.width / 2 < minX) minX = ec.cx - ec.width / 2;
463
- if (ec.cx + ec.width / 2 > maxX) maxX = ec.cx + ec.width / 2;
464
- if (ec.cy < minY) minY = ec.cy;
465
- if (ec.cy + ec.height > maxY) maxY = ec.cy + ec.height;
486
+ growBBox(screenRect(ec.cx, ec.cy, ec.width, ec.height));
466
487
  }
467
488
  const offsetX = -minX + MARGIN;
468
489
  const offsetY = -minY + MARGIN;
490
+ const placeCard = (ax, ay, w, h2) => {
491
+ const r = screenRect(ax, ay, w, h2);
492
+ return { x: r.left + offsetX + w / 2, y: r.top + offsetY };
493
+ };
469
494
  const subNodeKey = subNodeLabel ?? "Sub-node Count";
470
495
  for (const ec of expandedChildren) {
471
496
  const hc = hiddenCounts?.get(ec.orgNode.id);
@@ -488,14 +513,17 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
488
513
  isContainer: ec.orgNode.isContainer,
489
514
  lineNumber: ec.orgNode.lineNumber,
490
515
  ...ecColor !== void 0 && { color: ecColor },
491
- x: ec.cx + offsetX,
492
- y: ec.cy + offsetY,
516
+ ...placeCard(ec.cx, ec.cy, ec.width, ec.height),
493
517
  width: ec.width,
494
518
  height: ec.height,
495
519
  ...hc !== void 0 && { hiddenCount: hc },
496
520
  ...ecHasChildren !== void 0 && { hasChildren: ecHasChildren }
497
521
  });
498
522
  }
523
+ const placePoint = (ax, ay) => {
524
+ const p = ptToScreen(ax, ay);
525
+ return { x: p.x + offsetX, y: p.y + offsetY };
526
+ };
499
527
  const busGroups = /* @__PURE__ */ new Map();
500
528
  for (const d of h.descendants()) {
501
529
  if (d.data.orgNode.id === "__virtual_root__") continue;
@@ -503,8 +531,7 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
503
531
  const orgNode = d.data.orgNode;
504
532
  const w = d.data.width;
505
533
  const ht = d.data.height;
506
- const x = d.x + offsetX;
507
- const y = d.y + offsetY;
534
+ const { x, y } = placeCard(d.x, d.y, w, ht);
508
535
  const hc = hiddenCounts?.get(orgNode.id);
509
536
  const nodeMeta = filterMetadata(orgNode.metadata, hiddenAttributes);
510
537
  if (!orgNode.isContainer && showSubNodeCount && !(hc != null && hc > 0)) {
@@ -536,19 +563,16 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
536
563
  if (d.parent && d.parent.data.orgNode.id !== "__virtual_root__" && !parentIsContainerBox) {
537
564
  const parentId = d.parent.data.orgNode.id;
538
565
  if (!busGroups.has(parentId)) {
539
- const px = d.parent.x + offsetX;
540
- const py = d.parent.y + offsetY;
541
- const parentH = d.parent.data.height;
542
566
  busGroups.set(parentId, {
543
- parentX: px,
544
- parentBottomY: py + parentH,
567
+ parentX: d.parent.x,
568
+ parentBottomY: d.parent.y + depthExtent(d.parent.data),
545
569
  children: []
546
570
  });
547
571
  }
548
572
  busGroups.get(parentId).children.push({
549
573
  id: orgNode.id,
550
- x,
551
- topY: y
574
+ x: d.x,
575
+ topY: d.y
552
576
  });
553
577
  }
554
578
  }
@@ -561,10 +585,10 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
561
585
  sourceId: parentId,
562
586
  targetId: child.id,
563
587
  points: [
564
- { x: parentX, y: parentBottomY },
565
- { x: parentX, y: midY },
566
- { x: child.x, y: midY },
567
- { x: child.x, y: child.topY }
588
+ placePoint(parentX, parentBottomY),
589
+ placePoint(parentX, midY),
590
+ placePoint(child.x, midY),
591
+ placePoint(child.x, child.topY)
568
592
  ]
569
593
  });
570
594
  } else {
@@ -575,27 +599,18 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
575
599
  layoutEdges.push({
576
600
  sourceId: parentId,
577
601
  targetId: parentId,
578
- points: [
579
- { x: parentX, y: parentBottomY },
580
- { x: parentX, y: midY }
581
- ]
602
+ points: [placePoint(parentX, parentBottomY), placePoint(parentX, midY)]
582
603
  });
583
604
  layoutEdges.push({
584
605
  sourceId: parentId,
585
606
  targetId: parentId,
586
- points: [
587
- { x: leftX, y: midY },
588
- { x: rightX, y: midY }
589
- ]
607
+ points: [placePoint(leftX, midY), placePoint(rightX, midY)]
590
608
  });
591
609
  for (const child of children) {
592
610
  layoutEdges.push({
593
611
  sourceId: parentId,
594
612
  targetId: child.id,
595
- points: [
596
- { x: child.x, y: midY },
597
- { x: child.x, y: child.topY }
598
- ]
613
+ points: [placePoint(child.x, midY), placePoint(child.x, child.topY)]
599
614
  });
600
615
  }
601
616
  }
@@ -608,8 +623,6 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
608
623
  const EMPTY_CONTAINER_MIN_HEIGHT = 60;
609
624
  for (const d of allContainerNodes) {
610
625
  if (d.children && d.children.length > 0) continue;
611
- const cx = d.x + offsetX;
612
- const cy = d.y + offsetY;
613
626
  const metaCount = Object.keys(d.data.orgNode.metadata).length;
614
627
  const labelHeight = CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
615
628
  const boxWidth = d.data.width;
@@ -617,8 +630,9 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
617
630
  labelHeight + CONTAINER_PAD_BOTTOM,
618
631
  EMPTY_CONTAINER_MIN_HEIGHT
619
632
  );
620
- const boxX = cx - boxWidth / 2;
621
- const boxY = cy;
633
+ const emptyTL = screenTopLeft(d.x, d.y, boxWidth, boxHeight);
634
+ const boxX = emptyTL.left + offsetX;
635
+ const boxY = emptyTL.top + offsetY;
622
636
  containerBoundsMap.set(d.data.orgNode.id, {
623
637
  minX: boxX,
624
638
  maxX: boxX + boxWidth,
@@ -667,46 +681,79 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
667
681
  if (allDesc.length === 0) continue;
668
682
  let descMinX = Infinity;
669
683
  let descMaxX = -Infinity;
684
+ let descMinY = Infinity;
670
685
  let descMaxY = -Infinity;
686
+ const growDesc = (left, top, right, bottom) => {
687
+ if (left < descMinX) descMinX = left;
688
+ if (right > descMaxX) descMaxX = right;
689
+ if (top < descMinY) descMinY = top;
690
+ if (bottom > descMaxY) descMaxY = bottom;
691
+ };
671
692
  for (const desc of allDesc) {
672
693
  const innerBounds = containerBoundsMap.get(desc.data.orgNode.id);
673
694
  if (innerBounds) {
674
- if (innerBounds.minX < descMinX) descMinX = innerBounds.minX;
675
- if (innerBounds.maxX > descMaxX) descMaxX = innerBounds.maxX;
676
- if (innerBounds.maxY > descMaxY) descMaxY = innerBounds.maxY;
695
+ growDesc(
696
+ innerBounds.minX,
697
+ innerBounds.minY,
698
+ innerBounds.maxX,
699
+ innerBounds.maxY
700
+ );
677
701
  } else if (desc.data.orgNode.id.startsWith("__stack_")) {
678
702
  const cid = desc.data.orgNode.id.replace("__stack_", "");
679
703
  const stack = leafStacks.get(cid);
680
704
  if (stack) {
681
705
  for (const ec of expandedChildren) {
682
706
  if (ec.orgNode.parentId !== cid) continue;
683
- const ex = ec.cx + offsetX;
684
- const ey = ec.cy + offsetY;
685
- if (ex - ec.width / 2 < descMinX) descMinX = ex - ec.width / 2;
686
- if (ex + ec.width / 2 > descMaxX) descMaxX = ex + ec.width / 2;
687
- if (ey + ec.height > descMaxY) descMaxY = ey + ec.height;
707
+ const r = screenRect(ec.cx, ec.cy, ec.width, ec.height);
708
+ growDesc(
709
+ r.left + offsetX,
710
+ r.top + offsetY,
711
+ r.right + offsetX,
712
+ r.bottom + offsetY
713
+ );
688
714
  }
689
715
  }
690
716
  } else {
691
- const dw = desc.data.width;
692
- const dh = desc.data.height;
693
- const dx = desc.x + offsetX;
694
- const dy = desc.y + offsetY;
695
- if (dx - dw / 2 < descMinX) descMinX = dx - dw / 2;
696
- if (dx + dw / 2 > descMaxX) descMaxX = dx + dw / 2;
697
- if (dy + dh > descMaxY) descMaxY = dy + dh;
717
+ const r = screenRect(
718
+ desc.x,
719
+ desc.y,
720
+ desc.data.width,
721
+ desc.data.height
722
+ );
723
+ growDesc(
724
+ r.left + offsetX,
725
+ r.top + offsetY,
726
+ r.right + offsetX,
727
+ r.bottom + offsetY
728
+ );
698
729
  }
699
730
  }
700
- const containerX = d.x + offsetX;
701
- const containerY = d.y + offsetY;
731
+ const ownTL = screenTopLeft(d.x, d.y, d.data.width, d.data.height);
732
+ const containerCenterX = ownTL.left + d.data.width / 2 + offsetX;
733
+ const containerLeftX = ownTL.left + offsetX;
734
+ const containerY = ownTL.top + offsetY;
702
735
  const metaCount = Object.keys(d.data.orgNode.metadata).length;
703
736
  const labelHeight = CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
704
- const boxY = containerY;
705
- const boxHeight = descMaxY - containerY + CONTAINER_PAD_BOTTOM;
706
- const boxX = descMinX - CONTAINER_PAD_X;
707
- const contentWidth = descMaxX - descMinX + CONTAINER_PAD_X * 2;
708
- const finalBoxWidth = Math.max(contentWidth, d.data.width);
709
- const centeredBoxX = finalBoxWidth > contentWidth ? containerX - finalBoxWidth / 2 : boxX;
737
+ let boxY;
738
+ let boxHeight;
739
+ let centeredBoxX;
740
+ let finalBoxWidth;
741
+ if (isLR) {
742
+ centeredBoxX = containerLeftX;
743
+ finalBoxWidth = Math.max(
744
+ descMaxX - containerLeftX + CONTAINER_PAD_X,
745
+ d.data.width
746
+ );
747
+ boxY = descMinY - labelHeight - CONTAINER_PAD_X;
748
+ boxHeight = descMaxY - boxY + CONTAINER_PAD_BOTTOM;
749
+ } else {
750
+ boxY = containerY;
751
+ boxHeight = descMaxY - containerY + CONTAINER_PAD_BOTTOM;
752
+ const boxX = descMinX - CONTAINER_PAD_X;
753
+ const contentWidth = descMaxX - descMinX + CONTAINER_PAD_X * 2;
754
+ finalBoxWidth = Math.max(contentWidth, d.data.width);
755
+ centeredBoxX = finalBoxWidth > contentWidth ? containerCenterX - finalBoxWidth / 2 : boxX;
756
+ }
710
757
  containerBoundsMap.set(d.data.orgNode.id, {
711
758
  minX: centeredBoxX,
712
759
  maxX: centeredBoxX + finalBoxWidth,
@@ -739,17 +786,30 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
739
786
  containers.reverse();
740
787
  let finalMinX = minX;
741
788
  let finalMaxX = maxX;
789
+ let finalMinY = minY;
742
790
  let finalMaxY = maxY;
743
791
  for (const c of containers) {
744
792
  const cLeft = c.x - offsetX;
745
793
  const cRight = cLeft + c.width;
746
- const cBottom = c.y - offsetY + c.height;
794
+ const cTop = c.y - offsetY;
795
+ const cBottom = cTop + c.height;
747
796
  if (cLeft < finalMinX) finalMinX = cLeft;
748
797
  if (cRight > finalMaxX) finalMaxX = cRight;
798
+ if (cTop < finalMinY) finalMinY = cTop;
749
799
  if (cBottom > finalMaxY) finalMaxY = cBottom;
750
800
  }
801
+ const topOvershoot = minY - finalMinY;
802
+ if (topOvershoot > 0) {
803
+ for (const n of layoutNodes) n.y += topOvershoot;
804
+ for (const c of containers) c.y += topOvershoot;
805
+ for (const e of layoutEdges) {
806
+ for (const p of e.points) {
807
+ p.y += topOvershoot;
808
+ }
809
+ }
810
+ }
751
811
  const totalWidth = finalMaxX - finalMinX + MARGIN * 2;
752
- const totalHeight = finalMaxY - minY + MARGIN * 2;
812
+ const totalHeight = finalMaxY - finalMinY + MARGIN * 2;
753
813
  const usedValuesByGroup = /* @__PURE__ */ new Map();
754
814
  for (const group of parsed.tagGroups) {
755
815
  const key = tagAttrKey(group.name);
@@ -765,7 +825,7 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
765
825
  }
766
826
  const showEyeIcons = hiddenAttributes !== void 0;
767
827
  const legendGroups = computeLegendGroups(
768
- parsed.tagGroups,
828
+ legendSuppressed(parsed.options) ? [] : parsed.tagGroups,
769
829
  showEyeIcons,
770
830
  usedValuesByGroup
771
831
  );
@@ -810,4 +870,4 @@ function layoutOrg(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expan
810
870
  export {
811
871
  layoutOrg
812
872
  };
813
- //# sourceMappingURL=chunk-QZX5S6R3.js.map
873
+ //# sourceMappingURL=chunk-UKP5HWB5.js.map
@@ -4,7 +4,7 @@ import {
4
4
  renderNoteBadge,
5
5
  renderNoteBox,
6
6
  renderNoteConnector
7
- } from "./chunk-J7TLCB2Q.js";
7
+ } from "./chunk-3IUHKMJI.js";
8
8
  import {
9
9
  renderInlineText
10
10
  } from "./chunk-3HDBAXF5.js";
@@ -20,10 +20,10 @@ import {
20
20
  } from "./chunk-YYVTBZZC.js";
21
21
  import {
22
22
  renderIntegratedLegend
23
- } from "./chunk-AUIM2NVH.js";
23
+ } from "./chunk-W5KMNC5U.js";
24
24
  import {
25
25
  getMaxLegendReservedHeight
26
- } from "./chunk-YAA6IID3.js";
26
+ } from "./chunk-774C2FF3.js";
27
27
  import {
28
28
  TITLE_FONT_SIZE,
29
29
  TITLE_FONT_WEIGHT,
@@ -32,11 +32,6 @@ import {
32
32
  import {
33
33
  FONT_FAMILY
34
34
  } from "./chunk-6KFWC4CO.js";
35
- import {
36
- CHAR_WIDTH_RATIO,
37
- measureText,
38
- truncateText
39
- } from "./chunk-WCT3NYCV.js";
40
35
  import {
41
36
  contrastText,
42
37
  mix,
@@ -44,16 +39,22 @@ import {
44
39
  shapeFill,
45
40
  themeBaseBg,
46
41
  valueRampColor
47
- } from "./chunk-WBM7ZNDI.js";
42
+ } from "./chunk-JYDMBWRP.js";
43
+ import {
44
+ CHAR_WIDTH_RATIO,
45
+ measureText,
46
+ truncateText
47
+ } from "./chunk-4ASYQ347.js";
48
48
  import {
49
49
  resolveTagColor
50
- } from "./chunk-HHKO6SKY.js";
50
+ } from "./chunk-CMVZWP32.js";
51
51
  import {
52
- fillModeFromOptions
53
- } from "./chunk-BRENJ2BQ.js";
52
+ fillModeFromOptions,
53
+ legendSuppressed
54
+ } from "./chunk-YJVA3QUU.js";
54
55
  import {
55
56
  resolveColor
56
- } from "./chunk-TLVIHFRO.js";
57
+ } from "./chunk-ZKPPI6BF.js";
57
58
 
58
59
  // src/boxes-and-lines/renderer.ts
59
60
  import * as d3Selection from "d3-selection";
@@ -290,7 +291,8 @@ function renderBoxesAndLines(container, parsed, layout, palette, isDark, options
290
291
  const reserveHasDescriptions = parsed.nodes.some(
291
292
  (n) => n.description && n.description.length > 0
292
293
  );
293
- const willRenderLegend = legendGroups.length > 0 || reserveHasDescriptions && controlsHost !== "app";
294
+ const noLegend = legendSuppressed(parsed.options);
295
+ const willRenderLegend = (legendGroups.length > 0 || reserveHasDescriptions && controlsHost !== "app") && !noLegend;
294
296
  const sLegendHeight = willRenderLegend ? sctx.structural(
295
297
  getMaxLegendReservedHeight(
296
298
  {
@@ -311,7 +313,7 @@ function renderBoxesAndLines(container, parsed, layout, palette, isDark, options
311
313
  const hasAnyDescriptions = parsed.nodes.some(
312
314
  (n) => n.description && n.description.length > 0
313
315
  );
314
- const needsLegend = legendGroups.length > 0 || hasAnyDescriptions && onToggleDescriptions;
316
+ const needsLegend = (legendGroups.length > 0 || hasAnyDescriptions && !!onToggleDescriptions) && !noLegend;
315
317
  const legendH = needsLegend ? sLegendHeight + 8 : 0;
316
318
  const groupLabelsSet = new Set(layout.groups.map((g) => g.label));
317
319
  let labelZoneExtension = 0;
@@ -574,11 +576,11 @@ function renderBoxesAndLines(container, parsed, layout, palette, isDark, options
574
576
  const tooltipText = fullText.length > 200 ? fullText.slice(0, 199) + "\u2026" : fullText;
575
577
  nodeG.append("title").text(tooltipText);
576
578
  }
577
- if (parsed.showValues && node.value !== void 0) {
579
+ if (parsed.showValues !== false && node.value !== void 0) {
578
580
  const valueLabel = parsed.boxMetric ? `${parsed.boxMetric}: ${node.value}` : String(node.value);
579
581
  nodeG.append("text").attr("class", "bl-node-value").attr("x", 0).attr("y", descStartY + visibleLines.length * descLineH).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("font-size", VALUE_FONT_SIZE).attr("font-weight", "600").attr("fill", colors.text).text(valueLabel);
580
582
  }
581
- } else if (parsed.showValues && node.value !== void 0) {
583
+ } else if (parsed.showValues !== false && node.value !== void 0) {
582
584
  const valueLabel = parsed.boxMetric ? `${parsed.boxMetric}: ${node.value}` : String(node.value);
583
585
  const headerH = ln.height / 2;
584
586
  const sepY = -ln.height / 2 + headerH;
@@ -681,7 +683,7 @@ function renderBoxesAndLines(container, parsed, layout, palette, isDark, options
681
683
  const hasDescriptions = parsed.nodes.some(
682
684
  (n) => n.description && n.description.length > 0
683
685
  );
684
- const hasLegend = legendGroups.length > 0 || hasDescriptions && controlsHost !== "app";
686
+ const hasLegend = (legendGroups.length > 0 || hasDescriptions && controlsHost !== "app") && !noLegend;
685
687
  if (hasLegend) {
686
688
  let controlsGroup;
687
689
  if (hasDescriptions && (onToggleDescriptions || controlsHost === "app")) {
@@ -757,4 +759,4 @@ export {
757
759
  renderBoxesAndLines,
758
760
  renderBoxesAndLinesForExport
759
761
  };
760
- //# sourceMappingURL=chunk-T4A4TSTJ.js.map
762
+ //# sourceMappingURL=chunk-UQRIKAMH.js.map