@diagrammo/dgmo 0.76.0 → 0.78.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 (229) hide show
  1. package/README.md +17 -13
  2. package/dist/advanced.d.ts +150 -13
  3. package/dist/advanced.js +180 -131
  4. package/dist/block.css +1 -1
  5. package/dist/block.d.ts +2 -2
  6. package/dist/block.js +45 -41
  7. package/dist/{chart-meta-lP8Rl19E.d.ts → chart-meta-BKN2ORkc.d.ts} +2 -2
  8. package/dist/chart-meta.d.ts +3 -3
  9. package/dist/chart-meta.js +30 -29
  10. package/dist/charts-d3-KEQ7XVSM.js +31 -0
  11. package/dist/{chunk-7IATMZSA.js → chunk-26EVL454.js} +1 -25
  12. package/dist/{chunk-3H4PDNP4.js → chunk-2NLBIZEW.js} +2 -2
  13. package/dist/{chunk-GFXFRKUG.js → chunk-32VR65TL.js} +63 -36
  14. package/dist/{chunk-IHUOYDLN.js → chunk-36UQ77JV.js} +24 -24
  15. package/dist/chunk-3DPOIW3W.js +10 -0
  16. package/dist/{chunk-3SP6G4LN.js → chunk-3GLTQZKE.js} +2 -2
  17. package/dist/{chunk-DY7KDZUF.js → chunk-3OWIYK52.js} +2 -2
  18. package/dist/{chunk-UBW53CNS.js → chunk-3XFOE3DQ.js} +12 -7
  19. package/dist/{chunk-W7UBPARG.js → chunk-3ZLQM6XN.js} +2 -2
  20. package/dist/{chunk-5GM6BZO7.js → chunk-4AWLEWSD.js} +5 -2
  21. package/dist/{chunk-AYM472K3.js → chunk-4IGUEGD6.js} +80 -61
  22. package/dist/{chunk-QOVM5VRC.js → chunk-57GSSHBR.js} +2 -2
  23. package/dist/{chunk-5VMUVJO4.js → chunk-5G55TS3H.js} +2 -2
  24. package/dist/{chunk-QT5UMFPE.js → chunk-67I3HFSF.js} +9 -9
  25. package/dist/{chunk-WQXD3IIN.js → chunk-6B3M6LW6.js} +10 -8
  26. package/dist/{chunk-3EGIU5WY.js → chunk-6PHOZBW5.js} +4 -6
  27. package/dist/{chunk-5PFNUDXR.js → chunk-6VTLVU7D.js} +2 -2
  28. package/dist/{chunk-M5JT2AU7.js → chunk-6Z2NUJSX.js} +2 -2
  29. package/dist/{chunk-BWJLLNUX.js → chunk-7BNRHSSF.js} +2 -2
  30. package/dist/{chunk-JLODGGN2.js → chunk-7NNJXYXU.js} +2 -2
  31. package/dist/{chunk-FTTB64OJ.js → chunk-7SMVTA7I.js} +26 -26
  32. package/dist/{chunk-Z7KVOVE4.js → chunk-7WTFX6OA.js} +6 -3
  33. package/dist/{chunk-ZM27UI5O.js → chunk-A7Y32YD6.js} +2 -2
  34. package/dist/{chunk-FPRMP6YA.js → chunk-AHN2CVCH.js} +10 -7
  35. package/dist/{chunk-N6MZSBOL.js → chunk-AN7T6VP7.js} +2 -2
  36. package/dist/{chunk-F4X5NVKY.js → chunk-B6PVPAS5.js} +2 -2
  37. package/dist/{chunk-QI4Q5ZZH.js → chunk-BB2ORSTF.js} +19 -18
  38. package/dist/{chunk-HGFKDSKZ.js → chunk-BJB4YDJP.js} +21 -21
  39. package/dist/{chunk-BZQCAZZZ.js → chunk-BPM52K3Z.js} +41 -34
  40. package/dist/{chunk-HFCKU73Y.js → chunk-BSREARWG.js} +29 -28
  41. package/dist/{chunk-F4V67JXG.js → chunk-CTERZC4K.js} +2 -2
  42. package/dist/{chunk-FMZEU7MF.js → chunk-CYLSQO4L.js} +6 -6
  43. package/dist/{chunk-JLJ7SP4X.js → chunk-DCPD5SHV.js} +3 -3
  44. package/dist/{chunk-U7AO6FRL.js → chunk-ENDB5YSV.js} +363 -129
  45. package/dist/{chunk-RTTZIX34.js → chunk-EOB7XVYR.js} +2 -2
  46. package/dist/chunk-EPDBWATV.js +38 -0
  47. package/dist/{chunk-TPN7RJOM.js → chunk-FJADQOFQ.js} +3 -3
  48. package/dist/{chunk-MG3DE3VO.js → chunk-FLMXJMMY.js} +3 -3
  49. package/dist/{chunk-WGC42WJU.js → chunk-FWNJDD4U.js} +6 -2
  50. package/dist/{chunk-S5P5Z5Y5.js → chunk-GINNZHVN.js} +2 -2
  51. package/dist/{chunk-7EZ5AKBK.js → chunk-GJH7ZEPH.js} +45 -38
  52. package/dist/{chunk-E3BJVEMZ.js → chunk-GQEXY7XL.js} +68 -65
  53. package/dist/{chunk-COCMMQXW.js → chunk-HHHYVTVS.js} +16 -16
  54. package/dist/chunk-ICLB27PZ.js +11 -0
  55. package/dist/{chunk-QMFIZQTB.js → chunk-IDGQB6XD.js} +6 -4
  56. package/dist/{chunk-R3XI2VC7.js → chunk-IDJGV6VM.js} +2 -1
  57. package/dist/{chunk-4CRLM3IT.js → chunk-IE47TYZT.js} +177 -118
  58. package/dist/{chunk-FJ57274M.js → chunk-IIEI7VK5.js} +15 -1
  59. package/dist/{chunk-YDA46XHI.js → chunk-IMO46ROR.js} +38 -32
  60. package/dist/{chunk-4SXHMFFP.js → chunk-IZTU6WVR.js} +24 -13
  61. package/dist/{chunk-U74EGVOA.js → chunk-JOD2CK2M.js} +16 -14
  62. package/dist/{chunk-U5B3TUEW.js → chunk-JUNTVLOU.js} +16 -15
  63. package/dist/{chunk-RWFMOVHG.js → chunk-KAZQX2EY.js} +2 -2
  64. package/dist/{chunk-NHQ7HUAS.js → chunk-KGX5LIUG.js} +10 -8
  65. package/dist/{chunk-Q74GP3GK.js → chunk-KO6DGOOB.js} +3 -3
  66. package/dist/{chunk-UTTRJ6KN.js → chunk-L26M3X7K.js} +16 -13
  67. package/dist/{chunk-RU2HHHYA.js → chunk-LD2JSKU3.js} +12 -2
  68. package/dist/{chunk-32MOGTKT.js → chunk-LEBPWFVF.js} +50 -46
  69. package/dist/{chunk-MU3CJPJF.js → chunk-LGI735AJ.js} +2 -2
  70. package/dist/{chunk-OWVDD5EC.js → chunk-LMWXBFLA.js} +2 -2
  71. package/dist/{chunk-CLQJAGWL.js → chunk-M3LZCDB6.js} +40 -42
  72. package/dist/{chunk-YT5ICQ4R.js → chunk-MFK7LF66.js} +2 -2
  73. package/dist/{chunk-JL7BDLC6.js → chunk-MJYFPFZT.js} +110 -20
  74. package/dist/{chunk-2QRIMMIH.js → chunk-N56W4R66.js} +2 -2
  75. package/dist/{chunk-LXXVHLTH.js → chunk-NN5IDH2I.js} +2 -2
  76. package/dist/{chunk-46KVXDUJ.js → chunk-NS3KIRSW.js} +2 -2
  77. package/dist/{chunk-LM3HY3VG.js → chunk-P2DM7Q5U.js} +2 -2
  78. package/dist/{chunk-DJL5PO27.js → chunk-P4SQV3XD.js} +2 -2
  79. package/dist/{chunk-HOIAQ3P2.js → chunk-P54AX5XN.js} +9 -9
  80. package/dist/{chunk-JQ575OAK.js → chunk-P64NBPSK.js} +14 -14
  81. package/dist/{chunk-7G4XMHDB.js → chunk-PIWUZFG7.js} +33 -25
  82. package/dist/{chunk-SWEKCK34.js → chunk-QAPFXLAC.js} +2 -2
  83. package/dist/chunk-QFIXL3OK.js +68 -0
  84. package/dist/{chunk-KRTLS3G6.js → chunk-QVMV4KCA.js} +2 -2
  85. package/dist/{chunk-76LHNLGX.js → chunk-R4YGH7DJ.js} +5 -3
  86. package/dist/{chunk-PAW4RMH3.js → chunk-RC3FM3FE.js} +12 -13
  87. package/dist/{chunk-UJBP57UJ.js → chunk-RC6GGF6X.js} +2 -2
  88. package/dist/{chunk-S6OXNZBM.js → chunk-RHZZVIGA.js} +3 -3
  89. package/dist/{chunk-MS5574I7.js → chunk-RIXWLFB4.js} +2 -2
  90. package/dist/{chunk-BCB24FG7.js → chunk-RUNI4OXP.js} +18 -14
  91. package/dist/{chunk-ICVIJLBA.js → chunk-SFSJ6XWV.js} +2 -2
  92. package/dist/{chunk-EGXJWRO6.js → chunk-SNBEAO4Q.js} +8 -8
  93. package/dist/{chunk-XHROEQ23.js → chunk-SXD6VY7D.js} +16 -14
  94. package/dist/{chunk-GEURKGZS.js → chunk-TLM3I4XF.js} +16 -16
  95. package/dist/{chunk-IFC3JXCT.js → chunk-TO6TWNMF.js} +19 -15
  96. package/dist/{chunk-OUJG73YJ.js → chunk-U2JIFCJN.js} +18 -18
  97. package/dist/{chunk-CAPR5DET.js → chunk-U4ND3J6C.js} +18 -14
  98. package/dist/{chunk-YVDBBWEP.js → chunk-UCF6TKWV.js} +51 -48
  99. package/dist/{chunk-UWYZIGCB.js → chunk-UDYJVX6Y.js} +9 -9
  100. package/dist/{chunk-OBYZU23V.js → chunk-UQY2VLUK.js} +25 -23
  101. package/dist/{chunk-CQKD6GOC.js → chunk-VAA7QSZ7.js} +53 -32
  102. package/dist/{chunk-Q6BAFS7I.js → chunk-VQGQF7O7.js} +12 -10
  103. package/dist/{chunk-DEW62ON3.js → chunk-VSPNH7LC.js} +2 -2
  104. package/dist/{chunk-4YER7UCV.js → chunk-VUJQ6RU6.js} +2 -2
  105. package/dist/{chunk-C576CU77.js → chunk-VZD3ZV4Y.js} +26 -22
  106. package/dist/{chunk-NCT22MOD.js → chunk-WMIKC5XO.js} +2 -2
  107. package/dist/{chunk-C2WH3BMS.js → chunk-X326N4GN.js} +10 -7
  108. package/dist/chunk-XBJJP2HN.js +37 -0
  109. package/dist/{chunk-7NSNE52V.js → chunk-XCR3PDFF.js} +2 -2
  110. package/dist/{chunk-TF76LCZS.js → chunk-XDPJMLOH.js} +30 -27
  111. package/dist/{chunk-3LJNQ6LR.js → chunk-YKDZ3ZRI.js} +27 -25
  112. package/dist/{chunk-GLREDNBA.js → chunk-YVLTNNME.js} +12 -2
  113. package/dist/{chunk-76IBFEYW.js → chunk-ZGOBAMQ2.js} +15 -13
  114. package/dist/{chunk-AFR6GWXD.js → chunk-ZMCFUGKO.js} +49 -42
  115. package/dist/clock.js +11 -5
  116. package/dist/completion-registry.js +2 -2
  117. package/dist/countdown.js +26 -20
  118. package/dist/{d3--y67plmW.d.ts → d3-CQT5bwpb.d.ts} +1 -1
  119. package/dist/{dgmo-router-CY5j16Pl.d.ts → dgmo-router-C9CsswPZ.d.ts} +1 -1
  120. package/dist/{dgmo-router-A3LIHT6H.js → dgmo-router-XZNCLYTV.js} +30 -29
  121. package/dist/{dimensions-7NYBSZRJ.js → dimensions-SIZMZ4DC.js} +8 -8
  122. package/dist/{flowchart-renderer-QYGQ64BM.js → flowchart-renderer-FDJ4QQXE.js} +15 -14
  123. package/dist/index.d.ts +7 -7
  124. package/dist/index.js +58 -43
  125. package/dist/{layout-LAS67TK3.js → layout-5DZ2LI2R.js} +2 -2
  126. package/dist/{layout-ZAGUFT2G.js → layout-6I6LSBUR.js} +6 -5
  127. package/dist/{layout-2OJ25STS.js → layout-C2SCZV5M.js} +6 -5
  128. package/dist/{layout-6SKHNQYO.js → layout-CHWKNE3O.js} +3 -3
  129. package/dist/{layout-EM4DLMAX.js → layout-K4KML2DL.js} +3 -3
  130. package/dist/{layout-KQUSB45X.js → layout-S53FSD6R.js} +7 -6
  131. package/dist/{layout-ROORJQ4X.js → layout-TCFXB5XH.js} +7 -6
  132. package/dist/{layout-5ILNODTP.js → layout-XK6ZD7BU.js} +6 -5
  133. package/dist/{layout-B5GQVXXY.js → layout-YVY72CIG.js} +7 -6
  134. package/dist/{layout-VUZ3MLOI.js → layout-YY6VH5XH.js} +6 -5
  135. package/dist/{layout-RV2T2YTT.js → layout-ZDN252GR.js} +4 -3
  136. package/dist/{layout-search-UOKEMER5.js → layout-search-TSV4FURP.js} +7 -6
  137. package/dist/{legend-constants-PLN2YHGM.js → legend-constants-SB4PLHV5.js} +3 -3
  138. package/dist/{palettes-54YSI3IX.js → palettes-YIPSRYXP.js} +5 -3
  139. package/dist/{parser-GCVSRQPY.js → parser-2BX2EJUB.js} +3 -3
  140. package/dist/{parser-WVE6SKB7.js → parser-3UNIPVNY.js} +3 -3
  141. package/dist/{parser-5XFGK5C5.js → parser-4IHIVDJD.js} +5 -5
  142. package/dist/{parser-ZT3PU2HT.js → parser-62VNEQRT.js} +3 -3
  143. package/dist/{parser-PR3OR3LO.js → parser-6JNJHQAG.js} +3 -3
  144. package/dist/{parser-ZXQZZK6W.js → parser-6ZFQLLVE.js} +3 -2
  145. package/dist/{parser-WMJEPZDC.js → parser-BOPXE6RP.js} +3 -3
  146. package/dist/{parser-WWRRG2DV.js → parser-DFBQ2RID.js} +3 -3
  147. package/dist/{parser-2GMHFSTS.js → parser-EPKXJ2RL.js} +3 -3
  148. package/dist/{parser-ML3LVNDV.js → parser-G7E2BURB.js} +3 -3
  149. package/dist/{parser-QOIZGW7I.js → parser-GFGU5ZLQ.js} +3 -3
  150. package/dist/{parser-L7T7FY3H.js → parser-GKZWI5SZ.js} +3 -3
  151. package/dist/{parser-QYAIFXLP.js → parser-HSPODF4H.js} +3 -3
  152. package/dist/{parser-EQ4I3TSH.js → parser-IK3FXZ7D.js} +3 -3
  153. package/dist/{parser-LV7PQBUG.js → parser-LJWPKRDM.js} +3 -3
  154. package/dist/{parser-RDBXEVI4.js → parser-OYWUBQV4.js} +3 -3
  155. package/dist/{parser-6FUESG4N.js → parser-PD4TP6NM.js} +3 -3
  156. package/dist/{parser-E3OHNNTH.js → parser-R2JHC7LQ.js} +3 -3
  157. package/dist/{parser-CJNP7RKR.js → parser-RMZ6YI7H.js} +3 -3
  158. package/dist/{parser-TA5TYZNL.js → parser-RUJNN5PK.js} +3 -3
  159. package/dist/{parser-UTR5WE4O.js → parser-YWE7GHW6.js} +3 -3
  160. package/dist/{parser-3AOMUX5D.js → parser-Z5UK6ADF.js} +3 -3
  161. package/dist/{parser-YWQCC33R.js → parser-ZO5YT5SV.js} +3 -3
  162. package/dist/renderer-5TPUPMZ7.js +26 -0
  163. package/dist/{renderer-4EWGZLJ6.js → renderer-AIVALEQR.js} +7 -7
  164. package/dist/renderer-AMELXBNW.js +23 -0
  165. package/dist/renderer-BF7FYXG3.js +25 -0
  166. package/dist/renderer-CRRW7LTW.js +17 -0
  167. package/dist/renderer-CXU2MGSC.js +27 -0
  168. package/dist/renderer-DI66RLAG.js +30 -0
  169. package/dist/renderer-E2JTYQY5.js +39 -0
  170. package/dist/{renderer-ZAJ5353N.js → renderer-FA4BTAOL.js} +7 -7
  171. package/dist/{renderer-GF6S5ZX6.js → renderer-FFGFTIT4.js} +15 -14
  172. package/dist/renderer-IVAM7Z3Y.js +27 -0
  173. package/dist/renderer-J6HK2KOW.js +23 -0
  174. package/dist/renderer-J7J3OVLQ.js +39 -0
  175. package/dist/{renderer-QAMOXOZ2.js → renderer-JC7MK7SD.js} +6 -5
  176. package/dist/{renderer-CGOPX4HW.js → renderer-JHQC5RGJ.js} +14 -14
  177. package/dist/renderer-JRITSZY3.js +28 -0
  178. package/dist/{renderer-E6NHTVN6.js → renderer-KD5X4RIS.js} +14 -13
  179. package/dist/{renderer-OTHBTGBN.js → renderer-KWNNWCGD.js} +6 -5
  180. package/dist/{renderer-EP4GRCDX.js → renderer-LGMIAG6N.js} +7 -6
  181. package/dist/{renderer-IH45QV6Z.js → renderer-LQN3FXAP.js} +33 -32
  182. package/dist/renderer-LRL4SU43.js +29 -0
  183. package/dist/{renderer-D7N7PPB7.js → renderer-MBL64AJI.js} +6 -6
  184. package/dist/renderer-NA3DTAWF.js +39 -0
  185. package/dist/renderer-OR5QHR7X.js +31 -0
  186. package/dist/renderer-SBVWHQVW.js +30 -0
  187. package/dist/{renderer-KMOGGMM7.js → renderer-TLOSBJKW.js} +13 -13
  188. package/dist/{renderer-LE3ZKHNS.js → renderer-UDWJRRIC.js} +11 -11
  189. package/dist/renderer-VHK6UAW2.js +20 -0
  190. package/dist/{renderer-FUJNSC5X.js → renderer-W5UG2HWT.js} +5 -5
  191. package/dist/renderer-WOOKJOBQ.js +25 -0
  192. package/dist/renderer-WYNLGZRF.js +25 -0
  193. package/dist/{renderer-BUEFD2IF.js → renderer-Y74Y54C3.js} +8 -8
  194. package/dist/renderer-ZUAXGHFC.js +28 -0
  195. package/dist/renderer-radial-YVUDGR7C.js +21 -0
  196. package/dist/{state-parser-TPA67IXM.js → state-parser-CT5HQQ7E.js} +3 -3
  197. package/dist/state-renderer-7O3QGNJ5.js +41 -0
  198. package/dist/{tag-groups-DrHT2tEc.d.ts → tag-groups-BoJg3lFV.d.ts} +23 -1
  199. package/dist/{themes-GWhsabnx.d.ts → themes-CXYnNA4e.d.ts} +2 -2
  200. package/docs/architecture-report.md +3 -3
  201. package/docs/language-reference.md +122 -30
  202. package/docs/migration-sequence-color-to-tags.md +16 -8
  203. package/gallery/fixtures/sketch.dgmo +1 -1
  204. package/package.json +7 -6
  205. package/dist/charts-d3-SQEVMIAM.js +0 -29
  206. package/dist/chunk-LP7EC4MI.js +0 -16
  207. package/dist/chunk-UTCPNJND.js +0 -7
  208. package/dist/chunk-VV6HZQ5K.js +0 -40
  209. package/dist/renderer-3FB56573.js +0 -22
  210. package/dist/renderer-4PNVGHVA.js +0 -16
  211. package/dist/renderer-5W3HWIUL.js +0 -24
  212. package/dist/renderer-CO5O5VR5.js +0 -20
  213. package/dist/renderer-DKW273R7.js +0 -26
  214. package/dist/renderer-F24V3RD3.js +0 -26
  215. package/dist/renderer-F6WSR7UM.js +0 -39
  216. package/dist/renderer-FGGDZZFQ.js +0 -31
  217. package/dist/renderer-GJDVPXI3.js +0 -30
  218. package/dist/renderer-JMJ7Q5OC.js +0 -28
  219. package/dist/renderer-LBNVKVO3.js +0 -39
  220. package/dist/renderer-MUW4G2N6.js +0 -38
  221. package/dist/renderer-PIEPRK6M.js +0 -23
  222. package/dist/renderer-PKRKLOYR.js +0 -25
  223. package/dist/renderer-PR3KLNST.js +0 -28
  224. package/dist/renderer-RUHC6D3B.js +0 -25
  225. package/dist/renderer-UUP6OX6F.js +0 -27
  226. package/dist/renderer-UYZSP7MF.js +0 -25
  227. package/dist/renderer-XBL6CLN2.js +0 -30
  228. package/dist/renderer-radial-MZP3SVTZ.js +0 -21
  229. package/dist/state-renderer-UIE3AQM6.js +0 -40
@@ -3,16 +3,20 @@ import {
3
3
  } from "./chunk-EOYPX6SF.js";
4
4
  import {
5
5
  renderDataChartD3
6
- } from "./chunk-JL7BDLC6.js";
6
+ } from "./chunk-MJYFPFZT.js";
7
7
  import {
8
8
  computeQuadrantPointLabels
9
9
  } from "./chunk-L65WI4HO.js";
10
10
  import {
11
11
  renderTimeline
12
- } from "./chunk-YVDBBWEP.js";
12
+ } from "./chunk-UCF6TKWV.js";
13
13
  import {
14
14
  ScaleContext
15
15
  } from "./chunk-24YPR5EH.js";
16
+ import {
17
+ GRID_DASH,
18
+ scaleDash
19
+ } from "./chunk-IIEI7VK5.js";
16
20
  import {
17
21
  EXPORT_HEIGHT,
18
22
  EXPORT_WIDTH,
@@ -24,13 +28,13 @@ import {
24
28
  renderChartTitle,
25
29
  resolveExportPalette,
26
30
  showTooltip
27
- } from "./chunk-UBW53CNS.js";
31
+ } from "./chunk-3XFOE3DQ.js";
28
32
  import {
29
33
  legendInlineSupported
30
- } from "./chunk-MG3DE3VO.js";
34
+ } from "./chunk-FLMXJMMY.js";
31
35
  import {
32
36
  FONT_FAMILY
33
- } from "./chunk-UTCPNJND.js";
37
+ } from "./chunk-ICLB27PZ.js";
34
38
  import {
35
39
  measureText,
36
40
  wrapTextToWidth
@@ -45,19 +49,19 @@ import {
45
49
  parseVenn,
46
50
  parseVisualization,
47
51
  parseWordcloud
48
- } from "./chunk-FTTB64OJ.js";
52
+ } from "./chunk-7SMVTA7I.js";
49
53
  import {
50
54
  resolveActiveTagGroup,
51
55
  tagAttrKey
52
- } from "./chunk-76LHNLGX.js";
56
+ } from "./chunk-R4YGH7DJ.js";
53
57
  import {
54
58
  getPalette
55
- } from "./chunk-R3XI2VC7.js";
59
+ } from "./chunk-IDJGV6VM.js";
56
60
  import {
57
61
  getSeriesColors,
58
62
  mix,
59
63
  themeBaseBg
60
- } from "./chunk-GLREDNBA.js";
64
+ } from "./chunk-YVLTNNME.js";
61
65
  import {
62
66
  emit,
63
67
  makeDgmoError
@@ -101,7 +105,7 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
101
105
  const sPeriodFont = ctx.text(18);
102
106
  const sValueFont = ctx.text(16);
103
107
  const sPeriodHeaderY = ctx.structural(15);
104
- const sDash = `${ctx.structural(4)},${ctx.structural(4)}`;
108
+ const sDash = scaleDash(GRID_DASH, (n) => ctx.structural(n));
105
109
  const sLineStroke = ctx.structural(2.5);
106
110
  const sHitWidth = ctx.structural(14);
107
111
  const sPointR = ctx.structural(4);
@@ -141,7 +145,7 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
141
145
  );
142
146
  for (const period of periods) {
143
147
  const x = xScale(period);
144
- g.append("text").attr("x", x).attr("y", -sPeriodHeaderY).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sPeriodFont}px`).attr("font-weight", "600").text(period);
148
+ 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);
145
149
  g.append("line").attr("x1", x).attr("y1", 0).attr("x2", x).attr("y2", innerHeight).attr("stroke", mutedColor).attr("stroke-width", 1).attr("stroke-dasharray", sDash);
146
150
  }
147
151
  const lineGen = d3Shape.line().x((_d, i) => xScale(periods[i])).y((d) => yScale(d));
@@ -232,11 +236,11 @@ function renderSlopeChart(container, parsed, palette, isDark, onClickItem, expor
232
236
  const isLast = i === periods.length - 1;
233
237
  if (!isLast) {
234
238
  const adjustedY = leftLabelCollisions.get(i)[idx];
235
- seriesG.append("text").attr("x", isFirst ? x - sValueLabelXOff : x).attr("y", adjustedY).attr("dy", "0.35em").attr("text-anchor", isFirst ? "end" : "middle").attr("fill", color).attr("font-size", `${sValueFont}px`).text(val.toString());
239
+ seriesG.append("text").attr("x", isFirst ? x - sValueLabelXOff : x).attr("y", adjustedY).attr("dy", "0.35em").attr("text-anchor", isFirst ? "end" : "middle").attr("fill", color).attr("font-size", sValueFont).text(val.toString());
236
240
  }
237
241
  });
238
242
  const adjustedLastY = rightAdjustedY[idx];
239
- const labelEl = seriesG.append("text").attr("x", si.lastX + sLabelGap).attr("y", adjustedLastY).attr("text-anchor", "start").attr("fill", color).attr("font-size", `${sLabelFontSize}px`).attr("font-weight", "500");
243
+ const labelEl = seriesG.append("text").attr("x", si.lastX + sLabelGap).attr("y", adjustedLastY).attr("text-anchor", "start").attr("fill", color).attr("font-size", sLabelFontSize).attr("font-weight", "normal");
240
244
  if (!si.wrappedLines) {
241
245
  labelEl.attr("dy", "0.35em").text(si.labelText);
242
246
  } else {
@@ -392,7 +396,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
392
396
  const sNodeLabelYOffset = ctx.structural(ARC_NODE_LABEL_Y_OFFSET);
393
397
  const sStrokeMin = ctx.structural(ARC_STROKE_MIN);
394
398
  const sStrokeMax = ctx.structural(ARC_STROKE_MAX);
395
- const sBaselineDash = `${ctx.structural(4)},${ctx.structural(4)}`;
399
+ const sBaselineDash = scaleDash(GRID_DASH, (n) => ctx.structural(n));
396
400
  const sBaselineStrokeWidth = ctx.structural(ARC_BASELINE_STROKE_WIDTH);
397
401
  svg.attr("preserveAspectRatio", "xMidYMin meet");
398
402
  if (ctx.isBelowFloor) {
@@ -530,7 +534,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
530
534
  if (onClickItem) onClickItem(group.lineNumber);
531
535
  });
532
536
  const nameX = bandLeft + vNameColW / 2;
533
- g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", nameX).attr("y", midYBand).attr("text-anchor", "middle").attr("transform", `rotate(-90 ${nameX} ${midYBand})`).attr("fill", textColor).attr("font-size", `${sGroupLabelFont}px`).attr("font-weight", "600").attr("fill-opacity", 0.6).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
537
+ g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", nameX).attr("y", midYBand).attr("text-anchor", "middle").attr("transform", `rotate(-90 ${nameX} ${midYBand})`).attr("fill", textColor).attr("font-size", sGroupLabelFont).attr("font-weight", "bold").attr("fill-opacity", 0.6).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
534
538
  if (onClickItem) onClickItem(group.lineNumber);
535
539
  });
536
540
  }
@@ -564,7 +568,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
564
568
  "stroke-width",
565
569
  outlineDots ? ctx.structural(2) : sNodeStrokeWidth
566
570
  );
567
- nodeG.append("text").attr("x", baseX - sNodeLabelXOffset).attr("y", y).attr("dy", "0.35em").attr("text-anchor", "end").attr("fill", textColor).attr("font-size", `${sNodeLabelFont}px`).text(node);
571
+ nodeG.append("text").attr("x", baseX - sNodeLabelXOffset).attr("y", y).attr("dy", "0.35em").attr("text-anchor", "end").attr("fill", textColor).attr("font-size", sNodeLabelFont).text(node);
568
572
  }
569
573
  } else {
570
574
  const xScale = d3Scale2.scalePoint().domain(nodes).range([0, innerWidth]).padding(0.5);
@@ -649,7 +653,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
649
653
  }).style("cursor", "pointer").on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
650
654
  if (onClickItem) onClickItem(group.lineNumber);
651
655
  });
652
- g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", (minP + maxP) / 2).attr("y", nameY).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sGroupLabelFont}px`).attr("font-weight", "600").attr("fill-opacity", 0.6).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
656
+ g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", (minP + maxP) / 2).attr("y", nameY).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sGroupLabelFont).attr("font-weight", "bold").attr("fill-opacity", 0.6).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
653
657
  if (onClickItem) onClickItem(group.lineNumber);
654
658
  });
655
659
  }
@@ -684,7 +688,7 @@ function renderArcDiagram(container, parsed, palette, isDark, onClickItem, expor
684
688
  outlineDots ? ctx.structural(2) : sNodeStrokeWidth
685
689
  );
686
690
  const labelY = rotateLabels ? baseY + labelPivotGap : baseY + sNodeLabelYOffset;
687
- const nodeLabel = nodeG.append("text").attr("x", x).attr("y", labelY).attr("text-anchor", rotateLabels ? "end" : "middle").attr("fill", textColor).attr("font-size", `${sNodeLabelFont}px`).text(node);
691
+ const nodeLabel = nodeG.append("text").attr("x", x).attr("y", labelY).attr("text-anchor", rotateLabels ? "end" : "middle").attr("fill", textColor).attr("font-size", sNodeLabelFont).text(node);
688
692
  if (rotateLabels) {
689
693
  nodeLabel.attr("transform", `rotate(-45 ${x} ${labelY})`);
690
694
  }
@@ -795,7 +799,7 @@ function renderWordCloud(container, parsed, palette, _isDark, onClickItem, expor
795
799
  );
796
800
  const sized = words.map((w) => ({ ...w, size: fontSize(w.weight) }));
797
801
  const draw = (layoutWords) => {
798
- g.selectAll("text").data(layoutWords).join("text").style("font-size", (d) => `${d.size}px`).style("font-family", FONT_FAMILY).style("font-weight", "600").style("fill", (_d, i) => colors[i % colors.length]).style(
802
+ g.selectAll("text").data(layoutWords).join("text").style("font-size", (d) => `${d.size}px`).style("font-family", FONT_FAMILY).style("font-weight", "bold").style("fill", (_d, i) => colors[i % colors.length]).style(
799
803
  "cursor",
800
804
  (d) => onClickItem && d.lineNumber ? "pointer" : "default"
801
805
  ).attr("text-anchor", "middle").attr("transform", (d) => `translate(${d.x},${d.y}) rotate(${d.rotate})`).attr("data-line-number", (d) => {
@@ -850,7 +854,7 @@ function renderWordCloudAsync(container, parsed, palette, _isDark, exportDims) {
850
854
  );
851
855
  const sized = words.map((w) => ({ ...w, size: fontSize(w.weight) }));
852
856
  const draw = (layoutWords) => {
853
- g.selectAll("text").data(layoutWords).join("text").style("font-size", (d) => `${d.size}px`).style("font-family", FONT_FAMILY).style("font-weight", "600").style("fill", (_d, i) => colors[i % colors.length]).attr("text-anchor", "middle").attr(
857
+ g.selectAll("text").data(layoutWords).join("text").style("font-size", (d) => `${d.size}px`).style("font-family", FONT_FAMILY).style("font-weight", "bold").style("fill", (_d, i) => colors[i % colors.length]).attr("text-anchor", "middle").attr(
854
858
  "transform",
855
859
  (d) => `translate(${d.x},${d.y}) rotate(${d.rotate})`
856
860
  ).text((d) => d.text);
@@ -1215,7 +1219,7 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
1215
1219
  const labelG = labelGroup.append("g").style("cursor", "default").on("mouseenter", () => showRegionOverlay([i])).on("mouseleave", () => hideAllOverlays());
1216
1220
  registerLabel(setKey, labelG);
1217
1221
  if (fitsInside) {
1218
- labelG.append("text").attr("x", centroid.x).attr("y", centroid.y).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", `${Math.round(fitFont)}px`).attr("font-weight", "bold").text(text);
1222
+ labelG.append("text").attr("x", centroid.x).attr("y", centroid.y).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", Math.round(fitFont)).attr("font-weight", "bold").text(text);
1219
1223
  setLabelBBoxes[i] = {
1220
1224
  x: centroid.x - estTextW / 2,
1221
1225
  y: centroid.y - fitFont / 2,
@@ -1251,7 +1255,7 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
1251
1255
  sSetLabelFont,
1252
1256
  Math.min(height - 4, textY)
1253
1257
  );
1254
- labelG.append("text").attr("x", textX).attr("y", renderedTextY).attr("text-anchor", textAnchor).attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", `${sSetLabelFont}px`).attr("font-weight", "bold").text(text);
1258
+ labelG.append("text").attr("x", textX).attr("y", renderedTextY).attr("text-anchor", textAnchor).attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", sSetLabelFont).attr("font-weight", "bold").text(text);
1255
1259
  const externalEstW = measureText(text, sSetLabelFont, { bold: true });
1256
1260
  setLabelBBoxes[i] = {
1257
1261
  x: isRight ? textX : textX - externalEstW,
@@ -1468,7 +1472,7 @@ function renderVenn(container, parsed, palette, _isDark, onClickItem, exportDims
1468
1472
  for (const seg of segments) {
1469
1473
  ovLabelG.append("line").attr("x1", seg.x1).attr("y1", seg.y1).attr("x2", seg.x2).attr("y2", seg.y2).attr("stroke", overlapColor).attr("stroke-width", ctx.structural(1.25)).attr("opacity", 0.85);
1470
1474
  }
1471
- const textEl = ovLabelG.append("text").attr("text-anchor", textAnchor).attr("dominant-baseline", baseline).attr("fill", overlapColor).attr("font-size", `${OVERLAP_FONT}px`).attr("font-weight", "600");
1475
+ const textEl = ovLabelG.append("text").attr("text-anchor", textAnchor).attr("dominant-baseline", baseline).attr("fill", overlapColor).attr("font-size", OVERLAP_FONT).attr("font-weight", "bold");
1472
1476
  lines.forEach((line2, i) => {
1473
1477
  const tspan = textEl.append("tspan").attr("x", textX);
1474
1478
  if (i === 0) tspan.attr("y", startY);
@@ -1637,7 +1641,7 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1637
1641
  }
1638
1642
  ];
1639
1643
  const quadrantRects = chartG.selectAll("rect.quadrant").data(quadrantDefs).enter().append("rect").attr("class", "quadrant").attr("x", (d) => d.x).attr("y", (d) => d.y).attr("width", (d) => d.w).attr("height", (d) => d.h).attr("fill", (d) => getQuadrantFill(d.label, d.colorIdx)).attr("stroke", (d) => getQuadrantColor(d.label, d.colorIdx)).attr("stroke-width", ctx.structural(2));
1640
- const shadowColor = "rgba(0,0,0,0.4)";
1644
+ const shadowColor = isDark ? "rgba(0,0,0,0.55)" : "rgba(0,0,0,0.4)";
1641
1645
  const quadrantLabelColor = mix(textColor, bg, 35);
1642
1646
  const LABEL_MAX_FONT = ctx.text(48);
1643
1647
  const LABEL_MIN_FONT = ctx.text(14);
@@ -1686,7 +1690,7 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1686
1690
  const renderWatermarkOriginal = (textEl, d) => {
1687
1691
  const layout = labelLayouts.get(d.label.text);
1688
1692
  const el = d3Selection3.select(textEl);
1689
- el.text(null).attr("font-size", `${layout.fontSize}px`).attr("font-weight", "700");
1693
+ el.text(null).attr("font-size", layout.fontSize).attr("font-weight", "bold");
1690
1694
  if (layout.lines.length === 1) {
1691
1695
  el.text(layout.lines[0]);
1692
1696
  } else {
@@ -1720,14 +1724,14 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1720
1724
  const sAxisPad = ctx.aesthetic(20);
1721
1725
  const sAxisX = ctx.aesthetic(22);
1722
1726
  if (quadrantXAxis) {
1723
- const xLowLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", margin.left + chartWidth / 4).attr("y", height - sAxisPad).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sAxisFont}px`).attr(
1727
+ const xLowLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", margin.left + chartWidth / 4).attr("y", height - sAxisPad).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sAxisFont).attr(
1724
1728
  "data-line-number",
1725
1729
  quadrantXAxisLineNumber ? String(quadrantXAxisLineNumber) : null
1726
1730
  ).style(
1727
1731
  "cursor",
1728
1732
  onClickItem && quadrantXAxisLineNumber ? "pointer" : "default"
1729
1733
  ).text(quadrantXAxis[0]);
1730
- const xHighLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", margin.left + chartWidth * 3 / 4).attr("y", height - sAxisPad).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sAxisFont}px`).attr(
1734
+ const xHighLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", margin.left + chartWidth * 3 / 4).attr("y", height - sAxisPad).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sAxisFont).attr(
1731
1735
  "data-line-number",
1732
1736
  quadrantXAxisLineNumber ? String(quadrantXAxisLineNumber) : null
1733
1737
  ).style(
@@ -1747,14 +1751,14 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1747
1751
  if (quadrantYAxis) {
1748
1752
  const yMidBottom = margin.top + chartHeight * 3 / 4;
1749
1753
  const yMidTop = margin.top + chartHeight / 4;
1750
- const yLowLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", sAxisX).attr("y", yMidBottom).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sAxisFont}px`).attr("transform", `rotate(-90, ${sAxisX}, ${yMidBottom})`).attr(
1754
+ const yLowLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", sAxisX).attr("y", yMidBottom).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sAxisFont).attr("transform", `rotate(-90, ${sAxisX}, ${yMidBottom})`).attr(
1751
1755
  "data-line-number",
1752
1756
  quadrantYAxisLineNumber ? String(quadrantYAxisLineNumber) : null
1753
1757
  ).style(
1754
1758
  "cursor",
1755
1759
  onClickItem && quadrantYAxisLineNumber ? "pointer" : "default"
1756
1760
  ).text(quadrantYAxis[0]);
1757
- const yHighLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", sAxisX).attr("y", yMidTop).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sAxisFont}px`).attr("transform", `rotate(-90, ${sAxisX}, ${yMidTop})`).attr(
1761
+ const yHighLabel = svg.append("text").attr("class", "quadrant-axis-label").attr("x", sAxisX).attr("y", yMidTop).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", sAxisFont).attr("transform", `rotate(-90, ${sAxisX}, ${yMidTop})`).attr(
1758
1762
  "data-line-number",
1759
1763
  quadrantYAxisLineNumber ? String(quadrantYAxisLineNumber) : null
1760
1764
  ).style(
@@ -1820,10 +1824,10 @@ function renderQuadrant(container, parsed, palette, isDark, onClickItem, exportD
1820
1824
  if (placed.connectorLine) {
1821
1825
  pointG.append("line").attr("x1", placed.connectorLine.x1).attr("y1", placed.connectorLine.y1).attr("x2", placed.connectorLine.x2).attr("y2", placed.connectorLine.y2).attr("stroke", pointColor).attr("stroke-width", 1).attr("opacity", 0.5);
1822
1826
  }
1823
- pointG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", POINT_RADIUS).attr("fill", parsed.fillMode === "outline" ? bg : "#ffffff").attr("stroke", pointColor).attr("stroke-width", ctx.structural(2));
1824
- const labelText = pointG.append("text").attr("x", placed.x).attr("y", placed.y).attr("text-anchor", placed.anchor).attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", `${POINT_LABEL_FONT_SIZE}px`).attr("font-weight", "700").style("text-shadow", `0 1px 2px ${shadowColor}`).style("transition", "y 120ms ease-out");
1827
+ pointG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", POINT_RADIUS).attr("fill", bg).attr("stroke", pointColor).attr("stroke-width", ctx.structural(2));
1828
+ const labelText = pointG.append("text").attr("x", placed.x).attr("y", placed.y).attr("text-anchor", placed.anchor).attr("dominant-baseline", "central").attr("fill", textColor).attr("font-size", POINT_LABEL_FONT_SIZE).attr("font-weight", "bold").style("text-shadow", `0 1px 2px ${shadowColor}`).style("transition", "y 120ms ease-out");
1825
1829
  labelText.append("tspan").text(point.label);
1826
- const coordsTspan = labelText.append("tspan").attr("class", "point-coords").attr("x", placed.x).attr("dy", `${POINT_LABEL_FONT_SIZE}px`).attr("font-size", `${ctx.text(10)}px`).attr("font-weight", "500").attr("opacity", 0).text(`${point.x.toFixed(2)}, ${point.y.toFixed(2)}`);
1830
+ const coordsTspan = labelText.append("tspan").attr("class", "point-coords").attr("x", placed.x).attr("dy", `${POINT_LABEL_FONT_SIZE}px`).attr("font-size", ctx.text(10)).attr("font-weight", "normal").attr("opacity", 0).text(`${point.x.toFixed(2)}, ${point.y.toFixed(2)}`);
1827
1831
  const COORDS_LINE_H = ctx.structural(14);
1828
1832
  const bumpDy = placed.y < cy ? -COORDS_LINE_H : COORDS_LINE_H;
1829
1833
  pointG.style("cursor", onClickItem ? "pointer" : "default").on("mouseenter", () => {
@@ -1947,15 +1951,18 @@ function resolveArcChordOverride(content, detectedType, palette) {
1947
1951
  }
1948
1952
  async function renderForExport(content, theme, palette, viewState, options) {
1949
1953
  const exportMode = options?.exportMode ?? false;
1950
- const { parseDgmoChartType } = await import("./dgmo-router-A3LIHT6H.js");
1954
+ const { parseDgmoChartType } = await import("./dgmo-router-XZNCLYTV.js");
1951
1955
  const detectedTypeRaw = parseDgmoChartType(content);
1952
1956
  const override = resolveArcChordOverride(content, detectedTypeRaw, palette);
1953
1957
  const renderContent = override?.content ?? content;
1954
1958
  const detectedType = override?.type ?? detectedTypeRaw;
1955
1959
  if (detectedType !== null) {
1956
- const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-SQEVMIAM.js");
1960
+ const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-KEQ7XVSM.js");
1957
1961
  if (supportsD3DataChart(detectedType)) {
1958
- return renderDataChartD32(renderContent, theme, palette);
1962
+ return renderDataChartD32(renderContent, theme, palette, {
1963
+ ...options?.width !== void 0 && { width: options.width },
1964
+ ...options?.height !== void 0 && { height: options.height }
1965
+ });
1959
1966
  }
1960
1967
  }
1961
1968
  const ctx = {
@@ -1966,6 +1973,12 @@ async function renderForExport(content, theme, palette, viewState, options) {
1966
1973
  options,
1967
1974
  exportMode,
1968
1975
  isDark: theme === "dark",
1976
+ // The resolved canvas, and the raw request beside it. A chart whose own
1977
+ // natural size is not EXPORT_WIDTH (tech-radar) needs to tell "the caller
1978
+ // asked for 1200" apart from "nobody asked", which the resolved value
1979
+ // cannot express.
1980
+ requestedWidth: options?.width && options.width > 0 ? Math.round(options.width) : void 0,
1981
+ requestedHeight: options?.height && options.height > 0 ? Math.round(options.height) : void 0,
1969
1982
  width: options?.width && options.width > 0 ? Math.round(options.width) : EXPORT_WIDTH,
1970
1983
  height: options?.height && options.height > 0 ? Math.round(options.height) : EXPORT_HEIGHT
1971
1984
  };
@@ -1977,8 +1990,8 @@ function ctxTagOverride(ctx) {
1977
1990
  }
1978
1991
  async function exportEventLine(ctx) {
1979
1992
  const { content, theme, palette } = ctx;
1980
- const { parseEventLine } = await import("./parser-PR3OR3LO.js");
1981
- const { renderEventLineForExport } = await import("./renderer-MUW4G2N6.js");
1993
+ const { parseEventLine } = await import("./parser-6JNJHQAG.js");
1994
+ const { renderEventLineForExport } = await import("./renderer-J7J3OVLQ.js");
1982
1995
  const effectivePalette = await resolveExportPalette(theme, palette);
1983
1996
  const parsed = parseEventLine(content, effectivePalette);
1984
1997
  if (parsed.error || parsed.events.length === 0) return "";
@@ -1996,8 +2009,8 @@ async function exportEventLine(ctx) {
1996
2009
  }
1997
2010
  async function exportBody(ctx) {
1998
2011
  const { content, theme, palette } = ctx;
1999
- const { parseBody } = await import("./parser-WWRRG2DV.js");
2000
- const { renderBodyForExport } = await import("./renderer-BUEFD2IF.js");
2012
+ const { parseBody } = await import("./parser-DFBQ2RID.js");
2013
+ const { renderBodyForExport } = await import("./renderer-Y74Y54C3.js");
2001
2014
  const effectivePalette = await resolveExportPalette(theme, palette);
2002
2015
  const parsed = parseBody(content, effectivePalette);
2003
2016
  if (parsed.error) return "";
@@ -2015,7 +2028,7 @@ async function exportBody(ctx) {
2015
2028
  async function exportVersionControl(ctx) {
2016
2029
  const { content, theme, palette } = ctx;
2017
2030
  const { parseVersionControl } = await import("./parser-4DLU4SNG.js");
2018
- const { renderVersionControlForExport } = await import("./renderer-QAMOXOZ2.js");
2031
+ const { renderVersionControlForExport } = await import("./renderer-JC7MK7SD.js");
2019
2032
  const effectivePalette = await resolveExportPalette(theme, palette);
2020
2033
  const parsed = parseVersionControl(content, effectivePalette);
2021
2034
  if (parsed.error || parsed.nodes.length === 0) return "";
@@ -2039,10 +2052,10 @@ function unionHiddenAttributes(hideOption, ha) {
2039
2052
  }
2040
2053
  async function exportOrg(ctx) {
2041
2054
  const { content, theme, palette, viewState, exportMode } = ctx;
2042
- const { parseOrg, findOrgNodeIdByName } = await import("./parser-QOIZGW7I.js");
2043
- const { layoutOrg } = await import("./layout-5ILNODTP.js");
2055
+ const { parseOrg, findOrgNodeIdByName } = await import("./parser-GFGU5ZLQ.js");
2056
+ const { layoutOrg } = await import("./layout-XK6ZD7BU.js");
2044
2057
  const { collapseOrgTree, focusOrgTree, unionCollapsedOrgNodes } = await import("./collapse-JRGPUE67.js");
2045
- const { renderOrg, ancestorTrailReserve } = await import("./renderer-FGGDZZFQ.js");
2058
+ const { renderOrg, ancestorTrailReserve } = await import("./renderer-OR5QHR7X.js");
2046
2059
  const isDark = ctx.isDark;
2047
2060
  const effectivePalette = await resolveExportPalette(theme, palette);
2048
2061
  const orgParsed = parseOrg(content, effectivePalette);
@@ -2103,10 +2116,10 @@ async function exportOrg(ctx) {
2103
2116
  }
2104
2117
  async function exportSitemap(ctx) {
2105
2118
  const { content, theme, palette, viewState, exportMode } = ctx;
2106
- const { parseSitemap } = await import("./parser-2GMHFSTS.js");
2107
- const { layoutSitemap } = await import("./layout-VUZ3MLOI.js");
2119
+ const { parseSitemap } = await import("./parser-EPKXJ2RL.js");
2120
+ const { layoutSitemap } = await import("./layout-YY6VH5XH.js");
2108
2121
  const { collapseSitemapTree } = await import("./collapse-ZWUFFCK2.js");
2109
- const { renderSitemap } = await import("./renderer-JMJ7Q5OC.js");
2122
+ const { renderSitemap } = await import("./renderer-JRITSZY3.js");
2110
2123
  const isDark = ctx.isDark;
2111
2124
  const effectivePalette = await resolveExportPalette(theme, palette);
2112
2125
  const sitemapParsed = parseSitemap(content, effectivePalette);
@@ -2134,7 +2147,7 @@ async function exportSitemap(ctx) {
2134
2147
  const {
2135
2148
  LEGEND_HEIGHT: SITEMAP_LEGEND_HEIGHT,
2136
2149
  LEGEND_GROUP_GAP: SITEMAP_LEGEND_GROUP_GAP
2137
- } = await import("./legend-constants-PLN2YHGM.js");
2150
+ } = await import("./legend-constants-SB4PLHV5.js");
2138
2151
  const suppressedLegendBand = sitemapLayout.legend.length > 0 && effectiveParsed.options["no-legend"] === "on" ? SITEMAP_LEGEND_HEIGHT + SITEMAP_LEGEND_GROUP_GAP : 0;
2139
2152
  const exportWidth = sitemapLayout.width + PADDING * 2;
2140
2153
  const exportHeight = sitemapLayout.height + PADDING * 2 + titleOffset - suppressedLegendBand;
@@ -2155,8 +2168,8 @@ async function exportSitemap(ctx) {
2155
2168
  }
2156
2169
  async function exportKanban(ctx) {
2157
2170
  const { content, theme, palette, viewState, exportMode } = ctx;
2158
- const { parseKanban } = await import("./parser-6FUESG4N.js");
2159
- const { renderKanban } = await import("./renderer-UUP6OX6F.js");
2171
+ const { parseKanban } = await import("./parser-PD4TP6NM.js");
2172
+ const { renderKanban } = await import("./renderer-CXU2MGSC.js");
2160
2173
  const effectivePalette = await resolveExportPalette(theme, palette);
2161
2174
  const kanbanParsed = parseKanban(content, effectivePalette);
2162
2175
  if (kanbanParsed.error || kanbanParsed.columns.length === 0) return "";
@@ -2188,8 +2201,8 @@ async function exportKanban(ctx) {
2188
2201
  async function exportClass(ctx) {
2189
2202
  const { content, theme, palette, exportMode } = ctx;
2190
2203
  const { parseClassDiagram } = await import("./parser-ZYAFHXKQ.js");
2191
- const { layoutClassDiagram } = await import("./layout-ROORJQ4X.js");
2192
- const { renderClassDiagram } = await import("./renderer-F6WSR7UM.js");
2204
+ const { layoutClassDiagram } = await import("./layout-TCFXB5XH.js");
2205
+ const { renderClassDiagram } = await import("./renderer-E2JTYQY5.js");
2193
2206
  const effectivePalette = await resolveExportPalette(theme, palette);
2194
2207
  const classParsed = parseClassDiagram(content, effectivePalette);
2195
2208
  if (classParsed.error || classParsed.classes.length === 0) return "";
@@ -2214,9 +2227,9 @@ async function exportClass(ctx) {
2214
2227
  }
2215
2228
  async function exportEr(ctx) {
2216
2229
  const { content, theme, palette, viewState, exportMode } = ctx;
2217
- const { parseERDiagram } = await import("./parser-EQ4I3TSH.js");
2218
- const { layoutERDiagram } = await import("./layout-KQUSB45X.js");
2219
- const { renderERDiagram } = await import("./renderer-LBNVKVO3.js");
2230
+ const { parseERDiagram } = await import("./parser-IK3FXZ7D.js");
2231
+ const { layoutERDiagram } = await import("./layout-S53FSD6R.js");
2232
+ const { renderERDiagram } = await import("./renderer-NA3DTAWF.js");
2220
2233
  const effectivePalette = await resolveExportPalette(theme, palette);
2221
2234
  const erParsed = parseERDiagram(content, effectivePalette);
2222
2235
  if (erParsed.error || erParsed.tables.length === 0) return "";
@@ -2248,14 +2261,14 @@ async function exportEr(ctx) {
2248
2261
  }
2249
2262
  async function exportSketch(ctx) {
2250
2263
  const { content, theme, viewState, exportMode } = ctx;
2251
- const { parseSketch } = await import("./parser-QYAIFXLP.js");
2264
+ const { parseSketch } = await import("./parser-HSPODF4H.js");
2252
2265
  const effectivePalette = await resolveExportPalette(theme, ctx.palette);
2253
2266
  const parsed = parseSketch(content, effectivePalette);
2254
2267
  if (parsed.error || parsed.nodes.length === 0 && parsed.boxes.length === 0) {
2255
2268
  return "";
2256
2269
  }
2257
- const { layoutSketch } = await import("./layout-LAS67TK3.js");
2258
- const { renderSketchForExport } = await import("./renderer-DKW273R7.js");
2270
+ const { layoutSketch } = await import("./layout-5DZ2LI2R.js");
2271
+ const { renderSketchForExport } = await import("./renderer-ZUAXGHFC.js");
2259
2272
  const collapsedBoxes = viewState?.cg ? new Set(viewState.cg) : void 0;
2260
2273
  const skLayout = layoutSketch(parsed, {
2261
2274
  ...collapsedBoxes !== void 0 && { collapsedBoxes }
@@ -2282,7 +2295,7 @@ async function exportSketch(ctx) {
2282
2295
  }
2283
2296
  async function exportBoxesAndLines(ctx) {
2284
2297
  const { content, theme, palette, viewState, exportMode } = ctx;
2285
- const { parseBoxesAndLines } = await import("./parser-TA5TYZNL.js");
2298
+ const { parseBoxesAndLines } = await import("./parser-RUJNN5PK.js");
2286
2299
  const effectivePalette = await resolveExportPalette(theme, palette);
2287
2300
  const blParsed = parseBoxesAndLines(content, effectivePalette);
2288
2301
  if (blParsed.error || blParsed.nodes.length === 0) return "";
@@ -2293,8 +2306,8 @@ async function exportBoxesAndLines(ctx) {
2293
2306
  blHiddenTagValues.set(k, new Set(v));
2294
2307
  }
2295
2308
  }
2296
- const { renderBoxesAndLinesForExport } = await import("./renderer-PR3KLNST.js");
2297
- const { layoutBoxesAndLines } = await import("./layout-B5GQVXXY.js");
2309
+ const { renderBoxesAndLinesForExport } = await import("./renderer-LRL4SU43.js");
2310
+ const { layoutBoxesAndLines } = await import("./layout-YVY72CIG.js");
2298
2311
  const blLayout = await layoutBoxesAndLines(blParsed);
2299
2312
  const PADDING = 20;
2300
2313
  const titleOffset = blParsed.title ? 40 : 0;
@@ -2323,9 +2336,9 @@ async function exportBoxesAndLines(ctx) {
2323
2336
  }
2324
2337
  async function exportSwimlane(ctx) {
2325
2338
  const { content, theme, palette } = ctx;
2326
- const { parseSwimlane } = await import("./parser-E3OHNNTH.js");
2339
+ const { parseSwimlane } = await import("./parser-R2JHC7LQ.js");
2327
2340
  const { layoutSwimlane } = await import("./layout-OHAIIXBC.js");
2328
- const { renderSwimlaneForExport } = await import("./renderer-4PNVGHVA.js");
2341
+ const { renderSwimlaneForExport } = await import("./renderer-CRRW7LTW.js");
2329
2342
  const effectivePalette = await resolveExportPalette(theme, palette);
2330
2343
  const swimParsed = parseSwimlane(content, effectivePalette);
2331
2344
  if (swimParsed.error || swimParsed.nodes.length === 0) return "";
@@ -2355,9 +2368,9 @@ async function exportSwimlane(ctx) {
2355
2368
  }
2356
2369
  async function exportFamily(ctx) {
2357
2370
  const { content, theme, palette } = ctx;
2358
- const { parseFamily } = await import("./parser-3AOMUX5D.js");
2359
- const { layoutFamily } = await import("./layout-6SKHNQYO.js");
2360
- const { renderFamilyForExport } = await import("./renderer-PKRKLOYR.js");
2371
+ const { parseFamily } = await import("./parser-Z5UK6ADF.js");
2372
+ const { layoutFamily } = await import("./layout-CHWKNE3O.js");
2373
+ const { renderFamilyForExport } = await import("./renderer-WYNLGZRF.js");
2361
2374
  const effectivePalette = await resolveExportPalette(theme, palette);
2362
2375
  const parsed = parseFamily(content, effectivePalette);
2363
2376
  if (parsed.error || parsed.persons.size === 0) return "";
@@ -2387,10 +2400,10 @@ async function exportFamily(ctx) {
2387
2400
  }
2388
2401
  async function exportMindmap(ctx) {
2389
2402
  const { content, theme, palette, viewState, exportMode } = ctx;
2390
- const { parseMindmap } = await import("./parser-LV7PQBUG.js");
2391
- const { layoutMindmap } = await import("./layout-RV2T2YTT.js");
2403
+ const { parseMindmap } = await import("./parser-LJWPKRDM.js");
2404
+ const { layoutMindmap } = await import("./layout-ZDN252GR.js");
2392
2405
  const { collapseMindmapTree } = await import("./collapse-SLINJQW6.js");
2393
- const { renderMindmap } = await import("./renderer-GJDVPXI3.js");
2406
+ const { renderMindmap } = await import("./renderer-SBVWHQVW.js");
2394
2407
  const isDark = ctx.isDark;
2395
2408
  const effectivePalette = await resolveExportPalette(theme, palette);
2396
2409
  const mmParsed = parseMindmap(content, effectivePalette);
@@ -2440,9 +2453,9 @@ async function exportMindmap(ctx) {
2440
2453
  }
2441
2454
  async function exportWireframe(ctx) {
2442
2455
  const { content, theme, palette } = ctx;
2443
- const { parseWireframe } = await import("./parser-WMJEPZDC.js");
2456
+ const { parseWireframe } = await import("./parser-BOPXE6RP.js");
2444
2457
  const { layoutWireframe } = await import("./layout-IN53LAE6.js");
2445
- const { renderWireframe } = await import("./renderer-FUJNSC5X.js");
2458
+ const { renderWireframe } = await import("./renderer-W5UG2HWT.js");
2446
2459
  const effectivePalette = await resolveExportPalette(theme, palette);
2447
2460
  const wireframeParsed = parseWireframe(content);
2448
2461
  if (wireframeParsed.error || wireframeParsed.roots.length === 0 && wireframeParsed.modals.length === 0)
@@ -2465,14 +2478,14 @@ async function exportWireframe(ctx) {
2465
2478
  }
2466
2479
  async function exportC4(ctx) {
2467
2480
  const { content, theme, palette, viewState, exportMode } = ctx;
2468
- const { parseC4 } = await import("./parser-YWQCC33R.js");
2481
+ const { parseC4 } = await import("./parser-ZO5YT5SV.js");
2469
2482
  const {
2470
2483
  layoutC4Context,
2471
2484
  layoutC4Containers,
2472
2485
  layoutC4Components,
2473
2486
  layoutC4Deployment
2474
- } = await import("./layout-ZAGUFT2G.js");
2475
- const { renderC4Context, renderC4Containers } = await import("./renderer-GF6S5ZX6.js");
2487
+ } = await import("./layout-6I6LSBUR.js");
2488
+ const { renderC4Context, renderC4Containers } = await import("./renderer-FFGFTIT4.js");
2476
2489
  const effectivePalette = await resolveExportPalette(theme, palette);
2477
2490
  const c4Parsed = parseC4(content, effectivePalette);
2478
2491
  if (c4Parsed.error || c4Parsed.elements.length === 0) return "";
@@ -2507,8 +2520,8 @@ async function exportC4(ctx) {
2507
2520
  async function exportFlowchart(ctx) {
2508
2521
  const { content, theme, palette } = ctx;
2509
2522
  const { parseFlowchart } = await import("./flowchart-parser-NVBP3C5D.js");
2510
- const { layoutGraph } = await import("./layout-2OJ25STS.js");
2511
- const { renderFlowchart } = await import("./flowchart-renderer-QYGQ64BM.js");
2523
+ const { layoutGraph } = await import("./layout-C2SCZV5M.js");
2524
+ const { renderFlowchart } = await import("./flowchart-renderer-FDJ4QQXE.js");
2512
2525
  const effectivePalette = await resolveExportPalette(theme, palette);
2513
2526
  const fcParsed = parseFlowchart(content, effectivePalette);
2514
2527
  if (fcParsed.error || fcParsed.nodes.length === 0) return "";
@@ -2527,10 +2540,10 @@ async function exportFlowchart(ctx) {
2527
2540
  }
2528
2541
  async function exportInfra(ctx) {
2529
2542
  const { content, theme, palette, viewState } = ctx;
2530
- const { parseInfra } = await import("./parser-WVE6SKB7.js");
2543
+ const { parseInfra } = await import("./parser-3UNIPVNY.js");
2531
2544
  const { computeInfra } = await import("./compute-JAP5E2E4.js");
2532
2545
  const { layoutInfra } = await import("./layout-4LNMXLVK.js");
2533
- const { renderInfra, computeInfraLegendGroups } = await import("./renderer-E6NHTVN6.js");
2546
+ const { renderInfra, computeInfraLegendGroups } = await import("./renderer-KD5X4RIS.js");
2534
2547
  const effectivePalette = await resolveExportPalette(theme, palette);
2535
2548
  const infraParsed = parseInfra(content);
2536
2549
  if (infraParsed.error || infraParsed.nodes.length === 0) return "";
@@ -2577,10 +2590,10 @@ async function exportInfra(ctx) {
2577
2590
  }
2578
2591
  async function exportPert(ctx) {
2579
2592
  const { content, theme, palette, viewState } = ctx;
2580
- const { parsePert } = await import("./parser-ZT3PU2HT.js");
2593
+ const { parsePert } = await import("./parser-62VNEQRT.js");
2581
2594
  const { analyzePert } = await import("./analyzer-QTDQEMS5.js");
2582
2595
  const { layoutPert } = await import("./layout-SGYR6HBX.js");
2583
- const { renderPert, measurePertAnalysisBlock } = await import("./renderer-KMOGGMM7.js");
2596
+ const { renderPert, measurePertAnalysisBlock } = await import("./renderer-TLOSBJKW.js");
2584
2597
  const effectivePalette = await resolveExportPalette(theme, palette);
2585
2598
  const pertParsed = parsePert(content, { palette: effectivePalette });
2586
2599
  if (pertParsed.error || pertParsed.activities.length === 0) return "";
@@ -2623,15 +2636,15 @@ async function exportPert(ctx) {
2623
2636
  }
2624
2637
  async function exportGantt(ctx) {
2625
2638
  const { content, theme, palette, viewState, exportMode } = ctx;
2626
- const { parseGantt } = await import("./parser-5XFGK5C5.js");
2639
+ const { parseGantt } = await import("./parser-4IHIVDJD.js");
2627
2640
  const { calculateSchedule } = await import("./calculator-CVQ54JNE.js");
2628
- const { renderGantt } = await import("./renderer-F24V3RD3.js");
2641
+ const { renderGantt } = await import("./renderer-IVAM7Z3Y.js");
2629
2642
  const effectivePalette = await resolveExportPalette(theme, palette);
2630
2643
  const ganttParsed = parseGantt(content, effectivePalette);
2631
2644
  const resolved = calculateSchedule(ganttParsed);
2632
2645
  if (resolved.tasks.length === 0) return "";
2633
- const EXPORT_W = 1200;
2634
- const EXPORT_H = 800;
2646
+ const EXPORT_W = ctx.width;
2647
+ const EXPORT_H = ctx.height;
2635
2648
  const container = createExportContainer(EXPORT_W, EXPORT_H);
2636
2649
  const sourceCollapsedGroups = resolved.groups.filter((g) => g.collapsed).map((g) => g.name);
2637
2650
  const ganttCollapsedGroups = viewState?.cg || sourceCollapsedGroups.length > 0 ? /* @__PURE__ */ new Set([...sourceCollapsedGroups, ...viewState?.cg ?? []]) : void 0;
@@ -2666,9 +2679,9 @@ async function exportGantt(ctx) {
2666
2679
  }
2667
2680
  async function exportState(ctx) {
2668
2681
  const { content, theme, palette, viewState } = ctx;
2669
- const { parseState } = await import("./state-parser-TPA67IXM.js");
2670
- const { layoutGraph } = await import("./layout-2OJ25STS.js");
2671
- const { renderState } = await import("./state-renderer-UIE3AQM6.js");
2682
+ const { parseState } = await import("./state-parser-CT5HQQ7E.js");
2683
+ const { layoutGraph } = await import("./layout-C2SCZV5M.js");
2684
+ const { renderState } = await import("./state-renderer-7O3QGNJ5.js");
2672
2685
  const { collapseStateGroups } = await import("./state-collapse-HCGD6IVJ.js");
2673
2686
  const effectivePalette = await resolveExportPalette(theme, palette);
2674
2687
  const stateParsed = parseState(content, effectivePalette);
@@ -2706,12 +2719,12 @@ async function exportState(ctx) {
2706
2719
  async function exportTechRadar(ctx) {
2707
2720
  const { content, theme, palette, viewState, exportMode } = ctx;
2708
2721
  const { parseTechRadar } = await import("./parser-3KQONLXZ.js");
2709
- const { renderTechRadarForExport } = await import("./renderer-3FB56573.js");
2722
+ const { renderTechRadarForExport } = await import("./renderer-J6HK2KOW.js");
2710
2723
  const effectivePalette = await resolveExportPalette(theme, palette);
2711
2724
  const radarParsed = parseTechRadar(content);
2712
2725
  if (radarParsed.error || radarParsed.quadrants.length === 0) return "";
2713
- const RADAR_EXPORT_W = 1300;
2714
- const RADAR_EXPORT_H = 1500;
2726
+ const RADAR_EXPORT_W = ctx.requestedWidth ?? 1300;
2727
+ const RADAR_EXPORT_H = ctx.requestedHeight ?? 1500;
2715
2728
  const container = createExportContainer(RADAR_EXPORT_W, RADAR_EXPORT_H);
2716
2729
  renderTechRadarForExport(
2717
2730
  container,
@@ -2726,9 +2739,9 @@ async function exportTechRadar(ctx) {
2726
2739
  }
2727
2740
  async function exportJourneyMap(ctx) {
2728
2741
  const { content, theme, palette, exportMode } = ctx;
2729
- const { parseJourneyMap } = await import("./parser-ML3LVNDV.js");
2730
- const { renderJourneyMap } = await import("./renderer-XBL6CLN2.js");
2731
- const { layoutJourneyMap } = await import("./layout-EM4DLMAX.js");
2742
+ const { parseJourneyMap } = await import("./parser-G7E2BURB.js");
2743
+ const { renderJourneyMap } = await import("./renderer-DI66RLAG.js");
2744
+ const { layoutJourneyMap } = await import("./layout-K4KML2DL.js");
2732
2745
  const effectivePalette = await resolveExportPalette(theme, palette);
2733
2746
  const jmParsed = parseJourneyMap(content, effectivePalette);
2734
2747
  if (jmParsed.error || jmParsed.phases.length === 0 && jmParsed.steps.length === 0)
@@ -2749,7 +2762,7 @@ async function exportJourneyMap(ctx) {
2749
2762
  async function exportCycle(ctx) {
2750
2763
  const { content, theme, palette, viewState, exportMode } = ctx;
2751
2764
  const { parseCycle } = await import("./parser-WCFG3DZA.js");
2752
- const { renderCycleForExport } = await import("./renderer-5W3HWIUL.js");
2765
+ const { renderCycleForExport } = await import("./renderer-BF7FYXG3.js");
2753
2766
  const effectivePalette = await resolveExportPalette(theme, palette);
2754
2767
  const cycleParsed = parseCycle(content);
2755
2768
  if (cycleParsed.error || cycleParsed.nodes.length === 0) return "";
@@ -2767,10 +2780,10 @@ async function exportCycle(ctx) {
2767
2780
  }
2768
2781
  async function exportMap(ctx) {
2769
2782
  const { content, theme, palette, options } = ctx;
2770
- const { parseMap } = await import("./parser-GCVSRQPY.js");
2783
+ const { parseMap } = await import("./parser-2BX2EJUB.js");
2771
2784
  const { resolveMap } = await import("./resolver-H5E6V7LJ.js");
2772
- const { renderMapForExport } = await import("./renderer-LE3ZKHNS.js");
2773
- const { mapExportDimensions } = await import("./dimensions-7NYBSZRJ.js");
2785
+ const { renderMapForExport } = await import("./renderer-UDWJRRIC.js");
2786
+ const { mapExportDimensions } = await import("./dimensions-SIZMZ4DC.js");
2774
2787
  const effectivePalette = await resolveExportPalette(theme, palette);
2775
2788
  const mapParsed = parseMap(content, effectivePalette);
2776
2789
  const { data: mapData, reason } = await resolveMapDataSource(
@@ -2804,7 +2817,7 @@ async function exportMap(ctx) {
2804
2817
  async function exportPyramid(ctx) {
2805
2818
  const { content, theme, palette } = ctx;
2806
2819
  const { parsePyramid } = await import("./parser-B2XQNHZM.js");
2807
- const { renderPyramidForExport } = await import("./renderer-4EWGZLJ6.js");
2820
+ const { renderPyramidForExport } = await import("./renderer-AIVALEQR.js");
2808
2821
  const effectivePalette = await resolveExportPalette(theme, palette);
2809
2822
  const pyramidParsed = parsePyramid(content);
2810
2823
  if (pyramidParsed.error || pyramidParsed.layers.length === 0) return "";
@@ -2821,7 +2834,7 @@ async function exportPyramid(ctx) {
2821
2834
  async function exportRing(ctx) {
2822
2835
  const { content, theme, palette } = ctx;
2823
2836
  const { parseRing } = await import("./parser-XVSDFO56.js");
2824
- const { renderRingForExport } = await import("./renderer-ZAJ5353N.js");
2837
+ const { renderRingForExport } = await import("./renderer-FA4BTAOL.js");
2825
2838
  const effectivePalette = await resolveExportPalette(theme, palette);
2826
2839
  const ringParsed = parseRing(content);
2827
2840
  if (ringParsed.error || ringParsed.layers.length === 0) return "";
@@ -2834,14 +2847,14 @@ async function exportRing(ctx) {
2834
2847
  }
2835
2848
  async function exportTreemap(ctx) {
2836
2849
  const { content, theme, palette } = ctx;
2837
- const { parseTreemap } = await import("./parser-RDBXEVI4.js");
2850
+ const { parseTreemap } = await import("./parser-OYWUBQV4.js");
2838
2851
  const effectivePalette = await resolveExportPalette(theme, palette);
2839
2852
  const treemapParsed = parseTreemap(content, effectivePalette);
2840
2853
  if (treemapParsed.error || treemapParsed.roots.length === 0) return "";
2841
2854
  const container = createExportContainer(ctx.width, ctx.height);
2842
2855
  const dims = { width: ctx.width, height: ctx.height };
2843
2856
  if (treemapParsed.options.radial) {
2844
- const { renderTreemapRadialForExport } = await import("./renderer-radial-MZP3SVTZ.js");
2857
+ const { renderTreemapRadialForExport } = await import("./renderer-radial-YVUDGR7C.js");
2845
2858
  renderTreemapRadialForExport(
2846
2859
  container,
2847
2860
  treemapParsed,
@@ -2850,7 +2863,7 @@ async function exportTreemap(ctx) {
2850
2863
  dims
2851
2864
  );
2852
2865
  } else {
2853
- const { renderTreemapForExport } = await import("./renderer-PIEPRK6M.js");
2866
+ const { renderTreemapForExport } = await import("./renderer-AMELXBNW.js");
2854
2867
  renderTreemapForExport(
2855
2868
  container,
2856
2869
  treemapParsed,
@@ -2864,14 +2877,14 @@ async function exportTreemap(ctx) {
2864
2877
  async function exportLiveLink(ctx) {
2865
2878
  const { content, theme, palette } = ctx;
2866
2879
  const { parseLiveLink } = await import("./parser-WQNT7T2P.js");
2867
- const { renderLiveLinkCard } = await import("./renderer-IH45QV6Z.js");
2880
+ const { renderLiveLinkCard } = await import("./renderer-LQN3FXAP.js");
2868
2881
  const effectivePalette = await resolveExportPalette(theme, palette);
2869
2882
  return renderLiveLinkCard(parseLiveLink(content), effectivePalette, theme);
2870
2883
  }
2871
2884
  async function exportBlock(ctx) {
2872
2885
  const { content, theme, palette } = ctx;
2873
- const { parseBlock } = await import("./parser-UTR5WE4O.js");
2874
- const { renderBlockForExport } = await import("./renderer-UYZSP7MF.js");
2886
+ const { parseBlock } = await import("./parser-YWE7GHW6.js");
2887
+ const { renderBlockForExport } = await import("./renderer-5TPUPMZ7.js");
2875
2888
  const effectivePalette = await resolveExportPalette(theme, palette);
2876
2889
  const blockParsed = parseBlock(content, effectivePalette);
2877
2890
  if (blockParsed.error || blockParsed.top.rows.length === 0) return "";
@@ -2885,7 +2898,7 @@ async function exportBlock(ctx) {
2885
2898
  async function exportGoal(ctx) {
2886
2899
  const { content, theme, palette } = ctx;
2887
2900
  const { parseGoal } = await import("./parser-4KFJKLP2.js");
2888
- const { renderGoalForExport } = await import("./renderer-CO5O5VR5.js");
2901
+ const { renderGoalForExport } = await import("./renderer-VHK6UAW2.js");
2889
2902
  const effectivePalette = await resolveExportPalette(theme, palette);
2890
2903
  const parsed = parseGoal(content, effectivePalette);
2891
2904
  if (parsed.error) return "";
@@ -2898,8 +2911,8 @@ async function exportGoal(ctx) {
2898
2911
  }
2899
2912
  async function exportCountdown(ctx) {
2900
2913
  const { content, theme, palette } = ctx;
2901
- const { parseCountdown } = await import("./parser-ZXQZZK6W.js");
2902
- const { renderCountdownForExport } = await import("./renderer-EP4GRCDX.js");
2914
+ const { parseCountdown } = await import("./parser-6ZFQLLVE.js");
2915
+ const { renderCountdownForExport } = await import("./renderer-LGMIAG6N.js");
2903
2916
  const effectivePalette = await resolveExportPalette(theme, palette);
2904
2917
  const parsed = parseCountdown(content, effectivePalette);
2905
2918
  if (parsed.error) return "";
@@ -2913,7 +2926,7 @@ async function exportCountdown(ctx) {
2913
2926
  async function exportClock(ctx) {
2914
2927
  const { content, theme, palette } = ctx;
2915
2928
  const { parseClock } = await import("./parser-F4ZKDGUZ.js");
2916
- const { renderClockForExport } = await import("./renderer-OTHBTGBN.js");
2929
+ const { renderClockForExport } = await import("./renderer-KWNNWCGD.js");
2917
2930
  const effectivePalette = await resolveExportPalette(theme, palette);
2918
2931
  const parsed = parseClock(content, effectivePalette);
2919
2932
  if (parsed.error) return "";
@@ -2926,8 +2939,8 @@ async function exportClock(ctx) {
2926
2939
  }
2927
2940
  async function exportBracket(ctx) {
2928
2941
  const { content, theme, palette } = ctx;
2929
- const { parseBracket } = await import("./parser-CJNP7RKR.js");
2930
- const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-RUHC6D3B.js");
2942
+ const { parseBracket } = await import("./parser-RMZ6YI7H.js");
2943
+ const { renderBracketForExport, bracketExportDimensions } = await import("./renderer-WOOKJOBQ.js");
2931
2944
  const effectivePalette = await resolveExportPalette(theme, palette);
2932
2945
  const parsed = parseBracket(content, effectivePalette);
2933
2946
  if (parsed.error) return "";
@@ -2942,7 +2955,7 @@ async function exportBracket(ctx) {
2942
2955
  async function exportRaci(ctx) {
2943
2956
  const { content, theme, palette } = ctx;
2944
2957
  const { parseRaci } = await import("./parser-H4ZUNLX4.js");
2945
- const { renderRaciForExport } = await import("./renderer-D7N7PPB7.js");
2958
+ const { renderRaciForExport } = await import("./renderer-MBL64AJI.js");
2946
2959
  const effectivePalette = await resolveExportPalette(theme, palette);
2947
2960
  const raciParsed = parseRaci(content, effectivePalette);
2948
2961
  if (raciParsed.error) return "";
@@ -3074,8 +3087,8 @@ async function exportVisualization(ctx) {
3074
3087
  const effectivePalette = await resolveExportPalette(theme, palette);
3075
3088
  const isDark = ctx.isDark;
3076
3089
  const container = createExportContainer(ctx.width, ctx.height);
3077
- const { parseSequenceDgmo } = await import("./parser-L7T7FY3H.js");
3078
- const { renderSequenceDiagram } = await import("./renderer-CGOPX4HW.js");
3090
+ const { parseSequenceDgmo } = await import("./parser-GKZWI5SZ.js");
3091
+ const { renderSequenceDiagram } = await import("./renderer-JHQC5RGJ.js");
3079
3092
  const seqParsed = parseSequenceDgmo(content, effectivePalette);
3080
3093
  if (seqParsed.error || seqParsed.participants.length === 0) return "";
3081
3094
  const collapsedSections = viewState?.cs ? new Set(viewState.cs) : void 0;
@@ -3648,6 +3661,24 @@ function injectHoverStyles(svg, chartType, opts) {
3648
3661
  return `${svg.slice(0, at)}<style>${css}</style>${svg.slice(at)}`;
3649
3662
  }
3650
3663
 
3664
+ // src/utils/root-a11y.ts
3665
+ function applyRootA11y(svg, chartType) {
3666
+ if (!chartType) return svg;
3667
+ const m = svg.match(/<svg\b[^>]*>/);
3668
+ if (!m) return svg;
3669
+ const rootTag = m[0];
3670
+ if (/\brole=/.test(rootTag) || /\baria-label=/.test(rootTag)) return svg;
3671
+ const label = `${chartType.charAt(0).toUpperCase()}${chartType.slice(1)} diagram`;
3672
+ const withA11y = rootTag.replace(
3673
+ /^<svg\b/,
3674
+ `<svg role="img" aria-label="${escapeAttr(label)}"`
3675
+ );
3676
+ return svg.replace(rootTag, withA11y);
3677
+ }
3678
+ function escapeAttr(s) {
3679
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
3680
+ }
3681
+
3651
3682
  // src/render.ts
3652
3683
  var DOM_GLOBALS = [
3653
3684
  "document",
@@ -3739,6 +3770,22 @@ async function render(content, options) {
3739
3770
  );
3740
3771
  })();
3741
3772
  const withLegendInlineWarning = (ds) => legendInlineWarning ? [...ds, legendInlineWarning] : ds;
3773
+ const withCanvasWidthWarning = (ds, svg2) => {
3774
+ const asked = options?.width;
3775
+ if (!asked || asked <= 0) return ds;
3776
+ const vb = /viewBox="[-\d.]+ [-\d.]+ ([\d.]+) /.exec(svg2);
3777
+ const got = vb ? Number(vb[1]) : NaN;
3778
+ if (!Number.isFinite(got) || got <= asked + 1) return ds;
3779
+ return [
3780
+ ...ds,
3781
+ makeDgmoError(
3782
+ 1,
3783
+ `This ${chartType ?? "diagram"} is ${Math.round(got)}px wide \u2014 it sizes itself from its content, so the requested width of ${Math.round(asked)}px was not applied.`,
3784
+ "warning",
3785
+ "W_CANVAS_WIDTH_IGNORED"
3786
+ )
3787
+ ];
3788
+ };
3742
3789
  const viewState = options?.viewState ?? (options?.legendState ? {
3743
3790
  ...options.legendState.activeGroup !== void 0 && {
3744
3791
  tag: options.legendState.activeGroup
@@ -3754,10 +3801,16 @@ async function render(content, options) {
3754
3801
  ...options?.width !== void 0 && { width: options.width },
3755
3802
  ...options?.height !== void 0 && { height: options.height }
3756
3803
  });
3757
- const svg2 = injectHoverStyles(raw, chartType, { bakeHover });
3804
+ const svg2 = applyRootA11y(
3805
+ injectHoverStyles(raw, chartType, { bakeHover }),
3806
+ chartType
3807
+ );
3758
3808
  return {
3759
3809
  svg: svg2,
3760
- diagnostics: withLegendInlineWarning(diagnostics),
3810
+ diagnostics: withCanvasWidthWarning(
3811
+ withLegendInlineWarning(diagnostics),
3812
+ svg2
3813
+ ),
3761
3814
  chartType: chartType ?? void 0
3762
3815
  };
3763
3816
  } finally {
@@ -3788,7 +3841,10 @@ async function render(content, options) {
3788
3841
  }
3789
3842
  }
3790
3843
  );
3791
- svg = injectHoverStyles(svg, chartType, { bakeHover });
3844
+ svg = applyRootA11y(
3845
+ injectHoverStyles(svg, chartType, { bakeHover }),
3846
+ chartType
3847
+ );
3792
3848
  } finally {
3793
3849
  releaseDom();
3794
3850
  }
@@ -3797,7 +3853,10 @@ async function render(content, options) {
3797
3853
  }
3798
3854
  return {
3799
3855
  svg,
3800
- diagnostics: withLegendInlineWarning(diagnostics),
3856
+ diagnostics: withCanvasWidthWarning(
3857
+ withLegendInlineWarning(diagnostics),
3858
+ svg
3859
+ ),
3801
3860
  chartType: chartType ?? void 0
3802
3861
  };
3803
3862
  }
@@ -3812,4 +3871,4 @@ export {
3812
3871
  renderForExport,
3813
3872
  render
3814
3873
  };
3815
- //# sourceMappingURL=chunk-4CRLM3IT.js.map
3874
+ //# sourceMappingURL=chunk-IE47TYZT.js.map