@p10node/markdown 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,4387 @@
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], ee = e.map((e) => e.loop ?? 0), D = e.map(() => -1), O = (e, t, n, r, i) => (S.push(e), C.push(t), w.push(n), T.push(r), E.push(i), ee.push(0), D.push(n === 2 || n === 3 ? r : -1), S.length - 1), k = [], A = [], te = (e, t, n) => {
83
+ for (; k.length < S.length;) k.push([]), A.push([]);
84
+ A[e].push([t, n]), k[t].push([e, n]);
85
+ }, ne = 6e4;
86
+ for (let e of f) ne -= Math.max(0, Math.abs(g[e.w] - g[e.v]) - 1);
87
+ if (ne < 0) throw Error("The diagram is too large to draw");
88
+ let j = [], re = [];
89
+ f.forEach((e, n) => {
90
+ if (e.v === e.w) {
91
+ j.push(null), re.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 ? O(a.w, a.h, 1, s, t) : O(0, 0, 1, s, t);
97
+ t === o && (c = e), r.push(e);
98
+ }
99
+ r.push(e.w), j.push(i > 0 ? r : null), re.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
+ te(n, i, e.weight * (a === 2 ? 8 : a === 1 ? 2 : 1));
103
+ }
104
+ });
105
+ let ie = f.map((e, t) => e.v !== e.w && g[e.v] === g[e.w] && !j[t]), M = Array(a).fill(Infinity), N = Array(a).fill(-Infinity);
106
+ for (let e = 0; e < S.length; e++) for (let t of b(T[e])) M[t] = Math.min(M[t], E[e]), N[t] = Math.max(N[t], E[e]);
107
+ let P = Array.from({ length: a }, () => []), ae = Array.from({ length: a }, () => []), oe = [];
108
+ for (let e = 0; e < a; e++) if (!(M[e] > N[e])) for (let t = M[e]; t <= N[e]; t++) P[e][t] = O(0, 0, 2, e, t), ae[e][t] = O(0, 0, 3, e, t);
109
+ for (; k.length < S.length;) k.push([]), A.push([]);
110
+ for (let e = 0; e < S.length; e++) oe.push([]);
111
+ for (let e = 0; e < a; e++) for (let t = M[e]; t < N[e]; t++) oe[P[e][t]].push([P[e][t + 1], 1]), oe[P[e][t + 1]].push([P[e][t], 1]), oe[ae[e][t]].push([ae[e][t + 1], 1]), oe[ae[e][t + 1]].push([ae[e][t], 1]);
112
+ let F = S.length;
113
+ y = E.reduce((e, t) => Math.max(e, t), y);
114
+ let I = Array.from({ length: y + 1 }, () => []);
115
+ {
116
+ let e = new Uint8Array(F), t = Array.from({ length: F }, (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, I[E[n]].push(n);
124
+ for (let r = A[n].length - 1; r >= 0; r--) e[A[n][r][0]] || t.push(A[n][r][0]);
125
+ }
126
+ }
127
+ }
128
+ for (let e = 0; e < F; e++) (w[e] === 2 || w[e] === 3) && I[E[e]].push(e);
129
+ }
130
+ let L = new Float64Array(F), se = () => I.forEach((e) => e.forEach((e, t) => L[e] = t));
131
+ se();
132
+ let R = new Float64Array(F), z = new Float64Array(a), B = () => {
133
+ for (let e = 0; e < a; e++) {
134
+ if (M[e] > N[e]) continue;
135
+ let t = 0;
136
+ for (let n = M[e]; n <= N[e]; n++) t += L[P[e][n]] / Math.max(1, I[n].length);
137
+ z[e] = t / (N[e] - M[e] + 1);
138
+ }
139
+ }, ce = (e, t) => {
140
+ if (!a) return [...e].sort((e, t) => R[e] - R[t] || L[e] - L[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: L[P[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(D[t]) : w[t] !== 3 && o(T[t]).items.push({
159
+ node: t,
160
+ cluster: -1,
161
+ key: R[t],
162
+ idx: L[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 : R[P[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) => z[e.cluster] - z[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(P[n.cluster][t]), l(n), c.push(ae[n.cluster][t]));
179
+ };
180
+ return l(r), c;
181
+ }, V = (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 A[t]) r.push([L[t], L[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
+ }, le = (e, t) => {
197
+ let n = 0, r = 0;
198
+ for (let [i, a] of t[e]) n += L[i] * a, r += a;
199
+ return r ? n / r : L[e];
200
+ };
201
+ for (let e of I) for (let t of e) R[t] = L[t];
202
+ B(), I = I.map((e, t) => ce(e, t)), se();
203
+ let ue = I.map((e) => [...e]), de = V(I);
204
+ for (let e = 0; e < 24 && de > 0; e++) {
205
+ B();
206
+ let t = e % 2 == 0;
207
+ for (let e = 1; e <= y; e++) {
208
+ let n = t ? e : y - e, r = t ? k : A;
209
+ for (let e of I[n]) R[e] = le(e, r);
210
+ I[n] = ce(I[n], n), I[n].forEach((e, t) => L[e] = t);
211
+ }
212
+ let n = V(I);
213
+ n < de && (de = n, ue = I.map((e) => [...e]));
214
+ }
215
+ I = ue, se();
216
+ let fe = I.map((e) => e.reduce((e, t) => Math.max(e, C[t]), 0)), pe = Array.from({ length: a }, () => []);
217
+ n.forEach((e, t) => e.parent >= 0 && pe[e.parent].push(t));
218
+ let H = (e) => n[e].pad[2] + Math.max(0, ...pe[e].filter((t) => M[t] === M[e]).map(H)), U = (e) => n[e].pad[3] + Math.max(0, ...pe[e].filter((t) => N[t] === N[e]).map(U)), me = Array(y + 1).fill(0), he = Array(y + 1).fill(0);
219
+ for (let e = 0; e < a; e++) M[e] > N[e] || (me[M[e]] = Math.max(me[M[e]], H(e)), he[N[e]] = Math.max(he[N[e]], U(e)));
220
+ let W = [];
221
+ for (let e = 0; e <= y; e++) W[e] = e === 0 ? fe[0] / 2 + me[0] : W[e - 1] + fe[e - 1] / 2 + he[e - 1] + r.ranksep + me[e] + fe[e] / 2;
222
+ let G = W[y] + fe[y] / 2 + he[y], K = (e) => w[e] === 2 || w[e] === 3 ? 0 : S[e] / 2, ge = (e, t) => {
223
+ let i = ee[e], a = w[e], o = w[t];
224
+ return a === 2 && (i += n[D[e]].pad[0]), a === 3 && (i += r.nodesep / 2), o === 3 && (i += n[D[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), K(e) + K(t) + i;
225
+ }, q = new Float64Array(F);
226
+ for (let e of I) for (let t = 1; t < e.length; t++) q[e[t]] = q[e[t - 1]] + ge(e[t - 1], e[t]);
227
+ let _e = (e, t, n) => {
228
+ let r = e.length, i = [0];
229
+ for (let t = 1; t < r; t++) i[t] = i[t - 1] + ge(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++) q[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 = I[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 += q[t] * n, i += n;
252
+ };
253
+ (t || n) && s(k[e]), (t || !n) && s(A[e]), s(oe[e]), a.push(i ? r / i : q[e]), o.push(i || .01);
254
+ }
255
+ _e(i, a, o);
256
+ }
257
+ }
258
+ let ve = F, ye = (e) => w[e] === 2 ? ve + 2 * D[e] : w[e] === 3 ? ve + 2 * D[e] + 1 : e;
259
+ if (a) {
260
+ let e = F + 2 * a, t = new Float64Array(e);
261
+ for (let e = 0; e < F; e++) t[e] = q[e];
262
+ for (let e = 0; e < a; e++) t[ve + 2 * e] = Infinity, t[ve + 2 * e + 1] = -Infinity;
263
+ for (let e = 0; e < F; e++) w[e] === 2 && (t[ye(e)] = Math.min(t[ye(e)], q[e])), w[e] === 3 && (t[ye(e)] = Math.max(t[ye(e)], q[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 I) for (let t = 1; t < e.length; t++) o(ye(e[t - 1]), ye(e[t]), ge(e[t - 1], e[t]));
268
+ for (let e = 0; e < a; e++) M[e] <= N[e] && o(ve + 2 * e, ve + 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 < F; e++) q[e] = l[ye(e)];
278
+ }
279
+ let J = Infinity, be = -Infinity;
280
+ for (let e = 0; e < F; e++) J = Math.min(J, q[e] - K(e)), be = Math.max(be, q[e] + K(e) + ee[e]);
281
+ Number.isFinite(J) || (J = be = 0);
282
+ for (let e = 0; e < F; e++) q[e] -= J;
283
+ let Y = (e) => ({
284
+ x: q[e],
285
+ y: W[E[e]]
286
+ }), X = /* @__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 = j[r];
297
+ i && !ie[r] && (e[i[0]]?.spread && n(`${i[0]}:b`, r, q[i[1]]), e[i[i.length - 1]]?.spread && n(`${i[i.length - 1]}:t`, r, q[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) => X.set(`${e}:${i.i}`, q[t] + (a - (n.length - 1) / 2) * r));
305
+ }
306
+ }
307
+ let xe = f.map((e, n) => {
308
+ if (e.v === e.w) return null;
309
+ if (ie[n]) {
310
+ let r = Y(e.v), i = Y(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 = j[n];
330
+ if (!r) return null;
331
+ let i = [], a = [], o = Y(r[0]);
332
+ i.push({
333
+ x: X.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 = Y(r[e]), n = fe[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 = Y(r[r.length - 1]);
347
+ i.push({
348
+ x: X.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: re[n] >= 0 ? Y(re[n]) : void 0
380
+ };
381
+ }), Se = n.map((e, t) => {
382
+ if (M[t] > N[t]) return null;
383
+ let n = Infinity, r = -Infinity;
384
+ for (let e = M[t]; e <= N[t]; e++) n = Math.min(n, q[P[t][e]]), r = Math.max(r, q[ae[t][e]]);
385
+ let i = W[M[t]] - fe[M[t]] / 2 - H(t), a = W[N[t]] + fe[N[t]] / 2 + U(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) => Y(t)),
395
+ edges: xe,
396
+ clusters: Se,
397
+ w: be - J,
398
+ h: G
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 = (e) => e.replace(/\*\*(.+?)\*\*|__(.+?)__/g, "$1$2").replace(/(^|\W)[*_](\S.*?\S|\S)[*_](?=\W|$)/g, "$1$2"), _ = class extends Error {}, v = 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
+ }, y = 14, b = 13, x = 14, S = 9, C = i(y), w = (e) => e.split("\n"), T = (e) => Math.round(e * 100) / 100;
676
+ function E(e) {
677
+ let t = [];
678
+ for (let n of e.rows) n.forEach((n, i) => t[i] = Math.max(t[i] ?? 0, r(n, b, 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(b) + 10 : 8,
682
+ cols: t
683
+ };
684
+ }
685
+ function ee(e, t) {
686
+ let n = e.shape === "none" || e.label === "" ? w(e.label) : o(w(e.label), 260, y, e.style?.bold), r = e.label === "" ? {
687
+ w: 0,
688
+ h: 0
689
+ } : a(n, y, e.style?.bold), i = t === "TB" || t === "BT";
690
+ if (e.sections?.length) {
691
+ let t = e.sections.map(E);
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 + x) * 1.42),
747
+ h: Math.max(36, (r.h + S) * 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 + x,
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${T(s)} ${T(c + 7)} A${T(a / 2)} 7 0 0 1 ${T(s + a)} ${T(c + 7)} L${T(s + a)} ${T(c + o - 7)} A${T(a / 2)} 7 0 0 1 ${T(s)} ${T(c + o - 7)} Z`, l), e.path(`M${T(s)} ${T(c + 7)} A${T(a / 2)} 7 0 0 0 ${T(s + a)} ${T(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 * C / 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(E), 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(b);
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: b,
1041
+ bold: r.bold,
1042
+ italic: r.italic,
1043
+ color: t.style?.color
1044
+ });
1045
+ return;
1046
+ }
1047
+ let f = n + x;
1048
+ i.forEach((n, i) => {
1049
+ e.text(f, d, n, {
1050
+ size: b,
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 te(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 ne(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 j(e, t, n) {
1158
+ let r = t[t.length - 1], i = r.p[r.p.length - 1], a = te(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 re(e) {
1172
+ return e.color ?? u.line;
1173
+ }
1174
+ var ie = 16, M = 3e3, N = 6e3;
1175
+ function P(t) {
1176
+ if (!t.nodes.length) throw new _("The diagram has no nodes");
1177
+ if (t.nodes.length > M || t.edges.length > N) throw new _(`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
+ }, g = t.nodes.map((e) => ee(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), y = v.some((e) => e.e.label), x = (e) => e ? a(w(e), b) : 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 C = t.nodes.map((e, t) => {
1202
+ let n = g[t], r = e.cluster === void 0 ? -1 : c.get(e.cluster) ?? -1, i = !!e.sections?.length || oe.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) * (y ? 2 : 1),
1225
+ weight: 1,
1226
+ label: i ? o ? i : {
1227
+ w: i.h,
1228
+ h: i.w
1229
+ } : void 0
1230
+ };
1231
+ }), E = t.clusters.map((e, t) => {
1232
+ let r = e.label ? a(w(e.label), b, !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
+ }), D = t.sameRank?.map((e) => e.map((e) => l.get(e)).filter((e) => e !== void 0)).filter((e) => e.length > 1), k = e(C, T, E, {
1257
+ nodesep: o ? 40 : 28,
1258
+ ranksep: (o ? 50 : 60) / (y ? 2 : 1),
1259
+ edgesep: 14,
1260
+ sameRank: D
1261
+ }), P = t.title ? 32 : 0, L = k.w, se = k.h, R = (e) => {
1262
+ let t = n === "TB" ? e : n === "BT" ? {
1263
+ x: e.x,
1264
+ y: se - e.y
1265
+ } : n === "LR" ? {
1266
+ x: e.y,
1267
+ y: e.x
1268
+ } : {
1269
+ x: se - e.y,
1270
+ y: e.x
1271
+ };
1272
+ return {
1273
+ x: t.x + ie,
1274
+ y: t.y + ie + P
1275
+ };
1276
+ }, z = (o ? L : se) + 32, B = (o ? se : L) + 32 + P, ce = (e) => {
1277
+ let t = 0;
1278
+ for (let n = d(e); n >= 0; n = d(n)) t++;
1279
+ return t;
1280
+ }, V = t.clusters.map((e, t) => t).sort((e, t) => ce(e) - ce(t)), le = t.clusters.map(() => null), ue = [];
1281
+ for (let e of V) {
1282
+ let r = k.clusters[e];
1283
+ if (!r) continue;
1284
+ let a = t.clusters[e], o = R({
1285
+ x: r.x,
1286
+ y: r.y
1287
+ }), c = R({
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 (le[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 = w(a.label), t = n === "BT" ? d + p - 8 - e.length * i(b) / 2 : d + 8 + e.length * i(b) / 2;
1303
+ ue.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 de = [];
1313
+ v.forEach(({ e, v: t }, n) => {
1314
+ if (e.line === "hidden") return;
1315
+ let r = re(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 = k.edges[n];
1320
+ if (!c) {
1321
+ if (v[n].v !== v[n].w) return;
1322
+ let c = R(k.nodes[t]), l = g[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 _ = [{
1355
+ c: "C",
1356
+ p: [
1357
+ d,
1358
+ f,
1359
+ p
1360
+ ]
1361
+ }], y = e.head ?? "arrow", x = j(u, _, A[y] ?? 0);
1362
+ if (s.path(m([{
1363
+ c: "M",
1364
+ p: [u]
1365
+ }, ..._.map((e) => ({
1366
+ c: e.c,
1367
+ p: e.p
1368
+ }))]), i), ne(s, y, p, x, r), e.label) {
1369
+ let t = a(w(e.label), b);
1370
+ de.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: w(e.label)
1379
+ });
1380
+ }
1381
+ return;
1382
+ }
1383
+ let l = {
1384
+ start: R(c.start),
1385
+ segs: c.segs.map((e) => ({
1386
+ c: e.c,
1387
+ p: e.p.map(R)
1388
+ })),
1389
+ label: c.label && R(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 = F(l.start, l.segs);
1393
+ u >= 0 && le[u] && (e = I(e, le[u], !0)), d >= 0 && le[d] && (e = I(e, le[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", _ = l.segs[l.segs.length - 1].p[l.segs[l.segs.length - 1].p.length - 1], y = j(l.start, l.segs, A[p] ?? 0), x = l.segs[0], S = te((x.c, x.p[0]), l.start), C = 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" && ne(s, p, _, y, r), h !== "none" && ne(s, h, C, S, r), e.label) {
1416
+ let t = l.label ?? ae(l.start, _);
1417
+ de.push({
1418
+ p: t,
1419
+ text: w(e.label)
1420
+ });
1421
+ }
1422
+ let ee = (e, t, n) => {
1423
+ let r = a(w(n), b), i = -t.y, o = t.x, s = Math.abs(i) * (r.w / 2 + 5) + Math.abs(o) * (r.h / 2 + 3);
1424
+ de.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: w(n),
1430
+ plain: !0
1431
+ });
1432
+ };
1433
+ e.headLabel && ee(_, y, e.headLabel), e.tailLabel && ee(C, S, e.tailLabel);
1434
+ });
1435
+ for (let e of ue) {
1436
+ let t = a(e.text, b, !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: b,
1440
+ bold: !0,
1441
+ color: e.color
1442
+ });
1443
+ }
1444
+ t.nodes.forEach((e, t) => {
1445
+ if (e.style?.hidden) return;
1446
+ let n = R(k.nodes[t]);
1447
+ O(s, e, g[t], n.x, n.y);
1448
+ });
1449
+ for (let e of de) {
1450
+ let t = a(e.text, b);
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: b,
1457
+ color: e.color ?? u.ink
1458
+ });
1459
+ }
1460
+ return t.title && (z = Math.max(z, r(t.title, 16, !0) + 32), s.text(z / 2, 27, t.title, {
1461
+ anchor: "middle",
1462
+ size: 16,
1463
+ bold: !0
1464
+ })), {
1465
+ svg: s.toString(z, B),
1466
+ w: Math.ceil(z),
1467
+ h: Math.ceil(B)
1468
+ };
1469
+ }
1470
+ var ae = (e, t) => ({
1471
+ x: (e.x + t.x) / 2,
1472
+ y: (e.y + t.y) / 2
1473
+ }), oe = /* @__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 F(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 I(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 L(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 se = {
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
+ }, R = {
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 z(e, t) {
1649
+ if (!e) return t;
1650
+ let n = e.toLowerCase().replace(/^[lr](?=[a-z])/, "");
1651
+ return R[n] ?? R[n.replace(/^o/, "")] ?? t;
1652
+ }
1653
+ function B(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 ce(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 V(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 le(e, t) {
1685
+ return V(e, t).replace(/<[^>]*>/g, "").split(/[|{}]/).map((e) => e.trim()).filter(Boolean);
1686
+ }
1687
+ function ue(e) {
1688
+ let t = L(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 _("Graphviz: “{” expected after the graph name");
1698
+ let l = new v("TB", "ellipse"), u = /* @__PURE__ */ new Map(), d = [], f = [], p = 0, m = {}, h = /* @__PURE__ */ new Map(), g = () => {
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 = g(), 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 = g();
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("<") ? ce(m.label.slice(1, -1)) : V(m.label, "", c));
1798
+ for (let e of l.g.nodes) de(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("<") ? ce(t.label.slice(1, -1)) : V(t.label, "", e.id) : "";
1802
+ let n = {}, r = (t.style ?? "").toLowerCase();
1803
+ r.includes("filled") ? n.fill = B(t.fillcolor ?? t.color ?? t.bgcolor) ?? "#d3d3d3" : t.bgcolor && (n.fill = B(t.bgcolor)), (t.color || t.pencolor) && (n.stroke = B(t.pencolor ?? t.color)), r.includes("dashed") && (n.dash = "6 4"), r.includes("dotted") && (n.dash = "2 3"), t.fontcolor && (n.color = B(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(fe(t, n, e));
1806
+ l.g.sameRank = f, s.push(l.g);
1807
+ }
1808
+ if (!s.length) throw new _("No “graph” or “digraph” found");
1809
+ return s;
1810
+ }
1811
+ function de(e, t) {
1812
+ let n = (t.shape ?? "ellipse").toLowerCase();
1813
+ e.shape = se[n] ?? "ellipse";
1814
+ let r = t.label;
1815
+ if (r !== void 0) {
1816
+ if (r.startsWith("<") && r.endsWith(">")) e.label = ce(r.slice(1, -1));
1817
+ else if (n === "record" || n === "mrecord") {
1818
+ let t = le(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 = V(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 = B(t.fillcolor ?? t.color) ?? "#d3d3d3" : e.shape !== "point" && (i.fill = "#ffffff"), i.stroke = t.color ? B(t.color) : "#000000", t.fontcolor && (i.color = B(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 fe(e, t, n) {
1830
+ let r = (t.style ?? "").toLowerCase(), i = (t.dir ?? (n ? "forward" : "none")).toLowerCase(), a = z(t.arrowhead, "arrow"), o = z(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(">") ? ce(s.slice(1, -1)) : V(s, "")), t.headlabel && (e.headLabel = V(t.headlabel, "")), t.taillabel && (e.tailLabel = V(t.taillabel, "")), e.line = r.includes("invis") ? "hidden" : r.includes("dashed") ? "dashed" : r.includes("dotted") ? "dotted" : r.includes("bold") ? "thick" : "solid", e.color = B(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
+ function pe(e) {
1836
+ return ue(e).map(P);
1837
+ }
1838
+ // src/core/diagram/charts.ts
1839
+ var H = 16, U = (e) => Math.round(e * 100) / 100;
1840
+ function me(e) {
1841
+ let t = e.slices.filter((e) => e.value > 0 && Number.isFinite(e.value));
1842
+ if (!t.length) throw Error("The pie chart has no values");
1843
+ let n = t.reduce((e, t) => e + t.value, 0), i = new p(), a = H + (e.title ? 36 : 0) + 130, o = (e) => u.series[e % u.series.length], s = -Math.PI / 2, c = (e, t) => ({
1844
+ x: 146 + Math.cos(e) * t,
1845
+ y: a + Math.sin(e) * t
1846
+ });
1847
+ t.forEach((e, t) => {
1848
+ let r = e.value / n, l = s + r * 2 * Math.PI;
1849
+ if (r >= .9999) i.circle(146, a, 130, {
1850
+ fill: o(t),
1851
+ stroke: "#ffffff",
1852
+ sw: 2
1853
+ });
1854
+ else {
1855
+ let e = c(s, 130), n = c(l, 130);
1856
+ i.path(`M${U(146)} ${U(a)} L${U(e.x)} ${U(e.y)} A130 130 0 ${+(r > .5)} 1 ${U(n.x)} ${U(n.y)} Z`, {
1857
+ fill: o(t),
1858
+ stroke: "#ffffff",
1859
+ sw: 2
1860
+ });
1861
+ }
1862
+ if (r >= .06) {
1863
+ let e = c((s + l) / 2, 85.8);
1864
+ i.text(e.x, e.y, `${Math.round(r * 1e3) / 10}%`, {
1865
+ anchor: "middle",
1866
+ size: 13,
1867
+ bold: !0,
1868
+ color: "#ffffff"
1869
+ });
1870
+ }
1871
+ s = l;
1872
+ });
1873
+ let l = a - t.length * 24 / 2 + 12, d = 0;
1874
+ t.forEach((t, n) => {
1875
+ let a = e.showData ? `${t.label} [${he(t.value)}]` : t.label;
1876
+ 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));
1877
+ });
1878
+ let f = 330 + d + H, m = Math.max(a + 130, l + t.length * 24) + H;
1879
+ return e.title && (f = Math.max(f, r(e.title, 16, !0) + 32), i.text(f / 2, 28, e.title, {
1880
+ anchor: "middle",
1881
+ size: 16,
1882
+ bold: !0
1883
+ })), {
1884
+ svg: i.toString(f, m),
1885
+ w: Math.ceil(f),
1886
+ h: Math.ceil(m)
1887
+ };
1888
+ }
1889
+ var he = (e) => String(Number.isInteger(e) ? e : Math.round(e * 100) / 100), W = 36e5, G = 24 * W, K = (e) => String(e).padStart(2, "0");
1890
+ function ge(e) {
1891
+ let t = e.sections.flatMap((e) => e.tasks);
1892
+ if (!t.length) throw Error("The Gantt chart has no tasks");
1893
+ 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, W), 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 = H + s, m = H + d, h = (e) => f + (e - n) * l, g = new p(), _ = m + t.length * 28 + 24 + H + 6, v = [
1894
+ W,
1895
+ 3 * W,
1896
+ 6 * W,
1897
+ 12 * W,
1898
+ G,
1899
+ 2 * G,
1900
+ 7 * G,
1901
+ 14 * G,
1902
+ 30 * G,
1903
+ 91 * G,
1904
+ 365 * G
1905
+ ].find((e) => a / e <= 12) ?? 365 * G, y = Math.ceil(n / v) * v, b = (e) => {
1906
+ let t = new Date(e);
1907
+ return v < G ? `${K(t.getUTCHours())}:${K(t.getUTCMinutes())}` : v >= 365 * G ? String(t.getUTCFullYear()) : v >= 30 * G ? `${t.getUTCFullYear()}-${K(t.getUTCMonth() + 1)}` : `${t.getUTCFullYear()}-${K(t.getUTCMonth() + 1)}-${K(t.getUTCDate())}`;
1908
+ }, x = m + t.length * 28 + 4;
1909
+ for (let e = y; e <= i; e += v) {
1910
+ let t = h(e);
1911
+ g.line(t, m, t, x, {
1912
+ stroke: "#e3e6ec",
1913
+ sw: 1
1914
+ }), g.text(t, x + 12, b(e), {
1915
+ anchor: "middle",
1916
+ size: 11,
1917
+ color: u.muted
1918
+ });
1919
+ }
1920
+ let S = 0;
1921
+ e.sections.forEach((e, t) => {
1922
+ let n = u.series[t % u.series.length], i = m + S * 28;
1923
+ t % 2 == 0 && g.rect(H, 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), {
1924
+ size: 13,
1925
+ bold: !0
1926
+ });
1927
+ for (let t of e.tasks) {
1928
+ let e = m + S * 28 + 14;
1929
+ if (t.milestone) {
1930
+ let n = h(t.start);
1931
+ g.poly([
1932
+ [n, e - 8],
1933
+ [n + 8, e],
1934
+ [n, e + 8],
1935
+ [n - 8, e]
1936
+ ], { fill: t.crit ? "#e5596b" : u.dark }), g.text(n + 14, e, t.name, { size: 12 });
1937
+ } else {
1938
+ let i = h(t.start), a = Math.max(3, h(t.end) - i), o = t.done ? "#c7ccd6" : n;
1939
+ g.rect(i, e - 9, a, 18, {
1940
+ fill: o,
1941
+ stroke: t.crit ? "#c0392b" : t.active ? u.dark : void 0,
1942
+ sw: t.crit || t.active ? 2 : 0
1943
+ }, 3);
1944
+ let s = r(t.name, 12);
1945
+ s + 10 < a ? g.text(i + a / 2, e, t.name, {
1946
+ anchor: "middle",
1947
+ size: 12,
1948
+ color: t.done ? u.ink : "#ffffff"
1949
+ }) : i + a + 6 + s < f + c + 200 ? g.text(i + a + 6, e, t.name, { size: 12 }) : g.text(i - 6, e, t.name, {
1950
+ anchor: "end",
1951
+ size: 12
1952
+ });
1953
+ }
1954
+ S++;
1955
+ }
1956
+ });
1957
+ let C = f + c + H;
1958
+ for (let e of t) C = Math.max(C, h(e.end) + 12 + r(e.name, 12) + H);
1959
+ return e.title && (C = Math.max(C, r(e.title, 16, !0) + 32), g.text(C / 2, 28, e.title, {
1960
+ anchor: "middle",
1961
+ size: 16,
1962
+ bold: !0
1963
+ })), {
1964
+ svg: g.toString(C, _),
1965
+ w: Math.ceil(C),
1966
+ h: Math.ceil(_)
1967
+ };
1968
+ }
1969
+ var q = 44, _e = 12;
1970
+ function ve(e, t) {
1971
+ let n = new p(), i = (e, t) => {
1972
+ 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;
1973
+ return {
1974
+ text: r,
1975
+ w: s ? c : i.w + (e.shape === "none" ? 8 : 24),
1976
+ h: s ? c : i.h + (e.shape === "none" ? 6 : 14),
1977
+ fs: n
1978
+ };
1979
+ }, s = (e, t, n) => {
1980
+ 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) * _e);
1981
+ return {
1982
+ n: e,
1983
+ w: r.w,
1984
+ h: r.h,
1985
+ text: r.text,
1986
+ x: 0,
1987
+ y: 0,
1988
+ color: n,
1989
+ depth: t,
1990
+ kids: a,
1991
+ span: o
1992
+ };
1993
+ }, c = s(e, 0, u.dark), l = [], d = [];
1994
+ 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");
1995
+ else if (c.kids.length > 3) {
1996
+ let e = c.kids.reduce((e, t) => e + t.span, 0), t = 0;
1997
+ for (let n of c.kids) t < e / 2 ? l.push(n) : d.push(n), t += n.span;
1998
+ } else l = c.kids;
1999
+ let f = (e, t, n, r) => {
2000
+ e.x = t;
2001
+ let i = n + (e.span - (e.kids.reduce((e, t) => e + t.span, 0) + Math.max(0, e.kids.length - 1) * _e)) / 2;
2002
+ for (let n of e.kids) f(n, t + r * (e.w / 2 + q + n.w / 2), i, r), i += n.span + _e;
2003
+ e.y = e.kids.length ? (e.kids[0].y + e.kids[e.kids.length - 1].y) / 2 : n + e.span / 2;
2004
+ }, h = (e) => e.reduce((e, t) => e + t.span, 0) + Math.max(0, e.length - 1) * _e, g = h(l), _ = h(d), v = Math.max(c.h, g, _), y = (v - g) / 2;
2005
+ for (let e of l) f(e, c.w / 2 + q + e.w / 2, y, 1), y += e.span + _e;
2006
+ y = (v - _) / 2;
2007
+ for (let e of d) f(e, -(c.w / 2 + q + e.w / 2), y, -1), y += e.span + _e;
2008
+ c.x = 0, c.y = v / 2;
2009
+ let b = Infinity, x = -Infinity, S = Infinity, C = -Infinity, w = [], T = (e) => {
2010
+ 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);
2011
+ };
2012
+ T(c);
2013
+ let E = t ? 36 : 0, ee = H - b, D = H + E - S, O = (e) => ({
2014
+ x: e.x + ee,
2015
+ y: e.y + D
2016
+ });
2017
+ for (let e of w) for (let t of e.kids) {
2018
+ let r = O(e), i = O(t), a = Math.sign(i.x - r.x) || 1, o = {
2019
+ x: r.x + a * e.w / 2,
2020
+ y: r.y
2021
+ }, s = {
2022
+ x: i.x - a * t.w / 2,
2023
+ y: i.y
2024
+ }, c = (o.x + s.x) / 2;
2025
+ n.path(m([{
2026
+ c: "M",
2027
+ p: [o]
2028
+ }, {
2029
+ c: "C",
2030
+ p: [
2031
+ {
2032
+ x: c,
2033
+ y: o.y
2034
+ },
2035
+ {
2036
+ x: c,
2037
+ y: s.y
2038
+ },
2039
+ s
2040
+ ]
2041
+ }]), {
2042
+ stroke: t.color,
2043
+ sw: Math.max(1.2, 3.2 - t.depth * .6)
2044
+ });
2045
+ }
2046
+ for (let e of w) {
2047
+ let t = O(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 : ye(e.color), c = e.depth <= 1 ? "#ffffff" : u.ink;
2048
+ if (o === "none") n.line(i, a + e.h, i + e.w, a + e.h, {
2049
+ stroke: e.color,
2050
+ sw: 1.5
2051
+ }), n.text(t.x, t.y, e.text, {
2052
+ anchor: "middle",
2053
+ size: r
2054
+ });
2055
+ else {
2056
+ if (o === "circle") n.circle(t.x, t.y, e.w / 2, {
2057
+ fill: s,
2058
+ stroke: e.color,
2059
+ sw: 1.2
2060
+ });
2061
+ else if (o === "hexagon") {
2062
+ let r = e.h / 4;
2063
+ n.poly([
2064
+ [i + r, a],
2065
+ [i + e.w - r, a],
2066
+ [i + e.w, t.y],
2067
+ [i + e.w - r, a + e.h],
2068
+ [i + r, a + e.h],
2069
+ [i, t.y]
2070
+ ], {
2071
+ fill: s,
2072
+ stroke: e.color,
2073
+ sw: 1.2
2074
+ });
2075
+ } else n.rect(i, a, e.w, e.h, {
2076
+ fill: s,
2077
+ stroke: e.depth === 0 ? void 0 : e.color,
2078
+ sw: 1.2
2079
+ }, o === "rect" ? 2 : o === "cloud" ? e.h / 2 : 8);
2080
+ n.text(t.x, t.y, e.text, {
2081
+ anchor: "middle",
2082
+ size: r,
2083
+ bold: e.depth === 0,
2084
+ color: c
2085
+ });
2086
+ }
2087
+ }
2088
+ let k = x - b + 32, A = C - S + 32 + E;
2089
+ return t && (k = Math.max(k, r(t, 16, !0) + 32), n.text(k / 2, 28, t, {
2090
+ anchor: "middle",
2091
+ size: 16,
2092
+ bold: !0
2093
+ })), {
2094
+ svg: n.toString(k, A),
2095
+ w: Math.ceil(k),
2096
+ h: Math.ceil(A)
2097
+ };
2098
+ }
2099
+ function ye(e) {
2100
+ let t = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(e);
2101
+ return t ? "#" + [
2102
+ t[1],
2103
+ t[2],
2104
+ t[3]
2105
+ ].map((e) => Math.round(parseInt(e, 16) * .22 + 198.9).toString(16).padStart(2, "0")).join("") : "#f1f3f7";
2106
+ }
2107
+ // src/core/diagram/sequence.ts
2108
+ var J = (e) => Math.round(e * 100) / 100, be = class {
2109
+ s = {
2110
+ participants: [],
2111
+ events: []
2112
+ };
2113
+ ids = /* @__PURE__ */ new Map();
2114
+ participant(e, t = {}) {
2115
+ let n = this.ids.get(e);
2116
+ n || (n = {
2117
+ id: e,
2118
+ label: e,
2119
+ kind: "participant"
2120
+ }, this.ids.set(e, n), this.s.participants.push(n));
2121
+ for (let [e, r] of Object.entries(t)) r !== void 0 && (n[e] = r);
2122
+ return n;
2123
+ }
2124
+ has(e) {
2125
+ return this.ids.has(e);
2126
+ }
2127
+ push(e) {
2128
+ 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);
2129
+ }
2130
+ }, Y = 14, X = 13, xe = i(X), Se = 16, Ce = (e) => e ? e.split("\n") : [];
2131
+ function we(e) {
2132
+ let t = Ce(e.label), n = a(t, Y);
2133
+ switch (e.kind) {
2134
+ case "actor": return {
2135
+ w: Math.max(44, n.w + 8),
2136
+ h: 44 + n.h,
2137
+ text: t
2138
+ };
2139
+ case "boundary":
2140
+ case "control":
2141
+ case "entity": return {
2142
+ w: Math.max(44, n.w + 8),
2143
+ h: 34 + n.h,
2144
+ text: t
2145
+ };
2146
+ case "database": return {
2147
+ w: Math.max(64, n.w + 24),
2148
+ h: n.h + 30,
2149
+ text: t
2150
+ };
2151
+ default: return {
2152
+ w: Math.max(64, n.w + 24),
2153
+ h: n.h + 18,
2154
+ text: t
2155
+ };
2156
+ }
2157
+ }
2158
+ function Te(e, t, n, r, a) {
2159
+ let o = t.fill ?? u.fill, s = {
2160
+ fill: o,
2161
+ stroke: u.stroke,
2162
+ sw: 1.3
2163
+ }, c = {
2164
+ fill: "none",
2165
+ stroke: u.dark,
2166
+ sw: 1.5
2167
+ }, l = (t) => e.text(r, t + n.text.length * i(Y) / 2, n.text, { anchor: "middle" }), d = r - n.w / 2;
2168
+ switch (t.kind) {
2169
+ case "actor":
2170
+ e.circle(r, a + 8, 7, {
2171
+ ...c,
2172
+ fill: o
2173
+ }), 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);
2174
+ return;
2175
+ case "boundary":
2176
+ 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);
2177
+ return;
2178
+ case "control":
2179
+ e.circle(r, a + 15, 12, s).poly([
2180
+ [r + 4, a - 1],
2181
+ [r - 2, a + 3],
2182
+ [r + 4, a + 7]
2183
+ ], c, !1), l(a + 32);
2184
+ return;
2185
+ case "entity":
2186
+ e.circle(r, a + 13, 12, s).line(r - 12, a + 27, r + 12, a + 27, c), l(a + 32);
2187
+ return;
2188
+ case "database": {
2189
+ let t = n.w, i = n.h;
2190
+ e.path(`M${J(d)} ${J(a + 6)} A${J(t / 2)} 6 0 0 1 ${J(d + t)} ${J(a + 6)} L${J(d + t)} ${J(a + i - 6)} A${J(t / 2)} 6 0 0 1 ${J(d)} ${J(a + i - 6)} Z`, s), e.path(`M${J(d)} ${J(a + 6)} A${J(t / 2)} 6 0 0 0 ${J(d + t)} ${J(a + 6)}`, {
2191
+ ...s,
2192
+ fill: "none"
2193
+ }), e.text(r, a + i / 2 + 3, n.text, { anchor: "middle" });
2194
+ return;
2195
+ }
2196
+ case "collections":
2197
+ e.rect(d + 4, a - 4, n.w, n.h, s, 3), e.rect(d, a, n.w, n.h, s, 3);
2198
+ break;
2199
+ case "queue":
2200
+ e.rect(d, a, n.w, n.h, s, n.h / 2);
2201
+ break;
2202
+ default: e.rect(d, a, n.w, n.h, s, 3);
2203
+ }
2204
+ e.text(r, a + n.h / 2, n.text, { anchor: "middle" });
2205
+ }
2206
+ function Ee(e, t, n, r, i) {
2207
+ let a = u.line;
2208
+ switch (t) {
2209
+ case "filled":
2210
+ e.poly([
2211
+ [n, r],
2212
+ [n - i * 10, r - 4.5],
2213
+ [n - i * 10, r + 4.5]
2214
+ ], {
2215
+ fill: a,
2216
+ stroke: a,
2217
+ sw: 1
2218
+ });
2219
+ break;
2220
+ case "open":
2221
+ e.poly([
2222
+ [n - i * 10, r - 5],
2223
+ [n, r],
2224
+ [n - i * 10, r + 5]
2225
+ ], {
2226
+ stroke: a,
2227
+ sw: 1.4
2228
+ }, !1);
2229
+ break;
2230
+ case "half":
2231
+ e.poly([[n - i * 10, r - 5], [n, r]], {
2232
+ stroke: a,
2233
+ sw: 1.4
2234
+ }, !1);
2235
+ break;
2236
+ case "cross": e.line(n - 5 - i * 4, r - 5, n + 5 - i * 4, r + 5, {
2237
+ stroke: a,
2238
+ sw: 1.6
2239
+ }).line(n - 5 - i * 4, r + 5, n + 5 - i * 4, r - 5, {
2240
+ stroke: a,
2241
+ sw: 1.6
2242
+ });
2243
+ }
2244
+ }
2245
+ function De(e) {
2246
+ let t = e.participants;
2247
+ if (!t.length) throw new _("The sequence diagram has no participants");
2248
+ if (t.length > 300 || e.events.length > 8e3) throw new _("The sequence diagram is too large to draw");
2249
+ let n = new Map(t.map((e, t) => [e.id, t])), i = t.map(we), o = t.length, s = Array(o).fill(0);
2250
+ for (let e = 1; e < o; e++) s[e] = (i[e - 1].w + i[e].w) / 2 + 28;
2251
+ let c = 0, l = 0, d = (e, t, n) => {
2252
+ if (e > t && ([e, t] = [t, e]), e === t) return;
2253
+ let r = 0;
2254
+ for (let n = e + 1; n <= t; n++) r += s[n];
2255
+ if (r >= n) return;
2256
+ let i = (n - r) / (t - e);
2257
+ for (let n = e + 1; n <= t; n++) s[n] += i;
2258
+ }, f = (t) => e.autonumber ? r(String(t), 10) + 14 : 0, m = 0;
2259
+ for (let t of e.events) if (t.t === "msg") {
2260
+ m++;
2261
+ let e = n.get(t.from), a = n.get(t.to), s = Math.max(0, ...Ce(t.text).map((e) => r(e, X))) + f(m);
2262
+ 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);
2263
+ } else if (t.t === "note") {
2264
+ let e = a(Ce(t.text), X).w + 20, r = t.who.map((e) => n.get(e)), s = Math.min(...r), u = Math.max(...r);
2265
+ 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);
2266
+ }
2267
+ let h = [], g = (() => {
2268
+ let t = 0, n = 0;
2269
+ for (let r of e.events) r.t === "block" ? n = Math.max(n, ++t) : r.t === "end" && (t = Math.max(0, t - 1));
2270
+ return n;
2271
+ })(), v = g ? 12 + g * 8 : 0;
2272
+ h[0] = Se + Math.max(i[0].w / 2, c + i[0].w / 2, v + 10);
2273
+ for (let e = 1; e < o; e++) h[e] = h[e - 1] + s[e];
2274
+ let y = h[o - 1] + Math.max(i[o - 1].w / 2, l + i[o - 1].w / 2, v + 10) + Se, b = Se + (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(() => []), ee = [], D = [], O = [], k = /* @__PURE__ */ new Map(), A = (e, t) => {
2275
+ for (let n of O) n.lo = Math.min(n.lo, e), n.hi = Math.max(n.hi, t);
2276
+ }, te = (e, t) => {
2277
+ let n = E[e].length;
2278
+ return h[e] + (n ? t * 5 + (n - 1) * 5 : 0);
2279
+ }, ne = (e, t) => E[e].push(t), j = (e, t) => {
2280
+ let n = E[e].pop();
2281
+ n !== void 0 && ee.push({
2282
+ k: e,
2283
+ y0: n,
2284
+ y1: t,
2285
+ depth: E[e].length
2286
+ });
2287
+ };
2288
+ m = 0;
2289
+ for (let t of e.events) switch (t.t) {
2290
+ case "msg": {
2291
+ m++;
2292
+ let i = n.get(t.from), a = n.get(t.to), o = Ce(t.text), s = o.length * xe, c = {
2293
+ stroke: u.line,
2294
+ sw: 1.4,
2295
+ dash: t.dashed ? "6 4" : void 0
2296
+ }, l = f(m);
2297
+ if (i === a) {
2298
+ S += s + 4;
2299
+ let n = te(i, 1);
2300
+ w.poly([
2301
+ [n, S],
2302
+ [n + 34, S],
2303
+ [n + 34, S + 20],
2304
+ [n + 2, S + 20]
2305
+ ], c, !1), Ee(w, t.head, n, S + 20, -1), T.text(n + 6 + l, S - 4 - s / 2, o, { size: X }), e.autonumber && Oe(T, n, S, m), A(h[i] - 10, n + 34 + 6 + l + Math.max(...o.map((e) => r(e, X)))), S += 20, t.activate && ne(a, S), t.deactivate && j(i, S), S += 14;
2306
+ break;
2307
+ }
2308
+ S += s + 6;
2309
+ let d = a > i ? 1 : -1;
2310
+ t.activate && ne(a, S);
2311
+ let p = te(i, d), g = te(a, -d);
2312
+ w.line(p, S, g, S, c), Ee(w, t.head, g, S, d), t.both && Ee(w, t.head, p, S, -d), T.text((p + g) / 2 + d * l / 2, S - 5 - s / 2, o, {
2313
+ anchor: "middle",
2314
+ size: X
2315
+ }), e.autonumber && Oe(T, p, S, m), t.deactivate && j(i, S), A(Math.min(h[i], h[a]), Math.max(h[i], h[a])), S += 14;
2316
+ break;
2317
+ }
2318
+ case "act": {
2319
+ let e = n.get(t.who);
2320
+ t.on ? ne(e, S - 6) : j(e, S - 6);
2321
+ break;
2322
+ }
2323
+ case "note": {
2324
+ let e = t.who.map((e) => n.get(e)), r = Math.min(...e), i = Math.max(...e), o = Ce(t.text), s = a(o, X), c = Math.max(s.w + 20, t.pos === "over" && r !== i ? h[i] - h[r] + 50 : 0, 60), l = s.h + 12;
2325
+ S += 6;
2326
+ let d = t.pos === "left" ? h[r] - 12 - c : t.pos === "right" ? h[i] + 12 : (h[r] + h[i]) / 2 - c / 2;
2327
+ T.poly([
2328
+ [d, S],
2329
+ [d + c - 8, S],
2330
+ [d + c, S + 8],
2331
+ [d + c, S + l],
2332
+ [d, S + l]
2333
+ ], {
2334
+ fill: u.note,
2335
+ stroke: u.noteStroke,
2336
+ sw: 1
2337
+ }), T.text(d + 10, S + l / 2, o, { size: X }), A(d, d + c), S += l + 8;
2338
+ break;
2339
+ }
2340
+ case "block": {
2341
+ S += 10;
2342
+ let e = {
2343
+ kind: t.kind,
2344
+ label: t.label,
2345
+ fill: t.fill,
2346
+ y0: S,
2347
+ y1: S,
2348
+ lo: Infinity,
2349
+ hi: -Infinity,
2350
+ depth: O.length,
2351
+ elses: []
2352
+ };
2353
+ D.push(e), O.push(e), S += t.kind === "rect" ? 8 : 26;
2354
+ break;
2355
+ }
2356
+ case "else": {
2357
+ let e = O[O.length - 1];
2358
+ if (!e) break;
2359
+ S += 8, e.elses.push({
2360
+ y: S,
2361
+ label: t.label
2362
+ }), S += 24;
2363
+ break;
2364
+ }
2365
+ case "end": {
2366
+ let e = O.pop();
2367
+ if (!e) break;
2368
+ S += 10, e.y1 = S, S += 6;
2369
+ break;
2370
+ }
2371
+ case "divider": {
2372
+ S += 16;
2373
+ let e = a(Ce(t.text), X);
2374
+ T.line(Se / 2, S - 2, y - Se / 2, S - 2, {
2375
+ stroke: u.muted,
2376
+ sw: 1
2377
+ }).line(Se / 2, S + 2, y - Se / 2, S + 2, {
2378
+ stroke: u.muted,
2379
+ sw: 1
2380
+ }), t.text && (T.rect(y / 2 - e.w / 2 - 10, S - e.h / 2 - 4, e.w + 20, e.h + 8, {
2381
+ fill: "#ffffff",
2382
+ stroke: u.muted,
2383
+ sw: 1
2384
+ }, 3), T.text(y / 2, S, Ce(t.text), {
2385
+ anchor: "middle",
2386
+ size: X,
2387
+ bold: !0
2388
+ })), S += 22;
2389
+ break;
2390
+ }
2391
+ case "delay":
2392
+ S += 14, t.text && T.text(y / 2, S, Ce(t.text), {
2393
+ anchor: "middle",
2394
+ size: X,
2395
+ italic: !0,
2396
+ color: u.muted
2397
+ }), S += 18;
2398
+ break;
2399
+ case "space":
2400
+ S += t.h;
2401
+ break;
2402
+ case "destroy": {
2403
+ let e = n.get(t.who);
2404
+ S += 6, T.line(h[e] - 8, S - 8, h[e] + 8, S + 8, {
2405
+ stroke: "#c0392b",
2406
+ sw: 2
2407
+ }).line(h[e] - 8, S + 8, h[e] + 8, S - 8, {
2408
+ stroke: "#c0392b",
2409
+ sw: 2
2410
+ }), k.set(e, S), S += 14;
2411
+ break;
2412
+ }
2413
+ }
2414
+ for (let e = 0; e < o; e++) for (; E[e].length;) j(e, S);
2415
+ for (let e of O.splice(0)) e.y1 = S;
2416
+ S += 14;
2417
+ let re = e.footer !== !1, ie = S + (re ? x : 0) + Se;
2418
+ for (let e of D) {
2419
+ let t = 12 + (g - e.depth) * 8;
2420
+ e.lo > e.hi && (e.lo = h[0], e.hi = h[o - 1]);
2421
+ 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);
2422
+ if (y = Math.max(y, s + 4), e.kind === "rect") {
2423
+ C.rect(n, e.y0, s - n, e.y1 - e.y0, { fill: e.fill ?? "rgba(200, 210, 230, 0.35)" }, 2);
2424
+ continue;
2425
+ }
2426
+ let c = {
2427
+ stroke: u.muted,
2428
+ sw: 1.2
2429
+ };
2430
+ w.rect(n, e.y0, s - n, e.y1 - e.y0, c);
2431
+ let l = i;
2432
+ w.poly([
2433
+ [n, e.y0],
2434
+ [n + l, e.y0],
2435
+ [n + l, e.y0 + 12],
2436
+ [n + l - 7, e.y0 + 19],
2437
+ [n, e.y0 + 19]
2438
+ ], {
2439
+ fill: "#eef0f4",
2440
+ stroke: u.muted,
2441
+ sw: 1.2
2442
+ }), w.text(n + 7, e.y0 + 10, e.kind, {
2443
+ size: 12,
2444
+ bold: !0
2445
+ }), e.label && w.text(n + l + 8, e.y0 + 11, `[${e.label}]`, {
2446
+ size: 12,
2447
+ color: u.ink,
2448
+ italic: !0
2449
+ });
2450
+ for (let t of e.elses) w.line(n, t.y, s, t.y, {
2451
+ ...c,
2452
+ dash: "5 4"
2453
+ }), t.label && w.text(n + 10, t.y + 12, `[${t.label}]`, {
2454
+ size: 12,
2455
+ italic: !0
2456
+ });
2457
+ }
2458
+ let M = new p(), N = b + x;
2459
+ for (let e = 0; e < o; e++) M.line(h[e], N, h[e], k.get(e) ?? (re ? S : S - 6), {
2460
+ stroke: "#9aa3b2",
2461
+ sw: 1,
2462
+ dash: "5 4"
2463
+ });
2464
+ M.raw(C.body());
2465
+ for (let e of ee) {
2466
+ let t = h[e.k] - 5 + e.depth * 5;
2467
+ M.rect(t, e.y0, 10, Math.max(8, e.y1 - e.y0), {
2468
+ fill: "#f3f4f6",
2469
+ stroke: u.stroke,
2470
+ sw: 1
2471
+ });
2472
+ }
2473
+ return M.raw(w.body()), M.raw(T.body()), t.forEach((e, t) => {
2474
+ Te(M, e, i[t], h[t], b + x - i[t].h), re && !k.has(t) && Te(M, e, i[t], h[t], S);
2475
+ }), e.title && (y = Math.max(y, r(e.title, 16, !0) + 32), M.text(y / 2, 28, e.title, {
2476
+ anchor: "middle",
2477
+ size: 16,
2478
+ bold: !0
2479
+ })), {
2480
+ svg: M.toString(y, ie),
2481
+ w: Math.ceil(y),
2482
+ h: Math.ceil(ie)
2483
+ };
2484
+ }
2485
+ function Oe(e, t, n, i) {
2486
+ let a = Math.max(8, r(String(i), 10) / 2 + 4);
2487
+ e.circle(t, n, a, { fill: u.dark }), e.text(t, n, String(i), {
2488
+ anchor: "middle",
2489
+ size: 10,
2490
+ color: "#ffffff",
2491
+ bold: !0
2492
+ });
2493
+ }
2494
+ // src/core/diagram/model.ts
2495
+ function ke(e) {
2496
+ switch (e.t) {
2497
+ case "graph": return P(e.graph);
2498
+ case "sequence": return De(e.seq);
2499
+ case "pie": return me(e.pie);
2500
+ case "gantt": return ge(e.gantt);
2501
+ case "tree": return ve(e.root, e.title);
2502
+ }
2503
+ }
2504
+ // src/core/diagram/mermaid.ts
2505
+ function Ae(e) {
2506
+ let t = e.replace(/^/, "").replace(/\r\n?/g, "\n"), n, r = /^\s*---\n([\s\S]*?)\n---[ \t]*(\n|$)/.exec(t);
2507
+ return r && (n = /^title:\s*(.+)$/m.exec(r[1])?.[1].trim().replace(/^(["'])(.*)\1$/, "$2"), t = t.slice(r[0].length)), t = t.replace(/%%\{[\s\S]*?\}%%/g, ""), {
2508
+ lines: t.split("\n").filter((e) => !/^\s*%%/.test(e)),
2509
+ title: n
2510
+ };
2511
+ }
2512
+ function je(e) {
2513
+ let { lines: t, title: n } = Ae(e), r = t.findIndex((e) => e.trim());
2514
+ if (r < 0) throw new _("The diagram is empty");
2515
+ let i = t[r].trim(), a = /^[\w-]+/.exec(i)?.[0] ?? i, o = t.slice(r + 1);
2516
+ switch (a) {
2517
+ case "graph":
2518
+ case "flowchart":
2519
+ case "flowchart-elk": return {
2520
+ t: "graph",
2521
+ graph: Ue(i, o, n)
2522
+ };
2523
+ case "sequenceDiagram": return {
2524
+ t: "sequence",
2525
+ seq: Ke(o, n)
2526
+ };
2527
+ case "classDiagram":
2528
+ case "classDiagram-v2": return {
2529
+ t: "graph",
2530
+ graph: Ye(o, n)
2531
+ };
2532
+ case "stateDiagram":
2533
+ case "stateDiagram-v2": return {
2534
+ t: "graph",
2535
+ graph: Xe(o, n)
2536
+ };
2537
+ case "erDiagram": return {
2538
+ t: "graph",
2539
+ graph: $e(o, n)
2540
+ };
2541
+ case "pie": return {
2542
+ t: "pie",
2543
+ pie: et(i, o, n)
2544
+ };
2545
+ case "gantt": return {
2546
+ t: "gantt",
2547
+ gantt: rt(o, n)
2548
+ };
2549
+ case "mindmap": return {
2550
+ t: "tree",
2551
+ root: at(o),
2552
+ title: n
2553
+ };
2554
+ default: throw new _(`Mermaid “${a}” diagrams are not supported yet`);
2555
+ }
2556
+ }
2557
+ var Me = (e) => ke(je(e)), Ne = {
2558
+ TB: "TB",
2559
+ TD: "TB",
2560
+ BT: "BT",
2561
+ LR: "LR",
2562
+ RL: "RL"
2563
+ };
2564
+ function Z(e) {
2565
+ let t = e.trim();
2566
+ return /^".*"$/s.test(t) && (t = t.slice(1, -1)), /^`.*`$/s.test(t) && (t = g(t.slice(1, -1))), t = t.replace(/\bfa[bkrs]?:fa-[\w-]+\s*/g, ""), h(t).trim();
2567
+ }
2568
+ function Pe(e) {
2569
+ let t = {};
2570
+ for (let n of e.split(/,(?![^(]*\))/)) {
2571
+ let e = n.indexOf(":");
2572
+ if (e < 0) continue;
2573
+ let r = n.slice(0, e).trim().toLowerCase(), i = n.slice(e + 1).trim().replace(/;$/, "");
2574
+ r === "fill" || r === "background" ? t.fill = l(i) : r === "stroke" ? t.stroke = l(i) : r === "color" ? t.color = l(i) : r === "stroke-width" ? t.sw = Math.min(8, parseFloat(i) || 1) : r === "stroke-dasharray" ? t.dash = /^[\d.\s]+$/.test(i) ? i : "5 5" : r === "font-weight" ? t.bold = /bold|[6-9]00/.test(i) : r === "font-style" && (t.italic = i === "italic");
2575
+ }
2576
+ return t;
2577
+ }
2578
+ var Fe = (e, t) => {
2579
+ let n = { ...e };
2580
+ for (let [e, r] of Object.entries(t)) r !== void 0 && (n[e] = r);
2581
+ return n;
2582
+ };
2583
+ function Ie(e, t) {
2584
+ let n = [], r = 0, i = "", a = "";
2585
+ for (let o of e) {
2586
+ if (i) o === i && (i = "");
2587
+ else if (o === "\"" || o === "`") i = o;
2588
+ else if ("([{".includes(o)) r++;
2589
+ else if (")]}".includes(o)) r = Math.max(0, r - 1);
2590
+ else if (o === t && !r) {
2591
+ n.push(a), a = "";
2592
+ continue;
2593
+ }
2594
+ a += o;
2595
+ }
2596
+ return n.push(a), n;
2597
+ }
2598
+ var Le = [
2599
+ [
2600
+ "(((",
2601
+ [")))"],
2602
+ ["doublecircle"]
2603
+ ],
2604
+ [
2605
+ "((",
2606
+ ["))"],
2607
+ ["circle"]
2608
+ ],
2609
+ [
2610
+ "([",
2611
+ ["])"],
2612
+ ["stadium"]
2613
+ ],
2614
+ [
2615
+ "[[",
2616
+ ["]]"],
2617
+ ["subroutine"]
2618
+ ],
2619
+ [
2620
+ "[(",
2621
+ [")]"],
2622
+ ["cylinder"]
2623
+ ],
2624
+ [
2625
+ "{{",
2626
+ ["}}"],
2627
+ ["hexagon"]
2628
+ ],
2629
+ [
2630
+ "[/",
2631
+ ["/]", "\\]"],
2632
+ ["lean-r", "trap-b"]
2633
+ ],
2634
+ [
2635
+ "[\\",
2636
+ ["\\]", "/]"],
2637
+ ["lean-l", "trap-t"]
2638
+ ],
2639
+ [
2640
+ "[",
2641
+ ["]"],
2642
+ ["rect"]
2643
+ ],
2644
+ [
2645
+ "(",
2646
+ [")"],
2647
+ ["round"]
2648
+ ],
2649
+ [
2650
+ "{",
2651
+ ["}"],
2652
+ ["diamond"]
2653
+ ],
2654
+ [
2655
+ ">",
2656
+ ["]"],
2657
+ ["flag"]
2658
+ ]
2659
+ ], Re = {
2660
+ rect: "rect",
2661
+ rectangle: "rect",
2662
+ proc: "rect",
2663
+ process: "rect",
2664
+ rounded: "round",
2665
+ event: "round",
2666
+ stadium: "stadium",
2667
+ pill: "stadium",
2668
+ terminal: "stadium",
2669
+ subproc: "subroutine",
2670
+ subprocess: "subroutine",
2671
+ subroutine: "subroutine",
2672
+ "fr-rect": "subroutine",
2673
+ cyl: "cylinder",
2674
+ cylinder: "cylinder",
2675
+ database: "cylinder",
2676
+ db: "cylinder",
2677
+ circle: "circle",
2678
+ circ: "circle",
2679
+ "dbl-circ": "doublecircle",
2680
+ "double-circle": "doublecircle",
2681
+ diam: "diamond",
2682
+ diamond: "diamond",
2683
+ decision: "diamond",
2684
+ question: "diamond",
2685
+ hex: "hexagon",
2686
+ hexagon: "hexagon",
2687
+ prepare: "hexagon",
2688
+ "lean-r": "lean-r",
2689
+ "lean-right": "lean-r",
2690
+ "in-out": "lean-r",
2691
+ "lean-l": "lean-l",
2692
+ "lean-left": "lean-l",
2693
+ "out-in": "lean-l",
2694
+ "trap-b": "trap-b",
2695
+ trapezoid: "trap-b",
2696
+ priority: "trap-b",
2697
+ "trap-t": "trap-t",
2698
+ "inv-trapezoid": "trap-t",
2699
+ manual: "trap-t",
2700
+ odd: "flag",
2701
+ flag: "flag",
2702
+ doc: "note",
2703
+ document: "note",
2704
+ "sm-circ": "start",
2705
+ start: "start",
2706
+ "small-circle": "start",
2707
+ "fr-circ": "end",
2708
+ stop: "end",
2709
+ "framed-circle": "end",
2710
+ fork: "bar",
2711
+ join: "bar",
2712
+ text: "none",
2713
+ "notch-rect": "note",
2714
+ card: "note",
2715
+ "f-circ": "point",
2716
+ junction: "point"
2717
+ }, ze = /^[\p{L}\p{N}_$]+(?:-[\p{L}\p{N}_$]+)*/u;
2718
+ function Be(e, t, n) {
2719
+ for (; e[t] === " " || e[t] === " ";) t++;
2720
+ let r = ze.exec(e.slice(t));
2721
+ if (!r) return null;
2722
+ let i = r[0];
2723
+ t += i.length;
2724
+ let a = {};
2725
+ if (e.startsWith("@{", t)) {
2726
+ let n = e.indexOf("}", t);
2727
+ if (n > 0) {
2728
+ let r = e.slice(t + 2, n), i = /shape\s*:\s*["']?([\w-]+)/.exec(r)?.[1], o = /label\s*:\s*("([^"]*)"|'([^']*)'|[^,]+)/.exec(r);
2729
+ i && Re[i] && (a.shape = Re[i]), o && (a.label = Z(o[2] ?? o[3] ?? o[1])), t = n + 1;
2730
+ }
2731
+ } else for (let [n, r, i] of Le) {
2732
+ if (!e.startsWith(n, t)) continue;
2733
+ let o = t + n.length, s = "";
2734
+ for (; e[o] === " ";) o++;
2735
+ if (e[o] === "\"") {
2736
+ let t = e.indexOf("\"", o + 1);
2737
+ if (t < 0) break;
2738
+ for (s = e.slice(o, t + 1), o = t + 1; e[o] === " ";) o++;
2739
+ }
2740
+ let c = -1, l = 0;
2741
+ if (r.forEach((t, n) => {
2742
+ let r = e.indexOf(t, o);
2743
+ r >= 0 && (c < 0 || r < c) && (c = r, l = n);
2744
+ }), c < 0) break;
2745
+ s ||= e.slice(o, c), a = {
2746
+ label: Z(s),
2747
+ shape: i[l]
2748
+ }, t = c + r[l].length;
2749
+ break;
2750
+ }
2751
+ let o = /^:::([\w-]+)/.exec(e.slice(t));
2752
+ if (o && (n.classes.set(i, [...n.classes.get(i) ?? [], o[1]]), t += o[0].length), !n.b.isCluster(i)) {
2753
+ let e = n.b.node(i, a), t = n.clusters[n.clusters.length - 1];
2754
+ t !== void 0 && t !== i && (e.cluster === void 0 || n.clusters.includes(e.cluster)) && (e.cluster = t);
2755
+ }
2756
+ return [i, t];
2757
+ }
2758
+ var Ve = {
2759
+ ">": "arrow",
2760
+ o: "circle",
2761
+ x: "cross"
2762
+ };
2763
+ function He(e, t) {
2764
+ let n = e.slice(t), r = /^\s*([<ox]?)(--|==|-\.)\s+(.+?)\s*(-{2,}|={2,}|\.+-)([>ox]?)(?=[\s\p{L}\p{N}_$"]|$)/u.exec(n), i, a = "", o = "", s = "", c = !1;
2765
+ if (r) [, a, , i, o, s] = r, c = r[2] === "-.";
2766
+ else {
2767
+ if (r = /^\s*(~{3,})/.exec(n), r) return [{
2768
+ line: "hidden",
2769
+ minlen: 1
2770
+ }, t + r[0].length];
2771
+ if (r = /^\s*([<ox]?)(-{2,}|={2,}|-\.+-)([>ox]?)(?![-=.])/.exec(n), !r) return null;
2772
+ [, a, o, s] = r, c = o.includes(".");
2773
+ }
2774
+ let l = r[0].length, u = /^\s*\|([^|]*)\|/.exec(n.slice(l));
2775
+ u && (i = u[1], l += u[0].length), (s === "x" || s === "o") && /^[\p{L}\p{N}_]/u.test(n.slice(l)) && !u && (s = "", l--);
2776
+ let d = o.includes("="), f = c ? (o.match(/\./g)?.length ?? 1) - 1 : o.length - (s ? 2 : 3);
2777
+ return [{
2778
+ label: i !== void 0 && i.trim() ? Z(i) : void 0,
2779
+ head: Ve[s] ?? "none",
2780
+ tail: a === "<" ? "arrow" : a === "o" ? "circle" : a === "x" ? "cross" : "none",
2781
+ line: d ? "thick" : c ? "dashed" : "solid",
2782
+ minlen: 1 + Math.max(0, Math.min(f, 6))
2783
+ }, t + l];
2784
+ }
2785
+ function Ue(e, t, n) {
2786
+ let r = /^\w+\s+(\w+)/.exec(e)?.[1]?.toUpperCase(), i = new v(Ne[r ?? "TB"] ?? "TB", "rect"), a = {
2787
+ b: i,
2788
+ clusters: [],
2789
+ classes: /* @__PURE__ */ new Map(),
2790
+ defs: /* @__PURE__ */ new Map()
2791
+ }, o = [], s = t.flatMap((e) => Ie(e, ";")).map((e) => e.trim()).filter(Boolean), c = Ie(e, ";").slice(1).map((e) => e.trim()).filter(Boolean);
2792
+ for (let e of [...c, ...s]) {
2793
+ let t;
2794
+ if (t = /^subgraph\s+(.*)$/.exec(e)) {
2795
+ let e = t[1].trim(), n = e, r = e, o = /^([^\s[]+)\s*\[(.*)\]$/.exec(e);
2796
+ o && (n = o[1], r = o[2]), r = Z(r), n = n.replace(/^"(.*)"$/, "$1");
2797
+ let s = a.clusters[a.clusters.length - 1];
2798
+ i.cluster(n, r, s), a.clusters.push(n);
2799
+ continue;
2800
+ }
2801
+ if (e === "end") {
2802
+ a.clusters.pop();
2803
+ continue;
2804
+ }
2805
+ if (/^direction\s+\w+$/.test(e)) continue;
2806
+ if (t = /^classDef\s+([\w,-]+)\s+(.+)$/.exec(e)) {
2807
+ for (let e of t[1].split(",")) a.defs.set(e.trim(), Fe(a.defs.get(e.trim()), Pe(t[2])));
2808
+ continue;
2809
+ }
2810
+ if (t = /^class\s+([^\s]+)\s+([\w-]+)$/.exec(e)) {
2811
+ for (let e of t[1].split(",")) a.classes.set(e.trim(), [...a.classes.get(e.trim()) ?? [], t[2]]);
2812
+ continue;
2813
+ }
2814
+ if (t = /^style\s+([^\s]+)\s+(.+)$/.exec(e)) {
2815
+ let e = Pe(t[2]);
2816
+ for (let n of t[1].split(",")) if (i.isCluster(n)) {
2817
+ let t = i.g.clusters.find((e) => e.id === n);
2818
+ t.style = Fe(t.style, e);
2819
+ } else i.node(n).style = Fe(i.get(n)?.style, e);
2820
+ continue;
2821
+ }
2822
+ if (t = /^linkStyle\s+([\d,\s]+|default)\s+(.+)$/.exec(e)) {
2823
+ o.push([t[1].trim(), Pe(t[2])]);
2824
+ continue;
2825
+ }
2826
+ if (/^(click|accTitle|accDescr|callback)\b/.test(e)) continue;
2827
+ let n = 0, r = [], s = null;
2828
+ for (;;) {
2829
+ let t = [];
2830
+ for (;;) {
2831
+ let r = Be(e, n, a);
2832
+ if (!r) break;
2833
+ t.push(r[0]), n = r[1];
2834
+ let i = /^\s*&\s*/.exec(e.slice(n));
2835
+ if (!i) break;
2836
+ n += i[0].length;
2837
+ }
2838
+ if (!t.length) break;
2839
+ if (s) for (let e of r) for (let n of t) i.edge({
2840
+ ...s,
2841
+ from: e,
2842
+ to: n
2843
+ });
2844
+ r = t;
2845
+ let o = He(e, n);
2846
+ if (!o) break;
2847
+ s = o[0], n = o[1];
2848
+ }
2849
+ }
2850
+ let l = a.defs.get("default");
2851
+ for (let e of i.g.nodes) {
2852
+ let t = l ? Fe(void 0, l) : e.style;
2853
+ l && e.style && (t = Fe(t, e.style));
2854
+ for (let n of a.classes.get(e.id) ?? []) t = Fe(t, a.defs.get(n) ?? {});
2855
+ t && (e.style = t);
2856
+ }
2857
+ for (let e of i.g.clusters) for (let t of a.classes.get(e.id) ?? []) e.style = Fe(e.style, a.defs.get(t) ?? {});
2858
+ for (let [e, t] of o) {
2859
+ let n = e === "default" ? i.g.edges.map((e, t) => t) : e.split(",").map((e) => Number(e.trim()));
2860
+ for (let e of n) {
2861
+ let n = i.g.edges[e];
2862
+ n && (t.stroke && (n.color = t.stroke), t.sw && (n.sw = t.sw), t.dash && (n.line = "dashed"));
2863
+ }
2864
+ }
2865
+ return i.g.title = n, i.g;
2866
+ }
2867
+ var We = [
2868
+ [
2869
+ "<<-->>",
2870
+ !0,
2871
+ "filled",
2872
+ !0
2873
+ ],
2874
+ [
2875
+ "<<->>",
2876
+ !1,
2877
+ "filled",
2878
+ !0
2879
+ ],
2880
+ [
2881
+ "-->>",
2882
+ !0,
2883
+ "filled",
2884
+ !1
2885
+ ],
2886
+ [
2887
+ "->>",
2888
+ !1,
2889
+ "filled",
2890
+ !1
2891
+ ],
2892
+ [
2893
+ "--x",
2894
+ !0,
2895
+ "cross",
2896
+ !1
2897
+ ],
2898
+ [
2899
+ "-x",
2900
+ !1,
2901
+ "cross",
2902
+ !1
2903
+ ],
2904
+ [
2905
+ "--)",
2906
+ !0,
2907
+ "open",
2908
+ !1
2909
+ ],
2910
+ [
2911
+ "-)",
2912
+ !1,
2913
+ "open",
2914
+ !1
2915
+ ],
2916
+ [
2917
+ "-->",
2918
+ !0,
2919
+ "none",
2920
+ !1
2921
+ ],
2922
+ [
2923
+ "->",
2924
+ !1,
2925
+ "none",
2926
+ !1
2927
+ ]
2928
+ ], Ge = {
2929
+ participant: "participant",
2930
+ actor: "actor",
2931
+ boundary: "boundary",
2932
+ control: "control",
2933
+ entity: "entity",
2934
+ database: "database",
2935
+ collections: "collections",
2936
+ queue: "queue"
2937
+ };
2938
+ function Ke(e, t) {
2939
+ let n = new be();
2940
+ n.s.title = t;
2941
+ let r = [], i = RegExp(`^(.+?)\\s*(${We.map(([e]) => e.replace(/[()|]/g, "\\$&")).join("|")})\\s*([+-]?)\\s*([^:]+?)\\s*(?::(.*))?$`);
2942
+ for (let t of e) {
2943
+ let e = t.trim();
2944
+ if (!e) continue;
2945
+ let a;
2946
+ if (a = /^(?:create\s+)?(participant|actor)\s+(.+?)(?:@\{(.*)\})?(?:\s+as\s+(.+))?$/.exec(e)) {
2947
+ let e = a[2].trim(), t = a[3] ? /"type"\s*:\s*"(\w+)"/.exec(a[3])?.[1] : void 0;
2948
+ n.participant(e, {
2949
+ kind: Ge[t ?? a[1]] ?? "participant",
2950
+ label: a[4] ? Z(a[4]) : e
2951
+ });
2952
+ } else if (a = /^destroy\s+(.+)$/.exec(e)) n.push({
2953
+ t: "destroy",
2954
+ who: a[1].trim()
2955
+ });
2956
+ else if (/^autonumber\b/.test(e)) n.s.autonumber = !/\boff\b/.test(e);
2957
+ else if (a = /^title\s*:?\s*(.+)$/.exec(e)) n.s.title = Z(a[1]);
2958
+ else if (a = /^(activate|deactivate)\s+(.+)$/.exec(e)) n.push({
2959
+ t: "act",
2960
+ who: a[2].trim(),
2961
+ on: a[1] === "activate"
2962
+ });
2963
+ else if (a = /^note\s+(left of|right of|over)\s+([^:]+):(.*)$/i.exec(e)) {
2964
+ let e = a[1].toLowerCase().startsWith("left") ? "left" : a[1].toLowerCase().startsWith("right") ? "right" : "over";
2965
+ n.push({
2966
+ t: "note",
2967
+ pos: e,
2968
+ who: a[2].split(",").map((e) => e.trim()),
2969
+ text: Z(a[3])
2970
+ });
2971
+ } else if (a = /^box\b/.exec(e)) r.push("box");
2972
+ else if (a = /^(loop|alt|opt|par|par_over|critical|break|rect)\b\s*(.*)$/.exec(e)) {
2973
+ r.push("frag");
2974
+ let e = a[1] === "par_over" ? "par" : a[1];
2975
+ n.push({
2976
+ t: "block",
2977
+ kind: e,
2978
+ label: e === "rect" ? "" : Z(a[2]),
2979
+ fill: e === "rect" ? l(a[2]) : void 0
2980
+ });
2981
+ } else if (a = /^(else|and|option)\b\s*(.*)$/.exec(e)) n.push({
2982
+ t: "else",
2983
+ label: Z(a[2])
2984
+ });
2985
+ else if (e === "end") r.pop() === "frag" && n.push({ t: "end" });
2986
+ else if (a = i.exec(e)) {
2987
+ let e = We.find(([e]) => e === a[2]);
2988
+ n.push({
2989
+ t: "msg",
2990
+ from: a[1].trim(),
2991
+ to: a[4].trim(),
2992
+ text: Z(a[5] ?? ""),
2993
+ dashed: e[1],
2994
+ head: e[2],
2995
+ both: e[3],
2996
+ activate: a[3] === "+",
2997
+ deactivate: a[3] === "-"
2998
+ });
2999
+ }
3000
+ }
3001
+ return n.s;
3002
+ }
3003
+ var qe = (e) => e.replace(/~([^~]*)~/g, "<$1>"), Je = {
3004
+ "<|": "triangle",
3005
+ "|>": "triangle",
3006
+ "*": "diamond",
3007
+ o: "odiamond",
3008
+ "<": "open",
3009
+ ">": "open",
3010
+ "()": "ocircle"
3011
+ };
3012
+ function Ye(e, t) {
3013
+ let n = new v("TB", "rect"), r = /* @__PURE__ */ new Map(), i = [], a = (e) => {
3014
+ let t = e.replace(/~.*~$/, "");
3015
+ return r.has(t) || r.set(t, {
3016
+ attrs: [],
3017
+ methods: [],
3018
+ label: e === t ? void 0 : qe(e)
3019
+ }), n.node(t, {}, i[i.length - 1]), r.get(t);
3020
+ }, o = (e, t) => {
3021
+ let n = qe(t.trim());
3022
+ if (!n) return;
3023
+ let r = /^<<(.+)>>$/.exec(n);
3024
+ r ? e.stereo = r[1] : n.includes("(") ? e.methods.push(n.replace(/[$*]$/, "")) : e.attrs.push(n.replace(/[$*]$/, ""));
3025
+ }, s = null, c = 0, l = /^([^\s"]+?)\s*(?:"([^"]*)"\s*)?(<\||\*|o|<|\(\))?(--|\.\.)(\|>|\*|o|>|\(\))?\s*(?:"([^"]*)"\s*)?([^\s":]+)\s*(?::\s*(.*))?$/;
3026
+ for (let t of e) {
3027
+ let e = t.trim();
3028
+ if (!e) continue;
3029
+ if (s) {
3030
+ e === "}" ? s = null : o(s, e);
3031
+ continue;
3032
+ }
3033
+ let r;
3034
+ if (r = /^direction\s+(\w+)$/.exec(e)) n.g.dir = Ne[r[1].toUpperCase()] ?? "TB";
3035
+ else if (r = /^namespace\s+([\w.]+)\s*\{$/.exec(e)) n.cluster(r[1], r[1], i[i.length - 1]), i.push(r[1]);
3036
+ else if (e === "}" && i.length) i.pop();
3037
+ else if (r = /^class\s+([\w$~,<>.-]+?)(?:\["([^"]*)"\])?(?::::[\w-]+)?\s*(\{)?\s*(\})?$/.exec(e)) {
3038
+ let e = a(r[1]);
3039
+ r[2] && (e.label = r[2]), r[3] && !r[4] && (s = e);
3040
+ } else if (r = /^<<(.+)>>\s+(\S+)$/.exec(e)) a(r[2]).stereo = r[1];
3041
+ else if (r = /^note\s+(?:for\s+(\S+)\s+)?"(.*)"$/.exec(e)) {
3042
+ let e = `__note${c++}`;
3043
+ n.node(e, {
3044
+ label: Z(r[2]),
3045
+ shape: "note",
3046
+ style: {
3047
+ fill: "#fff6c8",
3048
+ stroke: "#c9a227"
3049
+ }
3050
+ }), r[1] && n.edge({
3051
+ from: e,
3052
+ to: r[1].replace(/~.*~$/, ""),
3053
+ line: "dashed",
3054
+ head: "none"
3055
+ });
3056
+ } else if (!/^(classDef|cssClass|click|callback|link|style)\b/.test(e)) {
3057
+ if (r = l.exec(e)) {
3058
+ let [, e, t, i, o, s, c, l, u] = r;
3059
+ a(e), a(l), n.edge({
3060
+ from: e.replace(/~.*~$/, ""),
3061
+ to: l.replace(/~.*~$/, ""),
3062
+ tail: i ? Je[i] : "none",
3063
+ head: s ? Je[s] : "none",
3064
+ line: o === ".." ? "dashed" : "solid",
3065
+ label: u ? Z(u) : void 0,
3066
+ tailLabel: t || void 0,
3067
+ headLabel: c || void 0
3068
+ });
3069
+ } else (r = /^([\w$~.-]+)\s*:\s*(.+)$/.exec(e)) && o(a(r[1]), r[2]);
3070
+ }
3071
+ }
3072
+ for (let e of n.g.nodes) {
3073
+ let t = r.get(e.id);
3074
+ if (!t) continue;
3075
+ let n = [];
3076
+ t.stereo && n.push([`«${t.stereo}»`]), n.push([t.label ?? e.id]);
3077
+ let i = [{
3078
+ rows: n,
3079
+ bold: !0,
3080
+ center: !0
3081
+ }];
3082
+ (t.attrs.length || t.methods.length) && i.push({ rows: t.attrs.map((e) => [e]) }, { rows: t.methods.map((e) => [e]) }), e.sections = i;
3083
+ }
3084
+ return n.g.title = t, n.g;
3085
+ }
3086
+ function Xe(e, t) {
3087
+ let n = new v("TB", "round"), r = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = 0, c = null, l = null, u = () => r[r.length - 1], d = (e, t) => {
3088
+ let r = e.trim(), i = /:::([\w-]+)$/.exec(r);
3089
+ if (i && (r = r.slice(0, i.index), o.set(r, [...o.get(r) ?? [], i[1]])), r === "[*]") {
3090
+ let e = `${u() ?? ""}__${t ? "end" : "start"}`;
3091
+ return n.node(e, {
3092
+ label: "",
3093
+ shape: t ? "end" : "start"
3094
+ }, u()), e;
3095
+ }
3096
+ return n.isCluster(r) || n.node(r, {}, u()), r;
3097
+ };
3098
+ for (let t of e) {
3099
+ let e = t.trim();
3100
+ if (c) {
3101
+ if (/^end\s*note$/i.test(e)) {
3102
+ let e = `__note${s++}`;
3103
+ n.node(e, {
3104
+ label: c.join("\n"),
3105
+ shape: "note",
3106
+ style: {
3107
+ fill: "#fff6c8",
3108
+ stroke: "#c9a227"
3109
+ }
3110
+ }, u()), l && n.edge({
3111
+ from: l.id,
3112
+ to: e,
3113
+ line: "dashed",
3114
+ head: "none"
3115
+ }), c = null;
3116
+ } else c.push(e);
3117
+ continue;
3118
+ }
3119
+ if (!e || e === "--") continue;
3120
+ let f;
3121
+ if (f = /^direction\s+(\w+)$/.exec(e)) r.length || (n.g.dir = Ne[f[1].toUpperCase()] ?? "TB");
3122
+ else if (f = /^state\s+(?:"([^"]+)"\s+as\s+)?([\w.-]+)\s*(<<(fork|join|choice)>>)?\s*(\{)?$/.exec(e)) {
3123
+ let e = f[2];
3124
+ if (f[5]) {
3125
+ n.cluster(e, f[1] ? Z(f[1]) : e, u()), r.push(e);
3126
+ continue;
3127
+ }
3128
+ let t = f[4];
3129
+ n.node(e, t === "fork" || t === "join" ? {
3130
+ shape: "bar",
3131
+ label: ""
3132
+ } : t === "choice" ? {
3133
+ shape: "diamond",
3134
+ label: ""
3135
+ } : f[1] ? { label: Z(f[1]) } : {}, u());
3136
+ } else if (f = /^state\s+"([^"]+)"\s+as\s+([\w.-]+)\s*\{$/.exec(e)) n.cluster(f[2], Z(f[1]), u()), r.push(f[2]);
3137
+ else if (e === "}") r.pop();
3138
+ else if (f = /^note\s+(left of|right of|over)\s+([\w.-]+)\s*(?::\s*(.*))?$/i.exec(e)) {
3139
+ let e = f[2];
3140
+ if (f[3] !== void 0) {
3141
+ let t = `__note${s++}`;
3142
+ n.node(t, {
3143
+ label: Z(f[3]),
3144
+ shape: "note",
3145
+ style: {
3146
+ fill: "#fff6c8",
3147
+ stroke: "#c9a227"
3148
+ }
3149
+ }, u()), n.edge({
3150
+ from: e,
3151
+ to: t,
3152
+ line: "dashed",
3153
+ head: "none"
3154
+ });
3155
+ } else c = [], l = { id: e };
3156
+ } else if (f = /^classDef\s+([\w-]+)\s+(.+)$/.exec(e)) a.set(f[1], Pe(f[2]));
3157
+ else if (f = /^class\s+([\w,\s-]+?)\s+([\w-]+)$/.exec(e)) for (let e of f[1].split(",")) o.set(e.trim(), [...o.get(e.trim()) ?? [], f[2]]);
3158
+ else if (f = /^(.+?)\s*-->\s*([^:]+?)\s*(?::\s*(.*))?$/.exec(e)) {
3159
+ let e = d(f[1], !1), t = d(f[2], !0);
3160
+ n.edge({
3161
+ from: e,
3162
+ to: t,
3163
+ head: "arrow",
3164
+ label: f[3] ? Z(f[3]) : void 0
3165
+ });
3166
+ } else (f = /^([\w.-]+)\s*:\s*(.+)$/.exec(e)) ? (d(f[1], !1), i.set(f[1], [...i.get(f[1]) ?? [], Z(f[2])])) : (f = /^([\w.-]+)$/.exec(e)) && d(f[1], !1);
3167
+ }
3168
+ for (let e of n.g.nodes) {
3169
+ let t = i.get(e.id);
3170
+ t && e.shape === "round" && (e.sections = [{
3171
+ rows: [[e.label]],
3172
+ bold: !0,
3173
+ center: !0
3174
+ }, { rows: t.map((e) => [e]) }]);
3175
+ for (let t of o.get(e.id) ?? []) e.style = Fe(e.style, a.get(t) ?? {});
3176
+ }
3177
+ return n.g.title = t, n.g;
3178
+ }
3179
+ var Ze = {
3180
+ "|o": "zero-one",
3181
+ "o|": "zero-one",
3182
+ "||": "one",
3183
+ "}o": "zero-many",
3184
+ "o{": "zero-many",
3185
+ "}|": "one-many",
3186
+ "|{": "one-many"
3187
+ }, Qe = {
3188
+ "one or zero": "zero-one",
3189
+ "zero or one": "zero-one",
3190
+ "one or more": "one-many",
3191
+ "one or many": "one-many",
3192
+ "many(1)": "one-many",
3193
+ "1+": "one-many",
3194
+ "zero or more": "zero-many",
3195
+ "zero or many": "zero-many",
3196
+ "many(0)": "zero-many",
3197
+ "0+": "zero-many",
3198
+ "only one": "one",
3199
+ 1: "one"
3200
+ };
3201
+ function $e(e, t) {
3202
+ let n = new v("TB", "rect"), r = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map(), a = null, o = (e) => {
3203
+ let t = /^([\w-]+)(?:\[\s*"?([^"\]]*)"?\s*\])?$/.exec(e.trim().replace(/^"(.*)"$/, "$1")), a = t ? t[1] : e.trim().replace(/^"(.*)"$/, "$1");
3204
+ return t?.[2] && i.set(a, t[2]), n.node(a), r.has(a) || r.set(a, []), a;
3205
+ }, s = Object.keys(Qe).sort((e, t) => t.length - e.length).map((e) => e.replace(/[()+]/g, "\\$&")).join("|"), c = /^(\S+)\s+(\|o|\|\||\}o|\}\|)(--|\.\.)(o\||\|\||o\{|\|\{)\s+(\S+)\s*:\s*(.*)$/, l = RegExp(`^(\\S+)\\s+(${s})\\s+(to|optionally to)\\s+(${s})\\s+(\\S+)\\s*:\\s*(.*)$`, "i");
3206
+ for (let t of e) {
3207
+ let e = t.trim();
3208
+ if (!e) continue;
3209
+ if (a) {
3210
+ if (e === "}") {
3211
+ a = null;
3212
+ continue;
3213
+ }
3214
+ let t = /^(\S+)\s+(\S+)((?:\s+(?:PK|FK|UK)\s*,?)*)\s*(?:"(.*)")?$/.exec(e);
3215
+ t && r.get(a).push([
3216
+ t[1].replace(/~([^~]*)~/g, "<$1>"),
3217
+ t[2],
3218
+ t[3].replace(/\s+/g, " ").trim(),
3219
+ t[4] ?? ""
3220
+ ]);
3221
+ continue;
3222
+ }
3223
+ let i;
3224
+ if (i = /^direction\s+(\w+)$/.exec(e)) n.g.dir = Ne[i[1].toUpperCase()] ?? "TB";
3225
+ else if (i = /^(.+?)\s*\{$/.exec(e)) a = o(i[1]);
3226
+ else if (i = c.exec(e)) {
3227
+ let e = o(i[1]), t = o(i[5]);
3228
+ n.edge({
3229
+ from: e,
3230
+ to: t,
3231
+ tail: Ze[i[2]],
3232
+ head: Ze[i[4]],
3233
+ line: i[3] === ".." ? "dashed" : "solid",
3234
+ label: Z(i[6]) || void 0
3235
+ });
3236
+ } else if (i = l.exec(e)) {
3237
+ let e = o(i[1]), t = o(i[5]);
3238
+ n.edge({
3239
+ from: e,
3240
+ to: t,
3241
+ tail: Qe[i[2].toLowerCase()],
3242
+ head: Qe[i[4].toLowerCase()],
3243
+ line: i[3].toLowerCase() === "to" ? "solid" : "dashed",
3244
+ label: Z(i[6]) || void 0
3245
+ });
3246
+ } else (i = /^([\w-]+(?:\[[^\]]*\])?)$/.exec(e)) && o(i[1]);
3247
+ }
3248
+ for (let e of n.g.nodes) {
3249
+ let t = r.get(e.id) ?? [], n = t.map((e) => e.filter((e, t) => t < 2 || e));
3250
+ e.sections = [{
3251
+ rows: [[i.get(e.id) ?? e.id]],
3252
+ bold: !0,
3253
+ center: !0
3254
+ }], t.length && e.sections.push({ rows: n });
3255
+ }
3256
+ return n.g.title = t, n.g;
3257
+ }
3258
+ function et(e, t, n) {
3259
+ let r = /\bshowData\b/.test(e), i = /\btitle\s+(.+)$/.exec(e)?.[1] ?? n, a = [];
3260
+ for (let e of t) {
3261
+ let t = e.trim(), n;
3262
+ (n = /^title\s+(.+)$/.exec(t)) ? i = n[1] : (n = /^"([^"]*)"\s*:\s*([-\d.eE+]+)$/.exec(t)) && a.push({
3263
+ label: Z(n[1]),
3264
+ value: Number(n[2])
3265
+ });
3266
+ }
3267
+ return {
3268
+ title: i ? Z(i) : void 0,
3269
+ showData: r,
3270
+ slices: a
3271
+ };
3272
+ }
3273
+ var tt = {
3274
+ ms: 1,
3275
+ s: 1e3,
3276
+ m: 6e4,
3277
+ h: 36e5,
3278
+ d: 864e5,
3279
+ w: 6048e5,
3280
+ M: 2592e6,
3281
+ y: 31536e6
3282
+ };
3283
+ function nt(e, t) {
3284
+ if (e = e.trim(), t === "X") return Number(e) * 1e3;
3285
+ if (t === "x") return Number(e);
3286
+ let n = [], r = t.replace(/YYYY|YY|MM|M|DD|D|HH|H|mm|ss|SSS|[.*+?^${}()|[\]\\]/g, (e) => /^[.*+?^${}()|[\]\\]$/.test(e) ? "\\" + e : (n.push(e), e === "YYYY" ? "(\\d{4})" : e === "SSS" ? "(\\d{3})" : e.length === 1 ? "(\\d{1,2})" : "(\\d{2})")), i = RegExp(`^${r}$`).exec(e);
3287
+ if (!i) {
3288
+ let t = Date.parse(e.length === 10 ? e + "T00:00:00Z" : e);
3289
+ return Number.isFinite(t) ? t : void 0;
3290
+ }
3291
+ let a = {};
3292
+ n.forEach((e, t) => a[e[0]] = Number(i[t + 1]));
3293
+ let o = a.Y === void 0 ? 1970 : n.includes("YY") ? 2e3 + a.Y : a.Y;
3294
+ return Date.UTC(o, (a.M ?? 1) - 1, a.D ?? 1, a.H ?? 0, a.m ?? 0, a.s ?? 0, a.S ?? 0);
3295
+ }
3296
+ function rt(e, t) {
3297
+ let n = "YYYY-MM-DD", r = t, i = [], a = /* @__PURE__ */ new Map(), o, s = (() => {
3298
+ let e = /* @__PURE__ */ new Date();
3299
+ return Date.UTC(e.getUTCFullYear(), e.getUTCMonth(), e.getUTCDate());
3300
+ })();
3301
+ for (let t of e) {
3302
+ let e = t.trim();
3303
+ if (!e) continue;
3304
+ let c;
3305
+ if (c = /^dateFormat\s+(.+)$/.exec(e)) n = c[1].trim();
3306
+ else if (c = /^title\s+(.+)$/.exec(e)) r = c[1];
3307
+ else if (/^(axisFormat|tickInterval|excludes|includes|todayMarker|weekday|inclusiveEndDates|topAxis|displayMode)\b/.test(e)) continue;
3308
+ else if (c = /^section\s+(.*)$/.exec(e)) i.push({
3309
+ name: Z(c[1]),
3310
+ tasks: []
3311
+ });
3312
+ else if (c = /^(.+?)\s*:\s*(.+)$/.exec(e)) {
3313
+ let e = Z(c[1]), t = c[2].split(",").map((e) => e.trim()).filter(Boolean), r = {
3314
+ name: e,
3315
+ start: 0,
3316
+ end: 0
3317
+ };
3318
+ for (; t.length && /^(done|active|crit|milestone)$/.test(t[0]);) {
3319
+ let e = t.shift();
3320
+ r[e] = !0;
3321
+ }
3322
+ let l;
3323
+ t.length >= 3 && (l = t.shift());
3324
+ let u, d;
3325
+ t.length >= 2 ? [u, d] = t : d = t[0], t.length === 2 && !/^after\s/.test(u) && nt(u, n) === void 0 && !/^\d/.test(u) && (l = u, u = void 0), r.start = ((e) => {
3326
+ if (!e) return o ? o.end : s;
3327
+ let t = /^after\s+(.+)$/.exec(e);
3328
+ if (t) {
3329
+ let e = t[1].split(/\s+/).map((e) => a.get(e)?.end).filter((e) => e !== void 0);
3330
+ return e.length ? Math.max(...e) : o ? o.end : s;
3331
+ }
3332
+ return nt(e, n) ?? (o ? o.end : s);
3333
+ })(u);
3334
+ let f = d && /^([\d.]+)\s*(ms|s|m|h|d|w|M|y)$/.exec(d), p = d && /^until\s+(.+)$/.exec(d);
3335
+ r.end = f ? r.start + Number(f[1]) * tt[f[2]] : p ? a.get(p[1].trim())?.start ?? r.start : d ? nt(d, n) ?? r.start + 864e5 : r.start + 864e5, r.milestone && (r.end = r.start), l && a.set(l, r), i.length || i.push({
3336
+ name: "",
3337
+ tasks: []
3338
+ }), i[i.length - 1].tasks.push(r), o = r;
3339
+ }
3340
+ }
3341
+ return {
3342
+ title: r ? Z(r) : void 0,
3343
+ sections: i
3344
+ };
3345
+ }
3346
+ var it = [
3347
+ [/^[\w-]*\(\((.*)\)\)$/, "circle"],
3348
+ [/^[\w-]*\)\)(.*)\(\($/, "cloud"],
3349
+ [/^[\w-]*\)(.*)\($/, "cloud"],
3350
+ [/^[\w-]*\{\{(.*)\}\}$/, "hexagon"],
3351
+ [/^[\w-]*\[(.*)\]$/, "rect"],
3352
+ [/^[\w-]*\((.*)\)$/, "round"]
3353
+ ];
3354
+ function at(e) {
3355
+ let t = [], n;
3356
+ for (let r of e) {
3357
+ if (!r.trim()) continue;
3358
+ let e = r.trim().replace(/:::[\w\s-]+$/, "").trim();
3359
+ if (/^::icon\(/.test(e) || !e) continue;
3360
+ let i = r.replace(/\t/g, " ").search(/\S/), a = e, o;
3361
+ for (let [t, n] of it) {
3362
+ let r = t.exec(e);
3363
+ if (r) {
3364
+ a = r[1], o = n;
3365
+ break;
3366
+ }
3367
+ }
3368
+ let s = {
3369
+ label: Z(a),
3370
+ shape: o,
3371
+ children: []
3372
+ };
3373
+ if (!n) n = s, t.push({
3374
+ indent: i,
3375
+ n: s
3376
+ });
3377
+ else {
3378
+ for (; t.length > 1 && t[t.length - 1].indent >= i;) t.pop();
3379
+ t[t.length - 1].n.children.push(s), t.push({
3380
+ indent: i,
3381
+ n: s
3382
+ });
3383
+ }
3384
+ }
3385
+ if (!n) throw new _("The mind map is empty");
3386
+ return n;
3387
+ }
3388
+ // src/core/diagram/plantuml.ts
3389
+ function ot(e) {
3390
+ let t = e.replace(/^/, "").replace(/\r\n?/g, "\n"), n = [], r = /^[ \t]*@start(\w+)[^\n]*\n([\s\S]*?)^[ \t]*@end\1\b/gm, i;
3391
+ for (; i = r.exec(t);) n.push({
3392
+ kind: i[1].toLowerCase(),
3393
+ lines: i[2].split("\n")
3394
+ });
3395
+ return n.length || n.push({
3396
+ kind: "uml",
3397
+ lines: t.split("\n")
3398
+ }), n;
3399
+ }
3400
+ function st(e) {
3401
+ return ot(e).map(({ kind: e, lines: t }) => lt(e, t));
3402
+ }
3403
+ var ct = (e) => st(e).map(ke);
3404
+ function lt(e, t) {
3405
+ if (e === "dot") return {
3406
+ t: "graph",
3407
+ graph: ue(t.join("\n"))[0]
3408
+ };
3409
+ let { lines: n, title: r, dir: i } = ut(t);
3410
+ switch (e) {
3411
+ case "uml": break;
3412
+ case "mindmap":
3413
+ case "wbs": return {
3414
+ t: "tree",
3415
+ root: wt(n, e === "wbs"),
3416
+ title: r
3417
+ };
3418
+ default: throw new _(`PlantUML @start${e} diagrams are not supported yet`);
3419
+ }
3420
+ switch (dt(n)) {
3421
+ case "activity": return {
3422
+ t: "graph",
3423
+ graph: {
3424
+ ...Ct(n),
3425
+ title: r
3426
+ }
3427
+ };
3428
+ case "sequence": return {
3429
+ t: "sequence",
3430
+ seq: {
3431
+ ...pt(n),
3432
+ title: r
3433
+ }
3434
+ };
3435
+ case "state": return {
3436
+ t: "graph",
3437
+ graph: {
3438
+ ...St(n, i),
3439
+ title: r
3440
+ }
3441
+ };
3442
+ default: return {
3443
+ t: "graph",
3444
+ graph: {
3445
+ ...xt(n, i),
3446
+ title: r
3447
+ }
3448
+ };
3449
+ }
3450
+ }
3451
+ function Q(e) {
3452
+ 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, " "));
3453
+ }
3454
+ function ut(e) {
3455
+ let t = [], n, r, i = null, a = null, o = !1;
3456
+ for (let s of e) {
3457
+ if (o) {
3458
+ let e = s.indexOf("'/");
3459
+ if (e < 0) continue;
3460
+ s = s.slice(e + 2), o = !1;
3461
+ }
3462
+ s = s.replace(/\/'.*?'\//g, "");
3463
+ let e = s.indexOf("/'");
3464
+ e >= 0 && (s = s.slice(0, e), o = !0);
3465
+ let c = s.trim();
3466
+ if (i) {
3467
+ i.test(c) && (i = null);
3468
+ continue;
3469
+ }
3470
+ if (a) {
3471
+ /^end\s*title$/i.test(c) ? (n = Q(a.join("\n")), a = null) : a.push(c);
3472
+ continue;
3473
+ }
3474
+ if (!c || c.startsWith("'")) continue;
3475
+ let l;
3476
+ /^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 = Q(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));
3477
+ }
3478
+ return {
3479
+ lines: t,
3480
+ title: n,
3481
+ dir: r
3482
+ };
3483
+ }
3484
+ function dt(e) {
3485
+ let t = (t) => e.some((e) => t.test(e));
3486
+ 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";
3487
+ }
3488
+ var ft = {
3489
+ participant: "participant",
3490
+ actor: "actor",
3491
+ boundary: "boundary",
3492
+ control: "control",
3493
+ entity: "entity",
3494
+ database: "database",
3495
+ collections: "collections",
3496
+ queue: "queue"
3497
+ };
3498
+ function pt(e) {
3499
+ let t = new be(), n = [], r = null, i = null, a = null, o = (e) => e.trim().replace(/^"(.*)"$/, "$1");
3500
+ for (let s of e) {
3501
+ if (r) {
3502
+ /^end\s*(note|ref|rnote|hnote)$/i.test(s) ? (i && i.who.length && t.push({
3503
+ t: "note",
3504
+ pos: i.pos,
3505
+ who: i.who,
3506
+ text: Q(r.join("\n"))
3507
+ }), r = null) : r.push(s);
3508
+ continue;
3509
+ }
3510
+ let e;
3511
+ if (e = /^(?:create\s+)?(participant|actor|boundary|control|entity|database|collections|queue)\s+(.+)$/.exec(s)) {
3512
+ let n = e[2].replace(/\s+order\s+-?\d+/, "").trim(), r = /\s+(#\w+)\s*$/.exec(n);
3513
+ r && (n = n.slice(0, r.index).trim()), n = n.replace(/<<[^>]*>>/g, "").trim();
3514
+ let i = n, a = n, s = /^"([^"]+)"\s+as\s+(\S+)$/.exec(n), c = /^(\S+)\s+as\s+"?([^"]+)"?$/.exec(n);
3515
+ s ? [i, a] = [s[2], s[1]] : c ? [i, a] = [c[1], c[2]] : i = a = o(n), t.participant(i, {
3516
+ kind: ft[e[1].toLowerCase()],
3517
+ label: Q(a),
3518
+ fill: r ? l(r[1].slice(1)) ?? l(r[1]) : void 0
3519
+ });
3520
+ continue;
3521
+ }
3522
+ if (/^hide\s+footbox$/i.test(s)) {
3523
+ t.s.footer = !1;
3524
+ continue;
3525
+ }
3526
+ if (/^autonumber\b/i.test(s)) {
3527
+ t.s.autonumber = !/\bstop\b/i.test(s);
3528
+ continue;
3529
+ }
3530
+ if (e = /^(activate|deactivate|destroy)\s+(\S+)/i.exec(s)) {
3531
+ let n = o(e[2]);
3532
+ e[1].toLowerCase() === "destroy" ? t.push({
3533
+ t: "destroy",
3534
+ who: n
3535
+ }) : t.push({
3536
+ t: "act",
3537
+ who: n,
3538
+ on: e[1].toLowerCase() === "activate"
3539
+ });
3540
+ continue;
3541
+ }
3542
+ if (e = /^return\b\s*(.*)$/i.exec(s)) {
3543
+ let r = n.pop() ?? (a ? {
3544
+ from: a.from,
3545
+ to: a.to
3546
+ } : null);
3547
+ r && t.push({
3548
+ t: "msg",
3549
+ from: r.to,
3550
+ to: r.from,
3551
+ text: Q(e[1]),
3552
+ dashed: !0,
3553
+ head: "filled",
3554
+ deactivate: !0
3555
+ });
3556
+ continue;
3557
+ }
3558
+ 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))) {
3559
+ let n = (e[1] || "over").toLowerCase(), s = e[2] ? e[2].split(",").map(o).filter(Boolean) : [];
3560
+ !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 = {
3561
+ pos: n,
3562
+ who: s
3563
+ }) : s.length && t.push({
3564
+ t: "note",
3565
+ pos: n,
3566
+ who: s,
3567
+ text: Q(e[3])
3568
+ });
3569
+ continue;
3570
+ }
3571
+ if (e = /^note\s+across\s*:\s*(.*)$/i.exec(s)) {
3572
+ let n = t.s.participants;
3573
+ n.length && t.push({
3574
+ t: "note",
3575
+ pos: "over",
3576
+ who: [n[0].id, n[n.length - 1].id],
3577
+ text: Q(e[1])
3578
+ });
3579
+ continue;
3580
+ }
3581
+ if (e = /^(alt|opt|loop|par|break|critical|group)\b\s*(.*)$/i.exec(s)) {
3582
+ let n = e[1].toLowerCase();
3583
+ t.push({
3584
+ t: "block",
3585
+ kind: n === "group" ? Q(e[2]) || "group" : n,
3586
+ label: n === "group" ? "" : Q(e[2])
3587
+ });
3588
+ continue;
3589
+ }
3590
+ if (e = /^else\b\s*(.*)$/i.exec(s)) {
3591
+ t.push({
3592
+ t: "else",
3593
+ label: Q(e[1])
3594
+ });
3595
+ continue;
3596
+ }
3597
+ if (/^end$/i.test(s)) {
3598
+ t.push({ t: "end" });
3599
+ continue;
3600
+ }
3601
+ if (/^(box\b|end\s*box)/i.test(s)) continue;
3602
+ if (e = /^==\s*(.*?)\s*==$/.exec(s)) {
3603
+ t.push({
3604
+ t: "divider",
3605
+ text: Q(e[1])
3606
+ });
3607
+ continue;
3608
+ }
3609
+ if (e = /^\.\.\.\s*(.*?)\s*(?:\.\.\.)?$/.exec(s)) {
3610
+ t.push({
3611
+ t: "delay",
3612
+ text: Q(e[1])
3613
+ });
3614
+ continue;
3615
+ }
3616
+ if ((e = /^\|\|(\d*)\|\|$/.exec(s)) || s === "|||") {
3617
+ t.push({
3618
+ t: "space",
3619
+ h: e?.[1] ? Math.min(400, Number(e[1])) : 20
3620
+ });
3621
+ continue;
3622
+ }
3623
+ let c = ht(s);
3624
+ if (c) {
3625
+ let { from: e, to: r, dashed: i, head: o, both: s, act: l, text: u } = c;
3626
+ t.push({
3627
+ t: "msg",
3628
+ from: e,
3629
+ to: r,
3630
+ text: u,
3631
+ dashed: i,
3632
+ head: o,
3633
+ both: s,
3634
+ activate: l === "++",
3635
+ deactivate: l === "--"
3636
+ }), a = {
3637
+ from: e,
3638
+ to: r
3639
+ }, l === "++" && n.push({
3640
+ from: e,
3641
+ to: r
3642
+ }), l === "--" && n.length && n.pop(), l === "**" && t.participant(r), l === "!!" && t.push({
3643
+ t: "destroy",
3644
+ who: r
3645
+ });
3646
+ }
3647
+ }
3648
+ return t.s;
3649
+ }
3650
+ var mt = /^(\[|\]|[\w.$À-￿]+|"[^"]+")?\s*(<<?|[\\/]{1,2})?(-{1,2}|\.{1,2})(?:\[[^\]]*\])?(-?)(>>?|[\\/]{1,2})?\s*([ox])?\s*(\[|\]|[\w.$À-￿]+|"[^"]+")?\s*(\+\+|--|\*\*|!!)?\s*(?::\s*(.*))?$/u;
3651
+ function ht(e) {
3652
+ let t = mt.exec(e.replace(/^(\S+)\s*([ox])(?=<|-)/, "$1 "));
3653
+ if (!t) return null;
3654
+ let [, n, r, i, , a, , o, s, c] = t;
3655
+ if (!r && !a || !n || !o) return null;
3656
+ let l = (e) => e.replace(/^"(.*)"$/, "$1"), u = l(n), d = l(o);
3657
+ if (u === "[" || u === "]" || d === "[" || d === "]") return null;
3658
+ let f = i === "--" || i.startsWith("."), p = (e) => e ? e === ">>" || e === "<<" ? "open" : e.length && /[\\/]/.test(e) ? "half" : "filled" : "none", m, h = !1;
3659
+ 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"), {
3660
+ from: u,
3661
+ to: d,
3662
+ dashed: f,
3663
+ head: m,
3664
+ both: h,
3665
+ act: s,
3666
+ text: Q(c ?? "")
3667
+ };
3668
+ }
3669
+ var gt = {
3670
+ actor: "actor",
3671
+ person: "actor",
3672
+ usecase: "ellipse",
3673
+ component: "component",
3674
+ node: "box3d",
3675
+ database: "cylinder",
3676
+ cloud: "cloud",
3677
+ folder: "folder",
3678
+ frame: "folder",
3679
+ package: "folder",
3680
+ artifact: "note",
3681
+ file: "note",
3682
+ storage: "stadium",
3683
+ queue: "stadium",
3684
+ stack: "rect",
3685
+ card: "rect",
3686
+ rectangle: "rect",
3687
+ agent: "rect",
3688
+ label: "none",
3689
+ boundary: "circle",
3690
+ control: "circle",
3691
+ entity: "rect",
3692
+ collections: "rect",
3693
+ hexagon: "hexagon",
3694
+ interface: "rect",
3695
+ circle: "circle",
3696
+ port: "point",
3697
+ portin: "point",
3698
+ portout: "point",
3699
+ action: "rect",
3700
+ process: "round",
3701
+ usecase_: "ellipse",
3702
+ object: "rect",
3703
+ map: "rect",
3704
+ json: "rect",
3705
+ diamond: "diamond",
3706
+ state: "round"
3707
+ }, _t = /* @__PURE__ */ new Set([
3708
+ "class",
3709
+ "abstract",
3710
+ "abstract class",
3711
+ "interface",
3712
+ "enum",
3713
+ "annotation",
3714
+ "struct",
3715
+ "protocol",
3716
+ "entity",
3717
+ "exception",
3718
+ "metaclass",
3719
+ "stereotype",
3720
+ "object",
3721
+ "map",
3722
+ "json"
3723
+ ]), vt = {
3724
+ ">": "arrow",
3725
+ "<": "arrow",
3726
+ "|>": "triangle",
3727
+ "<|": "triangle",
3728
+ "^": "triangle",
3729
+ "*": "diamond",
3730
+ o: "odiamond",
3731
+ "#": "odiamond",
3732
+ x: "cross",
3733
+ "+": "ocircle",
3734
+ "{": "many",
3735
+ "}": "many",
3736
+ ">>": "open",
3737
+ "<<": "open",
3738
+ "|o": "zero-one",
3739
+ "o|": "zero-one",
3740
+ "||": "one",
3741
+ "}o": "zero-many",
3742
+ "o{": "zero-many",
3743
+ "}|": "one-many",
3744
+ "|{": "one-many"
3745
+ }, yt = String.raw`\[\*\]|\[[^\]]+\]|\([^)]*\)|:[^:]+:|"[^"]+"|\(\)\s*"[^"]+"|\(\)\s*[\w.]+|[\w.$À-￿-]+`, bt = new RegExp(String.raw`^(${yt})\s*(?:"([^"]*)"\s*)?((?:<\||<<|\}o|\}\||\|o|\|\||[<*o#x+^}])?)([-.=~]+)(?:\[([^\]]*)\])?((?:up|down|left|right|u|d|l|r|le|ri|do)?)([-.=~]*)(?:\[([^\]]*)\])?((?:\|>|>>|o\{|\|\{|o\||\|\||[>*#+^{]|[ox](?=\s|\[|\(|"|:|$))?)\s*(?:"([^"]*)"\s*)?(${yt})\s*(?::\s*(.*))?$`, "u");
3746
+ function xt(e, t) {
3747
+ let n = new v(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) => {
3748
+ let t = e.trim(), r;
3749
+ 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: Q(t) }, p()), t);
3750
+ }, h = (e, t) => {
3751
+ let r = e.trim();
3752
+ return !n.has(r) && !n.isCluster(r) && n.node(r, {
3753
+ label: Q(r),
3754
+ shape: t
3755
+ }, p()), r;
3756
+ };
3757
+ for (let t of e) {
3758
+ if (s) {
3759
+ /^end\s*note$/i.test(t) ? (n.node(u, {
3760
+ label: Q(s.join("\n")),
3761
+ shape: "note",
3762
+ style: {
3763
+ fill: "#fff6c8",
3764
+ stroke: "#c9a227"
3765
+ }
3766
+ }, p()), c && n.edge({
3767
+ from: c,
3768
+ to: u,
3769
+ line: "dashed",
3770
+ head: "none"
3771
+ }), s = null) : s.push(t);
3772
+ continue;
3773
+ }
3774
+ if (o) {
3775
+ if (t === "}") {
3776
+ o = null;
3777
+ continue;
3778
+ }
3779
+ /^(--|==|\.\.|__)(.*?)(--|==|\.\.|__)?$/.test(t) ? o.c.sections.push([]) : o.c.sections[o.c.sections.length - 1].push(Q(t.replace(/\{(static|abstract|classifier|field|method)\}\s*/g, "")));
3780
+ continue;
3781
+ }
3782
+ let e;
3783
+ if (t === "}" || /^end\s*(package|namespace|rectangle|node|folder|frame|together)$/i.test(t)) i.pop(), a.pop();
3784
+ else if (e = /^note\s+(left|right|top|bottom)(?:\s+of)?\s+(\S+?)\s*(?:#\w+)?\s*(?::\s*(.*))?$/i.exec(t)) {
3785
+ let t = m(e[2]), r = `__note${d++}`;
3786
+ e[3] === void 0 ? (s = [], c = t, u = r) : (n.node(r, {
3787
+ label: Q(e[3]),
3788
+ shape: "note",
3789
+ style: {
3790
+ fill: "#fff6c8",
3791
+ stroke: "#c9a227"
3792
+ }
3793
+ }, p()), n.edge({
3794
+ from: t,
3795
+ to: r,
3796
+ line: "dashed",
3797
+ head: "none"
3798
+ }));
3799
+ } else if (e = /^note\s+"([^"]*)"\s+as\s+(\S+)$/i.exec(t)) n.node(e[2], {
3800
+ label: Q(e[1]),
3801
+ shape: "note",
3802
+ style: {
3803
+ fill: "#fff6c8",
3804
+ stroke: "#c9a227"
3805
+ }
3806
+ }, p());
3807
+ else if (e = /^note\s+as\s+(\S+)$/i.exec(t)) s = [], c = void 0, u = e[1];
3808
+ 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)) {
3809
+ 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" ? "" : Q(r), p()), c = e[6] ? l(e[6].slice(1)) ?? l(e[6]) : void 0;
3810
+ c && (s.style = { fill: c }), t === "together" && (s.style = {
3811
+ fill: "none",
3812
+ stroke: "none"
3813
+ }), i.push(o), a.push(t);
3814
+ } 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)) && _t.has(e[1].toLowerCase().replace(/\s+/, " "))) {
3815
+ 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]}>` : "";
3816
+ n.node(i, {
3817
+ label: Q(a) + s,
3818
+ shape: "rect"
3819
+ }, p());
3820
+ let c = r.get(i) ?? {
3821
+ kind: t,
3822
+ sections: [[], []]
3823
+ };
3824
+ c.kind = t, e[8] && (c.stereo = e[8].replace(/^<<|>>$/g, "").trim());
3825
+ let u = e[9] ? l(e[9].slice(1)) ?? l(e[9]) : void 0;
3826
+ u && (n.node(i).style = { fill: u }), r.set(i, c), e[10] && !e[11] && (c.sections = [[]], o = {
3827
+ id: i,
3828
+ c
3829
+ });
3830
+ } 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)) {
3831
+ let t = e[1].toLowerCase().replace("/", ""), r = e[2].trim(), i = /\s+(#[\w]+)\s*$/.exec(r);
3832
+ i && (r = r.slice(0, i.index).trim());
3833
+ let a = /\s*<<(.+?)>>\s*$/.exec(r);
3834
+ a && (r = r.slice(0, a.index).trim());
3835
+ let o = r, s = r, c = /^(.+?)\s+as\s+(.+)$/.exec(r);
3836
+ if (c) {
3837
+ let [e, t] = [c[1].trim(), c[2].trim()];
3838
+ /^["([:]/.test(e) ? [s, o] = [e, t] : [o, s] = [e, t];
3839
+ }
3840
+ s = s.replace(/^\((.*)\)$|^\[(.*)\]$|^:(.*):$/, "$1$2$3"), o = o.replace(/^\((.*)\)$|^\[(.*)\]$|^:(.*):$/, "$1$2$3").replace(/^"(.*)"$/, "$1");
3841
+ let u = t === "usecase" ? "ellipse" : t === "actor" ? "actor" : gt[t] ?? "rect", d = n.node(o, {
3842
+ label: Q(s) + (a ? `\n«${a[1]}»` : ""),
3843
+ shape: u
3844
+ }, p()), f = i ? l(i[1].slice(1)) ?? l(i[1]) : void 0;
3845
+ f && (d.style = {
3846
+ ...d.style,
3847
+ fill: f
3848
+ });
3849
+ } else if (e = /^(\[[^\]]+\]|\([^)]+\)|:[^:]+:)(?:\s+as\s+(\S+))?$/.exec(t)) {
3850
+ let t = m(e[1]);
3851
+ if (e[2]) {
3852
+ let r = n.get(t);
3853
+ n.node(e[2], {
3854
+ label: r.label,
3855
+ shape: r.shape
3856
+ }, p()), n.g.nodes.splice(n.g.nodes.indexOf(r), 1);
3857
+ }
3858
+ } else if (e = bt.exec(t)) {
3859
+ let [, t, r, i, a, , o, s, , c, l, u, d] = e, f = m(t), p = m(u), h = a + s, g = i ? vt[i] ?? "none" : "none", _ = c ? vt[c] ?? "none" : "none", v = r, y = l;
3860
+ /^(up|u|left|l|le)$/i.test(o) && ([f, p] = [p, f], [g, _] = [_, g], [v, y] = [y, v]);
3861
+ let b = {
3862
+ from: f,
3863
+ to: p,
3864
+ head: _,
3865
+ tail: g,
3866
+ line: h.includes(".") ? "dashed" : h.includes("=") ? "thick" : h.includes("~") ? "dotted" : "solid"
3867
+ };
3868
+ d && (b.label = Q(d.replace(/\s*[<>]\s*$|^\s*[<>]\s*/g, ""))), v && (b.tailLabel = v), y && (b.headLabel = y), n.edge(b);
3869
+ } else if ((e = /^([\w.$]+)\s*:\s*(.+)$/.exec(t)) && (r.has(e[1]) || n.has(e[1]))) {
3870
+ let t = r.get(e[1]) ?? {
3871
+ kind: "class",
3872
+ sections: [[], []]
3873
+ };
3874
+ r.set(e[1], t);
3875
+ let n = Q(e[2]);
3876
+ n.includes("(") && t.sections.length > 1 ? t.sections[1].push(n) : t.sections[0].push(n);
3877
+ }
3878
+ }
3879
+ let g = n.get("start");
3880
+ if (g && g.label === "start" && n.g.edges.some((e) => e.from === "start" || e.to === "start")) {
3881
+ g.shape = "start", g.label = "";
3882
+ let e = n.g.edges.filter((e) => e.to === "start");
3883
+ if (e.length) {
3884
+ n.node("__end", {
3885
+ shape: "end",
3886
+ label: ""
3887
+ });
3888
+ for (let t of e) t.to = "__end";
3889
+ }
3890
+ }
3891
+ for (let e of n.g.nodes) {
3892
+ let t = r.get(e.id);
3893
+ if (!t) continue;
3894
+ 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);
3895
+ i && n.push([`«${i}»`]), n.push([e.label]);
3896
+ let a = [{
3897
+ rows: n,
3898
+ bold: !0,
3899
+ center: !0,
3900
+ italic: t.kind.startsWith("abstract")
3901
+ }];
3902
+ for (let e of t.sections) a.push({ rows: e.map((e) => [e]) });
3903
+ e.sections = a;
3904
+ }
3905
+ return n.g;
3906
+ }
3907
+ function St(e, t) {
3908
+ let n = new v(t ?? "TB", "round"), r = [], i = /* @__PURE__ */ new Map(), a = 0, o = null, s, c = () => r[r.length - 1], u = (e, t) => {
3909
+ let r = e.trim().replace(/^"(.*)"$/, "$1");
3910
+ if (r === "[*]") {
3911
+ let e = `${c() ?? ""}__${t ? "end" : "start"}`;
3912
+ return n.node(e, {
3913
+ label: "",
3914
+ shape: t ? "end" : "start"
3915
+ }, c()), e;
3916
+ }
3917
+ return !n.isCluster(r) && !n.has(r) && n.node(r, { label: r }, c()), r;
3918
+ };
3919
+ for (let t of e) {
3920
+ if (o) {
3921
+ if (/^end\s*note$/i.test(t)) {
3922
+ let e = `__note${a++}`;
3923
+ n.node(e, {
3924
+ label: Q(o.join("\n")),
3925
+ shape: "note",
3926
+ style: {
3927
+ fill: "#fff6c8",
3928
+ stroke: "#c9a227"
3929
+ }
3930
+ }, c()), s && n.edge({
3931
+ from: s,
3932
+ to: e,
3933
+ line: "dashed",
3934
+ head: "none"
3935
+ }), o = null;
3936
+ } else o.push(t);
3937
+ continue;
3938
+ }
3939
+ if (t === "--" || t === "||") continue;
3940
+ let e;
3941
+ if (e = /^state\s+(?:"([^"]+)"\s+as\s+(\S+?)|(\S+?)\s+as\s+"([^"]+)"|("[^"]+"|[^\s{<#]+))\s*(<<(\w+)>>)?\s*(#\S+)?\s*(\{)?$/i.exec(t)) {
3942
+ let t = (e[2] ?? e[3] ?? e[5]).replace(/^"(.*)"$/, "$1"), i = e[1] ?? e[4] ?? t, a = e[7]?.toLowerCase();
3943
+ if (e[9]) {
3944
+ n.cluster(t, Q(i), c()), r.push(t);
3945
+ continue;
3946
+ }
3947
+ let o = a === "fork" || a === "join" ? "bar" : a === "choice" ? "diamond" : a === "start" || a === "entrypoint" ? "start" : a === "end" || a === "exitpoint" ? "end" : void 0;
3948
+ n.node(t, {
3949
+ label: o ? "" : Q(i),
3950
+ shape: o
3951
+ }, c());
3952
+ let s = e[8] ? l(e[8].slice(1)) ?? l(e[8]) : void 0;
3953
+ s && (n.node(t).style = { fill: s });
3954
+ } else if (t === "}") r.pop();
3955
+ else if (e = /^note\s+(left|right|top|bottom)\s+of\s+(\S+)\s*(?::\s*(.*))?$/i.exec(t)) {
3956
+ if (e[3] !== void 0) {
3957
+ let t = `__note${a++}`;
3958
+ n.node(t, {
3959
+ label: Q(e[3]),
3960
+ shape: "note",
3961
+ style: {
3962
+ fill: "#fff6c8",
3963
+ stroke: "#c9a227"
3964
+ }
3965
+ }, c()), n.edge({
3966
+ from: u(e[2], !1),
3967
+ to: t,
3968
+ line: "dashed",
3969
+ head: "none"
3970
+ });
3971
+ } else o = [], s = u(e[2], !1);
3972
+ } else if (e = /^(\[\*\]|"[^"]+"|[\w.$À-￿]+)\s*(-+|\.+)(?:\[[^\]]*\])?((?:up|down|left|right|u|d|l|r)?)(-*|\.*)(?:\[[^\]]*\])?>\s*(\[\*\]|"[^"]+"|[\w.$À-￿]+)\s*(?::\s*(.*))?$/u.exec(t)) {
3973
+ let t = u(e[1], !1), r = u(e[5], !0), i = !1;
3974
+ /^(up|u|left|l)$/i.test(e[3]) && ([t, r] = [r, t], i = !0), n.edge({
3975
+ from: t,
3976
+ to: r,
3977
+ head: i ? "none" : "arrow",
3978
+ tail: i ? "arrow" : "none",
3979
+ line: e[2].includes(".") ? "dashed" : "solid",
3980
+ label: e[6] ? Q(e[6]) : void 0
3981
+ });
3982
+ } else (e = /^([\w.$À-￿]+)\s*:\s*(.+)$/u.exec(t)) && (u(e[1], !1), i.set(e[1], [...i.get(e[1]) ?? [], Q(e[2])]));
3983
+ }
3984
+ for (let e of n.g.nodes) {
3985
+ let t = i.get(e.id);
3986
+ t && e.shape === "round" && (e.sections = [{
3987
+ rows: [[e.label]],
3988
+ bold: !0,
3989
+ center: !0
3990
+ }, { rows: t.map((e) => [e]) }]);
3991
+ }
3992
+ return n.g;
3993
+ }
3994
+ function Ct(e) {
3995
+ let t = new v("TB", "round"), n = [];
3996
+ for (let t = 0; t < e.length; t++) {
3997
+ let r = e[t];
3998
+ if (/^:/.test(r) && !/[;|<>/\]}]$/.test(r)) for (; t + 1 < e.length && !/[;|<>/\]}]$/.test(r);) r += "\n" + e[++t];
3999
+ n.push(r);
4000
+ }
4001
+ let r = 0, i = 0, a = [], o = (e, n = "") => {
4002
+ let r = `a${i++}`;
4003
+ return t.node(r, {
4004
+ shape: e,
4005
+ label: n
4006
+ }, a[a.length - 1]), r;
4007
+ }, s, c = (e, n) => {
4008
+ for (let r of e) t.edge({
4009
+ from: r.from,
4010
+ to: n,
4011
+ head: "arrow",
4012
+ label: r.label
4013
+ });
4014
+ }, l = (e) => Q(e.replace(/^\((.*)\)$/, "$1")), u = (e, d) => {
4015
+ let f = e, p = (e) => {
4016
+ s !== void 0 && (f = f.map((e) => ({
4017
+ ...e,
4018
+ label: e.label ?? s
4019
+ }))), s = void 0, c(f, e);
4020
+ };
4021
+ for (; r < n.length;) {
4022
+ let e = n[r];
4023
+ if (d.test(e)) return f;
4024
+ r++;
4025
+ let m;
4026
+ if (/^start$/i.test(e)) {
4027
+ let e = o("start");
4028
+ p(e), f = [{ from: e }];
4029
+ } else if (/^(stop|end)$/i.test(e)) p(o("end")), f = [];
4030
+ else if (/^(kill|detach|break)$/i.test(e)) f = [];
4031
+ else if (m = /^:([\s\S]*?)[;|<>/\]}]$/.exec(e)) {
4032
+ let e = o("round", Q(m[1]));
4033
+ p(e), f = [{ from: e }];
4034
+ } else if (m = /^->\s*(.*?);?$/.exec(e)) s = Q(m[1]) || void 0;
4035
+ else if ((m = /^if\s*(\(.*?\))\s*(?:then\s*(?:\((.*)\))?)?\s*$/i.exec(e)) || (m = /^if\s*(\(.*\))\s*(?:is\s*\((.*)\))?\s*then\s*$/i.exec(e))) {
4036
+ let e = o("diamond", l(m[1]));
4037
+ p(e);
4038
+ let i = u([{
4039
+ from: e,
4040
+ label: m[2] ? Q(m[2]) : void 0
4041
+ }], /^(elseif|else\s*if|else|endif|end\s*if)\b/i), a = !0;
4042
+ for (; r < n.length;) {
4043
+ let s = n[r++], c;
4044
+ if (c = /^(?:elseif|else\s*if)\s*(\(.*?\))\s*(?:then\s*(?:\((.*)\))?)?$/i.exec(s)) {
4045
+ let n = o("diamond", l(c[1]));
4046
+ t.edge({
4047
+ from: e,
4048
+ to: n,
4049
+ head: "arrow"
4050
+ }), e = n, i = i.concat(u([{
4051
+ from: n,
4052
+ label: c[2] ? Q(c[2]) : void 0
4053
+ }], /^(elseif|else\s*if|else|endif|end\s*if)\b/i));
4054
+ } else if (c = /^else\s*(?:\((.*)\))?$/i.exec(s)) i = i.concat(u([{
4055
+ from: e,
4056
+ label: c[1] ? Q(c[1]) : void 0
4057
+ }], /^(endif|end\s*if)\b/i)), a = !1;
4058
+ else break;
4059
+ }
4060
+ a && i.push({ from: e }), f = i;
4061
+ } else if (m = /^switch\s*(\(.*\))$/i.exec(e)) {
4062
+ let e = o("diamond", l(m[1]));
4063
+ p(e);
4064
+ let t = [];
4065
+ for (; r < n.length;) {
4066
+ let i = n[r++], a = /^case\s*(\(.*\))$/i.exec(i);
4067
+ if (!a) break;
4068
+ t = t.concat(u([{
4069
+ from: e,
4070
+ label: l(a[1])
4071
+ }], /^(case\s*\(|endswitch)/i));
4072
+ }
4073
+ f = t;
4074
+ } else if (m = /^while\s*(\(.*?\))\s*(?:is\s*\((.*)\))?$/i.exec(e)) {
4075
+ let e = o("diamond", l(m[1]));
4076
+ p(e);
4077
+ let t = u([{
4078
+ from: e,
4079
+ label: m[2] ? Q(m[2]) : void 0
4080
+ }], /^(endwhile|end\s*while)\b/i);
4081
+ c(t, e);
4082
+ let i = /^(?:endwhile|end\s*while)\s*(?:\((.*)\))?$/i.exec(n[r++] ?? "");
4083
+ f = [{
4084
+ from: e,
4085
+ label: i?.[1] ? Q(i[1]) : void 0
4086
+ }];
4087
+ } else if ((m = /^repeat\s*(?::([\s\S]*?)[;|<>/\]}])?$/i.exec(e)) && !/^repeat\s*while/i.test(e)) {
4088
+ let e = m[1] === void 0 ? o("diamond", "") : o("round", Q(m[1]));
4089
+ p(e);
4090
+ let i = u([{ from: e }], /^(repeat\s*while|backward)/i), a, s;
4091
+ (s = /^backward\s*:([\s\S]*?)[;|<>/\]}]$/i.exec(n[r] ?? "")) && (a = o("round", Q(s[1])), r++);
4092
+ let d = /^repeat\s*while\s*(\(.*?\))?\s*(?:is\s*\((.*?)\))?\s*(?:not\s*\((.*?)\))?$/i.exec(n[r++] ?? ""), h = o("diamond", d?.[1] ? l(d[1]) : "");
4093
+ c(i, h), a ? (t.edge({
4094
+ from: h,
4095
+ to: a,
4096
+ head: "arrow",
4097
+ label: d?.[2] ? Q(d[2]) : void 0
4098
+ }), t.edge({
4099
+ from: a,
4100
+ to: e,
4101
+ head: "arrow"
4102
+ })) : t.edge({
4103
+ from: h,
4104
+ to: e,
4105
+ head: "arrow",
4106
+ label: d?.[2] ? Q(d[2]) : void 0
4107
+ }), f = [{
4108
+ from: h,
4109
+ label: d?.[3] ? Q(d[3]) : void 0
4110
+ }];
4111
+ } else if (/^(fork|split)$/i.test(e)) {
4112
+ let t = /^fork$/i.test(e), i, a = f;
4113
+ t ? (i = o("bar"), p(i), a = [{ from: i }]) : s !== void 0 && (s = void 0);
4114
+ let l = [];
4115
+ for (;;) {
4116
+ l = l.concat(u(a, /^(fork\s+again|split\s+again|end\s*fork|end\s*merge|end\s*split)\b/i));
4117
+ let e = n[r++] ?? "";
4118
+ if (!/again/i.test(e)) break;
4119
+ }
4120
+ if (t) {
4121
+ let e = o("bar");
4122
+ c(l, e), f = [{ from: e }];
4123
+ } else f = l;
4124
+ } else if (m = /^(?:partition|group|package|rectangle|card)\s+(?:"([^"]*)"|(\S[^{]*?))\s*(?:#\S+)?\s*\{?$/i.exec(e)) {
4125
+ let e = (m[1] ?? m[2]).trim(), n = `__p${i++}`;
4126
+ t.cluster(n, Q(e), a[a.length - 1]), a.push(n);
4127
+ } else if (e === "}" || /^end\s*group$/i.test(e)) a.pop();
4128
+ 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++]););
4129
+ }
4130
+ return f;
4131
+ };
4132
+ return u([], /^\u0000$/), t.g;
4133
+ }
4134
+ function wt(e, t) {
4135
+ let n = [], r;
4136
+ for (let i = 0; i < e.length; i++) {
4137
+ let a = e[i], o = /^([*+\-#]+)(_)?\s*(?:\[#[\w]+\])?\s*(.*)$/.exec(a);
4138
+ if (!o) continue;
4139
+ let s = o[3];
4140
+ if (s.startsWith(":")) {
4141
+ for (s = s.slice(1); !/;\s*$/.test(s) && i + 1 < e.length;) s += "\n" + e[++i];
4142
+ s = s.replace(/;\s*$/, "");
4143
+ }
4144
+ let c = o[1].length, l = o[1][0] === "-" ? "left" : "right", u = {
4145
+ label: Q(s),
4146
+ shape: o[2] ? "none" : void 0,
4147
+ side: t ? void 0 : l,
4148
+ children: []
4149
+ };
4150
+ if (!r) r = u, n.push({
4151
+ depth: c,
4152
+ n: u
4153
+ });
4154
+ else {
4155
+ for (; n.length > 1 && n[n.length - 1].depth >= c;) n.pop();
4156
+ n[n.length - 1].n.children.push(u), n.push({
4157
+ depth: c,
4158
+ n: u
4159
+ });
4160
+ }
4161
+ }
4162
+ if (!r) throw new _("The mind map is empty");
4163
+ let i = (e, t) => e.children.forEach((e) => (t || (e.side = void 0), i(e, !1)));
4164
+ return i(r, !0), r;
4165
+ }
4166
+ // src/core/diagram/index.ts
4167
+ var Tt = {
4168
+ mermaid: "mermaid",
4169
+ mmd: "mermaid",
4170
+ plantuml: "plantuml",
4171
+ puml: "plantuml",
4172
+ uml: "plantuml",
4173
+ dot: "graphviz",
4174
+ graphviz: "graphviz",
4175
+ gv: "graphviz"
4176
+ }, Et = {
4177
+ mermaid: "Mermaid",
4178
+ plantuml: "PlantUML",
4179
+ graphviz: "Graphviz"
4180
+ }, Dt = 2e6;
4181
+ function Ot(e, t) {
4182
+ if (t.length > Dt) throw new _("The diagram is too large to draw");
4183
+ try {
4184
+ switch (e) {
4185
+ case "mermaid": return [Me(t)];
4186
+ case "plantuml": return ct(t);
4187
+ case "graphviz": return pe(t);
4188
+ }
4189
+ } catch (e) {
4190
+ throw e instanceof _ ? e : new _(e?.message || String(e));
4191
+ }
4192
+ }
4193
+ // src/core/url.ts
4194
+ var kt = /* @__PURE__ */ new Set([
4195
+ "http",
4196
+ "https",
4197
+ "mailto",
4198
+ "tel",
4199
+ "sms",
4200
+ "ftp",
4201
+ "ftps"
4202
+ ]);
4203
+ function At(e) {
4204
+ if (!e) return;
4205
+ let t = e.replace(/^[\u0000- ]+|[\u0000- ]+$/g, "").replace(/[\t\n\r]/g, ""), n = /^([a-z][a-z0-9+.-]*):/i.exec(t)?.[1].toLowerCase();
4206
+ return !n || kt.has(n) ? e : void 0;
4207
+ }
4208
+ // packages/markdown/src/markdown.ts
4209
+ var $ = (e) => e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), jt = /^( {0,3})(`{3,}|~{3,})[ \t]*([^\s`]*)[^`\n]*$/, Mt = /^ {0,3}(#{1,6})(?:[ \t]+(.*?))?(?:[ \t]+#+)?[ \t]*$/, Nt = /^ {0,3}(=+|-+)[ \t]*$/, Pt = /^ {0,3}([-*_])(?:[ \t]*\1){2,}[ \t]*$/, Ft = /^ {0,3}> ?(.*)$/, It = /^( {0,3})([-*+]|\d{1,9}[.)])(?:([ \t]{1,4})(.*)|[ \t]*)$/, Lt = /^ {0,3}\|?[ \t]*:?-+:?[ \t]*(?:\|[ \t]*:?-+:?[ \t]*)*\|?[ \t]*$/, Rt = /^ {0,3}\[([^\]]+)\]:[ \t]*<?([^\s>]+)>?(?:[ \t]+(?:"([^"]*)"|'([^']*)'|\(([^)]*)\)))?[ \t]*$/, zt = (e) => e.trim().replace(/\s+/g, " ").toLowerCase();
4210
+ function Bt(e, t = {}) {
4211
+ let n = e.replace(/^/, "").replace(/\r\n?/g, "\n").replace(/\t/g, " ").split("\n"), r = {
4212
+ refs: /* @__PURE__ */ new Map(),
4213
+ diagrams: t.diagrams !== !1,
4214
+ ids: t.headingIds !== !1,
4215
+ slugs: /* @__PURE__ */ new Map()
4216
+ }, i = [], a = null;
4217
+ for (let e of n) {
4218
+ let t = jt.exec(e);
4219
+ if (a) {
4220
+ t && t[2][0] === a[0] && t[2].length >= a.length && !t[3] && (a = null), i.push(e);
4221
+ continue;
4222
+ }
4223
+ t && (a = t[2]);
4224
+ let n = !a && Rt.exec(e);
4225
+ if (n) {
4226
+ let e = zt(n[1]);
4227
+ r.refs.has(e) || r.refs.set(e, {
4228
+ href: n[2],
4229
+ title: n[3] ?? n[4] ?? n[5]
4230
+ });
4231
+ } else i.push(e);
4232
+ }
4233
+ return Ht(i, r, !1);
4234
+ }
4235
+ var Vt = (e) => jt.test(e) || Mt.test(e) || Pt.test(e) || Ft.test(e) || It.test(e);
4236
+ function Ht(e, t, n) {
4237
+ let r = [], i = [], a = () => {
4238
+ if (!i.length) return;
4239
+ let e = $t(i.map((e) => e.replace(/^ +/, "")).join("\n").replace(/\s+$/, ""), t);
4240
+ r.push(n ? e : `<p>${e}</p>`), i = [];
4241
+ }, o = 0;
4242
+ for (; o < e.length;) {
4243
+ let n = e[o];
4244
+ if (!n.trim()) {
4245
+ a(), o++;
4246
+ continue;
4247
+ }
4248
+ let s;
4249
+ if (s = jt.exec(n)) {
4250
+ a();
4251
+ let n = s[1].length, i = s[2], c = RegExp(`^ {0,3}${i[0] === "`" ? "`" : "~"}{${i.length},}[ \\t]*$`), l = [];
4252
+ for (o++; o < e.length && !c.test(e[o]);) l.push(e[o++].replace(RegExp(`^ {0,${n}}`), ""));
4253
+ o++, r.push(Kt(l.join("\n"), s[3], t));
4254
+ } else if (!i.length && /^ {4}/.test(n)) {
4255
+ let t = [];
4256
+ for (; o < e.length && (/^ {4}/.test(e[o]) || !e[o].trim());) t.push(e[o++].slice(4));
4257
+ for (; t.length && !t[t.length - 1].trim();) t.pop();
4258
+ r.push(`<pre><code>${$(t.join("\n"))}\n</code></pre>`);
4259
+ } else if (s = Mt.exec(n)) a(), r.push(Gt(s[1].length, s[2] ?? "", t)), o++;
4260
+ else if (i.length && (s = Nt.exec(n))) {
4261
+ let e = i.join("\n");
4262
+ i = [], r.push(Gt(s[1][0] === "=" ? 1 : 2, e, t)), o++;
4263
+ } else if (Pt.test(n)) a(), r.push("<hr>"), o++;
4264
+ else if (Ft.test(n)) {
4265
+ a();
4266
+ let n = [];
4267
+ for (; o < e.length;) {
4268
+ let t = Ft.exec(e[o]);
4269
+ if (t) n.push(t[1]);
4270
+ else if (e[o].trim() && n.length && n[n.length - 1].trim() && !Vt(e[o])) n.push(e[o]);
4271
+ else break;
4272
+ o++;
4273
+ }
4274
+ r.push(`<blockquote>\n${Ht(n, t, !1)}\n</blockquote>`);
4275
+ } else {
4276
+ if (s = It.exec(n)) {
4277
+ let n = s[4] === void 0 || !s[4].trim();
4278
+ if (!i.length || !n && (!/\d/.test(s[2]) || parseInt(s[2], 10) === 1)) {
4279
+ a(), o = Ut(e, o, r, t);
4280
+ continue;
4281
+ }
4282
+ }
4283
+ n.includes("|") && o + 1 < e.length && Lt.test(e[o + 1]) && (e[o + 1].includes("|") || !n.trim().startsWith("|")) ? (a(), o = Wt(e, o, r, t)) : (i.push(n), o++);
4284
+ }
4285
+ }
4286
+ return a(), r.join("\n");
4287
+ }
4288
+ function Ut(e, t, n, r) {
4289
+ let i = It.exec(e[t]), a = /\d/.test(i[2]), o = i[2].slice(-1), s = [], c = !1, l = t;
4290
+ for (; l < e.length;) {
4291
+ let t = It.exec(e[l]);
4292
+ if (!t || /\d/.test(t[2]) !== a || t[2].slice(-1) !== o) break;
4293
+ let n = t[3] === void 0 || t[3].length > 4 ? 1 : t[3].length, r = t[1].length + t[2].length + n, i = [t[3] === void 0 ? "" : t[3].length > 4 ? t[3].slice(1) + t[4] : t[4]];
4294
+ l++;
4295
+ let u = !1;
4296
+ for (; l < e.length;) {
4297
+ let t = e[l];
4298
+ if (!t.trim()) i.push(""), u = !0, l++;
4299
+ else if (t.length - t.trimStart().length >= r) i.push(t.slice(r)), u = !1, l++;
4300
+ else {
4301
+ if (u) break;
4302
+ if (!Vt(t) && i[i.length - 1].trim()) i.push(t), l++;
4303
+ else break;
4304
+ }
4305
+ }
4306
+ let d = !1;
4307
+ for (; i.length > 1 && !i[i.length - 1].trim();) i.pop(), d = !0;
4308
+ for (let e = 1; e + 1 < i.length; e++) !i[e].trim() && i[e + 1].trim() && !/^\s/.test(i[e + 1]) && !It.test(i[e + 1]) && (c = !0);
4309
+ if (s.push(i), d) {
4310
+ let t = l < e.length ? It.exec(e[l]) : null;
4311
+ t && /\d/.test(t[2]) === a && t[2].slice(-1) === o && (c = !0);
4312
+ }
4313
+ }
4314
+ let u = a ? parseInt(i[2], 10) : 1;
4315
+ n.push(a ? `<ol${u === 1 ? "" : ` start="${u}"`}>` : "<ul>");
4316
+ for (let e of s) {
4317
+ let t = /^\[([ xX])\][ \t]+/.exec(e[0]);
4318
+ t && (e[0] = e[0].slice(t[0].length));
4319
+ let i = Ht(e, r, !c), a = t ? `<input type="checkbox" disabled${t[1] === " " ? "" : " checked"}> ` : "";
4320
+ n.push(t ? `<li class="task-list-item">${a}${i}</li>` : `<li>${i}</li>`);
4321
+ }
4322
+ return n.push(a ? "</ol>" : "</ul>"), l;
4323
+ }
4324
+ function Wt(e, t, n, r) {
4325
+ let i = (e) => {
4326
+ let t = e.trim();
4327
+ return t.startsWith("|") && (t = t.slice(1)), t.endsWith("|") && !t.endsWith("\\|") && (t = t.slice(0, -1)), t.split(/(?<!\\)\|/).map((e) => e.trim().replace(/\\\|/g, "|"));
4328
+ }, a = i(e[t]), o = i(e[t + 1]).map((e) => e.startsWith(":") && e.endsWith(":") ? "center" : e.endsWith(":") ? "right" : e.startsWith(":") ? "left" : "");
4329
+ t += 2;
4330
+ let s = [];
4331
+ for (; t < e.length && e[t].trim() && !Vt(e[t]);) s.push(i(e[t++]));
4332
+ let c = (e, t, n) => `<${e}${o[n] ? ` style="text-align:${o[n]}"` : ""}>${$t(t ?? "", r)}</${e}>`, l = `<table>\n<thead>\n<tr>${a.map((e, t) => c("th", e, t)).join("")}</tr>\n</thead>`;
4333
+ return s.length && (l += `\n<tbody>\n${s.map((e) => `<tr>${a.map((t, n) => c("td", e[n], n)).join("")}</tr>`).join("\n")}\n</tbody>`), n.push(l + "\n</table>"), t;
4334
+ }
4335
+ function Gt(e, t, n) {
4336
+ let r = $t(t.trim(), n);
4337
+ if (!n.ids) return `<h${e}>${r}</h${e}>`;
4338
+ let i = r.replace(/<[^>]*>/g, "").replace(/&\w+;|&#\d+;/g, "").toLowerCase().replace(/[^\p{L}\p{N}\s_-]/gu, "").trim().replace(/\s+/g, "-") || "section", a = n.slugs.get(i) ?? 0;
4339
+ return n.slugs.set(i, a + 1), `<h${e} id="${$(a ? `${i}-${a}` : i)}">${r}</h${e}>`;
4340
+ }
4341
+ function Kt(e, t, n) {
4342
+ let r = t.toLowerCase().replace(/[^\w+#.-]/g, ""), i = Tt[r];
4343
+ if (i && n.diagrams) try {
4344
+ return Ot(i, e).map((e) => `<figure class="md-diagram md-${i}">${e.svg}</figure>`).join("\n");
4345
+ } catch (t) {
4346
+ return `<div class="md-diagram-error"><p>${$(Et[i])} diagram not drawn: ${$(t.message)}</p><pre><code class="language-${r}">${$(e)}\n</code></pre></div>`;
4347
+ }
4348
+ return `<pre><code${r ? ` class="language-${r}"` : ""}>${$(e)}${e ? "\n" : ""}</code></pre>`;
4349
+ }
4350
+ function qt(e) {
4351
+ let t = e.trim();
4352
+ if (/^data:image\/(png|jpe?g|gif|webp|svg\+xml|avif|bmp);/i.test(t)) return t;
4353
+ let n = /^([a-z][a-z0-9+.-]*):/i.exec(t.replace(/[\u0000- ]/g, ""))?.[1].toLowerCase();
4354
+ return !n || n === "http" || n === "https" ? t : void 0;
4355
+ }
4356
+ var Jt = /\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g, Yt = String.raw`\(\s*(<[^>\n]*>|[^\s()]*(?:\([^\s()]*\)[^\s()]*)*)(?:\s+(?:"([^"]*)"|'([^']*)'|\(([^)]*)\)))?\s*\)`, Xt = new RegExp(String.raw`!\[((?:[^\[\]\\]|\\.|\[[^\]]*\])*)\]` + Yt, "g"), Zt = new RegExp(String.raw`\[((?:[^\[\]\\]|\\.|\[[^\]]*\])*)\]` + Yt, "g"), Qt = /(!?)\[((?:[^[\]\\]|\\.)*)\](?:\[((?:[^[\]\\]|\\.)*)\])?/g;
4357
+ function $t(e, t) {
4358
+ let n = [], r = (e) => `\u0000${n.push(e) - 1}\u0001`, i = (e) => e.replace(/^<|>$/g, ""), a = (e, t, n) => {
4359
+ let i = At(e.replace(Jt, "$1"));
4360
+ return r(i ? `<a href="${$(i)}"${n ? ` title="${$(n)}"` : ""}>${t}</a>` : t);
4361
+ }, o = (e, t, n) => {
4362
+ let i = qt(e.replace(Jt, "$1")), a = $(t.replace(Jt, "$1").replace(/[*_~`]/g, ""));
4363
+ return r(i ? `<img src="${$(i)}" alt="${a}"${n ? ` title="${$(n)}"` : ""}>` : a);
4364
+ }, s = e.replace(/[\u0000\u0001]/g, "�");
4365
+ s = s.replace(/(`+)(?!`)([\s\S]*?[^`])\1(?!`)/g, (e, t, n) => {
4366
+ let i = n.replace(/\n/g, " ");
4367
+ return r(`<code>${$(/^ .* $/.test(i) && i.trim() ? i.slice(1, -1) : i)}</code>`);
4368
+ }), s = s.replace(/\\\n/g, () => r("<br>\n")), s = s.replace(Jt, (e, t) => r($(t))), s = s.replace(/<((?:https?|ftp):\/\/[^\s<>]+|mailto:[^\s<>]+)>/gi, (e, t) => a(t, $(t))), s = s.replace(/<([\w.+-]+@[\w-]+(?:\.[\w-]+)+)>/g, (e, t) => a("mailto:" + t, $(t))), s = s.replace(Xt, (e, t, n, r, a, s) => o(i(n), t, r ?? a ?? s)), s = s.replace(Zt, (e, t, n, r, o, s) => a(i(n), en(t), r ?? o ?? s)), s = s.replace(Qt, (e, n, r, i) => {
4369
+ let s = t.refs.get(zt(i || r));
4370
+ return s ? n ? o(s.href, r, s.title) : a(s.href, en(r), s.title) : e;
4371
+ }), s = s.replace(/(^|[\s(*_~])((?:https?:\/\/|www\.)[^\s<\u0000]*[^\s<\u0000.,:;"')\]!?*_~])/g, (e, t, n) => t + a(n.startsWith("www.") ? "http://" + n : n, $(n))), s = en(s);
4372
+ for (let e = 0; e < 4 && s.includes("\0"); e++) s = s.replace(/\u0000(\d+)\u0001/g, (e, t) => n[Number(t)]);
4373
+ return s;
4374
+ }
4375
+ function en(e) {
4376
+ return $(e).replace(/\*\*\*(?=\S)([\s\S]*?\S)\*\*\*/g, "<strong><em>$1</em></strong>").replace(/\*\*(?=\S)([\s\S]*?\S)\*\*/g, "<strong>$1</strong>").replace(/(?<![\p{L}\p{N}_])__(?=\S)([\s\S]*?\S)__(?![\p{L}\p{N}_])/gu, "<strong>$1</strong>").replace(/\*(?=[^\s*])([\s\S]*?[^\s*])\*/g, "<em>$1</em>").replace(/(?<![\p{L}\p{N}_])_(?=[^\s_])([\s\S]*?[^\s_])_(?![\p{L}\p{N}_])/gu, "<em>$1</em>").replace(/~~(?=\S)([\s\S]*?\S)~~/g, "<del>$1</del>").replace(/ {2,}\n/g, "<br>\n");
4377
+ }
4378
+ // packages/markdown/src/index.ts
4379
+ function tn(e, t = {}) {
4380
+ return Bt(e, t);
4381
+ }
4382
+ function nn(e, t, n = {}) {
4383
+ e.innerHTML = Bt(t, n);
4384
+ }
4385
+ export { tn as render, nn as renderTo };
4386
+
4387
+ //# sourceMappingURL=index.js.map