UNPKG

30.3 kBJavaScriptView Raw
1import { c as C, C as yt, D as dt, s as ft, g as pt, b as gt, a as mt, E as xt, j as W, k as kt } from "./mermaid-9f2aa176.js";
2import { d as _t, f as bt, a as vt, g as it } from "./svgDrawCommon-ecc5f780.js";
3import { d as Q } from "./arc-d1f6357e.js";
4import "./path-428ebac9.js";
5var G = function() {
6 var t = function(p, s, r, a) {
7 for (r = r || {}, a = p.length; a--; r[p[a]] = s)
8 ;
9 return r;
10 }, e = [6, 8, 10, 11, 12, 14, 16, 17, 18], i = [1, 9], o = [1, 10], n = [1, 11], h = [1, 12], c = [1, 13], d = [1, 14], y = {
11 trace: function() {
12 },
13 yy: {},
14 symbols_: { error: 2, start: 3, journey: 4, document: 5, EOF: 6, line: 7, SPACE: 8, statement: 9, NEWLINE: 10, title: 11, acc_title: 12, acc_title_value: 13, acc_descr: 14, acc_descr_value: 15, acc_descr_multiline_value: 16, section: 17, taskName: 18, taskData: 19, $accept: 0, $end: 1 },
15 terminals_: { 2: "error", 4: "journey", 6: "EOF", 8: "SPACE", 10: "NEWLINE", 11: "title", 12: "acc_title", 13: "acc_title_value", 14: "acc_descr", 15: "acc_descr_value", 16: "acc_descr_multiline_value", 17: "section", 18: "taskName", 19: "taskData" },
16 productions_: [0, [3, 3], [5, 0], [5, 2], [7, 2], [7, 1], [7, 1], [7, 1], [9, 1], [9, 2], [9, 2], [9, 1], [9, 1], [9, 2]],
17 performAction: function(s, r, a, u, f, l, w) {
18 var k = l.length - 1;
19 switch (f) {
20 case 1:
21 return l[k - 1];
22 case 2:
23 this.$ = [];
24 break;
25 case 3:
26 l[k - 1].push(l[k]), this.$ = l[k - 1];
27 break;
28 case 4:
29 case 5:
30 this.$ = l[k];
31 break;
32 case 6:
33 case 7:
34 this.$ = [];
35 break;
36 case 8:
37 u.setDiagramTitle(l[k].substr(6)), this.$ = l[k].substr(6);
38 break;
39 case 9:
40 this.$ = l[k].trim(), u.setAccTitle(this.$);
41 break;
42 case 10:
43 case 11:
44 this.$ = l[k].trim(), u.setAccDescription(this.$);
45 break;
46 case 12:
47 u.addSection(l[k].substr(8)), this.$ = l[k].substr(8);
48 break;
49 case 13:
50 u.addTask(l[k - 1], l[k]), this.$ = "task";
51 break;
52 }
53 },
54 table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, t(e, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: [1, 6], 9: 7, 10: [1, 8], 11: i, 12: o, 14: n, 16: h, 17: c, 18: d }, t(e, [2, 7], { 1: [2, 1] }), t(e, [2, 3]), { 9: 15, 11: i, 12: o, 14: n, 16: h, 17: c, 18: d }, t(e, [2, 5]), t(e, [2, 6]), t(e, [2, 8]), { 13: [1, 16] }, { 15: [1, 17] }, t(e, [2, 11]), t(e, [2, 12]), { 19: [1, 18] }, t(e, [2, 4]), t(e, [2, 9]), t(e, [2, 10]), t(e, [2, 13])],
55 defaultActions: {},
56 parseError: function(s, r) {
57 if (r.recoverable)
58 this.trace(s);
59 else {
60 var a = new Error(s);
61 throw a.hash = r, a;
62 }
63 },
64 parse: function(s) {
65 var r = this, a = [0], u = [], f = [null], l = [], w = this.table, k = "", R = 0, Z = 0, ot = 2, J = 1, ct = l.slice.call(arguments, 1), x = Object.create(this.lexer), S = { yy: {} };
66 for (var z in this.yy)
67 Object.prototype.hasOwnProperty.call(this.yy, z) && (S.yy[z] = this.yy[z]);
68 x.setInput(s, S.yy), S.yy.lexer = x, S.yy.parser = this, typeof x.yylloc > "u" && (x.yylloc = {});
69 var Y = x.yylloc;
70 l.push(Y);
71 var ht = x.options && x.options.ranges;
72 typeof S.yy.parseError == "function" ? this.parseError = S.yy.parseError : this.parseError = Object.getPrototypeOf(this).parseError;
73 function ut() {
74 var $;
75 return $ = u.pop() || x.lex() || J, typeof $ != "number" && ($ instanceof Array && (u = $, $ = u.pop()), $ = r.symbols_[$] || $), $;
76 }
77 for (var _, E, b, O, I = {}, N, T, K, B; ; ) {
78 if (E = a[a.length - 1], this.defaultActions[E] ? b = this.defaultActions[E] : ((_ === null || typeof _ > "u") && (_ = ut()), b = w[E] && w[E][_]), typeof b > "u" || !b.length || !b[0]) {
79 var q = "";
80 B = [];
81 for (N in w[E])
82 this.terminals_[N] && N > ot && B.push("'" + this.terminals_[N] + "'");
83 x.showPosition ? q = "Parse error on line " + (R + 1) + `:
84` + x.showPosition() + `
85Expecting ` + B.join(", ") + ", got '" + (this.terminals_[_] || _) + "'" : q = "Parse error on line " + (R + 1) + ": Unexpected " + (_ == J ? "end of input" : "'" + (this.terminals_[_] || _) + "'"), this.parseError(q, {
86 text: x.match,
87 token: this.terminals_[_] || _,
88 line: x.yylineno,
89 loc: Y,
90 expected: B
91 });
92 }
93 if (b[0] instanceof Array && b.length > 1)
94 throw new Error("Parse Error: multiple actions possible at state: " + E + ", token: " + _);
95 switch (b[0]) {
96 case 1:
97 a.push(_), f.push(x.yytext), l.push(x.yylloc), a.push(b[1]), _ = null, Z = x.yyleng, k = x.yytext, R = x.yylineno, Y = x.yylloc;
98 break;
99 case 2:
100 if (T = this.productions_[b[1]][1], I.$ = f[f.length - T], I._$ = {
101 first_line: l[l.length - (T || 1)].first_line,
102 last_line: l[l.length - 1].last_line,
103 first_column: l[l.length - (T || 1)].first_column,
104 last_column: l[l.length - 1].last_column
105 }, ht && (I._$.range = [
106 l[l.length - (T || 1)].range[0],
107 l[l.length - 1].range[1]
108 ]), O = this.performAction.apply(I, [
109 k,
110 Z,
111 R,
112 S.yy,
113 b[1],
114 f,
115 l
116 ].concat(ct)), typeof O < "u")
117 return O;
118 T && (a = a.slice(0, -1 * T * 2), f = f.slice(0, -1 * T), l = l.slice(0, -1 * T)), a.push(this.productions_[b[1]][0]), f.push(I.$), l.push(I._$), K = w[a[a.length - 2]][a[a.length - 1]], a.push(K);
119 break;
120 case 3:
121 return !0;
122 }
123 }
124 return !0;
125 }
126 }, m = function() {
127 var p = {
128 EOF: 1,
129 parseError: function(r, a) {
130 if (this.yy.parser)
131 this.yy.parser.parseError(r, a);
132 else
133 throw new Error(r);
134 },
135 // resets the lexer, sets new input
136 setInput: function(s, r) {
137 return this.yy = r || this.yy || {}, this._input = s, this._more = this._backtrack = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
138 first_line: 1,
139 first_column: 0,
140 last_line: 1,
141 last_column: 0
142 }, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this;
143 },
144 // consumes and returns one char from the input
145 input: function() {
146 var s = this._input[0];
147 this.yytext += s, this.yyleng++, this.offset++, this.match += s, this.matched += s;
148 var r = s.match(/(?:\r\n?|\n).*/g);
149 return r ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), s;
150 },
151 // unshifts one char (or a string) into the input
152 unput: function(s) {
153 var r = s.length, a = s.split(/(?:\r\n?|\n)/g);
154 this._input = s + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - r), this.offset -= r;
155 var u = this.match.split(/(?:\r\n?|\n)/g);
156 this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), a.length - 1 && (this.yylineno -= a.length - 1);
157 var f = this.yylloc.range;
158 return this.yylloc = {
159 first_line: this.yylloc.first_line,
160 last_line: this.yylineno + 1,
161 first_column: this.yylloc.first_column,
162 last_column: a ? (a.length === u.length ? this.yylloc.first_column : 0) + u[u.length - a.length].length - a[0].length : this.yylloc.first_column - r
163 }, this.options.ranges && (this.yylloc.range = [f[0], f[0] + this.yyleng - r]), this.yyleng = this.yytext.length, this;
164 },
165 // When called from action, caches matched text and appends it on next action
166 more: function() {
167 return this._more = !0, this;
168 },
169 // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
170 reject: function() {
171 if (this.options.backtrack_lexer)
172 this._backtrack = !0;
173 else
174 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).
175` + this.showPosition(), {
176 text: "",
177 token: null,
178 line: this.yylineno
179 });
180 return this;
181 },
182 // retain first n characters of the match
183 less: function(s) {
184 this.unput(this.match.slice(s));
185 },
186 // displays already matched input, i.e. for error messages
187 pastInput: function() {
188 var s = this.matched.substr(0, this.matched.length - this.match.length);
189 return (s.length > 20 ? "..." : "") + s.substr(-20).replace(/\n/g, "");
190 },
191 // displays upcoming input, i.e. for error messages
192 upcomingInput: function() {
193 var s = this.match;
194 return s.length < 20 && (s += this._input.substr(0, 20 - s.length)), (s.substr(0, 20) + (s.length > 20 ? "..." : "")).replace(/\n/g, "");
195 },
196 // displays the character position where the lexing error occurred, i.e. for error messages
197 showPosition: function() {
198 var s = this.pastInput(), r = new Array(s.length + 1).join("-");
199 return s + this.upcomingInput() + `
200` + r + "^";
201 },
202 // test the lexed token: return FALSE when not a match, otherwise return token
203 test_match: function(s, r) {
204 var a, u, f;
205 if (this.options.backtrack_lexer && (f = {
206 yylineno: this.yylineno,
207 yylloc: {
208 first_line: this.yylloc.first_line,
209 last_line: this.last_line,
210 first_column: this.yylloc.first_column,
211 last_column: this.yylloc.last_column
212 },
213 yytext: this.yytext,
214 match: this.match,
215 matches: this.matches,
216 matched: this.matched,
217 yyleng: this.yyleng,
218 offset: this.offset,
219 _more: this._more,
220 _input: this._input,
221 yy: this.yy,
222 conditionStack: this.conditionStack.slice(0),
223 done: this.done
224 }, this.options.ranges && (f.yylloc.range = this.yylloc.range.slice(0))), u = s[0].match(/(?:\r\n?|\n).*/g), u && (this.yylineno += u.length), this.yylloc = {
225 first_line: this.yylloc.last_line,
226 last_line: this.yylineno + 1,
227 first_column: this.yylloc.last_column,
228 last_column: u ? u[u.length - 1].length - u[u.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + s[0].length
229 }, this.yytext += s[0], this.match += s[0], this.matches = s, 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(s[0].length), this.matched += s[0], a = this.performAction.call(this, this.yy, this, r, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), a)
230 return a;
231 if (this._backtrack) {
232 for (var l in f)
233 this[l] = f[l];
234 return !1;
235 }
236 return !1;
237 },
238 // return next match in input
239 next: function() {
240 if (this.done)
241 return this.EOF;
242 this._input || (this.done = !0);
243 var s, r, a, u;
244 this._more || (this.yytext = "", this.match = "");
245 for (var f = this._currentRules(), l = 0; l < f.length; l++)
246 if (a = this._input.match(this.rules[f[l]]), a && (!r || a[0].length > r[0].length)) {
247 if (r = a, u = l, this.options.backtrack_lexer) {
248 if (s = this.test_match(a, f[l]), s !== !1)
249 return s;
250 if (this._backtrack) {
251 r = !1;
252 continue;
253 } else
254 return !1;
255 } else if (!this.options.flex)
256 break;
257 }
258 return r ? (s = this.test_match(r, f[u]), s !== !1 ? s : !1) : this._input === "" ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + `. Unrecognized text.
259` + this.showPosition(), {
260 text: "",
261 token: null,
262 line: this.yylineno
263 });
264 },
265 // return next match that has a token
266 lex: function() {
267 var r = this.next();
268 return r || this.lex();
269 },
270 // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
271 begin: function(r) {
272 this.conditionStack.push(r);
273 },
274 // pop the previously active lexer condition state off the condition stack
275 popState: function() {
276 var r = this.conditionStack.length - 1;
277 return r > 0 ? this.conditionStack.pop() : this.conditionStack[0];
278 },
279 // produce the lexer rule set which is active for the currently active lexer condition state
280 _currentRules: function() {
281 return this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1] ? this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules : this.conditions.INITIAL.rules;
282 },
283 // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
284 topState: function(r) {
285 return r = this.conditionStack.length - 1 - Math.abs(r || 0), r >= 0 ? this.conditionStack[r] : "INITIAL";
286 },
287 // alias for begin(condition)
288 pushState: function(r) {
289 this.begin(r);
290 },
291 // return the number of states currently on the stack
292 stateStackSize: function() {
293 return this.conditionStack.length;
294 },
295 options: { "case-insensitive": !0 },
296 performAction: function(r, a, u, f) {
297 switch (u) {
298 case 0:
299 break;
300 case 1:
301 break;
302 case 2:
303 return 10;
304 case 3:
305 break;
306 case 4:
307 break;
308 case 5:
309 return 4;
310 case 6:
311 return 11;
312 case 7:
313 return this.begin("acc_title"), 12;
314 case 8:
315 return this.popState(), "acc_title_value";
316 case 9:
317 return this.begin("acc_descr"), 14;
318 case 10:
319 return this.popState(), "acc_descr_value";
320 case 11:
321 this.begin("acc_descr_multiline");
322 break;
323 case 12:
324 this.popState();
325 break;
326 case 13:
327 return "acc_descr_multiline_value";
328 case 14:
329 return 17;
330 case 15:
331 return 18;
332 case 16:
333 return 19;
334 case 17:
335 return ":";
336 case 18:
337 return 6;
338 case 19:
339 return "INVALID";
340 }
341 },
342 rules: [/^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],
343 conditions: { acc_descr_multiline: { rules: [12, 13], inclusive: !1 }, acc_descr: { rules: [10], inclusive: !1 }, acc_title: { rules: [8], inclusive: !1 }, INITIAL: { rules: [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 14, 15, 16, 17, 18, 19], inclusive: !0 } }
344 };
345 return p;
346 }();
347 y.lexer = m;
348 function g() {
349 this.yy = {};
350 }
351 return g.prototype = y, y.Parser = g, new g();
352}();
353G.parser = G;
354const wt = G;
355let A = "";
356const H = [], V = [], F = [], Tt = function() {
357 H.length = 0, V.length = 0, A = "", F.length = 0, xt();
358}, $t = function(t) {
359 A = t, H.push(t);
360}, Mt = function() {
361 return H;
362}, St = function() {
363 let t = D();
364 const e = 100;
365 let i = 0;
366 for (; !t && i < e; )
367 t = D(), i++;
368 return V.push(...F), V;
369}, Et = function() {
370 const t = [];
371 return V.forEach((i) => {
372 i.people && t.push(...i.people);
373 }), [...new Set(t)].sort();
374}, Pt = function(t, e) {
375 const i = e.substr(1).split(":");
376 let o = 0, n = [];
377 i.length === 1 ? (o = Number(i[0]), n = []) : (o = Number(i[0]), n = i[1].split(","));
378 const h = n.map((d) => d.trim()), c = {
379 section: A,
380 type: A,
381 people: h,
382 task: t,
383 score: o
384 };
385 F.push(c);
386}, Ct = function(t) {
387 const e = {
388 section: A,
389 type: A,
390 description: t,
391 task: t,
392 classes: []
393 };
394 V.push(e);
395}, D = function() {
396 const t = function(i) {
397 return F[i].processed;
398 };
399 let e = !0;
400 for (const [i, o] of F.entries())
401 t(i), e = e && o.processed;
402 return e;
403}, It = function() {
404 return Et();
405}, tt = {
406 getConfig: () => C().journey,
407 clear: Tt,
408 setDiagramTitle: yt,
409 getDiagramTitle: dt,
410 setAccTitle: ft,
411 getAccTitle: pt,
412 setAccDescription: gt,
413 getAccDescription: mt,
414 addSection: $t,
415 getSections: Mt,
416 getTasks: St,
417 addTask: Pt,
418 addTaskOrg: Ct,
419 getActors: It
420}, At = (t) => `.label {
421 font-family: 'trebuchet ms', verdana, arial, sans-serif;
422 font-family: var(--mermaid-font-family);
423 color: ${t.textColor};
424 }
425 .mouth {
426 stroke: #666;
427 }
428
429 line {
430 stroke: ${t.textColor}
431 }
432
433 .legend {
434 fill: ${t.textColor};
435 }
436
437 .label text {
438 fill: #333;
439 }
440 .label {
441 color: ${t.textColor}
442 }
443
444 .face {
445 ${t.faceColor ? `fill: ${t.faceColor}` : "fill: #FFF8DC"};
446 stroke: #999;
447 }
448
449 .node rect,
450 .node circle,
451 .node ellipse,
452 .node polygon,
453 .node path {
454 fill: ${t.mainBkg};
455 stroke: ${t.nodeBorder};
456 stroke-width: 1px;
457 }
458
459 .node .label {
460 text-align: center;
461 }
462 .node.clickable {
463 cursor: pointer;
464 }
465
466 .arrowheadPath {
467 fill: ${t.arrowheadColor};
468 }
469
470 .edgePath .path {
471 stroke: ${t.lineColor};
472 stroke-width: 1.5px;
473 }
474
475 .flowchart-link {
476 stroke: ${t.lineColor};
477 fill: none;
478 }
479
480 .edgeLabel {
481 background-color: ${t.edgeLabelBackground};
482 rect {
483 opacity: 0.5;
484 }
485 text-align: center;
486 }
487
488 .cluster rect {
489 }
490
491 .cluster text {
492 fill: ${t.titleColor};
493 }
494
495 div.mermaidTooltip {
496 position: absolute;
497 text-align: center;
498 max-width: 200px;
499 padding: 2px;
500 font-family: 'trebuchet ms', verdana, arial, sans-serif;
501 font-family: var(--mermaid-font-family);
502 font-size: 12px;
503 background: ${t.tertiaryColor};
504 border: 1px solid ${t.border2};
505 border-radius: 2px;
506 pointer-events: none;
507 z-index: 100;
508 }
509
510 .task-type-0, .section-type-0 {
511 ${t.fillType0 ? `fill: ${t.fillType0}` : ""};
512 }
513 .task-type-1, .section-type-1 {
514 ${t.fillType0 ? `fill: ${t.fillType1}` : ""};
515 }
516 .task-type-2, .section-type-2 {
517 ${t.fillType0 ? `fill: ${t.fillType2}` : ""};
518 }
519 .task-type-3, .section-type-3 {
520 ${t.fillType0 ? `fill: ${t.fillType3}` : ""};
521 }
522 .task-type-4, .section-type-4 {
523 ${t.fillType0 ? `fill: ${t.fillType4}` : ""};
524 }
525 .task-type-5, .section-type-5 {
526 ${t.fillType0 ? `fill: ${t.fillType5}` : ""};
527 }
528 .task-type-6, .section-type-6 {
529 ${t.fillType0 ? `fill: ${t.fillType6}` : ""};
530 }
531 .task-type-7, .section-type-7 {
532 ${t.fillType0 ? `fill: ${t.fillType7}` : ""};
533 }
534
535 .actor-0 {
536 ${t.actor0 ? `fill: ${t.actor0}` : ""};
537 }
538 .actor-1 {
539 ${t.actor1 ? `fill: ${t.actor1}` : ""};
540 }
541 .actor-2 {
542 ${t.actor2 ? `fill: ${t.actor2}` : ""};
543 }
544 .actor-3 {
545 ${t.actor3 ? `fill: ${t.actor3}` : ""};
546 }
547 .actor-4 {
548 ${t.actor4 ? `fill: ${t.actor4}` : ""};
549 }
550 .actor-5 {
551 ${t.actor5 ? `fill: ${t.actor5}` : ""};
552 }
553`, Vt = At, U = function(t, e) {
554 return _t(t, e);
555}, Ft = function(t, e) {
556 const o = t.append("circle").attr("cx", e.cx).attr("cy", e.cy).attr("class", "face").attr("r", 15).attr("stroke-width", 2).attr("overflow", "visible"), n = t.append("g");
557 n.append("circle").attr("cx", e.cx - 15 / 3).attr("cy", e.cy - 15 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"), n.append("circle").attr("cx", e.cx + 15 / 3).attr("cy", e.cy - 15 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
558 function h(y) {
559 const m = Q().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(7.5).outerRadius(6.8181818181818175);
560 y.append("path").attr("class", "mouth").attr("d", m).attr("transform", "translate(" + e.cx + "," + (e.cy + 2) + ")");
561 }
562 function c(y) {
563 const m = Q().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(7.5).outerRadius(6.8181818181818175);
564 y.append("path").attr("class", "mouth").attr("d", m).attr("transform", "translate(" + e.cx + "," + (e.cy + 7) + ")");
565 }
566 function d(y) {
567 y.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", e.cx - 5).attr("y1", e.cy + 7).attr("x2", e.cx + 5).attr("y2", e.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666");
568 }
569 return e.score > 3 ? h(n) : e.score < 3 ? c(n) : d(n), o;
570}, rt = function(t, e) {
571 const i = t.append("circle");
572 return i.attr("cx", e.cx), i.attr("cy", e.cy), i.attr("class", "actor-" + e.pos), i.attr("fill", e.fill), i.attr("stroke", e.stroke), i.attr("r", e.r), i.class !== void 0 && i.attr("class", i.class), e.title !== void 0 && i.append("title").text(e.title), i;
573}, at = function(t, e) {
574 return bt(t, e);
575}, Lt = function(t, e) {
576 function i(n, h, c, d, y) {
577 return n + "," + h + " " + (n + c) + "," + h + " " + (n + c) + "," + (h + d - y) + " " + (n + c - y * 1.2) + "," + (h + d) + " " + n + "," + (h + d);
578 }
579 const o = t.append("polygon");
580 o.attr("points", i(e.x, e.y, 50, 20, 7)), o.attr("class", "labelBox"), e.y = e.y + e.labelMargin, e.x = e.x + 0.5 * e.labelMargin, at(t, e);
581}, Rt = function(t, e, i) {
582 const o = t.append("g"), n = it();
583 n.x = e.x, n.y = e.y, n.fill = e.fill, n.width = i.width * e.taskCount + // width of the tasks
584 i.diagramMarginX * (e.taskCount - 1), n.height = i.height, n.class = "journey-section section-type-" + e.num, n.rx = 3, n.ry = 3, U(o, n), lt(i)(
585 e.text,
586 o,
587 n.x,
588 n.y,
589 n.width,
590 n.height,
591 { class: "journey-section section-type-" + e.num },
592 i,
593 e.colour
594 );
595};
596let et = -1;
597const Nt = function(t, e, i) {
598 const o = e.x + i.width / 2, n = t.append("g");
599 et++;
600 const h = 300 + 5 * 30;
601 n.append("line").attr("id", "task" + et).attr("x1", o).attr("y1", e.y).attr("x2", o).attr("y2", h).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"), Ft(n, {
602 cx: o,
603 cy: 300 + (5 - e.score) * 30,
604 score: e.score
605 });
606 const c = it();
607 c.x = e.x, c.y = e.y, c.fill = e.fill, c.width = i.width, c.height = i.height, c.class = "task task-type-" + e.num, c.rx = 3, c.ry = 3, U(n, c);
608 let d = e.x + 14;
609 e.people.forEach((y) => {
610 const m = e.actors[y].color, g = {
611 cx: d,
612 cy: e.y,
613 r: 7,
614 fill: m,
615 stroke: "#000",
616 title: y,
617 pos: e.actors[y].position
618 };
619 rt(n, g), d += 10;
620 }), lt(i)(
621 e.task,
622 n,
623 c.x,
624 c.y,
625 c.width,
626 c.height,
627 { class: "task" },
628 i,
629 e.colour
630 );
631}, Bt = function(t, e) {
632 vt(t, e);
633}, lt = function() {
634 function t(n, h, c, d, y, m, g, p) {
635 const s = h.append("text").attr("x", c + y / 2).attr("y", d + m / 2 + 5).style("font-color", p).style("text-anchor", "middle").text(n);
636 o(s, g);
637 }
638 function e(n, h, c, d, y, m, g, p, s) {
639 const { taskFontSize: r, taskFontFamily: a } = p, u = n.split(/<br\s*\/?>/gi);
640 for (let f = 0; f < u.length; f++) {
641 const l = f * r - r * (u.length - 1) / 2, w = h.append("text").attr("x", c + y / 2).attr("y", d).attr("fill", s).style("text-anchor", "middle").style("font-size", r).style("font-family", a);
642 w.append("tspan").attr("x", c + y / 2).attr("dy", l).text(u[f]), w.attr("y", d + m / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"), o(w, g);
643 }
644 }
645 function i(n, h, c, d, y, m, g, p) {
646 const s = h.append("switch"), a = s.append("foreignObject").attr("x", c).attr("y", d).attr("width", y).attr("height", m).attr("position", "fixed").append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
647 a.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(n), e(n, s, c, d, y, m, g, p), o(a, g);
648 }
649 function o(n, h) {
650 for (const c in h)
651 c in h && n.attr(c, h[c]);
652 }
653 return function(n) {
654 return n.textPlacement === "fo" ? i : n.textPlacement === "old" ? t : e;
655 };
656}(), jt = function(t) {
657 t.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z");
658}, L = {
659 drawRect: U,
660 drawCircle: rt,
661 drawSection: Rt,
662 drawText: at,
663 drawLabel: Lt,
664 drawTask: Nt,
665 drawBackgroundRect: Bt,
666 initGraphics: jt
667}, zt = function(t) {
668 Object.keys(t).forEach(function(i) {
669 j[i] = t[i];
670 });
671}, M = {};
672function Yt(t) {
673 const e = C().journey;
674 let i = 60;
675 Object.keys(M).forEach((o) => {
676 const n = M[o].color, h = {
677 cx: 20,
678 cy: i,
679 r: 7,
680 fill: n,
681 stroke: "#000",
682 pos: M[o].position
683 };
684 L.drawCircle(t, h);
685 const c = {
686 x: 40,
687 y: i + 7,
688 fill: "#666",
689 text: o,
690 textMargin: e.boxTextMargin | 5
691 };
692 L.drawText(t, c), i += 20;
693 });
694}
695const j = C().journey, P = j.leftMargin, Ot = function(t, e, i, o) {
696 const n = C().journey, h = C().securityLevel;
697 let c;
698 h === "sandbox" && (c = W("#i" + e));
699 const d = h === "sandbox" ? W(c.nodes()[0].contentDocument.body) : W("body");
700 v.init();
701 const y = d.select("#" + e);
702 L.initGraphics(y);
703 const m = o.db.getTasks(), g = o.db.getDiagramTitle(), p = o.db.getActors();
704 for (const l in M)
705 delete M[l];
706 let s = 0;
707 p.forEach((l) => {
708 M[l] = {
709 color: n.actorColours[s % n.actorColours.length],
710 position: s
711 }, s++;
712 }), Yt(y), v.insert(0, 0, P, Object.keys(M).length * 50), qt(y, m, 0);
713 const r = v.getBounds();
714 g && y.append("text").text(g).attr("x", P).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25);
715 const a = r.stopy - r.starty + 2 * n.diagramMarginY, u = P + r.stopx + 2 * n.diagramMarginX;
716 kt(y, a, u, n.useMaxWidth), y.append("line").attr("x1", P).attr("y1", n.height * 4).attr("x2", u - P - 4).attr("y2", n.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)");
717 const f = g ? 70 : 0;
718 y.attr("viewBox", `${r.startx} -25 ${u} ${a + f}`), y.attr("preserveAspectRatio", "xMinYMin meet"), y.attr("height", a + f + 25);
719}, v = {
720 data: {
721 startx: void 0,
722 stopx: void 0,
723 starty: void 0,
724 stopy: void 0
725 },
726 verticalPos: 0,
727 sequenceItems: [],
728 init: function() {
729 this.sequenceItems = [], this.data = {
730 startx: void 0,
731 stopx: void 0,
732 starty: void 0,
733 stopy: void 0
734 }, this.verticalPos = 0;
735 },
736 updateVal: function(t, e, i, o) {
737 t[e] === void 0 ? t[e] = i : t[e] = o(i, t[e]);
738 },
739 updateBounds: function(t, e, i, o) {
740 const n = C().journey, h = this;
741 let c = 0;
742 function d(y) {
743 return function(g) {
744 c++;
745 const p = h.sequenceItems.length - c + 1;
746 h.updateVal(g, "starty", e - p * n.boxMargin, Math.min), h.updateVal(g, "stopy", o + p * n.boxMargin, Math.max), h.updateVal(v.data, "startx", t - p * n.boxMargin, Math.min), h.updateVal(v.data, "stopx", i + p * n.boxMargin, Math.max), y !== "activation" && (h.updateVal(g, "startx", t - p * n.boxMargin, Math.min), h.updateVal(g, "stopx", i + p * n.boxMargin, Math.max), h.updateVal(v.data, "starty", e - p * n.boxMargin, Math.min), h.updateVal(v.data, "stopy", o + p * n.boxMargin, Math.max));
747 };
748 }
749 this.sequenceItems.forEach(d());
750 },
751 insert: function(t, e, i, o) {
752 const n = Math.min(t, i), h = Math.max(t, i), c = Math.min(e, o), d = Math.max(e, o);
753 this.updateVal(v.data, "startx", n, Math.min), this.updateVal(v.data, "starty", c, Math.min), this.updateVal(v.data, "stopx", h, Math.max), this.updateVal(v.data, "stopy", d, Math.max), this.updateBounds(n, c, h, d);
754 },
755 bumpVerticalPos: function(t) {
756 this.verticalPos = this.verticalPos + t, this.data.stopy = this.verticalPos;
757 },
758 getVerticalPos: function() {
759 return this.verticalPos;
760 },
761 getBounds: function() {
762 return this.data;
763 }
764}, X = j.sectionFills, st = j.sectionColours, qt = function(t, e, i) {
765 const o = C().journey;
766 let n = "";
767 const h = o.height * 2 + o.diagramMarginY, c = i + h;
768 let d = 0, y = "#CCC", m = "black", g = 0;
769 for (const [p, s] of e.entries()) {
770 if (n !== s.section) {
771 y = X[d % X.length], g = d % X.length, m = st[d % st.length];
772 let a = 0;
773 const u = s.section;
774 for (let l = p; l < e.length && e[l].section == u; l++)
775 a = a + 1;
776 const f = {
777 x: p * o.taskMargin + p * o.width + P,
778 y: 50,
779 text: s.section,
780 fill: y,
781 num: g,
782 colour: m,
783 taskCount: a
784 };
785 L.drawSection(t, f, o), n = s.section, d++;
786 }
787 const r = s.people.reduce((a, u) => (M[u] && (a[u] = M[u]), a), {});
788 s.x = p * o.taskMargin + p * o.width + P, s.y = c, s.width = o.diagramMarginX, s.height = o.diagramMarginY, s.colour = m, s.fill = y, s.num = g, s.actors = r, L.drawTask(t, s, o), v.insert(s.x, s.y, s.x + s.width + o.taskMargin, 300 + 5 * 30);
789 }
790}, nt = {
791 setConf: zt,
792 draw: Ot
793}, Ut = {
794 parser: wt,
795 db: tt,
796 renderer: nt,
797 styles: Vt,
798 init: (t) => {
799 nt.setConf(t.journey), tt.clear();
800 }
801};
802export {
803 Ut as diagram
804};