@diagrammo/dgmo 0.46.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 (232) hide show
  1. package/dist/advanced.d.cts +3 -855
  2. package/dist/advanced.d.ts +3 -855
  3. package/dist/advanced.js +541 -70107
  4. package/dist/analyzer-UYKBXAKR.js +15 -0
  5. package/dist/auto.cjs +1 -1
  6. package/dist/auto.js +1 -1
  7. package/dist/auto.mjs +1 -1
  8. package/dist/block.js +83 -69417
  9. package/dist/calculator-LDYQCDDY.js +11 -0
  10. package/dist/charts-d3-QOZHKTCT.js +25 -0
  11. package/dist/chunk-2DXMZRWJ.js +800 -0
  12. package/dist/chunk-2LACINWN.js +786 -0
  13. package/dist/chunk-33LCUH4H.js +893 -0
  14. package/dist/chunk-3CIOJ5YJ.js +35 -0
  15. package/dist/chunk-3HDBAXF5.js +86 -0
  16. package/dist/chunk-3JLKYGBQ.js +290 -0
  17. package/dist/chunk-3MQQNXPD.js +415 -0
  18. package/dist/chunk-3R5POCTZ.js +967 -0
  19. package/dist/chunk-3SMGIJDD.js +112 -0
  20. package/dist/chunk-44CM72SQ.js +409 -0
  21. package/dist/chunk-4GRI7MEB.js +1604 -0
  22. package/dist/chunk-4OHACBGX.js +606 -0
  23. package/dist/chunk-5DH3KYFH.js +21 -0
  24. package/dist/chunk-5MLYVTYM.js +76 -0
  25. package/dist/chunk-5QXL4NYS.js +553 -0
  26. package/dist/chunk-5WRI5ZAA.js +31 -0
  27. package/dist/chunk-6EK55ART.js +117 -0
  28. package/dist/chunk-6FZYCKXB.js +2065 -0
  29. package/dist/chunk-6HO5ZTXK.js +277 -0
  30. package/dist/chunk-6KFWC4CO.js +7 -0
  31. package/dist/chunk-6MTWIQVO.js +121 -0
  32. package/dist/chunk-6NYWYNBI.js +329 -0
  33. package/dist/chunk-6SM5NJQH.js +620 -0
  34. package/dist/chunk-725LDASD.js +422 -0
  35. package/dist/chunk-76OWZ3BA.js +130 -0
  36. package/dist/chunk-7JEGTRLD.js +338 -0
  37. package/dist/chunk-A44USUV7.js +923 -0
  38. package/dist/chunk-A4GOY3PE.js +25 -0
  39. package/dist/chunk-A4VFQH5G.js +251 -0
  40. package/dist/chunk-AELOBFW5.js +375 -0
  41. package/dist/chunk-AN2MOO5T.js +522 -0
  42. package/dist/chunk-BMR4CIEO.js +41 -0
  43. package/dist/chunk-BS7SV7C3.js +51 -0
  44. package/dist/chunk-BUPDIHML.js +613 -0
  45. package/dist/chunk-BUVJFRPY.js +887 -0
  46. package/dist/chunk-C3Z4DX3V.js +112 -0
  47. package/dist/chunk-CI2G3OEB.js +1818 -0
  48. package/dist/chunk-CKNVO24D.js +54 -0
  49. package/dist/chunk-CUVHQHZ7.js +391 -0
  50. package/dist/chunk-CXK4DZH3.js +114 -0
  51. package/dist/chunk-DKEPS5LH.js +315 -0
  52. package/dist/chunk-DU7W62N5.js +487 -0
  53. package/dist/chunk-DZAQBW35.js +751 -0
  54. package/dist/chunk-EB6FPQUP.js +316 -0
  55. package/dist/chunk-EMS2SK26.js +376 -0
  56. package/dist/chunk-ERLBPDGU.js +510 -0
  57. package/dist/chunk-EVCVDTXE.js +732 -0
  58. package/dist/chunk-FCIIHT24.js +384 -0
  59. package/dist/chunk-FFUN5D66.js +97 -0
  60. package/dist/chunk-FITOLXSX.js +714 -0
  61. package/dist/chunk-FMDSF3OV.js +68 -0
  62. package/dist/chunk-FNB3PNGF.js +410 -0
  63. package/dist/chunk-G2H74XJZ.js +2104 -0
  64. package/dist/chunk-GMR5MFHJ.js +339 -0
  65. package/dist/chunk-H6PI3KJT.js +305 -0
  66. package/dist/chunk-I46X5VUA.js +59 -0
  67. package/dist/chunk-I5IGB56C.js +255 -0
  68. package/dist/chunk-IH6ZMVQ5.js +3950 -0
  69. package/dist/chunk-IJZFN3HM.js +463 -0
  70. package/dist/chunk-IPWPWM6R.js +3079 -0
  71. package/dist/chunk-IYULMRBE.js +23 -0
  72. package/dist/chunk-IZMRON6C.js +167 -0
  73. package/dist/chunk-J5FIXQRT.js +813 -0
  74. package/dist/chunk-JED6ZDEE.js +73 -0
  75. package/dist/chunk-JEUJOX5X.js +136 -0
  76. package/dist/chunk-JM4LEPY3.js +436 -0
  77. package/dist/chunk-L3UHP6TD.js +101 -0
  78. package/dist/chunk-L66GEFB6.js +524 -0
  79. package/dist/chunk-LIOHW36Z.js +469 -0
  80. package/dist/chunk-LP7EC4MI.js +16 -0
  81. package/dist/chunk-MITI6NOL.js +548 -0
  82. package/dist/chunk-MO5YHHMQ.js +168 -0
  83. package/dist/chunk-MZSBFAPJ.js +885 -0
  84. package/dist/chunk-NNAAJVBU.js +9 -0
  85. package/dist/chunk-NOTA6TEI.js +47 -0
  86. package/dist/chunk-NURGB5Z4.js +335 -0
  87. package/dist/chunk-NX4EQS3U.js +1062 -0
  88. package/dist/chunk-NXMESY4J.js +1 -0
  89. package/dist/chunk-OJR3MQYV.js +1458 -0
  90. package/dist/chunk-OURHMODR.js +454 -0
  91. package/dist/chunk-P235SVAH.js +1057 -0
  92. package/dist/chunk-P4RH4OSP.js +1038 -0
  93. package/dist/chunk-P6T66CCZ.js +226 -0
  94. package/dist/chunk-PBAHEPLQ.js +223 -0
  95. package/dist/chunk-PBHE5UG6.js +1530 -0
  96. package/dist/chunk-PDKUANDZ.js +35 -0
  97. package/dist/chunk-PWIHZ6NJ.js +296 -0
  98. package/dist/chunk-QEBUY5NY.js +1685 -0
  99. package/dist/chunk-QLCCJEJI.js +253 -0
  100. package/dist/chunk-QOOUC2J5.js +52 -0
  101. package/dist/chunk-QYTPPDAO.js +402 -0
  102. package/dist/chunk-R3XI2VC7.js +801 -0
  103. package/dist/chunk-RCERWOJR.js +154 -0
  104. package/dist/chunk-RJE5JTVK.js +362 -0
  105. package/dist/chunk-RTLBSQ3G.js +1155 -0
  106. package/dist/chunk-RUNNI6VE.js +448 -0
  107. package/dist/chunk-RVMRZAPB.js +354 -0
  108. package/dist/chunk-RYEGFMUO.js +955 -0
  109. package/dist/chunk-RZCF2VVM.js +528 -0
  110. package/dist/chunk-SML67VPV.js +1025 -0
  111. package/dist/chunk-SQ7IY53Q.js +44 -0
  112. package/dist/chunk-SQAG3UXH.js +161 -0
  113. package/dist/chunk-SRTU6HMQ.js +1851 -0
  114. package/dist/chunk-T2OE3YQB.js +550 -0
  115. package/dist/chunk-T3UBLACL.js +299 -0
  116. package/dist/chunk-TLVIHFRO.js +296 -0
  117. package/dist/chunk-TYS6CSS5.js +52 -0
  118. package/dist/chunk-U6EQI3U6.js +130 -0
  119. package/dist/chunk-UJ4FJLBF.js +86 -0
  120. package/dist/chunk-ULOEATBZ.js +347 -0
  121. package/dist/chunk-UNCCZ3NU.js +127 -0
  122. package/dist/chunk-USZW2HHU.js +197 -0
  123. package/dist/chunk-UWN33VNX.js +1610 -0
  124. package/dist/chunk-UZ7EZW3B.js +40 -0
  125. package/dist/chunk-VOKGH627.js +37 -0
  126. package/dist/chunk-WBRZJOEC.js +204 -0
  127. package/dist/chunk-WCSOJFU3.js +380 -0
  128. package/dist/chunk-WCT3NYCV.js +160 -0
  129. package/dist/chunk-WVAJFAIA.js +529 -0
  130. package/dist/chunk-X5LCYCL5.js +394 -0
  131. package/dist/chunk-XAKEUMEJ.js +1256 -0
  132. package/dist/chunk-Y2ZE3MSG.js +590 -0
  133. package/dist/chunk-Y3J7VR52.js +646 -0
  134. package/dist/chunk-Y5QGVTVC.js +33 -0
  135. package/dist/chunk-YAA6IID3.js +548 -0
  136. package/dist/chunk-YGJTDXVR.js +692 -0
  137. package/dist/chunk-YRYKTYMQ.js +186 -0
  138. package/dist/chunk-YYVTBZZC.js +61 -0
  139. package/dist/chunk-Z5CGSFJB.js +647 -0
  140. package/dist/chunk-Z72XRXD4.js +787 -0
  141. package/dist/chunk-ZGR7ULFJ.js +978 -0
  142. package/dist/chunk-ZJEL4H2R.js +851 -0
  143. package/dist/chunk-ZO27FGJS.js +554 -0
  144. package/dist/collapse-CLPJD2RL.js +11 -0
  145. package/dist/collapse-SLINJQW6.js +9 -0
  146. package/dist/collapse-ZWUFFCK2.js +9 -0
  147. package/dist/compute-G55RG53N.js +8 -0
  148. package/dist/dgmo-router-DZCIDUO5.js +73 -0
  149. package/dist/dimensions-J3FHIMJ6.js +22 -0
  150. package/dist/element.cjs +1 -1
  151. package/dist/element.js +1 -1
  152. package/dist/element.mjs +1 -1
  153. package/dist/flowchart-parser-ZNSKIBVR.js +21 -0
  154. package/dist/flowchart-renderer-ZAEOL4DX.js +35 -0
  155. package/dist/index.cjs +3 -3
  156. package/dist/index.d.cts +3 -469
  157. package/dist/index.d.ts +3 -469
  158. package/dist/index.js +137 -69685
  159. package/dist/layout-46N4JJYK.js +17 -0
  160. package/dist/layout-5RA6QWR6.js +26 -0
  161. package/dist/layout-5T6RH5M6.js +14 -0
  162. package/dist/layout-7QXCNOVS.js +13 -0
  163. package/dist/layout-EE6GE46Y.js +17 -0
  164. package/dist/layout-G23F7LDH.js +9 -0
  165. package/dist/layout-HRBZPFCN.js +23 -0
  166. package/dist/layout-HWDSRX5E.js +20 -0
  167. package/dist/layout-HYZPWAK5.js +18 -0
  168. package/dist/layout-N76NR4ZO.js +19 -0
  169. package/dist/layout-OB3RI63S.js +14 -0
  170. package/dist/layout-S2QBYSK2.js +15 -0
  171. package/dist/layout-UM5F4DJB.js +15 -0
  172. package/dist/layout-search-OYV77HHS.js +1655 -0
  173. package/dist/load-data-EHDDZ5ZS.js +8 -0
  174. package/dist/palettes-PRJ2RI6D.js +56 -0
  175. package/dist/parser-2MFP2H2E.js +11 -0
  176. package/dist/parser-3STE62GB.js +21 -0
  177. package/dist/parser-4FL2CMDG.js +18 -0
  178. package/dist/parser-4OGOBJJ4.js +13 -0
  179. package/dist/parser-6BTRLKRZ.js +15 -0
  180. package/dist/parser-AQETEVRW.js +21 -0
  181. package/dist/parser-CFZD5IBL.js +12 -0
  182. package/dist/parser-FUSKFGZN.js +16 -0
  183. package/dist/parser-I6KXEYFK.js +13 -0
  184. package/dist/parser-IXSZZQHY.js +18 -0
  185. package/dist/parser-JAL2HD4I.js +13 -0
  186. package/dist/parser-KNSQSKQO.js +20 -0
  187. package/dist/parser-N5O4IHUN.js +13 -0
  188. package/dist/parser-NGU3ETO6.js +16 -0
  189. package/dist/parser-NRAI6O25.js +19 -0
  190. package/dist/parser-O5J4VBII.js +11 -0
  191. package/dist/parser-OV7NOBW6.js +21 -0
  192. package/dist/parser-PQ3POX45.js +23 -0
  193. package/dist/parser-TFZFBVWN.js +11 -0
  194. package/dist/parser-TRTHDFPP.js +18 -0
  195. package/dist/parser-VQP2UJ6W.js +11 -0
  196. package/dist/parser-XDVELHRK.js +13 -0
  197. package/dist/parser-XKRP7QKP.js +11 -0
  198. package/dist/parser-Y6WTBU76.js +14 -0
  199. package/dist/parser-ZSDPZYQP.js +12 -0
  200. package/dist/renderer-2XQQQ6QR.js +28 -0
  201. package/dist/renderer-5NDVNDAZ.js +26 -0
  202. package/dist/renderer-6EEZHMH4.js +26 -0
  203. package/dist/renderer-6W5462RB.js +43 -0
  204. package/dist/renderer-7MVLWWQD.js +22 -0
  205. package/dist/renderer-AWWAF6XD.js +33 -0
  206. package/dist/renderer-BYCNMBF7.js +34 -0
  207. package/dist/renderer-CLJHQPBJ.js +29 -0
  208. package/dist/renderer-GHPZMFU2.js +15 -0
  209. package/dist/renderer-JGBKUCZD.js +16 -0
  210. package/dist/renderer-KQB7UGDS.js +19 -0
  211. package/dist/renderer-PGX2TKVS.js +24 -0
  212. package/dist/renderer-QIWVHWZO.js +15 -0
  213. package/dist/renderer-RPOA5YPZ.js +35 -0
  214. package/dist/renderer-SMIBCRVB.js +24 -0
  215. package/dist/renderer-T7YKC5VP.js +28 -0
  216. package/dist/renderer-TOCOVLHS.js +37 -0
  217. package/dist/renderer-UWA5XS74.js +39 -0
  218. package/dist/renderer-VACVQYML.js +25 -0
  219. package/dist/renderer-W4M6QLIJ.js +37 -0
  220. package/dist/renderer-WZRREQ2P.js +23 -0
  221. package/dist/renderer-YY2OSF6E.js +27 -0
  222. package/dist/renderer-Z7I3W2PP.js +24 -0
  223. package/dist/renderer-ZGNTUWC4.js +22 -0
  224. package/dist/renderer-ZTR3DER3.js +19 -0
  225. package/dist/renderer-radial-C32GPJQ7.js +21 -0
  226. package/dist/resolver-NOAA7ID7.js +13 -0
  227. package/dist/state-collapse-HCGD6IVJ.js +8 -0
  228. package/dist/state-parser-Z2V23ATR.js +18 -0
  229. package/dist/state-renderer-RFYHSP4K.js +34 -0
  230. package/dist/themes-1-CuKpeH.d.cts +908 -0
  231. package/dist/themes-1-CuKpeH.d.ts +908 -0
  232. package/package.json +1 -1
@@ -0,0 +1,454 @@
1
+ import {
2
+ renderInlineText
3
+ } from "./chunk-3HDBAXF5.js";
4
+ import {
5
+ renderNodeCard
6
+ } from "./chunk-VOKGH627.js";
7
+ import {
8
+ CARD_RADIUS,
9
+ COLLAPSE_BAR_HEIGHT,
10
+ CONTAINER_HEADER_HEIGHT,
11
+ CONTAINER_LABEL_FONT_SIZE,
12
+ CONTAINER_META_FONT_SIZE,
13
+ CONTAINER_META_LINE_HEIGHT,
14
+ CONTAINER_RADIUS,
15
+ EDGE_STROKE_WIDTH,
16
+ HEADER_HEIGHT,
17
+ LABEL_FONT_SIZE,
18
+ META_FONT_SIZE,
19
+ META_LINE_HEIGHT,
20
+ NODE_STROKE_WIDTH,
21
+ SEPARATOR_GAP
22
+ } from "./chunk-3CIOJ5YJ.js";
23
+ import {
24
+ renderIntegratedLegend
25
+ } from "./chunk-PWIHZ6NJ.js";
26
+ import {
27
+ ScaleContext
28
+ } from "./chunk-YYVTBZZC.js";
29
+ import {
30
+ getMaxLegendReservedHeight
31
+ } from "./chunk-YAA6IID3.js";
32
+ import {
33
+ TITLE_FONT_SIZE,
34
+ TITLE_FONT_WEIGHT
35
+ } from "./chunk-A4GOY3PE.js";
36
+ import {
37
+ FONT_FAMILY
38
+ } from "./chunk-6KFWC4CO.js";
39
+ import {
40
+ EYE_CLOSED_PATH,
41
+ EYE_OPEN_PATH,
42
+ LEGEND_EYE_GAP,
43
+ LEGEND_EYE_SIZE,
44
+ LEGEND_GROUP_GAP,
45
+ LEGEND_HEIGHT
46
+ } from "./chunk-QOOUC2J5.js";
47
+ import {
48
+ measureText
49
+ } from "./chunk-WCT3NYCV.js";
50
+ import {
51
+ preprocessDescriptionLine
52
+ } from "./chunk-IYULMRBE.js";
53
+ import {
54
+ contrastText,
55
+ mix,
56
+ shapeFill,
57
+ themeBaseBg
58
+ } from "./chunk-P6T66CCZ.js";
59
+ import {
60
+ tagAttrKey
61
+ } from "./chunk-QLCCJEJI.js";
62
+
63
+ // src/sitemap/renderer.ts
64
+ import * as d3Selection from "d3-selection";
65
+ import * as d3Shape from "d3-shape";
66
+ var DIAGRAM_PADDING = 20;
67
+ var MAX_SCALE = 3;
68
+ var TITLE_HEIGHT = 30;
69
+ var ARROWHEAD_W = 10;
70
+ var ARROWHEAD_H = 7;
71
+ var EDGE_LABEL_FONT_SIZE = 11;
72
+ var LEGEND_FIXED_GAP = 8;
73
+ function nodeFill(palette, isDark, nodeColor, solid) {
74
+ const color = nodeColor ?? palette.primary;
75
+ return shapeFill(palette, color, isDark, {
76
+ ...solid !== void 0 && { solid }
77
+ });
78
+ }
79
+ function nodeStroke(_palette, nodeColor) {
80
+ return nodeColor ?? _palette.primary;
81
+ }
82
+ function containerFill(palette, isDark, nodeColor) {
83
+ if (nodeColor) {
84
+ return mix(nodeColor, themeBaseBg(palette, isDark), 10);
85
+ }
86
+ return mix(palette.surface, palette.bg, 40);
87
+ }
88
+ function containerStroke(palette, nodeColor) {
89
+ return nodeColor ?? palette.textMuted;
90
+ }
91
+ var lineGenerator = d3Shape.line().x((d) => d.x).y((d) => d.y).curve(d3Shape.curveBasis);
92
+ var lineGeneratorLinear = d3Shape.line().x((d) => d.x).y((d) => d.y).curve(d3Shape.curveLinear);
93
+ function renderSitemap(container, parsed, layout, palette, isDark, onClickItem, exportDims, activeTagGroup, hiddenAttributes, exportMode) {
94
+ d3Selection.select(container).selectAll(":not([data-d3-tooltip])").remove();
95
+ const width = exportDims?.width ?? container.clientWidth;
96
+ const height = exportDims?.height ?? container.clientHeight;
97
+ if (width <= 0 || height <= 0) return;
98
+ const ctx = ScaleContext.identity();
99
+ const sDiagramPadding = ctx.aesthetic(DIAGRAM_PADDING);
100
+ const sLabelFontSize = ctx.text(LABEL_FONT_SIZE);
101
+ const sMetaFontSize = ctx.text(META_FONT_SIZE);
102
+ const sMetaLineHeight = ctx.structural(META_LINE_HEIGHT);
103
+ const sHeaderHeight = ctx.structural(HEADER_HEIGHT);
104
+ const sSeparatorGap = ctx.structural(SEPARATOR_GAP);
105
+ const sEdgeStrokeWidth = ctx.structural(EDGE_STROKE_WIDTH);
106
+ const sNodeStrokeWidth = ctx.structural(NODE_STROKE_WIDTH);
107
+ const sEdgeLabelFontSize = ctx.text(EDGE_LABEL_FONT_SIZE);
108
+ const sContainerLabelFontSize = ctx.text(CONTAINER_LABEL_FONT_SIZE);
109
+ const sContainerMetaFontSize = ctx.text(CONTAINER_META_FONT_SIZE);
110
+ const sContainerMetaLineHeight = ctx.structural(CONTAINER_META_LINE_HEIGHT);
111
+ const sContainerHeaderHeight = ctx.structural(CONTAINER_HEADER_HEIGHT);
112
+ const sTitleFontSize = ctx.text(TITLE_FONT_SIZE);
113
+ const sTitleHeight = ctx.structural(TITLE_HEIGHT);
114
+ const sCollapseBarHeight = ctx.structural(COLLAPSE_BAR_HEIGHT);
115
+ const sLegendFixedGap = ctx.aesthetic(LEGEND_FIXED_GAP);
116
+ const hasLegend = layout.legend.length > 0;
117
+ const layoutLegendShift = LEGEND_HEIGHT + LEGEND_GROUP_GAP;
118
+ const showTitle = !!parsed.title && parsed.options["no-title"] !== "on";
119
+ const fixedLegend = !exportDims && hasLegend;
120
+ const fixedTitle = fixedLegend && showTitle;
121
+ const fixedTitleH = fixedTitle ? sTitleHeight : 0;
122
+ const sLegendHeight = ctx.structural(
123
+ fixedLegend ? getMaxLegendReservedHeight(
124
+ {
125
+ groups: parsed.tagGroups,
126
+ position: {
127
+ placement: "top-center",
128
+ titleRelation: "below-title"
129
+ },
130
+ mode: "preview",
131
+ capsulePillAddonWidth: LEGEND_EYE_SIZE + LEGEND_EYE_GAP
132
+ },
133
+ width
134
+ ) : LEGEND_HEIGHT
135
+ );
136
+ const legendReserveH = fixedLegend ? sLegendHeight + sLegendFixedGap : 0;
137
+ const fixedReserveTop = fixedTitleH + legendReserveH;
138
+ const fixedReserveBottom = 0;
139
+ const titleOffset = !fixedTitle && showTitle ? sTitleHeight : 0;
140
+ const diagramW = layout.width;
141
+ let diagramH = layout.height + titleOffset;
142
+ if (fixedLegend) {
143
+ diagramH -= layoutLegendShift;
144
+ }
145
+ const availH = height - sDiagramPadding * 2 - fixedReserveTop - fixedReserveBottom;
146
+ const scaleX = (width - sDiagramPadding * 2) / diagramW;
147
+ const scaleY = availH / diagramH;
148
+ const scale = Math.min(MAX_SCALE, scaleX, scaleY);
149
+ const scaledW = diagramW * scale;
150
+ const offsetX = (width - scaledW) / 2;
151
+ const offsetY = sDiagramPadding + fixedReserveTop;
152
+ const svg = d3Selection.select(container).append("svg").attr("width", width).attr("height", height).attr("viewBox", `0 0 ${width} ${height}`).attr("preserveAspectRatio", "xMidYMin meet").style("font-family", FONT_FAMILY);
153
+ if (ctx.isBelowFloor) {
154
+ svg.attr("width", "100%");
155
+ }
156
+ const defs = svg.append("defs");
157
+ defs.append("marker").attr("id", "sm-arrow").attr("viewBox", `0 0 ${ARROWHEAD_W} ${ARROWHEAD_H}`).attr("refX", ARROWHEAD_W).attr("refY", ARROWHEAD_H / 2).attr("markerWidth", ARROWHEAD_W).attr("markerHeight", ARROWHEAD_H).attr("orient", "auto").append("polygon").attr("points", `0,0 ${ARROWHEAD_W},${ARROWHEAD_H / 2} 0,${ARROWHEAD_H}`).attr("fill", palette.textMuted);
158
+ const edgeColors = /* @__PURE__ */ new Set();
159
+ for (const color of edgeColors) {
160
+ const id = `sm-arrow-${color.replace("#", "")}`;
161
+ defs.append("marker").attr("id", id).attr("viewBox", `0 0 ${ARROWHEAD_W} ${ARROWHEAD_H}`).attr("refX", ARROWHEAD_W).attr("refY", ARROWHEAD_H / 2).attr("markerWidth", ARROWHEAD_W).attr("markerHeight", ARROWHEAD_H).attr("orient", "auto").append("polygon").attr("points", `0,0 ${ARROWHEAD_W},${ARROWHEAD_H / 2} 0,${ARROWHEAD_H}`).attr("fill", color);
162
+ }
163
+ const mainG = svg.append("g").attr("transform", `translate(${offsetX}, ${offsetY}) scale(${scale})`);
164
+ if (!fixedTitle && showTitle) {
165
+ const titleEl = mainG.append("text").attr("x", diagramW / 2).attr("y", sTitleFontSize).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", sTitleFontSize).attr("font-weight", TITLE_FONT_WEIGHT).attr("class", "sitemap-title chart-title");
166
+ if (parsed.titleLineNumber) {
167
+ titleEl.attr("data-line-number", parsed.titleLineNumber);
168
+ if (onClickItem) {
169
+ titleEl.style("cursor", "pointer").on("click", () => onClickItem(parsed.titleLineNumber));
170
+ }
171
+ }
172
+ titleEl.text(parsed.title);
173
+ }
174
+ const contentShift = fixedLegend ? -layoutLegendShift : 0;
175
+ const contentG = mainG.append("g").attr("transform", `translate(0, ${titleOffset + contentShift})`);
176
+ const displayNames = /* @__PURE__ */ new Map();
177
+ const tagColors = /* @__PURE__ */ new Map();
178
+ for (const group of parsed.tagGroups) {
179
+ displayNames.set(tagAttrKey(group.name), group.name);
180
+ for (const entry of group.entries) {
181
+ tagColors.set(
182
+ `${tagAttrKey(group.name)}:${entry.value.toLowerCase()}`,
183
+ entry.color
184
+ );
185
+ }
186
+ }
187
+ for (const c of layout.containers) {
188
+ const cG = contentG.append("g").attr("transform", `translate(${c.x}, ${c.y})`).attr("class", "sitemap-container").attr("data-line-number", String(c.lineNumber));
189
+ if (c.hasChildren) {
190
+ cG.attr("data-node-toggle", c.nodeId).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", String(!c.hiddenCount)).attr("aria-label", c.label);
191
+ }
192
+ if (onClickItem) {
193
+ cG.style("cursor", "pointer").on(
194
+ "click",
195
+ () => onClickItem(c.lineNumber)
196
+ );
197
+ }
198
+ if (activeTagGroup) {
199
+ const tagKey = tagAttrKey(activeTagGroup);
200
+ const tagVal = c.tagMetadata[tagKey];
201
+ if (tagVal) cG.attr(`data-tag-${tagKey}`, tagVal.toLowerCase());
202
+ }
203
+ const fill = containerFill(palette, isDark, c.color);
204
+ const stroke = containerStroke(palette, c.color);
205
+ cG.append("rect").attr("x", 0).attr("y", 0).attr("width", c.width).attr("height", c.height).attr("rx", CONTAINER_RADIUS).attr("fill", fill).attr("stroke", stroke).attr("stroke-opacity", 0.35).attr("stroke-width", sNodeStrokeWidth);
206
+ cG.append("text").attr("x", c.width / 2).attr("y", sContainerHeaderHeight / 2 + sContainerLabelFontSize / 2 - 2).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", sContainerLabelFontSize).attr("font-weight", "bold").text(c.label);
207
+ const metaEntries = Object.entries(c.metadata);
208
+ if (metaEntries.length > 0) {
209
+ const metaDisplayKeys = metaEntries.map(
210
+ ([k]) => displayNames.get(k) ?? k
211
+ );
212
+ const maxKeyWidth = Math.max(
213
+ ...metaDisplayKeys.map(
214
+ (k) => measureText(`${k}: `, sContainerMetaFontSize)
215
+ )
216
+ );
217
+ const valueX = 10 + maxKeyWidth;
218
+ const metaStartY = sContainerHeaderHeight + sContainerMetaFontSize - 2;
219
+ for (let i = 0; i < metaEntries.length; i++) {
220
+ const [key, value] = metaEntries[i];
221
+ const displayKey = metaDisplayKeys[i];
222
+ const rowY = metaStartY + i * sContainerMetaLineHeight;
223
+ const valColor = tagColors.get(`${key}:${value.toLowerCase()}`) ?? palette.text;
224
+ cG.append("text").attr("x", 10).attr("y", rowY).attr("fill", palette.textMuted).attr("font-size", sContainerMetaFontSize).text(`${displayKey}: `);
225
+ cG.append("text").attr("x", valueX).attr("y", rowY).attr("fill", valColor).attr("font-size", sContainerMetaFontSize).text(value);
226
+ }
227
+ }
228
+ if (!exportDims && c.hiddenCount && c.hiddenCount > 0) {
229
+ const clipId = `clip-${c.nodeId}`;
230
+ cG.append("clipPath").attr("id", clipId).append("rect").attr("width", c.width).attr("height", c.height).attr("rx", CONTAINER_RADIUS);
231
+ cG.append("rect").attr("y", c.height - sCollapseBarHeight).attr("width", c.width).attr("height", sCollapseBarHeight).attr("fill", stroke).attr("clip-path", `url(#${clipId})`).attr("class", "sitemap-collapse-bar");
232
+ }
233
+ }
234
+ for (const edge of layout.edges) {
235
+ if (edge.points.length < 2) continue;
236
+ const edgeG = contentG.append("g").attr("class", "sitemap-edge-group").attr("data-line-number", String(edge.lineNumber)).attr("data-from", edge.sourceId).attr("data-to", edge.targetId);
237
+ const edgeColor = palette.textMuted;
238
+ const markerId = "sm-arrow";
239
+ const gen = edge.deferred ? lineGeneratorLinear : lineGenerator;
240
+ const pathD = gen(edge.points);
241
+ if (pathD) {
242
+ edgeG.append("path").attr("d", pathD).attr("fill", "none").attr("stroke", edgeColor).attr("stroke-width", sEdgeStrokeWidth).attr("marker-end", `url(#${markerId})`).attr("class", "sitemap-edge");
243
+ }
244
+ if (edge.label && edge.points.length >= 2) {
245
+ const mid = edge.points[Math.floor(edge.points.length / 2)];
246
+ const labelW = measureText(edge.label, sEdgeLabelFontSize) + 10;
247
+ const labelH = sEdgeLabelFontSize + 6;
248
+ edgeG.append("rect").attr("x", mid.x - labelW / 2).attr("y", mid.y - labelH / 2 - 1).attr("width", labelW).attr("height", labelH).attr("rx", 3).attr("fill", palette.bg).attr("opacity", 0.85).attr("class", "sitemap-edge-label-bg");
249
+ edgeG.append("text").attr("x", mid.x).attr("y", mid.y + 4).attr("text-anchor", "middle").attr("fill", edgeColor).attr("font-size", sEdgeLabelFontSize).attr("class", "sitemap-edge-label").text(edge.label);
250
+ }
251
+ }
252
+ for (const node of layout.nodes) {
253
+ const nodeG = contentG.append("g").attr("transform", `translate(${node.x - node.width / 2}, ${node.y})`).attr("class", "sitemap-node").attr("data-line-number", String(node.lineNumber)).attr("data-node-id", node.id);
254
+ if (node.hasChildren) {
255
+ nodeG.attr("data-node-toggle", node.id).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", String(!node.hiddenCount));
256
+ }
257
+ if (onClickItem) {
258
+ nodeG.style("cursor", "pointer").on("click", () => onClickItem(node.lineNumber));
259
+ }
260
+ if (activeTagGroup) {
261
+ const tagKey = tagAttrKey(activeTagGroup);
262
+ const tagVal = node.tagMetadata[tagKey];
263
+ if (tagVal) nodeG.attr(`data-tag-${tagKey}`, tagVal.toLowerCase());
264
+ }
265
+ const solid = parsed.options["solid-fill"] === "on";
266
+ const fill = nodeFill(palette, isDark, node.color, solid);
267
+ const stroke = nodeStroke(palette, node.color);
268
+ const labelColor = contrastText(
269
+ fill,
270
+ palette.textOnFillLight,
271
+ palette.textOnFillDark
272
+ );
273
+ renderNodeCard(nodeG, {
274
+ width: node.width,
275
+ height: node.height,
276
+ rx: CARD_RADIUS,
277
+ fill,
278
+ stroke,
279
+ strokeWidth: sNodeStrokeWidth,
280
+ label: node.label,
281
+ labelColor,
282
+ labelFontSize: sLabelFontSize,
283
+ headerHeight: sHeaderHeight
284
+ });
285
+ const metaEntries = Object.entries(node.metadata);
286
+ if (metaEntries.length > 0) {
287
+ nodeG.append("line").attr("x1", 0).attr("y1", sHeaderHeight).attr("x2", node.width).attr("y2", sHeaderHeight).attr("stroke", solid ? labelColor : stroke).attr("stroke-opacity", 0.3);
288
+ const metaDisplayKeys = metaEntries.map(
289
+ ([k]) => displayNames.get(k) ?? k
290
+ );
291
+ const maxKeyWidth = Math.max(
292
+ ...metaDisplayKeys.map((k) => measureText(`${k}: `, sMetaFontSize))
293
+ );
294
+ const valueX = 10 + maxKeyWidth;
295
+ for (let i = 0; i < metaEntries.length; i++) {
296
+ const [key, value] = metaEntries[i];
297
+ const displayKey = metaDisplayKeys[i];
298
+ const rowY = sHeaderHeight + sSeparatorGap + (i + 1) * sMetaLineHeight - 4;
299
+ const tagColor = tagColors.get(`${key}:${value.toLowerCase()}`);
300
+ const valColor = solid ? labelColor : tagColor ?? labelColor;
301
+ nodeG.append("text").attr("x", 10).attr("y", rowY).attr("fill", labelColor).attr("font-size", sMetaFontSize).text(`${displayKey}:`);
302
+ nodeG.append("text").attr("x", valueX).attr("y", rowY).attr("fill", valColor).attr("font-size", sMetaFontSize).text(value);
303
+ }
304
+ }
305
+ if (node.description && node.description.length > 0) {
306
+ const metaCount = Object.keys(node.metadata).length;
307
+ const sepY = metaCount > 0 ? sHeaderHeight + sSeparatorGap + metaCount * sMetaLineHeight : sHeaderHeight;
308
+ nodeG.append("line").attr("x1", 0).attr("y1", sepY).attr("x2", node.width).attr("y2", sepY).attr("stroke", solid ? labelColor : stroke).attr("stroke-opacity", 0.3);
309
+ const descStartY = sHeaderHeight + sSeparatorGap + metaCount * sMetaLineHeight;
310
+ for (let di = 0; di < node.description.length; di++) {
311
+ const processed = preprocessDescriptionLine(node.description[di]);
312
+ const rowY = descStartY + (di + 1) * sMetaLineHeight - 4;
313
+ const textEl = nodeG.append("text").attr("x", 10).attr("y", rowY).attr("fill", labelColor).attr("font-size", sMetaFontSize);
314
+ renderInlineText(textEl, processed, palette, sMetaFontSize);
315
+ }
316
+ }
317
+ if (!exportDims && node.hiddenCount && node.hiddenCount > 0) {
318
+ const clipId = `clip-${node.id}`;
319
+ nodeG.append("clipPath").attr("id", clipId).append("rect").attr("width", node.width).attr("height", node.height).attr("rx", CARD_RADIUS);
320
+ nodeG.append("rect").attr("y", node.height - sCollapseBarHeight).attr("width", node.width).attr("height", sCollapseBarHeight).attr("fill", solid ? labelColor : node.color ?? palette.primary).attr("opacity", 0.5).attr("clip-path", `url(#${clipId})`);
321
+ }
322
+ }
323
+ if (exportDims && hasLegend) {
324
+ renderLegend(
325
+ contentG,
326
+ layout.legend,
327
+ palette,
328
+ isDark,
329
+ activeTagGroup,
330
+ void 0,
331
+ hiddenAttributes,
332
+ exportMode
333
+ );
334
+ }
335
+ if (fixedTitle) {
336
+ const titleEl = svg.append("text").attr("x", width / 2).attr("y", sDiagramPadding + sTitleFontSize).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", sTitleFontSize).attr("font-weight", TITLE_FONT_WEIGHT).attr("class", "sitemap-title chart-title").style("font-family", FONT_FAMILY);
337
+ if (parsed.titleLineNumber) {
338
+ titleEl.attr("data-line-number", parsed.titleLineNumber);
339
+ if (onClickItem) {
340
+ titleEl.style("cursor", "pointer").on("click", () => onClickItem(parsed.titleLineNumber));
341
+ }
342
+ }
343
+ titleEl.text(parsed.title);
344
+ }
345
+ if (fixedLegend) {
346
+ const legendParent = svg.append("g").attr("class", "sitemap-legend-fixed").attr("transform", `translate(0, ${sDiagramPadding + fixedTitleH})`);
347
+ if (activeTagGroup) {
348
+ legendParent.attr("data-legend-active", tagAttrKey(activeTagGroup));
349
+ }
350
+ renderLegend(
351
+ legendParent,
352
+ layout.legend,
353
+ palette,
354
+ isDark,
355
+ activeTagGroup,
356
+ width,
357
+ hiddenAttributes,
358
+ exportMode
359
+ );
360
+ }
361
+ }
362
+ function renderLegend(parent, legendGroups, palette, isDark, activeTagGroup, fixedWidth, hiddenAttributes, exportMode) {
363
+ if (legendGroups.length === 0) return;
364
+ const groups = legendGroups.map((g) => ({
365
+ name: g.name,
366
+ entries: g.entries.map((e) => ({ value: e.value, color: e.color }))
367
+ }));
368
+ const isFixedMode = fixedWidth != null;
369
+ const eyeAddonWidth = isFixedMode ? LEGEND_EYE_SIZE + LEGEND_EYE_GAP : 0;
370
+ const containerWidth = (
371
+ // In-bounds by length === 0 early return at top of function.
372
+ fixedWidth ?? legendGroups[0].x + (legendGroups[0].width ?? 200)
373
+ );
374
+ const legendHandle = renderIntegratedLegend(parent, {
375
+ groups,
376
+ activeGroup: activeTagGroup ?? null,
377
+ mode: exportMode ? "export" : "preview",
378
+ capsulePillAddonWidth: eyeAddonWidth,
379
+ palette,
380
+ isDark,
381
+ width: containerWidth
382
+ });
383
+ parent.selectAll("[data-legend-group]").classed("sitemap-legend-group", true);
384
+ if (isFixedMode) {
385
+ const computedLayout = legendHandle.getLayout();
386
+ if (computedLayout.activeCapsule?.addonX != null) {
387
+ const capsule = computedLayout.activeCapsule;
388
+ const groupKey = tagAttrKey(capsule.groupName);
389
+ const isHidden = hiddenAttributes?.has(groupKey) ?? false;
390
+ const activeGroupEl = parent.select(`[data-legend-group="${groupKey}"]`);
391
+ if (!activeGroupEl.empty()) {
392
+ const eyeX = capsule.addonX;
393
+ const eyeY = (LEGEND_HEIGHT - LEGEND_EYE_SIZE) / 2;
394
+ const hitPad = 6;
395
+ const eyeG = activeGroupEl.append("g").attr("class", "sitemap-legend-eye").attr("data-legend-visibility", groupKey).style("cursor", "pointer").attr("opacity", isHidden ? 0.4 : 0.7);
396
+ eyeG.append("rect").attr("x", eyeX - hitPad).attr("y", eyeY - hitPad).attr("width", LEGEND_EYE_SIZE + hitPad * 2).attr("height", LEGEND_EYE_SIZE + hitPad * 2).attr("fill", "transparent").attr("pointer-events", "all");
397
+ eyeG.append("path").attr("d", isHidden ? EYE_CLOSED_PATH : EYE_OPEN_PATH).attr("transform", `translate(${eyeX}, ${eyeY})`).attr("fill", "none").attr("stroke", palette.textMuted).attr("stroke-width", 1.2).attr("stroke-linecap", "round").attr("stroke-linejoin", "round");
398
+ }
399
+ }
400
+ }
401
+ }
402
+ async function renderSitemapForExport(content, theme, palette) {
403
+ const { parseSitemap } = await import("./parser-NGU3ETO6.js");
404
+ const { layoutSitemap } = await import("./layout-5T6RH5M6.js");
405
+ const { getPalette } = await import("./palettes-PRJ2RI6D.js");
406
+ const isDark = theme === "dark";
407
+ const effectivePalette = palette ?? (isDark ? getPalette("nord").dark : getPalette("nord").light);
408
+ const parsed = parseSitemap(content, effectivePalette);
409
+ if (parsed.error || parsed.roots.length === 0) return "";
410
+ const sitemapLayout = layoutSitemap(parsed, void 0, null, void 0, true);
411
+ const PADDING = 20;
412
+ const titleOffset = parsed.title ? 30 : 0;
413
+ const exportWidth = sitemapLayout.width + PADDING * 2;
414
+ const exportHeight = sitemapLayout.height + PADDING * 2 + titleOffset;
415
+ const container = document.createElement("div");
416
+ container.style.width = `${exportWidth}px`;
417
+ container.style.height = `${exportHeight}px`;
418
+ container.style.position = "absolute";
419
+ container.style.left = "-9999px";
420
+ document.body.appendChild(container);
421
+ renderSitemap(
422
+ container,
423
+ parsed,
424
+ sitemapLayout,
425
+ effectivePalette,
426
+ isDark,
427
+ void 0,
428
+ {
429
+ width: exportWidth,
430
+ height: exportHeight
431
+ }
432
+ );
433
+ const svgEl = container.querySelector("svg");
434
+ if (!svgEl) {
435
+ document.body.removeChild(container);
436
+ return "";
437
+ }
438
+ if (theme === "transparent") {
439
+ svgEl.style.background = "none";
440
+ } else if (!svgEl.style.background) {
441
+ svgEl.style.background = effectivePalette.bg;
442
+ }
443
+ svgEl.setAttribute("xmlns", "http://www.w3.org/2000/svg");
444
+ svgEl.style.fontFamily = FONT_FAMILY;
445
+ const svgHtml = svgEl.outerHTML;
446
+ document.body.removeChild(container);
447
+ return svgHtml;
448
+ }
449
+
450
+ export {
451
+ renderSitemap,
452
+ renderSitemapForExport
453
+ };
454
+ //# sourceMappingURL=chunk-OURHMODR.js.map