@p10node/plantuml 0.0.0-stage → 0.9.0

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