vue-data-ui 3.8.0 → 3.8.2

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 (139) hide show
  1. package/README.md +1 -1
  2. package/dist/{PackageVersion-B9RA2_BM.js → PackageVersion-CR86X4r9.js} +1 -1
  3. package/dist/{Title-CgkWUXeV.js → Title-CWX8otQg.js} +1 -1
  4. package/dist/components/vue-ui-3d-bar.js +1 -1
  5. package/dist/components/vue-ui-accordion.js +1 -1
  6. package/dist/components/vue-ui-age-pyramid.js +1 -1
  7. package/dist/components/vue-ui-annotator.js +1 -1
  8. package/dist/components/vue-ui-bullet.js +1 -1
  9. package/dist/components/vue-ui-candlestick.js +1 -1
  10. package/dist/components/vue-ui-carousel-table.js +1 -1
  11. package/dist/components/vue-ui-chestnut.js +1 -1
  12. package/dist/components/vue-ui-chord.js +1 -1
  13. package/dist/components/vue-ui-circle-pack.js +1 -1
  14. package/dist/components/vue-ui-cursor.js +1 -1
  15. package/dist/components/vue-ui-dag.js +1 -1
  16. package/dist/components/vue-ui-dashboard.js +1 -1
  17. package/dist/components/vue-ui-digits.js +1 -1
  18. package/dist/components/vue-ui-donut-evolution.js +1 -1
  19. package/dist/components/vue-ui-donut.js +1 -1
  20. package/dist/components/vue-ui-dumbbell.js +1 -1
  21. package/dist/components/vue-ui-flow.js +1 -1
  22. package/dist/components/vue-ui-funnel.js +1 -1
  23. package/dist/components/vue-ui-galaxy.js +1 -1
  24. package/dist/components/vue-ui-gauge.js +1 -1
  25. package/dist/components/vue-ui-gizmo.js +1 -1
  26. package/dist/components/vue-ui-heatmap.js +1 -1
  27. package/dist/components/vue-ui-history-plot.js +1 -1
  28. package/dist/components/vue-ui-horizontal-bar.js +1 -1
  29. package/dist/components/vue-ui-kpi.js +1 -1
  30. package/dist/components/vue-ui-mini-loader.js +1 -1
  31. package/dist/components/vue-ui-molecule.js +1 -1
  32. package/dist/components/vue-ui-mood-radar.js +1 -1
  33. package/dist/components/vue-ui-nested-donuts.js +1 -1
  34. package/dist/components/vue-ui-onion.js +1 -1
  35. package/dist/components/vue-ui-parallel-coordinate-plot.js +1 -1
  36. package/dist/components/vue-ui-quadrant.js +1 -1
  37. package/dist/components/vue-ui-quick-chart.js +1 -1
  38. package/dist/components/vue-ui-radar.js +1 -1
  39. package/dist/components/vue-ui-rating.js +1 -1
  40. package/dist/components/vue-ui-relation-circle.js +1 -1
  41. package/dist/components/vue-ui-ridgeline.js +1 -1
  42. package/dist/components/vue-ui-rings.js +1 -1
  43. package/dist/components/vue-ui-scatter.js +1 -1
  44. package/dist/components/vue-ui-skeleton.js +1 -1
  45. package/dist/components/vue-ui-smiley.js +1 -1
  46. package/dist/components/vue-ui-spark-trend.js +1 -1
  47. package/dist/components/vue-ui-sparkbar.js +1 -1
  48. package/dist/components/vue-ui-sparkgauge.js +1 -1
  49. package/dist/components/vue-ui-sparkhistogram.js +1 -1
  50. package/dist/components/vue-ui-sparkline.js +1 -1
  51. package/dist/components/vue-ui-sparkstackbar.js +1 -1
  52. package/dist/components/vue-ui-stackbar.js +1 -1
  53. package/dist/components/vue-ui-stackline.js +1 -1
  54. package/dist/components/vue-ui-strip-plot.js +1 -1
  55. package/dist/components/vue-ui-table-heatmap.js +1 -1
  56. package/dist/components/vue-ui-table-sparkline.js +1 -1
  57. package/dist/components/vue-ui-table.js +1 -1
  58. package/dist/components/vue-ui-thermometer.js +1 -1
  59. package/dist/components/vue-ui-timer.js +1 -1
  60. package/dist/components/vue-ui-tiremarks.js +1 -1
  61. package/dist/components/vue-ui-treemap.js +1 -1
  62. package/dist/components/vue-ui-vertical-bar.js +1 -1
  63. package/dist/components/vue-ui-waffle.js +1 -1
  64. package/dist/components/vue-ui-wheel.js +1 -1
  65. package/dist/components/vue-ui-word-cloud.js +1 -1
  66. package/dist/components/vue-ui-world.js +1 -1
  67. package/dist/components/vue-ui-xy-canvas.js +1 -1
  68. package/dist/components/vue-ui-xy.js +1 -1
  69. package/dist/style.css +1 -1
  70. package/dist/types/vue-data-ui.d.ts +3 -0
  71. package/dist/{useNestedProp-DOOBu_sL.js → useNestedProp-DH2Pjkde.js} +3 -0
  72. package/dist/{vue-data-ui-BgQPEjgE.js → vue-data-ui-DSoAFYh6.js} +65 -65
  73. package/dist/vue-data-ui.js +67 -67
  74. package/dist/{vue-ui-3d-bar-BHcSmBFt.js → vue-ui-3d-bar-Dr9yOng4.js} +3 -3
  75. package/dist/{vue-ui-accordion-BWfQ8Imt.js → vue-ui-accordion-DiNnR-ZE.js} +1 -1
  76. package/dist/{vue-ui-age-pyramid-CKtsF5IW.js → vue-ui-age-pyramid-D1wY760N.js} +3 -3
  77. package/dist/{vue-ui-annotator-DQmmDTg7.js → vue-ui-annotator-D_z1JO0m.js} +2 -2
  78. package/dist/{vue-ui-bullet-CZKHPSsG.js → vue-ui-bullet-CATRx7fX.js} +3 -3
  79. package/dist/{vue-ui-candlestick-DW7yeLnE.js → vue-ui-candlestick-Wbwh9a_1.js} +3 -3
  80. package/dist/{vue-ui-carousel-table-Bv0TZYW1.js → vue-ui-carousel-table-B-3Okj00.js} +2 -2
  81. package/dist/{vue-ui-chestnut-BUqGBycr.js → vue-ui-chestnut-DEIG2RoM.js} +2 -2
  82. package/dist/{vue-ui-chord-Awtzhq_0.js → vue-ui-chord-enRLQOLg.js} +3 -3
  83. package/dist/{vue-ui-circle-pack-WTa2Mj2O.js → vue-ui-circle-pack-Bn-xTRny.js} +3 -3
  84. package/dist/{vue-ui-cursor-D6_m463R.js → vue-ui-cursor-CZ58l0J2.js} +2 -2
  85. package/dist/vue-ui-dag-CeF87qTR.js +2789 -0
  86. package/dist/{vue-ui-dashboard-BLgMwKmT.js → vue-ui-dashboard-DIRH3qPO.js} +64 -64
  87. package/dist/{vue-ui-digits-DIZ8pi6C.js → vue-ui-digits-B7rN8UWS.js} +1 -1
  88. package/dist/{vue-ui-donut-DY8Q-PAg.js → vue-ui-donut-CL2l-Mq-.js} +3 -3
  89. package/dist/{vue-ui-donut-evolution-DGnq03PX.js → vue-ui-donut-evolution-DrdfQnMs.js} +3 -3
  90. package/dist/{vue-ui-dumbbell-xRMH2Mlv.js → vue-ui-dumbbell-CDq2-NBe.js} +3 -3
  91. package/dist/{vue-ui-flow-C0a8rOyT.js → vue-ui-flow-Y9omWd2u.js} +3 -3
  92. package/dist/{vue-ui-funnel-D6krkF1a.js → vue-ui-funnel-BCVF1KTv.js} +3 -3
  93. package/dist/{vue-ui-galaxy-BCkJt9OE.js → vue-ui-galaxy-D7DBAhIy.js} +3 -3
  94. package/dist/{vue-ui-gauge-BaH-VYAi.js → vue-ui-gauge-BlxvYBkd.js} +3 -3
  95. package/dist/{vue-ui-gizmo-BnCONs1t.js → vue-ui-gizmo-TAA6z0iU.js} +2 -2
  96. package/dist/{vue-ui-heatmap-BYoD6XaS.js → vue-ui-heatmap-BS1CinF0.js} +4 -4
  97. package/dist/{vue-ui-history-plot-BZBtIBsY.js → vue-ui-history-plot-DNgE02I6.js} +3 -3
  98. package/dist/{vue-ui-horizontal-bar-DsDDKUa6.js → vue-ui-horizontal-bar-DQcgNmg8.js} +4 -4
  99. package/dist/{vue-ui-kpi-Dn750UNZ.js → vue-ui-kpi-B6oDMqQL.js} +2 -2
  100. package/dist/{vue-ui-mini-loader-44NP38K0.js → vue-ui-mini-loader-BXLMnXR4.js} +1 -1
  101. package/dist/{vue-ui-molecule-C994_mOK.js → vue-ui-molecule-Dp_ZSzsj.js} +2 -2
  102. package/dist/{vue-ui-mood-radar-BI2SAtcM.js → vue-ui-mood-radar-BdRrOGLR.js} +3 -3
  103. package/dist/{vue-ui-nested-donuts-CSF_bA-I.js → vue-ui-nested-donuts-AIyLN3zs.js} +3 -3
  104. package/dist/{vue-ui-onion-L5ULuI3B.js → vue-ui-onion-VFqPdMEh.js} +3 -3
  105. package/dist/{vue-ui-parallel-coordinate-plot-CYetuoa5.js → vue-ui-parallel-coordinate-plot-E9SLS7RW.js} +3 -3
  106. package/dist/{vue-ui-quadrant-Diwm1-e6.js → vue-ui-quadrant-BcbUHmkA.js} +3 -3
  107. package/dist/{vue-ui-quick-chart-YBj4Iyk6.js → vue-ui-quick-chart-DOCz-s43.js} +2 -2
  108. package/dist/{vue-ui-radar-D76Mi-4u.js → vue-ui-radar-BIGTJvWQ.js} +3 -3
  109. package/dist/{vue-ui-rating-CJjSt6-z.js → vue-ui-rating-CtkV7O_k.js} +1 -1
  110. package/dist/{vue-ui-relation-circle-BlYazckd.js → vue-ui-relation-circle-C3TjhX13.js} +3 -3
  111. package/dist/{vue-ui-ridgeline-DW8JqGxN.js → vue-ui-ridgeline-BCvf2QDN.js} +3 -3
  112. package/dist/{vue-ui-rings-De3shW_r.js → vue-ui-rings-IrmvR-uv.js} +3 -3
  113. package/dist/{vue-ui-scatter-oDhPqRJq.js → vue-ui-scatter-ST5ZySnk.js} +3 -3
  114. package/dist/{vue-ui-skeleton-BUIXG_mY.js → vue-ui-skeleton-CbF8cNtW.js} +2 -2
  115. package/dist/{vue-ui-smiley-Cni8Q56U.js → vue-ui-smiley-C-mXyFxi.js} +1 -1
  116. package/dist/{vue-ui-spark-trend-D1Zt5np6.js → vue-ui-spark-trend-CIJLfHtS.js} +2 -2
  117. package/dist/{vue-ui-sparkbar-CdmXCSnj.js → vue-ui-sparkbar-BVcnZro1.js} +2 -2
  118. package/dist/{vue-ui-sparkgauge-Dn2PQhZj.js → vue-ui-sparkgauge-Bzl9AdPu.js} +2 -2
  119. package/dist/{vue-ui-sparkhistogram-nrkglHJk.js → vue-ui-sparkhistogram-nEOjS0kw.js} +2 -2
  120. package/dist/{vue-ui-sparkline-tz8fAf2C.js → vue-ui-sparkline-DBMs4QF-.js} +2 -2
  121. package/dist/{vue-ui-sparkstackbar-BQPSsF5Q.js → vue-ui-sparkstackbar-Drqffzag.js} +2 -2
  122. package/dist/{vue-ui-stackbar-DMO3YIQp.js → vue-ui-stackbar-DmECmpBp.js} +3 -3
  123. package/dist/{vue-ui-stackline-BQo4KoIK.js → vue-ui-stackline-CDWhnKV8.js} +3 -3
  124. package/dist/{vue-ui-strip-plot-CJpmLgCV.js → vue-ui-strip-plot-BSkWmE37.js} +3 -3
  125. package/dist/{vue-ui-table-Cp4ee_1a.js → vue-ui-table-DhKfklhX.js} +3 -3
  126. package/dist/{vue-ui-table-heatmap-1qpMxFyu.js → vue-ui-table-heatmap-DODhMbZE.js} +1 -1
  127. package/dist/{vue-ui-table-sparkline-wSJjRJc4.js → vue-ui-table-sparkline-BB7y9MEg.js} +2 -2
  128. package/dist/{vue-ui-thermometer-DA8pG0Tr.js → vue-ui-thermometer-KpasFVWs.js} +3 -3
  129. package/dist/{vue-ui-timer-Bc0J-YWP.js → vue-ui-timer-CSesYHmN.js} +3 -3
  130. package/dist/{vue-ui-tiremarks-DqYsca6Q.js → vue-ui-tiremarks-DfXDAMEy.js} +3 -3
  131. package/dist/{vue-ui-treemap-BQsPzEFA.js → vue-ui-treemap-80KNxaAC.js} +3 -3
  132. package/dist/{vue-ui-waffle-5wkXlR4p.js → vue-ui-waffle-IsPJ8tOx.js} +3 -3
  133. package/dist/{vue-ui-wheel-CkZko1RX.js → vue-ui-wheel-BQZ0ABos.js} +3 -3
  134. package/dist/{vue-ui-word-cloud-52bv_Ba-.js → vue-ui-word-cloud-Dx0HYmL4.js} +3 -3
  135. package/dist/{vue-ui-world-oIyf91PY.js → vue-ui-world-Cvop-Bfx.js} +2 -2
  136. package/dist/{vue-ui-xy-DIEBv1b8.js → vue-ui-xy-5xj16K5g.js} +4 -4
  137. package/dist/{vue-ui-xy-canvas-pnm8ar87.js → vue-ui-xy-canvas-Cq-lVd9y.js} +3 -3
  138. package/package.json +1 -1
  139. package/dist/vue-ui-dag-tle30Ehr.js +0 -2727
@@ -0,0 +1,2789 @@
1
+ import { ref as k, watchEffect as Jo, unref as v, createElementBlock as _, openBlock as y, normalizeStyle as X, normalizeClass as it, createElementVNode as j, createCommentVNode as S, createVNode as ae, toDisplayString as le, defineAsyncComponent as qe, toRefs as Qo, computed as Y, onMounted as Vt, nextTick as De, watch as Fe, onBeforeUnmount as en, createBlock as U, withCtx as M, renderSlot as A, normalizeProps as B, guardReactiveProps as V, createSlots as tn, Fragment as ie, renderList as Pe, withModifiers as on, mergeProps as Ke, createTextVNode as nn, Transition as It, Teleport as Gt } from "vue";
2
+ import { c as lt, ay as sn, l as Ce, n as rn, r as ln, h as an, t as so, o as cn, g as jt, X as un, a8 as dn } from "./lib-qMPkcvmh.js";
3
+ import { t as fn, u as hn } from "./useResponsive-DfdjqQps.js";
4
+ import { u as mn } from "./usePanZoom-DMfuOfaC.js";
5
+ import { u as gn, a as Je } from "./useNestedProp-DH2Pjkde.js";
6
+ import { u as vn, B as bn } from "./BaseScanner-BgWxam9d.js";
7
+ import { u as pn } from "./usePrinter-CjGh4mFJ.js";
8
+ import { u as wn } from "./useSvgExport-DrjCWun4.js";
9
+ import { u as yn } from "./useThemeCheck-DGJ31Vi5.js";
10
+ import { u as kn } from "./useUserOptionState-BIvW1Kz7.js";
11
+ import { u as En } from "./useChartAccessibility-9icAAmYg.js";
12
+ import Cn from "./Title-CWX8otQg.js";
13
+ import Qe from "./BaseIcon-CALhpING.js";
14
+ import { _ as ro } from "./_plugin-vue_export-helper-CHgC5LLL.js";
15
+ import xn from "./img-CwrkWkkl.js";
16
+ const _n = "\0", te = "\0", Wt = "";
17
+ class q {
18
+ _isDirected = !0;
19
+ _isMultigraph = !1;
20
+ _isCompound = !1;
21
+ // Label for the graph itself
22
+ _label;
23
+ // Defaults to be set when creating a new node
24
+ _defaultNodeLabelFn = () => {
25
+ };
26
+ // Defaults to be set when creating a new edge
27
+ _defaultEdgeLabelFn = () => {
28
+ };
29
+ // v -> label
30
+ _nodes = {};
31
+ // v -> edgeObj
32
+ _in = {};
33
+ // u -> v -> Number
34
+ _preds = {};
35
+ // v -> edgeObj
36
+ _out = {};
37
+ // v -> w -> Number
38
+ _sucs = {};
39
+ // e -> edgeObj
40
+ _edgeObjs = {};
41
+ // e -> label
42
+ _edgeLabels = {};
43
+ /* Number of nodes in the graph. Should only be changed by the implementation. */
44
+ _nodeCount = 0;
45
+ /* Number of edges in the graph. Should only be changed by the implementation. */
46
+ _edgeCount = 0;
47
+ _parent;
48
+ _children;
49
+ constructor(t) {
50
+ t && (this._isDirected = Object.hasOwn(t, "directed") ? t.directed : !0, this._isMultigraph = Object.hasOwn(t, "multigraph") ? t.multigraph : !1, this._isCompound = Object.hasOwn(t, "compound") ? t.compound : !1), this._isCompound && (this._parent = {}, this._children = {}, this._children[te] = {});
51
+ }
52
+ /* === Graph functions ========= */
53
+ /**
54
+ * Whether graph was created with 'directed' flag set to true or not.
55
+ */
56
+ isDirected() {
57
+ return this._isDirected;
58
+ }
59
+ /**
60
+ * Whether graph was created with 'multigraph' flag set to true or not.
61
+ */
62
+ isMultigraph() {
63
+ return this._isMultigraph;
64
+ }
65
+ /**
66
+ * Whether graph was created with 'compound' flag set to true or not.
67
+ */
68
+ isCompound() {
69
+ return this._isCompound;
70
+ }
71
+ /**
72
+ * Sets the label of the graph.
73
+ */
74
+ setGraph(t) {
75
+ return this._label = t, this;
76
+ }
77
+ /**
78
+ * Gets the graph label.
79
+ */
80
+ graph() {
81
+ return this._label;
82
+ }
83
+ /* === Node functions ========== */
84
+ /**
85
+ * Sets the default node label. If newDefault is a function, it will be
86
+ * invoked each time when setting a label for a node. Otherwise, this label
87
+ * will be assigned as default label in case if no label was specified while
88
+ * setting a node.
89
+ * Complexity: O(1).
90
+ */
91
+ setDefaultNodeLabel(t) {
92
+ return this._defaultNodeLabelFn = t, typeof t != "function" && (this._defaultNodeLabelFn = () => t), this;
93
+ }
94
+ /**
95
+ * Gets the number of nodes in the graph.
96
+ * Complexity: O(1).
97
+ */
98
+ nodeCount() {
99
+ return this._nodeCount;
100
+ }
101
+ /**
102
+ * Gets all nodes of the graph. Note, the in case of compound graph subnodes are
103
+ * not included in list.
104
+ * Complexity: O(1).
105
+ */
106
+ nodes() {
107
+ return Object.keys(this._nodes);
108
+ }
109
+ /**
110
+ * Gets list of nodes without in-edges.
111
+ * Complexity: O(|V|).
112
+ */
113
+ sources() {
114
+ const t = this;
115
+ return this.nodes().filter((o) => Object.keys(t._in[o]).length === 0);
116
+ }
117
+ /**
118
+ * Gets list of nodes without out-edges.
119
+ * Complexity: O(|V|).
120
+ */
121
+ sinks() {
122
+ const t = this;
123
+ return this.nodes().filter((o) => Object.keys(t._out[o]).length === 0);
124
+ }
125
+ /**
126
+ * Invokes setNode method for each node in names list.
127
+ * Complexity: O(|names|).
128
+ */
129
+ setNodes(t, o) {
130
+ const n = arguments, s = this;
131
+ return t.forEach((i) => {
132
+ n.length > 1 ? s.setNode(i, o) : s.setNode(i);
133
+ }), this;
134
+ }
135
+ /**
136
+ * Creates or updates the value for the node v in the graph. If value is supplied
137
+ * it is set as the value for the node. If value is not supplied and the node was
138
+ * created by this call then the default node label will be assigned.
139
+ * Complexity: O(1).
140
+ */
141
+ setNode(t, o) {
142
+ return Object.hasOwn(this._nodes, t) ? (arguments.length > 1 && (this._nodes[t] = o), this) : (this._nodes[t] = arguments.length > 1 ? o : this._defaultNodeLabelFn(t), this._isCompound && (this._parent[t] = te, this._children[t] = {}, this._children[te][t] = !0), this._in[t] = {}, this._preds[t] = {}, this._out[t] = {}, this._sucs[t] = {}, ++this._nodeCount, this);
143
+ }
144
+ /**
145
+ * Gets the label of node with specified name.
146
+ * Complexity: O(1).
147
+ */
148
+ node(t) {
149
+ return this._nodes[t];
150
+ }
151
+ /**
152
+ * Detects whether graph has a node with specified name or not.
153
+ */
154
+ hasNode(t) {
155
+ return Object.hasOwn(this._nodes, t);
156
+ }
157
+ /**
158
+ * Remove the node with the name from the graph or do nothing if the node is not in
159
+ * the graph. If the node was removed this function also removes any incident
160
+ * edges.
161
+ * Complexity: O(1).
162
+ */
163
+ removeNode(t) {
164
+ const o = this;
165
+ if (Object.hasOwn(this._nodes, t)) {
166
+ const n = (s) => o.removeEdge(o._edgeObjs[s]);
167
+ delete this._nodes[t], this._isCompound && (this._removeFromParentsChildList(t), delete this._parent[t], this.children(t).forEach((s) => {
168
+ o.setParent(s);
169
+ }), delete this._children[t]), Object.keys(this._in[t]).forEach(n), delete this._in[t], delete this._preds[t], Object.keys(this._out[t]).forEach(n), delete this._out[t], delete this._sucs[t], --this._nodeCount;
170
+ }
171
+ return this;
172
+ }
173
+ /**
174
+ * Sets node parentId as a parent for node nodeId if it is defined, or removes the
175
+ * parent for nodeId if parentId is undefined. Method throws an exception in case of
176
+ * invoking it in context of noncompound graph.
177
+ * Average-case complexity: O(1).
178
+ */
179
+ setParent(t, o) {
180
+ if (!this._isCompound)
181
+ throw new Error("Cannot set parent in a non-compound graph");
182
+ if (o === void 0)
183
+ o = te;
184
+ else {
185
+ o += "";
186
+ for (let n = o; n !== void 0; n = this.parent(n))
187
+ if (n === t)
188
+ throw new Error(
189
+ "Setting " + o + " as parent of " + t + " would create a cycle"
190
+ );
191
+ this.setNode(o);
192
+ }
193
+ return this.setNode(t), this._removeFromParentsChildList(t), this._parent[t] = o, this._children[o][t] = !0, this;
194
+ }
195
+ _removeFromParentsChildList(t) {
196
+ delete this._children[this._parent[t]][t];
197
+ }
198
+ /**
199
+ * Gets parent node for node nodeId.
200
+ * Complexity: O(1).
201
+ */
202
+ parent(t) {
203
+ if (this._isCompound) {
204
+ const o = this._parent[t];
205
+ if (o !== te)
206
+ return o;
207
+ }
208
+ }
209
+ /**
210
+ * Gets list of direct children of node nodeId.
211
+ * Complexity: O(1).
212
+ */
213
+ children(t = te) {
214
+ if (this._isCompound) {
215
+ const o = this._children[t];
216
+ if (o)
217
+ return Object.keys(o);
218
+ } else {
219
+ if (t === te)
220
+ return this.nodes();
221
+ if (this.hasNode(t))
222
+ return [];
223
+ }
224
+ }
225
+ /**
226
+ * Return all nodes that are predecessors of the specified node or undefined if nodeId is not in
227
+ * the graph. Behavior is undefined for undirected graphs - use neighbors instead.
228
+ * Complexity: O(|V|).
229
+ */
230
+ predecessors(t) {
231
+ const o = this._preds[t];
232
+ if (o)
233
+ return Object.keys(o);
234
+ }
235
+ /**
236
+ * Return all nodes that are successors of the specified node or undefined if nodeId is not in
237
+ * the graph. Behavior is undefined for undirected graphs - use neighbors instead.
238
+ * Complexity: O(|V|).
239
+ */
240
+ successors(t) {
241
+ const o = this._sucs[t];
242
+ if (o)
243
+ return Object.keys(o);
244
+ }
245
+ /**
246
+ * Return all nodes that are predecessors or successors of the specified node or undefined if
247
+ * nodeId is not in the graph.
248
+ * Complexity: O(|V|).
249
+ */
250
+ neighbors(t) {
251
+ const o = this.predecessors(t);
252
+ if (o) {
253
+ const n = new Set(o);
254
+ for (const s of this.successors(t))
255
+ n.add(s);
256
+ return Array.from(n.values());
257
+ }
258
+ }
259
+ isLeaf(t) {
260
+ let o;
261
+ return this.isDirected() ? o = this.successors(t) : o = this.neighbors(t), o.length === 0;
262
+ }
263
+ /**
264
+ * Creates new graph with nodes filtered via filter. Edges incident to rejected node
265
+ * are also removed. In case of compound graph, if parent is rejected by filter,
266
+ * then all its children are rejected too.
267
+ * Average-case complexity: O(|E|+|V|).
268
+ */
269
+ filterNodes(t) {
270
+ const o = new this.constructor({
271
+ directed: this._isDirected,
272
+ multigraph: this._isMultigraph,
273
+ compound: this._isCompound
274
+ });
275
+ o.setGraph(this.graph());
276
+ const n = this;
277
+ Object.entries(this._nodes).forEach(([r, l]) => {
278
+ t(r) && o.setNode(r, l);
279
+ }), Object.values(this._edgeObjs).forEach((r) => {
280
+ o.hasNode(r.v) && o.hasNode(r.w) && o.setEdge(r, n.edge(r));
281
+ });
282
+ const s = {};
283
+ function i(r) {
284
+ const l = n.parent(r);
285
+ return l === void 0 || o.hasNode(l) ? (s[r] = l, l) : l in s ? s[l] : i(l);
286
+ }
287
+ return this._isCompound && o.nodes().forEach((r) => o.setParent(r, i(r))), o;
288
+ }
289
+ /* === Edge functions ========== */
290
+ /**
291
+ * Sets the default edge label or factory function. This label will be
292
+ * assigned as default label in case if no label was specified while setting
293
+ * an edge or this function will be invoked each time when setting an edge
294
+ * with no label specified and returned value will be used as a label for edge.
295
+ * Complexity: O(1).
296
+ */
297
+ setDefaultEdgeLabel(t) {
298
+ return this._defaultEdgeLabelFn = t, typeof t != "function" && (this._defaultEdgeLabelFn = () => t), this;
299
+ }
300
+ /**
301
+ * Gets the number of edges in the graph.
302
+ * Complexity: O(1).
303
+ */
304
+ edgeCount() {
305
+ return this._edgeCount;
306
+ }
307
+ /**
308
+ * Gets edges of the graph. In case of compound graph subgraphs are not considered.
309
+ * Complexity: O(|E|).
310
+ */
311
+ edges() {
312
+ return Object.values(this._edgeObjs);
313
+ }
314
+ /**
315
+ * Establish an edges path over the nodes in nodeIds list. If some edge already
316
+ * exists, it will update its label, otherwise it will create an edge between pair
317
+ * of nodes with label provided or default label if no label provided.
318
+ * Complexity: O(|nodeIds|).
319
+ */
320
+ setPath(t, o) {
321
+ const n = this, s = arguments;
322
+ return t.reduce((i, r) => (s.length > 1 ? n.setEdge(i, r, o) : n.setEdge(i, r), r)), this;
323
+ }
324
+ /**
325
+ * Creates or updates the label for the edge (v, w) with the optionally supplied
326
+ * name. If value is supplied it is set as the value for the edge. If value is not
327
+ * supplied and the edge was created by this call then the default edge label will
328
+ * be assigned. The name parameter is only useful with multigraphs.
329
+ */
330
+ setEdge() {
331
+ let t, o, n, s, i = !1;
332
+ const r = arguments[0];
333
+ typeof r == "object" && r !== null && "v" in r ? (t = r.v, o = r.w, n = r.name, arguments.length === 2 && (s = arguments[1], i = !0)) : (t = r, o = arguments[1], n = arguments[3], arguments.length > 2 && (s = arguments[2], i = !0)), t = "" + t, o = "" + o, n !== void 0 && (n = "" + n);
334
+ let l = Ee(this._isDirected, t, o, n);
335
+ if (Object.hasOwn(this._edgeLabels, l))
336
+ return i && (this._edgeLabels[l] = s), this;
337
+ if (n !== void 0 && !this._isMultigraph)
338
+ throw new Error("Cannot set a named edge when isMultigraph = false");
339
+ this.setNode(t), this.setNode(o), this._edgeLabels[l] = i ? s : this._defaultEdgeLabelFn(t, o, n);
340
+ const a = Nn(this._isDirected, t, o, n);
341
+ return t = a.v, o = a.w, Object.freeze(a), this._edgeObjs[l] = a, Yt(this._preds[o], t), Yt(this._sucs[t], o), this._in[o][l] = a, this._out[t][l] = a, this._edgeCount++, this;
342
+ }
343
+ /**
344
+ * Gets the label for the specified edge.
345
+ * Complexity: O(1).
346
+ */
347
+ edge(t, o, n) {
348
+ const s = arguments.length === 1 ? et(this._isDirected, arguments[0]) : Ee(this._isDirected, t, o, n);
349
+ return this._edgeLabels[s];
350
+ }
351
+ /**
352
+ * Gets the label for the specified edge and converts it to an object.
353
+ * Complexity: O(1)
354
+ */
355
+ edgeAsObj() {
356
+ const t = this.edge(...arguments);
357
+ return typeof t != "object" ? { label: t } : t;
358
+ }
359
+ /**
360
+ * Detects whether the graph contains specified edge or not. No subgraphs are considered.
361
+ * Complexity: O(1).
362
+ */
363
+ hasEdge(t, o, n) {
364
+ const s = arguments.length === 1 ? et(this._isDirected, arguments[0]) : Ee(this._isDirected, t, o, n);
365
+ return Object.hasOwn(this._edgeLabels, s);
366
+ }
367
+ /**
368
+ * Removes the specified edge from the graph. No subgraphs are considered.
369
+ * Complexity: O(1).
370
+ */
371
+ removeEdge(t, o, n) {
372
+ const s = arguments.length === 1 ? et(this._isDirected, arguments[0]) : Ee(this._isDirected, t, o, n), i = this._edgeObjs[s];
373
+ return i && (t = i.v, o = i.w, delete this._edgeLabels[s], delete this._edgeObjs[s], Ht(this._preds[o], t), Ht(this._sucs[t], o), delete this._in[o][s], delete this._out[t][s], this._edgeCount--), this;
374
+ }
375
+ /**
376
+ * Return all edges that point to the node v. Optionally filters those edges down to just those
377
+ * coming from node u. Behavior is undefined for undirected graphs - use nodeEdges instead.
378
+ * Complexity: O(|E|).
379
+ */
380
+ inEdges(t, o) {
381
+ const n = this._in[t];
382
+ if (n) {
383
+ const s = Object.values(n);
384
+ return o ? s.filter((i) => i.v === o) : s;
385
+ }
386
+ }
387
+ /**
388
+ * Return all edges that are pointed at by node v. Optionally filters those edges down to just
389
+ * those pointing to w. Behavior is undefined for undirected graphs - use nodeEdges instead.
390
+ * Complexity: O(|E|).
391
+ */
392
+ outEdges(t, o) {
393
+ const n = this._out[t];
394
+ if (n) {
395
+ const s = Object.values(n);
396
+ return o ? s.filter((i) => i.w === o) : s;
397
+ }
398
+ }
399
+ /**
400
+ * Returns all edges to or from node v regardless of direction. Optionally filters those edges
401
+ * down to just those between nodes v and w regardless of direction.
402
+ * Complexity: O(|E|).
403
+ */
404
+ nodeEdges(t, o) {
405
+ const n = this.inEdges(t, o);
406
+ if (n)
407
+ return n.concat(this.outEdges(t, o));
408
+ }
409
+ }
410
+ function Yt(e, t) {
411
+ e[t] ? e[t]++ : e[t] = 1;
412
+ }
413
+ function Ht(e, t) {
414
+ --e[t] || delete e[t];
415
+ }
416
+ function Ee(e, t, o, n) {
417
+ let s = "" + t, i = "" + o;
418
+ if (!e && s > i) {
419
+ const r = s;
420
+ s = i, i = r;
421
+ }
422
+ return s + Wt + i + Wt + (n === void 0 ? _n : n);
423
+ }
424
+ function Nn(e, t, o, n) {
425
+ let s = "" + t, i = "" + o;
426
+ if (!e && s > i) {
427
+ const l = s;
428
+ s = i, i = l;
429
+ }
430
+ const r = { v: s, w: i };
431
+ return n && (r.name = n), r;
432
+ }
433
+ function et(e, t) {
434
+ return Ee(e, t.v, t.w, t.name);
435
+ }
436
+ class An {
437
+ constructor() {
438
+ const t = {};
439
+ t._next = t._prev = t, this._sentinel = t;
440
+ }
441
+ dequeue() {
442
+ const t = this._sentinel, o = t._prev;
443
+ if (o !== t)
444
+ return Zt(o), o;
445
+ }
446
+ enqueue(t) {
447
+ const o = this._sentinel;
448
+ t._prev && t._next && Zt(t), t._next = o._next, o._next._prev = t, o._next = t, t._prev = o;
449
+ }
450
+ toString() {
451
+ const t = [], o = this._sentinel;
452
+ let n = o._prev;
453
+ for (; n !== o; )
454
+ t.push(JSON.stringify(n, Sn)), n = n._prev;
455
+ return "[" + t.join(", ") + "]";
456
+ }
457
+ }
458
+ function Zt(e) {
459
+ e._prev._next = e._next, e._next._prev = e._prev, delete e._next, delete e._prev;
460
+ }
461
+ function Sn(e, t) {
462
+ if (e !== "_next" && e !== "_prev")
463
+ return t;
464
+ }
465
+ const Ln = () => 1;
466
+ function On(e, t) {
467
+ if (e.nodeCount() <= 1)
468
+ return [];
469
+ const o = Rn(e, t || Ln);
470
+ return Tn(o.graph, o.buckets, o.zeroIndex).flatMap((s) => e.outEdges(s.v, s.w));
471
+ }
472
+ function Tn(e, t, o) {
473
+ let n = [];
474
+ const s = t[t.length - 1], i = t[0];
475
+ let r;
476
+ for (; e.nodeCount(); ) {
477
+ for (; r = i.dequeue(); )
478
+ tt(e, t, o, r);
479
+ for (; r = s.dequeue(); )
480
+ tt(e, t, o, r);
481
+ if (e.nodeCount()) {
482
+ for (let l = t.length - 2; l > 0; --l)
483
+ if (r = t[l].dequeue(), r) {
484
+ n = n.concat(tt(e, t, o, r, !0));
485
+ break;
486
+ }
487
+ }
488
+ }
489
+ return n;
490
+ }
491
+ function tt(e, t, o, n, s) {
492
+ const i = s ? [] : void 0;
493
+ return e.inEdges(n.v).forEach((r) => {
494
+ const l = e.edge(r), a = e.node(r.v);
495
+ s && i.push({ v: r.v, w: r.w }), a.out -= l, at(t, o, a);
496
+ }), e.outEdges(n.v).forEach((r) => {
497
+ const l = e.edge(r), a = e.node(r.w);
498
+ a.in -= l, at(t, o, a);
499
+ }), e.removeNode(n.v), i;
500
+ }
501
+ function Rn(e, t) {
502
+ const o = new q();
503
+ let n = 0, s = 0;
504
+ e.nodes().forEach((l) => {
505
+ o.setNode(l, { v: l, in: 0, out: 0 });
506
+ }), e.edges().forEach((l) => {
507
+ const a = o.edge(l.v, l.w) || 0, c = t(l), d = a + c;
508
+ o.setEdge(l.v, l.w, d), s = Math.max(s, o.node(l.v).out += c), n = Math.max(n, o.node(l.w).in += c);
509
+ });
510
+ const i = Mn(s + n + 3).map(() => new An()), r = n + 1;
511
+ return o.nodes().forEach((l) => {
512
+ at(i, r, o.node(l));
513
+ }), {
514
+ graph: o,
515
+ buckets: i,
516
+ zeroIndex: r
517
+ };
518
+ }
519
+ function at(e, t, o) {
520
+ o.out ? o.in ? e[o.out - o.in + t].enqueue(o) : e[e.length - 1].enqueue(o) : e[0].enqueue(o);
521
+ }
522
+ function Mn(e) {
523
+ const t = [];
524
+ for (let o = 0; o < e; o++)
525
+ t.push(o);
526
+ return t;
527
+ }
528
+ function ue(e, t, o, n) {
529
+ let s = n;
530
+ for (; e.hasNode(s); )
531
+ s = Be(n);
532
+ return o.dummy = t, e.setNode(s, o), s;
533
+ }
534
+ function io(e) {
535
+ const t = new q().setGraph(e.graph());
536
+ return e.nodes().forEach((o) => {
537
+ t.setNode(o, e.node(o));
538
+ }), e.edges().forEach((o) => {
539
+ const n = t.edge(o.v, o.w) || { weight: 0, minlen: 1 }, s = e.edge(o);
540
+ t.setEdge(o.v, o.w, {
541
+ weight: n.weight + s.weight,
542
+ minlen: Math.max(n.minlen, s.minlen)
543
+ });
544
+ }), t;
545
+ }
546
+ function ut(e) {
547
+ const t = new q({ multigraph: e.isMultigraph() }).setGraph(e.graph());
548
+ return e.nodes().forEach((o) => {
549
+ e.children(o).length || t.setNode(o, e.node(o));
550
+ }), e.edges().forEach((o) => {
551
+ t.setEdge(o, e.edge(o));
552
+ }), t;
553
+ }
554
+ function $n(e) {
555
+ const t = e.nodes().map((o) => {
556
+ const n = {};
557
+ return e.outEdges(o).forEach((s) => {
558
+ n[s.w] = (n[s.w] || 0) + e.edge(s).weight;
559
+ }), n;
560
+ });
561
+ return Ve(e.nodes(), t);
562
+ }
563
+ function Dn(e) {
564
+ const t = e.nodes().map((o) => {
565
+ const n = {};
566
+ return e.inEdges(o).forEach((s) => {
567
+ n[s.v] = (n[s.v] || 0) + e.edge(s).weight;
568
+ }), n;
569
+ });
570
+ return Ve(e.nodes(), t);
571
+ }
572
+ function ct(e, t) {
573
+ let o = e.x, n = e.y;
574
+ const s = t.x - o, i = t.y - n;
575
+ let r = e.width / 2, l = e.height / 2;
576
+ if (!s && !i)
577
+ throw new Error("Not possible to find intersection inside of the rectangle");
578
+ let a, c;
579
+ return Math.abs(i) * r > Math.abs(s) * l ? (i < 0 && (l = -l), a = l * s / i, c = l) : (s < 0 && (r = -r), a = r, c = r * i / s), { x: o + a, y: n + c };
580
+ }
581
+ function _e(e) {
582
+ const t = ce(dt(e) + 1).map(() => []);
583
+ return e.nodes().forEach((o) => {
584
+ const n = e.node(o), s = n.rank;
585
+ s !== void 0 && (t[s][n.order] = o);
586
+ }), t;
587
+ }
588
+ function lo(e) {
589
+ const t = e.nodes().map((n) => {
590
+ const s = e.node(n).rank;
591
+ return s === void 0 ? Number.MAX_VALUE : s;
592
+ }), o = W(Math.min, t);
593
+ e.nodes().forEach((n) => {
594
+ const s = e.node(n);
595
+ Object.hasOwn(s, "rank") && (s.rank -= o);
596
+ });
597
+ }
598
+ function ao(e) {
599
+ const t = e.nodes().map((r) => e.node(r).rank).filter((r) => r !== void 0), o = W(Math.min, t), n = [];
600
+ e.nodes().forEach((r) => {
601
+ const l = e.node(r).rank - o;
602
+ n[l] || (n[l] = []), n[l].push(r);
603
+ });
604
+ let s = 0;
605
+ const i = e.graph().nodeRankFactor;
606
+ Array.from(n).forEach((r, l) => {
607
+ r === void 0 && l % i !== 0 ? --s : r !== void 0 && s && r.forEach((a) => {
608
+ e.node(a).rank += s;
609
+ });
610
+ });
611
+ }
612
+ function Fn(e, t, o, n) {
613
+ const s = {
614
+ width: 0,
615
+ height: 0
616
+ };
617
+ return arguments.length >= 4 && (s.rank = o, s.order = n), ue(e, "border", s, t);
618
+ }
619
+ const co = 65535;
620
+ function Pn(e, t = co) {
621
+ const o = [];
622
+ for (let n = 0; n < e.length; n += t) {
623
+ const s = e.slice(n, n + t);
624
+ o.push(s);
625
+ }
626
+ return o;
627
+ }
628
+ function W(e, t) {
629
+ if (t.length > co) {
630
+ const o = Pn(t);
631
+ return e.apply(
632
+ null,
633
+ o.map((n) => e.apply(null, n))
634
+ );
635
+ } else
636
+ return e.apply(null, t);
637
+ }
638
+ function dt(e) {
639
+ const o = e.nodes().map((n) => {
640
+ const s = e.node(n).rank;
641
+ return s === void 0 ? Number.MIN_VALUE : s;
642
+ });
643
+ return W(Math.max, o);
644
+ }
645
+ function uo(e, t) {
646
+ const o = { lhs: [], rhs: [] };
647
+ return e.forEach((n) => {
648
+ t(n) ? o.lhs.push(n) : o.rhs.push(n);
649
+ }), o;
650
+ }
651
+ function fo(e, t) {
652
+ const o = Date.now();
653
+ try {
654
+ return t();
655
+ } finally {
656
+ console.log(e + " time: " + (Date.now() - o) + "ms");
657
+ }
658
+ }
659
+ function ho(e, t) {
660
+ return t();
661
+ }
662
+ let zn = 0;
663
+ function Be(e) {
664
+ const t = ++zn;
665
+ return e + String(t);
666
+ }
667
+ function ce(e, t, o = 1) {
668
+ t == null && (t = e, e = 0);
669
+ let n = (i) => i < t;
670
+ o < 0 && (n = (i) => t < i);
671
+ const s = [];
672
+ for (let i = e; n(i); i += o)
673
+ s.push(i);
674
+ return s;
675
+ }
676
+ function xe(e, t) {
677
+ const o = {};
678
+ for (const n of t)
679
+ e[n] !== void 0 && (o[n] = e[n]);
680
+ return o;
681
+ }
682
+ function Ne(e, t) {
683
+ let o = t;
684
+ if (typeof t == "string") {
685
+ const n = t;
686
+ o = (s) => s[n];
687
+ }
688
+ return Object.entries(e).reduce((n, [s, i]) => (n[s] = o(i, s), n), {});
689
+ }
690
+ function Ve(e, t) {
691
+ return e.reduce((o, n, s) => (o[n] = t[s], o), {});
692
+ }
693
+ const ze = {
694
+ addBorderNode: Fn,
695
+ addDummyNode: ue,
696
+ applyWithChunking: W,
697
+ asNonCompoundGraph: ut,
698
+ buildLayerMatrix: _e,
699
+ intersectRect: ct,
700
+ mapValues: Ne,
701
+ maxRank: dt,
702
+ normalizeRanks: lo,
703
+ notime: ho,
704
+ partition: uo,
705
+ pick: xe,
706
+ predecessorWeights: Dn,
707
+ range: ce,
708
+ removeEmptyRanks: ao,
709
+ simplify: io,
710
+ successorWeights: $n,
711
+ time: fo,
712
+ uniqueId: Be,
713
+ zipObject: Ve
714
+ };
715
+ function Bn(e) {
716
+ (e.graph().acyclicer === "greedy" ? On(e, o(e)) : In(e)).forEach((n) => {
717
+ const s = e.edge(n);
718
+ e.removeEdge(n), s.forwardName = n.name, s.reversed = !0, e.setEdge(n.w, n.v, s, Be("rev"));
719
+ });
720
+ function o(n) {
721
+ return (s) => n.edge(s).weight;
722
+ }
723
+ }
724
+ function Vn(e) {
725
+ e.edges().forEach((t) => {
726
+ const o = e.edge(t);
727
+ if (o.reversed) {
728
+ e.removeEdge(t);
729
+ const n = o.forwardName;
730
+ delete o.reversed, delete o.forwardName, e.setEdge(t.w, t.v, o, n);
731
+ }
732
+ });
733
+ }
734
+ function In(e) {
735
+ const t = [], o = {}, n = {};
736
+ function s(i) {
737
+ Object.hasOwn(n, i) || (n[i] = !0, o[i] = !0, e.outEdges(i).forEach((r) => {
738
+ Object.hasOwn(o, r.w) ? t.push(r) : s(r.w);
739
+ }), delete o[i]);
740
+ }
741
+ return e.nodes().forEach(s), t;
742
+ }
743
+ function Gn(e) {
744
+ e.graph().dummyChains = [], e.edges().forEach((t) => jn(e, t));
745
+ }
746
+ function jn(e, t) {
747
+ let o = t.v, n = e.node(o).rank;
748
+ const s = t.w, i = e.node(s).rank, r = t.name, l = e.edge(t), a = l.labelRank;
749
+ if (i === n + 1)
750
+ return;
751
+ e.removeEdge(t);
752
+ let c, d, f;
753
+ for (f = 0, ++n; n < i; ++f, ++n)
754
+ l.points = [], d = {
755
+ width: 0,
756
+ height: 0,
757
+ edgeLabel: l,
758
+ edgeObj: t,
759
+ rank: n
760
+ }, c = ue(e, "edge", d, "_d"), n === a && (d.width = l.width, d.height = l.height, d.dummy = "edge-label", d.labelpos = l.labelpos), e.setEdge(o, c, { weight: l.weight }, r), f === 0 && e.graph().dummyChains.push(c), o = c;
761
+ e.setEdge(o, s, { weight: l.weight }, r);
762
+ }
763
+ function Wn(e) {
764
+ e.graph().dummyChains.forEach((t) => {
765
+ let o = e.node(t);
766
+ const n = o.edgeLabel;
767
+ e.setEdge(o.edgeObj, n);
768
+ let s;
769
+ for (; o.dummy; )
770
+ s = e.successors(t)[0], e.removeNode(t), n.points.push({ x: o.x, y: o.y }), o.dummy === "edge-label" && (n.x = o.x, n.y = o.y, n.width = o.width, n.height = o.height), t = s, o = e.node(t);
771
+ });
772
+ }
773
+ function mo(e) {
774
+ function t(o) {
775
+ const n = e.node(o);
776
+ if (n && Object.prototype.hasOwnProperty.call(n, "rank"))
777
+ return n.rank;
778
+ const s = e.outEdges(o) || [];
779
+ if (!s.length)
780
+ return n && (n.rank = 0), 0;
781
+ const i = s.map((l) => {
782
+ if (!e.node(l.w))
783
+ return Number.POSITIVE_INFINITY;
784
+ const c = t(l.w), d = e.edge(l).minlen;
785
+ return c - d;
786
+ });
787
+ let r = W(Math.min, i);
788
+ return r === Number.POSITIVE_INFINITY && (r = 0), n && (n.rank = r), r;
789
+ }
790
+ (e.sources() || []).forEach(t);
791
+ }
792
+ function Yn(e, t) {
793
+ return e.node(t.w).rank - e.node(t.v).rank - e.edge(t).minlen;
794
+ }
795
+ function Hn(e) {
796
+ Zn(e);
797
+ const t = new q();
798
+ e.nodes().forEach((i) => {
799
+ t.setNode(i, {});
800
+ });
801
+ const o = e.nodes();
802
+ if (!o.length)
803
+ return t;
804
+ const n = o[0], s = /* @__PURE__ */ new Set([n]);
805
+ for (; s.size < o.length; ) {
806
+ const i = Un(e, s);
807
+ if (!i) {
808
+ const d = o.find((f) => !s.has(f));
809
+ s.add(d), t.setNode(d, {});
810
+ continue;
811
+ }
812
+ const { edgeObject: r, delta: l, attachFrom: a, attachTo: c } = i;
813
+ Xn(e, s, a, l), t.setEdge(r.v, r.w, {}), s.add(c);
814
+ }
815
+ return t;
816
+ }
817
+ function Zn(e) {
818
+ e.nodes().forEach((t) => {
819
+ const o = e.node(t) || {};
820
+ Object.prototype.hasOwnProperty.call(o, "rank") || (o.rank = 0, e.setNode(t, o));
821
+ });
822
+ }
823
+ function Un(e, t) {
824
+ let o = null;
825
+ return e.edges().forEach((n) => {
826
+ const s = t.has(n.v), i = t.has(n.w);
827
+ if (s === i)
828
+ return;
829
+ const r = Yn(e, n), l = Math.abs(r);
830
+ if (!o || l < o.absoluteSlack) {
831
+ const a = s ? n.v : n.w, c = s ? n.w : n.v, d = s ? r : -r;
832
+ o = {
833
+ edgeObject: n,
834
+ delta: d,
835
+ attachFrom: a,
836
+ attachTo: c,
837
+ absoluteSlack: l
838
+ };
839
+ }
840
+ }), o;
841
+ }
842
+ function Xn(e, t, o, n) {
843
+ n && e.nodes().forEach((s) => {
844
+ if (!t.has(s)) {
845
+ const i = e.node(s);
846
+ i.rank += n;
847
+ }
848
+ });
849
+ }
850
+ function de(e) {
851
+ const t = io(e);
852
+ return mo(t), t.nodes().forEach((o) => {
853
+ const n = t.node(o), s = e.node(o) || {};
854
+ s.rank = n.rank, e.setNode(o, s);
855
+ }), e;
856
+ }
857
+ function qn(e, t) {
858
+ }
859
+ function Kn(e, t) {
860
+ }
861
+ function Jn(e, t, o) {
862
+ return 0;
863
+ }
864
+ function Qn(e) {
865
+ return null;
866
+ }
867
+ function es(e, t) {
868
+ return null;
869
+ }
870
+ de.initLowLimValues = qn;
871
+ de.initCutValues = Kn;
872
+ de.calcCutValue = Jn;
873
+ de.leaveEdge = Qn;
874
+ de.enterEdge = es;
875
+ const go = mo;
876
+ function ts(e) {
877
+ const t = e.graph().ranker;
878
+ if (t instanceof Function)
879
+ return t(e);
880
+ switch (e.graph().ranker) {
881
+ case "network-simplex":
882
+ Ut(e);
883
+ break;
884
+ case "tight-tree":
885
+ ns(e);
886
+ break;
887
+ case "longest-path":
888
+ os(e);
889
+ break;
890
+ case "none":
891
+ break;
892
+ default:
893
+ Ut(e);
894
+ }
895
+ }
896
+ const os = go;
897
+ function ns(e) {
898
+ go(e), Hn(e);
899
+ }
900
+ function Ut(e) {
901
+ de(e);
902
+ }
903
+ function ss(e) {
904
+ const t = is(e);
905
+ e.graph().dummyChains.forEach((o) => {
906
+ let n = e.node(o);
907
+ const s = n.edgeObj, i = rs(e, t, s.v, s.w), r = i.path, l = i.lca;
908
+ let a = 0, c = r[a], d = !0, f = o;
909
+ for (; f !== s.w; ) {
910
+ if (n = e.node(f), d) {
911
+ for (; (c = r[a]) !== l && e.node(c).maxRank < n.rank; )
912
+ a++;
913
+ c === l && (d = !1);
914
+ }
915
+ if (!d) {
916
+ for (; a < r.length - 1 && e.node(c = r[a + 1]).minRank <= n.rank; )
917
+ a++;
918
+ c = r[a];
919
+ }
920
+ e.setParent(f, c), f = e.successors(f)[0];
921
+ }
922
+ });
923
+ }
924
+ function rs(e, t, o, n) {
925
+ const s = [], i = [], r = Math.min(t[o].low, t[n].low), l = Math.max(t[o].lim, t[n].lim);
926
+ let a, c;
927
+ a = o;
928
+ do
929
+ a = e.parent(a), s.push(a);
930
+ while (a && (t[a].low > r || l > t[a].lim));
931
+ for (c = a, a = n; (a = e.parent(a)) !== c; )
932
+ i.push(a);
933
+ return {
934
+ path: s.concat(i.reverse()),
935
+ lca: c
936
+ };
937
+ }
938
+ function is(e) {
939
+ const t = {};
940
+ let o = 0;
941
+ function n(s) {
942
+ const i = o;
943
+ e.children(s).forEach(n), t[s] = { low: i, lim: o++ };
944
+ }
945
+ return e.children().forEach(n), t;
946
+ }
947
+ function ls(e) {
948
+ const t = ze.addDummyNode(e, "root", {}, "_root"), o = as(e), n = Object.values(o), s = ze.applyWithChunking(Math.max, n) - 1, i = 2 * s + 1;
949
+ e.graph().nestingRoot = t, e.edges().forEach((l) => {
950
+ e.edge(l).minlen *= i;
951
+ });
952
+ const r = cs(e) + 1;
953
+ e.children().forEach((l) => {
954
+ vo(e, t, i, r, s, o, l);
955
+ }), e.graph().nodeRankFactor = i;
956
+ }
957
+ function vo(e, t, o, n, s, i, r) {
958
+ const l = e.children(r);
959
+ if (!l.length) {
960
+ r !== t && e.setEdge(t, r, { weight: 0, minlen: o });
961
+ return;
962
+ }
963
+ const a = ze.addBorderNode(e, "_bt"), c = ze.addBorderNode(e, "_bb"), d = e.node(r);
964
+ e.setParent(a, r), d.borderTop = a, e.setParent(c, r), d.borderBottom = c, l.forEach((f) => {
965
+ vo(e, t, o, n, s, i, f);
966
+ const g = e.node(f), b = g.borderTop ? g.borderTop : f, N = g.borderBottom ? g.borderBottom : f, x = g.borderTop ? n : 2 * n, T = b !== N ? 1 : s - i[r] + 1;
967
+ e.setEdge(a, b, {
968
+ weight: x,
969
+ minlen: T,
970
+ nestingEdge: !0
971
+ }), e.setEdge(N, c, {
972
+ weight: x,
973
+ minlen: T,
974
+ nestingEdge: !0
975
+ });
976
+ }), e.parent(r) || e.setEdge(t, a, {
977
+ weight: 0,
978
+ minlen: s + i[r]
979
+ });
980
+ }
981
+ function as(e) {
982
+ const t = {};
983
+ function o(n, s) {
984
+ const i = e.children(n);
985
+ i && i.length && i.forEach((r) => o(r, s + 1)), t[n] = s;
986
+ }
987
+ return e.children().forEach((n) => o(n, 1)), t;
988
+ }
989
+ function cs(e) {
990
+ return e.edges().reduce((t, o) => t + e.edge(o).weight, 0);
991
+ }
992
+ function us(e) {
993
+ const t = e.graph();
994
+ e.removeNode(t.nestingRoot), delete t.nestingRoot, e.edges().forEach((o) => {
995
+ e.edge(o).nestingEdge && e.removeEdge(o);
996
+ });
997
+ }
998
+ function ds(e) {
999
+ function t(o) {
1000
+ const n = e.children(o), s = e.node(o);
1001
+ if (n.length && n.forEach(t), Object.hasOwn(s, "minRank")) {
1002
+ s.borderLeft = [], s.borderRight = [];
1003
+ for (let i = s.minRank, r = s.maxRank + 1; i < r; ++i)
1004
+ Xt(e, "borderLeft", "_bl", o, s, i), Xt(e, "borderRight", "_br", o, s, i);
1005
+ }
1006
+ }
1007
+ e.children().forEach(t);
1008
+ }
1009
+ function Xt(e, t, o, n, s, i) {
1010
+ const r = {
1011
+ width: 0,
1012
+ height: 0,
1013
+ rank: i,
1014
+ borderType: t
1015
+ }, l = s[t][i - 1], a = ue(e, "border", r, o);
1016
+ s[t][i] = a, e.setParent(a, n), l && e.setEdge(l, a, { weight: 1 });
1017
+ }
1018
+ function fs(e) {
1019
+ const t = e.graph().rankdir.toLowerCase();
1020
+ (t === "lr" || t === "rl") && bo(e);
1021
+ }
1022
+ function hs(e) {
1023
+ const t = e.graph().rankdir.toLowerCase();
1024
+ (t === "bt" || t === "rl") && ms(e), (t === "lr" || t === "rl") && (gs(e), bo(e));
1025
+ }
1026
+ function bo(e) {
1027
+ e.nodes().forEach((t) => {
1028
+ qt(e.node(t));
1029
+ }), e.edges().forEach((t) => {
1030
+ qt(e.edge(t));
1031
+ });
1032
+ }
1033
+ function qt(e) {
1034
+ const t = e.width;
1035
+ e.width = e.height, e.height = t;
1036
+ }
1037
+ function ms(e) {
1038
+ e.nodes().forEach((t) => {
1039
+ ot(e.node(t));
1040
+ }), e.edges().forEach((t) => {
1041
+ const o = e.edge(t);
1042
+ o.points.forEach(ot), Object.hasOwn(o, "y") && ot(o);
1043
+ });
1044
+ }
1045
+ function ot(e) {
1046
+ e.y = -e.y;
1047
+ }
1048
+ function gs(e) {
1049
+ e.nodes().forEach((t) => {
1050
+ nt(e.node(t));
1051
+ }), e.edges().forEach((t) => {
1052
+ const o = e.edge(t);
1053
+ o.points.forEach(nt), Object.hasOwn(o, "x") && nt(o);
1054
+ });
1055
+ }
1056
+ function nt(e) {
1057
+ const t = e.x;
1058
+ e.x = e.y, e.y = t;
1059
+ }
1060
+ const Kt = {
1061
+ adjust: fs,
1062
+ undo: hs
1063
+ };
1064
+ function vs(e) {
1065
+ const t = {}, o = e.nodes().filter((a) => e.children(a).length === 0), n = o.map((a) => e.node(a).rank), s = W(Math.max, n), i = ce(s + 1).map(() => []);
1066
+ function r(a) {
1067
+ if (t[a]) return;
1068
+ t[a] = !0;
1069
+ const c = e.node(a);
1070
+ i[c.rank].push(a), e.successors(a).forEach(r);
1071
+ }
1072
+ return o.sort(
1073
+ (a, c) => e.node(a).rank - e.node(c).rank
1074
+ ).forEach(r), i;
1075
+ }
1076
+ function bs(e, t) {
1077
+ let o = 0;
1078
+ for (let n = 1; n < t.length; ++n)
1079
+ o += ps(e, t[n - 1], t[n]);
1080
+ return o;
1081
+ }
1082
+ function ps(e, t, o) {
1083
+ const n = Ve(
1084
+ o,
1085
+ o.map((c, d) => d)
1086
+ ), s = t.flatMap((c) => e.outEdges(c).map((d) => ({
1087
+ pos: n[d.w],
1088
+ weight: e.edge(d).weight
1089
+ })).sort((d, f) => d.pos - f.pos));
1090
+ let i = 1;
1091
+ for (; i < o.length; ) i <<= 1;
1092
+ const r = 2 * i - 1;
1093
+ i -= 1;
1094
+ const l = new Array(r).fill(0);
1095
+ let a = 0;
1096
+ return s.forEach((c) => {
1097
+ let d = c.pos + i;
1098
+ l[d] += c.weight;
1099
+ let f = 0;
1100
+ for (; d > 0; )
1101
+ d % 2 && (f += l[d + 1]), d = d - 1 >> 1, l[d] += c.weight;
1102
+ a += c.weight * f;
1103
+ }), a;
1104
+ }
1105
+ function ws(e, t = []) {
1106
+ return t.map((o) => {
1107
+ const n = e.inEdges(o);
1108
+ if (!n.length)
1109
+ return { v: o };
1110
+ const s = n.reduce(
1111
+ (i, r) => {
1112
+ const l = e.edge(r), a = e.node(r.v);
1113
+ return {
1114
+ sum: i.sum + l.weight * a.order,
1115
+ weight: i.weight + l.weight
1116
+ };
1117
+ },
1118
+ { sum: 0, weight: 0 }
1119
+ );
1120
+ return {
1121
+ v: o,
1122
+ barycenter: s.sum / s.weight,
1123
+ weight: s.weight
1124
+ };
1125
+ });
1126
+ }
1127
+ function ys(e, t) {
1128
+ const o = {};
1129
+ e.forEach((s, i) => {
1130
+ const r = o[s.v] = {
1131
+ indegree: 0,
1132
+ in: [],
1133
+ out: [],
1134
+ vs: [s.v],
1135
+ i
1136
+ };
1137
+ s.barycenter !== void 0 && (r.barycenter = s.barycenter, r.weight = s.weight);
1138
+ }), t.edges().forEach((s) => {
1139
+ const i = o[s.v], r = o[s.w];
1140
+ i !== void 0 && r !== void 0 && (r.indegree++, i.out.push(r));
1141
+ });
1142
+ const n = Object.values(o).filter((s) => !s.indegree);
1143
+ return ks(n);
1144
+ }
1145
+ function ks(e) {
1146
+ const t = [];
1147
+ function o(s) {
1148
+ return (i) => {
1149
+ i.merged || (i.barycenter === void 0 || s.barycenter === void 0 || i.barycenter >= s.barycenter) && Es(s, i);
1150
+ };
1151
+ }
1152
+ function n(s) {
1153
+ return (i) => {
1154
+ i.in.push(s), --i.indegree === 0 && e.push(i);
1155
+ };
1156
+ }
1157
+ for (; e.length; ) {
1158
+ const s = e.pop();
1159
+ t.push(s), s.in.reverse().forEach(o(s)), s.out.forEach(n(s));
1160
+ }
1161
+ return t.filter((s) => !s.merged).map((s) => xe(s, ["vs", "i", "barycenter", "weight"]));
1162
+ }
1163
+ function Es(e, t) {
1164
+ let o = 0, n = 0;
1165
+ e.weight && (o += e.barycenter * e.weight, n += e.weight), t.weight && (o += t.barycenter * t.weight, n += t.weight), e.vs = t.vs.concat(e.vs), e.barycenter = o / n, e.weight = n, e.i = Math.min(t.i, e.i), t.merged = !0;
1166
+ }
1167
+ function Cs(e, t) {
1168
+ const o = uo(e, (d) => Object.hasOwn(d, "barycenter")), n = o.lhs, s = o.rhs.sort((d, f) => f.i - d.i), i = [];
1169
+ let r = 0, l = 0, a = 0;
1170
+ n.sort(xs(!!t)), a = Jt(i, s, a), n.forEach((d) => {
1171
+ a += d.vs.length, i.push(d.vs), r += d.barycenter * d.weight, l += d.weight, a = Jt(i, s, a);
1172
+ });
1173
+ const c = { vs: i.flat(!0) };
1174
+ return l && (c.barycenter = r / l, c.weight = l), c;
1175
+ }
1176
+ function Jt(e, t, o) {
1177
+ let n;
1178
+ for (; t.length && (n = t[t.length - 1]).i <= o; )
1179
+ t.pop(), e.push(n.vs), o++;
1180
+ return o;
1181
+ }
1182
+ function xs(e) {
1183
+ return (t, o) => t.barycenter < o.barycenter ? -1 : t.barycenter > o.barycenter ? 1 : e ? o.i - t.i : t.i - o.i;
1184
+ }
1185
+ function po(e, t, o, n) {
1186
+ let s = e.children(t);
1187
+ const i = e.node(t), r = i ? i.borderLeft : void 0, l = i ? i.borderRight : void 0, a = {};
1188
+ r && (s = s.filter((g) => g !== r && g !== l));
1189
+ const c = ws(e, s);
1190
+ c.forEach((g) => {
1191
+ if (e.children(g.v).length) {
1192
+ const b = po(e, g.v, o, n);
1193
+ a[g.v] = b, Object.hasOwn(b, "barycenter") && Ns(g, b);
1194
+ }
1195
+ });
1196
+ let d = ys(c, o);
1197
+ _s(d, a);
1198
+ const f = Cs(d, n);
1199
+ if (r && (f.vs = [r, f.vs, l].flat(!0), e.predecessors(r).length)) {
1200
+ const g = e.node(e.predecessors(r)[0]), b = e.node(e.predecessors(l)[0]);
1201
+ Object.hasOwn(f, "barycenter") || (f.barycenter = 0, f.weight = 0), f.barycenter = (f.barycenter * f.weight + g.order + b.order) / (f.weight + 2), f.weight += 2;
1202
+ }
1203
+ return f;
1204
+ }
1205
+ function _s(e, t) {
1206
+ e.forEach((o) => {
1207
+ o.vs = o.vs.flatMap((n) => t[n] ? t[n].vs : n);
1208
+ });
1209
+ }
1210
+ function Ns(e, t) {
1211
+ e.barycenter !== void 0 ? (e.barycenter = (e.barycenter * e.weight + t.barycenter * t.weight) / (e.weight + t.weight), e.weight += t.weight) : (e.barycenter = t.barycenter, e.weight = t.weight);
1212
+ }
1213
+ function As(e, t, o, n) {
1214
+ n || (n = e.nodes());
1215
+ const s = Ss(e), i = new q({ compound: !0 }).setGraph({ root: s }).setDefaultNodeLabel((r) => e.node(r));
1216
+ return n.forEach((r) => {
1217
+ const l = e.node(r), a = e.parent(r);
1218
+ (l.rank === t || l.minRank <= t && t <= l.maxRank) && (i.setNode(r), i.setParent(r, a || s), e[o](r).forEach((d) => {
1219
+ const f = d.v === r ? d.w : d.v, g = i.edge(f, r), b = g ? g.weight : 0;
1220
+ i.setEdge(f, r, {
1221
+ weight: e.edge(d).weight + b
1222
+ });
1223
+ }), Object.hasOwn(l, "minRank") && i.setNode(r, {
1224
+ borderLeft: l.borderLeft[t],
1225
+ borderRight: l.borderRight[t]
1226
+ }));
1227
+ }), i;
1228
+ }
1229
+ function Ss(e) {
1230
+ let t;
1231
+ for (; e.hasNode(t = Be("_root")); ) ;
1232
+ return t;
1233
+ }
1234
+ function Ls(e, t, o) {
1235
+ let n = {}, s;
1236
+ o.forEach((i) => {
1237
+ let r = e.parent(i), l, a;
1238
+ for (; r; ) {
1239
+ if (l = e.parent(r), l ? (a = n[l], n[l] = r) : (a = s, s = r), a && a !== r) {
1240
+ t.setEdge(a, r);
1241
+ return;
1242
+ }
1243
+ r = l;
1244
+ }
1245
+ });
1246
+ }
1247
+ function wo(e, t = {}) {
1248
+ if (typeof t.customOrder == "function") {
1249
+ t.customOrder(e, wo);
1250
+ return;
1251
+ }
1252
+ const o = dt(e), n = Qt(
1253
+ e,
1254
+ ce(1, o + 1),
1255
+ "inEdges"
1256
+ ), s = Qt(
1257
+ e,
1258
+ ce(o - 1, -1, -1),
1259
+ "outEdges"
1260
+ );
1261
+ let i = vs(e);
1262
+ if (eo(e, i), t.disableOptimalOrderHeuristic)
1263
+ return;
1264
+ let r = Number.POSITIVE_INFINITY, l;
1265
+ const a = t.constraints || [];
1266
+ for (let c = 0, d = 0; d < 4; ++c, ++d) {
1267
+ const f = c % 2 === 0 ? n : s, g = c % 4 >= 2;
1268
+ Os(f, g, a), i = _e(e);
1269
+ const b = bs(e, i);
1270
+ b < r ? (r = b, d = 0, l = structuredClone(i)) : b === r && (l = structuredClone(i));
1271
+ }
1272
+ eo(e, l);
1273
+ }
1274
+ function Qt(e, t, o) {
1275
+ const n = /* @__PURE__ */ new Map();
1276
+ function s(i, r) {
1277
+ n.has(i) || n.set(i, []), n.get(i).push(r);
1278
+ }
1279
+ for (const i of e.nodes()) {
1280
+ const r = e.node(i);
1281
+ if (typeof r.rank == "number" && s(r.rank, i), typeof r.minRank == "number" && typeof r.maxRank == "number")
1282
+ for (let l = r.minRank; l <= r.maxRank; l++)
1283
+ l !== r.rank && s(l, i);
1284
+ }
1285
+ return t.map(
1286
+ (i) => As(
1287
+ e,
1288
+ i,
1289
+ o,
1290
+ n.get(i) || []
1291
+ )
1292
+ );
1293
+ }
1294
+ function Os(e, t, o) {
1295
+ const n = new q();
1296
+ e.forEach((s) => {
1297
+ o.forEach((l) => n.setEdge(l.left, l.right));
1298
+ const i = s.graph().root, r = po(s, i, n, t);
1299
+ r.vs.forEach((l, a) => {
1300
+ s.node(l).order = a;
1301
+ }), Ls(s, n, r.vs);
1302
+ });
1303
+ }
1304
+ function eo(e, t) {
1305
+ Object.values(t).forEach((o) => {
1306
+ o.forEach((n, s) => {
1307
+ e.node(n).order = s;
1308
+ });
1309
+ });
1310
+ }
1311
+ function Ts(e, t) {
1312
+ const o = {};
1313
+ function n(s, i) {
1314
+ let r = 0, l = 0;
1315
+ const a = s.length, c = i[i.length - 1];
1316
+ return i.forEach((d, f) => {
1317
+ const g = Ms(e, d), b = g ? e.node(g).order : a;
1318
+ (g || d === c) && (i.slice(l, f + 1).forEach((N) => {
1319
+ e.predecessors(N).forEach((x) => {
1320
+ const T = e.node(x), I = T.order;
1321
+ (I < r || b < I) && !(T.dummy && e.node(N).dummy) && yo(o, x, N);
1322
+ });
1323
+ }), l = f + 1, r = b);
1324
+ }), i;
1325
+ }
1326
+ return t.length && t.reduce(n), o;
1327
+ }
1328
+ function Rs(e, t) {
1329
+ const o = {};
1330
+ function n(i, r, l, a, c) {
1331
+ let d;
1332
+ ce(r, l).forEach((f) => {
1333
+ d = i[f], e.node(d).dummy && e.predecessors(d).forEach((g) => {
1334
+ const b = e.node(g);
1335
+ b.dummy && (b.order < a || b.order > c) && yo(o, g, d);
1336
+ });
1337
+ });
1338
+ }
1339
+ function s(i, r) {
1340
+ let l = -1, a, c = 0;
1341
+ return r.forEach((d, f) => {
1342
+ if (e.node(d).dummy === "border") {
1343
+ const g = e.predecessors(d);
1344
+ g.length && (a = e.node(g[0]).order, n(r, c, f, l, a), c = f, l = a);
1345
+ }
1346
+ n(r, c, r.length, a, i.length);
1347
+ }), r;
1348
+ }
1349
+ return t.length && t.reduce(s), o;
1350
+ }
1351
+ function Ms(e, t) {
1352
+ if (e.node(t).dummy)
1353
+ return e.predecessors(t).find((o) => e.node(o).dummy);
1354
+ }
1355
+ function yo(e, t, o) {
1356
+ if (t > o) {
1357
+ const s = t;
1358
+ t = o, o = s;
1359
+ }
1360
+ let n = e[t];
1361
+ n || (e[t] = n = {}), n[o] = !0;
1362
+ }
1363
+ function $s(e, t, o) {
1364
+ if (t > o) {
1365
+ const n = t;
1366
+ t = o, o = n;
1367
+ }
1368
+ return !!e[t] && Object.hasOwn(e[t], o);
1369
+ }
1370
+ function Ds(e, t, o, n) {
1371
+ const s = {}, i = {}, r = {};
1372
+ return t.forEach((l) => {
1373
+ l.forEach((a, c) => {
1374
+ s[a] = a, i[a] = a, r[a] = c;
1375
+ });
1376
+ }), t.forEach((l) => {
1377
+ let a = -1;
1378
+ l.forEach((c) => {
1379
+ let d = n(c);
1380
+ if (d.length) {
1381
+ d = d.sort((g, b) => r[g] - r[b]);
1382
+ const f = (d.length - 1) / 2;
1383
+ for (let g = Math.floor(f), b = Math.ceil(f); g <= b; ++g) {
1384
+ const N = d[g];
1385
+ i[c] === c && a < r[N] && !$s(o, c, N) && (i[N] = c, i[c] = s[c] = s[N], a = r[N]);
1386
+ }
1387
+ }
1388
+ });
1389
+ }), { root: s, align: i };
1390
+ }
1391
+ function Fs(e, t, o, n, s) {
1392
+ const i = {}, r = Ps(e, t, o, s), l = s ? "borderLeft" : "borderRight";
1393
+ function a(f, g) {
1394
+ const b = r.nodes().slice(), N = {};
1395
+ let x = b.pop();
1396
+ for (; x; ) {
1397
+ if (N[x])
1398
+ f(x);
1399
+ else {
1400
+ N[x] = !0, b.push(x);
1401
+ for (const T of g(x))
1402
+ b.push(T);
1403
+ }
1404
+ x = b.pop();
1405
+ }
1406
+ }
1407
+ function c(f) {
1408
+ i[f] = r.inEdges(f).reduce((g, b) => Math.max(g, i[b.v] + r.edge(b)), 0);
1409
+ }
1410
+ function d(f) {
1411
+ const g = r.outEdges(f).reduce((N, x) => Math.min(N, i[x.w] - r.edge(x)), Number.POSITIVE_INFINITY), b = e.node(f);
1412
+ g !== Number.POSITIVE_INFINITY && b.borderType !== l && (i[f] = Math.max(i[f], g));
1413
+ }
1414
+ return a(c, r.predecessors.bind(r)), a(d, r.successors.bind(r)), Object.keys(n).forEach((f) => {
1415
+ i[f] = i[o[f]];
1416
+ }), i;
1417
+ }
1418
+ function Ps(e, t, o, n) {
1419
+ const s = new e.constructor(), i = e.graph(), r = Gs(i.nodesep, i.edgesep, n);
1420
+ return t.forEach((l) => {
1421
+ let a;
1422
+ l.forEach((c) => {
1423
+ const d = o[c];
1424
+ if (s.setNode(d), a) {
1425
+ const f = o[a], g = s.edge(f, d);
1426
+ s.setEdge(
1427
+ f,
1428
+ d,
1429
+ Math.max(r(e, c, a), g || 0)
1430
+ );
1431
+ }
1432
+ a = c;
1433
+ });
1434
+ }), s;
1435
+ }
1436
+ function zs(e, t) {
1437
+ return Object.values(t).reduce(
1438
+ (o, n) => {
1439
+ let s = Number.NEGATIVE_INFINITY, i = Number.POSITIVE_INFINITY;
1440
+ Object.entries(n).forEach(([l, a]) => {
1441
+ const c = js(e, l) / 2;
1442
+ s = Math.max(a + c, s), i = Math.min(a - c, i);
1443
+ });
1444
+ const r = s - i;
1445
+ return r < o[0] && (o = [r, n]), o;
1446
+ },
1447
+ [Number.POSITIVE_INFINITY, null]
1448
+ )[1];
1449
+ }
1450
+ function Bs(e, t) {
1451
+ const o = Object.values(t), n = W(Math.min, o), s = W(Math.max, o);
1452
+ ["u", "d"].forEach((i) => {
1453
+ ["l", "r"].forEach((r) => {
1454
+ const l = i + r;
1455
+ let a = e[l];
1456
+ if (a === t) return;
1457
+ const c = Object.values(a);
1458
+ let d = n - W(Math.min, c);
1459
+ r !== "l" && (d = s - W(Math.max, c)), d && (a = Ne(a, (f) => f + d), e[l] = a);
1460
+ });
1461
+ });
1462
+ }
1463
+ function Vs(e, t) {
1464
+ return Ne(e.ul, (o, n) => {
1465
+ if (t)
1466
+ return e[t.toLowerCase()][n];
1467
+ const s = Object.values(e).map((i) => i[n]).sort((i, r) => i - r);
1468
+ return (s[1] + s[2]) / 2;
1469
+ });
1470
+ }
1471
+ function Is(e) {
1472
+ const t = _e(e), o = Object.assign(
1473
+ Ts(e, t),
1474
+ Rs(e, t)
1475
+ ), n = {};
1476
+ let s;
1477
+ ["u", "d"].forEach((r) => {
1478
+ s = r === "u" ? t : Object.values(t).reverse(), ["l", "r"].forEach((l) => {
1479
+ let a = s;
1480
+ l === "r" && (a = a.map(
1481
+ (g) => Object.values(g).reverse()
1482
+ ));
1483
+ const c = (r === "u" ? e.predecessors : e.successors).bind(e), d = Ds(
1484
+ e,
1485
+ a,
1486
+ o,
1487
+ c
1488
+ );
1489
+ let f = Fs(
1490
+ e,
1491
+ a,
1492
+ d.root,
1493
+ d.align,
1494
+ l === "r"
1495
+ );
1496
+ l === "r" && (f = Ne(f, (g) => -g)), n[r + l] = f;
1497
+ });
1498
+ });
1499
+ const i = zs(e, n);
1500
+ return Bs(n, i), Vs(n, e.graph().align);
1501
+ }
1502
+ function Gs(e, t, o) {
1503
+ return (n, s, i) => {
1504
+ const r = n.node(s), l = n.node(i);
1505
+ let a = 0, c;
1506
+ if (a += r.width / 2, Object.hasOwn(r, "labelpos"))
1507
+ switch (r.labelpos.toLowerCase()) {
1508
+ case "l":
1509
+ c = -r.width / 2;
1510
+ break;
1511
+ case "r":
1512
+ c = r.width / 2;
1513
+ break;
1514
+ }
1515
+ if (c && (a += o ? c : -c), c = 0, a += (r.dummy ? t : e) / 2, a += (l.dummy ? t : e) / 2, a += l.width / 2, Object.hasOwn(l, "labelpos"))
1516
+ switch (l.labelpos.toLowerCase()) {
1517
+ case "l":
1518
+ c = l.width / 2;
1519
+ break;
1520
+ case "r":
1521
+ c = -l.width / 2;
1522
+ break;
1523
+ }
1524
+ return c && (a += o ? c : -c), c = 0, a;
1525
+ };
1526
+ }
1527
+ function js(e, t) {
1528
+ return e.node(t).width;
1529
+ }
1530
+ function Ws(e) {
1531
+ const t = ut(e);
1532
+ Ys(t);
1533
+ const o = Is(t);
1534
+ Object.entries(o).forEach(([n, s]) => {
1535
+ e.node(n).x = s;
1536
+ });
1537
+ }
1538
+ function Ys(e) {
1539
+ const t = _e(e), o = e.graph().ranksep;
1540
+ let n = 0;
1541
+ t.forEach((s) => {
1542
+ const i = s.reduce((r, l) => {
1543
+ const a = e.node(l).height;
1544
+ return r > a ? r : a;
1545
+ }, 0);
1546
+ s.forEach((r) => {
1547
+ e.node(r).y = n + i / 2;
1548
+ }), n += i + o;
1549
+ });
1550
+ }
1551
+ function Hs(e, t = {}) {
1552
+ const o = t.debugTiming ? fo : ho;
1553
+ return o("layout", () => {
1554
+ const n = o(" buildLayoutGraph", () => or(e));
1555
+ return o(" runLayout", () => Zs(n, o, t)), o(" updateInputGraph", () => Us(e, n)), n;
1556
+ });
1557
+ }
1558
+ function Zs(e, t, o) {
1559
+ t(" makeSpaceForEdgeLabels", () => nr(e)), t(" removeSelfEdges", () => fr(e)), t(" acyclic", () => Bn(e)), t(" nestingGraph.run", () => ls(e)), t(" rank", () => ts(ut(e))), t(" injectEdgeLabelProxies", () => sr(e)), t(" removeEmptyRanks", () => ao(e)), t(" nestingGraph.cleanup", () => us(e)), t(" normalizeRanks", () => lo(e)), t(" assignRankMinMax", () => rr(e)), t(" removeEdgeLabelProxies", () => ir(e)), t(" normalize.run", () => Gn(e)), t(" parentDummyChains", () => ss(e)), t(" addBorderSegments", () => ds(e)), t(" order", () => wo(e, o)), t(" insertSelfEdges", () => hr(e)), t(" adjustCoordinateSystem", () => Kt.adjust(e)), t(" position", () => Ws(e)), t(" positionSelfEdges", () => mr(e)), t(" removeBorderNodes", () => dr(e)), t(" normalize.undo", () => Wn(e)), t(" fixupEdgeLabelCoords", () => cr(e)), t(" undoCoordinateSystem", () => Kt.undo(e)), t(" translateGraph", () => lr(e)), t(" assignNodeIntersects", () => ar(e)), t(" reversePoints", () => ur(e)), t(" acyclic.undo", () => Vn(e));
1560
+ }
1561
+ function Us(e, t) {
1562
+ e.nodes().forEach((s) => {
1563
+ const i = e.node(s), r = t.node(s);
1564
+ i && (i.x = r.x, i.y = r.y, i.order = r.order, i.rank = r.rank, t.children(s).length && (i.width = r.width, i.height = r.height));
1565
+ }), e.edges().forEach((s) => {
1566
+ const i = e.edge(s), r = t.edge(s);
1567
+ i.points = r.points, Object.hasOwn(r, "x") && (i.x = r.x, i.y = r.y);
1568
+ });
1569
+ const o = t.graph(), n = e.graph();
1570
+ n.width = o.width, n.height = o.height;
1571
+ }
1572
+ const Xs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"], qs = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" }, Ks = ["acyclicer", "ranker", "rankdir", "align"], Js = ["width", "height", "rank"], to = { width: 0, height: 0 }, Qs = ["minlen", "weight", "width", "height", "labeloffset"], er = {
1573
+ minlen: 1,
1574
+ weight: 1,
1575
+ width: 0,
1576
+ height: 0,
1577
+ labeloffset: 10,
1578
+ labelpos: "r"
1579
+ }, tr = ["labelpos", "arrowshape"];
1580
+ function or(e) {
1581
+ const t = rt(e.graph()), o = {
1582
+ ...qs,
1583
+ ...st(t, Xs),
1584
+ ...xe(t, Ks)
1585
+ }, n = new q({ multigraph: !0, compound: !0 });
1586
+ return n.setGraph(o), e.nodes().forEach((s) => {
1587
+ const i = rt(e.node(s)), r = st(i, Js);
1588
+ Object.keys(to).forEach((l) => {
1589
+ r[l] === void 0 && (r[l] = to[l]);
1590
+ }), n.setNode(s, r), n.setParent(s, e.parent(s));
1591
+ }), e.edges().forEach((s) => {
1592
+ const i = rt(e.edge(s));
1593
+ n.setEdge(
1594
+ s,
1595
+ {
1596
+ ...er,
1597
+ ...st(i, Qs),
1598
+ ...xe(i, tr)
1599
+ }
1600
+ );
1601
+ }), n;
1602
+ }
1603
+ function nr(e) {
1604
+ const t = e.graph();
1605
+ t.ranksep /= 2, e.edges().forEach((o) => {
1606
+ const n = e.edge(o);
1607
+ n.minlen *= 2, n.labelpos.toLowerCase() !== "c" && (t.rankdir === "TB" || t.rankdir === "BT" ? n.width += n.labeloffset : n.height += n.labeloffset);
1608
+ });
1609
+ }
1610
+ function sr(e) {
1611
+ e.edges().forEach((t) => {
1612
+ const o = e.edge(t);
1613
+ if (o.width && o.height) {
1614
+ const n = e.node(t.v), i = { rank: (e.node(t.w).rank - n.rank) / 2 + n.rank, e: t };
1615
+ ue(e, "edge-proxy", i, "_ep");
1616
+ }
1617
+ });
1618
+ }
1619
+ function rr(e) {
1620
+ let t = 0;
1621
+ e.nodes().forEach((o) => {
1622
+ const n = e.node(o);
1623
+ n.borderTop && (n.minRank = e.node(n.borderTop).rank, n.maxRank = e.node(n.borderBottom).rank, t = Math.max(t, n.maxRank));
1624
+ }), e.graph().maxRank = t;
1625
+ }
1626
+ function ir(e) {
1627
+ e.nodes().forEach((t) => {
1628
+ const o = e.node(t);
1629
+ o.dummy === "edge-proxy" && (e.edge(o.e).labelRank = o.rank, e.removeNode(t));
1630
+ });
1631
+ }
1632
+ function lr(e) {
1633
+ let t = Number.POSITIVE_INFINITY, o = 0, n = Number.POSITIVE_INFINITY, s = 0;
1634
+ const i = e.graph(), r = i.marginx || 0, l = i.marginy || 0;
1635
+ function a(c) {
1636
+ const d = c.x, f = c.y, g = c.width, b = c.height;
1637
+ t = Math.min(t, d - g / 2), o = Math.max(o, d + g / 2), n = Math.min(n, f - b / 2), s = Math.max(s, f + b / 2);
1638
+ }
1639
+ e.nodes().forEach((c) => a(e.node(c))), e.edges().forEach((c) => {
1640
+ const d = e.edge(c);
1641
+ Object.hasOwn(d, "x") && a(d);
1642
+ }), t -= r, n -= l, e.nodes().forEach((c) => {
1643
+ const d = e.node(c);
1644
+ d.x -= t, d.y -= n;
1645
+ }), e.edges().forEach((c) => {
1646
+ const d = e.edge(c);
1647
+ d.points.forEach((f) => {
1648
+ f.x -= t, f.y -= n;
1649
+ }), Object.hasOwn(d, "x") && (d.x -= t), Object.hasOwn(d, "y") && (d.y -= n);
1650
+ }), i.width = o - t + r, i.height = s - n + l;
1651
+ }
1652
+ function ar(e) {
1653
+ function o(n, s, i) {
1654
+ if (!s)
1655
+ return n;
1656
+ const r = s.x - n.x, l = s.y - n.y, a = Math.sqrt(r * r + l * l);
1657
+ if (!a || a <= i)
1658
+ return n;
1659
+ const c = i / a;
1660
+ return {
1661
+ x: n.x + r * c,
1662
+ y: n.y + l * c
1663
+ };
1664
+ }
1665
+ e.edges().forEach((n) => {
1666
+ const s = e.edge(n), i = e.node(n.v), r = e.node(n.w);
1667
+ let l, a;
1668
+ !s.points || !s.points.length ? (s.points = [], l = r, a = i) : (l = s.points[0], a = s.points[s.points.length - 1]);
1669
+ const c = ct(i, l), d = ct(r, a), f = s.points.length ? s.points[0] : l, g = s.points.length ? s.points[s.points.length - 1] : a, b = s.arrowshape, N = b === "normal" || b === "vee", x = !!s.reversed;
1670
+ let T = c, I = d;
1671
+ N && (x ? T = o(c, f, 4) : I = o(d, g, 4)), s.points.unshift(T), s.points.push(I);
1672
+ });
1673
+ }
1674
+ function cr(e) {
1675
+ e.edges().forEach((t) => {
1676
+ const o = e.edge(t);
1677
+ if (Object.hasOwn(o, "x"))
1678
+ switch ((o.labelpos === "l" || o.labelpos === "r") && (o.width -= o.labeloffset), o.labelpos) {
1679
+ case "l":
1680
+ o.x -= o.width / 2 + o.labeloffset;
1681
+ break;
1682
+ case "r":
1683
+ o.x += o.width / 2 + o.labeloffset;
1684
+ break;
1685
+ }
1686
+ });
1687
+ }
1688
+ function ur(e) {
1689
+ e.edges().forEach((t) => {
1690
+ const o = e.edge(t);
1691
+ o.reversed && o.points.reverse();
1692
+ });
1693
+ }
1694
+ function dr(e) {
1695
+ e.nodes().forEach((t) => {
1696
+ if (e.children(t).length) {
1697
+ const o = e.node(t), n = e.node(o.borderTop), s = e.node(o.borderBottom), i = e.node(o.borderLeft[o.borderLeft.length - 1]), r = e.node(o.borderRight[o.borderRight.length - 1]);
1698
+ o.width = Math.abs(r.x - i.x), o.height = Math.abs(s.y - n.y), o.x = i.x + o.width / 2, o.y = n.y + o.height / 2;
1699
+ }
1700
+ }), e.nodes().forEach((t) => {
1701
+ e.node(t).dummy === "border" && e.removeNode(t);
1702
+ });
1703
+ }
1704
+ function fr(e) {
1705
+ e.edges().forEach((t) => {
1706
+ if (t.v === t.w) {
1707
+ const o = e.node(t.v);
1708
+ o.selfEdges || (o.selfEdges = []), o.selfEdges.push({ e: t, label: e.edge(t) }), e.removeEdge(t);
1709
+ }
1710
+ });
1711
+ }
1712
+ function hr(e) {
1713
+ _e(e).forEach((o) => {
1714
+ let n = 0;
1715
+ o.forEach((s, i) => {
1716
+ const r = e.node(s);
1717
+ r.order = i + n, (r.selfEdges || []).forEach((l) => {
1718
+ ue(e, "selfedge", {
1719
+ width: l.label.width,
1720
+ height: l.label.height,
1721
+ rank: r.rank,
1722
+ order: i + ++n,
1723
+ e: l.e,
1724
+ label: l.label
1725
+ }, "_se");
1726
+ }), delete r.selfEdges;
1727
+ });
1728
+ });
1729
+ }
1730
+ function mr(e) {
1731
+ e.nodes().forEach((t) => {
1732
+ const o = e.node(t);
1733
+ if (o.dummy === "selfedge") {
1734
+ const n = e.node(o.e.v), s = n.x + n.width / 2, i = n.y, r = o.x - s, l = n.height / 2;
1735
+ e.setEdge(o.e, o.label), e.removeNode(t), o.label.points = [
1736
+ { x: s + 2 * r / 3, y: i - l },
1737
+ { x: s + 5 * r / 6, y: i - l },
1738
+ { x: s + r, y: i },
1739
+ { x: s + 5 * r / 6, y: i + l },
1740
+ { x: s + 2 * r / 3, y: i + l }
1741
+ ], o.label.x = o.x, o.label.y = o.y;
1742
+ }
1743
+ });
1744
+ }
1745
+ function st(e, t) {
1746
+ return Ne(xe(e, t), Number);
1747
+ }
1748
+ function rt(e) {
1749
+ const t = {};
1750
+ return e && Object.entries(e).forEach(([o, n]) => {
1751
+ let s = o;
1752
+ typeof s == "string" && (s = s.toLowerCase()), t[s] = n;
1753
+ }), t;
1754
+ }
1755
+ const gr = {
1756
+ rankDirection: "TB",
1757
+ // "TB", "BT", "LR", "RL"
1758
+ nodeSeparation: 50,
1759
+ rankSeparation: 50,
1760
+ edgeSeparation: 10,
1761
+ // "UL", "UR", "DL", "DR" or undefined force one of four extreme alignment strategies (Up/Down × Left/Right).
1762
+ align: void 0,
1763
+ nodeWidth: 100,
1764
+ nodeHeight: 40,
1765
+ curvedEdges: !1,
1766
+ padding: 20,
1767
+ // "undirected" | "normal" | "vee"
1768
+ arrowShape: "normal",
1769
+ arrowSize: 10
1770
+ };
1771
+ function vr(e) {
1772
+ return e.length ? e.map(
1773
+ (t, o) => `${o === 0 ? "M" : "L"} ${t.x} ${t.y}`
1774
+ ).join(" ") : "";
1775
+ }
1776
+ function br(e) {
1777
+ if (!e.length) return "";
1778
+ if (e.length === 1) {
1779
+ const s = e[0];
1780
+ return `M ${s.x} ${s.y}`;
1781
+ }
1782
+ if (e.length === 2)
1783
+ return `M ${e[0].x} ${e[0].y} L ${e[1].x} ${e[1].y}`;
1784
+ const [t] = e;
1785
+ let o = `M ${t.x} ${t.y}`;
1786
+ for (let s = 1; s < e.length - 1; s += 1) {
1787
+ e[s - 1];
1788
+ const i = e[s], r = e[s + 1], l = i.x, a = i.y, c = (i.x + r.x) / 2, d = (i.y + r.y) / 2;
1789
+ o += ` Q ${l} ${a} ${c} ${d}`;
1790
+ }
1791
+ const n = e[e.length - 1];
1792
+ return o += ` L ${n.x} ${n.y}`, o;
1793
+ }
1794
+ function pr(e) {
1795
+ const { nodes: t, edges: o, configuration: n } = e, s = k(null), i = k(null), r = `dag-arrow-${lt()}`;
1796
+ function l(a, c, d) {
1797
+ i.value = null, s.value = null;
1798
+ const f = {
1799
+ ...gr,
1800
+ ...d
1801
+ }, g = new q({ multigraph: !0, compound: !0 });
1802
+ g.setGraph({
1803
+ rankdir: f.rankDirection,
1804
+ nodesep: f.nodeSeparation,
1805
+ ranksep: f.rankSeparation,
1806
+ edgesep: f.edgeSeparation,
1807
+ align: f.align
1808
+ }), a.forEach((u) => {
1809
+ g.setNode(u.id, {
1810
+ label: u.label,
1811
+ width: u.width ?? f.nodeWidth,
1812
+ height: u.height ?? f.nodeHeight
1813
+ });
1814
+ }), c.forEach((u) => {
1815
+ g.setEdge(u.from, u.to, {
1816
+ weight: u.weight ?? 1,
1817
+ minlen: u.minLength ?? 1,
1818
+ arrowShape: f.arrowShape ?? "normal"
1819
+ });
1820
+ }), Hs(g);
1821
+ const b = a.map((u) => {
1822
+ const G = g.node(u.id);
1823
+ return {
1824
+ id: u.id,
1825
+ label: u.label,
1826
+ x: G.x,
1827
+ y: G.y,
1828
+ width: G.width,
1829
+ height: G.height,
1830
+ original: u
1831
+ };
1832
+ }), N = g.edges().map((u) => {
1833
+ const G = g.edge(u), H = G.points || [];
1834
+ if (!H.length)
1835
+ return null;
1836
+ const Ae = f.curvedEdges ? br(H) : vr(H), Se = f.arrowShape !== "undirected" ? `url(#${r})` : null, Le = c.find((he) => he?.from === u.v && he?.to === u.w);
1837
+ return {
1838
+ id: `${u.v}->${u.w}->${lt()}`,
1839
+ from: u.v,
1840
+ to: u.w,
1841
+ points: H,
1842
+ pathData: Ae,
1843
+ markerEnd: Se,
1844
+ original: {
1845
+ ...Le,
1846
+ ...G
1847
+ }
1848
+ };
1849
+ }).filter(Boolean), x = f.padding;
1850
+ if (!b.length) {
1851
+ s.value = {
1852
+ nodes: [],
1853
+ edges: N,
1854
+ viewBox: "0 0 0 0",
1855
+ arrowShape: f.arrowShape,
1856
+ arrowSize: f.arrowSize
1857
+ };
1858
+ return;
1859
+ }
1860
+ const T = b.flatMap((u) => [
1861
+ u.x - u.width / 2,
1862
+ u.x + u.width / 2
1863
+ ]), I = b.flatMap((u) => [
1864
+ u.y - u.height / 2,
1865
+ u.y + u.height / 2
1866
+ ]), fe = Math.min(...T) - x, oe = Math.max(...T) + x, R = Math.min(...I) - x, P = Math.max(...I) + x;
1867
+ s.value = {
1868
+ nodes: b,
1869
+ edges: N.map((u) => ({
1870
+ ...u,
1871
+ midpoint: u.pathData ? sn(u.pathData) : { x: 0, y: 0 }
1872
+ })),
1873
+ viewBox: `${fe} ${R} ${oe - fe} ${P - R}`,
1874
+ arrowShape: f.arrowShape,
1875
+ arrowSize: f.arrowSize
1876
+ };
1877
+ }
1878
+ return Jo(() => {
1879
+ try {
1880
+ const a = v(t) || [], c = v(o) || [], d = v(n) || {};
1881
+ l(a, c, d);
1882
+ } catch (a) {
1883
+ console.error("[useDag] layout error:", a), i.value = a, s.value = null;
1884
+ }
1885
+ }), {
1886
+ layoutData: s,
1887
+ lastError: i,
1888
+ arrowMarkerIdentifier: r,
1889
+ recomputeLayout: () => {
1890
+ const a = v(t) || [], c = v(o) || [], d = v(n) || {};
1891
+ l(a, c, d);
1892
+ }
1893
+ };
1894
+ }
1895
+ const ko = { style: { chart: { backgroundColor: "#1A1A1A", color: "#CCCCCC", nodes: { stroke: "#6A6A6A", backgroundColor: "#2A2A2A", labels: { color: "#CCCCCC" }, tooltip: { backgroundColor: "#3A3A3A", color: "#CCCCCC" } }, edges: { stroke: "#6A6A6A" }, midpoints: { stroke: "#6A6A6A", fill: "#1A1A1A", tooltip: { backgroundColor: "#3A3A3A", color: "#CCCCCC" } }, controls: { backgroundColor: "#2A2A2A", buttonColor: "#2A2A2A", color: "#CCCCCC", border: "1px solid #4A4A4A" }, title: { color: "#CCCCCC", subtitle: { color: "#757575" } } } } }, Eo = { style: { chart: { backgroundColor: "#FFF8E1", color: "#424242", nodes: { stroke: "#5D4037", backgroundColor: "#fcf9f0", labels: { color: "#424242" }, tooltip: { backgroundColor: "#5D4037", color: "#FFF8E1" } }, edges: { stroke: "#5D4037" }, midpoints: { stroke: "#5D4037", fill: "#FFF8E1", tooltip: { backgroundColor: "#5D4037", color: "#FFF8E1" } }, controls: { backgroundColor: "#FFF8E1", buttonColor: "#FFF8E1", color: "#424242", border: "1px solid #d9bbb2" }, title: { color: "#424242", subtitle: { color: "#757575" } } } } }, Co = { style: { chart: { backgroundColor: "#1E1E1E", color: "#BDBDBD", nodes: { stroke: "#965039", backgroundColor: "#2A2A2A", labels: { color: "#BDBDBD" }, tooltip: { backgroundColor: "#3A3A3A", color: "#FFF8E1" } }, edges: { stroke: "#965039" }, midpoints: { stroke: "#965039", fill: "#1E1E1E", tooltip: { backgroundColor: "#3A3A3A", color: "#FFF8E1" } }, controls: { backgroundColor: "#1E1E1E", buttonColor: "#1E1E1E", color: "#BDBDBD", border: "1px solid #3A3A3A" }, title: { color: "#FFF8E1", subtitle: { color: "#BDBDBD" } } } } }, xo = { style: { chart: { backgroundColor: "#1A1A1A", color: "#99AA99", nodes: { stroke: "#66CC66", backgroundColor: "#2A2A2A", labels: { color: "#99AA99" }, tooltip: { backgroundColor: "#3A3A3A", color: "#99AA99" } }, edges: { stroke: "#66CC66" }, midpoints: { stroke: "#66CC66", fill: "#1A1A1A", tooltip: { backgroundColor: "#3A3A3A", color: "#99AA99" } }, controls: { backgroundColor: "#1A1A1A", buttonColor: "#1A1A1A", color: "#99AA99", border: "1px solid #1e361e" }, title: { color: "#66CC66", subtitle: { color: "#99AA99" } } } } }, _o = { style: { chart: { backgroundColor: "#fbfafa", color: "#8A9892", nodes: { stroke: "#8F837A", backgroundColor: "#ffffff", labels: { color: "#8A9892" }, tooltip: { backgroundColor: "#8F837A", color: "#fbfafa" } }, edges: { stroke: "#8F837A" }, midpoints: { stroke: "#8F837A", fill: "#fbfafa", tooltip: { backgroundColor: "#8F837A", color: "#fbfafa" } }, controls: { backgroundColor: "#fbfafa", buttonColor: "#fbfafa", color: "#99AA99", border: "1px solid #ebded3" }, title: { color: "#8A9892", subtitle: { color: "#99AA99" } } } } }, No = { style: { chart: { backgroundColor: "#f6f6fb", color: "#50606C", layout: { arrowShape: "normal", curvedEdges: !1 }, nodes: { stroke: "#50606C", backgroundColor: "#ffffff", borderRadius: 0, labels: { color: "#50606C" }, tooltip: { backgroundColor: "#50606C", color: "#f6f6fb" } }, edges: { stroke: "#50606C" }, midpoints: { stroke: "#50606C", fill: "#fbfafa", tooltip: { backgroundColor: "#50606C", color: "#f6f6fb" } }, controls: { backgroundColor: "#f6f6fb", buttonColor: "#f6f6fb", color: "#50606C", border: "1px solid #98aab8", borderRadius: "0" }, title: { color: "#50606C", subtitle: { color: "#718890" } } } } }, Ao = {
1896
+ default: {},
1897
+ dark: ko,
1898
+ celebration: Eo,
1899
+ celebrationNight: Co,
1900
+ hack: xo,
1901
+ zen: _o,
1902
+ concrete: No
1903
+ }, ci = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1904
+ __proto__: null,
1905
+ celebration: Eo,
1906
+ celebrationNight: Co,
1907
+ concrete: No,
1908
+ dark: ko,
1909
+ default: Ao,
1910
+ hack: xo,
1911
+ zen: _o
1912
+ }, Symbol.toStringTag, { value: "Module" }));
1913
+ function wr(e, t) {
1914
+ const o = Ce(e);
1915
+ return rn(o, t);
1916
+ }
1917
+ function ui(e, t) {
1918
+ const o = Ce(e);
1919
+ return ln(o, t);
1920
+ }
1921
+ function di(e, t) {
1922
+ const o = Ce(e);
1923
+ return an(o, t);
1924
+ }
1925
+ function fi({ defaultConfig: e, userConfig: t }) {
1926
+ return so({ defaultConfig: e, userConfig: t });
1927
+ }
1928
+ const yr = {
1929
+ __name: "BaseZoomControls",
1930
+ props: {
1931
+ config: {
1932
+ type: Object,
1933
+ default() {
1934
+ return {};
1935
+ }
1936
+ },
1937
+ scale: {
1938
+ type: Number,
1939
+ default: 0
1940
+ },
1941
+ withDirection: {
1942
+ type: Boolean,
1943
+ default: !1
1944
+ },
1945
+ isFullscreen: {
1946
+ type: Boolean,
1947
+ default: !1
1948
+ }
1949
+ },
1950
+ emits: ["zoomIn", "zoomOut", "resetZoom", "switchDirection"],
1951
+ setup(e, { emit: t }) {
1952
+ const o = t;
1953
+ return (n, s) => (y(), _("div", {
1954
+ class: it({ "vue-data-ui-zoom-controls": !0, "vue-data-ui-zoom-controls-fullscreen": e.isFullscreen }),
1955
+ "data-dom-to-png-ignore": "",
1956
+ style: X({
1957
+ border: e.config.style.chart.controls.border,
1958
+ backgroundColor: e.config.style.chart.controls.backgroundColor,
1959
+ padding: e.config.style.chart.controls.padding,
1960
+ borderRadius: e.config.style.chart.controls.borderRadius,
1961
+ "--vue-data-ui-zoom-control-button-color": e.config.style.chart.controls.buttonColor,
1962
+ "--vue-data-ui-zoom-control-button-color-hover": v(wr)(e.config.style.chart.controls.buttonColor, 0.2)
1963
+ })
1964
+ }, [
1965
+ j("button", {
1966
+ onClick: s[0] || (s[0] = (i) => o("zoomOut")),
1967
+ class: "vue-data-ui-zoom-controls-button",
1968
+ "data-cy-zoom-out": ""
1969
+ }, [
1970
+ ae(Qe, {
1971
+ name: "zoomMinus",
1972
+ stroke: e.config.style.chart.controls.color,
1973
+ size: e.config.style.chart.controls.fontSize * 1.2
1974
+ }, null, 8, ["stroke", "size"])
1975
+ ]),
1976
+ j("button", {
1977
+ class: "vue-data-ui-zoom-controls-button-zoom",
1978
+ onClick: s[1] || (s[1] = (i) => o("resetZoom")),
1979
+ "data-cy-zoom-reset": "",
1980
+ style: X({
1981
+ color: e.config.style.chart.controls.color,
1982
+ width: e.config.style.chart.controls.fontSize * 4 + "px",
1983
+ borderRadius: e.config.style.chart.controls.borderRadius,
1984
+ fontSize: e.config.style.chart.controls.fontSize + "px"
1985
+ })
1986
+ }, le(Math.round(e.scale * 100)) + "% ", 5),
1987
+ j("button", {
1988
+ onClick: s[2] || (s[2] = (i) => o("zoomIn")),
1989
+ class: "vue-data-ui-zoom-controls-button",
1990
+ "data-cy-zoom-in": ""
1991
+ }, [
1992
+ ae(Qe, {
1993
+ name: "zoomPlus",
1994
+ stroke: e.config.style.chart.controls.color,
1995
+ size: e.config.style.chart.controls.fontSize * 1.2
1996
+ }, null, 8, ["stroke", "size"])
1997
+ ]),
1998
+ e.withDirection ? (y(), _("button", {
1999
+ key: 0,
2000
+ onClick: s[3] || (s[3] = (i) => o("switchDirection")),
2001
+ class: "vue-data-ui-zoom-controls-button"
2002
+ }, [
2003
+ ae(Qe, {
2004
+ name: "direction",
2005
+ stroke: e.config.style.chart.controls.color,
2006
+ size: e.config.style.chart.controls.fontSize * 1.2
2007
+ }, null, 8, ["stroke", "size"])
2008
+ ])) : S("", !0)
2009
+ ], 6));
2010
+ }
2011
+ }, oo = /* @__PURE__ */ ro(yr, [["__scopeId", "data-v-e4479474"]]), kr = ["id"], Er = {
2012
+ key: 0,
2013
+ class: "dag-chart-error"
2014
+ }, Cr = ["viewBox", "xmlns"], xr = { key: 0 }, _r = ["id", "markerWidth", "markerHeight", "refX", "refY"], Nr = ["d", "fill", "stroke"], Ar = ["d", "fill", "stroke"], Sr = { class: "vue-ui-dag-edges" }, Lr = ["d", "stroke", "stroke-width"], Or = ["cx", "cy", "r", "fill", "stroke", "stroke-width", "onMouseenter"], Tr = { class: "vue-ui-dag-nodes" }, Rr = ["onClick", "onMouseenter"], Mr = ["x", "y", "width", "height", "rx", "fill", "stroke", "stroke-width"], $r = ["x", "y", "font-size", "fill", "font-weight"], Dr = ["x", "y", "font-size", "fill", "font-weight", "innerHTML"], Fr = { key: 2 }, Pr = ["x", "y", "width", "height"], zr = { class: "vue-ui-dag-edges" }, Br = ["d", "stroke-width", "marker-end"], Vr = {
2015
+ key: 6,
2016
+ class: "vue-data-ui-watermark"
2017
+ }, Ir = ["data-position"], Gr = { key: 0 }, jr = ["data-position"], Wr = { key: 0 }, no = 1.5, Yr = {
2018
+ __name: "vue-ui-dag",
2019
+ props: {
2020
+ dataset: {
2021
+ type: Object,
2022
+ default() {
2023
+ return {
2024
+ nodes: [],
2025
+ edges: []
2026
+ };
2027
+ }
2028
+ },
2029
+ config: {
2030
+ type: Object,
2031
+ default() {
2032
+ return {};
2033
+ }
2034
+ }
2035
+ },
2036
+ emits: ["onNodeClick", "onMidpointEnter", "onMidpointLeave"],
2037
+ setup(e, { expose: t, emit: o }) {
2038
+ const n = qe(() => import("./PenAndPaper-DscVdZ1u.js")), s = qe(() => import("./UserOptions-ChRXLqps.js")), i = qe(() => import("./PackageVersion-CR86X4r9.js")), { vue_ui_dag: r } = gn(), { isThemeValid: l, warnInvalidTheme: a } = yn(), c = e, d = o, f = k(null), g = k(lt()), b = k(null), N = k(null), x = k(null), T = k(0), I = k(0), fe = k(!1), oe = k(!1), R = k(null), P = k(null), u = k(We()), G = k(u.value.style.chart.width), H = k(u.value.style.chart.height), Ae = k({ x: 0, y: 0 }), z = k(null), Se = k(null), Le = k({ left: "0px", top: "0px" }), he = k("top"), K = k(!1), ft = k({ x: 0, y: 0 }), ht = k({ x: 0, y: 0 }), me = k(null), Ie = k(null), Ge = k({ left: "0px", top: "0px" }), mt = k("top"), Oe = k(!1), ge = k(!1), { svgRef: J } = En({ config: u.value.style.chart.title }), { userOptionsVisible: je, setUserOptionsVisibility: gt, keepUserOptionState: vt } = kn({ config: u.value }), Te = k(u.value.style.chart.layout.rankDirection), { loading: ve, FINAL_DATASET: bt, manualLoading: pt } = vn({
2039
+ ...Qo(c),
2040
+ FINAL_CONFIG: u,
2041
+ prepareConfig: We,
2042
+ skeletonDataset: {
2043
+ nodes: [
2044
+ { id: "A", label: "" },
2045
+ { id: "B", label: "" },
2046
+ { id: "C", label: "" }
2047
+ ],
2048
+ edges: [
2049
+ { from: "A", to: "B" },
2050
+ { from: "A", to: "C" }
2051
+ ]
2052
+ },
2053
+ skeletonConfig: so({
2054
+ defaultConfig: u.value,
2055
+ userConfig: {
2056
+ userOptions: { show: !1 },
2057
+ style: {
2058
+ chart: {
2059
+ backgroundColor: "#99999930",
2060
+ nodes: {
2061
+ stroke: "#CCCCCC",
2062
+ backgroundColor: "#DDDDDD50"
2063
+ },
2064
+ edges: {
2065
+ stroke: "#CCCCCC"
2066
+ },
2067
+ midpoints: {
2068
+ stroke: "#CCCCCC",
2069
+ fill: "#CCCCCC"
2070
+ }
2071
+ }
2072
+ }
2073
+ }
2074
+ })
2075
+ });
2076
+ function We() {
2077
+ const m = Je({
2078
+ userConfig: c.config,
2079
+ defaultConfig: r
2080
+ }), p = m.theme;
2081
+ if (!p) return m;
2082
+ if (!l.value(m))
2083
+ return a(m), m;
2084
+ const h = Je({
2085
+ userConfig: Ao[p] || c.config,
2086
+ defaultConfig: m
2087
+ });
2088
+ return Je({
2089
+ userConfig: c.config,
2090
+ defaultConfig: h
2091
+ });
2092
+ }
2093
+ const wt = Y(() => !!u.value.debug);
2094
+ Vt(async () => {
2095
+ cn(c.dataset) && (jt({
2096
+ componentName: "VueUiDag",
2097
+ type: "dataset",
2098
+ debug: wt.value
2099
+ }), oe.value = !1, pt.value = !0), c.dataset.nodes || (jt({
2100
+ componentName: "VueUiDag",
2101
+ type: "datasetAttributeEmpty",
2102
+ property: "nodes",
2103
+ index: 0,
2104
+ debug: wt.value
2105
+ }), oe.value = !1, pt.value = !0), oe.value = !0, await De(), zt();
2106
+ }), Fe(() => c.config, async (m) => {
2107
+ ve.value || (u.value = We()), je.value = !u.value.userOptions.showOnChartHover, T.value += 1, Te.value = u.value.style.chart.layout.rankDirection, G.value = u.value.style.chart.width, H.value = u.value.style.chart.height, ne.value = u.value.style.chart.zoom.active, await De(), zt();
2108
+ }, { deep: !0 });
2109
+ const { isPrinting: yt, isImaging: kt, generatePdf: Et, generateImage: Ct } = pn({
2110
+ elementId: `dag_${g.value}`,
2111
+ fileName: u.value.style.chart.title.text || "vue-ui-dag",
2112
+ options: u.value.userOptions.print
2113
+ }), So = Y(() => u.value.style.chart.backgroundColor), Lo = Y(() => u.value.style.chart.title), { exportSvg: Oo, getSvg: To } = wn({
2114
+ svg: J,
2115
+ title: Lo,
2116
+ legend: void 0,
2117
+ legendItems: void 0,
2118
+ backgroundColor: So
2119
+ });
2120
+ async function xt({ isCb: m }) {
2121
+ if (m) {
2122
+ const { blob: p, url: h, text: w, dataUrl: O } = await To();
2123
+ u.value.userOptions.callbacks.svg({ blob: p, url: h, text: w, dataUrl: O });
2124
+ } else
2125
+ Oo();
2126
+ }
2127
+ function Ro() {
2128
+ fe.value = !0, gt(!0);
2129
+ }
2130
+ function Mo() {
2131
+ gt(!1), fe.value = !1;
2132
+ }
2133
+ function _t({
2134
+ tooltipRef: m,
2135
+ isVisibleRef: p,
2136
+ anchorRef: h,
2137
+ styleRef: w,
2138
+ placementRef: O,
2139
+ offsetRef: $,
2140
+ margin: C = 24
2141
+ }) {
2142
+ return function() {
2143
+ const ee = m.value;
2144
+ if (!ee || !p.value) return;
2145
+ const L = ee.getBoundingClientRect(), D = window.innerWidth, pe = window.innerHeight, we = h.value.x, Me = h.value.y, $e = $?.value?.x ?? 0, Bt = $?.value?.y ?? 0;
2146
+ let F = Me - Bt - L.height - C, Z = we - L.width / 2, ye = "top";
2147
+ if (F < C) {
2148
+ const re = Me + Bt + C;
2149
+ re + L.height <= pe - C ? (F = re, ye = "bottom") : (F = Me - L.height / 2, F < C && (F = C), F + L.height > pe - C && (F = pe - L.height - C), ye = "center");
2150
+ }
2151
+ Z < C && (Z = C), Z + L.width > D - C && (Z = D - L.width - C);
2152
+ const Xo = Z <= C, qo = Z + L.width >= D - C;
2153
+ if ((Xo || qo) && ye !== "center") {
2154
+ let re, ke;
2155
+ const Ko = we - $e - C;
2156
+ D - (we + $e) - C >= Ko ? (re = "right", ke = we + $e + C) : (re = "left", ke = we - $e - C - L.width), ke >= C && ke + L.width <= D - C && (Z = ke, F = Me - L.height / 2, F < C && (F = C), F + L.height > pe - C && (F = pe - L.height - C), ye = re);
2157
+ }
2158
+ O.value = ye, w.value = {
2159
+ left: `${Z}px`,
2160
+ top: `${F}px`
2161
+ };
2162
+ };
2163
+ }
2164
+ const $o = Y(() => bt.value.nodes.map((m) => ({
2165
+ ...m,
2166
+ backgroundColor: m.backgroundColor ? Ce(m.backgroundColor) : u.value.style.chart.nodes.backgroundColor,
2167
+ color: m.color ? Ce(m.color) : u.value.style.chart.nodes.labels.color
2168
+ }))), Do = Y(() => bt.value.edges), Fo = Y(() => ({
2169
+ ...u.value.style.chart.layout,
2170
+ rankDirection: Te.value
2171
+ })), { layoutData: E, lastError: Nt, arrowMarkerIdentifier: Po } = pr({
2172
+ nodes: $o,
2173
+ edges: Do,
2174
+ configuration: Fo
2175
+ });
2176
+ function At(m) {
2177
+ return E.value ? E.value.nodes.find((p) => p.id === m) : null;
2178
+ }
2179
+ const zo = Y(() => {
2180
+ if (!E.value) return [];
2181
+ const m = u.value.style.chart.edges.stroke, p = /* @__PURE__ */ new Set();
2182
+ return E.value.edges.forEach((h) => {
2183
+ p.add(h.original?.color || m);
2184
+ }), Array.from(p);
2185
+ });
2186
+ function St(m) {
2187
+ return `${Po}-${String(m).replace(/[^a-zA-Z0-9_-]/g, "_")}`;
2188
+ }
2189
+ const Lt = Y(() => {
2190
+ const m = G.value, p = H.value, h = Number(m), w = Number(p), O = Number.isFinite(h) && h > 0, $ = Number.isFinite(w) && w > 0;
2191
+ return !O && !$ ? null : {
2192
+ width: O ? h : null,
2193
+ height: $ ? w : null
2194
+ };
2195
+ }), be = k(null), ne = k(u.value.style.chart.zoom.active), {
2196
+ viewBox: Ot,
2197
+ resetZoom: Re,
2198
+ setInitialViewBox: Bo,
2199
+ scale: Tt,
2200
+ zoomByFactor: Rt
2201
+ } = mn(
2202
+ J,
2203
+ { x: 0, y: 0, width: 100, height: 100 },
2204
+ 1,
2205
+ ne,
2206
+ () => {
2207
+ K.value = !1;
2208
+ }
2209
+ );
2210
+ function Vo() {
2211
+ ne.value = !ne.value;
2212
+ }
2213
+ function Mt() {
2214
+ const m = E.value && E.value.viewBox;
2215
+ if (!m) return;
2216
+ const p = String(m).split(" ").map(Number);
2217
+ if (p.length !== 4) return;
2218
+ const [h, w, O, $] = p;
2219
+ if (!Number.isFinite(h) || !Number.isFinite(w) || !Number.isFinite(O) || !Number.isFinite($))
2220
+ return;
2221
+ let C = O, se = $, ee = h, L = w;
2222
+ const D = Lt.value;
2223
+ D && (D.width !== null && (C = D.width), D.height !== null && (se = D.height), ee = h - (C - O) / 2, L = w - (se - $) / 2), Bo(
2224
+ { x: ee, y: L, width: C, height: se },
2225
+ { overwriteCurrentIfNotZoomed: !0 }
2226
+ );
2227
+ }
2228
+ Fe(
2229
+ () => E.value && E.value.viewBox,
2230
+ () => {
2231
+ Mt();
2232
+ },
2233
+ { immediate: !0 }
2234
+ ), Fe(
2235
+ () => Lt.value,
2236
+ () => {
2237
+ Mt();
2238
+ }
2239
+ ), Fe(() => ge.value, (m) => {
2240
+ ne.value = !m;
2241
+ });
2242
+ const Io = Y(() => {
2243
+ const m = Ot.value;
2244
+ return m ? `${m.x} ${m.y} ${m.width} ${m.height}` : "0 0 0 0";
2245
+ }), Q = k(!1);
2246
+ function $t(m) {
2247
+ Q.value = m, I.value += 1;
2248
+ }
2249
+ function Ye() {
2250
+ ge.value = !ge.value;
2251
+ }
2252
+ function He() {
2253
+ Rt(no, !0);
2254
+ }
2255
+ function Ze() {
2256
+ Rt(1 / no, !0);
2257
+ }
2258
+ const Ue = ["TB", "RL", "BT", "LR"];
2259
+ function Xe() {
2260
+ Te.value = Ue[(Ue.indexOf(Te.value) + 1) % Ue.length], Re();
2261
+ }
2262
+ const Go = _t({
2263
+ tooltipRef: Se,
2264
+ isVisibleRef: Oe,
2265
+ anchorRef: Ae,
2266
+ styleRef: Le,
2267
+ placementRef: he
2268
+ }), jo = _t({
2269
+ tooltipRef: Ie,
2270
+ isVisibleRef: K,
2271
+ anchorRef: ft,
2272
+ styleRef: Ge,
2273
+ placementRef: mt,
2274
+ offsetRef: ht
2275
+ });
2276
+ async function Wo(m) {
2277
+ d("onMidpointEnter", m);
2278
+ const p = J.value;
2279
+ if (!p || !m?.midpoint) return;
2280
+ const h = p.createSVGPoint();
2281
+ h.x = m.midpoint.x, h.y = m.midpoint.y;
2282
+ const w = p.getScreenCTM();
2283
+ if (!w) return;
2284
+ const O = h.matrixTransform(w);
2285
+ Ae.value = {
2286
+ x: O.x,
2287
+ y: O.y
2288
+ }, z.value = m, Oe.value = !0, await De(), Go();
2289
+ }
2290
+ function Yo() {
2291
+ Oe.value = !1, z.value = null, d("onMidpointLeave");
2292
+ }
2293
+ async function Ho(m) {
2294
+ if (d("onNodeClick", m), !u.value.style.chart.nodes.tooltip.showOnClick) return;
2295
+ const p = J.value;
2296
+ if (!p) return;
2297
+ const h = p.createSVGPoint();
2298
+ h.x = m.x, h.y = m.y;
2299
+ const w = p.getScreenCTM();
2300
+ if (!w) return;
2301
+ const O = h.matrixTransform(w), $ = u.value.style.chart.layout.nodeWidth, C = u.value.style.chart.layout.nodeHeight, se = w.a, ee = w.d, L = $ * se, D = C * ee;
2302
+ ht.value = {
2303
+ x: L / 2,
2304
+ y: D / 2
2305
+ }, ft.value = {
2306
+ x: O.x,
2307
+ y: O.y
2308
+ }, me.value = m, K.value = !0, await De(), jo();
2309
+ }
2310
+ function Dt() {
2311
+ K.value = !1, me.value = null;
2312
+ }
2313
+ function Ft(m) {
2314
+ if (!K.value) return;
2315
+ const p = Ie.value;
2316
+ if (p && p.contains(m.target))
2317
+ return;
2318
+ const h = J.value;
2319
+ h && h.contains(m.target) && m.target.closest(".vue-ui-dag-node") || Dt();
2320
+ }
2321
+ function Pt(m) {
2322
+ m.key === "Escape" && K.value && Dt();
2323
+ }
2324
+ Vt(() => {
2325
+ document.addEventListener("mousedown", Ft), document.addEventListener("keydown", Pt);
2326
+ }), en(() => {
2327
+ document.removeEventListener("mousedown", Ft), document.removeEventListener("keydown", Pt), R.value && (P.value && R.value.unobserve(P.value), R.value.disconnect());
2328
+ });
2329
+ function zt() {
2330
+ if (!u.value.responsive) {
2331
+ R.value && (P.value && R.value.unobserve(P.value), R.value.disconnect(), R.value = null, P.value = null);
2332
+ return;
2333
+ }
2334
+ const m = fn(() => {
2335
+ if (!f.value) return;
2336
+ const { width: p, height: h } = hn({
2337
+ chart: f.value,
2338
+ title: u.value.style.chart.title.text ? b.value : null,
2339
+ legend: u.value.style.chart.controls.show ? x.value?.$el : null,
2340
+ source: N.value
2341
+ });
2342
+ requestAnimationFrame(() => {
2343
+ G.value = Math.max(0.1, p), H.value = Math.max(0.1, h - 12);
2344
+ });
2345
+ });
2346
+ R.value && (P.value && R.value.unobserve(P.value), R.value.disconnect()), R.value = new ResizeObserver(m), P.value = f.value ? f.value.parentNode : null, P.value && R.value.observe(P.value), m();
2347
+ }
2348
+ async function Zo({ scale: m = 2 } = {}) {
2349
+ if (!f.value) return;
2350
+ const { width: p, height: h } = f.value.getBoundingClientRect(), w = p / h, { imageUri: O, base64: $ } = await xn({ domElement: f.value, base64: !0, img: !0, scale: m });
2351
+ return {
2352
+ imageUri: O,
2353
+ base64: $,
2354
+ title: u.value.style.chart.title.text ?? "vue-ui-dag",
2355
+ width: p,
2356
+ height: h,
2357
+ aspectRatio: w
2358
+ };
2359
+ }
2360
+ function Uo() {
2361
+ return E.value;
2362
+ }
2363
+ return t({
2364
+ getData: Uo,
2365
+ getImage: Zo,
2366
+ generatePdf: Et,
2367
+ generateSvg: xt,
2368
+ generateImage: Ct,
2369
+ toggleAnnotator: Ye,
2370
+ toggleFullscreen: $t,
2371
+ zoomIn: He,
2372
+ zoomOut: Ze,
2373
+ resetZoom: Re,
2374
+ switchDirection: Xe
2375
+ }), (m, p) => (y(), _("div", {
2376
+ class: it(`vue-data-ui-component vue-ui-dag ${Q.value ? "vue-data-ui-wrapper-fullscreen" : ""} ${u.value.responsive ? "vue-ui-dag-responsive" : ""}`),
2377
+ id: `dag_${g.value}`,
2378
+ ref_key: "dagChart",
2379
+ ref: f,
2380
+ style: X({
2381
+ fontFamily: u.value.style.fontFamily,
2382
+ backgroundColor: u.value.style.chart.backgroundColor,
2383
+ padding: "0.5rem"
2384
+ }),
2385
+ onMouseenter: Ro,
2386
+ onMouseleave: Mo
2387
+ }, [
2388
+ v(Nt) ? (y(), _("div", Er, le(String(v(Nt))), 1)) : S("", !0),
2389
+ u.value.userOptions.buttons.annotator ? (y(), U(v(n), {
2390
+ key: 1,
2391
+ svgRef: v(J),
2392
+ backgroundColor: u.value.style.chart.backgroundColor,
2393
+ color: u.value.style.chart.color,
2394
+ active: ge.value,
2395
+ onClose: Ye
2396
+ }, {
2397
+ "annotator-action-close": M(() => [
2398
+ A(m.$slots, "annotator-action-close", {}, void 0, !0)
2399
+ ]),
2400
+ "annotator-action-color": M(({ color: h }) => [
2401
+ A(m.$slots, "annotator-action-color", B(V({ color: h })), void 0, !0)
2402
+ ]),
2403
+ "annotator-action-draw": M(({ mode: h }) => [
2404
+ A(m.$slots, "annotator-action-draw", B(V({ mode: h })), void 0, !0)
2405
+ ]),
2406
+ "annotator-action-undo": M(({ disabled: h }) => [
2407
+ A(m.$slots, "annotator-action-undo", B(V({ disabled: h })), void 0, !0)
2408
+ ]),
2409
+ "annotator-action-redo": M(({ disabled: h }) => [
2410
+ A(m.$slots, "annotator-action-redo", B(V({ disabled: h })), void 0, !0)
2411
+ ]),
2412
+ "annotator-action-delete": M(({ disabled: h }) => [
2413
+ A(m.$slots, "annotator-action-delete", B(V({ disabled: h })), void 0, !0)
2414
+ ]),
2415
+ _: 3
2416
+ }, 8, ["svgRef", "backgroundColor", "color", "active"])) : S("", !0),
2417
+ u.value.userOptions.show && oe.value && (v(vt) || v(je)) ? (y(), U(v(s), {
2418
+ ref: "userOptionsRef",
2419
+ key: `user_option_${I.value}`,
2420
+ backgroundColor: u.value.style.chart.backgroundColor,
2421
+ color: u.value.style.chart.color,
2422
+ isPrinting: v(yt),
2423
+ isImaging: v(kt),
2424
+ uid: g.value,
2425
+ hasTooltip: !1,
2426
+ hasTable: !1,
2427
+ hasXls: !1,
2428
+ hasLabel: !1,
2429
+ hasPdf: u.value.userOptions.buttons.pdf,
2430
+ hasImg: u.value.userOptions.buttons.img,
2431
+ hasSvg: u.value.userOptions.buttons.svg,
2432
+ hasFullscreen: u.value.userOptions.buttons.fullscreen,
2433
+ isFullscreen: Q.value,
2434
+ chartElement: f.value,
2435
+ position: u.value.userOptions.position,
2436
+ titles: { ...u.value.userOptions.buttonTitles },
2437
+ hasAnnotator: u.value.userOptions.buttons.annotator,
2438
+ isAnnotation: ge.value,
2439
+ callbacks: u.value.userOptions.callbacks,
2440
+ printScale: u.value.userOptions.print.scale,
2441
+ hasZoom: u.value.userOptions.buttons.zoom,
2442
+ isZoom: ne.value,
2443
+ onToggleFullscreen: $t,
2444
+ onGeneratePdf: v(Et),
2445
+ onGenerateImage: v(Ct),
2446
+ onGenerateSvg: xt,
2447
+ onToggleAnnotator: Ye,
2448
+ onToggleZoom: Vo,
2449
+ style: X({
2450
+ visibility: v(vt) ? v(je) ? "visible" : "hidden" : "visible"
2451
+ })
2452
+ }, tn({ _: 2 }, [
2453
+ m.$slots.menuIcon ? {
2454
+ name: "menuIcon",
2455
+ fn: M(({ isOpen: h, color: w }) => [
2456
+ A(m.$slots, "menuIcon", B(V({ isOpen: h, color: w })), void 0, !0)
2457
+ ]),
2458
+ key: "0"
2459
+ } : void 0,
2460
+ m.$slots.optionPdf ? {
2461
+ name: "optionPdf",
2462
+ fn: M(() => [
2463
+ A(m.$slots, "optionPdf", {}, void 0, !0)
2464
+ ]),
2465
+ key: "1"
2466
+ } : void 0,
2467
+ m.$slots.optionImg ? {
2468
+ name: "optionImg",
2469
+ fn: M(() => [
2470
+ A(m.$slots, "optionImg", {}, void 0, !0)
2471
+ ]),
2472
+ key: "2"
2473
+ } : void 0,
2474
+ m.$slots.optionSvg ? {
2475
+ name: "optionSvg",
2476
+ fn: M(() => [
2477
+ A(m.$slots, "optionSvg", {}, void 0, !0)
2478
+ ]),
2479
+ key: "3"
2480
+ } : void 0,
2481
+ m.$slots.optionFullscreen ? {
2482
+ name: "optionFullscreen",
2483
+ fn: M(({ toggleFullscreen: h, isFullscreen: w }) => [
2484
+ A(m.$slots, "optionFullscreen", B(V({ toggleFullscreen: h, isFullscreen: w })), void 0, !0)
2485
+ ]),
2486
+ key: "4"
2487
+ } : void 0,
2488
+ m.$slots.optionAnnotator ? {
2489
+ name: "optionAnnotator",
2490
+ fn: M(({ toggleAnnotator: h, isAnnotator: w }) => [
2491
+ A(m.$slots, "optionAnnotator", B(V({ toggleAnnotator: h, isAnnotator: w })), void 0, !0)
2492
+ ]),
2493
+ key: "5"
2494
+ } : void 0,
2495
+ m.$slots.optionZoom ? {
2496
+ name: "optionZoom",
2497
+ fn: M(({ toggleZoom: h, isZoomLocked: w }) => [
2498
+ A(m.$slots, "optionZoom", B(V({ toggleZoom: h, isZoomLocked: w })), void 0, !0)
2499
+ ]),
2500
+ key: "6"
2501
+ } : void 0
2502
+ ]), 1032, ["backgroundColor", "color", "isPrinting", "isImaging", "uid", "hasPdf", "hasImg", "hasSvg", "hasFullscreen", "isFullscreen", "chartElement", "position", "titles", "hasAnnotator", "isAnnotation", "callbacks", "printScale", "hasZoom", "isZoom", "onGeneratePdf", "onGenerateImage", "style"])) : S("", !0),
2503
+ u.value.style.chart.title.text ? (y(), _("div", {
2504
+ key: 3,
2505
+ ref_key: "chartTitle",
2506
+ ref: b,
2507
+ style: "width:100%;background:transparent;"
2508
+ }, [
2509
+ (y(), U(Cn, {
2510
+ key: `title_${T.value}`,
2511
+ config: {
2512
+ title: {
2513
+ cy: "dag-title",
2514
+ ...u.value.style.chart.title
2515
+ },
2516
+ subtitle: {
2517
+ cy: "dag-subtitle",
2518
+ ...u.value.style.chart.title.subtitle
2519
+ }
2520
+ }
2521
+ }, null, 8, ["config"]))
2522
+ ], 512)) : S("", !0),
2523
+ u.value.style.chart.controls.position === "top" && !v(ve) && u.value.style.chart.controls.show ? (y(), U(oo, {
2524
+ key: 4,
2525
+ ref_key: "zoomControls",
2526
+ ref: x,
2527
+ config: u.value,
2528
+ scale: v(Tt),
2529
+ isFullscreen: Q.value,
2530
+ withDirection: "",
2531
+ onZoomIn: He,
2532
+ onZoomOut: Ze,
2533
+ onResetZoom: p[0] || (p[0] = () => v(Re)(!0)),
2534
+ onSwitchDirection: Xe
2535
+ }, null, 8, ["config", "scale", "isFullscreen"])) : S("", !0),
2536
+ v(E) ? (y(), _("svg", {
2537
+ key: 5,
2538
+ ref_key: "svgRef",
2539
+ ref: J,
2540
+ class: it({ "vue-ui-dag-svg": !0, "vue-data-ui-loading": v(ve) }),
2541
+ viewBox: Io.value,
2542
+ xmlns: v(un),
2543
+ style: X({
2544
+ backgroundColor: u.value.style.chart.backgroundColor,
2545
+ height: "100%",
2546
+ width: "100%"
2547
+ })
2548
+ }, [
2549
+ ae(v(i)),
2550
+ v(E).arrowShape !== "undirected" ? (y(), _("defs", xr, [
2551
+ (y(!0), _(ie, null, Pe(zo.value, (h) => (y(), _("marker", {
2552
+ key: h,
2553
+ id: St(h),
2554
+ markerWidth: v(E).arrowSize,
2555
+ markerHeight: v(E).arrowSize,
2556
+ refX: v(E).arrowSize - 3,
2557
+ refY: v(E).arrowSize / 2,
2558
+ orient: "auto",
2559
+ markerUnits: "strokeWidth"
2560
+ }, [
2561
+ v(E).arrowShape === "normal" ? (y(), _("path", {
2562
+ key: 0,
2563
+ d: `M 0 0 L ${v(E).arrowSize} ${v(E).arrowSize / 2} L 0 ${v(E).arrowSize} Z`,
2564
+ fill: h,
2565
+ stroke: h,
2566
+ "stroke-width": "0"
2567
+ }, null, 8, Nr)) : (y(), _("path", {
2568
+ key: 1,
2569
+ d: `M 0 0 L ${v(E).arrowSize} ${v(E).arrowSize / 2} L 0 ${v(E).arrowSize} L ${v(E).arrowSize / 3} ${v(E).arrowSize / 2} Z`,
2570
+ fill: h,
2571
+ stroke: h,
2572
+ "stroke-width": "0"
2573
+ }, null, 8, Ar))
2574
+ ], 8, _r))), 128))
2575
+ ])) : S("", !0),
2576
+ j("g", Sr, [
2577
+ (y(!0), _(ie, null, Pe(v(E).edges, (h) => (y(), _(ie, {
2578
+ key: h.id
2579
+ }, [
2580
+ j("path", {
2581
+ "data-cy-edge": "",
2582
+ d: h.pathData,
2583
+ fill: "none",
2584
+ stroke: h.original.color ?? u.value.style.chart.edges.stroke,
2585
+ "stroke-width": u.value.style.chart.edges.strokeWidth * (h.from === be.value || h.id === z.value?.id ? 2 : 1),
2586
+ "stroke-linecap": "round",
2587
+ "stroke-linejoin": "round",
2588
+ style: { "pointer-events": "none", transition: "stroke-width 0.2s ease-in-out" }
2589
+ }, null, 8, Lr),
2590
+ u.value.style.chart.midpoints.show ? (y(), _("circle", {
2591
+ key: 0,
2592
+ "data-cy-midpoint": "",
2593
+ class: "vue-ui-dag-edge-midpoint",
2594
+ cx: h.midpoint.x,
2595
+ cy: h.midpoint.y,
2596
+ r: u.value.style.chart.midpoints.radius,
2597
+ fill: u.value.style.chart.midpoints.fill,
2598
+ stroke: h.original.color ?? u.value.style.chart.midpoints.stroke,
2599
+ "stroke-width": u.value.style.chart.midpoints.strokeWidth * (h.from === be.value || h.id === z.value?.id ? 2 : 1),
2600
+ style: { transition: "stroke-width 0.2s ease-in-out" },
2601
+ onMouseenter: (w) => Wo(h),
2602
+ onMouseleave: Yo
2603
+ }, null, 40, Or)) : S("", !0)
2604
+ ], 64))), 128))
2605
+ ]),
2606
+ j("g", Tr, [
2607
+ (y(!0), _(ie, null, Pe(v(E).nodes, (h) => (y(), _("g", {
2608
+ key: h.id,
2609
+ class: "vue-ui-dag-node",
2610
+ onClick: on((w) => u.value.style.chart.nodes.tooltip.showOnClick && Ho(h), ["stop"]),
2611
+ onMouseenter: (w) => be.value = h.id,
2612
+ onMouseleave: p[1] || (p[1] = (w) => be.value = null)
2613
+ }, [
2614
+ m.$slots.node ? S("", !0) : (y(), _(ie, { key: 0 }, [
2615
+ j("rect", {
2616
+ "data-cy-node": "",
2617
+ x: h.x - h.width / 2,
2618
+ y: h.y - h.height / 2,
2619
+ width: h.width,
2620
+ height: h.height,
2621
+ rx: u.value.style.chart.nodes.borderRadius,
2622
+ fill: h.original.backgroundColor,
2623
+ stroke: u.value.style.chart.nodes.stroke,
2624
+ "stroke-width": u.value.style.chart.nodes.strokeWidth,
2625
+ style: X({
2626
+ cursor: u.value.style.chart.nodes.tooltip.showOnClick ? "pointer" : "default"
2627
+ })
2628
+ }, null, 12, Mr),
2629
+ m.$slots["node-label"] ? (y(), _("text", {
2630
+ key: 0,
2631
+ x: h.x,
2632
+ y: h.y + u.value.style.chart.nodes.labels.fontSize / 3,
2633
+ "text-anchor": "middle",
2634
+ "font-size": u.value.style.chart.nodes.labels.fontSize,
2635
+ fill: h.original.color,
2636
+ "font-weight": u.value.style.chart.nodes.labels.bold ? "bold" : "normal"
2637
+ }, [
2638
+ A(m.$slots, "node-label", Ke({ ref_for: !0 }, { node: h }), () => [
2639
+ nn(le(h.label), 1)
2640
+ ], !0)
2641
+ ], 8, $r)) : m.$slots["free-node-label"] ? S("", !0) : (y(), _("text", {
2642
+ key: 1,
2643
+ "data-cy-node-label": "",
2644
+ x: h.x,
2645
+ y: h.y + u.value.style.chart.nodes.labels.fontSize / 3,
2646
+ "text-anchor": "middle",
2647
+ "font-size": u.value.style.chart.nodes.labels.fontSize,
2648
+ fill: h.original.color,
2649
+ "font-weight": u.value.style.chart.nodes.labels.bold ? "bold" : "normal",
2650
+ innerHTML: v(dn)({
2651
+ content: h.label,
2652
+ fontSize: u.value.style.chart.nodes.labels.fontSize,
2653
+ fontWeight: u.value.style.chart.nodes.labels.bold ? "bold" : "normal",
2654
+ fill: h.original.color,
2655
+ x: h.x,
2656
+ y: h.y,
2657
+ autoOffset: !0
2658
+ })
2659
+ }, null, 8, Dr)),
2660
+ m.$slots["free-node-label"] ? (y(), _("g", Fr, [
2661
+ A(m.$slots, "free-node-label", Ke({ ref_for: !0 }, { node: h, layoutData: v(E) }), void 0, !0)
2662
+ ])) : S("", !0)
2663
+ ], 64)),
2664
+ m.$slots.node ? (y(), _("foreignObject", {
2665
+ key: 1,
2666
+ x: h.x - h.width / 2,
2667
+ y: h.y - h.height / 2,
2668
+ width: h.width,
2669
+ height: h.height
2670
+ }, [
2671
+ A(m.$slots, "node", Ke({ ref_for: !0 }, { node: h }), void 0, !0)
2672
+ ], 8, Pr)) : S("", !0)
2673
+ ], 40, Rr))), 128))
2674
+ ]),
2675
+ j("g", zr, [
2676
+ (y(!0), _(ie, null, Pe(v(E).edges, (h) => (y(), _("path", {
2677
+ key: h.id,
2678
+ d: h.pathData,
2679
+ fill: "none",
2680
+ stroke: "transparent",
2681
+ "stroke-width": u.value.style.chart.edges.strokeWidth * (h.from === be.value || h.id === z.value?.id ? 1.3 : 1),
2682
+ "stroke-linecap": "round",
2683
+ "stroke-linejoin": "round",
2684
+ "marker-end": v(E).arrowShape === "undirected" ? null : `url(#${St(h.original?.color || u.value.style.chart.edges.stroke)})`,
2685
+ style: { "pointer-events": "none", transition: "stroke-width 0.2s ease-in-out" }
2686
+ }, null, 8, Br))), 128))
2687
+ ]),
2688
+ A(m.$slots, "svg", {
2689
+ svg: {
2690
+ drawingArea: v(Ot),
2691
+ data: v(E)
2692
+ }
2693
+ }, void 0, !0)
2694
+ ], 14, Cr)) : S("", !0),
2695
+ m.$slots.watermark ? (y(), _("div", Vr, [
2696
+ A(m.$slots, "watermark", B(V({ isPrinting: v(yt) || v(kt) })), void 0, !0)
2697
+ ])) : S("", !0),
2698
+ ae(It, { name: "fade" }, {
2699
+ default: M(() => [
2700
+ Oe.value ? (y(), U(Gt, {
2701
+ key: 0,
2702
+ to: Q.value ? f.value : "body"
2703
+ }, [
2704
+ j("div", {
2705
+ "data-cy-tooltip-midpoint": "",
2706
+ ref_key: "tooltipRef",
2707
+ ref: Se,
2708
+ class: "vue-ui-dag-tooltip",
2709
+ style: X({
2710
+ ...Le.value,
2711
+ maxWidth: u.value.style.chart.midpoints.tooltip.maxWidth,
2712
+ "--vue-data-ui-dag-tooltip-background": u.value.style.chart.midpoints.tooltip.backgroundColor,
2713
+ "--vue-data-ui-dag-tooltip-color": u.value.style.chart.midpoints.tooltip.color
2714
+ }),
2715
+ "data-position": he.value
2716
+ }, [
2717
+ A(m.$slots, "tooltip-midpoint", B(V({ edge: z.value, layoutData: v(E) })), () => [
2718
+ z.value ? (y(), _("div", Gr, le(At(z.value.from)?.label ?? z.value.from) + " → " + le(At(z.value.to)?.label ?? z.value.to), 1)) : S("", !0)
2719
+ ], !0)
2720
+ ], 12, Ir)
2721
+ ], 8, ["to"])) : S("", !0)
2722
+ ]),
2723
+ _: 3
2724
+ }),
2725
+ ae(It, { name: "fade" }, {
2726
+ default: M(() => [
2727
+ K.value ? (y(), U(Gt, {
2728
+ key: 0,
2729
+ to: Q.value ? f.value : "body"
2730
+ }, [
2731
+ j("div", {
2732
+ "data-cy-tooltip-node": "",
2733
+ ref_key: "nodeTooltipRef",
2734
+ ref: Ie,
2735
+ class: "vue-ui-dag-node-tooltip",
2736
+ style: X({
2737
+ maxWidth: u.value.style.chart.nodes.tooltip.maxWidth,
2738
+ left: Ge.value.left,
2739
+ top: Ge.value.top,
2740
+ "--vue-data-ui-dag-node-tooltip-background": u.value.style.chart.nodes.tooltip.backgroundColor,
2741
+ "--vue-data-ui-dag-node-tooltip-color": u.value.style.chart.nodes.tooltip.color
2742
+ }),
2743
+ "data-position": mt.value
2744
+ }, [
2745
+ A(m.$slots, "tooltip-node", B(V({ node: me.value, layoutData: v(E) })), () => [
2746
+ me.value ? (y(), _("div", Wr, le(me.value.label), 1)) : S("", !0)
2747
+ ], !0)
2748
+ ], 12, jr)
2749
+ ], 8, ["to"])) : S("", !0)
2750
+ ]),
2751
+ _: 3
2752
+ }),
2753
+ u.value.style.chart.controls.position === "bottom" && !v(ve) && u.value.style.chart.controls.show ? (y(), U(oo, {
2754
+ key: 7,
2755
+ ref_key: "zoomControls",
2756
+ ref: x,
2757
+ config: u.value,
2758
+ scale: v(Tt),
2759
+ isFullscreen: Q.value,
2760
+ withDirection: "",
2761
+ onZoomIn: He,
2762
+ onZoomOut: Ze,
2763
+ onResetZoom: p[2] || (p[2] = () => v(Re)(!0)),
2764
+ onSwitchDirection: Xe
2765
+ }, null, 8, ["config", "scale", "isFullscreen"])) : S("", !0),
2766
+ m.$slots.source ? (y(), _("div", {
2767
+ key: 8,
2768
+ ref_key: "source",
2769
+ ref: N,
2770
+ dir: "auto"
2771
+ }, [
2772
+ A(m.$slots, "source", {}, void 0, !0)
2773
+ ], 512)) : S("", !0),
2774
+ v(ve) ? (y(), U(bn, { key: 9 })) : S("", !0)
2775
+ ], 46, kr));
2776
+ }
2777
+ }, Hr = /* @__PURE__ */ ro(Yr, [["__scopeId", "data-v-2483d90c"]]), hi = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2778
+ __proto__: null,
2779
+ default: Hr
2780
+ }, Symbol.toStringTag, { value: "Module" }));
2781
+ export {
2782
+ ci as a,
2783
+ hi as b,
2784
+ ui as d,
2785
+ wr as l,
2786
+ fi as m,
2787
+ di as s,
2788
+ Hr as v
2789
+ };