@p10node/plantuml 0.0.0-stage → 0.11.1

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.
package/dist/index.js ADDED
@@ -0,0 +1,3361 @@
1
+ function e(e, t, n, r) {
2
+ let i = e.length, a = n.length, o = Array.from({ length: i }, () => []), s = Array(i).fill(!0);
3
+ t.forEach((e, t) => {
4
+ e.v !== e.w && (o[e.v].push(t), s[e.w] = !1);
5
+ });
6
+ let c = Array(t.length).fill(!1), l = new Uint8Array(i), u = [...Array.from({ length: i }, (e, t) => t).filter((e) => s[e]), ...Array.from({ length: i }, (e, t) => t)];
7
+ for (let e of u) {
8
+ if (l[e]) continue;
9
+ l[e] = 1;
10
+ let n = [[e, 0]];
11
+ for (; n.length;) {
12
+ let e = n[n.length - 1], r = e[0];
13
+ if (e[1] < o[r].length) {
14
+ let i = o[r][e[1]++], a = t[i].w;
15
+ l[a] === 1 ? c[i] = !0 : l[a] || (l[a] = 1, n.push([a, 0]));
16
+ } else l[r] = 2, n.pop();
17
+ }
18
+ }
19
+ let d = /* @__PURE__ */ new Map();
20
+ r.sameRank?.forEach((e, t) => e.forEach((e) => d.set(e, t)));
21
+ let f = t.map((e, t) => {
22
+ let n = d.has(e.v) && d.get(e.v) === d.get(e.w);
23
+ return c[t] ? {
24
+ v: e.w,
25
+ w: e.v,
26
+ minlen: n ? 0 : e.minlen,
27
+ weight: e.weight
28
+ } : {
29
+ v: e.v,
30
+ w: e.w,
31
+ minlen: n ? 0 : e.minlen,
32
+ weight: e.weight
33
+ };
34
+ }), p = Array.from({ length: i }, () => []), m = Array.from({ length: i }, () => []);
35
+ f.forEach((e, t) => {
36
+ e.v !== e.w && (m[e.v].push(t), p[e.w].push(t));
37
+ });
38
+ let h = [];
39
+ {
40
+ let e = p.map((e) => e.length), t = Array.from({ length: i }, (e, t) => t).filter((t) => !e[t]);
41
+ for (; t.length;) {
42
+ let n = t.shift();
43
+ h.push(n);
44
+ for (let r of m[n]) --e[f[r].w] || t.push(f[r].w);
45
+ }
46
+ if (h.length < i) for (let e = 0; e < i; e++) h.includes(e) || h.push(e);
47
+ }
48
+ let g = Array(i).fill(0), _ = () => {
49
+ for (let e of h) for (let t of m[e]) g[f[t].w] = Math.max(g[f[t].w], g[e] + f[t].minlen);
50
+ };
51
+ _();
52
+ for (let e = 0; e < 60; e++) {
53
+ let t = !1, n = e % 2 ? [...h].reverse() : h;
54
+ for (let e of n) {
55
+ if (d.has(e)) continue;
56
+ let n = -Infinity, r = Infinity, i = 0, a = 0;
57
+ for (let t of p[e]) n = Math.max(n, g[f[t].v] + f[t].minlen), i += f[t].weight;
58
+ for (let t of m[e]) r = Math.min(r, g[f[t].w] - f[t].minlen), a += f[t].weight;
59
+ let o = g[e];
60
+ i > a && n > -Infinity ? o = n : a > i && r < Infinity && (o = r), o !== g[e] && (g[e] = o, t = !0);
61
+ }
62
+ if (!t) break;
63
+ }
64
+ if (r.sameRank?.length) for (let e = 0; e < 12; e++) {
65
+ let e = !1;
66
+ for (let t of r.sameRank) {
67
+ let n = Math.max(...t.map((e) => g[e]));
68
+ for (let r of t) g[r] !== n && (g[r] = n, e = !0);
69
+ }
70
+ if (_(), !e) break;
71
+ }
72
+ let v = g.reduce((e, t) => Math.min(e, t), 0);
73
+ for (let e = 0; e < i; e++) g[e] -= v;
74
+ let y = g.reduce((e, t) => Math.max(e, t), 0), b = (e) => {
75
+ let t = [];
76
+ for (let r = e; r >= 0; r = n[r].parent) t.unshift(r);
77
+ return t;
78
+ }, x = (e, t) => {
79
+ let n = b(e), r = b(t), i = 0;
80
+ for (; i < n.length && i < r.length && n[i] === r[i];) i++;
81
+ return i ? n[i - 1] : -1;
82
+ }, S = e.map((e) => e.w), C = e.map((e) => e.h), w = e.map(() => 0), T = e.map((e) => e.cluster), E = [...g], D = e.map((e) => e.loop ?? 0), O = e.map(() => -1), k = (e, t, n, r, i) => (S.push(e), C.push(t), w.push(n), T.push(r), E.push(i), D.push(0), O.push(n === 2 || n === 3 ? r : -1), S.length - 1), A = [], j = [], ee = (e, t, n) => {
83
+ for (; A.length < S.length;) A.push([]), j.push([]);
84
+ j[e].push([t, n]), A[t].push([e, n]);
85
+ }, te = 6e4;
86
+ for (let e of f) te -= Math.max(0, Math.abs(g[e.w] - g[e.v]) - 1);
87
+ if (te < 0) throw Error("The diagram is too large to draw");
88
+ let M = [], N = [];
89
+ f.forEach((e, n) => {
90
+ if (e.v === e.w) {
91
+ M.push(null), N.push(-1);
92
+ return;
93
+ }
94
+ let r = [e.v], i = g[e.w] - g[e.v], a = t[n].label, o = a && i >= 2 ? g[e.v] + Math.floor(i / 2) : -1, s = x(T[e.v], T[e.w]), c = -1;
95
+ for (let t = g[e.v] + 1; t < g[e.w]; t++) {
96
+ let e = t === o ? k(a.w, a.h, 1, s, t) : k(0, 0, 1, s, t);
97
+ t === o && (c = e), r.push(e);
98
+ }
99
+ r.push(e.w), M.push(i > 0 ? r : null), N.push(c);
100
+ for (let t = 0; t + 1 < r.length && !(i <= 0); t++) {
101
+ let n = r[t], i = r[t + 1], a = +(w[n] === 1) + +(w[i] === 1);
102
+ ee(n, i, e.weight * (a === 2 ? 8 : a === 1 ? 2 : 1));
103
+ }
104
+ });
105
+ let ne = f.map((e, t) => e.v !== e.w && g[e.v] === g[e.w] && !M[t]), P = Array(a).fill(Infinity), F = Array(a).fill(-Infinity);
106
+ for (let e = 0; e < S.length; e++) for (let t of b(T[e])) P[t] = Math.min(P[t], E[e]), F[t] = Math.max(F[t], E[e]);
107
+ let I = Array.from({ length: a }, () => []), re = Array.from({ length: a }, () => []), ie = [];
108
+ for (let e = 0; e < a; e++) if (!(P[e] > F[e])) for (let t = P[e]; t <= F[e]; t++) I[e][t] = k(0, 0, 2, e, t), re[e][t] = k(0, 0, 3, e, t);
109
+ for (; A.length < S.length;) A.push([]), j.push([]);
110
+ for (let e = 0; e < S.length; e++) ie.push([]);
111
+ for (let e = 0; e < a; e++) for (let t = P[e]; t < F[e]; t++) ie[I[e][t]].push([I[e][t + 1], 1]), ie[I[e][t + 1]].push([I[e][t], 1]), ie[re[e][t]].push([re[e][t + 1], 1]), ie[re[e][t + 1]].push([re[e][t], 1]);
112
+ let L = S.length;
113
+ y = E.reduce((e, t) => Math.max(e, t), y);
114
+ let R = Array.from({ length: y + 1 }, () => []);
115
+ {
116
+ let e = new Uint8Array(L), t = Array.from({ length: L }, (e, t) => t).filter((e) => w[e] !== 2 && w[e] !== 3).sort((e, t) => E[e] - E[t] || e - t);
117
+ for (let n of t) {
118
+ if (e[n]) continue;
119
+ let t = [n];
120
+ for (; t.length;) {
121
+ let n = t.pop();
122
+ if (!e[n]) {
123
+ e[n] = 1, R[E[n]].push(n);
124
+ for (let r = j[n].length - 1; r >= 0; r--) e[j[n][r][0]] || t.push(j[n][r][0]);
125
+ }
126
+ }
127
+ }
128
+ for (let e = 0; e < L; e++) (w[e] === 2 || w[e] === 3) && R[E[e]].push(e);
129
+ }
130
+ let z = new Float64Array(L), B = () => R.forEach((e) => e.forEach((e, t) => z[e] = t));
131
+ B();
132
+ let V = new Float64Array(L), H = new Float64Array(a), ae = () => {
133
+ for (let e = 0; e < a; e++) {
134
+ if (P[e] > F[e]) continue;
135
+ let t = 0;
136
+ for (let n = P[e]; n <= F[e]; n++) t += z[I[e][n]] / Math.max(1, R[n].length);
137
+ H[e] = t / (F[e] - P[e] + 1);
138
+ }
139
+ }, U = (e, t) => {
140
+ if (!a) return [...e].sort((e, t) => V[e] - V[t] || z[e] - z[t]);
141
+ let r = {
142
+ node: -1,
143
+ cluster: -1,
144
+ key: 0,
145
+ idx: 0,
146
+ items: []
147
+ }, i = /* @__PURE__ */ new Map(), o = (e) => {
148
+ if (e < 0) return r;
149
+ let a = i.get(e);
150
+ return a || (a = {
151
+ node: -1,
152
+ cluster: e,
153
+ key: 0,
154
+ idx: z[I[e][t]] ?? 0,
155
+ items: []
156
+ }, i.set(e, a), o(n[e].parent).items.push(a)), a;
157
+ };
158
+ for (let t of e) w[t] === 2 ? o(O[t]) : w[t] !== 3 && o(T[t]).items.push({
159
+ node: t,
160
+ cluster: -1,
161
+ key: V[t],
162
+ idx: z[t],
163
+ items: []
164
+ });
165
+ let s = (e) => {
166
+ let n = 0, r = 0;
167
+ for (let t of e.items) if (t.node >= 0) n += t.key, r++;
168
+ else {
169
+ let [e, i] = s(t);
170
+ n += e, r += i;
171
+ }
172
+ e.cluster >= 0 && (e.key = r ? n / r : V[I[e.cluster][t]]), e.items.sort((e, t) => e.key - t.key || e.idx - t.idx);
173
+ let i = e.items.map((e, t) => e.cluster >= 0 ? t : -1).filter((e) => e >= 0), a = i.map((t) => e.items[t]).sort((e, t) => H[e.cluster] - H[t.cluster]);
174
+ return i.forEach((t, n) => e.items[t] = a[n]), [n, r];
175
+ };
176
+ s(r);
177
+ let c = [], l = (e) => {
178
+ for (let n of e.items) n.node >= 0 ? c.push(n.node) : (c.push(I[n.cluster][t]), l(n), c.push(re[n.cluster][t]));
179
+ };
180
+ return l(r), c;
181
+ }, oe = (e) => {
182
+ let t = 0;
183
+ for (let n = 0; n + 1 < e.length; n++) {
184
+ let r = [];
185
+ for (let t of e[n]) for (let [e] of j[t]) r.push([z[t], z[e]]);
186
+ r.sort((e, t) => e[0] - t[0] || e[1] - t[1]);
187
+ let i = e[n + 1].length + 1, a = new Float64Array(i + 1);
188
+ for (let e = 0; e < r.length; e++) {
189
+ let n = 0;
190
+ for (let t = r[e][1] + 1; t > 0; t -= t & -t) n += a[t];
191
+ t += e - n;
192
+ for (let t = r[e][1] + 1; t <= i; t += t & -t) a[t]++;
193
+ }
194
+ }
195
+ return t;
196
+ }, se = (e, t) => {
197
+ let n = 0, r = 0;
198
+ for (let [i, a] of t[e]) n += z[i] * a, r += a;
199
+ return r ? n / r : z[e];
200
+ };
201
+ for (let e of R) for (let t of e) V[t] = z[t];
202
+ ae(), R = R.map((e, t) => U(e, t)), B();
203
+ let ce = R.map((e) => [...e]), le = oe(R);
204
+ for (let e = 0; e < 24 && le > 0; e++) {
205
+ ae();
206
+ let t = e % 2 == 0;
207
+ for (let e = 1; e <= y; e++) {
208
+ let n = t ? e : y - e, r = t ? A : j;
209
+ for (let e of R[n]) V[e] = se(e, r);
210
+ R[n] = U(R[n], n), R[n].forEach((e, t) => z[e] = t);
211
+ }
212
+ let n = oe(R);
213
+ n < le && (le = n, ce = R.map((e) => [...e]));
214
+ }
215
+ R = ce, B();
216
+ let W = R.map((e) => e.reduce((e, t) => Math.max(e, C[t]), 0)), G = Array.from({ length: a }, () => []);
217
+ n.forEach((e, t) => e.parent >= 0 && G[e.parent].push(t));
218
+ let ue = (e) => n[e].pad[2] + Math.max(0, ...G[e].filter((t) => P[t] === P[e]).map(ue)), de = (e) => n[e].pad[3] + Math.max(0, ...G[e].filter((t) => F[t] === F[e]).map(de)), K = Array(y + 1).fill(0), q = Array(y + 1).fill(0);
219
+ for (let e = 0; e < a; e++) P[e] > F[e] || (K[P[e]] = Math.max(K[P[e]], ue(e)), q[F[e]] = Math.max(q[F[e]], de(e)));
220
+ let J = [];
221
+ for (let e = 0; e <= y; e++) J[e] = e === 0 ? W[0] / 2 + K[0] : J[e - 1] + W[e - 1] / 2 + q[e - 1] + r.ranksep + K[e] + W[e] / 2;
222
+ let fe = J[y] + W[y] / 2 + q[y], pe = (e) => w[e] === 2 || w[e] === 3 ? 0 : S[e] / 2, me = (e, t) => {
223
+ let i = D[e], a = w[e], o = w[t];
224
+ return a === 2 && (i += n[O[e]].pad[0]), a === 3 && (i += r.nodesep / 2), o === 3 && (i += n[O[t]].pad[1]), o === 2 && (i += r.nodesep / 2), a < 2 && o < 2 && (i += a === 1 && o === 1 ? r.edgesep : a === 1 || o === 1 ? (r.nodesep + r.edgesep) / 2 : r.nodesep), pe(e) + pe(t) + i;
225
+ }, Y = new Float64Array(L);
226
+ for (let e of R) for (let t = 1; t < e.length; t++) Y[e[t]] = Y[e[t - 1]] + me(e[t - 1], e[t]);
227
+ let he = (e, t, n) => {
228
+ let r = e.length, i = [0];
229
+ for (let t = 1; t < r; t++) i[t] = i[t - 1] + me(e[t - 1], e[t]);
230
+ let a = [];
231
+ for (let e = 0; e < r; e++) for (a.push({
232
+ s: e,
233
+ e,
234
+ w: n[e],
235
+ wt: n[e] * (t[e] - i[e])
236
+ }); a.length > 1;) {
237
+ let e = a[a.length - 2], t = a[a.length - 1];
238
+ if (e.wt / e.w < t.wt / t.w) break;
239
+ e.e = t.e, e.w += t.w, e.wt += t.wt, a.pop();
240
+ }
241
+ for (let t of a) for (let n = t.s; n <= t.e; n++) Y[e[n]] = t.wt / t.w + i[n];
242
+ };
243
+ for (let e = 0; e < 10; e++) {
244
+ let t = e >= 8, n = e % 2 == 0;
245
+ for (let e = 0; e <= y; e++) {
246
+ let r = n ? e : y - e, i = R[r];
247
+ if (!i.length) continue;
248
+ let a = [], o = [];
249
+ for (let e of i) {
250
+ let r = 0, i = 0, s = (e) => {
251
+ for (let [t, n] of e) r += Y[t] * n, i += n;
252
+ };
253
+ (t || n) && s(A[e]), (t || !n) && s(j[e]), s(ie[e]), a.push(i ? r / i : Y[e]), o.push(i || .01);
254
+ }
255
+ he(i, a, o);
256
+ }
257
+ }
258
+ let X = L, ge = (e) => w[e] === 2 ? X + 2 * O[e] : w[e] === 3 ? X + 2 * O[e] + 1 : e;
259
+ if (a) {
260
+ let e = L + 2 * a, t = new Float64Array(e);
261
+ for (let e = 0; e < L; e++) t[e] = Y[e];
262
+ for (let e = 0; e < a; e++) t[X + 2 * e] = Infinity, t[X + 2 * e + 1] = -Infinity;
263
+ for (let e = 0; e < L; e++) w[e] === 2 && (t[ge(e)] = Math.min(t[ge(e)], Y[e])), w[e] === 3 && (t[ge(e)] = Math.max(t[ge(e)], Y[e]));
264
+ let r = Array.from({ length: e }, () => []), i = new Int32Array(e), o = (e, t, n) => {
265
+ r[e].push([t, n]), i[t]++;
266
+ };
267
+ for (let e of R) for (let t = 1; t < e.length; t++) o(ge(e[t - 1]), ge(e[t]), me(e[t - 1], e[t]));
268
+ for (let e = 0; e < a; e++) P[e] <= F[e] && o(X + 2 * e, X + 2 * e + 1, Math.max(n[e].minW, n[e].pad[0] + n[e].pad[1]));
269
+ let s = [];
270
+ for (let t = 0; t < e; t++) i[t] || s.push(t);
271
+ let c = 0, l = new Float64Array(t);
272
+ for (; s.length;) {
273
+ let e = s.pop();
274
+ c++;
275
+ for (let [t, n] of r[e]) Number.isFinite(l[e]) && (l[t] = Math.max(l[t], l[e] + n)), --i[t] || s.push(t);
276
+ }
277
+ if (c === e) for (let e = 0; e < L; e++) Y[e] = l[ge(e)];
278
+ }
279
+ let _e = Infinity, Z = -Infinity;
280
+ for (let e = 0; e < L; e++) _e = Math.min(_e, Y[e] - pe(e)), Z = Math.max(Z, Y[e] + pe(e) + D[e]);
281
+ Number.isFinite(_e) || (_e = Z = 0);
282
+ for (let e = 0; e < L; e++) Y[e] -= _e;
283
+ let ve = (e) => ({
284
+ x: Y[e],
285
+ y: J[E[e]]
286
+ }), Q = /* @__PURE__ */ new Map();
287
+ {
288
+ let t = /* @__PURE__ */ new Map(), n = (e, n, r) => {
289
+ let i = t.get(e);
290
+ i || t.set(e, i = []), i.push({
291
+ i: n,
292
+ nx: r
293
+ });
294
+ };
295
+ f.forEach((t, r) => {
296
+ let i = M[r];
297
+ i && !ne[r] && (e[i[0]]?.spread && n(`${i[0]}:b`, r, Y[i[1]]), e[i[i.length - 1]]?.spread && n(`${i[i.length - 1]}:t`, r, Y[i[i.length - 2]]));
298
+ });
299
+ for (let [e, n] of t) {
300
+ if (n.length < 2) continue;
301
+ let t = Number(e.split(":")[0]);
302
+ n.sort((e, t) => e.nx - t.nx || e.i - t.i);
303
+ let r = Math.min(36, S[t] * .7 / (n.length - 1));
304
+ n.forEach((i, a) => Q.set(`${e}:${i.i}`, Y[t] + (a - (n.length - 1) / 2) * r));
305
+ }
306
+ }
307
+ let ye = f.map((e, n) => {
308
+ if (e.v === e.w) return null;
309
+ if (ne[n]) {
310
+ let r = ve(e.v), i = ve(e.w), a = Math.sign(i.x - r.x) || 1, o = {
311
+ x: r.x + a * S[e.v] / 2,
312
+ y: r.y
313
+ }, s = {
314
+ x: i.x - a * S[e.w] / 2,
315
+ y: i.y
316
+ }, [l, u] = c[n] ? [s, o] : [o, s];
317
+ return {
318
+ start: l,
319
+ segs: [{
320
+ c: "L",
321
+ p: [u]
322
+ }],
323
+ label: t[n].label ? {
324
+ x: (l.x + u.x) / 2,
325
+ y: l.y - 10
326
+ } : void 0
327
+ };
328
+ }
329
+ let r = M[n];
330
+ if (!r) return null;
331
+ let i = [], a = [], o = ve(r[0]);
332
+ i.push({
333
+ x: Q.get(`${r[0]}:b:${n}`) ?? o.x,
334
+ y: o.y + C[r[0]] / 2
335
+ });
336
+ for (let e = 1; e + 1 < r.length; e++) {
337
+ let t = ve(r[e]), n = W[E[r[e]]] / 2;
338
+ n > .5 ? (i.push({
339
+ x: t.x,
340
+ y: t.y - n
341
+ }, {
342
+ x: t.x,
343
+ y: t.y + n
344
+ }), a.push(!1, !0)) : (i.push(t), a.push(!1));
345
+ }
346
+ let s = ve(r[r.length - 1]);
347
+ i.push({
348
+ x: Q.get(`${r[r.length - 1]}:t:${n}`) ?? s.x,
349
+ y: s.y - C[r[r.length - 1]] / 2
350
+ }), a.push(!1);
351
+ let l = i.length, u = Array(l).fill(0), d = (e) => (i[e + 1].x - i[e].x) / Math.max(.5, i[e + 1].y - i[e].y);
352
+ for (let e = 1; e + 1 < l; e++) {
353
+ if (a[e - 1] || a[e]) continue;
354
+ let t = d(e - 1), n = d(e);
355
+ if (t * n <= 0) continue;
356
+ let r = i[e].y - i[e - 1].y, o = i[e + 1].y - i[e].y;
357
+ u[e] = 3 * (r + o) / ((2 * o + r) / t + (o + 2 * r) / n);
358
+ }
359
+ let f = [];
360
+ for (let e = 1; e < l; e++) {
361
+ let t = i[e - 1], n = i[e], r = (n.y - t.y) / 3;
362
+ a[e - 1] || Math.abs(t.x - n.x) < .5 && !u[e - 1] && !u[e] ? f.push({
363
+ c: "L",
364
+ p: [n]
365
+ }) : f.push({
366
+ c: "C",
367
+ p: [
368
+ {
369
+ x: t.x + u[e - 1] * r,
370
+ y: t.y + r
371
+ },
372
+ {
373
+ x: n.x - u[e] * r,
374
+ y: n.y - r
375
+ },
376
+ n
377
+ ]
378
+ });
379
+ }
380
+ let p = N[n] >= 0 ? ve(N[n]) : void 0;
381
+ if (!c[n]) return {
382
+ start: i[0],
383
+ segs: f,
384
+ label: p
385
+ };
386
+ let m = [];
387
+ for (let e = l - 1; e >= 1; e--) {
388
+ let t = f[e - 1];
389
+ m.push(t.c === "C" ? {
390
+ c: "C",
391
+ p: [
392
+ t.p[1],
393
+ t.p[0],
394
+ i[e - 1]
395
+ ]
396
+ } : {
397
+ c: "L",
398
+ p: [i[e - 1]]
399
+ });
400
+ }
401
+ return {
402
+ start: i[l - 1],
403
+ segs: m,
404
+ label: p
405
+ };
406
+ }), be = n.map((e, t) => {
407
+ if (P[t] > F[t]) return null;
408
+ let n = Infinity, r = -Infinity;
409
+ for (let e = P[t]; e <= F[t]; e++) n = Math.min(n, Y[I[t][e]]), r = Math.max(r, Y[re[t][e]]);
410
+ let i = J[P[t]] - W[P[t]] / 2 - ue(t), a = J[F[t]] + W[F[t]] / 2 + de(t);
411
+ return {
412
+ x: n,
413
+ y: i,
414
+ w: r - n,
415
+ h: a - i
416
+ };
417
+ });
418
+ return {
419
+ nodes: Array.from({ length: i }, (e, t) => ve(t)),
420
+ edges: ye,
421
+ clusters: be,
422
+ w: Z - _e,
423
+ h: fe
424
+ };
425
+ }
426
+ // src/core/diagram/svg.ts
427
+ var t = [
428
+ 278,
429
+ 278,
430
+ 355,
431
+ 556,
432
+ 556,
433
+ 889,
434
+ 667,
435
+ 191,
436
+ 333,
437
+ 333,
438
+ 389,
439
+ 584,
440
+ 278,
441
+ 333,
442
+ 278,
443
+ 278,
444
+ 556,
445
+ 556,
446
+ 556,
447
+ 556,
448
+ 556,
449
+ 556,
450
+ 556,
451
+ 556,
452
+ 556,
453
+ 556,
454
+ 278,
455
+ 278,
456
+ 584,
457
+ 584,
458
+ 584,
459
+ 556,
460
+ 1015,
461
+ 667,
462
+ 667,
463
+ 722,
464
+ 722,
465
+ 667,
466
+ 611,
467
+ 778,
468
+ 722,
469
+ 278,
470
+ 500,
471
+ 667,
472
+ 556,
473
+ 833,
474
+ 722,
475
+ 778,
476
+ 667,
477
+ 778,
478
+ 722,
479
+ 667,
480
+ 611,
481
+ 722,
482
+ 667,
483
+ 944,
484
+ 667,
485
+ 667,
486
+ 611,
487
+ 278,
488
+ 278,
489
+ 278,
490
+ 469,
491
+ 556,
492
+ 333,
493
+ 556,
494
+ 556,
495
+ 500,
496
+ 556,
497
+ 556,
498
+ 278,
499
+ 556,
500
+ 556,
501
+ 222,
502
+ 222,
503
+ 500,
504
+ 222,
505
+ 833,
506
+ 556,
507
+ 556,
508
+ 556,
509
+ 556,
510
+ 333,
511
+ 500,
512
+ 278,
513
+ 556,
514
+ 500,
515
+ 722,
516
+ 500,
517
+ 500,
518
+ 500,
519
+ 334,
520
+ 260,
521
+ 334,
522
+ 584
523
+ ];
524
+ function n(e) {
525
+ return e >= 32 && e <= 126 ? t[e - 32] : e >= 768 && e <= 879 || e >= 8203 && e <= 8207 || e === 65039 ? 0 : e >= 4352 && e <= 4447 || e >= 11904 && e <= 42191 || e >= 44032 && e <= 55203 || e >= 63744 && e <= 64255 || e >= 65072 && e <= 65103 || e >= 65280 && e <= 65376 || e >= 126976 ? 1e3 : 580;
526
+ }
527
+ function r(e, t = 14, r = !1, i = !1) {
528
+ let a = 0;
529
+ if (i) for (let t of e) a += n(t.codePointAt(0)) ? 600 : 0;
530
+ else for (let t of e) a += n(t.codePointAt(0));
531
+ return a * t * (r ? 1.08 : 1) / 1e3;
532
+ }
533
+ var i = (e) => Math.round(e * 1.3);
534
+ function a(e, t = 14, n = !1) {
535
+ let a = 0;
536
+ for (let i of e) a = Math.max(a, r(i, t, n));
537
+ return {
538
+ w: a,
539
+ h: e.length * i(t)
540
+ };
541
+ }
542
+ function o(e, t, n = 14, i = !1) {
543
+ let a = [];
544
+ for (let o of e) {
545
+ if (r(o, n, i) <= t) {
546
+ a.push(o);
547
+ continue;
548
+ }
549
+ let e = "";
550
+ for (let s of o.split(/ +/)) {
551
+ let o = e ? e + " " + s : s;
552
+ e && r(o, n, i) > t ? (a.push(e), e = s) : e = o;
553
+ }
554
+ a.push(e);
555
+ }
556
+ return a;
557
+ }
558
+ var s = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), c = /^[a-z]{3,24}$/;
559
+ function l(e) {
560
+ if (!e) return;
561
+ let t = e.trim().toLowerCase();
562
+ if (/^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/.test(t)) return t;
563
+ if (/^[0-9a-f]{6}$/.test(t)) return "#" + t;
564
+ if (/^rgba?\(\s*[\d.]+%?\s*,\s*[\d.]+%?\s*,\s*[\d.]+%?\s*(,\s*[\d.]+%?\s*)?\)$/.test(t) || /^rgba?\(\s*[\d.]+%?\s+[\d.]+%?\s+[\d.]+%?\s*(\/\s*[\d.]+%?\s*)?\)$/.test(t)) return t;
565
+ if (c.test(t)) return t === "transparent" ? "none" : t;
566
+ }
567
+ var u = {
568
+ ink: "#1f2937",
569
+ line: "#4b5563",
570
+ fill: "#eef2fb",
571
+ stroke: "#5b6f9a",
572
+ muted: "#6b7280",
573
+ cluster: "#f7f8fb",
574
+ clusterStroke: "#a3adc2",
575
+ note: "#fff6c8",
576
+ noteStroke: "#c9a227",
577
+ label: "#ffffff",
578
+ dark: "#2d3748",
579
+ series: [
580
+ "#5b8def",
581
+ "#f2994a",
582
+ "#3fb68b",
583
+ "#e5596b",
584
+ "#9b6be0",
585
+ "#d4b33a",
586
+ "#3bb3c9",
587
+ "#e07bb8",
588
+ "#8c9aaf",
589
+ "#7cbd4a"
590
+ ]
591
+ }, d = (e) => Number.isFinite(e) ? Math.round(e * 100) / 100 : 0;
592
+ function f(e) {
593
+ let t = ` fill="${e.fill ?? "none"}"`;
594
+ return e.stroke && (t += ` stroke="${e.stroke}" stroke-width="${d(e.sw ?? 1)}"`), e.stroke && e.dash && (t += ` stroke-dasharray="${e.dash}"`), e.opacity !== void 0 && (t += ` opacity="${d(e.opacity)}"`), t;
595
+ }
596
+ var p = class {
597
+ out = [];
598
+ rect(e, t, n, r, i, a = 0) {
599
+ return this.out.push(`<rect x="${d(e)}" y="${d(t)}" width="${d(n)}" height="${d(r)}"${a ? ` rx="${d(a)}"` : ""}${f(i)}/>`), this;
600
+ }
601
+ circle(e, t, n, r) {
602
+ return this.out.push(`<circle cx="${d(e)}" cy="${d(t)}" r="${d(n)}"${f(r)}/>`), this;
603
+ }
604
+ ellipse(e, t, n, r, i) {
605
+ return this.out.push(`<ellipse cx="${d(e)}" cy="${d(t)}" rx="${d(n)}" ry="${d(r)}"${f(i)}/>`), this;
606
+ }
607
+ line(e, t, n, r, i) {
608
+ return this.out.push(`<line x1="${d(e)}" y1="${d(t)}" x2="${d(n)}" y2="${d(r)}"${f(i)}/>`), this;
609
+ }
610
+ poly(e, t, n = !0) {
611
+ let r = e.map(([e, t]) => `${d(e)},${d(t)}`).join(" ");
612
+ return this.out.push(`<${n ? "polygon" : "polyline"} points="${r}"${f(t)}/>`), this;
613
+ }
614
+ path(e, t) {
615
+ return this.out.push(`<path d="${e}"${f(t)}/>`), this;
616
+ }
617
+ text(e, t, n, r = {}) {
618
+ let a = typeof n == "string" ? [n] : n, o = r.size ?? 14, c = i(o), l = t - a.length * c / 2, f = ` font-family="${s(r.mono ? "Menlo, Consolas, \"Courier New\", monospace" : "Helvetica, Arial, sans-serif")}" font-size="${o}" fill="${r.color ?? u.ink}"`;
619
+ return r.anchor && r.anchor !== "start" && (f += ` text-anchor="${r.anchor}"`), r.bold && (f += " font-weight=\"bold\""), r.italic && (f += " font-style=\"italic\""), r.underline && (f += " text-decoration=\"underline\""), a.forEach((t, n) => {
620
+ t && this.out.push(`<text x="${d(e)}" y="${d(l + n * c + c / 2 + o * .35)}"${f}>${s(t)}</text>`);
621
+ }), this;
622
+ }
623
+ raw(e) {
624
+ return this.out.push(e), this;
625
+ }
626
+ body() {
627
+ return this.out.join("");
628
+ }
629
+ toString(e, t, n = "#ffffff") {
630
+ let r = Math.ceil(e), i = Math.ceil(t);
631
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${r}" height="${i}" viewBox="0 0 ${r} ${i}">` + (n ? `<rect x="0" y="0" width="${r}" height="${i}" fill="${n}"/>` : "") + this.out.join("") + "</svg>";
632
+ }
633
+ };
634
+ function m(e) {
635
+ return e.map((e) => e.c + e.p.map((e) => `${d(e.x)} ${d(e.y)}`).join(" ")).join(" ");
636
+ }
637
+ function h(e) {
638
+ return e.replace(/<br\s*\/?>/gi, "\n").replace(/\\n/g, "\n").replace(/<\/?[a-z][^>]*>/gi, "").replace(/#(\d+);/g, (e, t) => String.fromCodePoint(Math.min(Number(t), 1114111))).replace(/#([a-z]+);/gi, (e, t) => ({
639
+ quot: "\"",
640
+ amp: "&",
641
+ lt: "<",
642
+ gt: ">",
643
+ nbsp: " ",
644
+ apos: "'"
645
+ })[t.toLowerCase()] ?? e).replace(/&(quot|amp|lt|gt|nbsp|apos|#\d+);/g, (e, t) => t[0] === "#" ? String.fromCodePoint(Math.min(Number(t.slice(1)), 1114111)) : {
646
+ quot: "\"",
647
+ amp: "&",
648
+ lt: "<",
649
+ gt: ">",
650
+ nbsp: " ",
651
+ apos: "'"
652
+ }[t] ?? e);
653
+ }
654
+ var g = class extends Error {}, _ = class {
655
+ defShape;
656
+ g;
657
+ byId = /* @__PURE__ */ new Map();
658
+ clusterIds = /* @__PURE__ */ new Map();
659
+ constructor(e = "TB", t = "rect") {
660
+ this.defShape = t, this.g = {
661
+ dir: e,
662
+ nodes: [],
663
+ edges: [],
664
+ clusters: []
665
+ };
666
+ }
667
+ has(e) {
668
+ return this.byId.has(e);
669
+ }
670
+ get(e) {
671
+ return this.byId.get(e);
672
+ }
673
+ node(e, t = {}, n) {
674
+ let r = this.byId.get(e);
675
+ r || (r = {
676
+ id: e,
677
+ label: e,
678
+ shape: this.defShape,
679
+ cluster: n
680
+ }, this.byId.set(e, r), this.g.nodes.push(r));
681
+ for (let [e, n] of Object.entries(t)) n !== void 0 && (r[e] = n);
682
+ return r;
683
+ }
684
+ edge(e, t) {
685
+ return this.clusterIds.has(e.from) || this.node(e.from, {}, t), this.clusterIds.has(e.to) || this.node(e.to, {}, t), this.g.edges.push(e), e;
686
+ }
687
+ cluster(e, t, n) {
688
+ let r = this.clusterIds.get(e);
689
+ r ? t && (r.label = t) : (r = {
690
+ id: e,
691
+ label: t,
692
+ parent: n
693
+ }, this.clusterIds.set(e, r), this.g.clusters.push(r));
694
+ let i = this.byId.get(e);
695
+ return i && (this.byId.delete(e), this.g.nodes.splice(this.g.nodes.indexOf(i), 1)), r;
696
+ }
697
+ isCluster(e) {
698
+ return this.clusterIds.has(e);
699
+ }
700
+ }, v = 14, y = 13, b = 14, x = 9, S = i(v), C = (e) => e.split("\n"), w = (e) => Math.round(e * 100) / 100;
701
+ function T(e) {
702
+ let t = [];
703
+ for (let n of e.rows) n.forEach((n, i) => t[i] = Math.max(t[i] ?? 0, r(n, y, e.bold)));
704
+ return {
705
+ w: t.reduce((e, t) => e + t, 0) + Math.max(0, t.length - 1) * 12,
706
+ h: e.rows.length ? e.rows.length * i(y) + 10 : 8,
707
+ cols: t
708
+ };
709
+ }
710
+ function E(e, t) {
711
+ let n = e.shape === "none" || e.label === "" ? C(e.label) : o(C(e.label), 260, v, e.style?.bold), r = e.label === "" ? {
712
+ w: 0,
713
+ h: 0
714
+ } : a(n, v, e.style?.bold), i = t === "TB" || t === "BT";
715
+ if (e.sections?.length) {
716
+ let t = e.sections.map(T);
717
+ return {
718
+ w: Math.max(90, ...t.map((e) => e.w + 28)),
719
+ h: t.reduce((e, t) => e + t.h, 0),
720
+ text: n
721
+ };
722
+ }
723
+ let s = r.w + 28, c = r.h + 18;
724
+ switch (e.shape) {
725
+ case "start": return {
726
+ w: 20,
727
+ h: 20,
728
+ text: []
729
+ };
730
+ case "end": return {
731
+ w: 22,
732
+ h: 22,
733
+ text: []
734
+ };
735
+ case "point": return {
736
+ w: 8,
737
+ h: 8,
738
+ text: []
739
+ };
740
+ case "bar": return i ? {
741
+ w: 80,
742
+ h: 7,
743
+ text: []
744
+ } : {
745
+ w: 7,
746
+ h: 80,
747
+ text: []
748
+ };
749
+ case "none": return {
750
+ w: r.w + 8,
751
+ h: r.h + 6,
752
+ text: n
753
+ };
754
+ case "circle": {
755
+ let e = Math.max(r.w, r.h) + 18 + 4;
756
+ return {
757
+ w: e,
758
+ h: e,
759
+ text: n
760
+ };
761
+ }
762
+ case "doublecircle": {
763
+ let e = Math.max(r.w, r.h) + 18 + 14;
764
+ return {
765
+ w: e,
766
+ h: e,
767
+ text: n
768
+ };
769
+ }
770
+ case "ellipse": return {
771
+ w: Math.max(50, (r.w + b) * 1.42),
772
+ h: Math.max(36, (r.h + x) * 1.42),
773
+ text: n
774
+ };
775
+ case "diamond": {
776
+ let e = s + c / .6;
777
+ return {
778
+ w: e,
779
+ h: .6 * e,
780
+ text: n
781
+ };
782
+ }
783
+ case "stadium": return {
784
+ w: r.w + c + b,
785
+ h: c,
786
+ text: n
787
+ };
788
+ case "hexagon":
789
+ case "octagon": return {
790
+ w: s + c / 2,
791
+ h: c,
792
+ text: n
793
+ };
794
+ case "lean-r":
795
+ case "lean-l": return {
796
+ w: s + c / 2,
797
+ h: c,
798
+ text: n
799
+ };
800
+ case "trap-b":
801
+ case "trap-t": return {
802
+ w: s + c * .7,
803
+ h: c,
804
+ text: n
805
+ };
806
+ case "flag": return {
807
+ w: s + c / 3,
808
+ h: c,
809
+ text: n
810
+ };
811
+ case "cylinder": return {
812
+ w: Math.max(s, 50),
813
+ h: c + 16,
814
+ text: n
815
+ };
816
+ case "subroutine":
817
+ case "component": return {
818
+ w: s + 16,
819
+ h: c,
820
+ text: n
821
+ };
822
+ case "note":
823
+ case "folder": return {
824
+ w: s + 8,
825
+ h: c + (e.shape === "folder" ? 8 : 0),
826
+ text: n
827
+ };
828
+ case "box3d": return {
829
+ w: s + 8,
830
+ h: c + 8,
831
+ text: n
832
+ };
833
+ case "triangle": return {
834
+ w: s * 1.6,
835
+ h: c * 1.7,
836
+ text: n
837
+ };
838
+ case "actor": return {
839
+ w: Math.max(36, r.w + 8),
840
+ h: 46 + r.h,
841
+ text: n
842
+ };
843
+ default: return {
844
+ w: Math.max(s, 40),
845
+ h: c,
846
+ text: n
847
+ };
848
+ }
849
+ }
850
+ function D(e) {
851
+ let t = e.style ?? {};
852
+ return {
853
+ fill: t.fill ?? u.fill,
854
+ stroke: t.stroke ?? u.stroke,
855
+ sw: t.sw ?? 1.3,
856
+ dash: t.dash
857
+ };
858
+ }
859
+ function O(e, t, n, r, i) {
860
+ let { w: a, h: o } = n, s = r - a / 2, c = i - o / 2, l = D(t), d = t.style?.color ?? u.ink, f = (a = r, o = i) => e.text(a, o, n.text, {
861
+ anchor: "middle",
862
+ color: d,
863
+ bold: t.style?.bold,
864
+ italic: t.style?.italic
865
+ }), p = (t) => e.poly(t, l);
866
+ switch (t.shape) {
867
+ case "start":
868
+ e.circle(r, i, a / 2, { fill: t.style?.fill ?? u.dark });
869
+ return;
870
+ case "end":
871
+ e.circle(r, i, a / 2, {
872
+ fill: "#ffffff",
873
+ stroke: t.style?.stroke ?? u.dark,
874
+ sw: 1.5
875
+ }).circle(r, i, a / 2 - 4, { fill: t.style?.fill ?? u.dark });
876
+ return;
877
+ case "point":
878
+ e.circle(r, i, a / 2, { fill: t.style?.fill ?? u.dark });
879
+ return;
880
+ case "bar":
881
+ e.rect(s, c, a, o, { fill: t.style?.fill ?? u.dark }, 2);
882
+ return;
883
+ case "none":
884
+ f();
885
+ return;
886
+ case "round":
887
+ e.rect(s, c, a, o, l, 6);
888
+ break;
889
+ case "stadium":
890
+ e.rect(s, c, a, o, l, o / 2);
891
+ break;
892
+ case "subroutine":
893
+ e.rect(s, c, a, o, l).line(s + 8, c, s + 8, c + o, l).line(s + a - 8, c, s + a - 8, c + o, l);
894
+ break;
895
+ case "component":
896
+ e.rect(s + 6, c, a - 6, o, l), e.rect(s, c + o / 2 - 11, 12, 7, l).rect(s, c + o / 2 + 4, 12, 7, l), f(r + 4);
897
+ return;
898
+ case "cylinder":
899
+ e.path(`M${w(s)} ${w(c + 7)} A${w(a / 2)} 7 0 0 1 ${w(s + a)} ${w(c + 7)} L${w(s + a)} ${w(c + o - 7)} A${w(a / 2)} 7 0 0 1 ${w(s)} ${w(c + o - 7)} Z`, l), e.path(`M${w(s)} ${w(c + 7)} A${w(a / 2)} 7 0 0 0 ${w(s + a)} ${w(c + 7)}`, {
900
+ ...l,
901
+ fill: "none"
902
+ }), f(r, i + 7 / 2);
903
+ return;
904
+ case "circle":
905
+ e.circle(r, i, a / 2, l);
906
+ break;
907
+ case "doublecircle":
908
+ e.circle(r, i, a / 2, l).circle(r, i, a / 2 - 5, {
909
+ ...l,
910
+ fill: "none"
911
+ });
912
+ break;
913
+ case "ellipse":
914
+ e.ellipse(r, i, a / 2, o / 2, l);
915
+ break;
916
+ case "diamond":
917
+ p([
918
+ [r, c],
919
+ [s + a, i],
920
+ [r, c + o],
921
+ [s, i]
922
+ ]);
923
+ break;
924
+ case "hexagon": {
925
+ let e = o / 4;
926
+ p([
927
+ [s + e, c],
928
+ [s + a - e, c],
929
+ [s + a, i],
930
+ [s + a - e, c + o],
931
+ [s + e, c + o],
932
+ [s, i]
933
+ ]);
934
+ break;
935
+ }
936
+ case "octagon": {
937
+ let e = o / 4;
938
+ p([
939
+ [s + e, c],
940
+ [s + a - e, c],
941
+ [s + a, c + e],
942
+ [s + a, c + o - e],
943
+ [s + a - e, c + o],
944
+ [s + e, c + o],
945
+ [s, c + o - e],
946
+ [s, c + e]
947
+ ]);
948
+ break;
949
+ }
950
+ case "lean-r":
951
+ case "lean-l": {
952
+ let e = o / 2, n = t.shape === "lean-r";
953
+ p([
954
+ [n ? s + e : s, c],
955
+ [n ? s + a : s + a - e, c],
956
+ [n ? s + a - e : s + a, c + o],
957
+ [n ? s : s + e, c + o]
958
+ ]);
959
+ break;
960
+ }
961
+ case "trap-b":
962
+ case "trap-t": {
963
+ let e = o * .35, n = t.shape === "trap-b";
964
+ p([
965
+ [n ? s + e : s, c],
966
+ [n ? s + a - e : s + a, c],
967
+ [n ? s + a : s + a - e, c + o],
968
+ [n ? s : s + e, c + o]
969
+ ]);
970
+ break;
971
+ }
972
+ case "flag": {
973
+ let e = o / 3;
974
+ p([
975
+ [s, c],
976
+ [s + a, c],
977
+ [s + a, c + o],
978
+ [s, c + o],
979
+ [s + e, i]
980
+ ]), f(r + e / 2);
981
+ return;
982
+ }
983
+ case "note":
984
+ p([
985
+ [s, c],
986
+ [s + a - 10, c],
987
+ [s + a, c + 10],
988
+ [s + a, c + o],
989
+ [s, c + o]
990
+ ]), e.poly([
991
+ [s + a - 10, c],
992
+ [s + a - 10, c + 10],
993
+ [s + a, c + 10]
994
+ ], {
995
+ ...l,
996
+ fill: "none"
997
+ }, !1);
998
+ break;
999
+ case "folder":
1000
+ e.rect(s, c, Math.min(a * .4, 40), 10, l, 2).rect(s, c + 8, a, o - 8, l), f(r, i + 4);
1001
+ return;
1002
+ case "box3d":
1003
+ p([
1004
+ [s, c + 8],
1005
+ [s + 8, c],
1006
+ [s + a, c],
1007
+ [s + a, c + o - 8],
1008
+ [s + a - 8, c + o],
1009
+ [s, c + o]
1010
+ ]), e.poly([
1011
+ [s, c + 8],
1012
+ [s + a - 8, c + 8],
1013
+ [s + a, c]
1014
+ ], {
1015
+ ...l,
1016
+ fill: "none"
1017
+ }, !1).line(s + a - 8, c + 8, s + a - 8, c + o, l), f(r - 4, i + 4);
1018
+ return;
1019
+ case "cloud":
1020
+ e.rect(s, c, a, o, l, Math.min(o / 2, 20));
1021
+ break;
1022
+ case "triangle":
1023
+ p([
1024
+ [r, c],
1025
+ [s + a, c + o],
1026
+ [s, c + o]
1027
+ ]), f(r, i + o / 6);
1028
+ return;
1029
+ case "actor": {
1030
+ let i = {
1031
+ fill: "none",
1032
+ stroke: t.style?.stroke ?? u.dark,
1033
+ sw: 1.5
1034
+ }, a = c + 2;
1035
+ e.circle(r, a + 7, 7, {
1036
+ ...i,
1037
+ fill: t.style?.fill ?? u.fill
1038
+ }), e.line(r, a + 14, r, a + 28, i).line(r - 11, a + 19, r + 11, a + 19, i), e.line(r, a + 28, r - 9, a + 40, i).line(r, a + 28, r + 9, a + 40, i), e.text(r, a + 44 + n.text.length * S / 2, n.text, {
1039
+ anchor: "middle",
1040
+ color: d
1041
+ });
1042
+ return;
1043
+ }
1044
+ default:
1045
+ if (t.sections?.length) return k(e, t, s, c, a);
1046
+ e.rect(s, c, a, o, l);
1047
+ }
1048
+ f();
1049
+ }
1050
+ function k(e, t, n, r, a) {
1051
+ let o = D(t), s = t.sections.map(T), c = s.reduce((e, t) => e + t.h, 0);
1052
+ e.rect(n, r, a, c, o, t.shape === "round" ? 6 : 0);
1053
+ let l = r;
1054
+ t.sections.forEach((r, c) => {
1055
+ c && e.line(n, l, n + a, l, {
1056
+ stroke: o.stroke,
1057
+ sw: 1
1058
+ });
1059
+ let u = i(y);
1060
+ r.rows.forEach((i, o) => {
1061
+ let d = l + 5 + o * u + u / 2;
1062
+ if (r.center || i.length === 1 && c === 0) {
1063
+ e.text(n + a / 2, d, i.join(" "), {
1064
+ anchor: "middle",
1065
+ size: y,
1066
+ bold: r.bold,
1067
+ italic: r.italic,
1068
+ color: t.style?.color
1069
+ });
1070
+ return;
1071
+ }
1072
+ let f = n + b;
1073
+ i.forEach((n, i) => {
1074
+ e.text(f, d, n, {
1075
+ size: y,
1076
+ bold: r.bold,
1077
+ italic: r.italic,
1078
+ color: t.style?.color
1079
+ }), f += s[c].cols[i] + 12;
1080
+ });
1081
+ }), l += s[c].h;
1082
+ });
1083
+ }
1084
+ var A = {
1085
+ arrow: 10,
1086
+ triangle: 13,
1087
+ diamond: 15,
1088
+ odiamond: 15,
1089
+ circle: 8,
1090
+ ocircle: 8
1091
+ };
1092
+ function j(e, t) {
1093
+ let n = t.x - e.x, r = t.y - e.y, i = Math.hypot(n, r) || 1;
1094
+ return {
1095
+ x: n / i,
1096
+ y: r / i
1097
+ };
1098
+ }
1099
+ function ee(e, t, n, r, i) {
1100
+ let a = -r.y, o = r.x, s = (e, t) => [n.x - r.x * e + a * t, n.y - r.y * e + o * t], c = (t, n) => e.line(t[0], t[1], n[0], n[1], {
1101
+ stroke: i,
1102
+ sw: 1.3
1103
+ });
1104
+ switch (t) {
1105
+ case "arrow":
1106
+ e.poly([
1107
+ s(0, 0),
1108
+ s(10, 4.5),
1109
+ s(10, -4.5)
1110
+ ], {
1111
+ fill: i,
1112
+ stroke: i,
1113
+ sw: 1
1114
+ });
1115
+ break;
1116
+ case "open":
1117
+ e.poly([
1118
+ s(10, 5),
1119
+ s(0, 0),
1120
+ s(10, -5)
1121
+ ], {
1122
+ stroke: i,
1123
+ sw: 1.4
1124
+ }, !1);
1125
+ break;
1126
+ case "triangle":
1127
+ e.poly([
1128
+ s(0, 0),
1129
+ s(13, 7),
1130
+ s(13, -7)
1131
+ ], {
1132
+ fill: "#ffffff",
1133
+ stroke: i,
1134
+ sw: 1.2
1135
+ });
1136
+ break;
1137
+ case "diamond":
1138
+ case "odiamond":
1139
+ e.poly([
1140
+ s(0, 0),
1141
+ s(7.5, 5),
1142
+ s(15, 0),
1143
+ s(7.5, -5)
1144
+ ], {
1145
+ fill: t === "diamond" ? i : "#ffffff",
1146
+ stroke: i,
1147
+ sw: 1.2
1148
+ });
1149
+ break;
1150
+ case "circle":
1151
+ case "ocircle": {
1152
+ let [n, r] = s(4, 0);
1153
+ e.circle(n, r, 4, {
1154
+ fill: t === "circle" ? i : "#ffffff",
1155
+ stroke: i,
1156
+ sw: 1.2
1157
+ });
1158
+ break;
1159
+ }
1160
+ case "cross":
1161
+ c(s(1, 5), s(11, -5)), c(s(1, -5), s(11, 5));
1162
+ break;
1163
+ case "one":
1164
+ case "zero-one":
1165
+ case "one-many":
1166
+ case "zero-many":
1167
+ case "many": {
1168
+ let n = t.endsWith("many");
1169
+ if (n && (c(s(0, 7), s(12, 0)), c(s(0, -7), s(12, 0))), (t === "one" || t === "one-many") && c(s(n ? 16 : 7, 6), s(n ? 16 : 7, -6)), t === "one" && c(s(12, 6), s(12, -6)), t === "zero-one" || t === "zero-many") {
1170
+ let [t, r] = s(n ? 20 : 17, 0);
1171
+ e.circle(t, r, 4.5, {
1172
+ fill: "#ffffff",
1173
+ stroke: i,
1174
+ sw: 1.2
1175
+ });
1176
+ }
1177
+ t === "zero-one" && c(s(7, 6), s(7, -6));
1178
+ break;
1179
+ }
1180
+ }
1181
+ }
1182
+ function te(e, t, n) {
1183
+ let r = t[t.length - 1], i = r.p[r.p.length - 1], a = j(r.c === "C" ? r.p[1] : t.length > 1 ? t[t.length - 2].p[t[t.length - 2].p.length - 1] : e, i);
1184
+ if (n) {
1185
+ let e = {
1186
+ x: i.x - a.x * n,
1187
+ y: i.y - a.y * n
1188
+ };
1189
+ if (r.p[r.p.length - 1] = e, r.c === "C") {
1190
+ let e = {
1191
+ x: r.p[1].x - a.x * Math.min(n, 6),
1192
+ y: r.p[1].y - a.y * Math.min(n, 6)
1193
+ }, t = Math.min(0, (e.x - r.p[0].x) * a.x + (e.y - r.p[0].y) * a.y);
1194
+ r.p[1] = {
1195
+ x: e.x - a.x * t,
1196
+ y: e.y - a.y * t
1197
+ };
1198
+ }
1199
+ }
1200
+ return a;
1201
+ }
1202
+ function M(e) {
1203
+ return e.color ?? u.line;
1204
+ }
1205
+ var N = 16, ne = 3e3, P = 6e3;
1206
+ function F(t) {
1207
+ if (!t.nodes.length) throw new g("The diagram has no nodes");
1208
+ if (t.nodes.length > ne || t.edges.length > P) throw new g(`The diagram is too large to draw (${t.nodes.length} nodes, ${t.edges.length} edges)`);
1209
+ let n = t.dir, o = n === "TB" || n === "BT", s = new p(), c = new Map(t.clusters.map((e, t) => [e.id, t])), l = new Map(t.nodes.map((e, t) => [e.id, t])), d = (e) => t.clusters[e].parent === void 0 ? -1 : c.get(t.clusters[e].parent) ?? -1, f = (e, n) => {
1210
+ for (let r = t.nodes[e].cluster === void 0 ? -1 : c.get(t.nodes[e].cluster) ?? -1; r >= 0; r = d(r)) if (r === n) return !0;
1211
+ return !1;
1212
+ }, h = (e, n) => {
1213
+ let r = l.get(e);
1214
+ if (r !== void 0) return r;
1215
+ let i = c.get(e);
1216
+ if (i === void 0) return -1;
1217
+ if (!n) return t.nodes.findIndex((e, t) => f(t, i));
1218
+ for (let e = t.nodes.length - 1; e >= 0; e--) if (f(e, i)) return e;
1219
+ return -1;
1220
+ }, _ = t.nodes.map((e) => E(e, n)), v = t.edges.map((e) => ({
1221
+ e,
1222
+ v: h(e.from, !0),
1223
+ w: h(e.to, !1),
1224
+ cv: l.has(e.from) ? -1 : c.get(e.from) ?? -1,
1225
+ cw: l.has(e.to) ? -1 : c.get(e.to) ?? -1
1226
+ })).filter((e) => e.v >= 0 && e.w >= 0), b = v.some((e) => e.e.label), x = (e) => e ? a(C(e), y) : void 0, S = /* @__PURE__ */ new Map();
1227
+ for (let { e, v: t, w: n } of v) {
1228
+ if (t !== n) continue;
1229
+ let r = x(e.label);
1230
+ S.set(t, Math.max(S.get(t) ?? 0, 40 + (r ? (o ? r.w : r.h) + 6 : 0)));
1231
+ }
1232
+ let w = t.nodes.map((e, t) => {
1233
+ let n = _[t], r = e.cluster === void 0 ? -1 : c.get(e.cluster) ?? -1, i = !!e.sections?.length || re.has(e.shape);
1234
+ return o ? {
1235
+ w: n.w,
1236
+ h: n.h,
1237
+ cluster: r,
1238
+ loop: S.get(t),
1239
+ spread: i
1240
+ } : {
1241
+ w: n.h,
1242
+ h: n.w,
1243
+ cluster: r,
1244
+ loop: S.get(t),
1245
+ spread: i
1246
+ };
1247
+ }), T = v.map(({ e, v: t, w: n }) => {
1248
+ let r = x(e.label), i = r ? {
1249
+ w: r.w + 8,
1250
+ h: r.h + 4
1251
+ } : void 0;
1252
+ return {
1253
+ v: t,
1254
+ w: n,
1255
+ minlen: (e.minlen ?? 1) * (b ? 2 : 1),
1256
+ weight: 1,
1257
+ label: i ? o ? i : {
1258
+ w: i.h,
1259
+ h: i.w
1260
+ } : void 0
1261
+ };
1262
+ }), D = t.clusters.map((e, t) => {
1263
+ let r = e.label ? a(C(e.label), y, !0) : {
1264
+ w: 0,
1265
+ h: 0
1266
+ }, i = 12 + (e.label ? r.h + 6 : 0), s = n === "TB" ? [
1267
+ 12,
1268
+ 12,
1269
+ i,
1270
+ 12
1271
+ ] : n === "BT" ? [
1272
+ 12,
1273
+ 12,
1274
+ 12,
1275
+ i
1276
+ ] : [
1277
+ i,
1278
+ 12,
1279
+ 12,
1280
+ 12
1281
+ ];
1282
+ return {
1283
+ parent: d(t),
1284
+ pad: s,
1285
+ minW: o ? r.w + 24 : r.h + i + 12
1286
+ };
1287
+ }), k = t.sameRank?.map((e) => e.map((e) => l.get(e)).filter((e) => e !== void 0)).filter((e) => e.length > 1), F = e(w, T, D, {
1288
+ nodesep: o ? 40 : 28,
1289
+ ranksep: (o ? 50 : 60) / (b ? 2 : 1),
1290
+ edgesep: 14,
1291
+ sameRank: k
1292
+ }), R = t.title ? 32 : 0, z = F.w, B = F.h, V = (e) => {
1293
+ let t = n === "TB" ? e : n === "BT" ? {
1294
+ x: e.x,
1295
+ y: B - e.y
1296
+ } : n === "LR" ? {
1297
+ x: e.y,
1298
+ y: e.x
1299
+ } : {
1300
+ x: B - e.y,
1301
+ y: e.x
1302
+ };
1303
+ return {
1304
+ x: t.x + N,
1305
+ y: t.y + N + R
1306
+ };
1307
+ }, H = (o ? z : B) + 32, ae = (o ? B : z) + 32 + R, U = (e) => {
1308
+ let t = 0;
1309
+ for (let n = d(e); n >= 0; n = d(n)) t++;
1310
+ return t;
1311
+ }, oe = t.clusters.map((e, t) => t).sort((e, t) => U(e) - U(t)), se = t.clusters.map(() => null), ce = [];
1312
+ for (let e of oe) {
1313
+ let r = F.clusters[e];
1314
+ if (!r) continue;
1315
+ let a = t.clusters[e], o = V({
1316
+ x: r.x,
1317
+ y: r.y
1318
+ }), c = V({
1319
+ x: r.x + r.w,
1320
+ y: r.y + r.h
1321
+ }), l = Math.min(o.x, c.x), d = Math.min(o.y, c.y), f = Math.abs(c.x - o.x), p = Math.abs(c.y - o.y), m = a.style ?? {};
1322
+ if (se[e] = {
1323
+ x: l,
1324
+ y: d,
1325
+ w: f,
1326
+ h: p
1327
+ }, s.rect(l, d, f, p, {
1328
+ fill: m.fill ?? u.cluster,
1329
+ stroke: m.stroke ?? u.clusterStroke,
1330
+ sw: m.sw ?? 1,
1331
+ dash: m.dash
1332
+ }, 4), a.label) {
1333
+ let e = C(a.label), t = n === "BT" ? d + p - 8 - e.length * i(y) / 2 : d + 8 + e.length * i(y) / 2;
1334
+ ce.push({
1335
+ x: l + f / 2,
1336
+ y: t,
1337
+ text: e,
1338
+ color: m.color ?? u.ink,
1339
+ bg: m.fill && m.fill !== "none" ? m.fill : u.cluster
1340
+ });
1341
+ }
1342
+ }
1343
+ let le = [];
1344
+ v.forEach(({ e, v: t }, n) => {
1345
+ if (e.line === "hidden") return;
1346
+ let r = M(e), i = {
1347
+ stroke: r,
1348
+ sw: e.sw ?? (e.line === "thick" ? 3 : 1.4),
1349
+ dash: e.line === "dashed" ? "6 4" : e.line === "dotted" ? "2 3" : void 0
1350
+ }, c = F.edges[n];
1351
+ if (!c) {
1352
+ if (v[n].v !== v[n].w) return;
1353
+ let c = V(F.nodes[t]), l = _[t], u, d, f, p, h;
1354
+ o ? (u = {
1355
+ x: c.x + l.w / 2,
1356
+ y: c.y - l.h / 4
1357
+ }, p = {
1358
+ x: c.x + l.w / 2,
1359
+ y: c.y + l.h / 4
1360
+ }, d = {
1361
+ x: u.x + 34,
1362
+ y: u.y - 12
1363
+ }, f = {
1364
+ x: p.x + 34,
1365
+ y: p.y + 12
1366
+ }, h = {
1367
+ x: c.x + l.w / 2 + 34,
1368
+ y: c.y
1369
+ }) : (u = {
1370
+ x: c.x - l.w / 4,
1371
+ y: c.y + l.h / 2
1372
+ }, p = {
1373
+ x: c.x + l.w / 4,
1374
+ y: c.y + l.h / 2
1375
+ }, d = {
1376
+ x: u.x - 12,
1377
+ y: u.y + 34
1378
+ }, f = {
1379
+ x: p.x + 12,
1380
+ y: p.y + 34
1381
+ }, h = {
1382
+ x: c.x,
1383
+ y: c.y + l.h / 2 + 34
1384
+ });
1385
+ let g = [{
1386
+ c: "C",
1387
+ p: [
1388
+ d,
1389
+ f,
1390
+ p
1391
+ ]
1392
+ }], b = e.head ?? "arrow", x = te(u, g, A[b] ?? 0);
1393
+ if (s.path(m([{
1394
+ c: "M",
1395
+ p: [u]
1396
+ }, ...g.map((e) => ({
1397
+ c: e.c,
1398
+ p: e.p
1399
+ }))]), i), ee(s, b, p, x, r), e.label) {
1400
+ let t = a(C(e.label), y);
1401
+ le.push({
1402
+ p: o ? {
1403
+ x: h.x + t.w / 2 + 4,
1404
+ y: h.y
1405
+ } : {
1406
+ x: h.x,
1407
+ y: h.y + t.h / 2 + 4
1408
+ },
1409
+ text: C(e.label)
1410
+ });
1411
+ }
1412
+ return;
1413
+ }
1414
+ let l = {
1415
+ start: V(c.start),
1416
+ segs: c.segs.map((e) => ({
1417
+ c: e.c,
1418
+ p: e.p.map(V)
1419
+ })),
1420
+ label: c.label && V(c.label)
1421
+ }, { cv: u, cw: d } = v[n];
1422
+ if (u >= 0 && !f(v[n].w, u) || d >= 0 && !f(v[n].v, d)) {
1423
+ let e = ie(l.start, l.segs);
1424
+ u >= 0 && se[u] && (e = L(e, se[u], !0)), d >= 0 && se[d] && (e = L(e, se[d], !1)), e.length > 1 && (l = {
1425
+ start: e[0],
1426
+ segs: e.slice(1).map((e) => ({
1427
+ c: "L",
1428
+ p: [e]
1429
+ })),
1430
+ label: l.label
1431
+ });
1432
+ }
1433
+ let p = e.head ?? "none", h = e.tail ?? "none", g = l.segs[l.segs.length - 1].p[l.segs[l.segs.length - 1].p.length - 1], b = te(l.start, l.segs, A[p] ?? 0), x = l.segs[0], S = j((x.c, x.p[0]), l.start), w = l.start, T = A[h] ?? 0, E = T ? {
1434
+ x: l.start.x - S.x * T,
1435
+ y: l.start.y - S.y * T
1436
+ } : l.start;
1437
+ if (T && x.c === "C") {
1438
+ let e = {
1439
+ x: x.p[0].x - S.x * Math.min(T, 6),
1440
+ y: x.p[0].y - S.y * Math.min(T, 6)
1441
+ }, t = Math.max(0, (x.p[1].x - e.x) * S.x + (x.p[1].y - e.y) * S.y);
1442
+ x.p[0] = {
1443
+ x: e.x + S.x * t,
1444
+ y: e.y + S.y * t
1445
+ };
1446
+ }
1447
+ if (s.path(m([{
1448
+ c: "M",
1449
+ p: [E]
1450
+ }, ...l.segs.map((e) => ({
1451
+ c: e.c,
1452
+ p: e.p
1453
+ }))]), i), p !== "none" && ee(s, p, g, b, r), h !== "none" && ee(s, h, w, S, r), e.label) {
1454
+ let t = l.label ?? I(l.start, g);
1455
+ le.push({
1456
+ p: t,
1457
+ text: C(e.label)
1458
+ });
1459
+ }
1460
+ let D = (e, t, n) => {
1461
+ let r = a(C(n), y), i = -t.y, o = t.x, s = Math.abs(i) * (r.w / 2 + 5) + Math.abs(o) * (r.h / 2 + 3);
1462
+ le.push({
1463
+ p: {
1464
+ x: e.x - t.x * (16 + r.h / 2) + i * s,
1465
+ y: e.y - t.y * (14 + r.h / 2) + o * s
1466
+ },
1467
+ text: C(n),
1468
+ plain: !0
1469
+ });
1470
+ };
1471
+ e.headLabel && D(g, b, e.headLabel), e.tailLabel && D(w, S, e.tailLabel);
1472
+ });
1473
+ for (let e of ce) {
1474
+ let t = a(e.text, y, !0);
1475
+ s.rect(e.x - t.w / 2 - 4, e.y - t.h / 2 - 1, t.w + 8, t.h + 2, { fill: e.bg }, 2), s.text(e.x, e.y, e.text, {
1476
+ anchor: "middle",
1477
+ size: y,
1478
+ bold: !0,
1479
+ color: e.color
1480
+ });
1481
+ }
1482
+ t.nodes.forEach((e, t) => {
1483
+ if (e.style?.hidden) return;
1484
+ let n = V(F.nodes[t]);
1485
+ O(s, e, _[t], n.x, n.y);
1486
+ });
1487
+ for (let e of le) {
1488
+ let t = a(e.text, y);
1489
+ e.plain || s.rect(e.p.x - t.w / 2 - 3, e.p.y - t.h / 2 - 1, t.w + 6, t.h + 2, {
1490
+ fill: u.label,
1491
+ opacity: .92
1492
+ }, 2), s.text(e.p.x, e.p.y, e.text, {
1493
+ anchor: "middle",
1494
+ size: y,
1495
+ color: e.color ?? u.ink
1496
+ });
1497
+ }
1498
+ return t.title && (H = Math.max(H, r(t.title, 16, !0) + 32), s.text(H / 2, 27, t.title, {
1499
+ anchor: "middle",
1500
+ size: 16,
1501
+ bold: !0
1502
+ })), {
1503
+ svg: s.toString(H, ae),
1504
+ w: Math.ceil(H),
1505
+ h: Math.ceil(ae)
1506
+ };
1507
+ }
1508
+ var I = (e, t) => ({
1509
+ x: (e.x + t.x) / 2,
1510
+ y: (e.y + t.y) / 2
1511
+ }), re = /* @__PURE__ */ new Set([
1512
+ "rect",
1513
+ "round",
1514
+ "subroutine",
1515
+ "component",
1516
+ "note",
1517
+ "folder",
1518
+ "box3d",
1519
+ "cylinder",
1520
+ "stadium",
1521
+ "cloud"
1522
+ ]);
1523
+ function ie(e, t) {
1524
+ let n = [e], r = e;
1525
+ for (let e of t) {
1526
+ if (e.c === "L") n.push(e.p[0]);
1527
+ else {
1528
+ let [t, i, a] = e.p;
1529
+ for (let e = 1; e <= 12; e++) {
1530
+ let o = e / 12, s = 1 - o;
1531
+ n.push({
1532
+ x: s * s * s * r.x + 3 * s * s * o * t.x + 3 * s * o * o * i.x + o * o * o * a.x,
1533
+ y: s * s * s * r.y + 3 * s * s * o * t.y + 3 * s * o * o * i.y + o * o * o * a.y
1534
+ });
1535
+ }
1536
+ }
1537
+ r = n[n.length - 1];
1538
+ }
1539
+ return n;
1540
+ }
1541
+ function L(e, t, n) {
1542
+ let r = (e) => e.x > t.x && e.x < t.x + t.w && e.y > t.y && e.y < t.y + t.h, i = n ? e : [...e].reverse(), a = i.findIndex((e) => !r(e));
1543
+ if (a <= 0) return e;
1544
+ let o = i[a - 1], s = i[a], c = 1, l = s.x - o.x, u = s.y - o.y;
1545
+ l > 0 && (c = Math.min(c, (t.x + t.w - o.x) / l)), l < 0 && (c = Math.min(c, (t.x - o.x) / l)), u > 0 && (c = Math.min(c, (t.y + t.h - o.y) / u)), u < 0 && (c = Math.min(c, (t.y - o.y) / u));
1546
+ let d = [{
1547
+ x: o.x + l * c,
1548
+ y: o.y + u * c
1549
+ }, ...i.slice(a)];
1550
+ return n ? d : d.reverse();
1551
+ }
1552
+ // src/core/diagram/dot.ts
1553
+ function R(e) {
1554
+ let t = [], n = e.length, r = 0, i = !0;
1555
+ for (; r < n;) {
1556
+ let a = e[r];
1557
+ if (a === "\n") {
1558
+ i = !0, r++;
1559
+ continue;
1560
+ }
1561
+ if (a === " " || a === " " || a === "\r" || a === "") {
1562
+ r++;
1563
+ continue;
1564
+ }
1565
+ if (i && a === "#" || (i = !1, a === "/" && e[r + 1] === "/")) {
1566
+ for (; r < n && e[r] !== "\n";) r++;
1567
+ continue;
1568
+ }
1569
+ if (a === "/" && e[r + 1] === "*") {
1570
+ let t = e.indexOf("*/", r + 2);
1571
+ r = t < 0 ? n : t + 2;
1572
+ continue;
1573
+ }
1574
+ if (a === "\"") {
1575
+ let i = "";
1576
+ for (r++; r < n && e[r] !== "\"";) e[r] === "\\" && e[r + 1] === "\"" ? (i += "\"", r += 2) : e[r] === "\\" && e[r + 1] === "\n" ? r += 2 : i += e[r++];
1577
+ r++;
1578
+ let a = t[t.length - 1], o = t[t.length - 2];
1579
+ a?.t === "p" && a.v === "+" && o?.t === "str" ? (t.pop(), o.v += i) : t.push({
1580
+ t: "str",
1581
+ v: i
1582
+ });
1583
+ continue;
1584
+ }
1585
+ if (a === "<") {
1586
+ let i = 0, a = r;
1587
+ for (; r < n; r++) if (e[r] === "<") i++;
1588
+ else if (e[r] === ">" && --i === 0) break;
1589
+ t.push({
1590
+ t: "html",
1591
+ v: e.slice(a + 1, r)
1592
+ }), r++;
1593
+ continue;
1594
+ }
1595
+ if (a === "-" && (e[r + 1] === ">" || e[r + 1] === "-")) {
1596
+ t.push({
1597
+ t: "p",
1598
+ v: e.slice(r, r + 2)
1599
+ }), r += 2;
1600
+ continue;
1601
+ }
1602
+ if ("{}[]=;,:+".includes(a)) {
1603
+ t.push({
1604
+ t: "p",
1605
+ v: a
1606
+ }), r++;
1607
+ continue;
1608
+ }
1609
+ let o = /^(-?(?:\.\d+|\d+(?:\.\d*)?)|[A-Za-z_\u0080-￿][\w\u0080-￿]*)/.exec(e.slice(r, r + 256));
1610
+ o ? (t.push({
1611
+ t: "id",
1612
+ v: o[0]
1613
+ }), r += o[0].length) : r++;
1614
+ }
1615
+ return t;
1616
+ }
1617
+ var z = {
1618
+ box: "rect",
1619
+ rect: "rect",
1620
+ rectangle: "rect",
1621
+ square: "rect",
1622
+ msquare: "rect",
1623
+ ellipse: "ellipse",
1624
+ oval: "ellipse",
1625
+ egg: "ellipse",
1626
+ circle: "circle",
1627
+ doublecircle: "doublecircle",
1628
+ point: "point",
1629
+ plaintext: "none",
1630
+ plain: "none",
1631
+ none: "none",
1632
+ underline: "none",
1633
+ diamond: "diamond",
1634
+ mdiamond: "diamond",
1635
+ hexagon: "hexagon",
1636
+ octagon: "octagon",
1637
+ doubleoctagon: "octagon",
1638
+ tripleoctagon: "octagon",
1639
+ triangle: "triangle",
1640
+ invtriangle: "triangle",
1641
+ parallelogram: "lean-r",
1642
+ trapezium: "trap-b",
1643
+ invtrapezium: "trap-t",
1644
+ house: "trap-b",
1645
+ invhouse: "trap-t",
1646
+ cylinder: "cylinder",
1647
+ note: "note",
1648
+ tab: "folder",
1649
+ folder: "folder",
1650
+ box3d: "box3d",
1651
+ component: "component",
1652
+ cds: "flag",
1653
+ larrow: "flag",
1654
+ rarrow: "flag",
1655
+ lpromoter: "flag",
1656
+ rpromoter: "flag",
1657
+ star: "circle",
1658
+ record: "rect",
1659
+ mrecord: "round",
1660
+ underlinebox: "rect"
1661
+ }, B = {
1662
+ normal: "arrow",
1663
+ inv: "arrow",
1664
+ empty: "triangle",
1665
+ onormal: "triangle",
1666
+ invempty: "triangle",
1667
+ oinv: "triangle",
1668
+ vee: "open",
1669
+ open: "open",
1670
+ halfopen: "open",
1671
+ diamond: "diamond",
1672
+ odiamond: "odiamond",
1673
+ ediamond: "odiamond",
1674
+ box: "diamond",
1675
+ obox: "odiamond",
1676
+ dot: "circle",
1677
+ odot: "ocircle",
1678
+ invdot: "circle",
1679
+ invodot: "ocircle",
1680
+ none: "none",
1681
+ crow: "many",
1682
+ tee: "one",
1683
+ curve: "open",
1684
+ icurve: "open"
1685
+ };
1686
+ function V(e, t) {
1687
+ if (!e) return t;
1688
+ let n = e.toLowerCase().replace(/^[lr](?=[a-z])/, "");
1689
+ return B[n] ?? B[n.replace(/^o/, "")] ?? t;
1690
+ }
1691
+ function H(e) {
1692
+ if (!e) return;
1693
+ let t = e.split(/[:;]/)[0].trim(), n = /^([\d.]+)[ ,]+([\d.]+)[ ,]+([\d.]+)$/.exec(t);
1694
+ if (n) {
1695
+ let [e, t, r] = [
1696
+ Number(n[1]),
1697
+ Number(n[2]),
1698
+ Number(n[3])
1699
+ ], i = (n) => {
1700
+ let i = (n + e * 6) % 6;
1701
+ return Math.round((r - r * t * Math.max(0, Math.min(i, 4 - i, 1))) * 255);
1702
+ };
1703
+ return "#" + [
1704
+ i(5),
1705
+ i(3),
1706
+ i(1)
1707
+ ].map((e) => e.toString(16).padStart(2, "0")).join("");
1708
+ }
1709
+ let r = t.replace(/^\/\w+\//, "").toLowerCase(), i = /^gr[ae]y(\d{1,3})$/.exec(r);
1710
+ if (i) {
1711
+ let e = Math.round(Math.min(100, Number(i[1])) * 255 / 100).toString(16).padStart(2, "0");
1712
+ return `#${e}${e}${e}`;
1713
+ }
1714
+ return l(/^[a-z]+\d+$/.test(r) ? r.replace(/\d+$/, "") : r);
1715
+ }
1716
+ function ae(e) {
1717
+ return h(e.replace(/<br\s*\/?>/gi, "\n").replace(/<\/tr>/gi, "\n").replace(/<\/td>\s*<td/gi, " <td").replace(/<[^>]+>/g, "").replace(/\n\s*\n/g, "\n")).split("\n").map((e) => e.trim()).filter(Boolean).join("\n");
1718
+ }
1719
+ function U(e, t, n = "") {
1720
+ return e.replace(/\\[nlr]/g, "\n").replace(/\\N/g, t).replace(/\\G/g, n).replace(/\\(.)/g, "$1").replace(/\n$/, "");
1721
+ }
1722
+ function oe(e, t) {
1723
+ return U(e, t).replace(/<[^>]*>/g, "").split(/[|{}]/).map((e) => e.trim()).filter(Boolean);
1724
+ }
1725
+ function se(e) {
1726
+ let t = R(e), n = 0, r = (e = 0) => t[n + e], i = (e, t = 0) => r(t)?.t === "p" && r(t).v === e, a = (e) => i(e) ? (n++, !0) : !1, o = (e) => r()?.t === "id" && r().v.toLowerCase() === e, s = [];
1727
+ for (; n < t.length;) {
1728
+ if (o("strict") && n++, !o("graph") && !o("digraph")) {
1729
+ n++;
1730
+ continue;
1731
+ }
1732
+ let e = r().v.toLowerCase() === "digraph";
1733
+ n++;
1734
+ let c = r()?.t === "p" ? "" : t[n++].v;
1735
+ if (!a("{")) throw new g("Graphviz: “{” expected after the graph name");
1736
+ let l = new _("TB", "ellipse"), u = /* @__PURE__ */ new Map(), d = [], f = [], p = 0, m = {}, h = /* @__PURE__ */ new Map(), v = () => {
1737
+ let e = {};
1738
+ for (; a("[");) {
1739
+ for (; n < t.length && !i("]");) {
1740
+ let r = t[n++];
1741
+ if (r.t !== "p") {
1742
+ if (a("=")) {
1743
+ let i = t[n++];
1744
+ i && (e[r.v.toLowerCase()] = i.t === "html" ? "<" + i.v + ">" : i.v);
1745
+ } else e[r.v.toLowerCase()] = "true";
1746
+ }
1747
+ }
1748
+ a("]");
1749
+ }
1750
+ return e;
1751
+ }, y = (e) => {
1752
+ let r = t[n++].v;
1753
+ for (; i(":");) n += 2;
1754
+ return u.has(r) ? e.cluster && l.get(r) && l.get(r).cluster === void 0 && (l.get(r).cluster = e.cluster) : (u.set(r, { ...e.node }), l.node(r, {}, e.cluster)), e.members.add(r), r;
1755
+ }, b = (e) => {
1756
+ for (; n < t.length && !i("}");) {
1757
+ if (a(";") || a(",")) continue;
1758
+ let s = r();
1759
+ if (s.t === "id" && [
1760
+ "graph",
1761
+ "node",
1762
+ "edge"
1763
+ ].includes(s.v.toLowerCase()) && i("[", 1)) {
1764
+ n++;
1765
+ let t = v(), r = s.v.toLowerCase();
1766
+ r === "node" ? Object.assign(e.node, t) : r === "edge" ? Object.assign(e.edge, t) : x(e, t);
1767
+ continue;
1768
+ }
1769
+ if (s.t !== "p" && i("=", 1)) {
1770
+ let r = s.v.toLowerCase();
1771
+ n += 2;
1772
+ let i = t[n++];
1773
+ x(e, { [r]: i ? i.t === "html" ? "<" + i.v + ">" : i.v : "" });
1774
+ continue;
1775
+ }
1776
+ let c = [];
1777
+ for (;;) {
1778
+ if (o("subgraph") || i("{")) c.push([...S(e)]);
1779
+ else if (r() && r().t !== "p") c.push([y(e)]);
1780
+ else {
1781
+ n++;
1782
+ break;
1783
+ }
1784
+ if (i("->") || i("--")) n++;
1785
+ else break;
1786
+ }
1787
+ let l = v();
1788
+ if (c.length === 1) {
1789
+ for (let e of c[0]) Object.keys(l).length && u.has(e) && Object.assign(u.get(e), l);
1790
+ continue;
1791
+ }
1792
+ let f = {
1793
+ ...e.edge,
1794
+ ...l
1795
+ };
1796
+ for (let e = 0; e + 1 < c.length; e++) for (let t of c[e]) for (let n of c[e + 1]) d.push({
1797
+ e: {
1798
+ from: t,
1799
+ to: n
1800
+ },
1801
+ attrs: f
1802
+ });
1803
+ }
1804
+ }, x = (e, t) => {
1805
+ e.cluster ? Object.assign(h.get(e.cluster), t) : e.name || Object.assign(m, t), t.rank && e.name !== void 0 && (e.rank = t.rank);
1806
+ }, S = (e) => {
1807
+ let i;
1808
+ o("subgraph") && (n++, r() && r().t !== "p" && (i = t[n++].v));
1809
+ let s = !!i && /^cluster/i.test(i), c = {
1810
+ node: { ...e.node },
1811
+ edge: { ...e.edge },
1812
+ cluster: e.cluster,
1813
+ members: /* @__PURE__ */ new Set(),
1814
+ name: i ?? `__anon${p++}`
1815
+ };
1816
+ if (s) {
1817
+ let t = `${i}`;
1818
+ l.cluster(t, "", e.cluster), h.set(t, {}), c.cluster = t;
1819
+ }
1820
+ a("{") && (b(c), a("}")), c.rank && /^(same|min|max|source|sink)$/.test(c.rank) && c.members.size > 1 && f.push([...c.members]);
1821
+ for (let t of c.members) e.members.add(t);
1822
+ return c.members;
1823
+ };
1824
+ b({
1825
+ node: {},
1826
+ edge: {},
1827
+ members: /* @__PURE__ */ new Set()
1828
+ }), a("}");
1829
+ let C = {
1830
+ LR: "LR",
1831
+ RL: "RL",
1832
+ BT: "BT",
1833
+ TB: "TB"
1834
+ }[(m.rankdir ?? "TB").toUpperCase()] ?? "TB";
1835
+ l.g.dir = C, m.label && (l.g.title = m.label.startsWith("<") ? ae(m.label.slice(1, -1)) : U(m.label, "", c));
1836
+ for (let e of l.g.nodes) ce(e, u.get(e.id) ?? {});
1837
+ for (let e of l.g.clusters) {
1838
+ let t = h.get(e.id) ?? {};
1839
+ e.label = t.label ? t.label.startsWith("<") ? ae(t.label.slice(1, -1)) : U(t.label, "", e.id) : "";
1840
+ let n = {}, r = (t.style ?? "").toLowerCase();
1841
+ r.includes("filled") ? n.fill = H(t.fillcolor ?? t.color ?? t.bgcolor) ?? "#d3d3d3" : t.bgcolor && (n.fill = H(t.bgcolor)), (t.color || t.pencolor) && (n.stroke = H(t.pencolor ?? t.color)), r.includes("dashed") && (n.dash = "6 4"), r.includes("dotted") && (n.dash = "2 3"), t.fontcolor && (n.color = H(t.fontcolor)), r.includes("invis") && (n.stroke = n.fill = "none"), e.style = n;
1842
+ }
1843
+ for (let { e: t, attrs: n } of d) l.g.edges.push(le(t, n, e));
1844
+ l.g.sameRank = f, s.push(l.g);
1845
+ }
1846
+ if (!s.length) throw new g("No “graph” or “digraph” found");
1847
+ return s;
1848
+ }
1849
+ function ce(e, t) {
1850
+ let n = (t.shape ?? "ellipse").toLowerCase();
1851
+ e.shape = z[n] ?? "ellipse";
1852
+ let r = t.label;
1853
+ if (r !== void 0) {
1854
+ if (r.startsWith("<") && r.endsWith(">")) e.label = ae(r.slice(1, -1));
1855
+ else if (n === "record" || n === "mrecord") {
1856
+ let t = oe(r, e.id);
1857
+ e.label = t.join("\n"), t.length > 1 && (e.sections = t.map((e) => ({
1858
+ rows: [[e]],
1859
+ center: !0
1860
+ })));
1861
+ } else e.label = U(r, e.id);
1862
+ }
1863
+ e.shape === "point" && (e.label = "");
1864
+ let i = {}, a = (t.style ?? "").toLowerCase();
1865
+ a.includes("filled") || t.fillcolor ? i.fill = H(t.fillcolor ?? t.color) ?? "#d3d3d3" : e.shape !== "point" && (i.fill = "#ffffff"), i.stroke = t.color ? H(t.color) : "#000000", t.fontcolor && (i.color = H(t.fontcolor)), a.includes("dashed") && (i.dash = "6 4"), a.includes("dotted") && (i.dash = "2 3"), a.includes("bold") && (i.sw = 2.4), t.penwidth && (i.sw = Math.min(8, Number(t.penwidth) || 1)), a.includes("invis") && (i.hidden = !0), a.includes("rounded") && e.shape === "rect" && (e.shape = "round"), e.shape === "none" && (i.fill = void 0), e.style = i;
1866
+ }
1867
+ function le(e, t, n) {
1868
+ let r = (t.style ?? "").toLowerCase(), i = (t.dir ?? (n ? "forward" : "none")).toLowerCase(), a = V(t.arrowhead, "arrow"), o = V(t.arrowtail, "arrow");
1869
+ e.head = i === "forward" || i === "both" ? a : "none", e.tail = i === "back" || i === "both" ? o : "none";
1870
+ let s = t.label ?? t.xlabel;
1871
+ return s && (e.label = s.startsWith("<") && s.endsWith(">") ? ae(s.slice(1, -1)) : U(s, "")), t.headlabel && (e.headLabel = U(t.headlabel, "")), t.taillabel && (e.tailLabel = U(t.taillabel, "")), e.line = r.includes("invis") ? "hidden" : r.includes("dashed") ? "dashed" : r.includes("dotted") ? "dotted" : r.includes("bold") ? "thick" : "solid", e.color = H(t.color) ?? "#000000", t.penwidth && (e.sw = Math.min(8, Number(t.penwidth) || 1)), t.minlen && (e.minlen = Math.max(1, Math.min(6, Math.round(Number(t.minlen)) || 1))), e;
1872
+ }
1873
+ // src/core/diagram/charts.ts
1874
+ var W = 16, G = (e) => Math.round(e * 100) / 100;
1875
+ function ue(e) {
1876
+ let t = e.slices.filter((e) => e.value > 0 && Number.isFinite(e.value));
1877
+ if (!t.length) throw Error("The pie chart has no values");
1878
+ let n = t.reduce((e, t) => e + t.value, 0), i = new p(), a = W + (e.title ? 36 : 0) + 130, o = (e) => u.series[e % u.series.length], s = -Math.PI / 2, c = (e, t) => ({
1879
+ x: 146 + Math.cos(e) * t,
1880
+ y: a + Math.sin(e) * t
1881
+ });
1882
+ t.forEach((e, t) => {
1883
+ let r = e.value / n, l = s + r * 2 * Math.PI;
1884
+ if (r >= .9999) i.circle(146, a, 130, {
1885
+ fill: o(t),
1886
+ stroke: "#ffffff",
1887
+ sw: 2
1888
+ });
1889
+ else {
1890
+ let e = c(s, 130), n = c(l, 130);
1891
+ i.path(`M${G(146)} ${G(a)} L${G(e.x)} ${G(e.y)} A130 130 0 ${+(r > .5)} 1 ${G(n.x)} ${G(n.y)} Z`, {
1892
+ fill: o(t),
1893
+ stroke: "#ffffff",
1894
+ sw: 2
1895
+ });
1896
+ }
1897
+ if (r >= .06) {
1898
+ let e = c((s + l) / 2, 85.8);
1899
+ i.text(e.x, e.y, `${Math.round(r * 1e3) / 10}%`, {
1900
+ anchor: "middle",
1901
+ size: 13,
1902
+ bold: !0,
1903
+ color: "#ffffff"
1904
+ });
1905
+ }
1906
+ s = l;
1907
+ });
1908
+ let l = a - t.length * 24 / 2 + 12, d = 0;
1909
+ t.forEach((t, n) => {
1910
+ let a = e.showData ? `${t.label} [${de(t.value)}]` : t.label;
1911
+ i.rect(306, l + n * 24 - 8, 16, 16, { fill: o(n) }, 3), i.text(330, l + n * 24, a), d = Math.max(d, r(a, 14));
1912
+ });
1913
+ let f = 330 + d + W, m = Math.max(a + 130, l + t.length * 24) + W;
1914
+ return e.title && (f = Math.max(f, r(e.title, 16, !0) + 32), i.text(f / 2, 28, e.title, {
1915
+ anchor: "middle",
1916
+ size: 16,
1917
+ bold: !0
1918
+ })), {
1919
+ svg: i.toString(f, m),
1920
+ w: Math.ceil(f),
1921
+ h: Math.ceil(m)
1922
+ };
1923
+ }
1924
+ var de = (e) => String(Number.isInteger(e) ? e : Math.round(e * 100) / 100), K = 36e5, q = 24 * K, J = (e) => String(e).padStart(2, "0");
1925
+ function fe(e) {
1926
+ let t = e.sections.flatMap((e) => e.tasks);
1927
+ if (!t.length) throw Error("The Gantt chart has no tasks");
1928
+ let n = Math.min(...t.map((e) => e.start)), i = Math.max(...t.map((e) => Math.max(e.end, e.start))), a = Math.max(i - n, K), s = Math.min(180, Math.max(0, ...e.sections.map((e) => r(e.name, 13, !0))) + 24), c = Math.max(560, Math.min(1100, t.length * 60)), l = c / a, d = e.title ? 36 : 0, f = W + s, m = W + d, h = (e) => f + (e - n) * l, g = new p(), _ = m + t.length * 28 + 24 + W + 6, v = [
1929
+ K,
1930
+ 3 * K,
1931
+ 6 * K,
1932
+ 12 * K,
1933
+ q,
1934
+ 2 * q,
1935
+ 7 * q,
1936
+ 14 * q,
1937
+ 30 * q,
1938
+ 91 * q,
1939
+ 365 * q
1940
+ ].find((e) => a / e <= 12) ?? 365 * q, y = Math.ceil(n / v) * v, b = (e) => {
1941
+ let t = new Date(e);
1942
+ return v < q ? `${J(t.getUTCHours())}:${J(t.getUTCMinutes())}` : v >= 365 * q ? String(t.getUTCFullYear()) : v >= 30 * q ? `${t.getUTCFullYear()}-${J(t.getUTCMonth() + 1)}` : `${t.getUTCFullYear()}-${J(t.getUTCMonth() + 1)}-${J(t.getUTCDate())}`;
1943
+ }, x = m + t.length * 28 + 4;
1944
+ for (let e = y; e <= i; e += v) {
1945
+ let t = h(e);
1946
+ g.line(t, m, t, x, {
1947
+ stroke: "#e3e6ec",
1948
+ sw: 1
1949
+ }), g.text(t, x + 12, b(e), {
1950
+ anchor: "middle",
1951
+ size: 11,
1952
+ color: u.muted
1953
+ });
1954
+ }
1955
+ let S = 0;
1956
+ e.sections.forEach((e, t) => {
1957
+ let n = u.series[t % u.series.length], i = m + S * 28;
1958
+ t % 2 == 0 && g.rect(W, i, s + c, e.tasks.length * 28, { fill: "#f6f7fa" }), e.name && g.text(22, i + e.tasks.length * 28 / 2, o([e.name], s - 12, 13, !0), {
1959
+ size: 13,
1960
+ bold: !0
1961
+ });
1962
+ for (let t of e.tasks) {
1963
+ let e = m + S * 28 + 14;
1964
+ if (t.milestone) {
1965
+ let n = h(t.start);
1966
+ g.poly([
1967
+ [n, e - 8],
1968
+ [n + 8, e],
1969
+ [n, e + 8],
1970
+ [n - 8, e]
1971
+ ], { fill: t.crit ? "#e5596b" : u.dark }), g.text(n + 14, e, t.name, { size: 12 });
1972
+ } else {
1973
+ let i = h(t.start), a = Math.max(3, h(t.end) - i), o = t.done ? "#c7ccd6" : n;
1974
+ g.rect(i, e - 9, a, 18, {
1975
+ fill: o,
1976
+ stroke: t.crit ? "#c0392b" : t.active ? u.dark : void 0,
1977
+ sw: t.crit || t.active ? 2 : 0
1978
+ }, 3);
1979
+ let s = r(t.name, 12);
1980
+ s + 10 < a ? g.text(i + a / 2, e, t.name, {
1981
+ anchor: "middle",
1982
+ size: 12,
1983
+ color: t.done ? u.ink : "#ffffff"
1984
+ }) : i + a + 6 + s < f + c + 200 ? g.text(i + a + 6, e, t.name, { size: 12 }) : g.text(i - 6, e, t.name, {
1985
+ anchor: "end",
1986
+ size: 12
1987
+ });
1988
+ }
1989
+ S++;
1990
+ }
1991
+ });
1992
+ let C = f + c + W;
1993
+ for (let e of t) C = Math.max(C, h(e.end) + 12 + r(e.name, 12) + W);
1994
+ return e.title && (C = Math.max(C, r(e.title, 16, !0) + 32), g.text(C / 2, 28, e.title, {
1995
+ anchor: "middle",
1996
+ size: 16,
1997
+ bold: !0
1998
+ })), {
1999
+ svg: g.toString(C, _),
2000
+ w: Math.ceil(C),
2001
+ h: Math.ceil(_)
2002
+ };
2003
+ }
2004
+ var pe = 44, me = 12;
2005
+ function Y(e, t) {
2006
+ let n = new p(), i = (e, t) => {
2007
+ let n = t === 0 ? 16 : t === 1 ? 14 : 13, r = o(e.label.split("\n"), 220, n, t === 0), i = a(r, n, t === 0), s = e.shape === "circle", c = Math.max(i.w, i.h) + 20;
2008
+ return {
2009
+ text: r,
2010
+ w: s ? c : i.w + (e.shape === "none" ? 8 : 24),
2011
+ h: s ? c : i.h + (e.shape === "none" ? 6 : 14),
2012
+ fs: n
2013
+ };
2014
+ }, s = (e, t, n) => {
2015
+ let r = i(e, t), a = e.children.map((e, r) => s(e, t + 1, t === 0 ? u.series[r % u.series.length] : n)), o = Math.max(r.h, a.reduce((e, t) => e + t.span, 0) + Math.max(0, a.length - 1) * me);
2016
+ return {
2017
+ n: e,
2018
+ w: r.w,
2019
+ h: r.h,
2020
+ text: r.text,
2021
+ x: 0,
2022
+ y: 0,
2023
+ color: n,
2024
+ depth: t,
2025
+ kids: a,
2026
+ span: o
2027
+ };
2028
+ }, c = s(e, 0, u.dark), l = [], d = [];
2029
+ if (c.kids.some((e) => e.n.side)) l = c.kids.filter((e) => e.n.side !== "left"), d = c.kids.filter((e) => e.n.side === "left");
2030
+ else if (c.kids.length > 3) {
2031
+ let e = c.kids.reduce((e, t) => e + t.span, 0), t = 0;
2032
+ for (let n of c.kids) t < e / 2 ? l.push(n) : d.push(n), t += n.span;
2033
+ } else l = c.kids;
2034
+ let f = (e, t, n, r) => {
2035
+ e.x = t;
2036
+ let i = n + (e.span - (e.kids.reduce((e, t) => e + t.span, 0) + Math.max(0, e.kids.length - 1) * me)) / 2;
2037
+ for (let n of e.kids) f(n, t + r * (e.w / 2 + pe + n.w / 2), i, r), i += n.span + me;
2038
+ e.y = e.kids.length ? (e.kids[0].y + e.kids[e.kids.length - 1].y) / 2 : n + e.span / 2;
2039
+ }, h = (e) => e.reduce((e, t) => e + t.span, 0) + Math.max(0, e.length - 1) * me, g = h(l), _ = h(d), v = Math.max(c.h, g, _), y = (v - g) / 2;
2040
+ for (let e of l) f(e, c.w / 2 + pe + e.w / 2, y, 1), y += e.span + me;
2041
+ y = (v - _) / 2;
2042
+ for (let e of d) f(e, -(c.w / 2 + pe + e.w / 2), y, -1), y += e.span + me;
2043
+ c.x = 0, c.y = v / 2;
2044
+ let b = Infinity, x = -Infinity, S = Infinity, C = -Infinity, w = [], T = (e) => {
2045
+ w.push(e), b = Math.min(b, e.x - e.w / 2), x = Math.max(x, e.x + e.w / 2), S = Math.min(S, e.y - e.h / 2), C = Math.max(C, e.y + e.h / 2), e.kids.forEach(T);
2046
+ };
2047
+ T(c);
2048
+ let E = t ? 36 : 0, D = W - b, O = W + E - S, k = (e) => ({
2049
+ x: e.x + D,
2050
+ y: e.y + O
2051
+ });
2052
+ for (let e of w) for (let t of e.kids) {
2053
+ let r = k(e), i = k(t), a = Math.sign(i.x - r.x) || 1, o = {
2054
+ x: r.x + a * e.w / 2,
2055
+ y: r.y
2056
+ }, s = {
2057
+ x: i.x - a * t.w / 2,
2058
+ y: i.y
2059
+ }, c = (o.x + s.x) / 2;
2060
+ n.path(m([{
2061
+ c: "M",
2062
+ p: [o]
2063
+ }, {
2064
+ c: "C",
2065
+ p: [
2066
+ {
2067
+ x: c,
2068
+ y: o.y
2069
+ },
2070
+ {
2071
+ x: c,
2072
+ y: s.y
2073
+ },
2074
+ s
2075
+ ]
2076
+ }]), {
2077
+ stroke: t.color,
2078
+ sw: Math.max(1.2, 3.2 - t.depth * .6)
2079
+ });
2080
+ }
2081
+ for (let e of w) {
2082
+ let t = k(e), r = e.depth === 0 ? 16 : e.depth === 1 ? 14 : 13, i = t.x - e.w / 2, a = t.y - e.h / 2, o = e.n.shape ?? (e.depth, "round"), s = e.depth === 0 ? u.dark : e.depth === 1 ? e.color : he(e.color), c = e.depth <= 1 ? "#ffffff" : u.ink;
2083
+ if (o === "none") n.line(i, a + e.h, i + e.w, a + e.h, {
2084
+ stroke: e.color,
2085
+ sw: 1.5
2086
+ }), n.text(t.x, t.y, e.text, {
2087
+ anchor: "middle",
2088
+ size: r
2089
+ });
2090
+ else {
2091
+ if (o === "circle") n.circle(t.x, t.y, e.w / 2, {
2092
+ fill: s,
2093
+ stroke: e.color,
2094
+ sw: 1.2
2095
+ });
2096
+ else if (o === "hexagon") {
2097
+ let r = e.h / 4;
2098
+ n.poly([
2099
+ [i + r, a],
2100
+ [i + e.w - r, a],
2101
+ [i + e.w, t.y],
2102
+ [i + e.w - r, a + e.h],
2103
+ [i + r, a + e.h],
2104
+ [i, t.y]
2105
+ ], {
2106
+ fill: s,
2107
+ stroke: e.color,
2108
+ sw: 1.2
2109
+ });
2110
+ } else n.rect(i, a, e.w, e.h, {
2111
+ fill: s,
2112
+ stroke: e.depth === 0 ? void 0 : e.color,
2113
+ sw: 1.2
2114
+ }, o === "rect" ? 2 : o === "cloud" ? e.h / 2 : 8);
2115
+ n.text(t.x, t.y, e.text, {
2116
+ anchor: "middle",
2117
+ size: r,
2118
+ bold: e.depth === 0,
2119
+ color: c
2120
+ });
2121
+ }
2122
+ }
2123
+ let A = x - b + 32, j = C - S + 32 + E;
2124
+ return t && (A = Math.max(A, r(t, 16, !0) + 32), n.text(A / 2, 28, t, {
2125
+ anchor: "middle",
2126
+ size: 16,
2127
+ bold: !0
2128
+ })), {
2129
+ svg: n.toString(A, j),
2130
+ w: Math.ceil(A),
2131
+ h: Math.ceil(j)
2132
+ };
2133
+ }
2134
+ function he(e) {
2135
+ let t = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);
2136
+ return t ? "#" + [
2137
+ t[1],
2138
+ t[2],
2139
+ t[3]
2140
+ ].map((e) => Math.round(parseInt(e, 16) * .22 + 198.9).toString(16).padStart(2, "0")).join("") : "#f1f3f7";
2141
+ }
2142
+ // src/core/diagram/sequence.ts
2143
+ var X = (e) => Math.round(e * 100) / 100, ge = class {
2144
+ s = {
2145
+ participants: [],
2146
+ events: []
2147
+ };
2148
+ ids = /* @__PURE__ */ new Map();
2149
+ participant(e, t = {}) {
2150
+ let n = this.ids.get(e);
2151
+ n || (n = {
2152
+ id: e,
2153
+ label: e,
2154
+ kind: "participant"
2155
+ }, this.ids.set(e, n), this.s.participants.push(n));
2156
+ for (let [e, r] of Object.entries(t)) r !== void 0 && (n[e] = r);
2157
+ return n;
2158
+ }
2159
+ has(e) {
2160
+ return this.ids.has(e);
2161
+ }
2162
+ push(e) {
2163
+ e.t === "msg" ? (this.participant(e.from), this.participant(e.to)) : e.t === "note" ? e.who.forEach((e) => this.participant(e)) : (e.t === "act" || e.t === "destroy") && this.participant(e.who), this.s.events.push(e);
2164
+ }
2165
+ }, _e = 14, Z = 13, ve = i(Z), Q = 16, ye = (e) => e ? e.split("\n") : [];
2166
+ function be(e) {
2167
+ let t = ye(e.label), n = a(t, _e);
2168
+ switch (e.kind) {
2169
+ case "actor": return {
2170
+ w: Math.max(44, n.w + 8),
2171
+ h: 44 + n.h,
2172
+ text: t
2173
+ };
2174
+ case "boundary":
2175
+ case "control":
2176
+ case "entity": return {
2177
+ w: Math.max(44, n.w + 8),
2178
+ h: 34 + n.h,
2179
+ text: t
2180
+ };
2181
+ case "database": return {
2182
+ w: Math.max(64, n.w + 24),
2183
+ h: n.h + 30,
2184
+ text: t
2185
+ };
2186
+ default: return {
2187
+ w: Math.max(64, n.w + 24),
2188
+ h: n.h + 18,
2189
+ text: t
2190
+ };
2191
+ }
2192
+ }
2193
+ function xe(e, t, n, r, a) {
2194
+ let o = t.fill ?? u.fill, s = {
2195
+ fill: o,
2196
+ stroke: u.stroke,
2197
+ sw: 1.3
2198
+ }, c = {
2199
+ fill: "none",
2200
+ stroke: u.dark,
2201
+ sw: 1.5
2202
+ }, l = (t) => e.text(r, t + n.text.length * i(_e) / 2, n.text, { anchor: "middle" }), d = r - n.w / 2;
2203
+ switch (t.kind) {
2204
+ case "actor":
2205
+ e.circle(r, a + 8, 7, {
2206
+ ...c,
2207
+ fill: o
2208
+ }), e.line(r, a + 15, r, a + 29, c).line(r - 11, a + 20, r + 11, a + 20, c), e.line(r, a + 29, r - 9, a + 41, c).line(r, a + 29, r + 9, a + 41, c), l(a + 44);
2209
+ return;
2210
+ case "boundary":
2211
+ e.circle(r + 4, a + 14, 12, s).line(r - 14, a + 4, r - 14, a + 24, c).line(r - 14, a + 14, r - 8, a + 14, c), l(a + 32);
2212
+ return;
2213
+ case "control":
2214
+ e.circle(r, a + 15, 12, s).poly([
2215
+ [r + 4, a - 1],
2216
+ [r - 2, a + 3],
2217
+ [r + 4, a + 7]
2218
+ ], c, !1), l(a + 32);
2219
+ return;
2220
+ case "entity":
2221
+ e.circle(r, a + 13, 12, s).line(r - 12, a + 27, r + 12, a + 27, c), l(a + 32);
2222
+ return;
2223
+ case "database": {
2224
+ let t = n.w, i = n.h;
2225
+ e.path(`M${X(d)} ${X(a + 6)} A${X(t / 2)} 6 0 0 1 ${X(d + t)} ${X(a + 6)} L${X(d + t)} ${X(a + i - 6)} A${X(t / 2)} 6 0 0 1 ${X(d)} ${X(a + i - 6)} Z`, s), e.path(`M${X(d)} ${X(a + 6)} A${X(t / 2)} 6 0 0 0 ${X(d + t)} ${X(a + 6)}`, {
2226
+ ...s,
2227
+ fill: "none"
2228
+ }), e.text(r, a + i / 2 + 3, n.text, { anchor: "middle" });
2229
+ return;
2230
+ }
2231
+ case "collections":
2232
+ e.rect(d + 4, a - 4, n.w, n.h, s, 3), e.rect(d, a, n.w, n.h, s, 3);
2233
+ break;
2234
+ case "queue":
2235
+ e.rect(d, a, n.w, n.h, s, n.h / 2);
2236
+ break;
2237
+ default: e.rect(d, a, n.w, n.h, s, 3);
2238
+ }
2239
+ e.text(r, a + n.h / 2, n.text, { anchor: "middle" });
2240
+ }
2241
+ function Se(e, t, n, r, i) {
2242
+ let a = u.line;
2243
+ switch (t) {
2244
+ case "filled":
2245
+ e.poly([
2246
+ [n, r],
2247
+ [n - i * 10, r - 4.5],
2248
+ [n - i * 10, r + 4.5]
2249
+ ], {
2250
+ fill: a,
2251
+ stroke: a,
2252
+ sw: 1
2253
+ });
2254
+ break;
2255
+ case "open":
2256
+ e.poly([
2257
+ [n - i * 10, r - 5],
2258
+ [n, r],
2259
+ [n - i * 10, r + 5]
2260
+ ], {
2261
+ stroke: a,
2262
+ sw: 1.4
2263
+ }, !1);
2264
+ break;
2265
+ case "half":
2266
+ e.poly([[n - i * 10, r - 5], [n, r]], {
2267
+ stroke: a,
2268
+ sw: 1.4
2269
+ }, !1);
2270
+ break;
2271
+ case "cross": e.line(n - 5 - i * 4, r - 5, n + 5 - i * 4, r + 5, {
2272
+ stroke: a,
2273
+ sw: 1.6
2274
+ }).line(n - 5 - i * 4, r + 5, n + 5 - i * 4, r - 5, {
2275
+ stroke: a,
2276
+ sw: 1.6
2277
+ });
2278
+ }
2279
+ }
2280
+ function Ce(e) {
2281
+ let t = e.participants;
2282
+ if (!t.length) throw new g("The sequence diagram has no participants");
2283
+ if (t.length > 300 || e.events.length > 8e3) throw new g("The sequence diagram is too large to draw");
2284
+ let n = new Map(t.map((e, t) => [e.id, t])), i = t.map(be), o = t.length, s = Array(o).fill(0);
2285
+ for (let e = 1; e < o; e++) s[e] = (i[e - 1].w + i[e].w) / 2 + 28;
2286
+ let c = 0, l = 0, d = (e, t, n) => {
2287
+ if (e > t && ([e, t] = [t, e]), e === t) return;
2288
+ let r = 0;
2289
+ for (let n = e + 1; n <= t; n++) r += s[n];
2290
+ if (r >= n) return;
2291
+ let i = (n - r) / (t - e);
2292
+ for (let n = e + 1; n <= t; n++) s[n] += i;
2293
+ }, f = (t) => e.autonumber ? r(String(t), 10) + 14 : 0, m = 0;
2294
+ for (let t of e.events) if (t.t === "msg") {
2295
+ m++;
2296
+ let e = n.get(t.from), a = n.get(t.to), s = Math.max(0, ...ye(t.text).map((e) => r(e, Z))) + f(m);
2297
+ e === a ? e + 1 < o ? d(e, e + 1, i[e + 1].w / 2 + s + 44) : l = Math.max(l, s + 44 - i[e].w / 2) : d(e, a, s + 30);
2298
+ } else if (t.t === "note") {
2299
+ let e = a(ye(t.text), Z).w + 20, r = t.who.map((e) => n.get(e)), s = Math.min(...r), u = Math.max(...r);
2300
+ t.pos === "over" ? s !== u && d(s, u, e - 50) : t.pos === "left" ? s > 0 ? d(s - 1, s, e + 16 + i[s - 1].w / 2) : c = Math.max(c, e + 16 - i[0].w / 2) : u + 1 < o ? d(u, u + 1, e + 16 + i[u + 1].w / 2) : l = Math.max(l, e + 16 - i[u].w / 2);
2301
+ }
2302
+ let h = [], _ = (() => {
2303
+ let t = 0, n = 0;
2304
+ for (let r of e.events) r.t === "block" ? n = Math.max(n, ++t) : r.t === "end" && (t = Math.max(0, t - 1));
2305
+ return n;
2306
+ })(), v = _ ? 12 + _ * 8 : 0;
2307
+ h[0] = Q + Math.max(i[0].w / 2, c + i[0].w / 2, v + 10);
2308
+ for (let e = 1; e < o; e++) h[e] = h[e - 1] + s[e];
2309
+ let y = h[o - 1] + Math.max(i[o - 1].w / 2, l + i[o - 1].w / 2, v + 10) + Q, b = Q + (e.title ? 34 : 0), x = Math.max(...i.map((e) => e.h)), S = b + x + 18, C = new p(), w = new p(), T = new p(), E = t.map(() => []), D = [], O = [], k = [], A = /* @__PURE__ */ new Map(), j = (e, t) => {
2310
+ for (let n of k) n.lo = Math.min(n.lo, e), n.hi = Math.max(n.hi, t);
2311
+ }, ee = (e, t) => {
2312
+ let n = E[e].length;
2313
+ return h[e] + (n ? t * 5 + (n - 1) * 5 : 0);
2314
+ }, te = (e, t) => E[e].push(t), M = (e, t) => {
2315
+ let n = E[e].pop();
2316
+ n !== void 0 && D.push({
2317
+ k: e,
2318
+ y0: n,
2319
+ y1: t,
2320
+ depth: E[e].length
2321
+ });
2322
+ };
2323
+ m = 0;
2324
+ for (let t of e.events) switch (t.t) {
2325
+ case "msg": {
2326
+ m++;
2327
+ let i = n.get(t.from), a = n.get(t.to), o = ye(t.text), s = o.length * ve, c = {
2328
+ stroke: u.line,
2329
+ sw: 1.4,
2330
+ dash: t.dashed ? "6 4" : void 0
2331
+ }, l = f(m);
2332
+ if (i === a) {
2333
+ S += s + 4;
2334
+ let n = ee(i, 1);
2335
+ w.poly([
2336
+ [n, S],
2337
+ [n + 34, S],
2338
+ [n + 34, S + 20],
2339
+ [n + 2, S + 20]
2340
+ ], c, !1), Se(w, t.head, n, S + 20, -1), T.text(n + 6 + l, S - 4 - s / 2, o, { size: Z }), e.autonumber && we(T, n, S, m), j(h[i] - 10, n + 34 + 6 + l + Math.max(...o.map((e) => r(e, Z)))), S += 20, t.activate && te(a, S), t.deactivate && M(i, S), S += 14;
2341
+ break;
2342
+ }
2343
+ S += s + 6;
2344
+ let d = a > i ? 1 : -1;
2345
+ t.activate && te(a, S);
2346
+ let p = ee(i, d), g = ee(a, -d);
2347
+ w.line(p, S, g, S, c), Se(w, t.head, g, S, d), t.both && Se(w, t.head, p, S, -d), T.text((p + g) / 2 + d * l / 2, S - 5 - s / 2, o, {
2348
+ anchor: "middle",
2349
+ size: Z
2350
+ }), e.autonumber && we(T, p, S, m), t.deactivate && M(i, S), j(Math.min(h[i], h[a]), Math.max(h[i], h[a])), S += 14;
2351
+ break;
2352
+ }
2353
+ case "act": {
2354
+ let e = n.get(t.who);
2355
+ t.on ? te(e, S - 6) : M(e, S - 6);
2356
+ break;
2357
+ }
2358
+ case "note": {
2359
+ let e = t.who.map((e) => n.get(e)), r = Math.min(...e), i = Math.max(...e), o = ye(t.text), s = a(o, Z), c = Math.max(s.w + 20, t.pos === "over" && r !== i ? h[i] - h[r] + 50 : 0, 60), l = s.h + 12;
2360
+ S += 6;
2361
+ let d = t.pos === "left" ? h[r] - 12 - c : t.pos === "right" ? h[i] + 12 : (h[r] + h[i]) / 2 - c / 2;
2362
+ T.poly([
2363
+ [d, S],
2364
+ [d + c - 8, S],
2365
+ [d + c, S + 8],
2366
+ [d + c, S + l],
2367
+ [d, S + l]
2368
+ ], {
2369
+ fill: u.note,
2370
+ stroke: u.noteStroke,
2371
+ sw: 1
2372
+ }), T.text(d + 10, S + l / 2, o, { size: Z }), j(d, d + c), S += l + 8;
2373
+ break;
2374
+ }
2375
+ case "block": {
2376
+ S += 10;
2377
+ let e = {
2378
+ kind: t.kind,
2379
+ label: t.label,
2380
+ fill: t.fill,
2381
+ y0: S,
2382
+ y1: S,
2383
+ lo: Infinity,
2384
+ hi: -Infinity,
2385
+ depth: k.length,
2386
+ elses: []
2387
+ };
2388
+ O.push(e), k.push(e), S += t.kind === "rect" ? 8 : 26;
2389
+ break;
2390
+ }
2391
+ case "else": {
2392
+ let e = k[k.length - 1];
2393
+ if (!e) break;
2394
+ S += 8, e.elses.push({
2395
+ y: S,
2396
+ label: t.label
2397
+ }), S += 24;
2398
+ break;
2399
+ }
2400
+ case "end": {
2401
+ let e = k.pop();
2402
+ if (!e) break;
2403
+ S += 10, e.y1 = S, S += 6;
2404
+ break;
2405
+ }
2406
+ case "divider": {
2407
+ S += 16;
2408
+ let e = a(ye(t.text), Z);
2409
+ T.line(Q / 2, S - 2, y - Q / 2, S - 2, {
2410
+ stroke: u.muted,
2411
+ sw: 1
2412
+ }).line(Q / 2, S + 2, y - Q / 2, S + 2, {
2413
+ stroke: u.muted,
2414
+ sw: 1
2415
+ }), t.text && (T.rect(y / 2 - e.w / 2 - 10, S - e.h / 2 - 4, e.w + 20, e.h + 8, {
2416
+ fill: "#ffffff",
2417
+ stroke: u.muted,
2418
+ sw: 1
2419
+ }, 3), T.text(y / 2, S, ye(t.text), {
2420
+ anchor: "middle",
2421
+ size: Z,
2422
+ bold: !0
2423
+ })), S += 22;
2424
+ break;
2425
+ }
2426
+ case "delay":
2427
+ S += 14, t.text && T.text(y / 2, S, ye(t.text), {
2428
+ anchor: "middle",
2429
+ size: Z,
2430
+ italic: !0,
2431
+ color: u.muted
2432
+ }), S += 18;
2433
+ break;
2434
+ case "space":
2435
+ S += t.h;
2436
+ break;
2437
+ case "destroy": {
2438
+ let e = n.get(t.who);
2439
+ S += 6, T.line(h[e] - 8, S - 8, h[e] + 8, S + 8, {
2440
+ stroke: "#c0392b",
2441
+ sw: 2
2442
+ }).line(h[e] - 8, S + 8, h[e] + 8, S - 8, {
2443
+ stroke: "#c0392b",
2444
+ sw: 2
2445
+ }), A.set(e, S), S += 14;
2446
+ break;
2447
+ }
2448
+ }
2449
+ for (let e = 0; e < o; e++) for (; E[e].length;) M(e, S);
2450
+ for (let e of k.splice(0)) e.y1 = S;
2451
+ S += 14;
2452
+ let N = e.footer !== !1, ne = S + (N ? x : 0) + Q;
2453
+ for (let e of O) {
2454
+ let t = 12 + (_ - e.depth) * 8;
2455
+ e.lo > e.hi && (e.lo = h[0], e.hi = h[o - 1]);
2456
+ let n = Math.max(4, e.lo - t), i = r(e.kind, 12, !0) + 16, a = [e.label ? i + 8 + r(`[${e.label}]`, 12) : i, ...e.elses.map((e) => 10 + r(`[${e.label}]`, 12))], s = Math.max(Math.min(y - 4, e.hi + t), e.kind === "rect" ? 0 : n + Math.max(...a) + 10);
2457
+ if (y = Math.max(y, s + 4), e.kind === "rect") {
2458
+ C.rect(n, e.y0, s - n, e.y1 - e.y0, { fill: e.fill ?? "rgba(200, 210, 230, 0.35)" }, 2);
2459
+ continue;
2460
+ }
2461
+ let c = {
2462
+ stroke: u.muted,
2463
+ sw: 1.2
2464
+ };
2465
+ w.rect(n, e.y0, s - n, e.y1 - e.y0, c);
2466
+ let l = i;
2467
+ w.poly([
2468
+ [n, e.y0],
2469
+ [n + l, e.y0],
2470
+ [n + l, e.y0 + 12],
2471
+ [n + l - 7, e.y0 + 19],
2472
+ [n, e.y0 + 19]
2473
+ ], {
2474
+ fill: "#eef0f4",
2475
+ stroke: u.muted,
2476
+ sw: 1.2
2477
+ }), w.text(n + 7, e.y0 + 10, e.kind, {
2478
+ size: 12,
2479
+ bold: !0
2480
+ }), e.label && w.text(n + l + 8, e.y0 + 11, `[${e.label}]`, {
2481
+ size: 12,
2482
+ color: u.ink,
2483
+ italic: !0
2484
+ });
2485
+ for (let t of e.elses) w.line(n, t.y, s, t.y, {
2486
+ ...c,
2487
+ dash: "5 4"
2488
+ }), t.label && w.text(n + 10, t.y + 12, `[${t.label}]`, {
2489
+ size: 12,
2490
+ italic: !0
2491
+ });
2492
+ }
2493
+ let P = new p(), F = b + x;
2494
+ for (let e = 0; e < o; e++) P.line(h[e], F, h[e], A.get(e) ?? (N ? S : S - 6), {
2495
+ stroke: "#9aa3b2",
2496
+ sw: 1,
2497
+ dash: "5 4"
2498
+ });
2499
+ P.raw(C.body());
2500
+ for (let e of D) {
2501
+ let t = h[e.k] - 5 + e.depth * 5;
2502
+ P.rect(t, e.y0, 10, Math.max(8, e.y1 - e.y0), {
2503
+ fill: "#f3f4f6",
2504
+ stroke: u.stroke,
2505
+ sw: 1
2506
+ });
2507
+ }
2508
+ return P.raw(w.body()), P.raw(T.body()), t.forEach((e, t) => {
2509
+ xe(P, e, i[t], h[t], b + x - i[t].h), N && !A.has(t) && xe(P, e, i[t], h[t], S);
2510
+ }), e.title && (y = Math.max(y, r(e.title, 16, !0) + 32), P.text(y / 2, 28, e.title, {
2511
+ anchor: "middle",
2512
+ size: 16,
2513
+ bold: !0
2514
+ })), {
2515
+ svg: P.toString(y, ne),
2516
+ w: Math.ceil(y),
2517
+ h: Math.ceil(ne)
2518
+ };
2519
+ }
2520
+ function we(e, t, n, i) {
2521
+ let a = Math.max(8, r(String(i), 10) / 2 + 4);
2522
+ e.circle(t, n, a, { fill: u.dark }), e.text(t, n, String(i), {
2523
+ anchor: "middle",
2524
+ size: 10,
2525
+ color: "#ffffff",
2526
+ bold: !0
2527
+ });
2528
+ }
2529
+ // src/core/diagram/model.ts
2530
+ function Te(e) {
2531
+ switch (e.t) {
2532
+ case "graph": return F(e.graph);
2533
+ case "sequence": return Ce(e.seq);
2534
+ case "pie": return ue(e.pie);
2535
+ case "gantt": return fe(e.gantt);
2536
+ case "tree": return Y(e.root, e.title);
2537
+ }
2538
+ }
2539
+ // src/core/diagram/plantuml.ts
2540
+ function Ee(e) {
2541
+ let t = e.replace(/^/, "").replace(/\r\n?/g, "\n"), n = [], r = /^[ \t]*@start(\w+)[^\n]*\n([\s\S]*?)^[ \t]*@end\1\b/gm, i;
2542
+ for (; i = r.exec(t);) n.push({
2543
+ kind: i[1].toLowerCase(),
2544
+ lines: i[2].split("\n")
2545
+ });
2546
+ return n.length || n.push({
2547
+ kind: "uml",
2548
+ lines: t.split("\n")
2549
+ }), n;
2550
+ }
2551
+ function De(e) {
2552
+ return Ee(e).map(({ kind: e, lines: t }) => ke(e, t));
2553
+ }
2554
+ var Oe = (e) => De(e).map(Te);
2555
+ function ke(e, t) {
2556
+ if (e === "dot") return {
2557
+ t: "graph",
2558
+ graph: se(t.join("\n"))[0]
2559
+ };
2560
+ let { lines: n, title: r, dir: i } = Ae(t);
2561
+ switch (e) {
2562
+ case "uml": break;
2563
+ case "mindmap":
2564
+ case "wbs": return {
2565
+ t: "tree",
2566
+ root: We(n, e === "wbs"),
2567
+ title: r
2568
+ };
2569
+ default: throw new g(`PlantUML @start${e} diagrams are not supported yet`);
2570
+ }
2571
+ switch (je(n)) {
2572
+ case "activity": return {
2573
+ t: "graph",
2574
+ graph: {
2575
+ ...Ue(n),
2576
+ title: r
2577
+ }
2578
+ };
2579
+ case "sequence": return {
2580
+ t: "sequence",
2581
+ seq: {
2582
+ ...Ne(n),
2583
+ title: r
2584
+ }
2585
+ };
2586
+ case "state": return {
2587
+ t: "graph",
2588
+ graph: {
2589
+ ...He(n, i),
2590
+ title: r
2591
+ }
2592
+ };
2593
+ default: return {
2594
+ t: "graph",
2595
+ graph: {
2596
+ ...Ve(n, i),
2597
+ title: r
2598
+ }
2599
+ };
2600
+ }
2601
+ }
2602
+ function $(e) {
2603
+ return h(e.trim().replace(/^"(.*)"$/s, "$1").replace(/\*\*(.+?)\*\*|\/\/(.+?)\/\/|""(.+?)""|__(.+?)__|~~(.+?)~~|--(.+?)--/g, (...e) => e.slice(1, 7).find((e) => e !== void 0) ?? "").replace(/<\/?(?:b|i|u|s|font|color|size|back|code|plain|strike|w|sub|sup)\b[^>]*>/gi, "").replace(/<&[\w-]+>/g, "").replace(/\\t/g, " "));
2604
+ }
2605
+ function Ae(e) {
2606
+ let t = [], n, r, i = null, a = null, o = !1;
2607
+ for (let s of e) {
2608
+ if (o) {
2609
+ let e = s.indexOf("'/");
2610
+ if (e < 0) continue;
2611
+ s = s.slice(e + 2), o = !1;
2612
+ }
2613
+ s = s.replace(/\/'.*?'\//g, "");
2614
+ let e = s.indexOf("/'");
2615
+ e >= 0 && (s = s.slice(0, e), o = !0);
2616
+ let c = s.trim();
2617
+ if (i) {
2618
+ i.test(c) && (i = null);
2619
+ continue;
2620
+ }
2621
+ if (a) {
2622
+ /^end\s*title$/i.test(c) ? (n = $(a.join("\n")), a = null) : a.push(c);
2623
+ continue;
2624
+ }
2625
+ if (!c || c.startsWith("'")) continue;
2626
+ let l;
2627
+ /^skinparam\b.*\{$/i.test(c) || /^(legend|header|footer)\b(?!.*:)/i.test(c) && !/^(header|footer)\s+\S/i.test(c) ? i = /^(\}|end\s*legend|endlegend|end\s*header|endheader|end\s*footer|endfooter)$/i : /^(skinparam|!|hide|show|scale|caption|header|footer|newpage|allowmixing|autoactivate|set\s+namespaceSeparator|page|mainframe|sprite|remove|restore|together|left\s+header|right\s+footer)\b/i.test(c) || ((l = /^title\s*:?\s*(.*)$/i.exec(c)) ? l[1] ? n = $(l[1]) : a = [] : /^left\s+to\s+right\s+direction$/i.test(c) ? r = "LR" : /^top\s+to\s+bottom\s+direction$/i.test(c) ? r = "TB" : t.push(c));
2628
+ }
2629
+ return {
2630
+ lines: t,
2631
+ title: n,
2632
+ dir: r
2633
+ };
2634
+ }
2635
+ function je(e) {
2636
+ let t = (t) => e.some((e) => t.test(e));
2637
+ return t(/^(start|stop)$/) || t(/^:[\s\S]*[;|<>/\]}]$/) || t(/^:/) || t(/^(if\s*\(.*\)\s*then|while\s*\(|repeat\b|fork$|endif$)/) ? "activity" : t(/\[\*\]/) || t(/^state\s/) ? "state" : t(/^(participant|boundary|control|collections|queue|autonumber|activate|deactivate|alt|loop|return|ref\s+over)\b/) || t(/^(==.*==|\.\.\.|\|\|\d*\|\|)$/) ? "sequence" : t(/^(abstract|class|interface|enum|annotation|struct|protocol|object|map|json|usecase|component|node|cloud|package|namespace|folder|frame|rectangle|artifact|storage|card|file|agent|person|hexagon|together)\b/) || t(/\([^)]*\)|\[[^\]*]+\]|<\|--|--\|>|\*--|o--|\.\.>/) ? "description" : t(/^(actor|database|entity)\b/) || t(/^\S+\s*<?-{1,2}>?>?\s*\S+\s*:/) ? "sequence" : "description";
2638
+ }
2639
+ var Me = {
2640
+ participant: "participant",
2641
+ actor: "actor",
2642
+ boundary: "boundary",
2643
+ control: "control",
2644
+ entity: "entity",
2645
+ database: "database",
2646
+ collections: "collections",
2647
+ queue: "queue"
2648
+ };
2649
+ function Ne(e) {
2650
+ let t = new ge(), n = [], r = null, i = null, a = null, o = (e) => e.trim().replace(/^"(.*)"$/, "$1");
2651
+ for (let s of e) {
2652
+ if (r) {
2653
+ /^end\s*(note|ref|rnote|hnote)$/i.test(s) ? (i && i.who.length && t.push({
2654
+ t: "note",
2655
+ pos: i.pos,
2656
+ who: i.who,
2657
+ text: $(r.join("\n"))
2658
+ }), r = null) : r.push(s);
2659
+ continue;
2660
+ }
2661
+ let e;
2662
+ if (e = /^(?:create\s+)?(participant|actor|boundary|control|entity|database|collections|queue)\s+(.+)$/.exec(s)) {
2663
+ let n = e[2].replace(/\s+order\s+-?\d+/, "").trim(), r = /\s+(#\w+)\s*$/.exec(n);
2664
+ r && (n = n.slice(0, r.index).trim()), n = n.replace(/<<[^>]*>>/g, "").trim();
2665
+ let i = n, a = n, s = /^"([^"]+)"\s+as\s+(\S+)$/.exec(n), c = /^(\S+)\s+as\s+"?([^"]+)"?$/.exec(n);
2666
+ s ? [i, a] = [s[2], s[1]] : c ? [i, a] = [c[1], c[2]] : i = a = o(n), t.participant(i, {
2667
+ kind: Me[e[1].toLowerCase()],
2668
+ label: $(a),
2669
+ fill: r ? l(r[1].slice(1)) ?? l(r[1]) : void 0
2670
+ });
2671
+ continue;
2672
+ }
2673
+ if (/^hide\s+footbox$/i.test(s)) {
2674
+ t.s.footer = !1;
2675
+ continue;
2676
+ }
2677
+ if (/^autonumber\b/i.test(s)) {
2678
+ t.s.autonumber = !/\bstop\b/i.test(s);
2679
+ continue;
2680
+ }
2681
+ if (e = /^(activate|deactivate|destroy)\s+(\S+)/i.exec(s)) {
2682
+ let n = o(e[2]);
2683
+ e[1].toLowerCase() === "destroy" ? t.push({
2684
+ t: "destroy",
2685
+ who: n
2686
+ }) : t.push({
2687
+ t: "act",
2688
+ who: n,
2689
+ on: e[1].toLowerCase() === "activate"
2690
+ });
2691
+ continue;
2692
+ }
2693
+ if (e = /^return\b\s*(.*)$/i.exec(s)) {
2694
+ let r = n.pop() ?? (a ? {
2695
+ from: a.from,
2696
+ to: a.to
2697
+ } : null);
2698
+ r && t.push({
2699
+ t: "msg",
2700
+ from: r.to,
2701
+ to: r.from,
2702
+ text: $(e[1]),
2703
+ dashed: !0,
2704
+ head: "filled",
2705
+ deactivate: !0
2706
+ });
2707
+ continue;
2708
+ }
2709
+ if ((e = /^[rh]?note\s+(left|right|over)(?:\s+of)?\s*([^:]*?)\s*(?:#\w+)?\s*(?::\s*(.*))?$/i.exec(s)) || (e = /^ref\s+over\s+()([^:]+?)\s*(?::\s*(.*))?$/i.exec(s))) {
2710
+ let n = (e[1] || "over").toLowerCase(), s = e[2] ? e[2].split(",").map(o).filter(Boolean) : [];
2711
+ !s.length && a && (s = [n === "left" ? a.from : a.to]), !s.length && t.s.participants.length && (s = [t.s.participants[0].id]), e[3] === void 0 ? (r = [], i = {
2712
+ pos: n,
2713
+ who: s
2714
+ }) : s.length && t.push({
2715
+ t: "note",
2716
+ pos: n,
2717
+ who: s,
2718
+ text: $(e[3])
2719
+ });
2720
+ continue;
2721
+ }
2722
+ if (e = /^note\s+across\s*:\s*(.*)$/i.exec(s)) {
2723
+ let n = t.s.participants;
2724
+ n.length && t.push({
2725
+ t: "note",
2726
+ pos: "over",
2727
+ who: [n[0].id, n[n.length - 1].id],
2728
+ text: $(e[1])
2729
+ });
2730
+ continue;
2731
+ }
2732
+ if (e = /^(alt|opt|loop|par|break|critical|group)\b\s*(.*)$/i.exec(s)) {
2733
+ let n = e[1].toLowerCase();
2734
+ t.push({
2735
+ t: "block",
2736
+ kind: n === "group" ? $(e[2]) || "group" : n,
2737
+ label: n === "group" ? "" : $(e[2])
2738
+ });
2739
+ continue;
2740
+ }
2741
+ if (e = /^else\b\s*(.*)$/i.exec(s)) {
2742
+ t.push({
2743
+ t: "else",
2744
+ label: $(e[1])
2745
+ });
2746
+ continue;
2747
+ }
2748
+ if (/^end$/i.test(s)) {
2749
+ t.push({ t: "end" });
2750
+ continue;
2751
+ }
2752
+ if (/^(box\b|end\s*box)/i.test(s)) continue;
2753
+ if (e = /^==\s*(.*?)\s*==$/.exec(s)) {
2754
+ t.push({
2755
+ t: "divider",
2756
+ text: $(e[1])
2757
+ });
2758
+ continue;
2759
+ }
2760
+ if (e = /^\.\.\.\s*(.*?)\s*(?:\.\.\.)?$/.exec(s)) {
2761
+ t.push({
2762
+ t: "delay",
2763
+ text: $(e[1])
2764
+ });
2765
+ continue;
2766
+ }
2767
+ if ((e = /^\|\|(\d*)\|\|$/.exec(s)) || s === "|||") {
2768
+ t.push({
2769
+ t: "space",
2770
+ h: e?.[1] ? Math.min(400, Number(e[1])) : 20
2771
+ });
2772
+ continue;
2773
+ }
2774
+ let c = Fe(s);
2775
+ if (c) {
2776
+ let { from: e, to: r, dashed: i, head: o, both: s, act: l, text: u } = c;
2777
+ t.push({
2778
+ t: "msg",
2779
+ from: e,
2780
+ to: r,
2781
+ text: u,
2782
+ dashed: i,
2783
+ head: o,
2784
+ both: s,
2785
+ activate: l === "++",
2786
+ deactivate: l === "--"
2787
+ }), a = {
2788
+ from: e,
2789
+ to: r
2790
+ }, l === "++" && n.push({
2791
+ from: e,
2792
+ to: r
2793
+ }), l === "--" && n.length && n.pop(), l === "**" && t.participant(r), l === "!!" && t.push({
2794
+ t: "destroy",
2795
+ who: r
2796
+ });
2797
+ }
2798
+ }
2799
+ return t.s;
2800
+ }
2801
+ var Pe = /^(\[|\]|[\w.$À-￿]+|"[^"]+")?\s*(<<?|[\\/]{1,2})?(-{1,2}|\.{1,2})(?:\[[^\]]*\])?(-?)(>>?|[\\/]{1,2})?\s*([ox])?\s*(\[|\]|[\w.$À-￿]+|"[^"]+")?\s*(\+\+|--|\*\*|!!)?\s*(?::\s*(.*))?$/u;
2802
+ function Fe(e) {
2803
+ let t = Pe.exec(e.replace(/^(\S+)\s*([ox])(?=<|-)/, "$1 "));
2804
+ if (!t) return null;
2805
+ let [, n, r, i, , a, , o, s, c] = t;
2806
+ if (!r && !a || !n || !o) return null;
2807
+ let l = (e) => e.replace(/^"(.*)"$/, "$1"), u = l(n), d = l(o);
2808
+ if (u === "[" || u === "]" || d === "[" || d === "]") return null;
2809
+ let f = i === "--" || i.startsWith("."), p = (e) => e ? e === ">>" || e === "<<" ? "open" : e.length && /[\\/]/.test(e) ? "half" : "filled" : "none", m, h = !1;
2810
+ return r && a ? (m = p(a), h = !0) : r ? ([u, d] = [d, u], m = p(r)) : m = p(a), /x\s*$/.test(e.split(":")[0].replace(o, "").trim()) && !r && (m = "cross"), {
2811
+ from: u,
2812
+ to: d,
2813
+ dashed: f,
2814
+ head: m,
2815
+ both: h,
2816
+ act: s,
2817
+ text: $(c ?? "")
2818
+ };
2819
+ }
2820
+ var Ie = {
2821
+ actor: "actor",
2822
+ person: "actor",
2823
+ usecase: "ellipse",
2824
+ component: "component",
2825
+ node: "box3d",
2826
+ database: "cylinder",
2827
+ cloud: "cloud",
2828
+ folder: "folder",
2829
+ frame: "folder",
2830
+ package: "folder",
2831
+ artifact: "note",
2832
+ file: "note",
2833
+ storage: "stadium",
2834
+ queue: "stadium",
2835
+ stack: "rect",
2836
+ card: "rect",
2837
+ rectangle: "rect",
2838
+ agent: "rect",
2839
+ label: "none",
2840
+ boundary: "circle",
2841
+ control: "circle",
2842
+ entity: "rect",
2843
+ collections: "rect",
2844
+ hexagon: "hexagon",
2845
+ interface: "rect",
2846
+ circle: "circle",
2847
+ port: "point",
2848
+ portin: "point",
2849
+ portout: "point",
2850
+ action: "rect",
2851
+ process: "round",
2852
+ usecase_: "ellipse",
2853
+ object: "rect",
2854
+ map: "rect",
2855
+ json: "rect",
2856
+ diamond: "diamond",
2857
+ state: "round"
2858
+ }, Le = /* @__PURE__ */ new Set([
2859
+ "class",
2860
+ "abstract",
2861
+ "abstract class",
2862
+ "interface",
2863
+ "enum",
2864
+ "annotation",
2865
+ "struct",
2866
+ "protocol",
2867
+ "entity",
2868
+ "exception",
2869
+ "metaclass",
2870
+ "stereotype",
2871
+ "object",
2872
+ "map",
2873
+ "json"
2874
+ ]), Re = {
2875
+ ">": "arrow",
2876
+ "<": "arrow",
2877
+ "|>": "triangle",
2878
+ "<|": "triangle",
2879
+ "^": "triangle",
2880
+ "*": "diamond",
2881
+ o: "odiamond",
2882
+ "#": "odiamond",
2883
+ x: "cross",
2884
+ "+": "ocircle",
2885
+ "{": "many",
2886
+ "}": "many",
2887
+ ">>": "open",
2888
+ "<<": "open",
2889
+ "|o": "zero-one",
2890
+ "o|": "zero-one",
2891
+ "||": "one",
2892
+ "}o": "zero-many",
2893
+ "o{": "zero-many",
2894
+ "}|": "one-many",
2895
+ "|{": "one-many"
2896
+ }, ze = String.raw`\[\*\]|\[[^\]]+\]|\([^)]*\)|:[^:]+:|"[^"]+"|\(\)\s*"[^"]+"|\(\)\s*[\w.]+|[\w.$À-￿-]+`, Be = new RegExp(String.raw`^(${ze})\s*(?:"([^"]*)"\s*)?((?:<\||<<|\}o|\}\||\|o|\|\||[<*o#x+^}])?)([-.=~]+)(?:\[([^\]]*)\])?((?:up|down|left|right|u|d|l|r|le|ri|do)?)([-.=~]*)(?:\[([^\]]*)\])?((?:\|>|>>|o\{|\|\{|o\||\|\||[>*#+^{]|[ox](?=\s|\[|\(|"|:|$))?)\s*(?:"([^"]*)"\s*)?(${ze})\s*(?::\s*(.*))?$`, "u");
2897
+ function Ve(e, t) {
2898
+ let n = new _(t ?? "TB", "rect"), r = /* @__PURE__ */ new Map(), i = [], a = [], o = null, s = null, c, u = "", d = 0, f = 0, p = () => i[i.length - 1], m = (e) => {
2899
+ let t = e.trim(), r;
2900
+ return t === "(*)" ? "start" : (r = /^\[(.+)\]$/.exec(t)) ? h(r[1], "component") : (r = /^\((.*)\)$/.exec(t)) ? h(r[1], "ellipse") : (r = /^:(.+):$/.exec(t)) ? h(r[1], "actor") : (r = /^\(\)\s*"?([^"]+)"?$/.exec(t)) ? h(r[1], "circle") : (t = t.replace(/^"(.*)"$/, "$1"), !n.has(t) && !n.isCluster(t) && n.node(t, { label: $(t) }, p()), t);
2901
+ }, h = (e, t) => {
2902
+ let r = e.trim();
2903
+ return !n.has(r) && !n.isCluster(r) && n.node(r, {
2904
+ label: $(r),
2905
+ shape: t
2906
+ }, p()), r;
2907
+ };
2908
+ for (let t of e) {
2909
+ if (s) {
2910
+ /^end\s*note$/i.test(t) ? (n.node(u, {
2911
+ label: $(s.join("\n")),
2912
+ shape: "note",
2913
+ style: {
2914
+ fill: "#fff6c8",
2915
+ stroke: "#c9a227"
2916
+ }
2917
+ }, p()), c && n.edge({
2918
+ from: c,
2919
+ to: u,
2920
+ line: "dashed",
2921
+ head: "none"
2922
+ }), s = null) : s.push(t);
2923
+ continue;
2924
+ }
2925
+ if (o) {
2926
+ if (t === "}") {
2927
+ o = null;
2928
+ continue;
2929
+ }
2930
+ /^(--|==|\.\.|__)(.*?)(--|==|\.\.|__)?$/.test(t) ? o.c.sections.push([]) : o.c.sections[o.c.sections.length - 1].push($(t.replace(/\{(static|abstract|classifier|field|method)\}\s*/g, "")));
2931
+ continue;
2932
+ }
2933
+ let e;
2934
+ if (t === "}" || /^end\s*(package|namespace|rectangle|node|folder|frame|together)$/i.test(t)) i.pop(), a.pop();
2935
+ else if (e = /^note\s+(left|right|top|bottom)(?:\s+of)?\s+(\S+?)\s*(?:#\w+)?\s*(?::\s*(.*))?$/i.exec(t)) {
2936
+ let t = m(e[2]), r = `__note${d++}`;
2937
+ e[3] === void 0 ? (s = [], c = t, u = r) : (n.node(r, {
2938
+ label: $(e[3]),
2939
+ shape: "note",
2940
+ style: {
2941
+ fill: "#fff6c8",
2942
+ stroke: "#c9a227"
2943
+ }
2944
+ }, p()), n.edge({
2945
+ from: t,
2946
+ to: r,
2947
+ line: "dashed",
2948
+ head: "none"
2949
+ }));
2950
+ } else if (e = /^note\s+"([^"]*)"\s+as\s+(\S+)$/i.exec(t)) n.node(e[2], {
2951
+ label: $(e[1]),
2952
+ shape: "note",
2953
+ style: {
2954
+ fill: "#fff6c8",
2955
+ stroke: "#c9a227"
2956
+ }
2957
+ }, p());
2958
+ else if (e = /^note\s+as\s+(\S+)$/i.exec(t)) s = [], c = void 0, u = e[1];
2959
+ else if (e = /^(package|namespace|rectangle|node|folder|frame|cloud|database|component|card|storage|artifact|file|stack|queue|agent|hexagon|together)\s*(?:"([^"]*)"|([^\s{<#]+))?\s*(?:as\s+(\S+))?\s*(<<[^>]*>>)?\s*(#\S+)?\s*\{$/.exec(t)) {
2960
+ let t = e[1].toLowerCase(), r = e[2] ?? e[3] ?? "", o = e[4] ?? (e[3] || e[2] || `__group${f++}`), s = n.cluster(o, t === "together" ? "" : $(r), p()), c = e[6] ? l(e[6].slice(1)) ?? l(e[6]) : void 0;
2961
+ c && (s.style = { fill: c }), t === "together" && (s.style = {
2962
+ fill: "none",
2963
+ stroke: "none"
2964
+ }), i.push(o), a.push(t);
2965
+ } else if ((e = /^(abstract\s+class|abstract|class|interface|enum|annotation|struct|protocol|entity|exception|metaclass|stereotype|object|map|json)\s+(?:"([^"]+)"\s+as\s+(\S+)|(\S+)\s+as\s+"([^"]+)"|([^\s{<#]+))(?:\s*<([^>]+)>)?\s*(<<.+?>>)?\s*(#\S+)?\s*(\{)?\s*(\})?$/.exec(t)) && Le.has(e[1].toLowerCase().replace(/\s+/, " "))) {
2966
+ let t = e[1].toLowerCase().replace(/\s+/, " "), i = e[3] ?? e[4] ?? e[6], a = e[2] ?? e[5] ?? i, s = e[7] ? `<${e[7]}>` : "";
2967
+ n.node(i, {
2968
+ label: $(a) + s,
2969
+ shape: "rect"
2970
+ }, p());
2971
+ let c = r.get(i) ?? {
2972
+ kind: t,
2973
+ sections: [[], []]
2974
+ };
2975
+ c.kind = t, e[8] && (c.stereo = e[8].replace(/^<<|>>$/g, "").trim());
2976
+ let u = e[9] ? l(e[9].slice(1)) ?? l(e[9]) : void 0;
2977
+ u && (n.node(i).style = { fill: u }), r.set(i, c), e[10] && !e[11] && (c.sections = [[]], o = {
2978
+ id: i,
2979
+ c
2980
+ });
2981
+ } else if (e = /^(actor\/?|usecase\/?|component|node|database|cloud|folder|frame|package|artifact|file|storage|queue|stack|card|rectangle|agent|label|boundary|control|entity|collections|hexagon|interface|circle|person|port|portin|portout|action|process|diamond)\s+(.+)$/.exec(t)) {
2982
+ let t = e[1].toLowerCase().replace("/", ""), r = e[2].trim(), i = /\s+(#[\w]+)\s*$/.exec(r);
2983
+ i && (r = r.slice(0, i.index).trim());
2984
+ let a = /\s*<<(.+?)>>\s*$/.exec(r);
2985
+ a && (r = r.slice(0, a.index).trim());
2986
+ let o = r, s = r, c = /^(.+?)\s+as\s+(.+)$/.exec(r);
2987
+ if (c) {
2988
+ let [e, t] = [c[1].trim(), c[2].trim()];
2989
+ /^["([:]/.test(e) ? [s, o] = [e, t] : [o, s] = [e, t];
2990
+ }
2991
+ s = s.replace(/^\((.*)\)$|^\[(.*)\]$|^:(.*):$/, "$1$2$3"), o = o.replace(/^\((.*)\)$|^\[(.*)\]$|^:(.*):$/, "$1$2$3").replace(/^"(.*)"$/, "$1");
2992
+ let u = t === "usecase" ? "ellipse" : t === "actor" ? "actor" : Ie[t] ?? "rect", d = n.node(o, {
2993
+ label: $(s) + (a ? `\n«${a[1]}»` : ""),
2994
+ shape: u
2995
+ }, p()), f = i ? l(i[1].slice(1)) ?? l(i[1]) : void 0;
2996
+ f && (d.style = {
2997
+ ...d.style,
2998
+ fill: f
2999
+ });
3000
+ } else if (e = /^(\[[^\]]+\]|\([^)]+\)|:[^:]+:)(?:\s+as\s+(\S+))?$/.exec(t)) {
3001
+ let t = m(e[1]);
3002
+ if (e[2]) {
3003
+ let r = n.get(t);
3004
+ n.node(e[2], {
3005
+ label: r.label,
3006
+ shape: r.shape
3007
+ }, p()), n.g.nodes.splice(n.g.nodes.indexOf(r), 1);
3008
+ }
3009
+ } else if (e = Be.exec(t)) {
3010
+ let [, t, r, i, a, , o, s, , c, l, u, d] = e, f = m(t), p = m(u), h = a + s, g = i ? Re[i] ?? "none" : "none", _ = c ? Re[c] ?? "none" : "none", v = r, y = l;
3011
+ /^(up|u|left|l|le)$/i.test(o) && ([f, p] = [p, f], [g, _] = [_, g], [v, y] = [y, v]);
3012
+ let b = {
3013
+ from: f,
3014
+ to: p,
3015
+ head: _,
3016
+ tail: g,
3017
+ line: h.includes(".") ? "dashed" : h.includes("=") ? "thick" : h.includes("~") ? "dotted" : "solid"
3018
+ };
3019
+ d && (b.label = $(d.replace(/\s*[<>]\s*$|^\s*[<>]\s*/g, ""))), v && (b.tailLabel = v), y && (b.headLabel = y), n.edge(b);
3020
+ } else if ((e = /^([\w.$]+)\s*:\s*(.+)$/.exec(t)) && (r.has(e[1]) || n.has(e[1]))) {
3021
+ let t = r.get(e[1]) ?? {
3022
+ kind: "class",
3023
+ sections: [[], []]
3024
+ };
3025
+ r.set(e[1], t);
3026
+ let n = $(e[2]);
3027
+ n.includes("(") && t.sections.length > 1 ? t.sections[1].push(n) : t.sections[0].push(n);
3028
+ }
3029
+ }
3030
+ let g = n.get("start");
3031
+ if (g && g.label === "start" && n.g.edges.some((e) => e.from === "start" || e.to === "start")) {
3032
+ g.shape = "start", g.label = "";
3033
+ let e = n.g.edges.filter((e) => e.to === "start");
3034
+ if (e.length) {
3035
+ n.node("__end", {
3036
+ shape: "end",
3037
+ label: ""
3038
+ });
3039
+ for (let t of e) t.to = "__end";
3040
+ }
3041
+ }
3042
+ for (let e of n.g.nodes) {
3043
+ let t = r.get(e.id);
3044
+ if (!t) continue;
3045
+ let n = [], i = t.stereo ?? (t.kind === "interface" ? "interface" : t.kind === "enum" ? "enumeration" : t.kind === "annotation" ? "annotation" : t.kind === "abstract" || t.kind === "abstract class" ? "abstract" : void 0);
3046
+ i && n.push([`«${i}»`]), n.push([e.label]);
3047
+ let a = [{
3048
+ rows: n,
3049
+ bold: !0,
3050
+ center: !0,
3051
+ italic: t.kind.startsWith("abstract")
3052
+ }];
3053
+ for (let e of t.sections) a.push({ rows: e.map((e) => [e]) });
3054
+ e.sections = a;
3055
+ }
3056
+ return n.g;
3057
+ }
3058
+ function He(e, t) {
3059
+ let n = new _(t ?? "TB", "round"), r = [], i = /* @__PURE__ */ new Map(), a = 0, o = null, s, c = () => r[r.length - 1], u = (e, t) => {
3060
+ let r = e.trim().replace(/^"(.*)"$/, "$1");
3061
+ if (r === "[*]") {
3062
+ let e = `${c() ?? ""}__${t ? "end" : "start"}`;
3063
+ return n.node(e, {
3064
+ label: "",
3065
+ shape: t ? "end" : "start"
3066
+ }, c()), e;
3067
+ }
3068
+ return !n.isCluster(r) && !n.has(r) && n.node(r, { label: r }, c()), r;
3069
+ };
3070
+ for (let t of e) {
3071
+ if (o) {
3072
+ if (/^end\s*note$/i.test(t)) {
3073
+ let e = `__note${a++}`;
3074
+ n.node(e, {
3075
+ label: $(o.join("\n")),
3076
+ shape: "note",
3077
+ style: {
3078
+ fill: "#fff6c8",
3079
+ stroke: "#c9a227"
3080
+ }
3081
+ }, c()), s && n.edge({
3082
+ from: s,
3083
+ to: e,
3084
+ line: "dashed",
3085
+ head: "none"
3086
+ }), o = null;
3087
+ } else o.push(t);
3088
+ continue;
3089
+ }
3090
+ if (t === "--" || t === "||") continue;
3091
+ let e;
3092
+ if (e = /^state\s+(?:"([^"]+)"\s+as\s+(\S+?)|(\S+?)\s+as\s+"([^"]+)"|("[^"]+"|[^\s{<#]+))\s*(<<(\w+)>>)?\s*(#\S+)?\s*(\{)?$/i.exec(t)) {
3093
+ let t = (e[2] ?? e[3] ?? e[5]).replace(/^"(.*)"$/, "$1"), i = e[1] ?? e[4] ?? t, a = e[7]?.toLowerCase();
3094
+ if (e[9]) {
3095
+ n.cluster(t, $(i), c()), r.push(t);
3096
+ continue;
3097
+ }
3098
+ let o = a === "fork" || a === "join" ? "bar" : a === "choice" ? "diamond" : a === "start" || a === "entrypoint" ? "start" : a === "end" || a === "exitpoint" ? "end" : void 0;
3099
+ n.node(t, {
3100
+ label: o ? "" : $(i),
3101
+ shape: o
3102
+ }, c());
3103
+ let s = e[8] ? l(e[8].slice(1)) ?? l(e[8]) : void 0;
3104
+ s && (n.node(t).style = { fill: s });
3105
+ } else if (t === "}") r.pop();
3106
+ else if (e = /^note\s+(left|right|top|bottom)\s+of\s+(\S+)\s*(?::\s*(.*))?$/i.exec(t)) {
3107
+ if (e[3] !== void 0) {
3108
+ let t = `__note${a++}`;
3109
+ n.node(t, {
3110
+ label: $(e[3]),
3111
+ shape: "note",
3112
+ style: {
3113
+ fill: "#fff6c8",
3114
+ stroke: "#c9a227"
3115
+ }
3116
+ }, c()), n.edge({
3117
+ from: u(e[2], !1),
3118
+ to: t,
3119
+ line: "dashed",
3120
+ head: "none"
3121
+ });
3122
+ } else o = [], s = u(e[2], !1);
3123
+ } else if (e = /^(\[\*\]|"[^"]+"|[\w.$À-￿]+)\s*(-+|\.+)(?:\[[^\]]*\])?((?:up|down|left|right|u|d|l|r)?)(-*|\.*)(?:\[[^\]]*\])?>\s*(\[\*\]|"[^"]+"|[\w.$À-￿]+)\s*(?::\s*(.*))?$/u.exec(t)) {
3124
+ let t = u(e[1], !1), r = u(e[5], !0), i = !1;
3125
+ /^(up|u|left|l)$/i.test(e[3]) && ([t, r] = [r, t], i = !0), n.edge({
3126
+ from: t,
3127
+ to: r,
3128
+ head: i ? "none" : "arrow",
3129
+ tail: i ? "arrow" : "none",
3130
+ line: e[2].includes(".") ? "dashed" : "solid",
3131
+ label: e[6] ? $(e[6]) : void 0
3132
+ });
3133
+ } else (e = /^([\w.$À-￿]+)\s*:\s*(.+)$/u.exec(t)) && (u(e[1], !1), i.set(e[1], [...i.get(e[1]) ?? [], $(e[2])]));
3134
+ }
3135
+ for (let e of n.g.nodes) {
3136
+ let t = i.get(e.id);
3137
+ t && e.shape === "round" && (e.sections = [{
3138
+ rows: [[e.label]],
3139
+ bold: !0,
3140
+ center: !0
3141
+ }, { rows: t.map((e) => [e]) }]);
3142
+ }
3143
+ return n.g;
3144
+ }
3145
+ function Ue(e) {
3146
+ let t = new _("TB", "round"), n = [];
3147
+ for (let t = 0; t < e.length; t++) {
3148
+ let r = e[t];
3149
+ if (/^:/.test(r) && !/[;|<>/\]}]$/.test(r)) for (; t + 1 < e.length && !/[;|<>/\]}]$/.test(r);) r += "\n" + e[++t];
3150
+ n.push(r);
3151
+ }
3152
+ let r = 0, i = 0, a = [], o = (e, n = "") => {
3153
+ let r = `a${i++}`;
3154
+ return t.node(r, {
3155
+ shape: e,
3156
+ label: n
3157
+ }, a[a.length - 1]), r;
3158
+ }, s, c = (e, n) => {
3159
+ for (let r of e) t.edge({
3160
+ from: r.from,
3161
+ to: n,
3162
+ head: "arrow",
3163
+ label: r.label
3164
+ });
3165
+ }, l = (e) => $(e.replace(/^\((.*)\)$/, "$1")), u = (e, d) => {
3166
+ let f = e, p = (e) => {
3167
+ s !== void 0 && (f = f.map((e) => ({
3168
+ ...e,
3169
+ label: e.label ?? s
3170
+ }))), s = void 0, c(f, e);
3171
+ };
3172
+ for (; r < n.length;) {
3173
+ let e = n[r];
3174
+ if (d.test(e)) return f;
3175
+ r++;
3176
+ let m;
3177
+ if (/^start$/i.test(e)) {
3178
+ let e = o("start");
3179
+ p(e), f = [{ from: e }];
3180
+ } else if (/^(stop|end)$/i.test(e)) p(o("end")), f = [];
3181
+ else if (/^(kill|detach|break)$/i.test(e)) f = [];
3182
+ else if (m = /^:([\s\S]*?)[;|<>/\]}]$/.exec(e)) {
3183
+ let e = o("round", $(m[1]));
3184
+ p(e), f = [{ from: e }];
3185
+ } else if (m = /^->\s*(.*?);?$/.exec(e)) s = $(m[1]) || void 0;
3186
+ else if ((m = /^if\s*(\(.*?\))\s*(?:then\s*(?:\((.*)\))?)?\s*$/i.exec(e)) || (m = /^if\s*(\(.*\))\s*(?:is\s*\((.*)\))?\s*then\s*$/i.exec(e))) {
3187
+ let e = o("diamond", l(m[1]));
3188
+ p(e);
3189
+ let i = u([{
3190
+ from: e,
3191
+ label: m[2] ? $(m[2]) : void 0
3192
+ }], /^(elseif|else\s*if|else|endif|end\s*if)\b/i), a = !0;
3193
+ for (; r < n.length;) {
3194
+ let s = n[r++], c;
3195
+ if (c = /^(?:elseif|else\s*if)\s*(\(.*?\))\s*(?:then\s*(?:\((.*)\))?)?$/i.exec(s)) {
3196
+ let n = o("diamond", l(c[1]));
3197
+ t.edge({
3198
+ from: e,
3199
+ to: n,
3200
+ head: "arrow"
3201
+ }), e = n, i = i.concat(u([{
3202
+ from: n,
3203
+ label: c[2] ? $(c[2]) : void 0
3204
+ }], /^(elseif|else\s*if|else|endif|end\s*if)\b/i));
3205
+ } else if (c = /^else\s*(?:\((.*)\))?$/i.exec(s)) i = i.concat(u([{
3206
+ from: e,
3207
+ label: c[1] ? $(c[1]) : void 0
3208
+ }], /^(endif|end\s*if)\b/i)), a = !1;
3209
+ else break;
3210
+ }
3211
+ a && i.push({ from: e }), f = i;
3212
+ } else if (m = /^switch\s*(\(.*\))$/i.exec(e)) {
3213
+ let e = o("diamond", l(m[1]));
3214
+ p(e);
3215
+ let t = [];
3216
+ for (; r < n.length;) {
3217
+ let i = n[r++], a = /^case\s*(\(.*\))$/i.exec(i);
3218
+ if (!a) break;
3219
+ t = t.concat(u([{
3220
+ from: e,
3221
+ label: l(a[1])
3222
+ }], /^(case\s*\(|endswitch)/i));
3223
+ }
3224
+ f = t;
3225
+ } else if (m = /^while\s*(\(.*?\))\s*(?:is\s*\((.*)\))?$/i.exec(e)) {
3226
+ let e = o("diamond", l(m[1]));
3227
+ p(e);
3228
+ let t = u([{
3229
+ from: e,
3230
+ label: m[2] ? $(m[2]) : void 0
3231
+ }], /^(endwhile|end\s*while)\b/i);
3232
+ c(t, e);
3233
+ let i = /^(?:endwhile|end\s*while)\s*(?:\((.*)\))?$/i.exec(n[r++] ?? "");
3234
+ f = [{
3235
+ from: e,
3236
+ label: i?.[1] ? $(i[1]) : void 0
3237
+ }];
3238
+ } else if ((m = /^repeat\s*(?::([\s\S]*?)[;|<>/\]}])?$/i.exec(e)) && !/^repeat\s*while/i.test(e)) {
3239
+ let e = m[1] === void 0 ? o("diamond", "") : o("round", $(m[1]));
3240
+ p(e);
3241
+ let i = u([{ from: e }], /^(repeat\s*while|backward)/i), a, s;
3242
+ (s = /^backward\s*:([\s\S]*?)[;|<>/\]}]$/i.exec(n[r] ?? "")) && (a = o("round", $(s[1])), r++);
3243
+ let d = /^repeat\s*while\s*(\(.*?\))?\s*(?:is\s*\((.*?)\))?\s*(?:not\s*\((.*?)\))?$/i.exec(n[r++] ?? ""), h = o("diamond", d?.[1] ? l(d[1]) : "");
3244
+ c(i, h), a ? (t.edge({
3245
+ from: h,
3246
+ to: a,
3247
+ head: "arrow",
3248
+ label: d?.[2] ? $(d[2]) : void 0
3249
+ }), t.edge({
3250
+ from: a,
3251
+ to: e,
3252
+ head: "arrow"
3253
+ })) : t.edge({
3254
+ from: h,
3255
+ to: e,
3256
+ head: "arrow",
3257
+ label: d?.[2] ? $(d[2]) : void 0
3258
+ }), f = [{
3259
+ from: h,
3260
+ label: d?.[3] ? $(d[3]) : void 0
3261
+ }];
3262
+ } else if (/^(fork|split)$/i.test(e)) {
3263
+ let t = /^fork$/i.test(e), i, a = f;
3264
+ t ? (i = o("bar"), p(i), a = [{ from: i }]) : s !== void 0 && (s = void 0);
3265
+ let l = [];
3266
+ for (;;) {
3267
+ l = l.concat(u(a, /^(fork\s+again|split\s+again|end\s*fork|end\s*merge|end\s*split)\b/i));
3268
+ let e = n[r++] ?? "";
3269
+ if (!/again/i.test(e)) break;
3270
+ }
3271
+ if (t) {
3272
+ let e = o("bar");
3273
+ c(l, e), f = [{ from: e }];
3274
+ } else f = l;
3275
+ } else if (m = /^(?:partition|group|package|rectangle|card)\s+(?:"([^"]*)"|(\S[^{]*?))\s*(?:#\S+)?\s*\{?$/i.exec(e)) {
3276
+ let e = (m[1] ?? m[2]).trim(), n = `__p${i++}`;
3277
+ t.cluster(n, $(e), a[a.length - 1]), a.push(n);
3278
+ } else if (e === "}" || /^end\s*group$/i.test(e)) a.pop();
3279
+ else if ((/^[rh]?note\b/i.test(e) || /^floating\s+note\b/i.test(e)) && !/:/.test(e)) for (; r < n.length && !/^end\s*note$/i.test(n[r++]););
3280
+ }
3281
+ return f;
3282
+ };
3283
+ return u([], /^\u0000$/), t.g;
3284
+ }
3285
+ function We(e, t) {
3286
+ let n = [], r;
3287
+ for (let i = 0; i < e.length; i++) {
3288
+ let a = e[i], o = /^([*+\-#]+)(_)?\s*(?:\[#[\w]+\])?\s*(.*)$/.exec(a);
3289
+ if (!o) continue;
3290
+ let s = o[3];
3291
+ if (s.startsWith(":")) {
3292
+ for (s = s.slice(1); !/;\s*$/.test(s) && i + 1 < e.length;) s += "\n" + e[++i];
3293
+ s = s.replace(/;\s*$/, "");
3294
+ }
3295
+ let c = o[1].length, l = o[1][0] === "-" ? "left" : "right", u = {
3296
+ label: $(s),
3297
+ shape: o[2] ? "none" : void 0,
3298
+ side: t ? void 0 : l,
3299
+ children: []
3300
+ };
3301
+ if (!r) r = u, n.push({
3302
+ depth: c,
3303
+ n: u
3304
+ });
3305
+ else {
3306
+ for (; n.length > 1 && n[n.length - 1].depth >= c;) n.pop();
3307
+ n[n.length - 1].n.children.push(u), n.push({
3308
+ depth: c,
3309
+ n: u
3310
+ });
3311
+ }
3312
+ }
3313
+ if (!r) throw new g("The mind map is empty");
3314
+ let i = (e, t) => e.children.forEach((e) => (t || (e.side = void 0), i(e, !1)));
3315
+ return i(r, !0), r;
3316
+ }
3317
+ // packages/diagram/src/dom.ts
3318
+ async function Ge(e, t = 2) {
3319
+ let n = (t) => Number(RegExp(`<svg[^>]*\\s${t}="([\\d.]+)"`).exec(e)?.[1] ?? 0), r = n("width"), i = n("height");
3320
+ if (!r || !i) throw Error("Not a picture with a size");
3321
+ let a = new Image();
3322
+ a.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(e)}`, await a.decode();
3323
+ let o = document.createElement("canvas");
3324
+ o.width = Math.max(1, Math.round(r * t)), o.height = Math.max(1, Math.round(i * t));
3325
+ let s = o.getContext("2d");
3326
+ if (!s) throw Error("No 2D canvas");
3327
+ return s.scale(t, t), s.drawImage(a, 0, 0, r, i), new Promise((e, t) => o.toBlob((n) => n ? e(n) : t(/* @__PURE__ */ Error("PNG export failed")), "image/png"));
3328
+ }
3329
+ function Ke(e, t) {
3330
+ e.innerHTML = t.join("");
3331
+ }
3332
+ // packages/plantuml/src/index.ts
3333
+ var qe = class extends Error {
3334
+ constructor(e) {
3335
+ super(e), this.name = "DiagramError";
3336
+ }
3337
+ };
3338
+ function Je(e) {
3339
+ try {
3340
+ return Oe(e).map((e) => ({
3341
+ svg: e.svg,
3342
+ width: e.w,
3343
+ height: e.h
3344
+ }));
3345
+ } catch (e) {
3346
+ throw new qe(e.message);
3347
+ }
3348
+ }
3349
+ function Ye(e) {
3350
+ return Je(e)[0];
3351
+ }
3352
+ function Xe(e, t) {
3353
+ let n = Je(t);
3354
+ return Ke(e, n.map((e) => e.svg)), n;
3355
+ }
3356
+ function Ze(e, t = 2) {
3357
+ return Ge(e, t);
3358
+ }
3359
+ export { qe as DiagramError, Ye as render, Je as renderEach, Xe as renderTo, Ze as toPng };
3360
+
3361
+ //# sourceMappingURL=index.js.map