@diagrammo/dgmo 0.96.0 → 0.97.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 (261) hide show
  1. package/dist/advanced.d.ts +172 -8
  2. package/dist/advanced.js +225 -243
  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-MVUNMJKO.js → chunk-2FMOLWX4.js} +71 -57
  12. package/dist/{chunk-2BYFNZVM.js → chunk-2SZILMQT.js} +57 -15
  13. package/dist/{chunk-VLI6AWS3.js → chunk-3C4OXVZJ.js} +2 -2
  14. package/dist/{chunk-OO4GUE4E.js → chunk-3HL6NSSQ.js} +63 -18
  15. package/dist/{chunk-RGFVHYDP.js → chunk-3IUMSK72.js} +2 -2
  16. package/dist/{chunk-LRHPBWOY.js → chunk-44RLIAYC.js} +17 -10
  17. package/dist/{chunk-H7AXCRO7.js → chunk-453IWXZ3.js} +0 -11
  18. package/dist/{chunk-FHX373L5.js → chunk-47INRTZ6.js} +2 -2
  19. package/dist/{chunk-IN7XI6NO.js → chunk-4NMRS6HW.js} +1 -1
  20. package/dist/{chunk-HH3DHNQA.js → chunk-4TK26YHH.js} +2 -2
  21. package/dist/{chunk-5LG526X7.js → chunk-5TGZBHEJ.js} +1 -1
  22. package/dist/{chunk-BD4O4D2A.js → chunk-5WZYJC2P.js} +2 -2
  23. package/dist/{chunk-DPNSDCR3.js → chunk-65JFUANT.js} +1 -1
  24. package/dist/{chunk-EZ6BI5LL.js → chunk-6OUMYNAJ.js} +1 -1
  25. package/dist/{chunk-U6N547QA.js → chunk-6PUBFB6D.js} +24 -3
  26. package/dist/{chunk-5GU6C5WB.js → chunk-6S2H6EKN.js} +3 -3
  27. package/dist/{chunk-OYGJZA24.js → chunk-6SDEXSJY.js} +39 -19
  28. package/dist/{chunk-IKXQ6NVR.js → chunk-6YBZFOTA.js} +13 -13
  29. package/dist/{chunk-4B45SNZH.js → chunk-74XR7Z3I.js} +13 -13
  30. package/dist/{chunk-VNAPEZX2.js → chunk-7ASVGFW3.js} +1 -1
  31. package/dist/{chunk-RTRORHSP.js → chunk-7QKWU7FX.js} +3 -3
  32. package/dist/{chunk-A6YINTY6.js → chunk-7RACGVUY.js} +1 -1
  33. package/dist/{chunk-5G4DOOX2.js → chunk-7TEAFIEJ.js} +9 -5
  34. package/dist/{chunk-UNCCZ3NU.js → chunk-A3V72YIL.js} +14 -1
  35. package/dist/{chunk-VJ7NLYFE.js → chunk-A5LFM62B.js} +3 -3
  36. package/dist/{chunk-P3PSLC2K.js → chunk-AULFF7L2.js} +2 -2
  37. package/dist/{chunk-SCYVGPLI.js → chunk-B7ZH5EQ2.js} +2 -2
  38. package/dist/{chunk-VGAMBOOC.js → chunk-C6ME2L4T.js} +2 -2
  39. package/dist/{chunk-B2YVZ3QU.js → chunk-CGP7RGLJ.js} +1 -1
  40. package/dist/{chunk-67N26CER.js → chunk-CLW45YKE.js} +2 -1
  41. package/dist/{chunk-THTYCJGF.js → chunk-CUOMNKYW.js} +4 -4
  42. package/dist/{chunk-34JOHSVE.js → chunk-CUTEHGXO.js} +2 -2
  43. package/dist/{chunk-NERQSSYD.js → chunk-D67YE4LR.js} +1 -1
  44. package/dist/{chunk-DKCVAQU3.js → chunk-D7KZE2XJ.js} +39 -17
  45. package/dist/{chunk-PGD6CNWO.js → chunk-DFEVFLEG.js} +3 -3
  46. package/dist/{chunk-VVTCUIPN.js → chunk-DKMZ4VMV.js} +1 -1
  47. package/dist/{chunk-H7JVKUA5.js → chunk-DRY4W4W6.js} +36 -15
  48. package/dist/{chunk-IQZSKWE5.js → chunk-E6GHXMH2.js} +8 -8
  49. package/dist/{chunk-I2I2FKAK.js → chunk-EBJLT7PH.js} +1 -1
  50. package/dist/{chunk-GEHK4UD5.js → chunk-EEIGHOJR.js} +92 -23
  51. package/dist/{chunk-FKJWZWNU.js → chunk-EUPUVYWO.js} +1 -1
  52. package/dist/{chunk-3W73ZP6W.js → chunk-F2OAZHOX.js} +3 -3
  53. package/dist/{chunk-IU7XKZA6.js → chunk-FK6HZYGK.js} +4 -14
  54. package/dist/{chunk-2M3K6GD2.js → chunk-FTW2E2YH.js} +6 -6
  55. package/dist/{chunk-5P2L5QXE.js → chunk-FZVCS2XY.js} +4 -2
  56. package/dist/chunk-G24NSISJ.js +69 -0
  57. package/dist/{chunk-5H7SA5ZD.js → chunk-GFQFLLP3.js} +2 -2
  58. package/dist/{chunk-BUVLLK3D.js → chunk-GLLYHYGT.js} +27 -17
  59. package/dist/{chunk-VLC6WNRD.js → chunk-GULGSH2Z.js} +4 -0
  60. package/dist/{chunk-H5NVCOEJ.js → chunk-GXBH7WNN.js} +2 -2
  61. package/dist/{chunk-7UWVHNPM.js → chunk-H242TVAE.js} +9 -9
  62. package/dist/{chunk-M4ZUIW3J.js → chunk-H7DZYHQF.js} +3 -3
  63. package/dist/{chunk-GLCMUTO5.js → chunk-HQNZJMNS.js} +1 -1
  64. package/dist/{chunk-H7RQG4PH.js → chunk-IAM3IDL4.js} +2 -2
  65. package/dist/{chunk-WTPS73RM.js → chunk-II6D6NWX.js} +8 -8
  66. package/dist/{chunk-5ARANBIE.js → chunk-IUFTAFGN.js} +2 -2
  67. package/dist/{chunk-AQRSEQZV.js → chunk-IZEKHIV6.js} +3 -3
  68. package/dist/{chunk-WGNP5ND2.js → chunk-J3YM6RA5.js} +3 -3
  69. package/dist/{chunk-YFIUABSF.js → chunk-J467QBZF.js} +23 -3
  70. package/dist/{chunk-CD7VQCDL.js → chunk-J7JF4QKA.js} +40 -30
  71. package/dist/{chunk-MYHR3PMH.js → chunk-JULBDTNU.js} +7 -7
  72. package/dist/{chunk-EPDBWATV.js → chunk-K7RRXZHS.js} +4 -2
  73. package/dist/{chunk-YVIPJGFG.js → chunk-KMB754DO.js} +33 -6
  74. package/dist/chunk-KNKZGRRB.js +439 -0
  75. package/dist/{chunk-SIABEREK.js → chunk-KTGJQJB3.js} +2 -2
  76. package/dist/{chunk-LGUFJ7Y2.js → chunk-KW3CC7SB.js} +1 -1
  77. package/dist/{chunk-ITDF3MWD.js → chunk-L3K5O3Z5.js} +3 -3
  78. package/dist/chunk-LRTSTDJ6.js +126 -0
  79. package/dist/{chunk-NI4L6HEU.js → chunk-LZATSXAA.js} +1 -1
  80. package/dist/{chunk-RVOSA4RR.js → chunk-MJ725XHD.js} +441 -267
  81. package/dist/{chunk-EPB3UEMD.js → chunk-NBISN6FH.js} +2 -2
  82. package/dist/{chunk-IZFJZCF6.js → chunk-NN5RUHXV.js} +84 -16
  83. package/dist/{chunk-KDWEOT54.js → chunk-NOZMRPXI.js} +96 -153
  84. package/dist/{chunk-EM5SA7NC.js → chunk-NQFZ7LXC.js} +4 -4
  85. package/dist/chunk-NTDWVTEY.js +12 -0
  86. package/dist/{chunk-AUXUNV73.js → chunk-O3HRF25Z.js} +1 -1
  87. package/dist/{chunk-GLL237AP.js → chunk-OSSA5UWA.js} +3 -3
  88. package/dist/{chunk-UOCWYLYT.js → chunk-OZXKW5NA.js} +1 -1
  89. package/dist/{chunk-QEU6VM4O.js → chunk-PLQZJZ2K.js} +1 -1
  90. package/dist/chunk-PRG7NIUU.js +272 -0
  91. package/dist/{chunk-MAYTYF5S.js → chunk-PSNRB75I.js} +3 -3
  92. package/dist/{chunk-B5CEV7IR.js → chunk-PT5VFY3B.js} +38 -14
  93. package/dist/{chunk-KAO7JL4I.js → chunk-PU5X3P3T.js} +6 -5
  94. package/dist/{chunk-B7BSRVNC.js → chunk-PZ5LAAO3.js} +2 -2
  95. package/dist/{chunk-TOHTKLKE.js → chunk-Q5Q5JLRT.js} +1 -1
  96. package/dist/{chunk-TUOZ6AXC.js → chunk-Q6V342WS.js} +16 -4
  97. package/dist/{chunk-ZOKD5F7M.js → chunk-QDPTOIG7.js} +5 -5
  98. package/dist/{chunk-ERT7XDQW.js → chunk-QIITSGI5.js} +1 -1
  99. package/dist/{chunk-K2WXMXI2.js → chunk-QLIZ7SB7.js} +1 -1
  100. package/dist/chunk-QLNLRZ37.js +181 -0
  101. package/dist/{chunk-P6LKX3IQ.js → chunk-QOLRTPGH.js} +6 -6
  102. package/dist/{chunk-FBK32S4D.js → chunk-R4SXMBGF.js} +1 -1
  103. package/dist/chunk-R4U7IIRX.js +178 -0
  104. package/dist/{chunk-DWMQ24JR.js → chunk-RC6PISCK.js} +4 -2
  105. package/dist/{chunk-R5L5E3TC.js → chunk-REKLKGR6.js} +3 -3
  106. package/dist/{chunk-FUYEXLAN.js → chunk-RFGQDIOI.js} +837 -220
  107. package/dist/{chunk-W5MMPPGX.js → chunk-ROFSIFSY.js} +4 -4
  108. package/dist/{chunk-JCC3B2GS.js → chunk-ROH4LYBL.js} +65 -21
  109. package/dist/{chunk-OAZ6BIIB.js → chunk-SNDCXT5R.js} +9 -7
  110. package/dist/{chunk-JRN2CRXJ.js → chunk-TDUBTDXS.js} +1 -1
  111. package/dist/{chunk-GM2SLMQW.js → chunk-TMB4YY3J.js} +34 -4
  112. package/dist/{chunk-ZBOIYC2G.js → chunk-V3ICBS2O.js} +5 -5
  113. package/dist/{chunk-HZX4QZGR.js → chunk-V65EDV6S.js} +3 -3
  114. package/dist/{chunk-67RKJEKF.js → chunk-VKT3BVRO.js} +35 -11
  115. package/dist/{chunk-5BG4OSWJ.js → chunk-VOO65FKC.js} +12 -12
  116. package/dist/{chunk-KQAPFIYF.js → chunk-VQWLASDC.js} +2 -2
  117. package/dist/{chunk-JILEYZ2V.js → chunk-VVL2KKG4.js} +1 -1
  118. package/dist/{chunk-D7DGLJ7N.js → chunk-VVZDBUHA.js} +2 -2
  119. package/dist/{chunk-JBAFAKGX.js → chunk-W46OMHOK.js} +23 -27
  120. package/dist/{chunk-XCKNFFKM.js → chunk-WH6E6SHC.js} +2 -4
  121. package/dist/{chunk-P2GNNEMN.js → chunk-WPYJAHRP.js} +1 -1
  122. package/dist/{chunk-TPCP2UOI.js → chunk-WXGFB2O2.js} +3 -3
  123. package/dist/{chunk-RIK6WUMO.js → chunk-XCYGOCMS.js} +43 -26
  124. package/dist/{chunk-I3ZRIMR7.js → chunk-XEMCNQQW.js} +15 -15
  125. package/dist/{chunk-PWZEJNO6.js → chunk-XMUFXJI2.js} +6 -6
  126. package/dist/{chunk-EMGNCG5C.js → chunk-XZGXVN4T.js} +5 -5
  127. package/dist/{chunk-WLGOIMTI.js → chunk-YCIBBVI2.js} +2 -2
  128. package/dist/{chunk-V2NQV7VL.js → chunk-YFIDR7JH.js} +2 -2
  129. package/dist/{chunk-K2SFH3GJ.js → chunk-YFWIFKRQ.js} +3 -3
  130. package/dist/{chunk-6XLMTAEX.js → chunk-YIHRLY55.js} +33 -6
  131. package/dist/{chunk-CYRB2JTN.js → chunk-YLKPRT6U.js} +1 -1
  132. package/dist/{chunk-KMU65FYM.js → chunk-YSDSFXQD.js} +1 -1
  133. package/dist/{chunk-ZI6WC24V.js → chunk-ZBJV4KNU.js} +1 -1
  134. package/dist/{chunk-TIPNNOZC.js → chunk-ZCKVTZHD.js} +41 -19
  135. package/dist/{chunk-YSGOXZBB.js → chunk-ZMVMGZAJ.js} +1 -1
  136. package/dist/{chunk-CP73WWLN.js → chunk-ZRW4B4KF.js} +48 -14
  137. package/dist/{chunk-O2HNVNKO.js → chunk-ZTKO2RD4.js} +5 -5
  138. package/dist/collapse-6IGH2B24.js +31 -0
  139. package/dist/collapse-GOWNCVHZ.js +7 -0
  140. package/dist/collapse-HNTPLB2Q.js +11 -0
  141. package/dist/collapse-NUM7DPJA.js +10 -0
  142. package/dist/completion-registry.js +27 -4
  143. package/dist/dgmo-router-RSYWR5IS.js +101 -0
  144. package/dist/dimensions-KXAI7U2B.js +21 -0
  145. package/dist/editor.js +882 -215
  146. package/dist/{flowchart-parser-SM5LHF2D.js → flowchart-parser-UI5VZNGJ.js} +5 -5
  147. package/dist/{flowchart-renderer-PPS2GTTD.js → flowchart-renderer-IYWPKPCF.js} +18 -18
  148. package/dist/fold-at-line-DmSAa1eU.d.ts +11 -0
  149. package/dist/highlight.js +883 -216
  150. package/dist/index.d.ts +52 -5
  151. package/dist/index.js +79 -63
  152. package/dist/{layout-AF4KA5B2.js → layout-6VY3DHYD.js} +6 -6
  153. package/dist/{layout-FCFUVCRI.js → layout-7C2QZCEZ.js} +10 -10
  154. package/dist/{layout-2WESJYRE.js → layout-7E7BNOGO.js} +3 -2
  155. package/dist/layout-BSK374N6.js +11 -0
  156. package/dist/{layout-R6G4MEO3.js → layout-FJDBY3WG.js} +5 -5
  157. package/dist/{layout-KELSNWBD.js → layout-G3RVKEC4.js} +10 -10
  158. package/dist/{layout-H2KP5A6M.js → layout-GC5XX2RH.js} +2 -2
  159. package/dist/{layout-LNVIH45F.js → layout-R6ULGQJK.js} +6 -6
  160. package/dist/{layout-PPIVGJXD.js → layout-ROI5KVSO.js} +3 -3
  161. package/dist/{layout-3TSVAGWH.js → layout-SPPS225I.js} +3 -3
  162. package/dist/{layout-HF3PMI4H.js → layout-VTGOYGRC.js} +2 -2
  163. package/dist/{layout-MPSH3YWE.js → layout-WBH5IHYK.js} +10 -10
  164. package/dist/layout-WTHBGTH2.js +15 -0
  165. package/dist/layout-ZCCABSV7.js +15 -0
  166. package/dist/{layout-search-C2TYUH4L.js → layout-search-DSIDKKQO.js} +8 -8
  167. package/dist/{legend-constants-55MFBXYF.js → legend-constants-KF3MKWL2.js} +2 -2
  168. package/dist/{parser-DGLKH4NT.js → parser-3PMYAVFL.js} +2 -2
  169. package/dist/{parser-OHBBDCG4.js → parser-5KVFS4RN.js} +2 -2
  170. package/dist/{parser-UHKROC7Z.js → parser-BA43YPIQ.js} +3 -3
  171. package/dist/{parser-F75WNYMK.js → parser-CFAYEWLF.js} +3 -3
  172. package/dist/{parser-MWINQNQW.js → parser-DRFEX6OX.js} +3 -3
  173. package/dist/{parser-W6NX3AIV.js → parser-DWVBRBB2.js} +3 -3
  174. package/dist/{parser-6WURFLOB.js → parser-E4B7HJT2.js} +3 -3
  175. package/dist/{parser-DRUGM3R6.js → parser-FWQY3HJX.js} +2 -2
  176. package/dist/{parser-GBQY3WOZ.js → parser-GMCXCJSP.js} +3 -3
  177. package/dist/{parser-BPYHIG24.js → parser-IHFHPFL7.js} +3 -3
  178. package/dist/{parser-QWTECQEC.js → parser-IU6425JW.js} +6 -6
  179. package/dist/{parser-ZV756RMP.js → parser-IZYIXDJX.js} +6 -6
  180. package/dist/{parser-TTGZYLYD.js → parser-JQGUTDSX.js} +3 -3
  181. package/dist/{parser-BNRX35NT.js → parser-JRKPOO2Z.js} +3 -3
  182. package/dist/{parser-B7SCN7FG.js → parser-KI2XYB2R.js} +2 -2
  183. package/dist/parser-LDVVBP7S.js +12 -0
  184. package/dist/{parser-L7SI3PW4.js → parser-MAGFK6OK.js} +4 -4
  185. package/dist/{parser-722KLLAQ.js → parser-MH5BDN7X.js} +3 -3
  186. package/dist/{parser-5RUD4A3X.js → parser-MUHFEM4G.js} +3 -3
  187. package/dist/{parser-Y7QXD2UR.js → parser-P375HO7Q.js} +2 -2
  188. package/dist/{parser-LUJX7AXO.js → parser-PYY5BRLQ.js} +2 -2
  189. package/dist/parser-QEMFMVF5.js +12 -0
  190. package/dist/{parser-WIKXZP4X.js → parser-QIPDBT5M.js} +2 -2
  191. package/dist/{parser-2AXU2MHJ.js → parser-RNBDDEGL.js} +3 -3
  192. package/dist/{parser-4GHAYZKZ.js → parser-RSWZGQA7.js} +6 -6
  193. package/dist/{parser-H6HT2WFQ.js → parser-SGX2PVR5.js} +2 -2
  194. package/dist/{parser-ZWWQZ4XZ.js → parser-SJUEFKNM.js} +3 -3
  195. package/dist/{parser-4BOP77CD.js → parser-UMNBPXG2.js} +2 -2
  196. package/dist/{parser-GM5B2EPW.js → parser-WE4VSBBY.js} +3 -3
  197. package/dist/{parser-XEJP37GQ.js → parser-WKEYS7N3.js} +3 -3
  198. package/dist/{parser-DWV2CYBS.js → parser-WPXUUNA2.js} +3 -3
  199. package/dist/{parser-5HQPPVHJ.js → parser-XP3RCOTN.js} +3 -3
  200. package/dist/{parser-F3JJNIFC.js → parser-YV4RBHG7.js} +3 -3
  201. package/dist/{parser-CRJYLOHA.js → parser-YZ3J542U.js} +2 -2
  202. package/dist/{renderer-BYLQ37T2.js → renderer-2V5NVI3V.js} +15 -15
  203. package/dist/renderer-4PKYVOYL.js +39 -0
  204. package/dist/{renderer-ONENGXFQ.js → renderer-66SCERH7.js} +14 -12
  205. package/dist/renderer-6IAXRZLK.js +85 -0
  206. package/dist/{renderer-GKY55M4Z.js → renderer-6O5SV5YE.js} +10 -10
  207. package/dist/{renderer-F7YGMEGQ.js → renderer-7OXMSF4R.js} +4 -4
  208. package/dist/{renderer-6HU44IGJ.js → renderer-A36NL2SS.js} +8 -8
  209. package/dist/{renderer-66NCRXSC.js → renderer-ASPBBACI.js} +13 -11
  210. package/dist/{renderer-5GP7YUS4.js → renderer-BXVTYE27.js} +7 -6
  211. package/dist/renderer-CC6O6GQK.js +18 -0
  212. package/dist/{renderer-VNJOZPSH.js → renderer-CNDB4JTZ.js} +17 -17
  213. package/dist/renderer-COV2DXTM.js +41 -0
  214. package/dist/renderer-DXCATVLO.js +30 -0
  215. package/dist/{renderer-VUXAAGUG.js → renderer-E5E3OJ42.js} +12 -11
  216. package/dist/{renderer-MGF2NNGG.js → renderer-E7LC7HCU.js} +5 -5
  217. package/dist/{renderer-PEJF6R2I.js → renderer-F3JYZERE.js} +4 -4
  218. package/dist/{renderer-CVCCW7UT.js → renderer-FAFSRFGR.js} +9 -9
  219. package/dist/renderer-HIB6LZWZ.js +26 -0
  220. package/dist/renderer-HLDRRFZB.js +28 -0
  221. package/dist/renderer-INQMQPNN.js +22 -0
  222. package/dist/renderer-ITJ67HXO.js +27 -0
  223. package/dist/{renderer-SYRH3B62.js → renderer-JLOKFKOZ.js} +14 -13
  224. package/dist/{renderer-LJPUCG3U.js → renderer-KOPJ76GS.js} +10 -10
  225. package/dist/{renderer-N6PM5CSG.js → renderer-M2467III.js} +14 -13
  226. package/dist/{renderer-MVBAQP3M.js → renderer-MYKL6VG6.js} +6 -6
  227. package/dist/{renderer-YJVQT7QG.js → renderer-S6L3JR6C.js} +11 -11
  228. package/dist/{renderer-NOYLNVTI.js → renderer-SYWVZ4CY.js} +3 -3
  229. package/dist/renderer-TCTZZ5Y6.js +32 -0
  230. package/dist/{renderer-D6EH5UQ6.js → renderer-UIHCYXBY.js} +12 -12
  231. package/dist/{renderer-QZJZIAT3.js → renderer-WIBVOPRC.js} +6 -4
  232. package/dist/{renderer-TS5NHOQD.js → renderer-XMJ6XZGL.js} +12 -11
  233. package/dist/{renderer-2V2XY2V7.js → renderer-ZTHXOBXW.js} +8 -8
  234. package/dist/{renderer-radial-4R7AKETK.js → renderer-radial-FC25BDCZ.js} +8 -8
  235. package/dist/{state-parser-EQBBEKHR.js → state-parser-2PQRH5JE.js} +6 -6
  236. package/dist/state-renderer-YP6HWLJR.js +43 -0
  237. package/dist/{themes-CbJL3w8L.d.ts → themes-DoLdhUXV.d.ts} +1 -1
  238. package/docs/ai-integration.md +4 -3
  239. package/docs/language-reference.md +99 -13
  240. package/gallery/fixtures/swot-relabel.dgmo +19 -0
  241. package/gallery/fixtures/swot-tags.dgmo +16 -0
  242. package/gallery/fixtures/swot.dgmo +13 -0
  243. package/package.json +1 -1
  244. package/dist/chunk-R2K5L4UA.js +0 -49
  245. package/dist/collapse-TCVK3RPO.js +0 -8
  246. package/dist/dgmo-router-EPBQKQW2.js +0 -100
  247. package/dist/dimensions-DBCRBZIU.js +0 -21
  248. package/dist/layout-3J72UULM.js +0 -15
  249. package/dist/layout-IXQNVRBE.js +0 -15
  250. package/dist/layout-VDCJOZSH.js +0 -11
  251. package/dist/parser-HM6FEX5K.js +0 -14
  252. package/dist/renderer-2MCV75JQ.js +0 -41
  253. package/dist/renderer-5AEDVLAA.js +0 -31
  254. package/dist/renderer-7C76HP5W.js +0 -30
  255. package/dist/renderer-7RAMBMTH.js +0 -22
  256. package/dist/renderer-E3334XLT.js +0 -84
  257. package/dist/renderer-LFZKG2GR.js +0 -26
  258. package/dist/renderer-MZIWP55B.js +0 -28
  259. package/dist/renderer-N75E3UVY.js +0 -25
  260. package/dist/renderer-VNUDN6F5.js +0 -39
  261. package/dist/state-renderer-SOGZ2CNN.js +0 -42
@@ -1,9 +1,12 @@
1
1
  import {
2
2
  renderDataChartD3
3
- } from "./chunk-RIK6WUMO.js";
3
+ } from "./chunk-XCYGOCMS.js";
4
4
  import {
5
5
  readViewBox
6
6
  } from "./chunk-6K2W3FH7.js";
7
+ import {
8
+ computeQuadrantPointLabels
9
+ } from "./chunk-YSDSFXQD.js";
7
10
  import {
8
11
  REGISTRY_BY_ID,
9
12
  getRenderCategory,
@@ -15,7 +18,7 @@ import {
15
18
  parseVenn,
16
19
  parseVisualization,
17
20
  parseWordcloud
18
- } from "./chunk-MVUNMJKO.js";
21
+ } from "./chunk-2FMOLWX4.js";
19
22
  import {
20
23
  parseChart,
21
24
  parseFunctionChart,
@@ -23,61 +26,64 @@ import {
23
26
  parseHeatmap,
24
27
  parseSankey,
25
28
  parseScatter
26
- } from "./chunk-P2GNNEMN.js";
29
+ } from "./chunk-WPYJAHRP.js";
30
+ import {
31
+ MAP_DX
32
+ } from "./chunk-EOYPX6SF.js";
33
+ import {
34
+ parseTechRadar
35
+ } from "./chunk-DKMZ4VMV.js";
36
+ import {
37
+ parsePyramid
38
+ } from "./chunk-CGP7RGLJ.js";
27
39
  import {
28
40
  parseRing
29
- } from "./chunk-K2WXMXI2.js";
41
+ } from "./chunk-QLIZ7SB7.js";
30
42
  import {
31
43
  parseTreemap
32
- } from "./chunk-EPB3UEMD.js";
44
+ } from "./chunk-NBISN6FH.js";
33
45
  import {
34
- MAP_DX
35
- } from "./chunk-EOYPX6SF.js";
36
- import {
37
- computeQuadrantPointLabels
38
- } from "./chunk-KMU65FYM.js";
46
+ parseSwot
47
+ } from "./chunk-KNKZGRRB.js";
39
48
  import {
40
49
  parseVersionControl
41
- } from "./chunk-FBK32S4D.js";
50
+ } from "./chunk-R4SXMBGF.js";
42
51
  import {
43
52
  parseMap
44
- } from "./chunk-5ARANBIE.js";
53
+ } from "./chunk-IUFTAFGN.js";
45
54
  import {
46
55
  parseWhiteboard
47
- } from "./chunk-P3PSLC2K.js";
56
+ } from "./chunk-AULFF7L2.js";
48
57
  import {
49
58
  parseSwimlane
50
- } from "./chunk-B7BSRVNC.js";
59
+ } from "./chunk-PZ5LAAO3.js";
51
60
  import {
52
61
  parseMindmap
53
- } from "./chunk-SIABEREK.js";
54
- import {
55
- parseTechRadar
56
- } from "./chunk-VVTCUIPN.js";
57
- import {
58
- parsePyramid
59
- } from "./chunk-B2YVZ3QU.js";
62
+ } from "./chunk-KTGJQJB3.js";
60
63
  import {
61
64
  parseKanban
62
- } from "./chunk-SCYVGPLI.js";
65
+ } from "./chunk-B7ZH5EQ2.js";
63
66
  import {
64
67
  parseInfra
65
- } from "./chunk-VLI6AWS3.js";
68
+ } from "./chunk-3C4OXVZJ.js";
66
69
  import {
67
70
  parseJourneyMap
68
- } from "./chunk-GM2SLMQW.js";
71
+ } from "./chunk-TMB4YY3J.js";
72
+ import {
73
+ parseGantt
74
+ } from "./chunk-VQWLASDC.js";
69
75
  import {
70
76
  parseGoal
71
- } from "./chunk-YSGOXZBB.js";
77
+ } from "./chunk-ZMVMGZAJ.js";
72
78
  import {
73
79
  MIN_CANVAS_WIDTH
74
- } from "./chunk-EPDBWATV.js";
80
+ } from "./chunk-K7RRXZHS.js";
75
81
  import {
76
82
  parseEventLine
77
- } from "./chunk-ITDF3MWD.js";
83
+ } from "./chunk-L3K5O3Z5.js";
78
84
  import {
79
85
  renderTimeline
80
- } from "./chunk-GEHK4UD5.js";
86
+ } from "./chunk-EEIGHOJR.js";
81
87
  import {
82
88
  EXPORT_HEIGHT,
83
89
  EXPORT_WIDTH,
@@ -89,93 +95,94 @@ import {
89
95
  renderChartTitle,
90
96
  resolveExportPalette,
91
97
  showTooltip
92
- } from "./chunk-6XLMTAEX.js";
98
+ } from "./chunk-YIHRLY55.js";
93
99
  import {
94
100
  parseTimelineDate
95
- } from "./chunk-AUXUNV73.js";
101
+ } from "./chunk-O3HRF25Z.js";
96
102
  import {
97
103
  parseFamily
98
- } from "./chunk-YFIUABSF.js";
99
- import {
100
- parseGantt
101
- } from "./chunk-KQAPFIYF.js";
104
+ } from "./chunk-J467QBZF.js";
102
105
  import {
103
106
  parseClock
104
- } from "./chunk-EZ6BI5LL.js";
107
+ } from "./chunk-6OUMYNAJ.js";
105
108
  import {
106
109
  parseCountdown
107
- } from "./chunk-I2I2FKAK.js";
110
+ } from "./chunk-EBJLT7PH.js";
108
111
  import {
109
112
  parseCycle
110
- } from "./chunk-QEU6VM4O.js";
113
+ } from "./chunk-PLQZJZ2K.js";
111
114
  import {
112
115
  parseBracket
113
- } from "./chunk-RGFVHYDP.js";
116
+ } from "./chunk-3IUMSK72.js";
114
117
  import {
115
118
  layoutBracket
116
- } from "./chunk-ZI6WC24V.js";
119
+ } from "./chunk-ZBJV4KNU.js";
117
120
  import {
118
121
  parseC4
119
- } from "./chunk-BD4O4D2A.js";
122
+ } from "./chunk-5WZYJC2P.js";
120
123
  import {
121
124
  parseBlock
122
- } from "./chunk-DWMQ24JR.js";
125
+ } from "./chunk-RC6PISCK.js";
123
126
  import {
124
127
  isBlockNode
125
128
  } from "./chunk-XSVWUOUZ.js";
126
129
  import {
127
130
  parseBody
128
- } from "./chunk-IU7XKZA6.js";
131
+ } from "./chunk-FK6HZYGK.js";
129
132
  import {
130
133
  parseBoxesAndLines
131
- } from "./chunk-OAZ6BIIB.js";
134
+ } from "./chunk-SNDCXT5R.js";
132
135
  import {
133
136
  ScaleContext
134
137
  } from "./chunk-24YPR5EH.js";
138
+ import {
139
+ injectToggleCue,
140
+ stripFoldAffordance
141
+ } from "./chunk-LRTSTDJ6.js";
135
142
  import {
136
143
  legendInlineSupported
137
- } from "./chunk-R5L5E3TC.js";
144
+ } from "./chunk-REKLKGR6.js";
138
145
  import {
139
146
  GRID_DASH,
140
147
  scaleDash
141
- } from "./chunk-XCKNFFKM.js";
148
+ } from "./chunk-WH6E6SHC.js";
142
149
  import {
143
150
  compactNumber
144
- } from "./chunk-JILEYZ2V.js";
151
+ } from "./chunk-VVL2KKG4.js";
145
152
  import {
146
153
  parseRaci
147
- } from "./chunk-U6N547QA.js";
154
+ } from "./chunk-6PUBFB6D.js";
155
+ import {
156
+ parseSitemap
157
+ } from "./chunk-KMB754DO.js";
158
+ import {
159
+ parsePert
160
+ } from "./chunk-CUTEHGXO.js";
148
161
  import {
149
162
  parseLiveLink
150
- } from "./chunk-DPNSDCR3.js";
163
+ } from "./chunk-65JFUANT.js";
151
164
  import {
152
165
  parseSequenceDgmo
153
- } from "./chunk-JCC3B2GS.js";
166
+ } from "./chunk-ROH4LYBL.js";
154
167
  import {
155
168
  parseOrg
156
- } from "./chunk-WLGOIMTI.js";
169
+ } from "./chunk-YCIBBVI2.js";
157
170
  import {
158
- parseSitemap
159
- } from "./chunk-YVIPJGFG.js";
160
- import {
161
- parsePert
162
- } from "./chunk-34JOHSVE.js";
171
+ parseState
172
+ } from "./chunk-WXGFB2O2.js";
163
173
  import {
164
174
  parseFlowchart
165
- } from "./chunk-H7RQG4PH.js";
175
+ } from "./chunk-IAM3IDL4.js";
166
176
  import {
167
- parseState
168
- } from "./chunk-TPCP2UOI.js";
177
+ parseERDiagram
178
+ } from "./chunk-PSNRB75I.js";
169
179
  import {
170
180
  choosePalette,
171
181
  extractPaletteDirective
172
182
  } from "./chunk-CYTFO2LF.js";
173
- import {
174
- parseERDiagram
175
- } from "./chunk-MAYTYF5S.js";
176
183
  import {
177
184
  parseClassDiagram
178
- } from "./chunk-M4ZUIW3J.js";
185
+ } from "./chunk-H7DZYHQF.js";
179
186
  import {
180
187
  getPalette
181
188
  } from "./chunk-FMAVHTYB.js";
@@ -184,15 +191,15 @@ import {
184
191
  } from "./chunk-ICLB27PZ.js";
185
192
  import {
186
193
  parseWireframe
187
- } from "./chunk-D7DGLJ7N.js";
194
+ } from "./chunk-VVZDBUHA.js";
188
195
  import {
189
196
  resolveActiveTagGroup,
190
197
  tagAttrKey
191
- } from "./chunk-LGUFJ7Y2.js";
198
+ } from "./chunk-KW3CC7SB.js";
192
199
  import {
193
200
  measureText,
194
201
  wrapTextToWidth
195
- } from "./chunk-KAO7JL4I.js";
202
+ } from "./chunk-PU5X3P3T.js";
196
203
  import {
197
204
  getSeriesColors,
198
205
  mix,
@@ -1028,8 +1035,18 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
1028
1035
  if (ctx.isBelowFloor) {
1029
1036
  svg.attr("width", "100%");
1030
1037
  }
1038
+ const g = svg.append("g");
1039
+ const titleExtra = renderChartTitle(
1040
+ svg,
1041
+ title,
1042
+ parsed.titleLineNumber,
1043
+ width,
1044
+ textColor,
1045
+ onClickItem,
1046
+ 2
1047
+ );
1031
1048
  const margin = {
1032
- top: sMarginTop,
1049
+ top: sMarginTop + titleExtra,
1033
1050
  right: sMarginRight,
1034
1051
  bottom: sMarginBottom,
1035
1052
  left: sMarginLeft
@@ -1053,15 +1070,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
1053
1070
  const values = links.map((l) => l.value);
1054
1071
  const [minVal, maxVal] = d3Array.extent(values);
1055
1072
  const strokeScale = d3Scale.scaleLinear().domain([minVal, maxVal]).range([sStrokeMin, sStrokeMax]);
1056
- const g = svg.append("g").attr("transform", `translate(${margin.left},${margin.top})`);
1057
- renderChartTitle(
1058
- svg,
1059
- title,
1060
- parsed.titleLineNumber,
1061
- width,
1062
- textColor,
1063
- onClickItem
1064
- );
1073
+ g.attr("transform", `translate(${margin.left},${margin.top})`);
1065
1074
  const neighbors = /* @__PURE__ */ new Map();
1066
1075
  for (const node of nodes) neighbors.set(node, /* @__PURE__ */ new Set());
1067
1076
  for (const link of links) {
@@ -1322,6 +1331,64 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
1322
1331
  }
1323
1332
  }
1324
1333
 
1334
+ // src/pert/export.ts
1335
+ function collapsedPertGroupIdsFromSource(parsed) {
1336
+ return new Set(parsed.groups.filter((g) => g.collapsed).map((g) => g.id));
1337
+ }
1338
+ function unionCollapsedPertGroups(parsed, runtime) {
1339
+ const set = collapsedPertGroupIdsFromSource(parsed);
1340
+ for (const id of runtime ?? []) set.add(id);
1341
+ return set;
1342
+ }
1343
+ async function exportPert(ctx) {
1344
+ const { content, theme, palette, viewState } = ctx;
1345
+ const { parsePert: parsePert2 } = await import("./parser-YV4RBHG7.js");
1346
+ const { analyzePert } = await import("./analyzer-G7PGOT3V.js");
1347
+ const { relayoutPert } = await import("./layout-GC5XX2RH.js");
1348
+ const { renderPert, measurePertAnalysisBlock } = await import("./renderer-M2467III.js");
1349
+ const effectivePalette = await resolveExportPalette(theme, palette);
1350
+ const pertParsed = parsePert2(content, { palette: effectivePalette });
1351
+ if (pertParsed.error || pertParsed.activities.length === 0) return "";
1352
+ const pertResolved = analyzePert(pertParsed);
1353
+ const collapsedIds = unionCollapsedPertGroups(pertParsed, viewState?.cg);
1354
+ const pertLayout = relayoutPert(pertResolved, {}, collapsedIds);
1355
+ const hasTitle = !!pertParsed.title && !pertParsed.options.noTitle;
1356
+ const hasSubtitle = pertResolved.projectSubtitle !== null;
1357
+ const titleHeight = hasTitle ? 80 : hasSubtitle ? 50 : 0;
1358
+ const PERT_PADDING = 20;
1359
+ const analysisOn = viewState?.an ?? !pertParsed.options.noAnalysis;
1360
+ const fieldLabelsOn = viewState?.fl === true;
1361
+ const exportW = pertLayout.width + PERT_PADDING * 2;
1362
+ const analysisMeasured = measurePertAnalysisBlock(
1363
+ pertResolved,
1364
+ exportW - 2 * PERT_PADDING,
1365
+ {
1366
+ showTornado: analysisOn,
1367
+ showScurve: analysisOn,
1368
+ showFieldLegend: fieldLabelsOn
1369
+ }
1370
+ );
1371
+ const exportH = pertLayout.height + PERT_PADDING * 2 + titleHeight + analysisMeasured.height;
1372
+ const container = createExportContainer(exportW, exportH);
1373
+ renderPert(
1374
+ container,
1375
+ pertResolved,
1376
+ pertLayout,
1377
+ effectivePalette,
1378
+ ctx.isDark,
1379
+ {
1380
+ title: hasTitle ? pertParsed.title : null,
1381
+ subtitle: pertResolved.projectSubtitle,
1382
+ exportDims: { width: exportW, height: exportH },
1383
+ showTornado: analysisOn,
1384
+ showScurve: analysisOn,
1385
+ showFieldLegend: fieldLabelsOn,
1386
+ collapsedGroupIds: [...collapsedIds]
1387
+ }
1388
+ );
1389
+ return finalizeSvgExport(container, theme, effectivePalette);
1390
+ }
1391
+
1325
1392
  // src/quadrant/renderer.ts
1326
1393
  import * as d3Scale2 from "d3-scale";
1327
1394
  import * as d3Selection2 from "d3-selection";
@@ -1353,10 +1420,19 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1353
1420
  palette.colors.yellow,
1354
1421
  palette.colors.purple
1355
1422
  ];
1423
+ const titleExtra = renderChartTitle(
1424
+ svg,
1425
+ title,
1426
+ quadrantTitleLineNumber,
1427
+ width,
1428
+ textColor,
1429
+ onClickItem,
1430
+ 2
1431
+ );
1356
1432
  const hasXAxis = !!quadrantXAxis;
1357
1433
  const hasYAxis = !!quadrantYAxis;
1358
1434
  const margin = {
1359
- top: title ? ctx.aesthetic(60) : ctx.aesthetic(30),
1435
+ top: (title ? ctx.aesthetic(60) : ctx.aesthetic(30)) + titleExtra,
1360
1436
  right: ctx.aesthetic(30),
1361
1437
  bottom: hasXAxis ? ctx.aesthetic(70) : ctx.aesthetic(40),
1362
1438
  left: hasYAxis ? ctx.aesthetic(80) : ctx.aesthetic(40)
@@ -1365,14 +1441,6 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1365
1441
  const chartHeight = height - margin.top - margin.bottom;
1366
1442
  const xScale = d3Scale2.scaleLinear().domain([0, 1]).range([0, chartWidth]);
1367
1443
  const yScale = d3Scale2.scaleLinear().domain([0, 1]).range([chartHeight, 0]);
1368
- renderChartTitle(
1369
- svg,
1370
- title,
1371
- quadrantTitleLineNumber,
1372
- width,
1373
- textColor,
1374
- onClickItem
1375
- );
1376
1444
  const chartG = svg.append("g").attr("transform", `translate(${margin.left}, ${margin.top})`);
1377
1445
  const bg = themeBaseBg(palette, isDark);
1378
1446
  const getQuadrantColor = (label, defaultIdx) => {
@@ -1719,6 +1787,17 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
1719
1787
  if (ctx.isBelowFloor) {
1720
1788
  svg.attr("width", "100%");
1721
1789
  }
1790
+ const g = svg.append("g");
1791
+ const titleExtra = renderChartTitle(
1792
+ svg,
1793
+ title,
1794
+ parsed.titleLineNumber,
1795
+ width,
1796
+ textColor,
1797
+ onClickItem,
1798
+ 2
1799
+ );
1800
+ const sPlotTop = sMarginTop + titleExtra;
1722
1801
  const maxLabelText = data.reduce((longest, item) => {
1723
1802
  const text = `${item.values[item.values.length - 1]} \u2014 ${item.label}`;
1724
1803
  return text.length > longest.length ? text : longest;
@@ -1730,22 +1809,14 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
1730
1809
  maxRightMargin
1731
1810
  );
1732
1811
  const innerWidth = width - sMarginLeft - rightMargin;
1733
- const innerHeight = height - sMarginTop - sMarginBottom;
1812
+ const innerHeight = height - sPlotTop - sMarginBottom;
1734
1813
  const allValues2 = data.flatMap((d) => d.values);
1735
1814
  const [minVal, maxVal] = d3Array2.extent(allValues2);
1736
1815
  const valuePadding = (maxVal - minVal) * 0.1 || 1;
1737
1816
  const yScale = d3Scale3.scaleLinear().domain([minVal - valuePadding, maxVal + valuePadding]).range([innerHeight, 0]);
1738
1817
  const xScale = d3Scale3.scalePoint().domain(periods).range([0, innerWidth]).padding(0);
1739
- const g = svg.append("g").attr("transform", `translate(${sMarginLeft},${sMarginTop})`);
1818
+ g.attr("transform", `translate(${sMarginLeft},${sPlotTop})`);
1740
1819
  const tooltip = createTooltip(container, palette, isDark);
1741
- renderChartTitle(
1742
- svg,
1743
- title,
1744
- parsed.titleLineNumber,
1745
- width,
1746
- textColor,
1747
- onClickItem
1748
- );
1749
1820
  for (const period of periods) {
1750
1821
  const x = xScale(period);
1751
1822
  g.append("text").attr("x", x).attr("y", -sPeriodHeaderY).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sPeriodFont).attr("font-weight", "bold").text(period);
@@ -1945,11 +2016,23 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
1945
2016
  const n = vennSets.length;
1946
2017
  const idealWidth = n === 2 ? 500 : 600;
1947
2018
  const ctx = exportDims ? ScaleContext.identity() : ScaleContext.from(width, idealWidth);
1948
- const sTitleHeight = title ? ctx.aesthetic(40) : 0;
1949
2019
  svg.attr("preserveAspectRatio", "xMidYMid meet");
1950
2020
  if (ctx.isBelowFloor) {
1951
2021
  svg.attr("width", "100%");
1952
2022
  }
2023
+ svg.append("style").text(
2024
+ "circle:focus, circle:focus-visible { outline-solid: none !important; }"
2025
+ );
2026
+ const titleExtra = renderChartTitle(
2027
+ svg,
2028
+ title,
2029
+ parsed.titleLineNumber,
2030
+ width,
2031
+ textColor,
2032
+ onClickItem,
2033
+ 2
2034
+ );
2035
+ const sTitleHeight = title ? ctx.aesthetic(40) + titleExtra : 0;
1953
2036
  const BASE_R = 100;
1954
2037
  const OVERLAP_DISTANCE = BASE_R * 1.4;
1955
2038
  let rawCircles;
@@ -2077,17 +2160,6 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
2077
2160
  marginBottom
2078
2161
  ).map((c) => ({ ...c, y: c.y + sTitleHeight }));
2079
2162
  const scaledR = circles[0].r;
2080
- svg.append("style").text(
2081
- "circle:focus, circle:focus-visible { outline-solid: none !important; }"
2082
- );
2083
- renderChartTitle(
2084
- svg,
2085
- title,
2086
- parsed.titleLineNumber,
2087
- width,
2088
- textColor,
2089
- onClickItem
2090
- );
2091
2163
  const circleEls = [];
2092
2164
  const circleGroup = svg.append("g");
2093
2165
  circles.forEach((c, i) => {
@@ -2195,6 +2267,19 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
2195
2267
  const INTERNAL_PAD = ctx.aesthetic(12);
2196
2268
  const labelGroup = svg.append("g");
2197
2269
  const setLabelBBoxes = circles.map(() => null);
2270
+ const tripleLeader = n === 3 && vennOverlaps.some((ov) => ov.label && new Set(ov.sets).size === 3) ? regionCentroid(circles, [true, true, true]) : null;
2271
+ const LEADER_CLEARANCE = ctx.structural(6);
2272
+ const TRIPLE_DODGE = Math.PI / 6;
2273
+ const gapToTripleLeader = (x1, y1, x2, y2) => {
2274
+ if (!tripleLeader || Math.min(y1, y2) >= tripleLeader.y) return Infinity;
2275
+ const lo = Math.min(x1, x2);
2276
+ const hi = Math.max(x1, x2);
2277
+ if (tripleLeader.x >= lo && tripleLeader.x <= hi) return 0;
2278
+ return Math.min(
2279
+ Math.abs(lo - tripleLeader.x),
2280
+ Math.abs(hi - tripleLeader.x)
2281
+ );
2282
+ };
2198
2283
  circles.forEach((c, i) => {
2199
2284
  const text = vennSets[i].name;
2200
2285
  const inside = circles.map((_, j) => j === i);
@@ -2229,6 +2314,37 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
2229
2314
  dx /= mag;
2230
2315
  dy /= mag;
2231
2316
  }
2317
+ const stubAt = (ux, uy) => {
2318
+ const near = c.r + edgePad;
2319
+ const far = near + stubLen;
2320
+ return gapToTripleLeader(
2321
+ c.x + ux * near,
2322
+ c.y + uy * near,
2323
+ c.x + ux * far,
2324
+ c.y + uy * far
2325
+ );
2326
+ };
2327
+ if (stubAt(dx, dy) < LEADER_CLEARANCE) {
2328
+ let best = null;
2329
+ for (const turn of [TRIPLE_DODGE, -TRIPLE_DODGE]) {
2330
+ const cos = Math.cos(turn);
2331
+ const sin = Math.sin(turn);
2332
+ const ux = dx * cos - dy * sin;
2333
+ const uy = dx * sin + dy * cos;
2334
+ const exit = { x: c.x + ux * c.r, y: c.y + uy * c.r };
2335
+ const blocked = circles.some(
2336
+ (o, j) => j !== i && pointInCircle(exit, o)
2337
+ );
2338
+ if (blocked) continue;
2339
+ const gap = stubAt(ux, uy);
2340
+ if (!best || gap > best.gap || gap === best.gap && ux > best.x)
2341
+ best = { x: ux, y: uy, gap };
2342
+ }
2343
+ if (best && best.gap >= LEADER_CLEARANCE) {
2344
+ dx = best.x;
2345
+ dy = best.y;
2346
+ }
2347
+ }
2232
2348
  const exitX = c.x + dx * c.r;
2233
2349
  const exitY = c.y + dy * c.r;
2234
2350
  const edgeX = exitX + dx * edgePad;
@@ -2626,8 +2742,6 @@ function renderWordCloud(container, parsed, palette, _isDark, onClickItem, expor
2626
2742
  const { svg, width, height, textColor, colors } = init;
2627
2743
  const idealWidth = Math.max(400, words.length * 30);
2628
2744
  const ctx = exportDims ? ScaleContext.identity() : ScaleContext.from(width, idealWidth);
2629
- const sTitleHeight = title ? ctx.aesthetic(40) : 0;
2630
- const cloudHeight = height - sTitleHeight;
2631
2745
  const sPadding = ctx.structural(2);
2632
2746
  svg.attr("preserveAspectRatio", "xMidYMid meet");
2633
2747
  if (ctx.isBelowFloor) {
@@ -2645,14 +2759,17 @@ function renderWordCloud(container, parsed, palette, _isDark, onClickItem, expor
2645
2759
  return sMinSize + Math.sqrt(t) * (sMaxSize - sMinSize);
2646
2760
  };
2647
2761
  const rotateFn = getRotateFn(cloudOptions.rotate);
2648
- renderChartTitle(
2762
+ const titleExtra = renderChartTitle(
2649
2763
  svg,
2650
2764
  title,
2651
2765
  parsed.titleLineNumber,
2652
2766
  width,
2653
2767
  textColor,
2654
- onClickItem
2768
+ onClickItem,
2769
+ 2
2655
2770
  );
2771
+ const sTitleHeight = title ? ctx.aesthetic(40) + titleExtra : 0;
2772
+ const cloudHeight = height - sTitleHeight;
2656
2773
  const g = svg.append("g").attr(
2657
2774
  "transform",
2658
2775
  `translate(${width / 2},${sTitleHeight + cloudHeight / 2})`
@@ -2691,8 +2808,6 @@ function renderWordCloudAsync(container, parsed, palette, _isDark, exportDims) {
2691
2808
  resolve();
2692
2809
  return;
2693
2810
  }
2694
- const titleHeight = title ? 40 : 0;
2695
- const cloudHeight = height - titleHeight;
2696
2811
  const textColor = palette.text;
2697
2812
  const bgColor = palette.bg;
2698
2813
  const colors = getSeriesColors(palette);
@@ -2707,7 +2822,17 @@ function renderWordCloudAsync(container, parsed, palette, _isDark, exportDims) {
2707
2822
  };
2708
2823
  const rotateFn = getRotateFn(cloudOptions.rotate);
2709
2824
  const svg = d3Selection3.select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMid meet").style("background", bgColor);
2710
- renderChartTitle(svg, title, parsed.titleLineNumber, width, textColor);
2825
+ const titleExtra = renderChartTitle(
2826
+ svg,
2827
+ title,
2828
+ parsed.titleLineNumber,
2829
+ width,
2830
+ textColor,
2831
+ void 0,
2832
+ 2
2833
+ );
2834
+ const titleHeight = title ? 40 + titleExtra : 0;
2835
+ const cloudHeight = height - titleHeight;
2711
2836
  const g = svg.append("g").attr(
2712
2837
  "transform",
2713
2838
  `translate(${width / 2},${titleHeight + cloudHeight / 2})`
@@ -2767,8 +2892,8 @@ async function exportArc(ctx) {
2767
2892
  // src/block/export.ts
2768
2893
  async function exportBlock(ctx) {
2769
2894
  const { content, theme, palette } = ctx;
2770
- const { parseBlock: parseBlock2 } = await import("./parser-BNRX35NT.js");
2771
- const { renderBlockForExport } = await import("./renderer-N75E3UVY.js");
2895
+ const { parseBlock: parseBlock2 } = await import("./parser-JRKPOO2Z.js");
2896
+ const { renderBlockForExport } = await import("./renderer-HIB6LZWZ.js");
2772
2897
  const effectivePalette = await resolveExportPalette(theme, palette);
2773
2898
  const blockParsed = parseBlock2(content, effectivePalette);
2774
2899
  if (blockParsed.error || blockParsed.top.rows.length === 0) return "";
@@ -2783,8 +2908,8 @@ async function exportBlock(ctx) {
2783
2908
  // src/body/export.ts
2784
2909
  async function exportBody(ctx) {
2785
2910
  const { content, theme, palette } = ctx;
2786
- const { parseBody: parseBody2 } = await import("./parser-HM6FEX5K.js");
2787
- const { renderBodyForExport } = await import("./renderer-6HU44IGJ.js");
2911
+ const { parseBody: parseBody2 } = await import("./parser-QEMFMVF5.js");
2912
+ const { renderBodyForExport } = await import("./renderer-A36NL2SS.js");
2788
2913
  const effectivePalette = await resolveExportPalette(theme, palette);
2789
2914
  const parsed = parseBody2(content, effectivePalette);
2790
2915
  if (parsed.error) return "";
@@ -2803,7 +2928,7 @@ async function exportBody(ctx) {
2803
2928
  // src/boxes-and-lines/export.ts
2804
2929
  async function exportBoxesAndLines(ctx) {
2805
2930
  const { content, theme, palette, viewState, exportMode } = ctx;
2806
- const { parseBoxesAndLines: parseBoxesAndLines2 } = await import("./parser-ZV756RMP.js");
2931
+ const { parseBoxesAndLines: parseBoxesAndLines2 } = await import("./parser-IZYIXDJX.js");
2807
2932
  const effectivePalette = await resolveExportPalette(theme, palette);
2808
2933
  const blParsed = parseBoxesAndLines2(content, effectivePalette);
2809
2934
  if (blParsed.error || blParsed.nodes.length === 0) return "";
@@ -2814,9 +2939,17 @@ async function exportBoxesAndLines(ctx) {
2814
2939
  blHiddenTagValues.set(k, new Set(v));
2815
2940
  }
2816
2941
  }
2817
- const { renderBoxesAndLinesForExport } = await import("./renderer-TS5NHOQD.js");
2818
- const { layoutBoxesAndLines } = await import("./layout-AF4KA5B2.js");
2819
- const blLayout = await layoutBoxesAndLines(blParsed);
2942
+ const { renderBoxesAndLinesForExport } = await import("./renderer-XMJ6XZGL.js");
2943
+ const { layoutBoxesAndLines } = await import("./layout-6VY3DHYD.js");
2944
+ const { collapseBoxesAndLines, unionCollapsedBLGroups } = await import("./collapse-HNTPLB2Q.js");
2945
+ const cr = collapseBoxesAndLines(
2946
+ blParsed,
2947
+ unionCollapsedBLGroups(blParsed, viewState?.cg)
2948
+ );
2949
+ const blLayout = await layoutBoxesAndLines(cr.parsed, {
2950
+ collapsedChildCounts: cr.collapsedChildCounts,
2951
+ originalGroups: cr.originalGroups
2952
+ });
2820
2953
  const PADDING = 20;
2821
2954
  const titleOffset = blParsed.title ? 40 : 0;
2822
2955
  const exportWidth = blLayout.width + PADDING * 2;
@@ -2825,7 +2958,7 @@ async function exportBoxesAndLines(ctx) {
2825
2958
  const blActiveTagGroup = ctxTagOverride(ctx);
2826
2959
  renderBoxesAndLinesForExport(
2827
2960
  container,
2828
- blParsed,
2961
+ cr.parsed,
2829
2962
  blLayout,
2830
2963
  effectivePalette,
2831
2964
  ctx.isDark,
@@ -2846,8 +2979,8 @@ async function exportBoxesAndLines(ctx) {
2846
2979
  // src/bracket/export.ts
2847
2980
  async function exportBracket(ctx) {
2848
2981
  const { content, theme, palette } = ctx;
2849
- const { parseBracket: parseBracket2 } = await import("./parser-GBQY3WOZ.js");
2850
- const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-LJPUCG3U.js");
2982
+ const { parseBracket: parseBracket2 } = await import("./parser-GMCXCJSP.js");
2983
+ const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-KOPJ76GS.js");
2851
2984
  const effectivePalette = await resolveExportPalette(theme, palette);
2852
2985
  const parsed = parseBracket2(content, effectivePalette);
2853
2986
  if (parsed.error) return "";
@@ -2863,14 +2996,14 @@ async function exportBracket(ctx) {
2863
2996
  // src/c4/export.ts
2864
2997
  async function exportC4(ctx) {
2865
2998
  const { content, theme, palette, viewState, exportMode } = ctx;
2866
- const { parseC4: parseC42 } = await import("./parser-XEJP37GQ.js");
2999
+ const { parseC4: parseC42 } = await import("./parser-WKEYS7N3.js");
2867
3000
  const {
2868
3001
  layoutC4Context,
2869
3002
  layoutC4Containers,
2870
3003
  layoutC4Components,
2871
3004
  layoutC4Deployment
2872
- } = await import("./layout-LNVIH45F.js");
2873
- const { renderC4Context, renderC4Containers } = await import("./renderer-D6EH5UQ6.js");
3005
+ } = await import("./layout-R6ULGQJK.js");
3006
+ const { renderC4Context, renderC4Containers } = await import("./renderer-UIHCYXBY.js");
2874
3007
  const effectivePalette = await resolveExportPalette(theme, palette);
2875
3008
  const c4Parsed = parseC42(content, effectivePalette);
2876
3009
  if (c4Parsed.error || c4Parsed.elements.length === 0) return "";
@@ -2906,9 +3039,9 @@ async function exportC4(ctx) {
2906
3039
  // src/class/export.ts
2907
3040
  async function exportClass(ctx) {
2908
3041
  const { content, theme, palette, exportMode } = ctx;
2909
- const { parseClassDiagram: parseClassDiagram2 } = await import("./parser-4GHAYZKZ.js");
2910
- const { layoutClassDiagram } = await import("./layout-FCFUVCRI.js");
2911
- const { renderClassDiagram } = await import("./renderer-VNUDN6F5.js");
3042
+ const { parseClassDiagram: parseClassDiagram2 } = await import("./parser-RSWZGQA7.js");
3043
+ const { layoutClassDiagram } = await import("./layout-7C2QZCEZ.js");
3044
+ const { renderClassDiagram } = await import("./renderer-4PKYVOYL.js");
2912
3045
  const effectivePalette = await resolveExportPalette(theme, palette);
2913
3046
  const classParsed = parseClassDiagram2(content, effectivePalette);
2914
3047
  if (classParsed.error || classParsed.classes.length === 0) return "";
@@ -2935,7 +3068,7 @@ async function exportClass(ctx) {
2935
3068
  // src/clock/export.ts
2936
3069
  async function exportClock(ctx) {
2937
3070
  const { content, theme, palette } = ctx;
2938
- const { parseClock: parseClock2 } = await import("./parser-H6HT2WFQ.js");
3071
+ const { parseClock: parseClock2 } = await import("./parser-SGX2PVR5.js");
2939
3072
  const { renderClockForExport } = await import("./renderer-DDWDCM2K.js");
2940
3073
  const effectivePalette = await resolveExportPalette(theme, palette);
2941
3074
  const parsed = parseClock2(content, effectivePalette);
@@ -2951,7 +3084,7 @@ async function exportClock(ctx) {
2951
3084
  // src/countdown/export.ts
2952
3085
  async function exportCountdown(ctx) {
2953
3086
  const { content, theme, palette } = ctx;
2954
- const { parseCountdown: parseCountdown2 } = await import("./parser-OHBBDCG4.js");
3087
+ const { parseCountdown: parseCountdown2 } = await import("./parser-5KVFS4RN.js");
2955
3088
  const { renderCountdownForExport } = await import("./renderer-3NLDX7DQ.js");
2956
3089
  const effectivePalette = await resolveExportPalette(theme, palette);
2957
3090
  const parsed = parseCountdown2(content, effectivePalette);
@@ -2967,8 +3100,8 @@ async function exportCountdown(ctx) {
2967
3100
  // src/cycle/export.ts
2968
3101
  async function exportCycle(ctx) {
2969
3102
  const { content, theme, palette, viewState, exportMode } = ctx;
2970
- const { parseCycle: parseCycle2 } = await import("./parser-Y7QXD2UR.js");
2971
- const { renderCycleForExport } = await import("./renderer-CVCCW7UT.js");
3103
+ const { parseCycle: parseCycle2 } = await import("./parser-P375HO7Q.js");
3104
+ const { renderCycleForExport } = await import("./renderer-FAFSRFGR.js");
2972
3105
  const effectivePalette = await resolveExportPalette(theme, palette);
2973
3106
  const cycleParsed = parseCycle2(content);
2974
3107
  if (cycleParsed.error || cycleParsed.nodes.length === 0) return "";
@@ -2988,9 +3121,9 @@ async function exportCycle(ctx) {
2988
3121
  // src/er/export.ts
2989
3122
  async function exportEr(ctx) {
2990
3123
  const { content, theme, palette, viewState, exportMode } = ctx;
2991
- const { parseERDiagram: parseERDiagram2 } = await import("./parser-QWTECQEC.js");
2992
- const { layoutERDiagram } = await import("./layout-KELSNWBD.js");
2993
- const { renderERDiagram } = await import("./renderer-2MCV75JQ.js");
3124
+ const { parseERDiagram: parseERDiagram2 } = await import("./parser-IU6425JW.js");
3125
+ const { layoutERDiagram } = await import("./layout-G3RVKEC4.js");
3126
+ const { renderERDiagram } = await import("./renderer-COV2DXTM.js");
2994
3127
  const effectivePalette = await resolveExportPalette(theme, palette);
2995
3128
  const erParsed = parseERDiagram2(content, effectivePalette);
2996
3129
  if (erParsed.error || erParsed.tables.length === 0) return "";
@@ -3024,8 +3157,8 @@ async function exportEr(ctx) {
3024
3157
  // src/event-line/export.ts
3025
3158
  async function exportEventLine(ctx) {
3026
3159
  const { content, theme, palette } = ctx;
3027
- const { parseEventLine: parseEventLine2 } = await import("./parser-L7SI3PW4.js");
3028
- const { renderEventLineForExport } = await import("./renderer-VNJOZPSH.js");
3160
+ const { parseEventLine: parseEventLine2 } = await import("./parser-MAGFK6OK.js");
3161
+ const { renderEventLineForExport } = await import("./renderer-CNDB4JTZ.js");
3029
3162
  const effectivePalette = await resolveExportPalette(theme, palette);
3030
3163
  const parsed = parseEventLine2(content, effectivePalette);
3031
3164
  if (parsed.error || parsed.events.length === 0) return "";
@@ -3045,9 +3178,9 @@ async function exportEventLine(ctx) {
3045
3178
  // src/family/export.ts
3046
3179
  async function exportFamily(ctx) {
3047
3180
  const { content, theme, palette } = ctx;
3048
- const { parseFamily: parseFamily2 } = await import("./parser-5RUD4A3X.js");
3049
- const { layoutFamily } = await import("./layout-3TSVAGWH.js");
3050
- const { renderFamilyForExport } = await import("./renderer-GKY55M4Z.js");
3181
+ const { parseFamily: parseFamily2 } = await import("./parser-MUHFEM4G.js");
3182
+ const { layoutFamily } = await import("./layout-SPPS225I.js");
3183
+ const { renderFamilyForExport } = await import("./renderer-6O5SV5YE.js");
3051
3184
  const effectivePalette = await resolveExportPalette(theme, palette);
3052
3185
  const parsed = parseFamily2(content, effectivePalette);
3053
3186
  if (parsed.error || parsed.persons.size === 0) return "";
@@ -3079,9 +3212,9 @@ async function exportFamily(ctx) {
3079
3212
  // src/gantt/export.ts
3080
3213
  async function exportGantt(ctx) {
3081
3214
  const { content, theme, palette, viewState, exportMode } = ctx;
3082
- const { parseGantt: parseGantt2 } = await import("./parser-MWINQNQW.js");
3083
- const { calculateSchedule } = await import("./calculator-GIB7POFX.js");
3084
- const { renderGantt } = await import("./renderer-VUXAAGUG.js");
3215
+ const { parseGantt: parseGantt2 } = await import("./parser-DRFEX6OX.js");
3216
+ const { calculateSchedule } = await import("./calculator-CIGGTURF.js");
3217
+ const { renderGantt } = await import("./renderer-E5E3OJ42.js");
3085
3218
  const effectivePalette = await resolveExportPalette(theme, palette);
3086
3219
  const ganttParsed = parseGantt2(content, effectivePalette);
3087
3220
  const resolved = calculateSchedule(ganttParsed);
@@ -3124,8 +3257,8 @@ async function exportGantt(ctx) {
3124
3257
  // src/goal/export.ts
3125
3258
  async function exportGoal(ctx) {
3126
3259
  const { content, theme, palette } = ctx;
3127
- const { parseGoal: parseGoal2 } = await import("./parser-4BOP77CD.js");
3128
- const { renderGoalForExport } = await import("./renderer-MVBAQP3M.js");
3260
+ const { parseGoal: parseGoal2 } = await import("./parser-UMNBPXG2.js");
3261
+ const { renderGoalForExport } = await import("./renderer-MYKL6VG6.js");
3129
3262
  const effectivePalette = await resolveExportPalette(theme, palette);
3130
3263
  const parsed = parseGoal2(content, effectivePalette);
3131
3264
  if (parsed.error) return "";
@@ -3140,9 +3273,9 @@ async function exportGoal(ctx) {
3140
3273
  // src/graph/export.ts
3141
3274
  async function exportFlowchart(ctx) {
3142
3275
  const { content, theme, palette } = ctx;
3143
- const { parseFlowchart: parseFlowchart2 } = await import("./flowchart-parser-SM5LHF2D.js");
3144
- const { layoutGraph } = await import("./layout-MPSH3YWE.js");
3145
- const { renderFlowchart } = await import("./flowchart-renderer-PPS2GTTD.js");
3276
+ const { parseFlowchart: parseFlowchart2 } = await import("./flowchart-parser-UI5VZNGJ.js");
3277
+ const { layoutGraph } = await import("./layout-WBH5IHYK.js");
3278
+ const { renderFlowchart } = await import("./flowchart-renderer-IYWPKPCF.js");
3146
3279
  const effectivePalette = await resolveExportPalette(theme, palette);
3147
3280
  const fcParsed = parseFlowchart2(content, effectivePalette);
3148
3281
  if (fcParsed.error || fcParsed.nodes.length === 0) return "";
@@ -3161,9 +3294,9 @@ async function exportFlowchart(ctx) {
3161
3294
  }
3162
3295
  async function exportState(ctx) {
3163
3296
  const { content, theme, palette, viewState } = ctx;
3164
- const { parseState: parseState2 } = await import("./state-parser-EQBBEKHR.js");
3165
- const { layoutGraph } = await import("./layout-MPSH3YWE.js");
3166
- const { renderState } = await import("./state-renderer-SOGZ2CNN.js");
3297
+ const { parseState: parseState2 } = await import("./state-parser-2PQRH5JE.js");
3298
+ const { layoutGraph } = await import("./layout-WBH5IHYK.js");
3299
+ const { renderState } = await import("./state-renderer-YP6HWLJR.js");
3167
3300
  const { collapseStateGroups } = await import("./state-collapse-SE2G4K4I.js");
3168
3301
  const effectivePalette = await resolveExportPalette(theme, palette);
3169
3302
  const stateParsed = parseState2(content, effectivePalette);
@@ -3202,10 +3335,10 @@ async function exportState(ctx) {
3202
3335
  // src/infra/export.ts
3203
3336
  async function exportInfra(ctx) {
3204
3337
  const { content, theme, palette, viewState } = ctx;
3205
- const { parseInfra: parseInfra2 } = await import("./parser-GM5B2EPW.js");
3338
+ const { parseInfra: parseInfra2 } = await import("./parser-WE4VSBBY.js");
3206
3339
  const { computeInfra } = await import("./compute-II4G44IK.js");
3207
- const { layoutInfra } = await import("./layout-2WESJYRE.js");
3208
- const { renderInfra, computeInfraLegendGroups } = await import("./renderer-SYRH3B62.js");
3340
+ const { layoutInfra } = await import("./layout-7E7BNOGO.js");
3341
+ const { renderInfra, computeInfraLegendGroups } = await import("./renderer-JLOKFKOZ.js");
3209
3342
  const effectivePalette = await resolveExportPalette(theme, palette);
3210
3343
  const infraParsed = parseInfra2(content);
3211
3344
  if (infraParsed.error || infraParsed.nodes.length === 0) return "";
@@ -3253,16 +3386,22 @@ async function exportInfra(ctx) {
3253
3386
 
3254
3387
  // src/journey-map/export.ts
3255
3388
  async function exportJourneyMap(ctx) {
3256
- const { content, theme, palette, exportMode } = ctx;
3257
- const { parseJourneyMap: parseJourneyMap2 } = await import("./parser-BPYHIG24.js");
3258
- const { renderJourneyMap } = await import("./renderer-ONENGXFQ.js");
3259
- const { layoutJourneyMap } = await import("./layout-PPIVGJXD.js");
3389
+ const { content, theme, palette, exportMode, viewState } = ctx;
3390
+ const { parseJourneyMap: parseJourneyMap2 } = await import("./parser-IHFHPFL7.js");
3391
+ const { renderJourneyMap } = await import("./renderer-66SCERH7.js");
3392
+ const { layoutJourneyMap } = await import("./layout-ROI5KVSO.js");
3393
+ const { collapsedJourneyPhasesFromSource } = await import("./collapse-GOWNCVHZ.js");
3260
3394
  const effectivePalette = await resolveExportPalette(theme, palette);
3261
3395
  const jmParsed = parseJourneyMap2(content, effectivePalette);
3262
3396
  if (jmParsed.error || jmParsed.phases.length === 0 && jmParsed.steps.length === 0)
3263
3397
  return "";
3398
+ const collapsedPhases = collapsedJourneyPhasesFromSource(
3399
+ jmParsed,
3400
+ viewState?.cg
3401
+ );
3264
3402
  const jmLayout = layoutJourneyMap(jmParsed, effectivePalette, {
3265
- isDark: ctx.isDark
3403
+ isDark: ctx.isDark,
3404
+ collapsedPhases
3266
3405
  });
3267
3406
  const container = createExportContainer(
3268
3407
  jmLayout.totalWidth,
@@ -3270,7 +3409,8 @@ async function exportJourneyMap(ctx) {
3270
3409
  );
3271
3410
  renderJourneyMap(container, jmParsed, effectivePalette, ctx.isDark, {
3272
3411
  exportDims: { width: jmLayout.totalWidth, height: jmLayout.totalHeight },
3273
- exportMode
3412
+ exportMode,
3413
+ collapsedPhases
3274
3414
  });
3275
3415
  return finalizeSvgExport(container, theme, effectivePalette);
3276
3416
  }
@@ -3278,8 +3418,8 @@ async function exportJourneyMap(ctx) {
3278
3418
  // src/kanban/export.ts
3279
3419
  async function exportKanban(ctx) {
3280
3420
  const { content, theme, palette, viewState, exportMode } = ctx;
3281
- const { parseKanban: parseKanban2 } = await import("./parser-DWV2CYBS.js");
3282
- const { renderKanban } = await import("./renderer-LFZKG2GR.js");
3421
+ const { parseKanban: parseKanban2 } = await import("./parser-WPXUUNA2.js");
3422
+ const { renderKanban } = await import("./renderer-ITJ67HXO.js");
3283
3423
  const effectivePalette = await resolveExportPalette(theme, palette);
3284
3424
  const kanbanParsed = parseKanban2(content, effectivePalette);
3285
3425
  if (kanbanParsed.error || kanbanParsed.columns.length === 0) return "";
@@ -3312,8 +3452,8 @@ async function exportKanban(ctx) {
3312
3452
  // src/live-link/export.ts
3313
3453
  async function exportLiveLink(ctx) {
3314
3454
  const { content, theme, palette } = ctx;
3315
- const { parseLiveLink: parseLiveLink2 } = await import("./parser-LUJX7AXO.js");
3316
- const { renderLiveLinkCard } = await import("./renderer-E3334XLT.js");
3455
+ const { parseLiveLink: parseLiveLink2 } = await import("./parser-PYY5BRLQ.js");
3456
+ const { renderLiveLinkCard } = await import("./renderer-6IAXRZLK.js");
3317
3457
  const effectivePalette = await resolveExportPalette(theme, palette);
3318
3458
  return renderLiveLinkCard(parseLiveLink2(content), effectivePalette, theme);
3319
3459
  }
@@ -3330,10 +3470,10 @@ async function resolveMapDataSource(source) {
3330
3470
  }
3331
3471
  async function exportMap(ctx) {
3332
3472
  const { content, theme, palette, options } = ctx;
3333
- const { parseMap: parseMap2 } = await import("./parser-F75WNYMK.js");
3473
+ const { parseMap: parseMap2 } = await import("./parser-CFAYEWLF.js");
3334
3474
  const { resolveMap } = await import("./resolver-33K6MBCT.js");
3335
- const { renderMapForExport } = await import("./renderer-YJVQT7QG.js");
3336
- const { mapExportDimensions } = await import("./dimensions-DBCRBZIU.js");
3475
+ const { renderMapForExport } = await import("./renderer-S6L3JR6C.js");
3476
+ const { mapExportDimensions } = await import("./dimensions-KXAI7U2B.js");
3337
3477
  const effectivePalette = await resolveExportPalette(theme, palette);
3338
3478
  const mapParsed = parseMap2(content, effectivePalette);
3339
3479
  const { data: mapData, reason } = await resolveMapDataSource(
@@ -3368,10 +3508,10 @@ async function exportMap(ctx) {
3368
3508
  // src/mindmap/export.ts
3369
3509
  async function exportMindmap(ctx) {
3370
3510
  const { content, theme, palette, viewState, exportMode } = ctx;
3371
- const { parseMindmap: parseMindmap2 } = await import("./parser-ZWWQZ4XZ.js");
3372
- const { layoutMindmap } = await import("./layout-R6G4MEO3.js");
3511
+ const { parseMindmap: parseMindmap2 } = await import("./parser-SJUEFKNM.js");
3512
+ const { layoutMindmap } = await import("./layout-FJDBY3WG.js");
3373
3513
  const { collapseMindmapTree } = await import("./collapse-6X5S2S3G.js");
3374
- const { renderMindmap } = await import("./renderer-5AEDVLAA.js");
3514
+ const { renderMindmap } = await import("./renderer-TCTZZ5Y6.js");
3375
3515
  const isDark = ctx.isDark;
3376
3516
  const effectivePalette = await resolveExportPalette(theme, palette);
3377
3517
  const mmParsed = parseMindmap2(content, effectivePalette);
@@ -3423,10 +3563,10 @@ async function exportMindmap(ctx) {
3423
3563
  // src/org/export.ts
3424
3564
  async function exportOrg(ctx) {
3425
3565
  const { content, theme, palette, viewState, exportMode } = ctx;
3426
- const { parseOrg: parseOrg2, findOrgNodeIdByName } = await import("./parser-6WURFLOB.js");
3427
- const { layoutOrg } = await import("./layout-3J72UULM.js");
3566
+ const { parseOrg: parseOrg2, findOrgNodeIdByName } = await import("./parser-E4B7HJT2.js");
3567
+ const { layoutOrg } = await import("./layout-WTHBGTH2.js");
3428
3568
  const { collapseOrgTree, focusOrgTree, unionCollapsedOrgNodes } = await import("./collapse-VNYYXMUI.js");
3429
- const { renderOrg, ancestorTrailReserve } = await import("./renderer-7C76HP5W.js");
3569
+ const { renderOrg, ancestorTrailReserve } = await import("./renderer-DXCATVLO.js");
3430
3570
  const isDark = ctx.isDark;
3431
3571
  const effectivePalette = await resolveExportPalette(theme, palette);
3432
3572
  const orgParsed = parseOrg2(content, effectivePalette);
@@ -3486,59 +3626,11 @@ async function exportOrg(ctx) {
3486
3626
  return finalizeSvgExport(container, theme, effectivePalette);
3487
3627
  }
3488
3628
 
3489
- // src/pert/export.ts
3490
- async function exportPert(ctx) {
3491
- const { content, theme, palette, viewState } = ctx;
3492
- const { parsePert: parsePert2 } = await import("./parser-F3JJNIFC.js");
3493
- const { analyzePert } = await import("./analyzer-G7PGOT3V.js");
3494
- const { layoutPert } = await import("./layout-H2KP5A6M.js");
3495
- const { renderPert, measurePertAnalysisBlock } = await import("./renderer-N6PM5CSG.js");
3496
- const effectivePalette = await resolveExportPalette(theme, palette);
3497
- const pertParsed = parsePert2(content, { palette: effectivePalette });
3498
- if (pertParsed.error || pertParsed.activities.length === 0) return "";
3499
- const pertResolved = analyzePert(pertParsed);
3500
- const pertLayout = layoutPert(pertResolved);
3501
- const hasTitle = !!pertParsed.title && !pertParsed.options.noTitle;
3502
- const hasSubtitle = pertResolved.projectSubtitle !== null;
3503
- const titleHeight = hasTitle ? 80 : hasSubtitle ? 50 : 0;
3504
- const PERT_PADDING = 20;
3505
- const analysisOn = viewState?.an ?? !pertParsed.options.noAnalysis;
3506
- const fieldLabelsOn = viewState?.fl === true;
3507
- const exportW = pertLayout.width + PERT_PADDING * 2;
3508
- const analysisMeasured = measurePertAnalysisBlock(
3509
- pertResolved,
3510
- exportW - 2 * PERT_PADDING,
3511
- {
3512
- showTornado: analysisOn,
3513
- showScurve: analysisOn,
3514
- showFieldLegend: fieldLabelsOn
3515
- }
3516
- );
3517
- const exportH = pertLayout.height + PERT_PADDING * 2 + titleHeight + analysisMeasured.height;
3518
- const container = createExportContainer(exportW, exportH);
3519
- renderPert(
3520
- container,
3521
- pertResolved,
3522
- pertLayout,
3523
- effectivePalette,
3524
- ctx.isDark,
3525
- {
3526
- title: hasTitle ? pertParsed.title : null,
3527
- subtitle: pertResolved.projectSubtitle,
3528
- exportDims: { width: exportW, height: exportH },
3529
- showTornado: analysisOn,
3530
- showScurve: analysisOn,
3531
- showFieldLegend: fieldLabelsOn
3532
- }
3533
- );
3534
- return finalizeSvgExport(container, theme, effectivePalette);
3535
- }
3536
-
3537
3629
  // src/pyramid/export.ts
3538
3630
  async function exportPyramid(ctx) {
3539
3631
  const { content, theme, palette } = ctx;
3540
- const { parsePyramid: parsePyramid2 } = await import("./parser-DGLKH4NT.js");
3541
- const { renderPyramidForExport } = await import("./renderer-F7YGMEGQ.js");
3632
+ const { parsePyramid: parsePyramid2 } = await import("./parser-3PMYAVFL.js");
3633
+ const { renderPyramidForExport } = await import("./renderer-7OXMSF4R.js");
3542
3634
  const effectivePalette = await resolveExportPalette(theme, palette);
3543
3635
  const pyramidParsed = parsePyramid2(content);
3544
3636
  if (pyramidParsed.error || pyramidParsed.layers.length === 0) return "";
@@ -3573,16 +3665,43 @@ async function exportQuadrant(ctx) {
3573
3665
 
3574
3666
  // src/raci/export.ts
3575
3667
  async function exportRaci(ctx) {
3576
- const { content, theme, palette } = ctx;
3577
- const { parseRaci: parseRaci2 } = await import("./parser-WIKXZP4X.js");
3578
- const { renderRaciForExport } = await import("./renderer-5GP7YUS4.js");
3668
+ const { content, theme, palette, viewState } = ctx;
3669
+ const { parseRaci: parseRaci2 } = await import("./parser-QIPDBT5M.js");
3670
+ const { renderRaciForExport } = await import("./renderer-BXVTYE27.js");
3579
3671
  const effectivePalette = await resolveExportPalette(theme, palette);
3580
3672
  const raciParsed = parseRaci2(content, effectivePalette);
3581
3673
  if (raciParsed.error) return "";
3582
3674
  const container = createExportContainer(ctx.width, ctx.height);
3583
- renderRaciForExport(container, raciParsed, effectivePalette, ctx.isDark, {
3584
- width: ctx.width,
3585
- height: ctx.height
3675
+ renderRaciForExport(
3676
+ container,
3677
+ raciParsed,
3678
+ effectivePalette,
3679
+ ctx.isDark,
3680
+ { width: ctx.width, height: ctx.height },
3681
+ viewState?.cs
3682
+ );
3683
+ return finalizeSvgExport(container, theme, effectivePalette);
3684
+ }
3685
+
3686
+ // src/swot/export.ts
3687
+ async function exportSwot(ctx) {
3688
+ const { content, theme, palette, exportMode } = ctx;
3689
+ const { parseSwot: parseSwot2 } = await import("./parser-LDVVBP7S.js");
3690
+ const { renderSwot } = await import("./renderer-CC6O6GQK.js");
3691
+ const effectivePalette = await resolveExportPalette(theme, palette);
3692
+ const parsed = parseSwot2(content, effectivePalette);
3693
+ if (parsed.error) return "";
3694
+ const container = document.createElement("div");
3695
+ container.style.position = "absolute";
3696
+ container.style.left = "-9999px";
3697
+ document.body.appendChild(container);
3698
+ renderSwot(container, parsed, effectivePalette, ctx.isDark, {
3699
+ activeTagGroup: resolveActiveTagGroup(
3700
+ parsed.tagGroups,
3701
+ parsed.options["active-tag"],
3702
+ ctxTagOverride(ctx)
3703
+ ),
3704
+ exportMode
3586
3705
  });
3587
3706
  return finalizeSvgExport(container, theme, effectivePalette);
3588
3707
  }
@@ -3590,8 +3709,8 @@ async function exportRaci(ctx) {
3590
3709
  // src/ring/export.ts
3591
3710
  async function exportRing(ctx) {
3592
3711
  const { content, theme, palette } = ctx;
3593
- const { parseRing: parseRing2 } = await import("./parser-B7SCN7FG.js");
3594
- const { renderRingForExport } = await import("./renderer-PEJF6R2I.js");
3712
+ const { parseRing: parseRing2 } = await import("./parser-KI2XYB2R.js");
3713
+ const { renderRingForExport } = await import("./renderer-F3JYZERE.js");
3595
3714
  const effectivePalette = await resolveExportPalette(theme, palette);
3596
3715
  const ringParsed = parseRing2(content);
3597
3716
  if (ringParsed.error || ringParsed.layers.length === 0) return "";
@@ -3618,12 +3737,21 @@ async function exportVisualization(ctx) {
3618
3737
  const effectivePalette = await resolveExportPalette(theme, palette);
3619
3738
  const isDark = ctx.isDark;
3620
3739
  const container = createExportContainer(ctx.width, ctx.height);
3621
- const { parseSequenceDgmo: parseSequenceDgmo2 } = await import("./parser-2AXU2MHJ.js");
3622
- const { renderSequenceDiagram } = await import("./renderer-66NCRXSC.js");
3740
+ const { parseSequenceDgmo: parseSequenceDgmo2 } = await import("./parser-RNBDDEGL.js");
3741
+ const { renderSequenceDiagram } = await import("./renderer-ASPBBACI.js");
3623
3742
  const seqParsed = parseSequenceDgmo2(content, effectivePalette);
3624
3743
  if (seqParsed.error || seqParsed.participants.length === 0) return "";
3625
- const collapsedSections = viewState?.cs ? new Set(viewState.cs) : void 0;
3744
+ const {
3745
+ unionCollapsedSequenceNotes,
3746
+ collapsedSequenceSectionLinesFromSource
3747
+ } = await import("./collapse-6IGH2B24.js");
3748
+ const collapsedSections = collapsedSequenceSectionLinesFromSource(seqParsed);
3749
+ for (const line2 of viewState?.cs ?? []) collapsedSections.add(line2);
3626
3750
  const collapsedGroups = viewState?.cg ? new Set(viewState.cg.map(Number).filter((n) => Number.isFinite(n))) : void 0;
3751
+ const collapsedNotes = unionCollapsedSequenceNotes(
3752
+ seqParsed,
3753
+ viewState?.cg?.map(Number).filter((n) => Number.isFinite(n))
3754
+ );
3627
3755
  const seqActiveTagGroup = ctxTagOverride(ctx);
3628
3756
  renderSequenceDiagram(
3629
3757
  container,
@@ -3636,8 +3764,9 @@ async function exportVisualization(ctx) {
3636
3764
  ...seqActiveTagGroup !== void 0 && {
3637
3765
  activeTagGroup: seqActiveTagGroup
3638
3766
  },
3639
- ...collapsedSections !== void 0 && { collapsedSections },
3640
- ...collapsedGroups !== void 0 && { collapsedGroups }
3767
+ ...collapsedSections.size > 0 && { collapsedSections },
3768
+ ...collapsedGroups !== void 0 && { collapsedGroups },
3769
+ collapsedNotes
3641
3770
  }
3642
3771
  );
3643
3772
  return finalizeSvgExport(container, theme, effectivePalette);
@@ -3646,15 +3775,18 @@ async function exportVisualization(ctx) {
3646
3775
  // src/sitemap/export.ts
3647
3776
  async function exportSitemap(ctx) {
3648
3777
  const { content, theme, palette, viewState, exportMode } = ctx;
3649
- const { parseSitemap: parseSitemap2 } = await import("./parser-UHKROC7Z.js");
3650
- const { layoutSitemap } = await import("./layout-IXQNVRBE.js");
3651
- const { collapseSitemapTree } = await import("./collapse-TCVK3RPO.js");
3652
- const { renderSitemap } = await import("./renderer-MZIWP55B.js");
3778
+ const { parseSitemap: parseSitemap2 } = await import("./parser-BA43YPIQ.js");
3779
+ const { layoutSitemap } = await import("./layout-ZCCABSV7.js");
3780
+ const { collapseSitemapTree, unionCollapsedSitemapNodes } = await import("./collapse-NUM7DPJA.js");
3781
+ const { renderSitemap } = await import("./renderer-HLDRRFZB.js");
3653
3782
  const isDark = ctx.isDark;
3654
3783
  const effectivePalette = await resolveExportPalette(theme, palette);
3655
3784
  const sitemapParsed = parseSitemap2(content, effectivePalette);
3656
3785
  if (sitemapParsed.error || sitemapParsed.roots.length === 0) return "";
3657
- const collapsedNodes = viewState?.cg ? new Set(viewState.cg) : void 0;
3786
+ const collapsedNodes = unionCollapsedSitemapNodes(
3787
+ sitemapParsed,
3788
+ viewState?.cg
3789
+ );
3658
3790
  const activeTagGroup = resolveActiveTagGroup(
3659
3791
  sitemapParsed.tagGroups,
3660
3792
  sitemapParsed.options["active-tag"],
@@ -3664,7 +3796,7 @@ async function exportSitemap(ctx) {
3664
3796
  sitemapParsed.options["hide"],
3665
3797
  viewState?.ha
3666
3798
  );
3667
- const { parsed: effectiveParsed, hiddenCounts } = collapsedNodes && collapsedNodes.size > 0 ? collapseSitemapTree(sitemapParsed, collapsedNodes) : { parsed: sitemapParsed, hiddenCounts: /* @__PURE__ */ new Map() };
3799
+ const { parsed: effectiveParsed, hiddenCounts } = collapsedNodes.size > 0 ? collapseSitemapTree(sitemapParsed, collapsedNodes) : { parsed: sitemapParsed, hiddenCounts: /* @__PURE__ */ new Map() };
3668
3800
  const sitemapLayout = layoutSitemap(
3669
3801
  effectiveParsed,
3670
3802
  hiddenCounts.size > 0 ? hiddenCounts : void 0,
@@ -3677,7 +3809,7 @@ async function exportSitemap(ctx) {
3677
3809
  const {
3678
3810
  LEGEND_HEIGHT: SITEMAP_LEGEND_HEIGHT,
3679
3811
  LEGEND_GROUP_GAP: SITEMAP_LEGEND_GROUP_GAP
3680
- } = await import("./legend-constants-55MFBXYF.js");
3812
+ } = await import("./legend-constants-KF3MKWL2.js");
3681
3813
  const suppressedLegendBand = sitemapLayout.legend.length > 0 && effectiveParsed.options["no-legend"] === "on" ? SITEMAP_LEGEND_HEIGHT + SITEMAP_LEGEND_GROUP_GAP : 0;
3682
3814
  const exportWidth = sitemapLayout.width + PADDING * 2;
3683
3815
  const exportHeight = sitemapLayout.height + PADDING * 2 + titleOffset - suppressedLegendBand;
@@ -3718,9 +3850,9 @@ async function exportSlope(ctx) {
3718
3850
  // src/swimlane/export.ts
3719
3851
  async function exportSwimlane(ctx) {
3720
3852
  const { content, theme, palette } = ctx;
3721
- const { parseSwimlane: parseSwimlane2 } = await import("./parser-W6NX3AIV.js");
3722
- const { layoutSwimlane } = await import("./layout-VDCJOZSH.js");
3723
- const { renderSwimlaneForExport } = await import("./renderer-MGF2NNGG.js");
3853
+ const { parseSwimlane: parseSwimlane2 } = await import("./parser-DWVBRBB2.js");
3854
+ const { layoutSwimlane } = await import("./layout-BSK374N6.js");
3855
+ const { renderSwimlaneForExport } = await import("./renderer-E7LC7HCU.js");
3724
3856
  const effectivePalette = await resolveExportPalette(theme, palette);
3725
3857
  const swimParsed = parseSwimlane2(content, effectivePalette);
3726
3858
  if (swimParsed.error || swimParsed.nodes.length === 0) return "";
@@ -3752,8 +3884,8 @@ async function exportSwimlane(ctx) {
3752
3884
  // src/tech-radar/export.ts
3753
3885
  async function exportTechRadar(ctx) {
3754
3886
  const { content, theme, palette, viewState, exportMode } = ctx;
3755
- const { parseTechRadar: parseTechRadar2 } = await import("./parser-CRJYLOHA.js");
3756
- const { renderTechRadarForExport } = await import("./renderer-2V2XY2V7.js");
3887
+ const { parseTechRadar: parseTechRadar2 } = await import("./parser-YZ3J542U.js");
3888
+ const { renderTechRadarForExport } = await import("./renderer-ZTHXOBXW.js");
3757
3889
  const effectivePalette = await resolveExportPalette(theme, palette);
3758
3890
  const radarParsed = parseTechRadar2(content);
3759
3891
  if (radarParsed.error || radarParsed.quadrants.length === 0) return "";
@@ -3804,14 +3936,14 @@ async function exportTimeline(ctx) {
3804
3936
  // src/treemap/export.ts
3805
3937
  async function exportTreemap(ctx) {
3806
3938
  const { content, theme, palette } = ctx;
3807
- const { parseTreemap: parseTreemap2 } = await import("./parser-5HQPPVHJ.js");
3939
+ const { parseTreemap: parseTreemap2 } = await import("./parser-XP3RCOTN.js");
3808
3940
  const effectivePalette = await resolveExportPalette(theme, palette);
3809
3941
  const treemapParsed = parseTreemap2(content, effectivePalette);
3810
3942
  if (treemapParsed.error || treemapParsed.roots.length === 0) return "";
3811
3943
  const container = createExportContainer(ctx.width, ctx.height);
3812
3944
  const dims = { width: ctx.width, height: ctx.height };
3813
3945
  if (treemapParsed.options.radial) {
3814
- const { renderTreemapRadialForExport } = await import("./renderer-radial-4R7AKETK.js");
3946
+ const { renderTreemapRadialForExport } = await import("./renderer-radial-FC25BDCZ.js");
3815
3947
  renderTreemapRadialForExport(
3816
3948
  container,
3817
3949
  treemapParsed,
@@ -3820,7 +3952,7 @@ async function exportTreemap(ctx) {
3820
3952
  dims
3821
3953
  );
3822
3954
  } else {
3823
- const { renderTreemapForExport } = await import("./renderer-7RAMBMTH.js");
3955
+ const { renderTreemapForExport } = await import("./renderer-INQMQPNN.js");
3824
3956
  renderTreemapForExport(
3825
3957
  container,
3826
3958
  treemapParsed,
@@ -3846,8 +3978,8 @@ async function exportVenn(ctx) {
3846
3978
  // src/version-control/export.ts
3847
3979
  async function exportVersionControl(ctx) {
3848
3980
  const { content, theme, palette } = ctx;
3849
- const { parseVersionControl: parseVersionControl2 } = await import("./parser-DRUGM3R6.js");
3850
- const { renderVersionControlForExport } = await import("./renderer-NOYLNVTI.js");
3981
+ const { parseVersionControl: parseVersionControl2 } = await import("./parser-FWQY3HJX.js");
3982
+ const { renderVersionControlForExport } = await import("./renderer-SYWVZ4CY.js");
3851
3983
  const effectivePalette = await resolveExportPalette(theme, palette);
3852
3984
  const parsed = parseVersionControl2(content, effectivePalette);
3853
3985
  if (parsed.error || parsed.nodes.length === 0) return "";
@@ -3868,11 +4000,11 @@ async function exportVersionControl(ctx) {
3868
4000
  // src/whiteboard/export.ts
3869
4001
  async function exportWhiteboard(ctx) {
3870
4002
  const { content, theme } = ctx;
3871
- const { parseWhiteboard: parseWhiteboard2 } = await import("./parser-722KLLAQ.js");
4003
+ const { parseWhiteboard: parseWhiteboard2 } = await import("./parser-MH5BDN7X.js");
3872
4004
  const effectivePalette = await resolveExportPalette(theme, ctx.palette);
3873
4005
  const parsed = parseWhiteboard2(content, effectivePalette);
3874
4006
  if (parsed.error || parsed.elements.length === 0) return "";
3875
- const { renderWhiteboard } = await import("./renderer-BYLQ37T2.js");
4007
+ const { renderWhiteboard } = await import("./renderer-2V5NVI3V.js");
3876
4008
  const container = createExportContainer(1, 1);
3877
4009
  const resolveImage = ctx.options?.resolveImage;
3878
4010
  const showNotes = ctx.options?.showNotes;
@@ -3886,9 +4018,9 @@ async function exportWhiteboard(ctx) {
3886
4018
  // src/wireframe/export.ts
3887
4019
  async function exportWireframe(ctx) {
3888
4020
  const { content, theme, palette } = ctx;
3889
- const { parseWireframe: parseWireframe2 } = await import("./parser-TTGZYLYD.js");
3890
- const { layoutWireframe } = await import("./layout-HF3PMI4H.js");
3891
- const { renderWireframe } = await import("./renderer-QZJZIAT3.js");
4021
+ const { parseWireframe: parseWireframe2 } = await import("./parser-JQGUTDSX.js");
4022
+ const { layoutWireframe } = await import("./layout-VTGOYGRC.js");
4023
+ const { renderWireframe } = await import("./renderer-WIBVOPRC.js");
3892
4024
  const effectivePalette = await resolveExportPalette(theme, palette);
3893
4025
  const wireframeParsed = parseWireframe2(content);
3894
4026
  if (wireframeParsed.error || wireframeParsed.roots.length === 0 && wireframeParsed.modals.length === 0)
@@ -3960,6 +4092,7 @@ var DIAGRAM_EXPORT_HANDLERS = {
3960
4092
  clock: exportClock,
3961
4093
  bracket: exportBracket,
3962
4094
  raci: exportRaci,
4095
+ swot: exportSwot,
3963
4096
  body: exportBody,
3964
4097
  "live-link": exportLiveLink,
3965
4098
  // D3 visualizations — own handler per type (Story 109.2). Only `sequence`
@@ -3990,13 +4123,13 @@ function resolveArcChordOverride(content, detectedType, palette) {
3990
4123
  }
3991
4124
  async function renderForExport(content, theme, palette, viewState, options) {
3992
4125
  const exportMode = options?.exportMode ?? false;
3993
- const { parseDgmoChartType } = await import("./dgmo-router-EPBQKQW2.js");
4126
+ const { parseDgmoChartType } = await import("./dgmo-router-RSYWR5IS.js");
3994
4127
  const detectedTypeRaw = parseDgmoChartType(content);
3995
4128
  const override = resolveArcChordOverride(content, detectedTypeRaw, palette);
3996
4129
  const renderContent = override?.content ?? content;
3997
4130
  const detectedType = override?.type ?? detectedTypeRaw;
3998
4131
  if (detectedType !== null) {
3999
- const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-IRP5VANE.js");
4132
+ const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-INWEGMSD.js");
4000
4133
  if (supportsD3DataChart(detectedType)) {
4001
4134
  return fitSvgToContent(
4002
4135
  await renderDataChartD32(renderContent, theme, palette, {
@@ -4175,6 +4308,7 @@ function buildHoverCss(spec, derived = {}, emphasisOverride) {
4175
4308
  }
4176
4309
  }
4177
4310
  const parts = [...base];
4311
+ if (spec.extraCross) cross.push(...spec.extraCross(dimOpacity));
4178
4312
  if (cross.length) parts.push(`@media (hover:hover){${cross.join("")}}`);
4179
4313
  return parts.join("");
4180
4314
  }
@@ -4492,6 +4626,24 @@ var HOVER_SPECS = {
4492
4626
  legend: true,
4493
4627
  legendMarkSelector: ".kanban-card"
4494
4628
  },
4629
+ // swot: as kanban — hovering anywhere in a panel dims the other three, and the
4630
+ // tag legend pairs on the items, which carry `data-tag-<slug>`.
4631
+ swot: {
4632
+ markSelector: ".swot-panel",
4633
+ strategy: "structural",
4634
+ groupSelector: ".swot-panel",
4635
+ emphasis: "dim",
4636
+ selfEmphasis: false,
4637
+ legend: true,
4638
+ legendMarkSelector: ".swot-item",
4639
+ // An axis header keeps the two panels it heads (#1742): HELPFUL → S and
4640
+ // O, INTERNAL → S and W. The other two panels and headers dim.
4641
+ extraCross: (dim) => ["col", "row"].flatMap(
4642
+ (axis) => [0, 1].map(
4643
+ (i) => `svg:has(.swot-axis[data-swot-axis="${axis}-${i}"]:hover) :is(.swot-panel:not([data-swot-${axis}="${i}"]),.swot-axis:not([data-swot-axis="${axis}-${i}"])){opacity:${dim}}`
4644
+ )
4645
+ )
4646
+ },
4495
4647
  // line: each series is a `g.dgmo-series` wrapping its line + data dots + an
4496
4648
  // invisible fat hit corridor (`.dgmo-series-hit`, renderer-baked) — without
4497
4649
  // the corridor only the 2.5px stroke and 4px dots were hittable, so the
@@ -4655,13 +4807,17 @@ function deriveFromSvg(svg, spec) {
4655
4807
  }
4656
4808
  return { ...legendExtra() };
4657
4809
  }
4658
- function injectHoverStyles(svg, chartType, opts) {
4659
- if (!opts?.bakeHover || !svg || !chartType) return svg;
4810
+ function hoverCssFor(svg, chartType, emphasis) {
4811
+ if (!svg || !chartType) return "";
4660
4812
  const spec = HOVER_SPECS[chartType];
4661
- if (!spec) return svg;
4813
+ if (!spec) return "";
4662
4814
  const derived = deriveFromSvg(svg, spec);
4663
4815
  const eff = derived.groupAttr ? { ...spec, groupAttr: derived.groupAttr } : spec;
4664
- const css = buildHoverCss(eff, derived, opts.emphasis);
4816
+ return buildHoverCss(eff, derived, emphasis);
4817
+ }
4818
+ function injectHoverStyles(svg, chartType, opts) {
4819
+ if (!opts?.bakeHover) return svg;
4820
+ const css = hoverCssFor(svg, chartType, opts.emphasis);
4665
4821
  if (!css) return svg;
4666
4822
  const open = svg.match(/<svg\b[^>]*>/);
4667
4823
  if (open?.index == null) return svg;
@@ -5002,6 +5158,13 @@ function summarizeJourneyMap(content) {
5002
5158
  const who = parsed.persona ? ` for ${parsed.persona.name}` : "";
5003
5159
  return `Journey map${who} of ${plural(steps, "step", "steps")}${phases.length > 0 ? ` across ${namedCount(phases, "phase", "phases")}` : ""}.`;
5004
5160
  }
5161
+ function summarizeSwot(content) {
5162
+ const parsed = parseSwot(content);
5163
+ if (parsed.error) return null;
5164
+ const counts = parsed.sections.map((s) => `${s.label} ${s.items.length}`);
5165
+ const total = parsed.sections.reduce((n, s) => n + s.items.length, 0);
5166
+ return `SWOT analysis with ${plural(total, "item", "items")}: ${counts.join(", ")}.`;
5167
+ }
5005
5168
  function summarizeRaci(content) {
5006
5169
  const parsed = parseRaci(content);
5007
5170
  if (parsed.error) return null;
@@ -5380,6 +5543,7 @@ var SUMMARIZERS = {
5380
5543
  wireframe: summarizeWireframe,
5381
5544
  "journey-map": summarizeJourneyMap,
5382
5545
  raci: summarizeRaci,
5546
+ swot: summarizeSwot,
5383
5547
  body: summarizeBody,
5384
5548
  bracket: summarizeBracket,
5385
5549
  "live-link": summarizeLiveLink,
@@ -5623,7 +5787,15 @@ async function render(source, options) {
5623
5787
  );
5624
5788
  svg = applyRootDesc(
5625
5789
  applyRootA11y(
5626
- injectHoverStyles(svg, chartType, { bakeHover }),
5790
+ // The fold cue (#1741) rides the same gate: a host that opts out of
5791
+ // baked hover opts out of every baked hover rule.
5792
+ // `interactiveFolds: false` drops it, and the toggles' button markup.
5793
+ options?.interactiveFolds === false ? stripFoldAffordance(
5794
+ injectHoverStyles(svg, chartType, { bakeHover })
5795
+ ) : bakeHover ? injectToggleCue(
5796
+ injectHoverStyles(svg, chartType, { bakeHover }),
5797
+ theme
5798
+ ) : svg,
5627
5799
  chartType,
5628
5800
  diagramTitle(content, parsed.chartType)
5629
5801
  ),
@@ -5651,11 +5823,13 @@ export {
5651
5823
  fitSvgToContent,
5652
5824
  orderArcNodes,
5653
5825
  renderArcDiagram,
5826
+ collapsedPertGroupIdsFromSource,
5654
5827
  renderQuadrant,
5655
5828
  renderSlopeChart,
5656
5829
  renderVenn,
5657
5830
  renderWordCloud,
5658
5831
  renderForExport,
5659
5832
  DEFAULT_DIM_OPACITY,
5833
+ hoverCssFor,
5660
5834
  render
5661
5835
  };