1 | import { V as H, W as at, C as lt, D as ct, s as ot, g as ht, b as ut, a as yt, E as ft, d as pt, c as et, l as it, X as gt, U as dt, Y as mt, k as _t } from "./mermaid-9f2aa176.js";
|
2 | import { d as tt } from "./arc-d1f6357e.js";
|
3 | import { o as xt } from "./ordinal-5695958c.js";
|
4 | import { a as kt } from "./array-2ff2c7a6.js";
|
5 | import { c as F } from "./path-428ebac9.js";
|
6 | import "./init-f9637058.js";
|
7 | function vt(e, u) {
|
8 | return u < e ? -1 : u > e ? 1 : u >= e ? 0 : NaN;
|
9 | }
|
10 | function bt(e) {
|
11 | return e;
|
12 | }
|
13 | function St() {
|
14 | var e = bt, u = vt, E = null, p = F(0), g = F(H), A = F(0);
|
15 | function y(a) {
|
16 | var l, d = (a = kt(a)).length, m, I, $ = 0, _ = new Array(d), v = new Array(d), o = +p.apply(this, arguments), T = Math.min(H, Math.max(-H, g.apply(this, arguments) - o)), O, w = Math.min(Math.abs(T) / d, A.apply(this, arguments)), b = w * (T < 0 ? -1 : 1), t;
|
17 | for (l = 0; l < d; ++l)
|
18 | (t = v[_[l] = l] = +e(a[l], l, a)) > 0 && ($ += t);
|
19 | for (u != null ? _.sort(function(i, n) {
|
20 | return u(v[i], v[n]);
|
21 | }) : E != null && _.sort(function(i, n) {
|
22 | return E(a[i], a[n]);
|
23 | }), l = 0, I = $ ? (T - d * b) / $ : 0; l < d; ++l, o = O)
|
24 | m = _[l], t = v[m], O = o + (t > 0 ? t * I : 0) + b, v[m] = {
|
25 | data: a[m],
|
26 | index: l,
|
27 | value: t,
|
28 | startAngle: o,
|
29 | endAngle: O,
|
30 | padAngle: w
|
31 | };
|
32 | return v;
|
33 | }
|
34 | return y.value = function(a) {
|
35 | return arguments.length ? (e = typeof a == "function" ? a : F(+a), y) : e;
|
36 | }, y.sortValues = function(a) {
|
37 | return arguments.length ? (u = a, E = null, y) : u;
|
38 | }, y.sort = function(a) {
|
39 | return arguments.length ? (E = a, u = null, y) : E;
|
40 | }, y.startAngle = function(a) {
|
41 | return arguments.length ? (p = typeof a == "function" ? a : F(+a), y) : p;
|
42 | }, y.endAngle = function(a) {
|
43 | return arguments.length ? (g = typeof a == "function" ? a : F(+a), y) : g;
|
44 | }, y.padAngle = function(a) {
|
45 | return arguments.length ? (A = typeof a == "function" ? a : F(+a), y) : A;
|
46 | }, y;
|
47 | }
|
48 | var J = function() {
|
49 | var e = function(b, t, i, n) {
|
50 | for (i = i || {}, n = b.length; n--; i[b[n]] = t)
|
51 | ;
|
52 | return i;
|
53 | }, u = [1, 3], E = [1, 4], p = [1, 5], g = [1, 6], A = [1, 10, 12, 14, 16, 18, 19, 20, 21, 22], y = [2, 4], a = [1, 5, 10, 12, 14, 16, 18, 19, 20, 21, 22], l = [20, 21, 22], d = [2, 7], m = [1, 12], I = [1, 13], $ = [1, 14], _ = [1, 15], v = [1, 16], o = [1, 17], T = {
|
54 | trace: function() {
|
55 | },
|
56 | yy: {},
|
57 | symbols_: { error: 2, start: 3, eol: 4, PIE: 5, document: 6, showData: 7, line: 8, statement: 9, txt: 10, value: 11, title: 12, title_value: 13, acc_title: 14, acc_title_value: 15, acc_descr: 16, acc_descr_value: 17, acc_descr_multiline_value: 18, section: 19, NEWLINE: 20, ";": 21, EOF: 22, $accept: 0, $end: 1 },
|
58 | terminals_: { 2: "error", 5: "PIE", 7: "showData", 10: "txt", 11: "value", 12: "title", 13: "title_value", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "section", 20: "NEWLINE", 21: ";", 22: "EOF" },
|
59 | productions_: [0, [3, 2], [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [9, 0], [9, 2], [9, 2], [9, 2], [9, 2], [9, 1], [9, 1], [4, 1], [4, 1], [4, 1]],
|
60 | performAction: function(t, i, n, r, c, s, V) {
|
61 | var x = s.length - 1;
|
62 | switch (c) {
|
63 | case 3:
|
64 | r.setShowData(!0);
|
65 | break;
|
66 | case 6:
|
67 | this.$ = s[x - 1];
|
68 | break;
|
69 | case 8:
|
70 | r.addSection(s[x - 1], r.cleanupValue(s[x]));
|
71 | break;
|
72 | case 9:
|
73 | this.$ = s[x].trim(), r.setDiagramTitle(this.$);
|
74 | break;
|
75 | case 10:
|
76 | this.$ = s[x].trim(), r.setAccTitle(this.$);
|
77 | break;
|
78 | case 11:
|
79 | case 12:
|
80 | this.$ = s[x].trim(), r.setAccDescription(this.$);
|
81 | break;
|
82 | case 13:
|
83 | r.addSection(s[x].substr(8)), this.$ = s[x].substr(8);
|
84 | break;
|
85 | }
|
86 | },
|
87 | table: [{ 3: 1, 4: 2, 5: u, 20: E, 21: p, 22: g }, { 1: [3] }, { 3: 7, 4: 2, 5: u, 20: E, 21: p, 22: g }, e(A, y, { 6: 8, 7: [1, 9] }), e(a, [2, 14]), e(a, [2, 15]), e(a, [2, 16]), { 1: [2, 1] }, e(l, d, { 8: 10, 9: 11, 1: [2, 2], 10: m, 12: I, 14: $, 16: _, 18: v, 19: o }), e(A, y, { 6: 18 }), e(A, [2, 5]), { 4: 19, 20: E, 21: p, 22: g }, { 11: [1, 20] }, { 13: [1, 21] }, { 15: [1, 22] }, { 17: [1, 23] }, e(l, [2, 12]), e(l, [2, 13]), e(l, d, { 8: 10, 9: 11, 1: [2, 3], 10: m, 12: I, 14: $, 16: _, 18: v, 19: o }), e(A, [2, 6]), e(l, [2, 8]), e(l, [2, 9]), e(l, [2, 10]), e(l, [2, 11])],
|
88 | defaultActions: { 7: [2, 1] },
|
89 | parseError: function(t, i) {
|
90 | if (i.recoverable)
|
91 | this.trace(t);
|
92 | else {
|
93 | var n = new Error(t);
|
94 | throw n.hash = i, n;
|
95 | }
|
96 | },
|
97 | parse: function(t) {
|
98 | var i = this, n = [0], r = [], c = [null], s = [], V = this.table, x = "", f = 0, P = 0, R = 2, M = 1, Y = s.slice.call(arguments, 1), h = Object.create(this.lexer), N = { yy: {} };
|
99 | for (var B in this.yy)
|
100 | Object.prototype.hasOwnProperty.call(this.yy, B) && (N.yy[B] = this.yy[B]);
|
101 | h.setInput(t, N.yy), N.yy.lexer = h, N.yy.parser = this, typeof h.yylloc > "u" && (h.yylloc = {});
|
102 | var X = h.yylloc;
|
103 | s.push(X);
|
104 | var st = h.options && h.options.ranges;
|
105 | typeof N.yy.parseError == "function" ? this.parseError = N.yy.parseError : this.parseError = Object.getPrototypeOf(this).parseError;
|
106 | function rt() {
|
107 | var C;
|
108 | return C = r.pop() || h.lex() || M, typeof C != "number" && (C instanceof Array && (r = C, C = r.pop()), C = i.symbols_[C] || C), C;
|
109 | }
|
110 | for (var k, L, S, Z, z = {}, W, D, Q, j; ; ) {
|
111 | if (L = n[n.length - 1], this.defaultActions[L] ? S = this.defaultActions[L] : ((k === null || typeof k > "u") && (k = rt()), S = V[L] && V[L][k]), typeof S > "u" || !S.length || !S[0]) {
|
112 | var q = "";
|
113 | j = [];
|
114 | for (W in V[L])
|
115 | this.terminals_[W] && W > R && j.push("'" + this.terminals_[W] + "'");
|
116 | h.showPosition ? q = "Parse error on line " + (f + 1) + `:
|
117 | ` + h.showPosition() + `
|
118 | Expecting ` + j.join(", ") + ", got '" + (this.terminals_[k] || k) + "'" : q = "Parse error on line " + (f + 1) + ": Unexpected " + (k == M ? "end of input" : "'" + (this.terminals_[k] || k) + "'"), this.parseError(q, {
|
119 | text: h.match,
|
120 | token: this.terminals_[k] || k,
|
121 | line: h.yylineno,
|
122 | loc: X,
|
123 | expected: j
|
124 | });
|
125 | }
|
126 | if (S[0] instanceof Array && S.length > 1)
|
127 | throw new Error("Parse Error: multiple actions possible at state: " + L + ", token: " + k);
|
128 | switch (S[0]) {
|
129 | case 1:
|
130 | n.push(k), c.push(h.yytext), s.push(h.yylloc), n.push(S[1]), k = null, P = h.yyleng, x = h.yytext, f = h.yylineno, X = h.yylloc;
|
131 | break;
|
132 | case 2:
|
133 | if (D = this.productions_[S[1]][1], z.$ = c[c.length - D], z._$ = {
|
134 | first_line: s[s.length - (D || 1)].first_line,
|
135 | last_line: s[s.length - 1].last_line,
|
136 | first_column: s[s.length - (D || 1)].first_column,
|
137 | last_column: s[s.length - 1].last_column
|
138 | }, st && (z._$.range = [
|
139 | s[s.length - (D || 1)].range[0],
|
140 | s[s.length - 1].range[1]
|
141 | ]), Z = this.performAction.apply(z, [
|
142 | x,
|
143 | P,
|
144 | f,
|
145 | N.yy,
|
146 | S[1],
|
147 | c,
|
148 | s
|
149 | ].concat(Y)), typeof Z < "u")
|
150 | return Z;
|
151 | D && (n = n.slice(0, -1 * D * 2), c = c.slice(0, -1 * D), s = s.slice(0, -1 * D)), n.push(this.productions_[S[1]][0]), c.push(z.$), s.push(z._$), Q = V[n[n.length - 2]][n[n.length - 1]], n.push(Q);
|
152 | break;
|
153 | case 3:
|
154 | return !0;
|
155 | }
|
156 | }
|
157 | return !0;
|
158 | }
|
159 | }, O = function() {
|
160 | var b = {
|
161 | EOF: 1,
|
162 | parseError: function(i, n) {
|
163 | if (this.yy.parser)
|
164 | this.yy.parser.parseError(i, n);
|
165 | else
|
166 | throw new Error(i);
|
167 | },
|
168 |
|
169 | setInput: function(t, i) {
|
170 | return this.yy = i || this.yy || {}, this._input = t, this._more = this._backtrack = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
|
171 | first_line: 1,
|
172 | first_column: 0,
|
173 | last_line: 1,
|
174 | last_column: 0
|
175 | }, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this;
|
176 | },
|
177 |
|
178 | input: function() {
|
179 | var t = this._input[0];
|
180 | this.yytext += t, this.yyleng++, this.offset++, this.match += t, this.matched += t;
|
181 | var i = t.match(/(?:\r\n?|\n).*/g);
|
182 | return i ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), t;
|
183 | },
|
184 |
|
185 | unput: function(t) {
|
186 | var i = t.length, n = t.split(/(?:\r\n?|\n)/g);
|
187 | this._input = t + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - i), this.offset -= i;
|
188 | var r = this.match.split(/(?:\r\n?|\n)/g);
|
189 | this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), n.length - 1 && (this.yylineno -= n.length - 1);
|
190 | var c = this.yylloc.range;
|
191 | return this.yylloc = {
|
192 | first_line: this.yylloc.first_line,
|
193 | last_line: this.yylineno + 1,
|
194 | first_column: this.yylloc.first_column,
|
195 | last_column: n ? (n.length === r.length ? this.yylloc.first_column : 0) + r[r.length - n.length].length - n[0].length : this.yylloc.first_column - i
|
196 | }, this.options.ranges && (this.yylloc.range = [c[0], c[0] + this.yyleng - i]), this.yyleng = this.yytext.length, this;
|
197 | },
|
198 |
|
199 | more: function() {
|
200 | return this._more = !0, this;
|
201 | },
|
202 |
|
203 | reject: function() {
|
204 | if (this.options.backtrack_lexer)
|
205 | this._backtrack = !0;
|
206 | else
|
207 | return this.parseError("Lexical error on line " + (this.yylineno + 1) + `. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
208 | ` + this.showPosition(), {
|
209 | text: "",
|
210 | token: null,
|
211 | line: this.yylineno
|
212 | });
|
213 | return this;
|
214 | },
|
215 |
|
216 | less: function(t) {
|
217 | this.unput(this.match.slice(t));
|
218 | },
|
219 |
|
220 | pastInput: function() {
|
221 | var t = this.matched.substr(0, this.matched.length - this.match.length);
|
222 | return (t.length > 20 ? "..." : "") + t.substr(-20).replace(/\n/g, "");
|
223 | },
|
224 |
|
225 | upcomingInput: function() {
|
226 | var t = this.match;
|
227 | return t.length < 20 && (t += this._input.substr(0, 20 - t.length)), (t.substr(0, 20) + (t.length > 20 ? "..." : "")).replace(/\n/g, "");
|
228 | },
|
229 |
|
230 | showPosition: function() {
|
231 | var t = this.pastInput(), i = new Array(t.length + 1).join("-");
|
232 | return t + this.upcomingInput() + `
|
233 | ` + i + "^";
|
234 | },
|
235 |
|
236 | test_match: function(t, i) {
|
237 | var n, r, c;
|
238 | if (this.options.backtrack_lexer && (c = {
|
239 | yylineno: this.yylineno,
|
240 | yylloc: {
|
241 | first_line: this.yylloc.first_line,
|
242 | last_line: this.last_line,
|
243 | first_column: this.yylloc.first_column,
|
244 | last_column: this.yylloc.last_column
|
245 | },
|
246 | yytext: this.yytext,
|
247 | match: this.match,
|
248 | matches: this.matches,
|
249 | matched: this.matched,
|
250 | yyleng: this.yyleng,
|
251 | offset: this.offset,
|
252 | _more: this._more,
|
253 | _input: this._input,
|
254 | yy: this.yy,
|
255 | conditionStack: this.conditionStack.slice(0),
|
256 | done: this.done
|
257 | }, this.options.ranges && (c.yylloc.range = this.yylloc.range.slice(0))), r = t[0].match(/(?:\r\n?|\n).*/g), r && (this.yylineno += r.length), this.yylloc = {
|
258 | first_line: this.yylloc.last_line,
|
259 | last_line: this.yylineno + 1,
|
260 | first_column: this.yylloc.last_column,
|
261 | last_column: r ? r[r.length - 1].length - r[r.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + t[0].length
|
262 | }, this.yytext += t[0], this.match += t[0], this.matches = t, this.yyleng = this.yytext.length, this.options.ranges && (this.yylloc.range = [this.offset, this.offset += this.yyleng]), this._more = !1, this._backtrack = !1, this._input = this._input.slice(t[0].length), this.matched += t[0], n = this.performAction.call(this, this.yy, this, i, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), n)
|
263 | return n;
|
264 | if (this._backtrack) {
|
265 | for (var s in c)
|
266 | this[s] = c[s];
|
267 | return !1;
|
268 | }
|
269 | return !1;
|
270 | },
|
271 |
|
272 | next: function() {
|
273 | if (this.done)
|
274 | return this.EOF;
|
275 | this._input || (this.done = !0);
|
276 | var t, i, n, r;
|
277 | this._more || (this.yytext = "", this.match = "");
|
278 | for (var c = this._currentRules(), s = 0; s < c.length; s++)
|
279 | if (n = this._input.match(this.rules[c[s]]), n && (!i || n[0].length > i[0].length)) {
|
280 | if (i = n, r = s, this.options.backtrack_lexer) {
|
281 | if (t = this.test_match(n, c[s]), t !== !1)
|
282 | return t;
|
283 | if (this._backtrack) {
|
284 | i = !1;
|
285 | continue;
|
286 | } else
|
287 | return !1;
|
288 | } else if (!this.options.flex)
|
289 | break;
|
290 | }
|
291 | return i ? (t = this.test_match(i, c[r]), t !== !1 ? t : !1) : this._input === "" ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + `. Unrecognized text.
|
292 | ` + this.showPosition(), {
|
293 | text: "",
|
294 | token: null,
|
295 | line: this.yylineno
|
296 | });
|
297 | },
|
298 |
|
299 | lex: function() {
|
300 | var i = this.next();
|
301 | return i || this.lex();
|
302 | },
|
303 |
|
304 | begin: function(i) {
|
305 | this.conditionStack.push(i);
|
306 | },
|
307 |
|
308 | popState: function() {
|
309 | var i = this.conditionStack.length - 1;
|
310 | return i > 0 ? this.conditionStack.pop() : this.conditionStack[0];
|
311 | },
|
312 |
|
313 | _currentRules: function() {
|
314 | return this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1] ? this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules : this.conditions.INITIAL.rules;
|
315 | },
|
316 |
|
317 | topState: function(i) {
|
318 | return i = this.conditionStack.length - 1 - Math.abs(i || 0), i >= 0 ? this.conditionStack[i] : "INITIAL";
|
319 | },
|
320 |
|
321 | pushState: function(i) {
|
322 | this.begin(i);
|
323 | },
|
324 |
|
325 | stateStackSize: function() {
|
326 | return this.conditionStack.length;
|
327 | },
|
328 | options: { "case-insensitive": !0 },
|
329 | performAction: function(i, n, r, c) {
|
330 | switch (r) {
|
331 | case 0:
|
332 | break;
|
333 | case 1:
|
334 | break;
|
335 | case 2:
|
336 | return 20;
|
337 | case 3:
|
338 | break;
|
339 | case 4:
|
340 | break;
|
341 | case 5:
|
342 | return this.begin("title"), 12;
|
343 | case 6:
|
344 | return this.popState(), "title_value";
|
345 | case 7:
|
346 | return this.begin("acc_title"), 14;
|
347 | case 8:
|
348 | return this.popState(), "acc_title_value";
|
349 | case 9:
|
350 | return this.begin("acc_descr"), 16;
|
351 | case 10:
|
352 | return this.popState(), "acc_descr_value";
|
353 | case 11:
|
354 | this.begin("acc_descr_multiline");
|
355 | break;
|
356 | case 12:
|
357 | this.popState();
|
358 | break;
|
359 | case 13:
|
360 | return "acc_descr_multiline_value";
|
361 | case 14:
|
362 | this.begin("string");
|
363 | break;
|
364 | case 15:
|
365 | this.popState();
|
366 | break;
|
367 | case 16:
|
368 | return "txt";
|
369 | case 17:
|
370 | return 5;
|
371 | case 18:
|
372 | return 7;
|
373 | case 19:
|
374 | return "value";
|
375 | case 20:
|
376 | return 22;
|
377 | }
|
378 | },
|
379 | rules: [/^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i],
|
380 | conditions: { acc_descr_multiline: { rules: [12, 13], inclusive: !1 }, acc_descr: { rules: [10], inclusive: !1 }, acc_title: { rules: [8], inclusive: !1 }, title: { rules: [6], inclusive: !1 }, string: { rules: [15, 16], inclusive: !1 }, INITIAL: { rules: [0, 1, 2, 3, 4, 5, 7, 9, 11, 14, 17, 18, 19, 20], inclusive: !0 } }
|
381 | };
|
382 | return b;
|
383 | }();
|
384 | T.lexer = O;
|
385 | function w() {
|
386 | this.yy = {};
|
387 | }
|
388 | return w.prototype = T, T.Parser = w, new w();
|
389 | }();
|
390 | J.parser = J;
|
391 | const Et = J, nt = at.pie, G = {
|
392 | sections: {},
|
393 | showData: !1,
|
394 | config: nt
|
395 | };
|
396 | let U = G.sections, K = G.showData;
|
397 | const At = structuredClone(nt), wt = () => structuredClone(At), $t = () => {
|
398 | U = structuredClone(G.sections), K = G.showData, ft();
|
399 | }, Tt = (e, u) => {
|
400 | e = pt(e, et()), U[e] === void 0 && (U[e] = u, it.debug(`added new section: ${e}, with value: ${u}`));
|
401 | }, It = () => U, Dt = (e) => (e.substring(0, 1) === ":" && (e = e.substring(1).trim()), Number(e.trim())), Ct = (e) => {
|
402 | K = e;
|
403 | }, Ot = () => K, Vt = {
|
404 | getConfig: wt,
|
405 | clear: $t,
|
406 | setDiagramTitle: lt,
|
407 | getDiagramTitle: ct,
|
408 | setAccTitle: ot,
|
409 | getAccTitle: ht,
|
410 | setAccDescription: ut,
|
411 | getAccDescription: yt,
|
412 | addSection: Tt,
|
413 | getSections: It,
|
414 | cleanupValue: Dt,
|
415 | setShowData: Ct,
|
416 | getShowData: Ot
|
417 | }, Pt = (e) => `
|
418 | .pieCircle{
|
419 | stroke: ${e.pieStrokeColor};
|
420 | stroke-width : ${e.pieStrokeWidth};
|
421 | opacity : ${e.pieOpacity};
|
422 | }
|
423 | .pieOuterCircle{
|
424 | stroke: ${e.pieOuterStrokeColor};
|
425 | stroke-width: ${e.pieOuterStrokeWidth};
|
426 | fill: none;
|
427 | }
|
428 | .pieTitleText {
|
429 | text-anchor: middle;
|
430 | font-size: ${e.pieTitleTextSize};
|
431 | fill: ${e.pieTitleTextColor};
|
432 | font-family: ${e.fontFamily};
|
433 | }
|
434 | .slice {
|
435 | font-family: ${e.fontFamily};
|
436 | fill: ${e.pieSectionTextColor};
|
437 | font-size:${e.pieSectionTextSize};
|
438 | // fill: white;
|
439 | }
|
440 | .legend text {
|
441 | fill: ${e.pieLegendTextColor};
|
442 | font-family: ${e.fontFamily};
|
443 | font-size: ${e.pieLegendTextSize};
|
444 | }
|
445 | `, Nt = Pt, Lt = (e) => {
|
446 | const u = Object.entries(e).map((p) => ({
|
447 | label: p[0],
|
448 | value: p[1]
|
449 | })).sort((p, g) => g.value - p.value);
|
450 | return St().value(
|
451 | (p) => p.value
|
452 | )(u);
|
453 | }, Ft = (e, u, E, p) => {
|
454 | it.debug(`rendering pie chart
|
455 | ` + e);
|
456 | const g = p.db, A = et(), y = gt(g.getConfig(), A.pie), a = 40, l = 18, d = 4, m = 450, I = m, $ = dt(u), _ = $.append("g"), v = g.getSections();
|
457 | _.attr("transform", "translate(" + I / 2 + "," + m / 2 + ")");
|
458 | const { themeVariables: o } = A;
|
459 | let [T] = mt(o.pieOuterStrokeWidth);
|
460 | T ?? (T = 2);
|
461 | const O = y.textPosition, w = Math.min(I, m) / 2 - a, b = tt().innerRadius(0).outerRadius(w), t = tt().innerRadius(w * O).outerRadius(w * O);
|
462 | _.append("circle").attr("cx", 0).attr("cy", 0).attr("r", w + T / 2).attr("class", "pieOuterCircle");
|
463 | const i = Lt(v), n = [
|
464 | o.pie1,
|
465 | o.pie2,
|
466 | o.pie3,
|
467 | o.pie4,
|
468 | o.pie5,
|
469 | o.pie6,
|
470 | o.pie7,
|
471 | o.pie8,
|
472 | o.pie9,
|
473 | o.pie10,
|
474 | o.pie11,
|
475 | o.pie12
|
476 | ], r = xt(n);
|
477 | _.selectAll("mySlices").data(i).enter().append("path").attr("d", b).attr("fill", (f) => r(f.data.label)).attr("class", "pieCircle");
|
478 | let c = 0;
|
479 | Object.keys(v).forEach((f) => {
|
480 | c += v[f];
|
481 | }), _.selectAll("mySlices").data(i).enter().append("text").text((f) => (f.data.value / c * 100).toFixed(0) + "%").attr("transform", (f) => "translate(" + t.centroid(f) + ")").style("text-anchor", "middle").attr("class", "slice"), _.append("text").text(g.getDiagramTitle()).attr("x", 0).attr("y", -(m - 50) / 2).attr("class", "pieTitleText");
|
482 | const s = _.selectAll(".legend").data(r.domain()).enter().append("g").attr("class", "legend").attr("transform", (f, P) => {
|
483 | const R = l + d, M = R * r.domain().length / 2, Y = 12 * l, h = P * R - M;
|
484 | return "translate(" + Y + "," + h + ")";
|
485 | });
|
486 | s.append("rect").attr("width", l).attr("height", l).style("fill", r).style("stroke", r), s.data(i).append("text").attr("x", l + d).attr("y", l - d).text((f) => {
|
487 | const { label: P, value: R } = f.data;
|
488 | return g.getShowData() ? `${P} [${R}]` : P;
|
489 | });
|
490 | const V = Math.max(
|
491 | ...s.selectAll("text").nodes().map((f) => (f == null ? void 0 : f.getBoundingClientRect().width) ?? 0)
|
492 | ), x = I + a + l + d + V;
|
493 | $.attr("viewBox", `0 0 ${x} ${m}`), _t($, m, x, y.useMaxWidth);
|
494 | }, Rt = { draw: Ft }, Yt = {
|
495 | parser: Et,
|
496 | db: Vt,
|
497 | renderer: Rt,
|
498 | styles: Nt
|
499 | };
|
500 | export {
|
501 | Yt as diagram
|
502 | };
|