@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
@@ -1,51 +1,53 @@
1
1
  import {
2
2
  computeNodeText,
3
3
  layoutMindmap
4
- } from "./chunk-QMFIZQTB.js";
5
- import {
6
- extractExportSvg,
7
- runInExportContainer
8
- } from "./chunk-VV6HZQ5K.js";
4
+ } from "./chunk-IDGQB6XD.js";
9
5
  import {
10
6
  renderInlineText
11
- } from "./chunk-WGC42WJU.js";
7
+ } from "./chunk-FWNJDD4U.js";
8
+ import {
9
+ ScaleContext
10
+ } from "./chunk-24YPR5EH.js";
12
11
  import {
12
+ CARD_RADIUS,
13
13
  COLLAPSE_BAR_HEIGHT,
14
14
  EDGE_STROKE_WIDTH,
15
+ HEADER_HEIGHT,
15
16
  NODE_STROKE_WIDTH
16
- } from "./chunk-FJ57274M.js";
17
+ } from "./chunk-IIEI7VK5.js";
17
18
  import {
18
- ScaleContext
19
- } from "./chunk-24YPR5EH.js";
19
+ extractExportSvg,
20
+ runInExportContainer
21
+ } from "./chunk-QFIXL3OK.js";
20
22
  import {
21
23
  layoutInlineHeader
22
- } from "./chunk-MG3DE3VO.js";
24
+ } from "./chunk-FLMXJMMY.js";
23
25
  import {
24
26
  TITLE_FONT_SIZE,
25
27
  TITLE_FONT_WEIGHT
26
- } from "./chunk-DEW62ON3.js";
28
+ } from "./chunk-VSPNH7LC.js";
27
29
  import {
28
30
  renderIntegratedLegend
29
- } from "./chunk-QT5UMFPE.js";
31
+ } from "./chunk-67I3HFSF.js";
30
32
  import {
31
33
  getLegendExtent,
32
34
  getMaxLegendReservedHeight
33
- } from "./chunk-4SXHMFFP.js";
35
+ } from "./chunk-IZTU6WVR.js";
34
36
  import {
35
37
  FONT_FAMILY
36
- } from "./chunk-UTCPNJND.js";
38
+ } from "./chunk-ICLB27PZ.js";
37
39
  import {
38
40
  LEGEND_GROUP_GAP
39
- } from "./chunk-YT5ICQ4R.js";
41
+ } from "./chunk-MFK7LF66.js";
40
42
  import {
41
43
  parseMindmap
42
- } from "./chunk-QOVM5VRC.js";
44
+ } from "./chunk-57GSSHBR.js";
43
45
  import {
44
46
  preprocessDescriptionLine
45
47
  } from "./chunk-IYULMRBE.js";
46
48
  import {
47
49
  tagAttrKey
48
- } from "./chunk-76LHNLGX.js";
50
+ } from "./chunk-R4YGH7DJ.js";
49
51
  import {
50
52
  fillModeFromOptions,
51
53
  legendInlineRequested,
@@ -54,16 +56,14 @@ import {
54
56
  import {
55
57
  contrastText,
56
58
  shapeFill
57
- } from "./chunk-GLREDNBA.js";
59
+ } from "./chunk-YVLTNNME.js";
58
60
 
59
61
  // src/mindmap/renderer.ts
60
62
  import * as d3Selection from "d3-selection";
61
63
  var DIAGRAM_PADDING = 20;
62
64
  var TITLE_HEIGHT = 30;
63
- var SINGLE_LABEL_HEIGHT = 28;
64
65
  var LABEL_LINE_HEIGHT = 18;
65
66
  var DESC_LINE_HEIGHT = 14;
66
- var NODE_RADIUS = 6;
67
67
  var ROOT_STROKE_WIDTH = 2.5;
68
68
  function nodeFill(palette, isDark, nodeColor, fillMode) {
69
69
  const color = nodeColor ?? palette.primary;
@@ -318,7 +318,7 @@ function renderMindmap(container, parsed, layout, palette, isDark, onClickItem,
318
318
  node.hiddenCount != null && node.hiddenCount > 0 ? "false" : "true"
319
319
  ).attr("aria-label", node.label);
320
320
  }
321
- nodeG.append("rect").attr("x", node.x).attr("y", node.y).attr("width", node.width).attr("height", node.height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", strokeW);
321
+ nodeG.append("rect").attr("x", node.x).attr("y", node.y).attr("width", node.width).attr("height", node.height).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", strokeW);
322
322
  const collapsed = node.hiddenCount != null && node.hiddenCount > 0;
323
323
  const showDesc = !hideDescriptions && !!node.description && !collapsed;
324
324
  const textLayout = computeNodeText(
@@ -335,7 +335,7 @@ function renderMindmap(container, parsed, layout, palette, isDark, onClickItem,
335
335
  descFontSize
336
336
  } = textLayout;
337
337
  const labelLineCount = labelLines.length;
338
- const labelZoneH = labelLineCount <= 1 ? SINGLE_LABEL_HEIGHT : LABEL_LINE_HEIGHT * labelLineCount;
338
+ const labelZoneH = labelLineCount <= 1 ? HEADER_HEIGHT : LABEL_LINE_HEIGHT * labelLineCount;
339
339
  const labelZoneHeight = showDesc ? labelZoneH : node.height;
340
340
  const centerX = node.x + node.width / 2;
341
341
  if (labelLineCount <= 1) {
@@ -372,7 +372,7 @@ function renderMindmap(container, parsed, layout, palette, isDark, onClickItem,
372
372
  if (!isExport && node.hiddenCount != null && node.hiddenCount > 0) {
373
373
  const clipId = `collapse-clip-${node.id}`;
374
374
  const defs = mainG.append("defs");
375
- defs.append("clipPath").attr("id", clipId).append("rect").attr("x", node.x).attr("y", node.y).attr("width", node.width).attr("height", node.height).attr("rx", NODE_RADIUS).attr("ry", NODE_RADIUS);
375
+ defs.append("clipPath").attr("id", clipId).append("rect").attr("x", node.x).attr("y", node.y).attr("width", node.width).attr("height", node.height).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS);
376
376
  nodeG.append("rect").attr("class", "collapse-bar").attr("x", node.x).attr("y", node.y + node.height - COLLAPSE_BAR_HEIGHT).attr("width", node.width).attr("height", COLLAPSE_BAR_HEIGHT).attr("fill", stroke).attr("clip-path", `url(#${clipId})`);
377
377
  }
378
378
  if (onClickItem) {
@@ -426,4 +426,4 @@ export {
426
426
  renderMindmap,
427
427
  renderMindmapForExport
428
428
  };
429
- //# sourceMappingURL=chunk-IHUOYDLN.js.map
429
+ //# sourceMappingURL=chunk-36UQ77JV.js.map
@@ -0,0 +1,10 @@
1
+ // src/utils/now.ts
2
+ var pinnedMs = null;
3
+ function now() {
4
+ return pinnedMs ?? Date.now();
5
+ }
6
+
7
+ export {
8
+ now
9
+ };
10
+ //# sourceMappingURL=chunk-3DPOIW3W.js.map
@@ -9,7 +9,7 @@ import {
9
9
  stripDefaultModifier,
10
10
  tagAttrKey,
11
11
  validateTagGroupNames
12
- } from "./chunk-76LHNLGX.js";
12
+ } from "./chunk-R4YGH7DJ.js";
13
13
  import {
14
14
  AliasRegistry,
15
15
  KANBAN_REGISTRY,
@@ -400,4 +400,4 @@ function parseCardLine(trimmed, lineNumber, counter, metaAliasMap, _palette, dia
400
400
  export {
401
401
  parseKanban
402
402
  };
403
- //# sourceMappingURL=chunk-3SP6G4LN.js.map
403
+ //# sourceMappingURL=chunk-3GLTQZKE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isTagBlockHeading
3
- } from "./chunk-76LHNLGX.js";
3
+ } from "./chunk-R4YGH7DJ.js";
4
4
  import {
5
5
  OPTION_NOCOLON_RE,
6
6
  measureIndent,
@@ -690,4 +690,4 @@ export {
690
690
  resetWireframeIds,
691
691
  parseWireframe
692
692
  };
693
- //# sourceMappingURL=chunk-DY7KDZUF.js.map
693
+ //# sourceMappingURL=chunk-3OWIYK52.js.map
@@ -1,17 +1,20 @@
1
+ import {
2
+ paintRootBackground
3
+ } from "./chunk-QFIXL3OK.js";
1
4
  import {
2
5
  serializeSvg
3
- } from "./chunk-RU2HHHYA.js";
6
+ } from "./chunk-LD2JSKU3.js";
4
7
  import {
5
8
  TITLE_FONT_SIZE,
6
9
  TITLE_FONT_WEIGHT,
7
10
  TITLE_Y
8
- } from "./chunk-DEW62ON3.js";
11
+ } from "./chunk-VSPNH7LC.js";
9
12
  import {
10
13
  FONT_FAMILY
11
- } from "./chunk-UTCPNJND.js";
14
+ } from "./chunk-ICLB27PZ.js";
12
15
  import {
13
16
  getSeriesColors
14
- } from "./chunk-GLREDNBA.js";
17
+ } from "./chunk-YVLTNNME.js";
15
18
 
16
19
  // src/utils/d3-helpers.ts
17
20
  import * as d3Selection from "d3-selection";
@@ -90,8 +93,9 @@ var EXPORT_WIDTH = 1200;
90
93
  var EXPORT_HEIGHT = 800;
91
94
  async function resolveExportPalette(theme, palette) {
92
95
  if (palette) return palette;
93
- const { getPalette } = await import("./palettes-54YSI3IX.js");
94
- return theme === "dark" ? getPalette("nord").dark : getPalette("nord").light;
96
+ const { getPalette, DEFAULT_PALETTE_ID } = await import("./palettes-YIPSRYXP.js");
97
+ const cfg = getPalette(DEFAULT_PALETTE_ID);
98
+ return theme === "dark" ? cfg.dark : cfg.light;
95
99
  }
96
100
  function createExportContainer(width, height) {
97
101
  const container = document.createElement("div");
@@ -113,6 +117,7 @@ function finalizeSvgExport(container, theme, palette) {
113
117
  svgEl.setAttribute("xmlns", "http://www.w3.org/2000/svg");
114
118
  svgEl.style.fontFamily = FONT_FAMILY;
115
119
  svgEl.querySelectorAll("[data-export-ignore]").forEach((el) => el.remove());
120
+ paintRootBackground(svgEl, theme, palette.bg);
116
121
  const svgHtml = serializeSvg(svgEl);
117
122
  document.body.removeChild(container);
118
123
  return svgHtml;
@@ -130,4 +135,4 @@ export {
130
135
  createExportContainer,
131
136
  finalizeSvgExport
132
137
  };
133
- //# sourceMappingURL=chunk-UBW53CNS.js.map
138
+ //# sourceMappingURL=chunk-3XFOE3DQ.js.map
@@ -4,7 +4,7 @@ import {
4
4
  matchTagBlockHeading,
5
5
  stripDefaultModifier,
6
6
  tagAttrKey
7
- } from "./chunk-76LHNLGX.js";
7
+ } from "./chunk-R4YGH7DJ.js";
8
8
  import {
9
9
  FILL_FAMILY_TOKENS,
10
10
  extractColor,
@@ -692,4 +692,4 @@ export {
692
692
  SWIMLANE_DIAGNOSTICS,
693
693
  parseSwimlane
694
694
  };
695
- //# sourceMappingURL=chunk-W7UBPARG.js.map
695
+ //# sourceMappingURL=chunk-3ZLQM6XN.js.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ EDGE_DASH
3
+ } from "./chunk-IIEI7VK5.js";
1
4
  import {
2
5
  measureText
3
6
  } from "./chunk-MTGGOCND.js";
@@ -6,7 +9,7 @@ import {
6
9
  function renderNodeCard(container, opts) {
7
10
  const rect = container.append("rect").attr("x", 0).attr("y", 0).attr("width", opts.width).attr("height", opts.height).attr("rx", opts.rx).attr("fill", opts.fill).attr("stroke", opts.stroke).attr("stroke-width", opts.strokeWidth);
8
11
  if (opts.dashed) {
9
- rect.attr("stroke-dasharray", "6 3");
12
+ rect.attr("stroke-dasharray", EDGE_DASH);
10
13
  }
11
14
  const labelLines = opts.labelLines;
12
15
  if (labelLines && labelLines.length > 1) {
@@ -44,4 +47,4 @@ export {
44
47
  renderNodeCard,
45
48
  renderCollapseBar
46
49
  };
47
- //# sourceMappingURL=chunk-5GM6BZO7.js.map
50
+ //# sourceMappingURL=chunk-4AWLEWSD.js.map
@@ -4,46 +4,57 @@ import {
4
4
  layoutC4Containers,
5
5
  layoutC4Context,
6
6
  layoutC4Deployment
7
- } from "./chunk-FPRMP6YA.js";
7
+ } from "./chunk-AHN2CVCH.js";
8
+ import {
9
+ appendArrowheadMarkers,
10
+ appendReverseArrowheadMarkers
11
+ } from "./chunk-XBJJP2HN.js";
8
12
  import {
9
13
  renderInlineText
10
- } from "./chunk-WGC42WJU.js";
14
+ } from "./chunk-FWNJDD4U.js";
11
15
  import {
16
+ ARROWHEAD_HEIGHT,
17
+ ARROWHEAD_WIDTH,
12
18
  CARD_RADIUS,
19
+ COLLAPSE_BAR_HEIGHT,
20
+ CONTAINER_RADIUS,
21
+ EDGE_DASH,
22
+ EDGE_LABEL_KNOCKOUT_OPACITY,
13
23
  EDGE_STROKE_WIDTH,
24
+ LABEL_FONT_SIZE,
14
25
  META_FONT_SIZE,
15
26
  META_LINE_HEIGHT,
16
27
  NODE_STROKE_WIDTH
17
- } from "./chunk-FJ57274M.js";
28
+ } from "./chunk-IIEI7VK5.js";
18
29
  import {
19
30
  serializeSvg
20
- } from "./chunk-RU2HHHYA.js";
31
+ } from "./chunk-LD2JSKU3.js";
21
32
  import {
22
33
  TITLE_FONT_SIZE,
23
34
  TITLE_FONT_WEIGHT
24
- } from "./chunk-DEW62ON3.js";
35
+ } from "./chunk-VSPNH7LC.js";
25
36
  import {
26
37
  renderIntegratedLegend
27
- } from "./chunk-QT5UMFPE.js";
38
+ } from "./chunk-67I3HFSF.js";
28
39
  import {
29
40
  FONT_FAMILY
30
- } from "./chunk-UTCPNJND.js";
41
+ } from "./chunk-ICLB27PZ.js";
31
42
  import {
32
43
  LEGEND_HEIGHT
33
- } from "./chunk-YT5ICQ4R.js";
44
+ } from "./chunk-MFK7LF66.js";
34
45
  import {
35
46
  measureText,
36
47
  wrapTextToWidth
37
48
  } from "./chunk-MTGGOCND.js";
38
49
  import {
39
50
  parseC4
40
- } from "./chunk-ZM27UI5O.js";
51
+ } from "./chunk-A7Y32YD6.js";
41
52
  import {
42
53
  preprocessDescriptionLine
43
54
  } from "./chunk-IYULMRBE.js";
44
55
  import {
45
56
  tagAttrKey
46
- } from "./chunk-76LHNLGX.js";
57
+ } from "./chunk-R4YGH7DJ.js";
47
58
  import {
48
59
  fillModeFromOptions
49
60
  } from "./chunk-M5OOAP65.js";
@@ -51,7 +62,7 @@ import {
51
62
  contrastText,
52
63
  mix,
53
64
  shapeFill
54
- } from "./chunk-GLREDNBA.js";
65
+ } from "./chunk-YVLTNNME.js";
55
66
 
56
67
  // src/c4/renderer.ts
57
68
  import * as d3Selection from "d3-selection";
@@ -60,9 +71,6 @@ var DIAGRAM_PADDING = 20;
60
71
  var MAX_SCALE = 3;
61
72
  var TITLE_HEIGHT = 30;
62
73
  var TYPE_FONT_SIZE = 10;
63
- var NAME_FONT_SIZE = 14;
64
- var DESC_FONT_SIZE = 11;
65
- var DESC_LINE_HEIGHT = 16;
66
74
  var EDGE_LABEL_FONT_SIZE = 11;
67
75
  var TECH_FONT_SIZE = 10;
68
76
  var CARD_H_PAD = 20;
@@ -71,9 +79,6 @@ var TYPE_LABEL_HEIGHT = 18;
71
79
  var DIVIDER_GAP = 6;
72
80
  var NAME_HEIGHT = 20;
73
81
  var BOUNDARY_LABEL_FONT_SIZE = 12;
74
- var BOUNDARY_STROKE_WIDTH = 1.5;
75
- var BOUNDARY_RADIUS = 8;
76
- var DRILL_BAR_HEIGHT = 6;
77
82
  var CYLINDER_RY = 8;
78
83
  var PERSON_HEAD_R = 4;
79
84
  var PERSON_ARM_SPAN = 10;
@@ -141,10 +146,17 @@ function renderC4Context(container, parsed, layout, palette, isDark, onClickItem
141
146
  const offsetY = titleHeight + DIAGRAM_PADDING + legendReserveH;
142
147
  const svg = d3Selection.select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMid meet").style("font-family", FONT_FAMILY);
143
148
  const defs = svg.append("defs");
144
- const AW = 10;
145
- const AH = 7;
146
- defs.append("marker").attr("id", "c4-arrow-end").attr("viewBox", `0 0 ${AW} ${AH}`).attr("refX", AW).attr("refY", AH / 2).attr("markerWidth", AW).attr("markerHeight", AH).attr("orient", "auto").append("polygon").attr("points", `0,0 ${AW},${AH / 2} 0,${AH}`).attr("fill", palette.textMuted);
147
- defs.append("marker").attr("id", "c4-arrow-start").attr("viewBox", `0 0 ${AW} ${AH}`).attr("refX", 0).attr("refY", AH / 2).attr("markerWidth", AW).attr("markerHeight", AH).attr("orient", "auto").append("polygon").attr("points", `${AW},0 0,${AH / 2} ${AW},${AH}`).attr("fill", palette.textMuted);
149
+ const markerOpts = {
150
+ idPrefix: "c4",
151
+ width: ARROWHEAD_WIDTH,
152
+ height: ARROWHEAD_HEIGHT,
153
+ baseFill: palette.textMuted
154
+ };
155
+ appendArrowheadMarkers(defs, markerOpts);
156
+ appendReverseArrowheadMarkers(defs, {
157
+ ...markerOpts,
158
+ reverseSuffix: "arrow-start"
159
+ });
148
160
  if (parsed.title && parsed.options["no-title"] !== "on") {
149
161
  const titleEl = svg.append("text").attr("class", "chart-title").attr("x", width / 2).attr("y", 30).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", TITLE_FONT_SIZE).attr("font-weight", TITLE_FONT_WEIGHT).style(
150
162
  "cursor",
@@ -175,9 +187,9 @@ function renderC4Context(container, parsed, layout, palette, isDark, onClickItem
175
187
  const bidir = hasBidirectionalMarkers(edge.arrowType);
176
188
  const pathD = lineGenerator(edge.points);
177
189
  if (pathD) {
178
- const pathEl = edgeG.append("path").attr("d", pathD).attr("fill", "none").attr("stroke", edgeColor).attr("stroke-width", EDGE_STROKE_WIDTH).attr("class", "c4-edge").attr("marker-end", "url(#c4-arrow-end)");
190
+ const pathEl = edgeG.append("path").attr("d", pathD).attr("fill", "none").attr("stroke", edgeColor).attr("stroke-width", EDGE_STROKE_WIDTH).attr("class", "c4-edge").attr("marker-end", "url(#c4-arrow)");
179
191
  if (dashed) {
180
- pathEl.attr("stroke-dasharray", "6 3");
192
+ pathEl.attr("stroke-dasharray", EDGE_DASH);
181
193
  }
182
194
  if (bidir) {
183
195
  pathEl.attr("marker-start", "url(#c4-arrow-start)");
@@ -194,7 +206,7 @@ function renderC4Context(container, parsed, layout, palette, isDark, onClickItem
194
206
  );
195
207
  const bgW = textW + 12;
196
208
  const bgH = (labelText ? 16 : 0) + (techText ? 14 : 0) + 4;
197
- edgeG.append("rect").attr("x", midPt.x - bgW / 2).attr("y", midPt.y - bgH / 2).attr("width", bgW).attr("height", bgH).attr("rx", 3).attr("fill", palette.bg).attr("opacity", 0.9).attr("class", "c4-edge-label-bg");
209
+ edgeG.append("rect").attr("x", midPt.x - bgW / 2).attr("y", midPt.y - bgH / 2).attr("width", bgW).attr("height", bgH).attr("rx", 3).attr("fill", palette.bg).attr("opacity", EDGE_LABEL_KNOCKOUT_OPACITY).attr("class", "c4-edge-label-bg");
198
210
  let textY = midPt.y;
199
211
  if (labelText && techText) {
200
212
  textY = midPt.y - 4;
@@ -247,7 +259,7 @@ function renderC4Context(container, parsed, layout, palette, isDark, onClickItem
247
259
  nodeG.append("text").attr("x", 0).attr("y", yPos + TYPE_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", TYPE_FONT_SIZE).attr("font-style", "italic").text(typeLabel);
248
260
  yPos += TYPE_LABEL_HEIGHT;
249
261
  if (node.type === "person") {
250
- const textWidth = measureText(node.name, NAME_FONT_SIZE, { bold: true });
262
+ const textWidth = measureText(node.name, LABEL_FONT_SIZE, { bold: true });
251
263
  const gap = 6;
252
264
  const totalWidth = PERSON_ICON_W + gap + textWidth;
253
265
  const iconCx = -totalWidth / 2 + PERSON_ICON_W / 2;
@@ -255,38 +267,38 @@ function renderC4Context(container, parsed, layout, palette, isDark, onClickItem
255
267
  drawPersonIcon(
256
268
  nodeG,
257
269
  iconCx,
258
- yPos + NAME_FONT_SIZE / 2 - 2,
270
+ yPos + LABEL_FONT_SIZE / 2 - 2,
259
271
  stroke
260
272
  );
261
- nodeG.append("text").attr("x", textX).attr("y", yPos + NAME_FONT_SIZE / 2).attr("text-anchor", "start").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", NAME_FONT_SIZE).attr("font-weight", "bold").text(node.name);
273
+ nodeG.append("text").attr("x", textX).attr("y", yPos + LABEL_FONT_SIZE / 2).attr("text-anchor", "start").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", LABEL_FONT_SIZE).attr("font-weight", "bold").text(node.name);
262
274
  } else {
263
- nodeG.append("text").attr("x", 0).attr("y", yPos + NAME_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", NAME_FONT_SIZE).attr("font-weight", "bold").text(node.name);
275
+ nodeG.append("text").attr("x", 0).attr("y", yPos + LABEL_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", LABEL_FONT_SIZE).attr("font-weight", "bold").text(node.name);
264
276
  }
265
277
  yPos += NAME_HEIGHT;
266
- nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.4);
278
+ nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 1).attr("stroke-opacity", 0.3);
267
279
  yPos += DIVIDER_GAP;
268
280
  if (node.description) {
269
281
  const contentWidth = w - CARD_H_PAD * 2;
270
282
  const lines = wrapTextToWidth(
271
283
  node.description,
272
- DESC_FONT_SIZE,
284
+ META_FONT_SIZE,
273
285
  contentWidth
274
286
  );
275
287
  for (const line2 of lines) {
276
- const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + DESC_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", DESC_FONT_SIZE);
288
+ const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + META_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", META_FONT_SIZE);
277
289
  renderInlineText(
278
290
  textEl,
279
291
  preprocessDescriptionLine(line2),
280
292
  palette,
281
- DESC_FONT_SIZE
293
+ META_FONT_SIZE
282
294
  );
283
- yPos += DESC_LINE_HEIGHT;
295
+ yPos += META_LINE_HEIGHT;
284
296
  }
285
297
  }
286
298
  if (node.drillable) {
287
299
  const clipId = `clip-drill-${node.id.replace(/\s+/g, "-")}`;
288
300
  nodeG.append("clipPath").attr("id", clipId).append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", CARD_RADIUS);
289
- nodeG.append("rect").attr("x", -w / 2).attr("y", h / 2 - DRILL_BAR_HEIGHT).attr("width", w).attr("height", DRILL_BAR_HEIGHT).attr("fill", fillMode === "solid" ? onFillText : stroke).attr("clip-path", `url(#${clipId})`).attr("class", "c4-drill-bar");
301
+ nodeG.append("rect").attr("x", -w / 2).attr("y", h / 2 - COLLAPSE_BAR_HEIGHT).attr("width", w).attr("height", COLLAPSE_BAR_HEIGHT).attr("fill", fillMode === "solid" ? onFillText : stroke).attr("clip-path", `url(#${clipId})`).attr("class", "c4-drill-bar");
290
302
  }
291
303
  }
292
304
  if (hasLegend) {
@@ -347,14 +359,14 @@ function drawCylinderCard(nodeG, w, h, fill, stroke, dashed) {
347
359
  ].join(" ");
348
360
  const el = nodeG.append("path").attr("d", path).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", NODE_STROKE_WIDTH);
349
361
  if (dashed) {
350
- el.attr("stroke-dasharray", "6 3");
362
+ el.attr("stroke-dasharray", EDGE_DASH);
351
363
  }
352
364
  nodeG.append("ellipse").attr("cx", 0).attr("cy", -h / 2 + ry).attr("rx", w / 2).attr("ry", ry).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", NODE_STROKE_WIDTH);
353
365
  }
354
366
  function drawCardRect(nodeG, w, h, fill, stroke, dashed) {
355
367
  const el = nodeG.append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", CARD_RADIUS).attr("ry", CARD_RADIUS).attr("fill", fill).attr("stroke", stroke).attr("stroke-width", NODE_STROKE_WIDTH);
356
368
  if (dashed) {
357
- el.attr("stroke-dasharray", "6 3");
369
+ el.attr("stroke-dasharray", EDGE_DASH);
358
370
  }
359
371
  }
360
372
  function renderEdges(contentG, edges, palette, onClickItem, obstacleRects) {
@@ -372,9 +384,9 @@ function renderEdges(contentG, edges, palette, onClickItem, obstacleRects) {
372
384
  const bidir = hasBidirectionalMarkers(edge.arrowType);
373
385
  const pathD = lineGenerator(edge.points);
374
386
  if (pathD) {
375
- const pathEl = edgeG.append("path").attr("d", pathD).attr("fill", "none").attr("stroke", edgeColor).attr("stroke-width", EDGE_STROKE_WIDTH).attr("class", "c4-edge").attr("marker-end", "url(#c4-arrow-end)");
387
+ const pathEl = edgeG.append("path").attr("d", pathD).attr("fill", "none").attr("stroke", edgeColor).attr("stroke-width", EDGE_STROKE_WIDTH).attr("class", "c4-edge").attr("marker-end", "url(#c4-arrow)");
376
388
  if (dashed) {
377
- pathEl.attr("stroke-dasharray", "6 3");
389
+ pathEl.attr("stroke-dasharray", EDGE_DASH);
378
390
  }
379
391
  if (bidir) {
380
392
  pathEl.attr("marker-start", "url(#c4-arrow-start)");
@@ -404,7 +416,7 @@ function renderEdges(contentG, edges, palette, onClickItem, obstacleRects) {
404
416
  }
405
417
  placeEdgeLabels(pendingLabels, edges, obstacleRects);
406
418
  for (const lbl of pendingLabels) {
407
- lbl.edgeG.append("rect").attr("x", lbl.x - lbl.bgW / 2).attr("y", lbl.y - lbl.bgH / 2).attr("width", lbl.bgW).attr("height", lbl.bgH).attr("rx", 3).attr("fill", palette.bg).attr("opacity", 0.9).attr("class", "c4-edge-label-bg");
419
+ lbl.edgeG.append("rect").attr("x", lbl.x - lbl.bgW / 2).attr("y", lbl.y - lbl.bgH / 2).attr("width", lbl.bgW).attr("height", lbl.bgH).attr("rx", 3).attr("fill", palette.bg).attr("opacity", EDGE_LABEL_KNOCKOUT_OPACITY).attr("class", "c4-edge-label-bg");
408
420
  let textY = lbl.y;
409
421
  if (lbl.labelText && lbl.techText) {
410
422
  textY = lbl.y - 4;
@@ -698,10 +710,17 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
698
710
  const offsetY = titleHeight + DIAGRAM_PADDING + legendReserveH;
699
711
  const svg = d3Selection.select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMid meet").style("font-family", FONT_FAMILY);
700
712
  const defs = svg.append("defs");
701
- const AW = 10;
702
- const AH = 7;
703
- defs.append("marker").attr("id", "c4-arrow-end").attr("viewBox", `0 0 ${AW} ${AH}`).attr("refX", AW).attr("refY", AH / 2).attr("markerWidth", AW).attr("markerHeight", AH).attr("orient", "auto").append("polygon").attr("points", `0,0 ${AW},${AH / 2} 0,${AH}`).attr("fill", palette.textMuted);
704
- defs.append("marker").attr("id", "c4-arrow-start").attr("viewBox", `0 0 ${AW} ${AH}`).attr("refX", 0).attr("refY", AH / 2).attr("markerWidth", AW).attr("markerHeight", AH).attr("orient", "auto").append("polygon").attr("points", `${AW},0 0,${AH / 2} ${AW},${AH}`).attr("fill", palette.textMuted);
713
+ const markerOpts = {
714
+ idPrefix: "c4",
715
+ width: ARROWHEAD_WIDTH,
716
+ height: ARROWHEAD_HEIGHT,
717
+ baseFill: palette.textMuted
718
+ };
719
+ appendArrowheadMarkers(defs, markerOpts);
720
+ appendReverseArrowheadMarkers(defs, {
721
+ ...markerOpts,
722
+ reverseSuffix: "arrow-start"
723
+ });
705
724
  if (parsed.title && parsed.options["no-title"] !== "on") {
706
725
  const titleEl = svg.append("text").attr("class", "chart-title").attr("x", width / 2).attr("y", 30).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", TITLE_FONT_SIZE).attr("font-weight", TITLE_FONT_WEIGHT).style(
707
726
  "cursor",
@@ -729,7 +748,7 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
729
748
  onClickItem(b.lineNumber);
730
749
  });
731
750
  }
732
- boundaryG.append("rect").attr("x", b.x).attr("y", b.y).attr("width", b.width).attr("height", b.height).attr("rx", BOUNDARY_RADIUS).attr("ry", BOUNDARY_RADIUS).attr("fill", boundaryFill).attr("stroke", boundaryStroke).attr("stroke-width", BOUNDARY_STROKE_WIDTH);
751
+ boundaryG.append("rect").attr("x", b.x).attr("y", b.y).attr("width", b.width).attr("height", b.height).attr("rx", CONTAINER_RADIUS).attr("ry", CONTAINER_RADIUS).attr("fill", boundaryFill).attr("stroke", boundaryStroke).attr("stroke-width", NODE_STROKE_WIDTH);
733
752
  boundaryG.append("text").attr("x", b.x + 12).attr("y", b.y + 16).attr("fill", palette.textMuted).attr("font-size", BOUNDARY_LABEL_FONT_SIZE).attr("font-style", "italic").text(`${b.label} \u2014 ${b.typeLabel}`);
734
753
  }
735
754
  if (layout.groupBoundaries.length > 0) {
@@ -742,7 +761,7 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
742
761
  onClickItem(gb.lineNumber);
743
762
  });
744
763
  }
745
- gbG.append("rect").attr("x", gb.x).attr("y", gb.y).attr("width", gb.width).attr("height", gb.height).attr("rx", 6).attr("ry", 6).attr("fill", groupFill).attr("stroke", groupStroke).attr("stroke-width", 1);
764
+ gbG.append("rect").attr("x", gb.x).attr("y", gb.y).attr("width", gb.width).attr("height", gb.height).attr("rx", CONTAINER_RADIUS).attr("ry", CONTAINER_RADIUS).attr("fill", groupFill).attr("stroke", groupStroke).attr("stroke-width", NODE_STROKE_WIDTH);
746
765
  gbG.append("text").attr("x", gb.x + 10).attr("y", gb.y + 14).attr("fill", palette.textMuted).attr("font-size", BOUNDARY_LABEL_FONT_SIZE).attr("font-style", "italic").text(gb.label);
747
766
  }
748
767
  }
@@ -827,7 +846,7 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
827
846
  yPos += TYPE_LABEL_HEIGHT;
828
847
  }
829
848
  if (node.type === "person") {
830
- const textWidth = measureText(node.name, NAME_FONT_SIZE, { bold: true });
849
+ const textWidth = measureText(node.name, LABEL_FONT_SIZE, { bold: true });
831
850
  const gap = 6;
832
851
  const totalWidth = PERSON_ICON_W + gap + textWidth;
833
852
  const iconCx = -totalWidth / 2 + PERSON_ICON_W / 2;
@@ -835,12 +854,12 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
835
854
  drawPersonIcon(
836
855
  nodeG,
837
856
  iconCx,
838
- yPos + NAME_FONT_SIZE / 2 - 2,
857
+ yPos + LABEL_FONT_SIZE / 2 - 2,
839
858
  stroke
840
859
  );
841
- nodeG.append("text").attr("x", textX).attr("y", yPos + NAME_FONT_SIZE / 2).attr("text-anchor", "start").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", NAME_FONT_SIZE).attr("font-weight", "bold").text(node.name);
860
+ nodeG.append("text").attr("x", textX).attr("y", yPos + LABEL_FONT_SIZE / 2).attr("text-anchor", "start").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", LABEL_FONT_SIZE).attr("font-weight", "bold").text(node.name);
842
861
  } else {
843
- nodeG.append("text").attr("x", 0).attr("y", yPos + NAME_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", NAME_FONT_SIZE).attr("font-weight", "bold").text(node.name);
862
+ nodeG.append("text").attr("x", 0).attr("y", yPos + LABEL_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", LABEL_FONT_SIZE).attr("font-weight", "bold").text(node.name);
844
863
  }
845
864
  yPos += NAME_HEIGHT;
846
865
  if (node.type === "container") {
@@ -848,23 +867,23 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
848
867
  const contentWidth = w - CARD_H_PAD * 2;
849
868
  const lines = wrapTextToWidth(
850
869
  node.description,
851
- DESC_FONT_SIZE,
870
+ META_FONT_SIZE,
852
871
  contentWidth
853
872
  );
854
873
  for (const line2 of lines) {
855
- const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + DESC_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", DESC_FONT_SIZE);
874
+ const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + META_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", META_FONT_SIZE);
856
875
  renderInlineText(
857
876
  textEl,
858
877
  preprocessDescriptionLine(line2),
859
878
  palette,
860
- DESC_FONT_SIZE
879
+ META_FONT_SIZE
861
880
  );
862
- yPos += DESC_LINE_HEIGHT;
881
+ yPos += META_LINE_HEIGHT;
863
882
  }
864
883
  }
865
884
  const metaEntries = collectCardMetadata(node.metadata);
866
885
  if (metaEntries.length > 0) {
867
- nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.4);
886
+ nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 1).attr("stroke-opacity", 0.3);
868
887
  yPos += DIVIDER_GAP;
869
888
  const maxKeyWidth = Math.max(
870
889
  ...metaEntries.map((e) => measureText(`${e.key}: `, META_FONT_SIZE))
@@ -877,31 +896,31 @@ function renderC4Containers(container, parsed, layout, palette, isDark, onClickI
877
896
  }
878
897
  }
879
898
  } else {
880
- nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 0.5).attr("stroke-opacity", 0.4);
899
+ nodeG.append("line").attr("x1", -w / 2 + CARD_H_PAD / 2).attr("y1", yPos).attr("x2", w / 2 - CARD_H_PAD / 2).attr("y2", yPos).attr("stroke", fillMode === "solid" ? onFillText : stroke).attr("stroke-width", 1).attr("stroke-opacity", 0.3);
881
900
  yPos += DIVIDER_GAP;
882
901
  if (node.description) {
883
902
  const contentWidth = w - CARD_H_PAD * 2;
884
903
  const lines = wrapTextToWidth(
885
904
  node.description,
886
- DESC_FONT_SIZE,
905
+ META_FONT_SIZE,
887
906
  contentWidth
888
907
  );
889
908
  for (const line2 of lines) {
890
- const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + DESC_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", DESC_FONT_SIZE);
909
+ const textEl = nodeG.append("text").attr("x", 0).attr("y", yPos + META_FONT_SIZE / 2).attr("text-anchor", "middle").attr("dominant-baseline", "central").attr("fill", onFillText).attr("font-size", META_FONT_SIZE);
891
910
  renderInlineText(
892
911
  textEl,
893
912
  preprocessDescriptionLine(line2),
894
913
  palette,
895
- DESC_FONT_SIZE
914
+ META_FONT_SIZE
896
915
  );
897
- yPos += DESC_LINE_HEIGHT;
916
+ yPos += META_LINE_HEIGHT;
898
917
  }
899
918
  }
900
919
  }
901
920
  if (node.drillable) {
902
921
  const clipId = `clip-drill-${node.id.replace(/\s+/g, "-")}`;
903
922
  nodeG.append("clipPath").attr("id", clipId).append("rect").attr("x", -w / 2).attr("y", -h / 2).attr("width", w).attr("height", h).attr("rx", CARD_RADIUS);
904
- nodeG.append("rect").attr("x", -w / 2).attr("y", h / 2 - DRILL_BAR_HEIGHT).attr("width", w).attr("height", DRILL_BAR_HEIGHT).attr("fill", fillMode === "solid" ? onFillText : stroke).attr("clip-path", `url(#${clipId})`).attr("class", "c4-drill-bar");
923
+ nodeG.append("rect").attr("x", -w / 2).attr("y", h / 2 - COLLAPSE_BAR_HEIGHT).attr("width", w).attr("height", COLLAPSE_BAR_HEIGHT).attr("fill", fillMode === "solid" ? onFillText : stroke).attr("clip-path", `url(#${clipId})`).attr("class", "c4-drill-bar");
905
924
  }
906
925
  }
907
926
  if (hasLegend) {
@@ -1039,4 +1058,4 @@ export {
1039
1058
  renderC4Deployment,
1040
1059
  renderC4DeploymentForExport
1041
1060
  };
1042
- //# sourceMappingURL=chunk-AYM472K3.js.map
1061
+ //# sourceMappingURL=chunk-4IGUEGD6.js.map
@@ -11,7 +11,7 @@ import {
11
11
  tagAttrKey,
12
12
  validateTagGroupNames,
13
13
  validateTagValues
14
- } from "./chunk-76LHNLGX.js";
14
+ } from "./chunk-R4YGH7DJ.js";
15
15
  import {
16
16
  MINDMAP_REGISTRY,
17
17
  OPTION_NOCOLON_RE,
@@ -337,4 +337,4 @@ function findMetadataParent(indent, indentStack) {
337
337
  export {
338
338
  parseMindmap
339
339
  };
340
- //# sourceMappingURL=chunk-QOVM5VRC.js.map
340
+ //# sourceMappingURL=chunk-57GSSHBR.js.map