@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,487 @@
1
+ import {
2
+ extractExportSvg,
3
+ runInExportContainer
4
+ } from "./chunk-Y5QGVTVC.js";
5
+ import {
6
+ renderCollapseBar,
7
+ renderNodeCard
8
+ } from "./chunk-VOKGH627.js";
9
+ import {
10
+ CARD_RADIUS,
11
+ COLLAPSE_BAR_HEIGHT,
12
+ COLLAPSE_BAR_INSET,
13
+ CONTAINER_HEADER_HEIGHT,
14
+ CONTAINER_LABEL_FONT_SIZE,
15
+ CONTAINER_META_FONT_SIZE,
16
+ CONTAINER_META_LINE_HEIGHT,
17
+ CONTAINER_RADIUS,
18
+ EDGE_STROKE_WIDTH,
19
+ HEADER_HEIGHT,
20
+ LABEL_FONT_SIZE,
21
+ META_FONT_SIZE,
22
+ META_LINE_HEIGHT,
23
+ NODE_STROKE_WIDTH,
24
+ SEPARATOR_GAP
25
+ } from "./chunk-3CIOJ5YJ.js";
26
+ import {
27
+ layoutOrg
28
+ } from "./chunk-J5FIXQRT.js";
29
+ import {
30
+ renderIntegratedLegend
31
+ } from "./chunk-PWIHZ6NJ.js";
32
+ import {
33
+ ScaleContext
34
+ } from "./chunk-YYVTBZZC.js";
35
+ import {
36
+ getMaxLegendReservedHeight
37
+ } from "./chunk-YAA6IID3.js";
38
+ import {
39
+ TITLE_FONT_SIZE,
40
+ TITLE_FONT_WEIGHT
41
+ } from "./chunk-A4GOY3PE.js";
42
+ import {
43
+ FONT_FAMILY
44
+ } from "./chunk-6KFWC4CO.js";
45
+ import {
46
+ EYE_CLOSED_PATH,
47
+ EYE_OPEN_PATH,
48
+ LEGEND_EYE_GAP,
49
+ LEGEND_EYE_SIZE,
50
+ LEGEND_GROUP_GAP,
51
+ LEGEND_HEIGHT
52
+ } from "./chunk-QOOUC2J5.js";
53
+ import {
54
+ measureText
55
+ } from "./chunk-WCT3NYCV.js";
56
+ import {
57
+ parseOrg
58
+ } from "./chunk-RVMRZAPB.js";
59
+ import {
60
+ contrastText,
61
+ mix,
62
+ shapeFill,
63
+ themeBaseBg
64
+ } from "./chunk-P6T66CCZ.js";
65
+ import {
66
+ resolveTagColor,
67
+ tagAttrKey
68
+ } from "./chunk-QLCCJEJI.js";
69
+
70
+ // src/org/renderer.ts
71
+ import * as d3Selection from "d3-selection";
72
+ var DIAGRAM_PADDING = 20;
73
+ var MAX_SCALE = 3;
74
+ var TITLE_HEIGHT = 30;
75
+ var ANCESTOR_DOT_R = 4;
76
+ var ANCESTOR_LABEL_FONT_SIZE = 11;
77
+ var ANCESTOR_ROW_HEIGHT = 22;
78
+ var ANCESTOR_TRAIL_BOTTOM_GAP = 16;
79
+ var LEGEND_FIXED_GAP = 8;
80
+ function nodeFill(palette, isDark, nodeColor, solid) {
81
+ const color = nodeColor ?? palette.primary;
82
+ return shapeFill(palette, color, isDark, {
83
+ ...solid !== void 0 && { solid }
84
+ });
85
+ }
86
+ function nodeStroke(palette, nodeColor) {
87
+ return nodeColor ?? palette.primary;
88
+ }
89
+ function containerFill(palette, isDark, nodeColor) {
90
+ if (nodeColor) {
91
+ return mix(nodeColor, themeBaseBg(palette, isDark), 10);
92
+ }
93
+ return mix(palette.surface, palette.bg, 40);
94
+ }
95
+ function containerStroke(palette, nodeColor) {
96
+ return nodeColor ?? palette.textMuted;
97
+ }
98
+ function renderOrg(container, parsed, layout, palette, isDark, onClickItem, exportDims, activeTagGroup, hiddenAttributes, ancestorPath, exportMode) {
99
+ d3Selection.select(container).selectAll(":not([data-d3-tooltip])").remove();
100
+ const width = exportDims?.width ?? container.clientWidth;
101
+ const height = exportDims?.height ?? container.clientHeight;
102
+ if (width <= 0 || height <= 0) return;
103
+ const ctx = ScaleContext.identity();
104
+ const sDiagramPadding = ctx.aesthetic(DIAGRAM_PADDING);
105
+ const sTitleHeight = ctx.structural(TITLE_HEIGHT);
106
+ const sLabelFontSize = ctx.text(LABEL_FONT_SIZE);
107
+ const sMetaFontSize = ctx.text(META_FONT_SIZE);
108
+ const sMetaLineHeight = ctx.structural(META_LINE_HEIGHT);
109
+ const sHeaderHeight = ctx.structural(HEADER_HEIGHT);
110
+ const sSeparatorGap = ctx.structural(SEPARATOR_GAP);
111
+ const sEdgeStrokeWidth = ctx.structural(EDGE_STROKE_WIDTH);
112
+ const sNodeStrokeWidth = ctx.structural(NODE_STROKE_WIDTH);
113
+ const sCardRadius = ctx.structural(CARD_RADIUS);
114
+ const sContainerRadius = ctx.structural(CONTAINER_RADIUS);
115
+ const sContainerLabelFontSize = ctx.text(CONTAINER_LABEL_FONT_SIZE);
116
+ const sContainerMetaFontSize = ctx.text(CONTAINER_META_FONT_SIZE);
117
+ const sContainerMetaLineHeight = ctx.structural(CONTAINER_META_LINE_HEIGHT);
118
+ const sContainerHeaderHeight = ctx.structural(CONTAINER_HEADER_HEIGHT);
119
+ const sCollapseBarHeight = ctx.structural(COLLAPSE_BAR_HEIGHT);
120
+ const sCollapseBarInset = ctx.structural(COLLAPSE_BAR_INSET);
121
+ const sAncestorDotR = ctx.structural(ANCESTOR_DOT_R);
122
+ const sAncestorLabelFontSize = ctx.text(ANCESTOR_LABEL_FONT_SIZE);
123
+ const sAncestorRowHeight = ctx.structural(ANCESTOR_ROW_HEIGHT);
124
+ const sAncestorTrailBottomGap = ctx.structural(ANCESTOR_TRAIL_BOTTOM_GAP);
125
+ const sLegendFixedGap = ctx.aesthetic(LEGEND_FIXED_GAP);
126
+ const showTitle = !!parsed.title && parsed.options["no-title"] !== "on";
127
+ const titleOffset = showTitle ? sTitleHeight : 0;
128
+ const legendOnly = layout.nodes.length === 0;
129
+ const hasLegend = layout.legend.length > 0;
130
+ const layoutLegendShift = LEGEND_HEIGHT + LEGEND_GROUP_GAP;
131
+ const fixedLegend = !exportDims && hasLegend && !legendOnly;
132
+ const legendReserve = fixedLegend ? getMaxLegendReservedHeight(
133
+ {
134
+ groups: parsed.tagGroups,
135
+ position: { placement: "top-center", titleRelation: "below-title" },
136
+ mode: "preview",
137
+ capsulePillAddonWidth: LEGEND_EYE_SIZE + LEGEND_EYE_GAP
138
+ },
139
+ width
140
+ ) + sLegendFixedGap : 0;
141
+ const fixedTitle = !exportDims && showTitle;
142
+ const titleReserve = fixedTitle ? sTitleHeight : 0;
143
+ const hasAncestorTrail = !exportDims && ancestorPath && ancestorPath.length > 0;
144
+ const ancestorTrailHeight = hasAncestorTrail ? ancestorPath.length * sAncestorRowHeight + sAncestorTrailBottomGap : 0;
145
+ const diagramW = layout.width;
146
+ let diagramH = layout.height + (fixedTitle ? 0 : titleOffset) + ancestorTrailHeight;
147
+ if (fixedLegend) {
148
+ diagramH -= layoutLegendShift;
149
+ }
150
+ const availH = height - sDiagramPadding * 2 - legendReserve - titleReserve;
151
+ const scaleX = (width - sDiagramPadding * 2) / diagramW;
152
+ const scaleY = availH / diagramH;
153
+ const scale = Math.min(MAX_SCALE, scaleX, scaleY);
154
+ const scaledW = diagramW * scale;
155
+ const offsetX = (width - scaledW) / 2;
156
+ const offsetY = fixedLegend ? sDiagramPadding + legendReserve + titleReserve : sDiagramPadding + titleReserve;
157
+ 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);
158
+ if (ctx.isBelowFloor) {
159
+ svg.attr("width", "100%");
160
+ }
161
+ const mainG = svg.append("g").attr("transform", `translate(${offsetX}, ${offsetY}) scale(${scale})`);
162
+ if (showTitle) {
163
+ const titleParent = fixedTitle ? svg : mainG;
164
+ const titleX = fixedTitle ? width / 2 : diagramW / 2;
165
+ const titleY = fixedTitle ? sDiagramPadding + TITLE_FONT_SIZE : TITLE_FONT_SIZE;
166
+ const titleEl = titleParent.append("text").attr("x", titleX).attr("y", titleY).attr("text-anchor", "middle").attr("fill", palette.text).attr("font-size", TITLE_FONT_SIZE).attr("font-weight", TITLE_FONT_WEIGHT).attr("class", "org-title chart-title").style(
167
+ "cursor",
168
+ onClickItem && parsed.titleLineNumber ? "pointer" : "default"
169
+ ).text(parsed.title);
170
+ if (parsed.titleLineNumber) {
171
+ titleEl.attr("data-line-number", parsed.titleLineNumber);
172
+ if (onClickItem) {
173
+ titleEl.on("click", () => onClickItem(parsed.titleLineNumber)).on("mouseenter", function() {
174
+ d3Selection.select(this).attr("opacity", 0.7);
175
+ }).on("mouseleave", function() {
176
+ d3Selection.select(this).attr("opacity", 1);
177
+ });
178
+ }
179
+ }
180
+ }
181
+ const contentYShift = (fixedTitle ? 0 : titleOffset) + ancestorTrailHeight;
182
+ const contentG = mainG.append("g").attr("transform", `translate(0, ${contentYShift})`);
183
+ const displayNames = /* @__PURE__ */ new Map();
184
+ for (const group of parsed.tagGroups) {
185
+ displayNames.set(tagAttrKey(group.name), group.name);
186
+ }
187
+ const rootNodeIds = new Set(parsed.roots.map((r) => r.id));
188
+ const colorOff = parsed.options?.["color"] === "off";
189
+ for (const c of layout.containers) {
190
+ const cG = contentG.append("g").attr("transform", `translate(${c.x}, ${c.y})`).attr("class", "org-container").attr("data-line-number", String(c.lineNumber));
191
+ if (activeTagGroup) {
192
+ const tagKey = tagAttrKey(activeTagGroup);
193
+ const metaValue = c.tagMetadata[tagKey];
194
+ if (metaValue) {
195
+ cG.attr(`data-tag-${tagKey}`, metaValue.toLowerCase());
196
+ }
197
+ }
198
+ if (c.hasChildren) {
199
+ cG.attr("data-node-toggle", c.nodeId).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", String(!c.hiddenCount)).attr("aria-label", c.label);
200
+ }
201
+ if (onClickItem) {
202
+ cG.style("cursor", "pointer").on("click", () => {
203
+ onClickItem(c.lineNumber);
204
+ });
205
+ }
206
+ const fill = containerFill(palette, isDark, colorOff ? void 0 : c.color);
207
+ const stroke = containerStroke(palette, colorOff ? void 0 : c.color);
208
+ cG.append("rect").attr("x", 0).attr("y", 0).attr("width", c.width).attr("height", c.height).attr("rx", sContainerRadius).attr("fill", fill).attr("stroke", stroke).attr("stroke-opacity", 0.35).attr("stroke-width", sNodeStrokeWidth);
209
+ 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);
210
+ const metaEntries = Object.entries(c.metadata);
211
+ if (metaEntries.length > 0) {
212
+ const metaDisplayKeys = metaEntries.map(
213
+ ([k]) => displayNames.get(k) ?? k
214
+ );
215
+ const maxKeyWidth = Math.max(
216
+ ...metaDisplayKeys.map(
217
+ (k) => measureText(`${k}: `, sContainerMetaFontSize)
218
+ )
219
+ );
220
+ const valueX = 10 + maxKeyWidth;
221
+ const metaStartY = sContainerHeaderHeight + sContainerMetaFontSize - 2;
222
+ for (let i = 0; i < metaEntries.length; i++) {
223
+ const [, value] = metaEntries[i];
224
+ const displayKey = metaDisplayKeys[i];
225
+ const rowY = metaStartY + i * sContainerMetaLineHeight;
226
+ cG.append("text").attr("x", 10).attr("y", rowY).attr("fill", palette.textMuted).attr("font-size", sContainerMetaFontSize).text(`${displayKey}: `);
227
+ cG.append("text").attr("x", valueX).attr("y", rowY).attr("fill", palette.text).attr("font-size", sContainerMetaFontSize).text(value);
228
+ }
229
+ }
230
+ if (!exportDims && c.hiddenCount && c.hiddenCount > 0) {
231
+ renderCollapseBar(cG, {
232
+ width: c.width,
233
+ height: c.height,
234
+ barHeight: sCollapseBarHeight,
235
+ inset: sCollapseBarInset,
236
+ rx: sContainerRadius,
237
+ fill: containerStroke(palette, colorOff ? void 0 : c.color),
238
+ clipId: `clip-${c.nodeId}`,
239
+ className: "org-collapse-bar"
240
+ });
241
+ }
242
+ if (!exportDims && c.hasChildren && !rootNodeIds.has(c.nodeId)) {
243
+ const iconSize = 14;
244
+ const iconPad = 5;
245
+ const iconX = c.width - iconSize - iconPad;
246
+ const iconY = iconPad;
247
+ const focusG = cG.append("g").attr("class", "org-focus-icon").attr("data-focus-node", c.nodeId).attr("data-export-ignore", "true").attr("transform", `translate(${iconX}, ${iconY})`);
248
+ focusG.append("rect").attr("x", -3).attr("y", -3).attr("width", iconSize + 6).attr("height", iconSize + 6).attr("fill", "transparent");
249
+ const iconColor = contrastText(
250
+ fill,
251
+ palette.textOnFillLight,
252
+ palette.textOnFillDark
253
+ );
254
+ const cx = iconSize / 2;
255
+ const cy = iconSize / 2;
256
+ focusG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", iconSize / 2 - 1).attr("fill", "none").attr("stroke", iconColor).attr("stroke-width", 1.5);
257
+ focusG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", 2).attr("fill", iconColor);
258
+ }
259
+ }
260
+ for (const edge of layout.edges) {
261
+ if (edge.points.length < 2) continue;
262
+ const pathParts = [];
263
+ pathParts.push(`M ${edge.points[0].x} ${edge.points[0].y}`);
264
+ for (let i = 1; i < edge.points.length; i++) {
265
+ pathParts.push(`L ${edge.points[i].x} ${edge.points[i].y}`);
266
+ }
267
+ contentG.append("path").attr("d", pathParts.join(" ")).attr("fill", "none").attr("stroke", palette.textMuted).attr("stroke-width", sEdgeStrokeWidth).attr("class", "org-edge").attr("data-from", edge.sourceId).attr("data-to", edge.targetId);
268
+ }
269
+ const containerNodeIds = new Set(layout.containers.map((c) => c.nodeId));
270
+ for (const node of layout.nodes) {
271
+ if (containerNodeIds.has(node.id)) continue;
272
+ const nodeG = contentG.append("g").attr("transform", `translate(${node.x - node.width / 2}, ${node.y})`).attr("class", "org-node").attr("data-line-number", String(node.lineNumber)).attr("data-node-id", node.id);
273
+ if (activeTagGroup) {
274
+ const tagKey = tagAttrKey(activeTagGroup);
275
+ const metaValue = node.tagMetadata[tagKey];
276
+ if (metaValue) {
277
+ nodeG.attr(`data-tag-${tagKey}`, metaValue.toLowerCase());
278
+ }
279
+ }
280
+ if (node.hasChildren) {
281
+ nodeG.attr("data-node-toggle", node.id).attr("tabindex", "0").attr("role", "button").attr("aria-expanded", String(!node.hiddenCount)).attr("aria-label", node.label);
282
+ }
283
+ if (onClickItem) {
284
+ nodeG.style("cursor", "pointer").on("click", () => {
285
+ onClickItem(node.lineNumber);
286
+ });
287
+ }
288
+ const solid = parsed.options["solid-fill"] === "on";
289
+ const fill = nodeFill(
290
+ palette,
291
+ isDark,
292
+ colorOff ? void 0 : node.color,
293
+ solid
294
+ );
295
+ const stroke = nodeStroke(palette, colorOff ? void 0 : node.color);
296
+ const labelColor = contrastText(
297
+ fill,
298
+ palette.textOnFillLight,
299
+ palette.textOnFillDark
300
+ );
301
+ const metaEntries = Object.entries(node.metadata);
302
+ renderNodeCard(nodeG, {
303
+ width: node.width,
304
+ height: node.height,
305
+ rx: sCardRadius,
306
+ fill,
307
+ stroke,
308
+ strokeWidth: sNodeStrokeWidth,
309
+ ...node.isContainer && { dashed: true },
310
+ label: node.label,
311
+ labelColor,
312
+ labelFontSize: sLabelFontSize,
313
+ headerHeight: sHeaderHeight,
314
+ ...metaEntries.length > 0 && {
315
+ meta: {
316
+ rows: metaEntries.map(
317
+ ([k, value]) => [displayNames.get(k) ?? k, value]
318
+ ),
319
+ fontSize: sMetaFontSize,
320
+ lineHeight: sMetaLineHeight,
321
+ separatorGap: sSeparatorGap,
322
+ separatorColor: solid ? labelColor : stroke,
323
+ textColor: labelColor
324
+ }
325
+ }
326
+ });
327
+ if (!exportDims && node.hiddenCount && node.hiddenCount > 0) {
328
+ renderCollapseBar(nodeG, {
329
+ width: node.width,
330
+ height: node.height,
331
+ barHeight: sCollapseBarHeight,
332
+ inset: sCollapseBarInset,
333
+ rx: sCardRadius,
334
+ fill: solid ? labelColor : nodeStroke(palette, colorOff ? void 0 : node.color),
335
+ clipId: `clip-${node.id}`,
336
+ className: "org-collapse-bar"
337
+ });
338
+ }
339
+ if (!exportDims && node.hasChildren && !rootNodeIds.has(node.id)) {
340
+ const iconSize = 14;
341
+ const iconPad = 5;
342
+ const iconX = node.width - iconSize - iconPad;
343
+ const iconY = iconPad;
344
+ const focusG = nodeG.append("g").attr("class", "org-focus-icon").attr("data-focus-node", node.id).attr("data-export-ignore", "true").attr("transform", `translate(${iconX}, ${iconY})`);
345
+ focusG.append("rect").attr("x", -3).attr("y", -3).attr("width", iconSize + 6).attr("height", iconSize + 6).attr("fill", "transparent");
346
+ const iconColor = labelColor;
347
+ const cx = iconSize / 2;
348
+ const cy = iconSize / 2;
349
+ focusG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", iconSize / 2 - 1).attr("fill", "none").attr("stroke", iconColor).attr("stroke-width", 1.5);
350
+ focusG.append("circle").attr("cx", cx).attr("cy", cy).attr("r", 2).attr("fill", iconColor);
351
+ }
352
+ }
353
+ if (hasAncestorTrail) {
354
+ const rootNode = layout.nodes.find((n) => rootNodeIds.has(n.id));
355
+ const rootContainer = !rootNode ? layout.containers.find((c) => rootNodeIds.has(c.nodeId)) : null;
356
+ const rootCenterX = rootNode ? rootNode.x : rootContainer ? rootContainer.x + rootContainer.width / 2 : null;
357
+ const rootTopY = rootNode ? rootNode.y : rootContainer ? rootContainer.y : null;
358
+ if (rootCenterX !== null && rootTopY !== null) {
359
+ const trailBottomY = rootTopY - sAncestorTrailBottomGap;
360
+ const trailG = contentG.append("g").attr("class", "org-ancestor-trail");
361
+ const count = ancestorPath.length;
362
+ const dotPositions = [];
363
+ for (let i = 0; i < count; i++) {
364
+ const fromBottom = count - 1 - i;
365
+ dotPositions.push(trailBottomY - fromBottom * sAncestorRowHeight);
366
+ }
367
+ const lineTopY = dotPositions[0];
368
+ trailG.append("line").attr("x1", rootCenterX).attr("y1", lineTopY).attr("x2", rootCenterX).attr("y2", rootTopY).attr("stroke", palette.textMuted).attr("stroke-width", 1.5).attr("stroke-opacity", 0.4);
369
+ for (let i = 0; i < count; i++) {
370
+ const ancestor = ancestorPath[i];
371
+ const dotY = dotPositions[i];
372
+ const resolvedColor = ancestor.color ?? resolveTagColor(
373
+ ancestor.metadata,
374
+ [...parsed.tagGroups],
375
+ activeTagGroup ?? null,
376
+ ancestor.isContainer
377
+ );
378
+ const dotColor = resolvedColor ?? palette.textMuted;
379
+ const rowG = trailG.append("g").attr("class", "org-ancestor-node").attr("data-focus-ancestor", ancestor.id).style("cursor", "pointer").attr("transform", `translate(${rootCenterX}, ${dotY})`);
380
+ rowG.append("rect").attr("x", -sAncestorDotR - 2).attr("y", -sAncestorDotR - 2).attr("width", 120).attr("height", sAncestorDotR * 2 + 4).attr("fill", "transparent");
381
+ rowG.append("circle").attr("cx", 0).attr("cy", 0).attr("r", sAncestorDotR).attr("fill", dotColor);
382
+ rowG.append("text").attr("x", sAncestorDotR + 6).attr("y", sAncestorLabelFontSize * 0.35).attr("fill", palette.textMuted).attr("font-size", sAncestorLabelFontSize).text(ancestor.label);
383
+ rowG.on("mouseenter", function() {
384
+ d3Selection.select(this).select("circle").attr("r", sAncestorDotR + 1);
385
+ d3Selection.select(this).select("text").attr("fill", palette.text);
386
+ }).on("mouseleave", function() {
387
+ d3Selection.select(this).select("circle").attr("r", sAncestorDotR);
388
+ d3Selection.select(this).select("text").attr("fill", palette.textMuted);
389
+ });
390
+ }
391
+ }
392
+ }
393
+ if (fixedLegend || legendOnly || exportDims && hasLegend) {
394
+ const groups = layout.legend.map((g) => ({
395
+ name: g.name,
396
+ entries: g.entries.map((e) => ({ value: e.value, color: e.color }))
397
+ }));
398
+ const eyeAddonWidth = fixedLegend ? LEGEND_EYE_SIZE + LEGEND_EYE_GAP : 0;
399
+ const legendParentBase = fixedLegend ? svg.append("g").attr("class", "org-legend-fixed").attr("transform", `translate(0, ${sDiagramPadding + titleReserve})`) : contentG.append("g");
400
+ let legendHandle;
401
+ if (legendOnly) {
402
+ for (const lg of layout.legend) {
403
+ const singleConfig = {
404
+ groups: [
405
+ {
406
+ name: lg.name,
407
+ entries: lg.entries.map((e) => ({
408
+ value: e.value,
409
+ color: e.color
410
+ }))
411
+ }
412
+ ],
413
+ position: { placement: "top-center", titleRelation: "below-title" },
414
+ mode: exportMode ? "export" : "preview"
415
+ };
416
+ const groupG = legendParentBase.append("g").attr("transform", `translate(${lg.x}, ${lg.y})`);
417
+ renderIntegratedLegend(groupG, {
418
+ ...singleConfig,
419
+ palette,
420
+ isDark,
421
+ width: lg.width,
422
+ activeGroup: lg.name
423
+ });
424
+ groupG.selectAll("[data-legend-group]").classed("org-legend-group", true);
425
+ }
426
+ legendHandle = null;
427
+ } else {
428
+ const legendConfig = {
429
+ groups,
430
+ position: { placement: "top-center", titleRelation: "below-title" },
431
+ mode: exportMode ? "export" : "preview",
432
+ capsulePillAddonWidth: eyeAddonWidth
433
+ };
434
+ legendHandle = renderIntegratedLegend(legendParentBase, {
435
+ ...legendConfig,
436
+ palette,
437
+ isDark,
438
+ width: fixedLegend ? width : layout.width,
439
+ activeGroup: activeTagGroup ?? null
440
+ });
441
+ legendParentBase.selectAll("[data-legend-group]").classed("org-legend-group", true);
442
+ }
443
+ if (fixedLegend && legendHandle) {
444
+ const computedLayout = legendHandle.getLayout();
445
+ if (computedLayout.activeCapsule?.addonX != null) {
446
+ const capsule = computedLayout.activeCapsule;
447
+ const groupKey = tagAttrKey(capsule.groupName);
448
+ const isHidden = hiddenAttributes?.has(groupKey) ?? false;
449
+ const activeGroupEl = legendParentBase.select(
450
+ `[data-legend-group="${groupKey}"]`
451
+ );
452
+ if (!activeGroupEl.empty()) {
453
+ const eyeX = capsule.addonX;
454
+ const eyeY = (LEGEND_HEIGHT - LEGEND_EYE_SIZE) / 2;
455
+ const hitPad = 6;
456
+ const eyeG = activeGroupEl.append("g").attr("class", "org-legend-eye").attr("data-legend-visibility", groupKey).style("cursor", "pointer").attr("opacity", isHidden ? 0.4 : 0.7);
457
+ 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");
458
+ 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");
459
+ }
460
+ }
461
+ }
462
+ }
463
+ }
464
+ function renderOrgForExport(content, theme, palette) {
465
+ const parsed = parseOrg(content, palette);
466
+ if (parsed.error) return "";
467
+ const hideOption = parsed.options?.["hide"];
468
+ const exportHidden = hideOption ? new Set(hideOption.split(",").map((s) => s.trim().toLowerCase())) : void 0;
469
+ const layout = layoutOrg(parsed, void 0, void 0, exportHidden);
470
+ const isDark = theme === "dark";
471
+ const titleOffset = parsed.title && parsed.options["no-title"] !== "on" ? TITLE_HEIGHT : 0;
472
+ const exportWidth = layout.width + DIAGRAM_PADDING * 2;
473
+ const exportHeight = layout.height + DIAGRAM_PADDING * 2 + titleOffset;
474
+ return runInExportContainer(exportWidth, exportHeight, (container) => {
475
+ renderOrg(container, parsed, layout, palette, isDark, void 0, {
476
+ width: exportWidth,
477
+ height: exportHeight
478
+ });
479
+ return extractExportSvg(container, theme);
480
+ });
481
+ }
482
+
483
+ export {
484
+ renderOrg,
485
+ renderOrgForExport
486
+ };
487
+ //# sourceMappingURL=chunk-DU7W62N5.js.map