@diagrammo/dgmo 0.45.0 → 0.47.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 (250) hide show
  1. package/dist/advanced.cjs +31 -25
  2. package/dist/advanced.d.cts +3 -855
  3. package/dist/advanced.d.ts +3 -855
  4. package/dist/advanced.js +541 -70101
  5. package/dist/analyzer-UYKBXAKR.js +15 -0
  6. package/dist/auto.cjs +500 -341
  7. package/dist/auto.css +342 -159
  8. package/dist/auto.d.cts +10 -8
  9. package/dist/auto.d.ts +10 -8
  10. package/dist/auto.js +373 -265
  11. package/dist/auto.mjs +500 -341
  12. package/dist/block.cjs +31 -25
  13. package/dist/block.js +83 -69411
  14. package/dist/calculator-LDYQCDDY.js +11 -0
  15. package/dist/charts-d3-QOZHKTCT.js +25 -0
  16. package/dist/chunk-2DXMZRWJ.js +800 -0
  17. package/dist/chunk-2LACINWN.js +786 -0
  18. package/dist/chunk-33LCUH4H.js +893 -0
  19. package/dist/chunk-3CIOJ5YJ.js +35 -0
  20. package/dist/chunk-3HDBAXF5.js +86 -0
  21. package/dist/chunk-3JLKYGBQ.js +290 -0
  22. package/dist/chunk-3MQQNXPD.js +415 -0
  23. package/dist/chunk-3R5POCTZ.js +967 -0
  24. package/dist/chunk-3SMGIJDD.js +112 -0
  25. package/dist/chunk-44CM72SQ.js +409 -0
  26. package/dist/chunk-4GRI7MEB.js +1604 -0
  27. package/dist/chunk-4OHACBGX.js +606 -0
  28. package/dist/chunk-5DH3KYFH.js +21 -0
  29. package/dist/chunk-5MLYVTYM.js +76 -0
  30. package/dist/chunk-5QXL4NYS.js +553 -0
  31. package/dist/chunk-5WRI5ZAA.js +31 -0
  32. package/dist/chunk-6EK55ART.js +117 -0
  33. package/dist/chunk-6FZYCKXB.js +2065 -0
  34. package/dist/chunk-6HO5ZTXK.js +277 -0
  35. package/dist/chunk-6KFWC4CO.js +7 -0
  36. package/dist/chunk-6MTWIQVO.js +121 -0
  37. package/dist/chunk-6NYWYNBI.js +329 -0
  38. package/dist/chunk-6SM5NJQH.js +620 -0
  39. package/dist/chunk-725LDASD.js +422 -0
  40. package/dist/chunk-76OWZ3BA.js +130 -0
  41. package/dist/chunk-7JEGTRLD.js +338 -0
  42. package/dist/chunk-A44USUV7.js +923 -0
  43. package/dist/chunk-A4GOY3PE.js +25 -0
  44. package/dist/chunk-A4VFQH5G.js +251 -0
  45. package/dist/chunk-AELOBFW5.js +375 -0
  46. package/dist/chunk-AN2MOO5T.js +522 -0
  47. package/dist/chunk-BMR4CIEO.js +41 -0
  48. package/dist/chunk-BS7SV7C3.js +51 -0
  49. package/dist/chunk-BUPDIHML.js +613 -0
  50. package/dist/chunk-BUVJFRPY.js +887 -0
  51. package/dist/chunk-C3Z4DX3V.js +112 -0
  52. package/dist/chunk-CI2G3OEB.js +1818 -0
  53. package/dist/chunk-CKNVO24D.js +54 -0
  54. package/dist/chunk-CUVHQHZ7.js +391 -0
  55. package/dist/chunk-CXK4DZH3.js +114 -0
  56. package/dist/chunk-DKEPS5LH.js +315 -0
  57. package/dist/chunk-DU7W62N5.js +487 -0
  58. package/dist/chunk-DZAQBW35.js +751 -0
  59. package/dist/chunk-EB6FPQUP.js +316 -0
  60. package/dist/chunk-EMS2SK26.js +376 -0
  61. package/dist/chunk-ERLBPDGU.js +510 -0
  62. package/dist/chunk-EVCVDTXE.js +732 -0
  63. package/dist/chunk-FCIIHT24.js +384 -0
  64. package/dist/chunk-FFUN5D66.js +97 -0
  65. package/dist/chunk-FITOLXSX.js +714 -0
  66. package/dist/chunk-FMDSF3OV.js +68 -0
  67. package/dist/chunk-FNB3PNGF.js +410 -0
  68. package/dist/chunk-G2H74XJZ.js +2104 -0
  69. package/dist/chunk-GMR5MFHJ.js +339 -0
  70. package/dist/chunk-H6PI3KJT.js +305 -0
  71. package/dist/chunk-I46X5VUA.js +59 -0
  72. package/dist/chunk-I5IGB56C.js +255 -0
  73. package/dist/chunk-IH6ZMVQ5.js +3950 -0
  74. package/dist/chunk-IJZFN3HM.js +463 -0
  75. package/dist/chunk-IPWPWM6R.js +3079 -0
  76. package/dist/chunk-IYULMRBE.js +23 -0
  77. package/dist/chunk-IZMRON6C.js +167 -0
  78. package/dist/chunk-J5FIXQRT.js +813 -0
  79. package/dist/chunk-JED6ZDEE.js +73 -0
  80. package/dist/chunk-JEUJOX5X.js +136 -0
  81. package/dist/chunk-JM4LEPY3.js +436 -0
  82. package/dist/chunk-L3UHP6TD.js +101 -0
  83. package/dist/chunk-L66GEFB6.js +524 -0
  84. package/dist/chunk-LIOHW36Z.js +469 -0
  85. package/dist/chunk-LP7EC4MI.js +16 -0
  86. package/dist/chunk-MITI6NOL.js +548 -0
  87. package/dist/chunk-MO5YHHMQ.js +168 -0
  88. package/dist/chunk-MZSBFAPJ.js +885 -0
  89. package/dist/chunk-NNAAJVBU.js +9 -0
  90. package/dist/chunk-NOTA6TEI.js +47 -0
  91. package/dist/chunk-NURGB5Z4.js +335 -0
  92. package/dist/chunk-NX4EQS3U.js +1062 -0
  93. package/dist/chunk-NXMESY4J.js +1 -0
  94. package/dist/chunk-OJR3MQYV.js +1458 -0
  95. package/dist/chunk-OURHMODR.js +454 -0
  96. package/dist/chunk-P235SVAH.js +1057 -0
  97. package/dist/chunk-P4RH4OSP.js +1038 -0
  98. package/dist/chunk-P6T66CCZ.js +226 -0
  99. package/dist/chunk-PBAHEPLQ.js +223 -0
  100. package/dist/chunk-PBHE5UG6.js +1530 -0
  101. package/dist/chunk-PDKUANDZ.js +35 -0
  102. package/dist/chunk-PWIHZ6NJ.js +296 -0
  103. package/dist/chunk-QEBUY5NY.js +1685 -0
  104. package/dist/chunk-QLCCJEJI.js +253 -0
  105. package/dist/chunk-QOOUC2J5.js +52 -0
  106. package/dist/chunk-QYTPPDAO.js +402 -0
  107. package/dist/chunk-R3XI2VC7.js +801 -0
  108. package/dist/chunk-RCERWOJR.js +154 -0
  109. package/dist/chunk-RJE5JTVK.js +362 -0
  110. package/dist/chunk-RTLBSQ3G.js +1155 -0
  111. package/dist/chunk-RUNNI6VE.js +448 -0
  112. package/dist/chunk-RVMRZAPB.js +354 -0
  113. package/dist/chunk-RYEGFMUO.js +955 -0
  114. package/dist/chunk-RZCF2VVM.js +528 -0
  115. package/dist/chunk-SML67VPV.js +1025 -0
  116. package/dist/chunk-SQ7IY53Q.js +44 -0
  117. package/dist/chunk-SQAG3UXH.js +161 -0
  118. package/dist/chunk-SRTU6HMQ.js +1851 -0
  119. package/dist/chunk-T2OE3YQB.js +550 -0
  120. package/dist/chunk-T3UBLACL.js +299 -0
  121. package/dist/chunk-TLVIHFRO.js +296 -0
  122. package/dist/chunk-TYS6CSS5.js +52 -0
  123. package/dist/chunk-U6EQI3U6.js +130 -0
  124. package/dist/chunk-UJ4FJLBF.js +86 -0
  125. package/dist/chunk-ULOEATBZ.js +347 -0
  126. package/dist/chunk-UNCCZ3NU.js +127 -0
  127. package/dist/chunk-USZW2HHU.js +197 -0
  128. package/dist/chunk-UWN33VNX.js +1610 -0
  129. package/dist/chunk-UZ7EZW3B.js +40 -0
  130. package/dist/chunk-VOKGH627.js +37 -0
  131. package/dist/chunk-WBRZJOEC.js +204 -0
  132. package/dist/chunk-WCSOJFU3.js +380 -0
  133. package/dist/chunk-WCT3NYCV.js +160 -0
  134. package/dist/chunk-WVAJFAIA.js +529 -0
  135. package/dist/chunk-X5LCYCL5.js +394 -0
  136. package/dist/chunk-XAKEUMEJ.js +1256 -0
  137. package/dist/chunk-Y2ZE3MSG.js +590 -0
  138. package/dist/chunk-Y3J7VR52.js +646 -0
  139. package/dist/chunk-Y5QGVTVC.js +33 -0
  140. package/dist/chunk-YAA6IID3.js +548 -0
  141. package/dist/chunk-YGJTDXVR.js +692 -0
  142. package/dist/chunk-YRYKTYMQ.js +186 -0
  143. package/dist/chunk-YYVTBZZC.js +61 -0
  144. package/dist/chunk-Z5CGSFJB.js +647 -0
  145. package/dist/chunk-Z72XRXD4.js +787 -0
  146. package/dist/chunk-ZGR7ULFJ.js +978 -0
  147. package/dist/chunk-ZJEL4H2R.js +851 -0
  148. package/dist/chunk-ZO27FGJS.js +554 -0
  149. package/dist/cli.cjs +112 -112
  150. package/dist/collapse-CLPJD2RL.js +11 -0
  151. package/dist/collapse-SLINJQW6.js +9 -0
  152. package/dist/collapse-ZWUFFCK2.js +9 -0
  153. package/dist/compute-G55RG53N.js +8 -0
  154. package/dist/dgmo-router-DZCIDUO5.js +73 -0
  155. package/dist/dimensions-J3FHIMJ6.js +22 -0
  156. package/dist/element.cjs +492 -325
  157. package/dist/element.js +367 -259
  158. package/dist/element.mjs +492 -325
  159. package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
  160. package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
  161. package/dist/index.cjs +34 -28
  162. package/dist/index.d.cts +3 -469
  163. package/dist/index.d.ts +3 -469
  164. package/dist/index.js +137 -69679
  165. package/dist/layout-46N4JJYK.js +17 -0
  166. package/dist/layout-5RA6QWR6.js +26 -0
  167. package/dist/layout-5T6RH5M6.js +14 -0
  168. package/dist/layout-7QXCNOVS.js +13 -0
  169. package/dist/layout-EE6GE46Y.js +17 -0
  170. package/dist/layout-G23F7LDH.js +9 -0
  171. package/dist/layout-HRBZPFCN.js +23 -0
  172. package/dist/layout-HWDSRX5E.js +20 -0
  173. package/dist/layout-HYZPWAK5.js +18 -0
  174. package/dist/layout-N76NR4ZO.js +19 -0
  175. package/dist/layout-OB3RI63S.js +14 -0
  176. package/dist/layout-S2QBYSK2.js +15 -0
  177. package/dist/layout-UM5F4DJB.js +15 -0
  178. package/dist/layout-search-OYV77HHS.js +1655 -0
  179. package/dist/load-data-EHDDZ5ZS.js +8 -0
  180. package/dist/palettes-PRJ2RI6D.js +56 -0
  181. package/dist/parser-2MFP2H2E.js +11 -0
  182. package/dist/parser-3STE62GB.js +21 -0
  183. package/dist/parser-4FL2CMDG.js +18 -0
  184. package/dist/parser-4OGOBJJ4.js +13 -0
  185. package/dist/parser-6BTRLKRZ.js +15 -0
  186. package/dist/parser-AQETEVRW.js +21 -0
  187. package/dist/parser-CFZD5IBL.js +12 -0
  188. package/dist/parser-FUSKFGZN.js +16 -0
  189. package/dist/parser-I6KXEYFK.js +13 -0
  190. package/dist/parser-IXSZZQHY.js +18 -0
  191. package/dist/parser-JAL2HD4I.js +13 -0
  192. package/dist/parser-KNSQSKQO.js +20 -0
  193. package/dist/parser-N5O4IHUN.js +13 -0
  194. package/dist/parser-NGU3ETO6.js +16 -0
  195. package/dist/parser-NRAI6O25.js +19 -0
  196. package/dist/parser-O5J4VBII.js +11 -0
  197. package/dist/parser-OV7NOBW6.js +21 -0
  198. package/dist/parser-PQ3POX45.js +23 -0
  199. package/dist/parser-TFZFBVWN.js +11 -0
  200. package/dist/parser-TRTHDFPP.js +18 -0
  201. package/dist/parser-VQP2UJ6W.js +11 -0
  202. package/dist/parser-XDVELHRK.js +13 -0
  203. package/dist/parser-XKRP7QKP.js +11 -0
  204. package/dist/parser-Y6WTBU76.js +14 -0
  205. package/dist/parser-ZSDPZYQP.js +12 -0
  206. package/dist/renderer-2XQQQ6QR.js +28 -0
  207. package/dist/renderer-5NDVNDAZ.js +26 -0
  208. package/dist/renderer-6EEZHMH4.js +26 -0
  209. package/dist/renderer-6W5462RB.js +43 -0
  210. package/dist/renderer-7MVLWWQD.js +22 -0
  211. package/dist/renderer-AWWAF6XD.js +33 -0
  212. package/dist/renderer-BYCNMBF7.js +34 -0
  213. package/dist/renderer-CLJHQPBJ.js +29 -0
  214. package/dist/renderer-GHPZMFU2.js +15 -0
  215. package/dist/renderer-JGBKUCZD.js +16 -0
  216. package/dist/renderer-KQB7UGDS.js +19 -0
  217. package/dist/renderer-PGX2TKVS.js +24 -0
  218. package/dist/renderer-QIWVHWZO.js +15 -0
  219. package/dist/renderer-RPOA5YPZ.js +35 -0
  220. package/dist/renderer-SMIBCRVB.js +24 -0
  221. package/dist/renderer-T7YKC5VP.js +28 -0
  222. package/dist/renderer-TOCOVLHS.js +37 -0
  223. package/dist/renderer-UWA5XS74.js +39 -0
  224. package/dist/renderer-VACVQYML.js +25 -0
  225. package/dist/renderer-W4M6QLIJ.js +37 -0
  226. package/dist/renderer-WZRREQ2P.js +23 -0
  227. package/dist/renderer-YY2OSF6E.js +27 -0
  228. package/dist/renderer-Z7I3W2PP.js +24 -0
  229. package/dist/renderer-ZGNTUWC4.js +22 -0
  230. package/dist/renderer-ZTR3DER3.js +19 -0
  231. package/dist/renderer-radial-C32GPJQ7.js +21 -0
  232. package/dist/resolver-NOAA7ID7.js +13 -0
  233. package/dist/state-collapse-HCGD6IVJ.js +8 -0
  234. package/dist/state-parser-Z2V23ATR.js +18 -0
  235. package/dist/state-renderer-RFYHSP4K.js +34 -0
  236. package/dist/themes-1-CuKpeH.d.cts +908 -0
  237. package/dist/themes-1-CuKpeH.d.ts +908 -0
  238. package/package.json +1 -1
  239. package/src/auto/index.ts +55 -57
  240. package/src/auto/shared.ts +142 -142
  241. package/src/auto/styles.ts +44 -199
  242. package/src/c4/renderer.ts +2 -2
  243. package/src/element/index.ts +29 -21
  244. package/src/infra/renderer.ts +1 -1
  245. package/src/render.ts +34 -14
  246. package/src/sitemap/renderer.ts +1 -1
  247. package/src/timeline/renderer.ts +1 -1
  248. package/src/utils/hover-styles.ts +6 -1
  249. package/src/utils/legend-d3.ts +1 -4
  250. package/src/utils/legend-svg.ts +1 -1
@@ -0,0 +1,620 @@
1
+ import {
2
+ LEGEND_CAPSULE_PAD,
3
+ LEGEND_DOT_R,
4
+ LEGEND_ENTRY_DOT_GAP,
5
+ LEGEND_ENTRY_FONT_SIZE,
6
+ LEGEND_ENTRY_TRAIL,
7
+ LEGEND_EYE_GAP,
8
+ LEGEND_EYE_SIZE,
9
+ LEGEND_GROUP_GAP,
10
+ LEGEND_HEIGHT,
11
+ LEGEND_PILL_FONT_SIZE,
12
+ LEGEND_PILL_PAD,
13
+ measureLegendText
14
+ } from "./chunk-QOOUC2J5.js";
15
+ import {
16
+ measureText
17
+ } from "./chunk-WCT3NYCV.js";
18
+ import {
19
+ injectDefaultTagMetadata,
20
+ resolveTagColor,
21
+ tagAttrKey
22
+ } from "./chunk-QLCCJEJI.js";
23
+
24
+ // src/sitemap/layout.ts
25
+ import dagre from "@dagrejs/dagre";
26
+ var LABEL_FONT_SIZE = 13;
27
+ var META_FONT_SIZE = 11;
28
+ var CONTAINER_LABEL_FONT_SIZE = 13;
29
+ function clipToRectBorder(cx, cy, w, h, tx, ty) {
30
+ const dx = tx - cx;
31
+ const dy = ty - cy;
32
+ if (dx === 0 && dy === 0) return { x: cx, y: cy };
33
+ const hw = w / 2;
34
+ const hh = h / 2;
35
+ const sx = dx !== 0 ? hw / Math.abs(dx) : Infinity;
36
+ const sy = dy !== 0 ? hh / Math.abs(dy) : Infinity;
37
+ const s = Math.min(sx, sy);
38
+ return { x: cx + dx * s, y: cy + dy * s };
39
+ }
40
+ var META_LINE_HEIGHT = 16;
41
+ var HEADER_HEIGHT = 28;
42
+ var SEPARATOR_GAP = 6;
43
+ var CARD_H_PAD = 20;
44
+ var CARD_V_PAD = 10;
45
+ var MIN_CARD_WIDTH = 140;
46
+ var MARGIN = 40;
47
+ var CONTAINER_PAD_X = 24;
48
+ var CONTAINER_PAD_TOP = 40;
49
+ var CONTAINER_PAD_BOTTOM = 24;
50
+ var CONTAINER_LABEL_HEIGHT = 28;
51
+ var CONTAINER_META_LINE_HEIGHT = 16;
52
+ function filterMetadata(metadata, hiddenAttributes) {
53
+ if (!hiddenAttributes || hiddenAttributes.size === 0) return metadata;
54
+ const filtered = {};
55
+ for (const [key, value] of Object.entries(metadata)) {
56
+ if (!hiddenAttributes.has(key)) {
57
+ filtered[key] = value;
58
+ }
59
+ }
60
+ return filtered;
61
+ }
62
+ function computeCardWidth(label, meta, descLines) {
63
+ let maxContentWidth = measureText(label, LABEL_FONT_SIZE);
64
+ for (const [key, value] of Object.entries(meta)) {
65
+ const lineWidth = measureText(`${key}: ${value}`, META_FONT_SIZE);
66
+ if (lineWidth > maxContentWidth) maxContentWidth = lineWidth;
67
+ }
68
+ if (descLines) {
69
+ for (const dl of descLines) {
70
+ const dlWidth = measureText(dl, META_FONT_SIZE);
71
+ if (dlWidth > maxContentWidth) maxContentWidth = dlWidth;
72
+ }
73
+ }
74
+ return Math.max(MIN_CARD_WIDTH, Math.ceil(maxContentWidth) + CARD_H_PAD * 2);
75
+ }
76
+ function computeCardHeight(meta, descLineCount = 0) {
77
+ const metaCount = Object.keys(meta).length;
78
+ const contentCount = metaCount + descLineCount;
79
+ if (contentCount === 0) return HEADER_HEIGHT + CARD_V_PAD;
80
+ return HEADER_HEIGHT + SEPARATOR_GAP + contentCount * META_LINE_HEIGHT + CARD_V_PAD;
81
+ }
82
+ function resolveNodeColor(node, tagGroups, activeGroupName) {
83
+ if (node.color) return node.color;
84
+ return resolveTagColor(
85
+ node.metadata,
86
+ [...tagGroups],
87
+ activeGroupName,
88
+ node.isContainer
89
+ );
90
+ }
91
+ var OVERLAP_GAP = 20;
92
+ function computeLegendGroups(tagGroups, usedValuesByGroup) {
93
+ const groups = [];
94
+ for (const group of tagGroups) {
95
+ if (group.entries.length === 0) continue;
96
+ const usedValues = usedValuesByGroup?.get(tagAttrKey(group.name));
97
+ const visibleEntries = usedValues ? group.entries.filter((e) => usedValues.has(e.value.toLowerCase())) : group.entries;
98
+ if (visibleEntries.length === 0) continue;
99
+ const pillWidth = measureLegendText(group.name, LEGEND_PILL_FONT_SIZE) + LEGEND_PILL_PAD;
100
+ const minPillWidth = pillWidth;
101
+ let entriesWidth = 0;
102
+ for (const entry of visibleEntries) {
103
+ entriesWidth += LEGEND_DOT_R * 2 + LEGEND_ENTRY_DOT_GAP + measureLegendText(entry.value, LEGEND_ENTRY_FONT_SIZE) + LEGEND_ENTRY_TRAIL;
104
+ }
105
+ const eyeSpace = LEGEND_EYE_SIZE + LEGEND_EYE_GAP;
106
+ const capsuleWidth = LEGEND_CAPSULE_PAD * 2 + pillWidth + 4 + eyeSpace + entriesWidth;
107
+ groups.push({
108
+ name: group.name,
109
+ ...group.alias !== void 0 && { alias: group.alias },
110
+ entries: visibleEntries.map((e) => ({ value: e.value, color: e.color })),
111
+ x: 0,
112
+ y: 0,
113
+ width: capsuleWidth,
114
+ height: LEGEND_HEIGHT,
115
+ minifiedWidth: minPillWidth,
116
+ minifiedHeight: LEGEND_HEIGHT
117
+ });
118
+ }
119
+ return groups;
120
+ }
121
+ function flattenNodes(nodes, parentContainerId, parentPageId, hiddenCounts, hiddenAttributes, result) {
122
+ for (const node of nodes) {
123
+ const meta = filterMetadata(node.metadata, hiddenAttributes);
124
+ if (node.isContainer) {
125
+ const metaCount = Object.keys(meta).length;
126
+ const labelHeight = CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
127
+ result.push({
128
+ sitemapNode: node,
129
+ parentContainerId,
130
+ parentPageId,
131
+ meta,
132
+ fullMeta: { ...node.metadata },
133
+ width: Math.max(
134
+ MIN_CARD_WIDTH,
135
+ measureText(node.label, CONTAINER_LABEL_FONT_SIZE) + CARD_H_PAD * 2
136
+ ),
137
+ height: labelHeight + CONTAINER_PAD_BOTTOM
138
+ });
139
+ flattenNodes(
140
+ node.children,
141
+ node.id,
142
+ parentPageId,
143
+ hiddenCounts,
144
+ hiddenAttributes,
145
+ result
146
+ );
147
+ } else {
148
+ result.push({
149
+ sitemapNode: node,
150
+ parentContainerId,
151
+ parentPageId,
152
+ meta,
153
+ fullMeta: { ...node.metadata },
154
+ width: computeCardWidth(node.label, meta, node.description),
155
+ height: computeCardHeight(meta, node.description?.length ?? 0)
156
+ });
157
+ if (node.children.length > 0) {
158
+ flattenNodes(
159
+ node.children,
160
+ parentContainerId,
161
+ node.id,
162
+ hiddenCounts,
163
+ hiddenAttributes,
164
+ result
165
+ );
166
+ }
167
+ }
168
+ }
169
+ }
170
+ function layoutSitemap(parsed, hiddenCounts, activeTagGroup, hiddenAttributes, expandAllLegend) {
171
+ if (parsed.roots.length === 0) {
172
+ return {
173
+ nodes: [],
174
+ edges: [],
175
+ containers: [],
176
+ legend: [],
177
+ width: 0,
178
+ height: 0
179
+ };
180
+ }
181
+ const allNodes = [];
182
+ const collect = (node) => {
183
+ allNodes.push(node);
184
+ for (const child of node.children) collect(child);
185
+ };
186
+ for (const root of parsed.roots) collect(root);
187
+ injectDefaultTagMetadata(
188
+ allNodes,
189
+ parsed.tagGroups,
190
+ (e) => e.isContainer
191
+ );
192
+ const flatNodes = [];
193
+ flattenNodes(
194
+ parsed.roots,
195
+ null,
196
+ null,
197
+ hiddenCounts,
198
+ hiddenAttributes,
199
+ flatNodes
200
+ );
201
+ const nodeMap = /* @__PURE__ */ new Map();
202
+ for (const flat of flatNodes) {
203
+ nodeMap.set(flat.sitemapNode.id, flat);
204
+ }
205
+ const g = new dagre.graphlib.Graph({ compound: true, multigraph: true });
206
+ g.setGraph({
207
+ rankdir: parsed.direction,
208
+ nodesep: 50,
209
+ ranksep: 60,
210
+ edgesep: 30,
211
+ marginx: MARGIN,
212
+ marginy: MARGIN
213
+ });
214
+ g.setDefaultEdgeLabel(() => ({}));
215
+ const containerIds = /* @__PURE__ */ new Set();
216
+ const pageNodeIds = /* @__PURE__ */ new Set();
217
+ const collapsedContainerIds = /* @__PURE__ */ new Set();
218
+ for (const flat of flatNodes) {
219
+ if (flat.sitemapNode.isContainer) {
220
+ containerIds.add(flat.sitemapNode.id);
221
+ const hidden = hiddenCounts?.get(flat.sitemapNode.id) ?? 0;
222
+ if (hidden > 0) {
223
+ collapsedContainerIds.add(flat.sitemapNode.id);
224
+ }
225
+ } else {
226
+ pageNodeIds.add(flat.sitemapNode.id);
227
+ }
228
+ }
229
+ let pageMaxW = 0;
230
+ let pageMaxH = 0;
231
+ for (const f of flatNodes) {
232
+ if (!f.sitemapNode.isContainer) {
233
+ if (f.width > pageMaxW) pageMaxW = f.width;
234
+ if (f.height > pageMaxH) pageMaxH = f.height;
235
+ }
236
+ }
237
+ for (const flat of flatNodes) {
238
+ const node = flat.sitemapNode;
239
+ if (node.isContainer) {
240
+ if (collapsedContainerIds.has(node.id)) {
241
+ const flooredW = Math.max(flat.width, pageMaxW);
242
+ const flooredH = Math.max(flat.height, pageMaxH);
243
+ g.setNode(node.id, {
244
+ label: node.label,
245
+ width: flooredW,
246
+ height: flooredH
247
+ });
248
+ } else {
249
+ g.setNode(node.id, {
250
+ label: node.label,
251
+ paddingLeft: CONTAINER_PAD_X,
252
+ paddingRight: CONTAINER_PAD_X,
253
+ paddingTop: CONTAINER_PAD_TOP,
254
+ paddingBottom: CONTAINER_PAD_BOTTOM
255
+ });
256
+ }
257
+ } else {
258
+ g.setNode(node.id, {
259
+ label: node.label,
260
+ width: flat.width,
261
+ height: flat.height
262
+ });
263
+ }
264
+ }
265
+ for (const flat of flatNodes) {
266
+ if (flat.parentContainerId && !collapsedContainerIds.has(flat.parentContainerId)) {
267
+ g.setParent(flat.sitemapNode.id, flat.parentContainerId);
268
+ }
269
+ }
270
+ const expandedContainerIds = /* @__PURE__ */ new Set();
271
+ for (const cid of containerIds) {
272
+ if (!collapsedContainerIds.has(cid)) {
273
+ expandedContainerIds.add(cid);
274
+ }
275
+ }
276
+ const deferredEdgeIndices = [];
277
+ for (let i = 0; i < parsed.edges.length; i++) {
278
+ const edge = parsed.edges[i];
279
+ if (!g.hasNode(edge.sourceId) || !g.hasNode(edge.targetId)) continue;
280
+ if (expandedContainerIds.has(edge.sourceId) || expandedContainerIds.has(edge.targetId)) {
281
+ deferredEdgeIndices.push(i);
282
+ continue;
283
+ }
284
+ g.setEdge(
285
+ edge.sourceId,
286
+ edge.targetId,
287
+ {
288
+ label: edge.label ?? "",
289
+ minlen: 1
290
+ },
291
+ `e${i}`
292
+ );
293
+ }
294
+ dagre.layout(g);
295
+ const layoutNodes = [];
296
+ const layoutContainers = [];
297
+ for (const flat of flatNodes) {
298
+ const node = flat.sitemapNode;
299
+ if (node.isContainer) continue;
300
+ const pos = g.node(node.id);
301
+ if (!pos) continue;
302
+ const hc = hiddenCounts?.get(node.id);
303
+ const resolvedColor = resolveNodeColor(
304
+ node,
305
+ parsed.tagGroups,
306
+ activeTagGroup ?? null
307
+ );
308
+ layoutNodes.push({
309
+ id: node.id,
310
+ label: node.label,
311
+ metadata: flat.meta,
312
+ tagMetadata: flat.fullMeta,
313
+ ...node.description !== void 0 && {
314
+ description: [...node.description]
315
+ },
316
+ isContainer: false,
317
+ lineNumber: node.lineNumber,
318
+ ...resolvedColor !== void 0 && { color: resolvedColor },
319
+ x: pos.x,
320
+ y: pos.y - pos.height / 2,
321
+ width: pos.width,
322
+ height: pos.height,
323
+ ...hc !== void 0 && { hiddenCount: hc },
324
+ ...(node.children.length > 0 || hc != null && hc > 0) && {
325
+ hasChildren: true
326
+ }
327
+ });
328
+ }
329
+ for (const flat of flatNodes) {
330
+ const node = flat.sitemapNode;
331
+ if (!node.isContainer) continue;
332
+ const pos = g.node(node.id);
333
+ const hc = hiddenCounts?.get(node.id);
334
+ const metaCount = Object.keys(flat.meta).length;
335
+ const labelHeight = CONTAINER_LABEL_HEIGHT + metaCount * CONTAINER_META_LINE_HEIGHT;
336
+ const containerColor = resolveNodeColor(
337
+ node,
338
+ parsed.tagGroups,
339
+ activeTagGroup ?? null
340
+ );
341
+ if (pos) {
342
+ layoutContainers.push({
343
+ nodeId: node.id,
344
+ label: node.label,
345
+ lineNumber: node.lineNumber,
346
+ ...containerColor !== void 0 && { color: containerColor },
347
+ metadata: flat.meta,
348
+ tagMetadata: flat.fullMeta,
349
+ x: pos.x - pos.width / 2,
350
+ y: pos.y - pos.height / 2,
351
+ width: pos.width,
352
+ height: pos.height,
353
+ labelHeight,
354
+ ...hc !== void 0 && { hiddenCount: hc },
355
+ ...(node.children.length > 0 || hc != null && hc > 0) && {
356
+ hasChildren: true
357
+ }
358
+ });
359
+ } else {
360
+ const isCollapsed = collapsedContainerIds.has(node.id);
361
+ const flooredW = isCollapsed ? Math.max(flat.width, pageMaxW) : flat.width;
362
+ const fallbackH = isCollapsed ? flat.height : labelHeight + CONTAINER_PAD_BOTTOM;
363
+ const flooredH = isCollapsed ? Math.max(fallbackH, pageMaxH) : fallbackH;
364
+ layoutContainers.push({
365
+ nodeId: node.id,
366
+ label: node.label,
367
+ lineNumber: node.lineNumber,
368
+ ...containerColor !== void 0 && { color: containerColor },
369
+ metadata: flat.meta,
370
+ tagMetadata: flat.fullMeta,
371
+ x: MARGIN,
372
+ y: MARGIN,
373
+ width: flooredW,
374
+ height: flooredH,
375
+ labelHeight,
376
+ ...hc !== void 0 && { hiddenCount: hc },
377
+ ...(node.children.length > 0 || hc != null && hc > 0) && {
378
+ hasChildren: true
379
+ }
380
+ });
381
+ }
382
+ }
383
+ const deferredSet = new Set(deferredEdgeIndices);
384
+ const layoutEdges = [];
385
+ for (let i = 0; i < parsed.edges.length; i++) {
386
+ const edge = parsed.edges[i];
387
+ if (!g.hasNode(edge.sourceId) || !g.hasNode(edge.targetId)) continue;
388
+ let points;
389
+ if (deferredSet.has(i)) {
390
+ const srcNode = g.node(edge.sourceId);
391
+ const tgtNode = g.node(edge.targetId);
392
+ if (!srcNode || !tgtNode) continue;
393
+ const srcPt = clipToRectBorder(
394
+ srcNode.x,
395
+ srcNode.y,
396
+ srcNode.width,
397
+ srcNode.height,
398
+ tgtNode.x,
399
+ tgtNode.y
400
+ );
401
+ const tgtPt = clipToRectBorder(
402
+ tgtNode.x,
403
+ tgtNode.y,
404
+ tgtNode.width,
405
+ tgtNode.height,
406
+ srcNode.x,
407
+ srcNode.y
408
+ );
409
+ const midX = (srcPt.x + tgtPt.x) / 2;
410
+ const midY = (srcPt.y + tgtPt.y) / 2;
411
+ points = [srcPt, { x: midX, y: midY }, tgtPt];
412
+ } else {
413
+ const edgeData = g.edge({
414
+ v: edge.sourceId,
415
+ w: edge.targetId,
416
+ name: `e${i}`
417
+ });
418
+ if (!edgeData) continue;
419
+ points = edgeData.points ?? [];
420
+ }
421
+ layoutEdges.push({
422
+ sourceId: edge.sourceId,
423
+ targetId: edge.targetId,
424
+ points,
425
+ ...edge.label !== void 0 && { label: edge.label },
426
+ lineNumber: edge.lineNumber,
427
+ ...deferredSet.has(i) && { deferred: true }
428
+ });
429
+ }
430
+ {
431
+ const allNodeIds = /* @__PURE__ */ new Set([...pageNodeIds, ...collapsedContainerIds]);
432
+ const ufParent = /* @__PURE__ */ new Map();
433
+ for (const id of allNodeIds) ufParent.set(id, id);
434
+ const ufFind = (x) => {
435
+ while (ufParent.get(x) !== x) {
436
+ ufParent.set(x, ufParent.get(ufParent.get(x)));
437
+ x = ufParent.get(x);
438
+ }
439
+ return x;
440
+ };
441
+ const ufUnion = (a, b) => {
442
+ const ra = ufFind(a);
443
+ const rb = ufFind(b);
444
+ if (ra !== rb) ufParent.set(ra, rb);
445
+ };
446
+ for (const edge of parsed.edges) {
447
+ if (allNodeIds.has(edge.sourceId) && allNodeIds.has(edge.targetId)) {
448
+ ufUnion(edge.sourceId, edge.targetId);
449
+ }
450
+ }
451
+ const firstRootPage = flatNodes.find((f) => !f.sitemapNode.isContainer)?.sitemapNode.id;
452
+ const mainRoot = firstRootPage ? ufFind(firstRootPage) : null;
453
+ const isolatedNodeIds = /* @__PURE__ */ new Set();
454
+ for (const id of allNodeIds) {
455
+ if (mainRoot && ufFind(id) !== mainRoot) {
456
+ isolatedNodeIds.add(id);
457
+ }
458
+ }
459
+ const isolatedContainerIds = /* @__PURE__ */ new Set();
460
+ for (const cid of containerIds) {
461
+ if (collapsedContainerIds.has(cid)) {
462
+ if (isolatedNodeIds.has(cid)) isolatedContainerIds.add(cid);
463
+ continue;
464
+ }
465
+ const members = flatNodes.filter(
466
+ (f) => !f.sitemapNode.isContainer && f.parentContainerId === cid
467
+ );
468
+ if (members.length > 0 && members.every((m) => isolatedNodeIds.has(m.sitemapNode.id))) {
469
+ isolatedContainerIds.add(cid);
470
+ }
471
+ }
472
+ if (isolatedNodeIds.size > 0) {
473
+ const isVertical = parsed.direction === "TB";
474
+ let mainRight = 0;
475
+ let mainBottom = 0;
476
+ let mainTop = Infinity;
477
+ let mainLeft = Infinity;
478
+ for (const n of layoutNodes) {
479
+ if (!isolatedNodeIds.has(n.id)) {
480
+ mainRight = Math.max(mainRight, n.x + n.width / 2);
481
+ mainBottom = Math.max(mainBottom, n.y + n.height);
482
+ mainTop = Math.min(mainTop, n.y);
483
+ mainLeft = Math.min(mainLeft, n.x - n.width / 2);
484
+ }
485
+ }
486
+ for (const c of layoutContainers) {
487
+ if (!isolatedContainerIds.has(c.nodeId)) {
488
+ mainRight = Math.max(mainRight, c.x + c.width);
489
+ mainBottom = Math.max(mainBottom, c.y + c.height);
490
+ mainTop = Math.min(mainTop, c.y);
491
+ mainLeft = Math.min(mainLeft, c.x);
492
+ }
493
+ }
494
+ let isoLeft = Infinity;
495
+ let isoTop = Infinity;
496
+ let isoRight = 0;
497
+ let isoBottom = 0;
498
+ for (const n of layoutNodes) {
499
+ if (isolatedNodeIds.has(n.id)) {
500
+ isoLeft = Math.min(isoLeft, n.x - n.width / 2);
501
+ isoTop = Math.min(isoTop, n.y);
502
+ isoRight = Math.max(isoRight, n.x + n.width / 2);
503
+ isoBottom = Math.max(isoBottom, n.y + n.height);
504
+ }
505
+ }
506
+ for (const c of layoutContainers) {
507
+ if (isolatedContainerIds.has(c.nodeId)) {
508
+ isoLeft = Math.min(isoLeft, c.x);
509
+ isoTop = Math.min(isoTop, c.y);
510
+ isoRight = Math.max(isoRight, c.x + c.width);
511
+ isoBottom = Math.max(isoBottom, c.y + c.height);
512
+ }
513
+ }
514
+ if (isoLeft !== Infinity) {
515
+ const gap = OVERLAP_GAP * 2;
516
+ let shiftX;
517
+ let shiftY;
518
+ if (isVertical) {
519
+ shiftX = mainRight + gap - isoLeft;
520
+ shiftY = (mainTop === Infinity ? 0 : mainTop) - isoTop;
521
+ } else {
522
+ shiftX = (mainLeft === Infinity ? 0 : mainLeft) - isoLeft;
523
+ shiftY = mainBottom + gap - isoTop;
524
+ }
525
+ if (shiftX !== 0 || shiftY !== 0) {
526
+ for (const n of layoutNodes) {
527
+ if (isolatedNodeIds.has(n.id)) {
528
+ n.x += shiftX;
529
+ n.y += shiftY;
530
+ }
531
+ }
532
+ for (const c of layoutContainers) {
533
+ if (isolatedContainerIds.has(c.nodeId)) {
534
+ c.x += shiftX;
535
+ c.y += shiftY;
536
+ }
537
+ }
538
+ for (const e of layoutEdges) {
539
+ const srcIsolated = isolatedNodeIds.has(e.sourceId);
540
+ const tgtIsolated = isolatedNodeIds.has(e.targetId);
541
+ if (srcIsolated || tgtIsolated) {
542
+ for (const p of e.points) {
543
+ p.x += shiftX;
544
+ p.y += shiftY;
545
+ }
546
+ }
547
+ }
548
+ }
549
+ }
550
+ }
551
+ }
552
+ let totalWidth = 0;
553
+ let totalHeight = 0;
554
+ for (const node of layoutNodes) {
555
+ const right = node.x + node.width / 2;
556
+ const bottom = node.y + node.height;
557
+ if (right > totalWidth) totalWidth = right;
558
+ if (bottom > totalHeight) totalHeight = bottom;
559
+ }
560
+ for (const c of layoutContainers) {
561
+ const right = c.x + c.width;
562
+ const bottom = c.y + c.height;
563
+ if (right > totalWidth) totalWidth = right;
564
+ if (bottom > totalHeight) totalHeight = bottom;
565
+ }
566
+ for (const edge of layoutEdges) {
567
+ for (const p of edge.points) {
568
+ if (p.x > totalWidth) totalWidth = p.x;
569
+ if (p.y > totalHeight) totalHeight = p.y;
570
+ }
571
+ }
572
+ totalWidth += MARGIN;
573
+ totalHeight += MARGIN;
574
+ const usedValuesByGroup = /* @__PURE__ */ new Map();
575
+ for (const group of parsed.tagGroups) {
576
+ const key = tagAttrKey(group.name);
577
+ const used = /* @__PURE__ */ new Set();
578
+ const walk = (node) => {
579
+ if (!node.isContainer && node.metadata[key]) {
580
+ used.add(node.metadata[key].toLowerCase());
581
+ }
582
+ for (const child of node.children) walk(child);
583
+ };
584
+ for (const root of parsed.roots) walk(root);
585
+ usedValuesByGroup.set(key, used);
586
+ }
587
+ const legendGroups = computeLegendGroups(parsed.tagGroups, usedValuesByGroup);
588
+ const visibleGroups = activeTagGroup != null ? legendGroups.filter(
589
+ (g2) => g2.name.toLowerCase() === activeTagGroup.toLowerCase()
590
+ ) : legendGroups;
591
+ const allExpanded = expandAllLegend && activeTagGroup == null;
592
+ const effectiveW = (g2) => activeTagGroup != null || allExpanded ? g2.width : g2.minifiedWidth;
593
+ if (visibleGroups.length > 0) {
594
+ const legendShift = LEGEND_HEIGHT + LEGEND_GROUP_GAP;
595
+ const totalGroupsWidth = visibleGroups.reduce((s, g2) => s + effectiveW(g2), 0) + (visibleGroups.length - 1) * LEGEND_GROUP_GAP;
596
+ const neededWidth = totalGroupsWidth + MARGIN * 2;
597
+ if (neededWidth > totalWidth) totalWidth = neededWidth;
598
+ let cx = (totalWidth - totalGroupsWidth) / 2;
599
+ const legendY = totalHeight + LEGEND_GROUP_GAP;
600
+ for (const g2 of visibleGroups) {
601
+ g2.x = cx;
602
+ g2.y = legendY;
603
+ cx += effectiveW(g2) + LEGEND_GROUP_GAP;
604
+ }
605
+ totalHeight += legendShift;
606
+ }
607
+ return {
608
+ nodes: layoutNodes,
609
+ edges: layoutEdges,
610
+ containers: layoutContainers,
611
+ legend: legendGroups,
612
+ width: totalWidth,
613
+ height: totalHeight
614
+ };
615
+ }
616
+
617
+ export {
618
+ layoutSitemap
619
+ };
620
+ //# sourceMappingURL=chunk-6SM5NJQH.js.map