@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,35 @@
1
+ // src/utils/fit-canvas.ts
2
+ function fitDiagramToCanvas(p) {
3
+ const scaleX = (p.width - p.padding * 2) / p.diagramW;
4
+ let scale;
5
+ let canvasHeight;
6
+ if (p.exportMode) {
7
+ scale = Math.min(p.maxScale, scaleX);
8
+ canvasHeight = p.titleHeight + p.diagramH * scale + p.padding * 2;
9
+ } else {
10
+ const availH = p.height - p.titleHeight;
11
+ const scaleY = (availH - p.padding * 2) / p.diagramH;
12
+ scale = Math.min(p.maxScale, scaleX, scaleY);
13
+ canvasHeight = p.height;
14
+ }
15
+ const scaledW = p.diagramW * scale;
16
+ return {
17
+ scale,
18
+ offsetX: (p.width - scaledW) / 2,
19
+ offsetY: p.titleHeight + p.padding,
20
+ canvasHeight
21
+ };
22
+ }
23
+
24
+ // src/graph/edge-spline.ts
25
+ import * as d3Shape from "d3-shape";
26
+ var lineGenerator = d3Shape.line().x((d) => d.x).y((d) => d.y).curve(d3Shape.curveBasis);
27
+ function edgeSplinePath(points) {
28
+ return lineGenerator(points);
29
+ }
30
+
31
+ export {
32
+ fitDiagramToCanvas,
33
+ edgeSplinePath
34
+ };
35
+ //# sourceMappingURL=chunk-PDKUANDZ.js.map
@@ -0,0 +1,296 @@
1
+ import {
2
+ computeLegendLayout
3
+ } from "./chunk-YAA6IID3.js";
4
+ import {
5
+ FONT_FAMILY
6
+ } from "./chunk-6KFWC4CO.js";
7
+ import {
8
+ CONTROLS_ICON_PATH,
9
+ LEGEND_DOT_R,
10
+ LEGEND_ENTRY_DOT_GAP,
11
+ LEGEND_ENTRY_FONT_SIZE,
12
+ LEGEND_HEIGHT,
13
+ LEGEND_PILL_FONT_SIZE,
14
+ LEGEND_TOGGLE_DOT_R,
15
+ LEGEND_TOGGLE_OFF_OPACITY,
16
+ measureLegendText
17
+ } from "./chunk-QOOUC2J5.js";
18
+ import {
19
+ mix,
20
+ valueRampStops
21
+ } from "./chunk-P6T66CCZ.js";
22
+ import {
23
+ tagAttrKey
24
+ } from "./chunk-QLCCJEJI.js";
25
+
26
+ // src/utils/legend-d3.ts
27
+ var LEGEND_TEXT_DY = "0.32em";
28
+ function centerText(sel) {
29
+ return sel.attr("dy", LEGEND_TEXT_DY);
30
+ }
31
+ function renderLegendD3(container, config, state, palette, isDark, callbacks, containerWidth) {
32
+ const width = containerWidth ?? parseFloat(container.attr("width") || "800");
33
+ let currentState = { ...state };
34
+ let currentLayout;
35
+ const legendG = container.append("g").attr("class", "dgmo-legend").attr("data-legend-title-relation", config.position.titleRelation).attr(
36
+ "data-legend-capsule-addon-width",
37
+ String(config.capsulePillAddonWidth ?? 0)
38
+ );
39
+ function render() {
40
+ currentLayout = computeLegendLayout(config, currentState, width);
41
+ legendG.selectAll("*").remove();
42
+ if (currentLayout.height === 0) return;
43
+ if (currentState.activeGroup) {
44
+ legendG.attr("data-legend-active", tagAttrKey(currentState.activeGroup));
45
+ } else {
46
+ legendG.attr("data-legend-active", null);
47
+ }
48
+ const groupBg = isDark ? mix(palette.surface, palette.bg, 50) : mix(palette.surface, palette.bg, 30);
49
+ const pillBorder = mix(palette.textMuted, palette.bg, 50);
50
+ if (currentLayout.activeCapsule) {
51
+ renderCapsule(
52
+ legendG,
53
+ currentLayout.activeCapsule,
54
+ palette,
55
+ groupBg,
56
+ pillBorder,
57
+ isDark,
58
+ callbacks
59
+ );
60
+ }
61
+ for (const pill of currentLayout.pills) {
62
+ renderPill(legendG, pill, palette, groupBg, callbacks);
63
+ }
64
+ if (currentLayout.controlsGroup) {
65
+ renderControlsGroup(
66
+ legendG,
67
+ currentLayout.controlsGroup,
68
+ palette,
69
+ groupBg,
70
+ pillBorder,
71
+ callbacks,
72
+ config
73
+ );
74
+ }
75
+ for (const ctrl of currentLayout.controls) {
76
+ renderControl(
77
+ legendG,
78
+ ctrl,
79
+ palette,
80
+ groupBg,
81
+ pillBorder,
82
+ isDark,
83
+ config.controls
84
+ );
85
+ }
86
+ }
87
+ render();
88
+ return {
89
+ setState(newState) {
90
+ currentState = { ...newState };
91
+ render();
92
+ },
93
+ destroy() {
94
+ legendG.remove();
95
+ },
96
+ getHeight() {
97
+ return currentLayout?.height ?? 0;
98
+ },
99
+ getLayout() {
100
+ return currentLayout;
101
+ }
102
+ };
103
+ }
104
+ function renderCapsule(parent, capsule, palette, groupBg, pillBorder, isDark, callbacks) {
105
+ const g = parent.append("g").attr("transform", `translate(${capsule.x},${capsule.y})`).attr("data-legend-group", tagAttrKey(capsule.groupName)).style("cursor", "pointer");
106
+ g.append("rect").attr("width", capsule.width).attr("height", capsule.height).attr("rx", LEGEND_HEIGHT / 2).attr("fill", groupBg);
107
+ const pill = capsule.pill;
108
+ g.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", palette.bg);
109
+ g.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", "none").attr("stroke", pillBorder).attr("stroke-width", 0.75);
110
+ g.append("text").attr("x", pill.x + pill.width / 2).attr("y", LEGEND_HEIGHT / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.text).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(capsule.groupName);
111
+ if (capsule.gradient) {
112
+ const gr = capsule.gradient;
113
+ const gradId = `dgmo-legend-ramp-${tagAttrKey(capsule.groupName).replace(/[^a-z0-9]+/g, "-")}`;
114
+ const def = g.append("defs").append("linearGradient").attr("id", gradId);
115
+ for (const stop of valueRampStops(gr.low, gr.high, { isDark })) {
116
+ def.append("stop").attr("offset", `${stop.offset * 100}%`).attr("stop-color", stop.color);
117
+ }
118
+ g.append("text").attr("x", gr.minX).attr("y", gr.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.minText);
119
+ g.append("rect").attr("class", "dgmo-legend-gradient-ramp").attr("data-ramp-min", gr.min).attr("data-ramp-max", gr.max).attr("x", gr.rampX).attr("y", gr.rampY).attr("width", gr.rampW).attr("height", gr.rampH).attr("rx", 2).attr("fill", `url(#${gradId})`);
120
+ g.append("text").attr("x", gr.maxX).attr("y", gr.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(gr.maxText);
121
+ }
122
+ for (const entry of capsule.entries) {
123
+ const entryG = g.append("g").attr("data-legend-entry", entry.value.toLowerCase()).attr("data-series-name", entry.value).style("cursor", "pointer");
124
+ entryG.append("circle").attr("cx", entry.dotCx).attr("cy", entry.dotCy).attr("r", LEGEND_DOT_R).attr("fill", entry.color);
125
+ entryG.append("text").attr("x", entry.textX).attr("y", entry.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("font-family", FONT_FAMILY).text(entry.displayValue ?? entry.value);
126
+ if (callbacks?.onEntryHover) {
127
+ const groupName = capsule.groupName;
128
+ const entryValue = entry.value;
129
+ const onHover = callbacks.onEntryHover;
130
+ entryG.on("mouseenter", () => onHover(groupName, entryValue)).on("mouseleave", () => onHover(groupName, null));
131
+ }
132
+ }
133
+ if (callbacks?.onGroupToggle) {
134
+ const cb = callbacks.onGroupToggle;
135
+ const name = capsule.groupName;
136
+ g.on("click", () => cb(name));
137
+ }
138
+ if (callbacks?.onGroupRendered) {
139
+ callbacks.onGroupRendered(capsule.groupName, g, true);
140
+ }
141
+ }
142
+ function renderPill(parent, pill, palette, groupBg, callbacks) {
143
+ const g = parent.append("g").attr("transform", `translate(${pill.x},${pill.y})`).attr("data-legend-group", tagAttrKey(pill.groupName)).style("cursor", "pointer");
144
+ g.append("rect").attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", groupBg);
145
+ g.append("text").attr("x", pill.width / 2).attr("y", pill.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(pill.groupName);
146
+ if (callbacks?.onGroupToggle) {
147
+ const cb = callbacks.onGroupToggle;
148
+ const name = pill.groupName;
149
+ g.on("click", () => cb(name));
150
+ }
151
+ if (callbacks?.onGroupRendered) {
152
+ callbacks.onGroupRendered(pill.groupName, g, false);
153
+ }
154
+ }
155
+ function renderControl(parent, ctrl, palette, _groupBg, pillBorder, _isDark, configControls) {
156
+ const g = parent.append("g").attr("transform", `translate(${ctrl.x},${ctrl.y})`).attr("data-legend-control", ctrl.id).style("cursor", "pointer");
157
+ if (ctrl.exportBehavior === "strip") {
158
+ g.attr("data-export-ignore", "true");
159
+ }
160
+ g.append("rect").attr("width", ctrl.width).attr("height", ctrl.height).attr("rx", ctrl.height / 2).attr("fill", "none").attr("stroke", pillBorder).attr("stroke-width", 0.75);
161
+ let textX = ctrl.width / 2;
162
+ if (ctrl.icon && ctrl.label) {
163
+ const iconG = g.append("g").attr("transform", `translate(8,${(ctrl.height - 14) / 2})`);
164
+ iconG.html(ctrl.icon);
165
+ textX = 8 + 14 + LEGEND_ENTRY_DOT_GAP + measureLegendText(ctrl.label, LEGEND_PILL_FONT_SIZE) / 2;
166
+ }
167
+ if (ctrl.label) {
168
+ g.append("text").attr("x", textX).attr("y", ctrl.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_PILL_FONT_SIZE).attr("font-weight", 500).attr("fill", palette.textMuted).attr("pointer-events", "none").attr("font-family", FONT_FAMILY).text(ctrl.label);
169
+ }
170
+ if (ctrl.children) {
171
+ let cx = ctrl.width + 4;
172
+ for (const child of ctrl.children) {
173
+ const childG = g.append("g").attr("transform", `translate(${cx},0)`).style("cursor", "pointer");
174
+ childG.append("rect").attr("width", child.width).attr("height", ctrl.height).attr("rx", ctrl.height / 2).attr(
175
+ "fill",
176
+ child.isActive ? palette.primary ?? palette.text : "none"
177
+ ).attr("stroke", pillBorder).attr("stroke-width", 0.75);
178
+ childG.append("text").attr("x", child.width / 2).attr("y", ctrl.height / 2).attr("text-anchor", "middle").call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", child.isActive ? palette.bg : palette.textMuted).attr("font-family", FONT_FAMILY).text(child.label);
179
+ const configCtrl2 = configControls?.find((c) => c.id === ctrl.id);
180
+ const configChild = configCtrl2?.children?.find((c) => c.id === child.id);
181
+ if (configChild?.onClick) {
182
+ const onClick = configChild.onClick;
183
+ childG.on("click", () => onClick());
184
+ }
185
+ cx += child.width + 4;
186
+ }
187
+ }
188
+ const configCtrl = configControls?.find((c) => c.id === ctrl.id);
189
+ if (configCtrl?.onClick) {
190
+ const onClick = configCtrl.onClick;
191
+ g.on("click", () => onClick());
192
+ }
193
+ }
194
+ function renderControlsGroup(parent, layout, palette, groupBg, pillBorder, callbacks, config) {
195
+ const g = parent.append("g").attr("transform", `translate(${layout.x},${layout.y})`).attr("data-legend-controls", layout.expanded ? "expanded" : "collapsed").attr("data-export-ignore", "true").style("cursor", "pointer");
196
+ if (!layout.expanded) {
197
+ g.append("rect").attr("width", layout.width).attr("height", layout.height).attr("rx", layout.height / 2).attr("fill", groupBg).attr("stroke", pillBorder).attr("stroke-width", 0.75);
198
+ const iconSize = 14;
199
+ const iconX = (layout.width - iconSize) / 2;
200
+ const iconY = (layout.height - iconSize) / 2;
201
+ g.append("path").attr("d", CONTROLS_ICON_PATH).attr("transform", `translate(${iconX},${iconY})`).attr("fill", palette.textMuted).attr("fill-rule", "evenodd").attr("pointer-events", "none");
202
+ if (callbacks?.onControlsExpand) {
203
+ const cb = callbacks.onControlsExpand;
204
+ g.on("click", () => cb());
205
+ }
206
+ } else {
207
+ const pill = layout.pill;
208
+ g.append("rect").attr("width", layout.width).attr("height", layout.height).attr("rx", LEGEND_HEIGHT / 2).attr("fill", groupBg);
209
+ const pillG = g.append("g").attr("class", "controls-gear-pill").style("cursor", "pointer");
210
+ pillG.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", palette.bg);
211
+ pillG.append("rect").attr("x", pill.x).attr("y", pill.y).attr("width", pill.width).attr("height", pill.height).attr("rx", pill.height / 2).attr("fill", "none").attr("stroke", pillBorder).attr("stroke-width", 0.75);
212
+ const iconSize = 14;
213
+ const iconX = pill.x + (pill.width - iconSize) / 2;
214
+ const iconY = pill.y + (pill.height - iconSize) / 2;
215
+ pillG.append("path").attr("d", CONTROLS_ICON_PATH).attr("transform", `translate(${iconX},${iconY})`).attr("fill", palette.text).attr("fill-rule", "evenodd").attr("pointer-events", "none");
216
+ if (callbacks?.onControlsExpand) {
217
+ const cb = callbacks.onControlsExpand;
218
+ pillG.on("click", (event) => {
219
+ event.stopPropagation();
220
+ cb();
221
+ });
222
+ }
223
+ const toggles = config?.controlsGroup?.toggles ?? [];
224
+ for (const tl of layout.toggles) {
225
+ const toggle = toggles.find((t) => t.id === tl.id);
226
+ const entryG = g.append("g").attr("data-controls-toggle", tl.id).style("cursor", "pointer");
227
+ if (tl.active) {
228
+ entryG.append("circle").attr("cx", tl.dotCx).attr("cy", tl.dotCy).attr("r", LEGEND_TOGGLE_DOT_R).attr("fill", palette.primary ?? palette.text);
229
+ } else {
230
+ entryG.append("circle").attr("cx", tl.dotCx).attr("cy", tl.dotCy).attr("r", LEGEND_TOGGLE_DOT_R).attr("fill", "none").attr("stroke", palette.textMuted).attr("stroke-width", 1);
231
+ }
232
+ entryG.append("text").attr("x", tl.textX).attr("y", tl.textY).call(centerText).attr("font-size", LEGEND_ENTRY_FONT_SIZE).attr("fill", palette.textMuted).attr("opacity", tl.active ? 1 : LEGEND_TOGGLE_OFF_OPACITY).attr("font-family", FONT_FAMILY).text(tl.label);
233
+ if (callbacks?.onControlsToggle && toggle) {
234
+ const cb = callbacks.onControlsToggle;
235
+ const id = tl.id;
236
+ const newActive = !tl.active;
237
+ entryG.on("click", (event) => {
238
+ event.stopPropagation();
239
+ cb(id, newActive);
240
+ });
241
+ }
242
+ }
243
+ }
244
+ }
245
+
246
+ // src/utils/legend-integration.ts
247
+ var DEFAULT_POSITION = {
248
+ placement: "top-center",
249
+ titleRelation: "below-title"
250
+ };
251
+ function renderIntegratedLegend(container, opts) {
252
+ return renderLegendD3(
253
+ container,
254
+ {
255
+ groups: opts.groups,
256
+ position: opts.position ?? DEFAULT_POSITION,
257
+ mode: opts.mode,
258
+ ...opts.controls !== void 0 && { controls: opts.controls },
259
+ ...opts.controlsGroup !== void 0 && {
260
+ controlsGroup: opts.controlsGroup
261
+ },
262
+ ...opts.controlsHost !== void 0 && {
263
+ controlsHost: opts.controlsHost
264
+ },
265
+ ...opts.titleWidth !== void 0 && { titleWidth: opts.titleWidth },
266
+ ...opts.capsulePillAddonWidth !== void 0 && {
267
+ capsulePillAddonWidth: opts.capsulePillAddonWidth
268
+ },
269
+ ...opts.showEmptyGroups !== void 0 && {
270
+ showEmptyGroups: opts.showEmptyGroups
271
+ },
272
+ ...opts.showInactivePills !== void 0 && {
273
+ showInactivePills: opts.showInactivePills
274
+ }
275
+ },
276
+ {
277
+ activeGroup: opts.activeGroup ?? null,
278
+ ...opts.hiddenAttributes !== void 0 && {
279
+ hiddenAttributes: opts.hiddenAttributes
280
+ },
281
+ ...opts.controlsExpanded !== void 0 && {
282
+ controlsExpanded: opts.controlsExpanded
283
+ }
284
+ },
285
+ opts.palette,
286
+ opts.isDark,
287
+ opts.callbacks,
288
+ opts.width
289
+ );
290
+ }
291
+
292
+ export {
293
+ renderLegendD3,
294
+ renderIntegratedLegend
295
+ };
296
+ //# sourceMappingURL=chunk-PWIHZ6NJ.js.map