@diagrammo/dgmo 0.48.2 → 0.49.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 (216) hide show
  1. package/.cursorrules +8 -3
  2. package/.github/copilot-instructions.md +8 -3
  3. package/.windsurfrules +8 -3
  4. package/SKILL.md +8 -3
  5. package/dist/advanced.d.ts +444 -1
  6. package/dist/advanced.js +208 -146
  7. package/dist/auto.css +63 -0
  8. package/dist/auto.js +202 -102
  9. package/dist/auto.mjs +6849 -824
  10. package/dist/block.css +63 -0
  11. package/dist/block.d.ts +13 -5
  12. package/dist/block.js +137 -57
  13. package/dist/{charts-d3-QOZHKTCT.js → charts-d3-EW3YQTEA.js} +9 -8
  14. package/dist/chunk-26RVGM44.js +331 -0
  15. package/dist/{chunk-44CM72SQ.js → chunk-2WMBWZY2.js} +3 -3
  16. package/dist/{chunk-L66GEFB6.js → chunk-35BBZDFE.js} +4 -4
  17. package/dist/{chunk-4GRI7MEB.js → chunk-3BIAFYD2.js} +6 -6
  18. package/dist/chunk-3NFJWFNP.js +1474 -0
  19. package/dist/{chunk-76OWZ3BA.js → chunk-4BD7EVPK.js} +2 -2
  20. package/dist/{chunk-MITI6NOL.js → chunk-4FIV4K4Z.js} +9 -9
  21. package/dist/chunk-4HVNZ7WF.js +574 -0
  22. package/dist/{chunk-X5LCYCL5.js → chunk-4NQ3IKUM.js} +2 -2
  23. package/dist/{chunk-PWIHZ6NJ.js → chunk-4UDKKGHH.js} +4 -4
  24. package/dist/{chunk-6NYWYNBI.js → chunk-4XK3FLFB.js} +3 -3
  25. package/dist/chunk-4YNP6O47.js +607 -0
  26. package/dist/{chunk-3MQQNXPD.js → chunk-5FGDJIJX.js} +3 -3
  27. package/dist/{chunk-WCT3NYCV.js → chunk-5LWQH6QV.js} +1 -1
  28. package/dist/chunk-5XCM7UUW.js +261 -0
  29. package/dist/{chunk-RYEGFMUO.js → chunk-5ZZLLBFK.js} +2 -2
  30. package/dist/{chunk-EB6FPQUP.js → chunk-65RTDUZH.js} +3 -3
  31. package/dist/chunk-6CLKNXVP.js +664 -0
  32. package/dist/{chunk-H6PI3KJT.js → chunk-6IUAK7RZ.js} +2 -2
  33. package/dist/{chunk-ZGR7ULFJ.js → chunk-6SA7FJE4.js} +31 -19
  34. package/dist/{chunk-LIOHW36Z.js → chunk-6VE3VLWM.js} +3 -3
  35. package/dist/{chunk-AN2MOO5T.js → chunk-7OVSJI2V.js} +3 -3
  36. package/dist/{chunk-YAA6IID3.js → chunk-7UEMZREK.js} +2 -2
  37. package/dist/{chunk-FCIIHT24.js → chunk-7VLUGEMJ.js} +7 -7
  38. package/dist/{chunk-VOKGH627.js → chunk-AHGF2YYA.js} +13 -3
  39. package/dist/{chunk-3R5POCTZ.js → chunk-AJ2PEY7J.js} +6 -6
  40. package/dist/{chunk-PBHE5UG6.js → chunk-ALRHIR6I.js} +46 -12
  41. package/dist/{chunk-7JEGTRLD.js → chunk-B57V3DWN.js} +3 -3
  42. package/dist/{chunk-ILKORZ3H.js → chunk-BCT5G2VN.js} +7 -7
  43. package/dist/{chunk-TYS6CSS5.js → chunk-BCYVE3N5.js} +2 -2
  44. package/dist/{chunk-ZBWMSD5N.js → chunk-BGJV5ATD.js} +4 -4
  45. package/dist/{chunk-G2H74XJZ.js → chunk-BPIJLRYE.js} +8 -8
  46. package/dist/{chunk-YGJTDXVR.js → chunk-C4GQDB5L.js} +2 -2
  47. package/dist/{chunk-Y2ZE3MSG.js → chunk-C63UWAKM.js} +2 -2
  48. package/dist/{chunk-QEBUY5NY.js → chunk-CEHZOPGM.js} +4 -4
  49. package/dist/{chunk-725LDASD.js → chunk-CLD2OKV7.js} +2 -2
  50. package/dist/{chunk-5QXL4NYS.js → chunk-CLR4A2N2.js} +10 -5
  51. package/dist/{chunk-WBRZJOEC.js → chunk-CMCR5WBW.js} +3 -3
  52. package/dist/{chunk-SML67VPV.js → chunk-D5AVQCDN.js} +3 -3
  53. package/dist/{chunk-2LACINWN.js → chunk-DDTJ5N7Q.js} +9 -9
  54. package/dist/{chunk-FITOLXSX.js → chunk-EOFPYPAU.js} +26 -2
  55. package/dist/{chunk-B65G5DNL.js → chunk-EYN7VFKL.js} +3 -3
  56. package/dist/{chunk-4OHACBGX.js → chunk-F2L5GCQ4.js} +2 -2
  57. package/dist/{chunk-RVMRZAPB.js → chunk-F743CM2N.js} +3 -3
  58. package/dist/{chunk-3JLKYGBQ.js → chunk-F7BFXWNQ.js} +2 -2
  59. package/dist/{chunk-WCSOJFU3.js → chunk-FMKTYMP4.js} +3 -3
  60. package/dist/{chunk-RTLBSQ3G.js → chunk-FUCAB3KQ.js} +3 -3
  61. package/dist/{chunk-SGZYXELT.js → chunk-GB3YZTAM.js} +9 -6
  62. package/dist/{chunk-QLCCJEJI.js → chunk-HBVD67XG.js} +2 -2
  63. package/dist/{chunk-PBAHEPLQ.js → chunk-HGN652MU.js} +7 -6
  64. package/dist/{chunk-3SMGIJDD.js → chunk-HHXOONLX.js} +13 -1
  65. package/dist/{chunk-QOOUC2J5.js → chunk-HQCHYB5F.js} +2 -2
  66. package/dist/chunk-IAEC4KLA.js +492 -0
  67. package/dist/{chunk-J5FIXQRT.js → chunk-IBC35BTK.js} +4 -4
  68. package/dist/{chunk-NURGB5Z4.js → chunk-IFK3GIUW.js} +2 -2
  69. package/dist/{chunk-FANX6UJR.js → chunk-IHLSHCPZ.js} +11 -11
  70. package/dist/{chunk-GMR5MFHJ.js → chunk-IUK7AGD4.js} +2 -2
  71. package/dist/chunk-IVKC4GID.js +32 -0
  72. package/dist/{chunk-OJR3MQYV.js → chunk-JFPY3UJ7.js} +296 -57
  73. package/dist/{chunk-5MLYVTYM.js → chunk-K6HNAY5V.js} +2 -2
  74. package/dist/{chunk-P235SVAH.js → chunk-KQAEKMIX.js} +2 -2
  75. package/dist/{chunk-7DTWEFUE.js → chunk-KUBBJ2CD.js} +10 -10
  76. package/dist/{chunk-BUVJFRPY.js → chunk-KV6Y2HE6.js} +4 -4
  77. package/dist/{chunk-OURHMODR.js → chunk-LG4TWW4U.js} +13 -13
  78. package/dist/{chunk-XAKEUMEJ.js → chunk-LVHPTBO3.js} +3 -3
  79. package/dist/{chunk-ERLBPDGU.js → chunk-MJCG5K2O.js} +2 -2
  80. package/dist/{chunk-THXCFRTU.js → chunk-N4J5KGWG.js} +12 -12
  81. package/dist/{chunk-MZSBFAPJ.js → chunk-NVT6C2VE.js} +9 -9
  82. package/dist/{chunk-AELOBFW5.js → chunk-O5MQPK7E.js} +3 -3
  83. package/dist/{chunk-JM4LEPY3.js → chunk-O7NUCTFU.js} +2 -2
  84. package/dist/{chunk-JED6ZDEE.js → chunk-O7WP4ZD4.js} +2 -2
  85. package/dist/{chunk-ZO27FGJS.js → chunk-PH5X4GIP.js} +2 -2
  86. package/dist/{chunk-B7JUCQUA.js → chunk-PU3AUQPA.js} +4 -4
  87. package/dist/{chunk-YGJZWZTY.js → chunk-PZFVK3IH.js} +2 -2
  88. package/dist/chunk-QQJUTGQH.js +135 -0
  89. package/dist/{chunk-HSH73DP6.js → chunk-RI4NIMFP.js} +99 -39
  90. package/dist/{chunk-33LCUH4H.js → chunk-RTERS6S5.js} +3 -3
  91. package/dist/{chunk-T3UBLACL.js → chunk-SCQ5VPUF.js} +19 -5
  92. package/dist/chunk-SGHSY3LU.js +377 -0
  93. package/dist/{chunk-SRTU6HMQ.js → chunk-SJEGO2QL.js} +8 -8
  94. package/dist/chunk-SQDFK5ZQ.js +273 -0
  95. package/dist/{chunk-PZMETGLY.js → chunk-SVDWQGX2.js} +296 -121
  96. package/dist/{chunk-Z5CGSFJB.js → chunk-T7IKPCMI.js} +4 -4
  97. package/dist/chunk-TC3YWBFO.js +233 -0
  98. package/dist/{chunk-EVCVDTXE.js → chunk-TLKMTQYL.js} +3 -3
  99. package/dist/{chunk-IJZFN3HM.js → chunk-TWQUYVP3.js} +4 -4
  100. package/dist/{chunk-IZMRON6C.js → chunk-UVCXZEGU.js} +2 -2
  101. package/dist/{chunk-CKNVO24D.js → chunk-UWDO3O52.js} +2 -2
  102. package/dist/{chunk-RJE5JTVK.js → chunk-VC3TR4NL.js} +7 -7
  103. package/dist/{chunk-CI2G3OEB.js → chunk-X2CH42BN.js} +9 -9
  104. package/dist/{chunk-6HO5ZTXK.js → chunk-XCC2RENT.js} +2 -2
  105. package/dist/chunk-XHVV4NVW.js +51 -0
  106. package/dist/{chunk-ZJEL4H2R.js → chunk-XJ7J6WOO.js} +9 -9
  107. package/dist/{chunk-ULOEATBZ.js → chunk-XKTN7CZF.js} +106 -29
  108. package/dist/{chunk-IPWPWM6R.js → chunk-YM2BSPYW.js} +111 -10
  109. package/dist/{chunk-BUPDIHML.js → chunk-YRVLP7UU.js} +3 -3
  110. package/dist/{chunk-T2OE3YQB.js → chunk-YTN572Q2.js} +3 -3
  111. package/dist/{chunk-WVAJFAIA.js → chunk-YYX3SU6H.js} +3 -3
  112. package/dist/{chunk-MO5YHHMQ.js → chunk-ZDUQGL3N.js} +2 -2
  113. package/dist/{chunk-Y3J7VR52.js → chunk-ZNQX6QWH.js} +30 -2
  114. package/dist/{chunk-UWN33VNX.js → chunk-ZREZOIGS.js} +8 -8
  115. package/dist/{chunk-6SM5NJQH.js → chunk-ZTLWVRNS.js} +4 -4
  116. package/dist/{chunk-RUNNI6VE.js → chunk-ZXL6MB4R.js} +3 -3
  117. package/dist/cli.cjs +159 -122
  118. package/dist/dgmo-router-ODKPEJ3P.js +79 -0
  119. package/dist/dimensions-WSIJXT5Q.js +22 -0
  120. package/dist/editor.js +4 -1
  121. package/dist/element.js +203 -103
  122. package/dist/element.mjs +6849 -824
  123. package/dist/{flowchart-parser-ZNSKIBVR.js → flowchart-parser-IVZN7CQN.js} +4 -4
  124. package/dist/{flowchart-renderer-SNDSII4D.js → flowchart-renderer-GMI2U3DD.js} +9 -9
  125. package/dist/highlight.js +7 -1
  126. package/dist/index.d.ts +5 -1
  127. package/dist/index.js +193 -232
  128. package/dist/{layout-HRBZPFCN.js → layout-34CLNICW.js} +5 -5
  129. package/dist/{layout-5RA6QWR6.js → layout-4Z5JM7PT.js} +6 -6
  130. package/dist/layout-6RDJHS6E.js +9 -0
  131. package/dist/{layout-7QXCNOVS.js → layout-7H4H46CS.js} +3 -3
  132. package/dist/{layout-46N4JJYK.js → layout-7SKMFYHL.js} +5 -5
  133. package/dist/{layout-HWDSRX5E.js → layout-D42XE4RE.js} +6 -6
  134. package/dist/{layout-EE6GE46Y.js → layout-DC4TVXER.js} +5 -5
  135. package/dist/layout-FGQWRYYW.js +14 -0
  136. package/dist/layout-GZ2CWONU.js +14 -0
  137. package/dist/layout-HQMBPJVS.js +10 -0
  138. package/dist/{layout-UM5F4DJB.js → layout-K2ZN3Q42.js} +5 -5
  139. package/dist/{layout-S2QBYSK2.js → layout-NXG63LWH.js} +3 -3
  140. package/dist/{layout-N76NR4ZO.js → layout-PUQCB6AN.js} +7 -7
  141. package/dist/{layout-HYZPWAK5.js → layout-QNUQLEHU.js} +3 -3
  142. package/dist/layout-S3EK4IYO.js +14 -0
  143. package/dist/{layout-search-OYV77HHS.js → layout-search-QS44PI5R.js} +6 -6
  144. package/dist/{parser-KNSQSKQO.js → parser-4BKIFG2C.js} +5 -5
  145. package/dist/{parser-OV7NOBW6.js → parser-4ROBKVUR.js} +4 -4
  146. package/dist/parser-667RGSUW.js +13 -0
  147. package/dist/{parser-IXSZZQHY.js → parser-BL7Z72EY.js} +4 -4
  148. package/dist/{parser-AQETEVRW.js → parser-CLMFZWCC.js} +4 -4
  149. package/dist/{parser-XKRP7QKP.js → parser-D6ONJQFR.js} +3 -3
  150. package/dist/{parser-2EWECDSA.js → parser-DERPY5KC.js} +4 -4
  151. package/dist/{parser-4OGOBJJ4.js → parser-GFSOPDB7.js} +4 -4
  152. package/dist/{parser-2MFP2H2E.js → parser-HVJFTOXL.js} +3 -3
  153. package/dist/{parser-VQP2UJ6W.js → parser-IKZFTLOJ.js} +3 -3
  154. package/dist/parser-J3P2D6IP.js +13 -0
  155. package/dist/{parser-PQ3POX45.js → parser-JD7OQ2E6.js} +4 -4
  156. package/dist/{parser-O5J4VBII.js → parser-K647FRI4.js} +3 -3
  157. package/dist/{parser-NGU3ETO6.js → parser-KPMN5KKE.js} +4 -4
  158. package/dist/{parser-4FL2CMDG.js → parser-MBJSBTL5.js} +4 -4
  159. package/dist/{parser-TFZFBVWN.js → parser-MCJWF5G3.js} +3 -3
  160. package/dist/{parser-NRAI6O25.js → parser-MRBPXXIV.js} +4 -4
  161. package/dist/{parser-6BTRLKRZ.js → parser-OBQG655V.js} +4 -4
  162. package/dist/{parser-3STE62GB.js → parser-QJYS7KQQ.js} +4 -4
  163. package/dist/{parser-XDVELHRK.js → parser-SMBJO3XN.js} +4 -4
  164. package/dist/{parser-TRTHDFPP.js → parser-TITK4YW6.js} +5 -5
  165. package/dist/{parser-I6KXEYFK.js → parser-TNYX5S7E.js} +4 -4
  166. package/dist/{parser-Y6WTBU76.js → parser-UBGPTIZD.js} +3 -3
  167. package/dist/parser-UGA23PYK.js +14 -0
  168. package/dist/{parser-N5O4IHUN.js → parser-WISPH7LW.js} +4 -4
  169. package/dist/{parser-CFZD5IBL.js → parser-XWUDFJ7P.js} +4 -4
  170. package/dist/parser-ZKF5K2H2.js +15 -0
  171. package/dist/{parser-ZSDPZYQP.js → parser-ZYC3XGNS.js} +4 -4
  172. package/dist/{renderer-AWWAF6XD.js → renderer-4IUPINAE.js} +10 -10
  173. package/dist/renderer-6L3NBEY5.js +24 -0
  174. package/dist/{renderer-ZRNG54CW.js → renderer-6T3KK4S3.js} +11 -11
  175. package/dist/{renderer-KQB7UGDS.js → renderer-7RH2SI3B.js} +3 -3
  176. package/dist/{renderer-6EEZHMH4.js → renderer-A5VFZQQK.js} +9 -9
  177. package/dist/{renderer-5MYBMBYO.js → renderer-BB5PREMY.js} +5 -5
  178. package/dist/{renderer-BYCNMBF7.js → renderer-CGW7QPNA.js} +10 -10
  179. package/dist/{renderer-QIWVHWZO.js → renderer-DAXMXIKD.js} +3 -3
  180. package/dist/{renderer-7MVLWWQD.js → renderer-DKESNMU5.js} +9 -9
  181. package/dist/{renderer-UV6MI64M.js → renderer-HVCU2C3Z.js} +3 -3
  182. package/dist/{renderer-VACVQYML.js → renderer-LWGJFT3D.js} +8 -8
  183. package/dist/{renderer-PGX2TKVS.js → renderer-MFJ7HY2H.js} +8 -8
  184. package/dist/{renderer-B2OMQIQG.js → renderer-MJDDU27W.js} +15 -15
  185. package/dist/{renderer-4JHRUBE6.js → renderer-QL5KO6SK.js} +10 -10
  186. package/dist/{renderer-W4M6QLIJ.js → renderer-QNHUXCRL.js} +14 -14
  187. package/dist/{renderer-ZGNTUWC4.js → renderer-ROV756WT.js} +8 -8
  188. package/dist/{renderer-YY2OSF6E.js → renderer-SQ3JUAI7.js} +9 -9
  189. package/dist/renderer-THD6V5TL.js +22 -0
  190. package/dist/{renderer-5NDVNDAZ.js → renderer-TPIBXNOS.js} +9 -9
  191. package/dist/{renderer-RPOA5YPZ.js → renderer-TYXRHMRI.js} +13 -13
  192. package/dist/{renderer-N43WR5GV.js → renderer-UZF3JROD.js} +11 -11
  193. package/dist/{renderer-6W5462RB.js → renderer-V3JEMWMM.js} +9 -9
  194. package/dist/{renderer-JGBKUCZD.js → renderer-VFUVRNLK.js} +4 -4
  195. package/dist/{renderer-Z7I3W2PP.js → renderer-VICQ4WNY.js} +8 -8
  196. package/dist/renderer-W5RMOURB.js +21 -0
  197. package/dist/renderer-XEKIRPI6.js +23 -0
  198. package/dist/{renderer-CLJHQPBJ.js → renderer-YHXPN3GF.js} +12 -12
  199. package/dist/renderer-radial-MHO2VDXN.js +21 -0
  200. package/dist/{resolver-NOAA7ID7.js → resolver-FHBCO3PL.js} +3 -3
  201. package/dist/{state-parser-Z2V23ATR.js → state-parser-RX3GXOIB.js} +4 -4
  202. package/dist/{state-renderer-B4DQBM6M.js → state-renderer-AJUKGNWU.js} +9 -9
  203. package/docs/ai-integration.md +8 -3
  204. package/docs/language-reference.md +179 -5
  205. package/gallery/fixtures/family.dgmo +23 -0
  206. package/gallery/fixtures/sketch.dgmo +22 -0
  207. package/package.json +1 -1
  208. package/dist/chunk-ODZVHU3R.js +0 -153
  209. package/dist/dgmo-router-X35VLZLM.js +0 -73
  210. package/dist/dimensions-J3FHIMJ6.js +0 -22
  211. package/dist/layout-5T6RH5M6.js +0 -14
  212. package/dist/layout-G23F7LDH.js +0 -9
  213. package/dist/layout-OB3RI63S.js +0 -14
  214. package/dist/parser-JAL2HD4I.js +0 -13
  215. package/dist/renderer-SMIBCRVB.js +0 -24
  216. package/dist/renderer-radial-C32GPJQ7.js +0 -21
@@ -1,12 +1,26 @@
1
1
  import {
2
- computeQuadrantPointLabels
3
- } from "./chunk-PBAHEPLQ.js";
2
+ getRenderCategory,
3
+ parseArc,
4
+ parseDgmo,
5
+ parseQuadrant,
6
+ parseSlope,
7
+ parseTimeline,
8
+ parseVenn,
9
+ parseVisualization,
10
+ parseWordcloud
11
+ } from "./chunk-RI4NIMFP.js";
4
12
  import {
5
13
  renderDataChartD3
6
- } from "./chunk-OJR3MQYV.js";
14
+ } from "./chunk-JFPY3UJ7.js";
15
+ import {
16
+ computeQuadrantPointLabels
17
+ } from "./chunk-HGN652MU.js";
7
18
  import {
8
19
  renderTimeline
9
- } from "./chunk-UWN33VNX.js";
20
+ } from "./chunk-ZREZOIGS.js";
21
+ import {
22
+ ScaleContext
23
+ } from "./chunk-YYVTBZZC.js";
10
24
  import {
11
25
  EXPORT_HEIGHT,
12
26
  EXPORT_WIDTH,
@@ -19,27 +33,13 @@ import {
19
33
  resolveExportPalette,
20
34
  showTooltip
21
35
  } from "./chunk-U6EQI3U6.js";
22
- import {
23
- ScaleContext
24
- } from "./chunk-YYVTBZZC.js";
25
36
  import {
26
37
  FONT_FAMILY
27
38
  } from "./chunk-6KFWC4CO.js";
28
39
  import {
29
40
  measureText,
30
41
  wrapTextToWidth
31
- } from "./chunk-WCT3NYCV.js";
32
- import {
33
- getRenderCategory,
34
- parseArc,
35
- parseDgmo,
36
- parseQuadrant,
37
- parseSlope,
38
- parseTimeline,
39
- parseVenn,
40
- parseVisualization,
41
- parseWordcloud
42
- } from "./chunk-HSH73DP6.js";
42
+ } from "./chunk-5LWQH6QV.js";
43
43
  import {
44
44
  getPalette
45
45
  } from "./chunk-R3XI2VC7.js";
@@ -51,7 +51,7 @@ import {
51
51
  import {
52
52
  resolveActiveTagGroup,
53
53
  tagAttrKey
54
- } from "./chunk-QLCCJEJI.js";
54
+ } from "./chunk-HBVD67XG.js";
55
55
  import {
56
56
  __commonJS,
57
57
  __toESM
@@ -808,8 +808,6 @@ var ARC_GROUP_LABEL_FONT = 12;
808
808
  var ARC_BAND_HALF_W = 60;
809
809
  var ARC_BAND_HALF_H = 40;
810
810
  var ARC_BAND_RADIUS = 4;
811
- var ARC_BAND_LABEL_X_OFFSET = 6;
812
- var ARC_BAND_LABEL_Y_OFFSET = 14;
813
811
  var ARC_BAND_LABEL_BOTTOM_OFFSET = 4;
814
812
  var ARC_NODE_LABEL_X_OFFSET = 14;
815
813
  var ARC_NODE_LABEL_Y_OFFSET = 20;
@@ -838,8 +836,6 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
838
836
  const sBandHalfW = ctx.aesthetic(ARC_BAND_HALF_W);
839
837
  const sBandHalfH = ctx.aesthetic(ARC_BAND_HALF_H);
840
838
  const sBandRadius = ctx.structural(ARC_BAND_RADIUS);
841
- const sBandLabelXOffset = ctx.structural(ARC_BAND_LABEL_X_OFFSET);
842
- const sBandLabelYOffset = ctx.structural(ARC_BAND_LABEL_Y_OFFSET);
843
839
  const sBandLabelBottomOffset = ctx.structural(ARC_BAND_LABEL_BOTTOM_OFFSET);
844
840
  const sNodeLabelXOffset = ctx.structural(ARC_NODE_LABEL_X_OFFSET);
845
841
  const sNodeLabelYOffset = ctx.structural(ARC_NODE_LABEL_Y_OFFSET);
@@ -947,21 +943,40 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
947
943
  el.attr("fill-opacity", el.attr("data-group") === groupName ? 1 : 0.2);
948
944
  });
949
945
  }
946
+ const groupOfNode = /* @__PURE__ */ new Map();
947
+ const groupColorByName = /* @__PURE__ */ new Map();
948
+ for (const grp of arcNodeGroups) {
949
+ if (grp.color) groupColorByName.set(grp.name, grp.color);
950
+ for (const n of grp.nodes)
951
+ if (nodes.includes(n) && !groupOfNode.has(n))
952
+ groupOfNode.set(n, grp.name);
953
+ }
954
+ const groupColorOfLink = (l) => {
955
+ const g2 = groupOfNode.get(l.source) ?? groupOfNode.get(l.target);
956
+ return g2 ? groupColorByName.get(g2) : void 0;
957
+ };
950
958
  if (isVertical) {
951
959
  const yScale = d3Scale2.scalePoint().domain(nodes).range([0, innerHeight]).padding(0.5);
952
960
  const baseX = innerWidth / 2;
953
961
  if (arcNodeGroups.length > 0) {
954
962
  const bandPad = (yScale.step?.() ?? 20) * 0.4;
963
+ const vWidestLabelPx = Math.max(...nodes.map((n) => n.length)) * sNodeLabelFont * 0.6;
964
+ const vNameColW = sGroupLabelFont * 3;
965
+ const innerLeft = baseX - Math.max(sBandHalfW, sNodeLabelXOffset + vWidestLabelPx + 4);
966
+ const bandLeft = innerLeft - vNameColW;
967
+ const bandRight = baseX + sBandHalfW;
955
968
  for (const group of arcNodeGroups) {
956
969
  const groupNodes = group.nodes.filter((n) => nodes.includes(n));
957
970
  if (groupNodes.length === 0) continue;
958
971
  const positions = groupNodes.map((n) => yScale(n));
959
972
  const minY = Math.min(...positions) - bandPad;
960
973
  const maxY = Math.max(...positions) + bandPad;
961
- g.append("rect").attr("class", "arc-group-band").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", baseX - sBandHalfW).attr("y", minY).attr("width", sBandHalfW * 2).attr("height", maxY - minY).attr("rx", sBandRadius).attr("fill", textColor).attr("fill-opacity", 0.06).style("cursor", "pointer").on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
974
+ const midYBand = (minY + maxY) / 2;
975
+ g.append("rect").attr("class", "arc-group-band").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", bandLeft).attr("y", minY).attr("width", bandRight - bandLeft).attr("height", maxY - minY).attr("rx", sBandRadius).attr("fill", group.color ?? textColor).attr("fill-opacity", group.color ? 0.15 : 0.06).style("cursor", "pointer").on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
962
976
  if (onClickItem) onClickItem(group.lineNumber);
963
977
  });
964
- g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", baseX - sBandHalfW + sBandLabelXOffset).attr("y", minY + sBandLabelYOffset).attr("fill", textColor).attr("font-size", `${sGroupLabelFont}px`).attr("font-weight", "600").attr("fill-opacity", 0.5).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
978
+ const nameX = bandLeft + vNameColW / 2;
979
+ 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", () => {
965
980
  if (onClickItem) onClickItem(group.lineNumber);
966
981
  });
967
982
  }
@@ -973,7 +988,7 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
973
988
  const midY = (y1 + y2) / 2;
974
989
  const distance = Math.abs(y2 - y1);
975
990
  const controlX = baseX + distance * 0.4;
976
- const color = link.color ?? colors[idx % colors.length];
991
+ const color = link.color ?? groupColorOfLink(link) ?? colors[idx % colors.length];
977
992
  g.append("path").attr("class", "arc-link").attr("data-source", link.source).attr("data-target", link.target).attr("data-line-number", String(link.lineNumber)).attr("d", `M ${baseX},${y1} Q ${controlX},${midY} ${baseX},${y2}`).attr("fill", "none").attr("stroke", color).attr("stroke-width", strokeScale(link.value)).attr("stroke-opacity", 0.7).style("cursor", onClickItem ? "pointer" : "default").on("click", () => {
978
993
  if (onClickItem && link.lineNumber) onClickItem(link.lineNumber);
979
994
  });
@@ -996,51 +1011,103 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
996
1011
  }
997
1012
  } else {
998
1013
  const xScale = d3Scale2.scalePoint().domain(nodes).range([0, innerWidth]).padding(0.5);
1014
+ const arcStep = xScale.step();
1015
+ const widestLabelChars = Math.max(...nodes.map((n) => n.length));
1016
+ const labelWidthPx = widestLabelChars * sNodeLabelFont * 0.6;
1017
+ const rotateLabels = labelWidthPx > arcStep * 0.9;
1018
+ const labelPivotGap = sNodeRadius + 4;
1019
+ const rotatedLabelDrop = labelWidthPx * 0.71;
1020
+ const hasGroups = arcNodeGroups.length > 0;
1021
+ const xPos = /* @__PURE__ */ new Map();
1022
+ let bandStepPx = arcStep;
1023
+ if (hasGroups) {
1024
+ let boundaryCount = 0;
1025
+ let prevG = null;
1026
+ for (const n of nodes) {
1027
+ const gn = groupOfNode.get(n) ?? `\0solo:${n}`;
1028
+ if (prevG !== null && gn !== prevG) boundaryCount++;
1029
+ prevG = gn;
1030
+ }
1031
+ const withinAdj = nodes.length - 1 - boundaryCount;
1032
+ const groupGapPx = rotateLabels ? rotatedLabelDrop + sNodeRadius * 2 + 12 : arcStep * 0.9;
1033
+ const leftInset = rotateLabels ? rotatedLabelDrop + sNodeRadius : arcStep * 0.5;
1034
+ const rightInset = rotateLabels ? sNodeRadius + 2 : arcStep * 0.5;
1035
+ const avail = innerWidth - leftInset - rightInset;
1036
+ let stepPx = withinAdj > 0 ? (avail - boundaryCount * groupGapPx) / withinAdj : avail;
1037
+ if (!isFinite(stepPx) || stepPx < sNodeRadius * 2)
1038
+ stepPx = Math.max(sNodeRadius * 2, arcStep * 0.5);
1039
+ bandStepPx = stepPx;
1040
+ let cx = leftInset;
1041
+ prevG = null;
1042
+ for (const n of nodes) {
1043
+ const gn = groupOfNode.get(n) ?? `\0solo:${n}`;
1044
+ if (prevG !== null) cx += gn !== prevG ? groupGapPx : stepPx;
1045
+ xPos.set(n, cx);
1046
+ prevG = gn;
1047
+ }
1048
+ } else {
1049
+ for (const n of nodes) xPos.set(n, xScale(n));
1050
+ }
1051
+ const posX = (n) => xPos.get(n);
1052
+ const nodeLabelDepth = rotateLabels ? labelPivotGap + rotatedLabelDrop : sNodeLabelYOffset + sNodeLabelFont;
1053
+ const groupNameGap = sGroupLabelFont + sBandLabelBottomOffset;
1054
+ const belowExtent = hasGroups ? nodeLabelDepth + groupNameGap + sGroupLabelFont * 0.25 : Math.max(sBandHalfH, nodeLabelDepth);
999
1055
  let baseY = innerHeight / 2;
1000
1056
  if (exportDims) {
1001
1057
  let maxDist = 0;
1002
1058
  for (const l of links) {
1003
- const a = xScale(l.source);
1004
- const b = xScale(l.target);
1059
+ const a = posX(l.source);
1060
+ const b = posX(l.target);
1005
1061
  if (a != null && b != null)
1006
1062
  maxDist = Math.max(maxDist, Math.abs(b - a));
1007
1063
  }
1008
1064
  const above = maxDist * 0.2 + sNodeRadius;
1009
- const below = Math.max(sBandHalfH, sNodeLabelYOffset + sNodeLabelFont);
1065
+ const below = belowExtent;
1010
1066
  baseY = above;
1011
1067
  const tightHeight = margin.top + above + below + margin.bottom;
1012
1068
  svg.attr("height", tightHeight).attr("viewBox", `0 0 ${width} ${tightHeight}`);
1013
1069
  }
1014
- if (arcNodeGroups.length > 0) {
1015
- const bandPad = (xScale.step?.() ?? 20) * 0.4;
1070
+ if (hasGroups) {
1071
+ const bandTopY = baseY - sBandHalfH;
1072
+ const bandBottomY = baseY + belowExtent;
1016
1073
  for (const group of arcNodeGroups) {
1017
1074
  const groupNodes = group.nodes.filter((n) => nodes.includes(n));
1018
1075
  if (groupNodes.length === 0) continue;
1019
- const positions = groupNodes.map((n) => xScale(n));
1020
- const minX = Math.min(...positions) - bandPad;
1021
- const maxX = Math.max(...positions) + bandPad;
1022
- g.append("rect").attr("class", "arc-group-band").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", minX).attr("y", baseY - sBandHalfH).attr("width", maxX - minX).attr("height", sBandHalfH * 2).attr("rx", sBandRadius).attr("fill", textColor).attr("fill-opacity", 0.06).style("cursor", "pointer").on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
1076
+ const positions = groupNodes.map((n) => posX(n));
1077
+ const minP = Math.min(...positions);
1078
+ const maxP = Math.max(...positions);
1079
+ const sidePad = rotateLabels ? sNodeRadius + 4 : bandStepPx * 0.4;
1080
+ const leftNode = groupNodes.reduce(
1081
+ (a, b) => posX(a) < posX(b) ? a : b
1082
+ );
1083
+ const ownOverhang = leftNode.length * sNodeLabelFont * 0.6 * 0.71;
1084
+ const bandLeft = rotateLabels ? minP - ownOverhang - sidePad : minP - sidePad;
1085
+ const bandRight = maxP + sidePad;
1086
+ const bandFill = group.color ?? textColor;
1087
+ const bandFillOpacity = group.color ? 0.15 : 0.06;
1088
+ const nameY = baseY + nodeLabelDepth + sGroupLabelFont;
1089
+ g.append("rect").attr("class", "arc-group-band").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", bandLeft).attr("y", bandTopY).attr("width", bandRight - bandLeft).attr("height", bandBottomY - bandTopY).attr("rx", sBandRadius).attr("fill", bandFill).attr("fill-opacity", bandFillOpacity).style("cursor", "pointer").on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
1023
1090
  if (onClickItem) onClickItem(group.lineNumber);
1024
1091
  });
1025
- g.append("text").attr("class", "arc-group-label").attr("data-group", group.name).attr("data-line-number", String(group.lineNumber)).attr("x", (minX + maxX) / 2).attr("y", baseY + sBandHalfH - sBandLabelBottomOffset).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sGroupLabelFont}px`).attr("font-weight", "600").attr("fill-opacity", 0.5).style("cursor", onClickItem ? "pointer" : "default").text(group.name).on("mouseenter", () => handleGroupEnter(group.name)).on("mouseleave", handleMouseLeave).on("click", () => {
1092
+ 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", () => {
1026
1093
  if (onClickItem) onClickItem(group.lineNumber);
1027
1094
  });
1028
1095
  }
1029
1096
  }
1030
1097
  g.append("line").attr("x1", 0).attr("y1", baseY).attr("x2", innerWidth).attr("y2", baseY).attr("stroke", mutedColor).attr("stroke-width", sBaselineStrokeWidth).attr("stroke-dasharray", sBaselineDash);
1031
1098
  links.forEach((link, idx) => {
1032
- const x1 = xScale(link.source);
1033
- const x2 = xScale(link.target);
1099
+ const x1 = posX(link.source);
1100
+ const x2 = posX(link.target);
1034
1101
  const midX = (x1 + x2) / 2;
1035
1102
  const distance = Math.abs(x2 - x1);
1036
1103
  const controlY = baseY - distance * 0.4;
1037
- const color = link.color ?? colors[idx % colors.length];
1104
+ const color = link.color ?? groupColorOfLink(link) ?? colors[idx % colors.length];
1038
1105
  g.append("path").attr("class", "arc-link").attr("data-source", link.source).attr("data-target", link.target).attr("data-line-number", String(link.lineNumber)).attr("d", `M ${x1},${baseY} Q ${midX},${controlY} ${x2},${baseY}`).attr("fill", "none").attr("stroke", color).attr("stroke-width", strokeScale(link.value)).attr("stroke-opacity", 0.7).style("cursor", onClickItem ? "pointer" : "default").on("click", () => {
1039
1106
  if (onClickItem && link.lineNumber) onClickItem(link.lineNumber);
1040
1107
  });
1041
1108
  });
1042
1109
  for (const node of nodes) {
1043
- const x = xScale(node);
1110
+ const x = posX(node);
1044
1111
  const nodeColor = nodeColorMap.get(node) ?? textColor;
1045
1112
  const nodeLink = links.find(
1046
1113
  (l) => l.source === node || l.target === node
@@ -1053,7 +1120,11 @@ function renderArcDiagram(container, parsed, palette, _isDark, onClickItem, expo
1053
1120
  onClickItem(nodeLink.lineNumber);
1054
1121
  });
1055
1122
  nodeG.append("circle").attr("cx", x).attr("cy", baseY).attr("r", sNodeRadius).attr("fill", nodeColor).attr("stroke", bgColor).attr("stroke-width", sNodeStrokeWidth);
1056
- nodeG.append("text").attr("x", x).attr("y", baseY + sNodeLabelYOffset).attr("text-anchor", "middle").attr("fill", textColor).attr("font-size", `${sNodeLabelFont}px`).text(node);
1123
+ const labelY = rotateLabels ? baseY + labelPivotGap : baseY + sNodeLabelYOffset;
1124
+ 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);
1125
+ if (rotateLabels) {
1126
+ nodeLabel.attr("transform", `rotate(-45 ${x} ${labelY})`);
1127
+ }
1057
1128
  }
1058
1129
  }
1059
1130
  }
@@ -2241,7 +2312,9 @@ var DIAGRAM_EXPORT_HANDLERS = {
2241
2312
  class: exportClass,
2242
2313
  er: exportEr,
2243
2314
  "boxes-and-lines": exportBoxesAndLines,
2315
+ sketch: exportSketch,
2244
2316
  swimlane: exportSwimlane,
2317
+ family: exportFamily,
2245
2318
  "version-control": exportVersionControl,
2246
2319
  mindmap: exportMindmap,
2247
2320
  wireframe: exportWireframe,
@@ -2260,6 +2333,7 @@ var DIAGRAM_EXPORT_HANDLERS = {
2260
2333
  treemap: exportTreemap,
2261
2334
  block: exportBlock,
2262
2335
  raci: exportRaci,
2336
+ body: exportBody,
2263
2337
  // D3 visualizations — own handler per type (Story 109.2). Only `sequence`
2264
2338
  // still falls through to exportVisualization (no chart-type of its own).
2265
2339
  slope: exportSlope,
@@ -2285,13 +2359,13 @@ function resolveArcChordOverride(content, detectedType, palette) {
2285
2359
  }
2286
2360
  async function renderForExport(content, theme, palette, viewState, options) {
2287
2361
  const exportMode = options?.exportMode ?? false;
2288
- const { parseDgmoChartType } = await import("./dgmo-router-X35VLZLM.js");
2362
+ const { parseDgmoChartType } = await import("./dgmo-router-ODKPEJ3P.js");
2289
2363
  const detectedTypeRaw = parseDgmoChartType(content);
2290
2364
  const override = resolveArcChordOverride(content, detectedTypeRaw, palette);
2291
2365
  const renderContent = override?.content ?? content;
2292
2366
  const detectedType = override?.type ?? detectedTypeRaw;
2293
2367
  if (detectedType !== null) {
2294
- const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-QOZHKTCT.js");
2368
+ const { supportsD3DataChart, renderDataChartD3: renderDataChartD32 } = await import("./charts-d3-EW3YQTEA.js");
2295
2369
  if (supportsD3DataChart(detectedType)) {
2296
2370
  return renderDataChartD32(renderContent, theme, palette);
2297
2371
  }
@@ -2313,8 +2387,8 @@ function ctxTagOverride(ctx) {
2313
2387
  }
2314
2388
  async function exportEventLine(ctx) {
2315
2389
  const { content, theme, palette } = ctx;
2316
- const { parseEventLine } = await import("./parser-JAL2HD4I.js");
2317
- const { renderEventLineForExport } = await import("./renderer-RPOA5YPZ.js");
2390
+ const { parseEventLine } = await import("./parser-667RGSUW.js");
2391
+ const { renderEventLineForExport } = await import("./renderer-TYXRHMRI.js");
2318
2392
  const effectivePalette = await resolveExportPalette(theme, palette);
2319
2393
  const parsed = parseEventLine(content, effectivePalette);
2320
2394
  if (parsed.error || parsed.events.length === 0) return "";
@@ -2329,9 +2403,27 @@ async function exportEventLine(ctx) {
2329
2403
  );
2330
2404
  return finalizeSvgExport(container, theme, effectivePalette);
2331
2405
  }
2406
+ async function exportBody(ctx) {
2407
+ const { content, theme, palette } = ctx;
2408
+ const { parseBody } = await import("./parser-J3P2D6IP.js");
2409
+ const { renderBodyForExport } = await import("./renderer-W5RMOURB.js");
2410
+ const effectivePalette = await resolveExportPalette(theme, palette);
2411
+ const parsed = parseBody(content, effectivePalette);
2412
+ if (parsed.error) return "";
2413
+ const container = createExportContainer(EXPORT_WIDTH, EXPORT_HEIGHT);
2414
+ renderBodyForExport(
2415
+ container,
2416
+ parsed,
2417
+ effectivePalette,
2418
+ ctx.isDark,
2419
+ { width: EXPORT_WIDTH, height: EXPORT_HEIGHT },
2420
+ ctxTagOverride(ctx)
2421
+ );
2422
+ return finalizeSvgExport(container, theme, effectivePalette);
2423
+ }
2332
2424
  async function exportVersionControl(ctx) {
2333
2425
  const { content, theme, palette } = ctx;
2334
- const { parseVersionControl } = await import("./parser-TFZFBVWN.js");
2426
+ const { parseVersionControl } = await import("./parser-MCJWF5G3.js");
2335
2427
  const { renderVersionControlForExport } = await import("./renderer-GHPZMFU2.js");
2336
2428
  const effectivePalette = await resolveExportPalette(theme, palette);
2337
2429
  const parsed = parseVersionControl(content, effectivePalette);
@@ -2356,10 +2448,10 @@ function unionHiddenAttributes(hideOption, ha) {
2356
2448
  }
2357
2449
  async function exportOrg(ctx) {
2358
2450
  const { content, theme, palette, viewState, exportMode } = ctx;
2359
- const { parseOrg } = await import("./parser-6BTRLKRZ.js");
2360
- const { layoutOrg } = await import("./layout-OB3RI63S.js");
2451
+ const { parseOrg } = await import("./parser-OBQG655V.js");
2452
+ const { layoutOrg } = await import("./layout-GZ2CWONU.js");
2361
2453
  const { collapseOrgTree } = await import("./collapse-CLPJD2RL.js");
2362
- const { renderOrg } = await import("./renderer-ZRNG54CW.js");
2454
+ const { renderOrg } = await import("./renderer-6T3KK4S3.js");
2363
2455
  const isDark = ctx.isDark;
2364
2456
  const effectivePalette = await resolveExportPalette(theme, palette);
2365
2457
  const orgParsed = parseOrg(content, effectivePalette);
@@ -2405,10 +2497,10 @@ async function exportOrg(ctx) {
2405
2497
  }
2406
2498
  async function exportSitemap(ctx) {
2407
2499
  const { content, theme, palette, viewState, exportMode } = ctx;
2408
- const { parseSitemap } = await import("./parser-NGU3ETO6.js");
2409
- const { layoutSitemap } = await import("./layout-5T6RH5M6.js");
2500
+ const { parseSitemap } = await import("./parser-KPMN5KKE.js");
2501
+ const { layoutSitemap } = await import("./layout-S3EK4IYO.js");
2410
2502
  const { collapseSitemapTree } = await import("./collapse-ZWUFFCK2.js");
2411
- const { renderSitemap } = await import("./renderer-5NDVNDAZ.js");
2503
+ const { renderSitemap } = await import("./renderer-TPIBXNOS.js");
2412
2504
  const isDark = ctx.isDark;
2413
2505
  const effectivePalette = await resolveExportPalette(theme, palette);
2414
2506
  const sitemapParsed = parseSitemap(content, effectivePalette);
@@ -2452,8 +2544,8 @@ async function exportSitemap(ctx) {
2452
2544
  }
2453
2545
  async function exportKanban(ctx) {
2454
2546
  const { content, theme, palette, viewState, exportMode } = ctx;
2455
- const { parseKanban } = await import("./parser-XDVELHRK.js");
2456
- const { renderKanban } = await import("./renderer-6EEZHMH4.js");
2547
+ const { parseKanban } = await import("./parser-SMBJO3XN.js");
2548
+ const { renderKanban } = await import("./renderer-A5VFZQQK.js");
2457
2549
  const effectivePalette = await resolveExportPalette(theme, palette);
2458
2550
  const kanbanParsed = parseKanban(content, effectivePalette);
2459
2551
  if (kanbanParsed.error || kanbanParsed.columns.length === 0) return "";
@@ -2484,9 +2576,9 @@ async function exportKanban(ctx) {
2484
2576
  }
2485
2577
  async function exportClass(ctx) {
2486
2578
  const { content, theme, palette, exportMode } = ctx;
2487
- const { parseClassDiagram } = await import("./parser-NRAI6O25.js");
2488
- const { layoutClassDiagram } = await import("./layout-46N4JJYK.js");
2489
- const { renderClassDiagram } = await import("./renderer-B2OMQIQG.js");
2579
+ const { parseClassDiagram } = await import("./parser-MRBPXXIV.js");
2580
+ const { layoutClassDiagram } = await import("./layout-7SKMFYHL.js");
2581
+ const { renderClassDiagram } = await import("./renderer-MJDDU27W.js");
2490
2582
  const effectivePalette = await resolveExportPalette(theme, palette);
2491
2583
  const classParsed = parseClassDiagram(content, effectivePalette);
2492
2584
  if (classParsed.error || classParsed.classes.length === 0) return "";
@@ -2511,9 +2603,9 @@ async function exportClass(ctx) {
2511
2603
  }
2512
2604
  async function exportEr(ctx) {
2513
2605
  const { content, theme, palette, viewState, exportMode } = ctx;
2514
- const { parseERDiagram } = await import("./parser-KNSQSKQO.js");
2515
- const { layoutERDiagram } = await import("./layout-EE6GE46Y.js");
2516
- const { renderERDiagram } = await import("./renderer-W4M6QLIJ.js");
2606
+ const { parseERDiagram } = await import("./parser-4BKIFG2C.js");
2607
+ const { layoutERDiagram } = await import("./layout-DC4TVXER.js");
2608
+ const { renderERDiagram } = await import("./renderer-QNHUXCRL.js");
2517
2609
  const effectivePalette = await resolveExportPalette(theme, palette);
2518
2610
  const erParsed = parseERDiagram(content, effectivePalette);
2519
2611
  if (erParsed.error || erParsed.tables.length === 0) return "";
@@ -2543,9 +2635,43 @@ async function exportEr(ctx) {
2543
2635
  );
2544
2636
  return finalizeSvgExport(container, theme, effectivePalette);
2545
2637
  }
2638
+ async function exportSketch(ctx) {
2639
+ const { content, theme, viewState, exportMode } = ctx;
2640
+ const { parseSketch } = await import("./parser-ZKF5K2H2.js");
2641
+ const effectivePalette = await resolveExportPalette(theme, ctx.palette);
2642
+ const parsed = parseSketch(content, effectivePalette);
2643
+ if (parsed.error || parsed.nodes.length === 0 && parsed.boxes.length === 0) {
2644
+ return "";
2645
+ }
2646
+ const { layoutSketch } = await import("./layout-HQMBPJVS.js");
2647
+ const { renderSketchForExport } = await import("./renderer-THD6V5TL.js");
2648
+ const collapsedBoxes = viewState?.cg ? new Set(viewState.cg) : void 0;
2649
+ const skLayout = layoutSketch(parsed, {
2650
+ ...collapsedBoxes !== void 0 && { collapsedBoxes }
2651
+ });
2652
+ const PADDING = 20;
2653
+ const titleOffset = parsed.title ? 40 : 0;
2654
+ const exportWidth = skLayout.width + PADDING * 2;
2655
+ const exportHeight = skLayout.height + PADDING * 2 + titleOffset;
2656
+ const container = createExportContainer(exportWidth, exportHeight);
2657
+ const skTagOverride = ctxTagOverride(ctx);
2658
+ renderSketchForExport(
2659
+ container,
2660
+ parsed,
2661
+ skLayout,
2662
+ effectivePalette,
2663
+ ctx.isDark,
2664
+ {
2665
+ ...skTagOverride !== void 0 && { activeTagGroup: skTagOverride },
2666
+ ...exportMode !== void 0 && { exportMode },
2667
+ ...viewState?.hd !== void 0 && { hideDescriptions: viewState.hd }
2668
+ }
2669
+ );
2670
+ return finalizeSvgExport(container, theme, effectivePalette);
2671
+ }
2546
2672
  async function exportBoxesAndLines(ctx) {
2547
2673
  const { content, theme, palette, viewState, exportMode } = ctx;
2548
- const { parseBoxesAndLines } = await import("./parser-TRTHDFPP.js");
2674
+ const { parseBoxesAndLines } = await import("./parser-TITK4YW6.js");
2549
2675
  const effectivePalette = await resolveExportPalette(theme, palette);
2550
2676
  const blParsed = parseBoxesAndLines(content, effectivePalette);
2551
2677
  if (blParsed.error || blParsed.nodes.length === 0) return "";
@@ -2556,8 +2682,8 @@ async function exportBoxesAndLines(ctx) {
2556
2682
  blHiddenTagValues.set(k, new Set(v));
2557
2683
  }
2558
2684
  }
2559
- const { renderBoxesAndLinesForExport } = await import("./renderer-YY2OSF6E.js");
2560
- const { layoutBoxesAndLines } = await import("./layout-HRBZPFCN.js");
2685
+ const { renderBoxesAndLinesForExport } = await import("./renderer-SQ3JUAI7.js");
2686
+ const { layoutBoxesAndLines } = await import("./layout-34CLNICW.js");
2561
2687
  const blLayout = await layoutBoxesAndLines(blParsed);
2562
2688
  const PADDING = 20;
2563
2689
  const titleOffset = blParsed.title ? 40 : 0;
@@ -2586,9 +2712,9 @@ async function exportBoxesAndLines(ctx) {
2586
2712
  }
2587
2713
  async function exportSwimlane(ctx) {
2588
2714
  const { content, theme, palette } = ctx;
2589
- const { parseSwimlane } = await import("./parser-ZSDPZYQP.js");
2590
- const { layoutSwimlane } = await import("./layout-N76NR4ZO.js");
2591
- const { renderSwimlaneForExport } = await import("./renderer-JGBKUCZD.js");
2715
+ const { parseSwimlane } = await import("./parser-ZYC3XGNS.js");
2716
+ const { layoutSwimlane } = await import("./layout-PUQCB6AN.js");
2717
+ const { renderSwimlaneForExport } = await import("./renderer-VFUVRNLK.js");
2592
2718
  const effectivePalette = await resolveExportPalette(theme, palette);
2593
2719
  const swimParsed = parseSwimlane(content, effectivePalette);
2594
2720
  if (swimParsed.error || swimParsed.nodes.length === 0) return "";
@@ -2616,12 +2742,44 @@ async function exportSwimlane(ctx) {
2616
2742
  );
2617
2743
  return finalizeSvgExport(container, theme, effectivePalette);
2618
2744
  }
2745
+ async function exportFamily(ctx) {
2746
+ const { content, theme, palette } = ctx;
2747
+ const { parseFamily } = await import("./parser-UGA23PYK.js");
2748
+ const { layoutFamily } = await import("./layout-FGQWRYYW.js");
2749
+ const { renderFamilyForExport } = await import("./renderer-XEKIRPI6.js");
2750
+ const effectivePalette = await resolveExportPalette(theme, palette);
2751
+ const parsed = parseFamily(content, effectivePalette);
2752
+ if (parsed.error || parsed.persons.size === 0) return "";
2753
+ const layout = layoutFamily(parsed);
2754
+ const PADDING = 20;
2755
+ const titleOffset = parsed.title ? 40 : 0;
2756
+ const exportWidth = layout.width + PADDING * 2;
2757
+ const exportHeight = layout.height + PADDING * 2 + titleOffset;
2758
+ const container = createExportContainer(exportWidth, exportHeight);
2759
+ renderFamilyForExport(
2760
+ container,
2761
+ parsed,
2762
+ layout,
2763
+ effectivePalette,
2764
+ ctx.isDark,
2765
+ {
2766
+ exportDims: { width: exportWidth, height: exportHeight },
2767
+ activeTagGroup: resolveActiveTagGroup(
2768
+ parsed.tagGroups,
2769
+ parsed.options["active-tag"],
2770
+ ctxTagOverride(ctx)
2771
+ ),
2772
+ exportMode: ctx.exportMode
2773
+ }
2774
+ );
2775
+ return finalizeSvgExport(container, theme, effectivePalette);
2776
+ }
2619
2777
  async function exportMindmap(ctx) {
2620
2778
  const { content, theme, palette, viewState, exportMode } = ctx;
2621
- const { parseMindmap } = await import("./parser-N5O4IHUN.js");
2622
- const { layoutMindmap } = await import("./layout-UM5F4DJB.js");
2779
+ const { parseMindmap } = await import("./parser-WISPH7LW.js");
2780
+ const { layoutMindmap } = await import("./layout-K2ZN3Q42.js");
2623
2781
  const { collapseMindmapTree } = await import("./collapse-SLINJQW6.js");
2624
- const { renderMindmap } = await import("./renderer-N43WR5GV.js");
2782
+ const { renderMindmap } = await import("./renderer-UZF3JROD.js");
2625
2783
  const isDark = ctx.isDark;
2626
2784
  const effectivePalette = await resolveExportPalette(theme, palette);
2627
2785
  const mmParsed = parseMindmap(content, effectivePalette);
@@ -2671,9 +2829,9 @@ async function exportMindmap(ctx) {
2671
2829
  }
2672
2830
  async function exportWireframe(ctx) {
2673
2831
  const { content, theme, palette } = ctx;
2674
- const { parseWireframe } = await import("./parser-IXSZZQHY.js");
2675
- const { layoutWireframe } = await import("./layout-G23F7LDH.js");
2676
- const { renderWireframe } = await import("./renderer-QIWVHWZO.js");
2832
+ const { parseWireframe } = await import("./parser-BL7Z72EY.js");
2833
+ const { layoutWireframe } = await import("./layout-6RDJHS6E.js");
2834
+ const { renderWireframe } = await import("./renderer-DAXMXIKD.js");
2677
2835
  const effectivePalette = await resolveExportPalette(theme, palette);
2678
2836
  const wireframeParsed = parseWireframe(content);
2679
2837
  if (wireframeParsed.error || wireframeParsed.roots.length === 0 && wireframeParsed.modals.length === 0)
@@ -2696,14 +2854,14 @@ async function exportWireframe(ctx) {
2696
2854
  }
2697
2855
  async function exportC4(ctx) {
2698
2856
  const { content, theme, palette, viewState, exportMode } = ctx;
2699
- const { parseC4 } = await import("./parser-2EWECDSA.js");
2857
+ const { parseC4 } = await import("./parser-DERPY5KC.js");
2700
2858
  const {
2701
2859
  layoutC4Context,
2702
2860
  layoutC4Containers,
2703
2861
  layoutC4Components,
2704
2862
  layoutC4Deployment
2705
- } = await import("./layout-5RA6QWR6.js");
2706
- const { renderC4Context, renderC4Containers } = await import("./renderer-4JHRUBE6.js");
2863
+ } = await import("./layout-4Z5JM7PT.js");
2864
+ const { renderC4Context, renderC4Containers } = await import("./renderer-QL5KO6SK.js");
2707
2865
  const effectivePalette = await resolveExportPalette(theme, palette);
2708
2866
  const c4Parsed = parseC4(content, effectivePalette);
2709
2867
  if (c4Parsed.error || c4Parsed.elements.length === 0) return "";
@@ -2737,9 +2895,9 @@ async function exportC4(ctx) {
2737
2895
  }
2738
2896
  async function exportFlowchart(ctx) {
2739
2897
  const { content, theme, palette } = ctx;
2740
- const { parseFlowchart } = await import("./flowchart-parser-ZNSKIBVR.js");
2741
- const { layoutGraph } = await import("./layout-HWDSRX5E.js");
2742
- const { renderFlowchart } = await import("./flowchart-renderer-SNDSII4D.js");
2898
+ const { parseFlowchart } = await import("./flowchart-parser-IVZN7CQN.js");
2899
+ const { layoutGraph } = await import("./layout-D42XE4RE.js");
2900
+ const { renderFlowchart } = await import("./flowchart-renderer-GMI2U3DD.js");
2743
2901
  const effectivePalette = await resolveExportPalette(theme, palette);
2744
2902
  const fcParsed = parseFlowchart(content, effectivePalette);
2745
2903
  if (fcParsed.error || fcParsed.nodes.length === 0) return "";
@@ -2758,10 +2916,10 @@ async function exportFlowchart(ctx) {
2758
2916
  }
2759
2917
  async function exportInfra(ctx) {
2760
2918
  const { content, theme, palette, viewState } = ctx;
2761
- const { parseInfra } = await import("./parser-OV7NOBW6.js");
2919
+ const { parseInfra } = await import("./parser-4ROBKVUR.js");
2762
2920
  const { computeInfra } = await import("./compute-G55RG53N.js");
2763
- const { layoutInfra } = await import("./layout-7QXCNOVS.js");
2764
- const { renderInfra, computeInfraLegendGroups } = await import("./renderer-BYCNMBF7.js");
2921
+ const { layoutInfra } = await import("./layout-7H4H46CS.js");
2922
+ const { renderInfra, computeInfraLegendGroups } = await import("./renderer-CGW7QPNA.js");
2765
2923
  const effectivePalette = await resolveExportPalette(theme, palette);
2766
2924
  const infraParsed = parseInfra(content);
2767
2925
  if (infraParsed.error || infraParsed.nodes.length === 0) return "";
@@ -2808,10 +2966,10 @@ async function exportInfra(ctx) {
2808
2966
  }
2809
2967
  async function exportPert(ctx) {
2810
2968
  const { content, theme, palette, viewState } = ctx;
2811
- const { parsePert } = await import("./parser-3STE62GB.js");
2969
+ const { parsePert } = await import("./parser-QJYS7KQQ.js");
2812
2970
  const { analyzePert } = await import("./analyzer-UYKBXAKR.js");
2813
- const { layoutPert } = await import("./layout-S2QBYSK2.js");
2814
- const { renderPert, measurePertAnalysisBlock } = await import("./renderer-AWWAF6XD.js");
2971
+ const { layoutPert } = await import("./layout-NXG63LWH.js");
2972
+ const { renderPert, measurePertAnalysisBlock } = await import("./renderer-4IUPINAE.js");
2815
2973
  const effectivePalette = await resolveExportPalette(theme, palette);
2816
2974
  const pertParsed = parsePert(content, { palette: effectivePalette });
2817
2975
  if (pertParsed.error || pertParsed.activities.length === 0) return "";
@@ -2849,9 +3007,9 @@ async function exportPert(ctx) {
2849
3007
  }
2850
3008
  async function exportGantt(ctx) {
2851
3009
  const { content, theme, palette, viewState, exportMode } = ctx;
2852
- const { parseGantt } = await import("./parser-AQETEVRW.js");
3010
+ const { parseGantt } = await import("./parser-CLMFZWCC.js");
2853
3011
  const { calculateSchedule } = await import("./calculator-LDYQCDDY.js");
2854
- const { renderGantt } = await import("./renderer-VACVQYML.js");
3012
+ const { renderGantt } = await import("./renderer-LWGJFT3D.js");
2855
3013
  const effectivePalette = await resolveExportPalette(theme, palette);
2856
3014
  const ganttParsed = parseGantt(content, effectivePalette);
2857
3015
  const resolved = calculateSchedule(ganttParsed);
@@ -2892,9 +3050,9 @@ async function exportGantt(ctx) {
2892
3050
  }
2893
3051
  async function exportState(ctx) {
2894
3052
  const { content, theme, palette, viewState } = ctx;
2895
- const { parseState } = await import("./state-parser-Z2V23ATR.js");
2896
- const { layoutGraph } = await import("./layout-HWDSRX5E.js");
2897
- const { renderState } = await import("./state-renderer-B4DQBM6M.js");
3053
+ const { parseState } = await import("./state-parser-RX3GXOIB.js");
3054
+ const { layoutGraph } = await import("./layout-D42XE4RE.js");
3055
+ const { renderState } = await import("./state-renderer-AJUKGNWU.js");
2898
3056
  const { collapseStateGroups } = await import("./state-collapse-HCGD6IVJ.js");
2899
3057
  const effectivePalette = await resolveExportPalette(theme, palette);
2900
3058
  const stateParsed = parseState(content, effectivePalette);
@@ -2931,8 +3089,8 @@ async function exportState(ctx) {
2931
3089
  }
2932
3090
  async function exportTechRadar(ctx) {
2933
3091
  const { content, theme, palette, viewState, exportMode } = ctx;
2934
- const { parseTechRadar } = await import("./parser-2MFP2H2E.js");
2935
- const { renderTechRadarForExport } = await import("./renderer-ZGNTUWC4.js");
3092
+ const { parseTechRadar } = await import("./parser-HVJFTOXL.js");
3093
+ const { renderTechRadarForExport } = await import("./renderer-ROV756WT.js");
2936
3094
  const effectivePalette = await resolveExportPalette(theme, palette);
2937
3095
  const radarParsed = parseTechRadar(content);
2938
3096
  if (radarParsed.error || radarParsed.quadrants.length === 0) return "";
@@ -2952,9 +3110,9 @@ async function exportTechRadar(ctx) {
2952
3110
  }
2953
3111
  async function exportJourneyMap(ctx) {
2954
3112
  const { content, theme, palette, exportMode } = ctx;
2955
- const { parseJourneyMap } = await import("./parser-I6KXEYFK.js");
2956
- const { renderJourneyMap } = await import("./renderer-CLJHQPBJ.js");
2957
- const { layoutJourneyMap } = await import("./layout-HYZPWAK5.js");
3113
+ const { parseJourneyMap } = await import("./parser-TNYX5S7E.js");
3114
+ const { renderJourneyMap } = await import("./renderer-YHXPN3GF.js");
3115
+ const { layoutJourneyMap } = await import("./layout-QNUQLEHU.js");
2958
3116
  const effectivePalette = await resolveExportPalette(theme, palette);
2959
3117
  const jmParsed = parseJourneyMap(content, effectivePalette);
2960
3118
  if (jmParsed.error || jmParsed.phases.length === 0 && jmParsed.steps.length === 0)
@@ -2974,8 +3132,8 @@ async function exportJourneyMap(ctx) {
2974
3132
  }
2975
3133
  async function exportCycle(ctx) {
2976
3134
  const { content, theme, palette, viewState, exportMode } = ctx;
2977
- const { parseCycle } = await import("./parser-VQP2UJ6W.js");
2978
- const { renderCycleForExport } = await import("./renderer-Z7I3W2PP.js");
3135
+ const { parseCycle } = await import("./parser-IKZFTLOJ.js");
3136
+ const { renderCycleForExport } = await import("./renderer-VICQ4WNY.js");
2979
3137
  const effectivePalette = await resolveExportPalette(theme, palette);
2980
3138
  const cycleParsed = parseCycle(content);
2981
3139
  if (cycleParsed.error || cycleParsed.nodes.length === 0) return "";
@@ -2993,10 +3151,10 @@ async function exportCycle(ctx) {
2993
3151
  }
2994
3152
  async function exportMap(ctx) {
2995
3153
  const { content, theme, palette, options } = ctx;
2996
- const { parseMap } = await import("./parser-4FL2CMDG.js");
2997
- const { resolveMap } = await import("./resolver-NOAA7ID7.js");
2998
- const { renderMapForExport } = await import("./renderer-SMIBCRVB.js");
2999
- const { mapExportDimensions } = await import("./dimensions-J3FHIMJ6.js");
3154
+ const { parseMap } = await import("./parser-MBJSBTL5.js");
3155
+ const { resolveMap } = await import("./resolver-FHBCO3PL.js");
3156
+ const { renderMapForExport } = await import("./renderer-6L3NBEY5.js");
3157
+ const { mapExportDimensions } = await import("./dimensions-WSIJXT5Q.js");
3000
3158
  const effectivePalette = await resolveExportPalette(theme, palette);
3001
3159
  const mapParsed = parseMap(content, effectivePalette);
3002
3160
  let mapData = options?.mapData;
@@ -3028,8 +3186,8 @@ async function exportMap(ctx) {
3028
3186
  }
3029
3187
  async function exportPyramid(ctx) {
3030
3188
  const { content, theme, palette } = ctx;
3031
- const { parsePyramid } = await import("./parser-XKRP7QKP.js");
3032
- const { renderPyramidForExport } = await import("./renderer-KQB7UGDS.js");
3189
+ const { parsePyramid } = await import("./parser-D6ONJQFR.js");
3190
+ const { renderPyramidForExport } = await import("./renderer-7RH2SI3B.js");
3033
3191
  const effectivePalette = await resolveExportPalette(theme, palette);
3034
3192
  const pyramidParsed = parsePyramid(content);
3035
3193
  if (pyramidParsed.error || pyramidParsed.layers.length === 0) return "";
@@ -3045,8 +3203,8 @@ async function exportPyramid(ctx) {
3045
3203
  }
3046
3204
  async function exportRing(ctx) {
3047
3205
  const { content, theme, palette } = ctx;
3048
- const { parseRing } = await import("./parser-O5J4VBII.js");
3049
- const { renderRingForExport } = await import("./renderer-UV6MI64M.js");
3206
+ const { parseRing } = await import("./parser-K647FRI4.js");
3207
+ const { renderRingForExport } = await import("./renderer-HVCU2C3Z.js");
3050
3208
  const effectivePalette = await resolveExportPalette(theme, palette);
3051
3209
  const ringParsed = parseRing(content);
3052
3210
  if (ringParsed.error || ringParsed.layers.length === 0) return "";
@@ -3059,14 +3217,14 @@ async function exportRing(ctx) {
3059
3217
  }
3060
3218
  async function exportTreemap(ctx) {
3061
3219
  const { content, theme, palette } = ctx;
3062
- const { parseTreemap } = await import("./parser-CFZD5IBL.js");
3220
+ const { parseTreemap } = await import("./parser-XWUDFJ7P.js");
3063
3221
  const effectivePalette = await resolveExportPalette(theme, palette);
3064
3222
  const treemapParsed = parseTreemap(content, effectivePalette);
3065
3223
  if (treemapParsed.error || treemapParsed.roots.length === 0) return "";
3066
3224
  const container = createExportContainer(EXPORT_WIDTH, EXPORT_HEIGHT);
3067
3225
  const dims = { width: EXPORT_WIDTH, height: EXPORT_HEIGHT };
3068
3226
  if (treemapParsed.options.radial) {
3069
- const { renderTreemapRadialForExport } = await import("./renderer-radial-C32GPJQ7.js");
3227
+ const { renderTreemapRadialForExport } = await import("./renderer-radial-MHO2VDXN.js");
3070
3228
  renderTreemapRadialForExport(
3071
3229
  container,
3072
3230
  treemapParsed,
@@ -3075,7 +3233,7 @@ async function exportTreemap(ctx) {
3075
3233
  dims
3076
3234
  );
3077
3235
  } else {
3078
- const { renderTreemapForExport } = await import("./renderer-7MVLWWQD.js");
3236
+ const { renderTreemapForExport } = await import("./renderer-DKESNMU5.js");
3079
3237
  renderTreemapForExport(
3080
3238
  container,
3081
3239
  treemapParsed,
@@ -3088,8 +3246,8 @@ async function exportTreemap(ctx) {
3088
3246
  }
3089
3247
  async function exportBlock(ctx) {
3090
3248
  const { content, theme, palette } = ctx;
3091
- const { parseBlock } = await import("./parser-4OGOBJJ4.js");
3092
- const { renderBlockForExport } = await import("./renderer-PGX2TKVS.js");
3249
+ const { parseBlock } = await import("./parser-GFSOPDB7.js");
3250
+ const { renderBlockForExport } = await import("./renderer-MFJ7HY2H.js");
3093
3251
  const effectivePalette = await resolveExportPalette(theme, palette);
3094
3252
  const blockParsed = parseBlock(content, effectivePalette);
3095
3253
  if (blockParsed.error || blockParsed.top.rows.length === 0) return "";
@@ -3102,8 +3260,8 @@ async function exportBlock(ctx) {
3102
3260
  }
3103
3261
  async function exportRaci(ctx) {
3104
3262
  const { content, theme, palette } = ctx;
3105
- const { parseRaci } = await import("./parser-Y6WTBU76.js");
3106
- const { renderRaciForExport } = await import("./renderer-5MYBMBYO.js");
3263
+ const { parseRaci } = await import("./parser-UBGPTIZD.js");
3264
+ const { renderRaciForExport } = await import("./renderer-BB5PREMY.js");
3107
3265
  const effectivePalette = await resolveExportPalette(theme, palette);
3108
3266
  const raciParsed = parseRaci(content, effectivePalette);
3109
3267
  if (raciParsed.error) return "";
@@ -3235,8 +3393,8 @@ async function exportVisualization(ctx) {
3235
3393
  const effectivePalette = await resolveExportPalette(theme, palette);
3236
3394
  const isDark = ctx.isDark;
3237
3395
  const container = createExportContainer(EXPORT_WIDTH, EXPORT_HEIGHT);
3238
- const { parseSequenceDgmo } = await import("./parser-PQ3POX45.js");
3239
- const { renderSequenceDiagram } = await import("./renderer-6W5462RB.js");
3396
+ const { parseSequenceDgmo } = await import("./parser-JD7OQ2E6.js");
3397
+ const { renderSequenceDiagram } = await import("./renderer-V3JEMWMM.js");
3240
3398
  const seqParsed = parseSequenceDgmo(content, effectivePalette);
3241
3399
  if (seqParsed.error || seqParsed.participants.length === 0) return "";
3242
3400
  const collapsedSections = viewState?.cs ? new Set(viewState.cs) : void 0;
@@ -3272,6 +3430,7 @@ function escCssString(value) {
3272
3430
  if (ch === '"') out += '\\"';
3273
3431
  else if (ch === "\\") out += "\\\\";
3274
3432
  else if (ch === "<") out += "\\3c ";
3433
+ else if (ch === "&") out += "\\26 ";
3275
3434
  else if (code < 32 || code === 127)
3276
3435
  out += "\\" + code.toString(16) + " ";
3277
3436
  else out += ch;
@@ -3483,6 +3642,12 @@ var HOVER_SPECS = {
3483
3642
  groupAttrMode: "tag-active",
3484
3643
  legend: true
3485
3644
  },
3645
+ body: {
3646
+ markSelector: ".dgmo-body-part",
3647
+ strategy: "enumerated",
3648
+ groupAttrMode: "tag-active",
3649
+ legend: true
3650
+ },
3486
3651
  // ── Connection graph-family — edge endpoint attrs baked in the renderers ──
3487
3652
  // Hover a node → dim edges not incident to it. Node id ↔ edge from/to.
3488
3653
  flowchart: {
@@ -3512,6 +3677,15 @@ var HOVER_SPECS = {
3512
3677
  fromAttr: "data-from",
3513
3678
  toAttr: "data-to"
3514
3679
  },
3680
+ sketch: {
3681
+ markSelector: ".sk-node",
3682
+ strategy: "connection",
3683
+ hoverSelector: ".sk-node",
3684
+ hoverAttr: "data-node-id",
3685
+ edgeSelector: ".sk-edge-group",
3686
+ fromAttr: "data-from",
3687
+ toAttr: "data-to"
3688
+ },
3515
3689
  infra: {
3516
3690
  markSelector: ".infra-node",
3517
3691
  strategy: "connection",
@@ -3606,10 +3780,11 @@ var HOVER_SPECS = {
3606
3780
  emphasis: "dim",
3607
3781
  selfEmphasis: false
3608
3782
  },
3609
- // line: each series is a `g.dgmo-series` wrapping its line + data dots. The
3610
- // dots are hittable, so a structural rule dims other series when a point is
3611
- // hovered — no fat hit-path needed. (The plot-area hit overlay sits BEHIND
3612
- // the series, so dot hover still lands; verified in the browser e2e.)
3783
+ // line: each series is a `g.dgmo-series` wrapping its line + data dots + an
3784
+ // invisible fat hit corridor (`.dgmo-series-hit`, renderer-baked) — without
3785
+ // the corridor only the 2.5px stroke and 4px dots were hittable, so the
3786
+ // baked hover read as dead in embeds. Hovering anywhere along a line puts
3787
+ // its group into `:hover` and the other series dim.
3613
3788
  line: {
3614
3789
  markSelector: "g.dgmo-series",
3615
3790
  strategy: "structural",
@@ -3841,8 +4016,8 @@ async function render(content, options) {
3841
4016
  try {
3842
4017
  const [{ parseMap }, { resolveMap }, { loadMapData }] = await Promise.all(
3843
4018
  [
3844
- import("./parser-4FL2CMDG.js"),
3845
- import("./resolver-NOAA7ID7.js"),
4019
+ import("./parser-MBJSBTL5.js"),
4020
+ import("./resolver-FHBCO3PL.js"),
3846
4021
  import("./load-data-EHDDZ5ZS.js")
3847
4022
  ]
3848
4023
  );
@@ -3965,4 +4140,4 @@ export {
3965
4140
  encodeDiagramUrl,
3966
4141
  decodeDiagramUrl
3967
4142
  };
3968
- //# sourceMappingURL=chunk-PZMETGLY.js.map
4143
+ //# sourceMappingURL=chunk-SVDWQGX2.js.map