ranui
Version:
A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.
1,120 lines (1,109 loc) • 42.6 kB
JavaScript
import { n as o, t as Ct } from "./chunk-Y2CYZVJY-0JxdZxki.js";
import { m as b, p as Z } from "./src-DtRLxcYO.js";
import { J as gt, a as Wt, b as ft, et as Pt, o as Bt, rt as Vt, tt as Ft, x as yt } from "./chunk-WYO6CB5R-DDHkKowO.js";
import { t as lt } from "./arc-DRPGof21.js";
import { p as zt } from "./chunk-ICXQ74PX-DR8rL-xF.js";
import { t as Ot } from "./chunk-VAUOI2AC-izt0o4id.js";
var tt = (function() {
var e = /* @__PURE__ */ o(function(i, l, u, d) {
for (u = u || {}, d = i.length; d--; u[i[d]] = l) ;
return u;
}, "o"), t = [
6,
11,
13,
14,
15,
17,
19,
20,
23,
24
], n = [1, 12], a = [1, 13], r = [1, 14], c = [1, 15], s = [1, 16], h = [1, 19], m = [1, 20], f = {
trace: /* @__PURE__ */ o(function() {
}, "trace"),
yy: {},
symbols_: {
error: 2,
start: 3,
timeline_header: 4,
document: 5,
EOF: 6,
timeline: 7,
timeline_lr: 8,
timeline_td: 9,
line: 10,
SPACE: 11,
statement: 12,
NEWLINE: 13,
title: 14,
acc_title: 15,
acc_title_value: 16,
acc_descr: 17,
acc_descr_value: 18,
acc_descr_multiline_value: 19,
section: 20,
period_statement: 21,
event_statement: 22,
period: 23,
event: 24,
$accept: 0,
$end: 1
},
terminals_: {
2: "error",
6: "EOF",
7: "timeline",
8: "timeline_lr",
9: "timeline_td",
11: "SPACE",
13: "NEWLINE",
14: "title",
15: "acc_title",
16: "acc_title_value",
17: "acc_descr",
18: "acc_descr_value",
19: "acc_descr_multiline_value",
20: "section",
23: "period",
24: "event"
},
productions_: [
0,
[3, 3],
[4, 1],
[4, 1],
[4, 1],
[5, 0],
[5, 2],
[10, 2],
[10, 1],
[10, 1],
[10, 1],
[12, 1],
[12, 2],
[12, 2],
[12, 1],
[12, 1],
[12, 1],
[12, 1],
[21, 1],
[22, 1]
],
performAction: /* @__PURE__ */ o(function(l, u, d, g, y, p, S) {
var k = p.length - 1;
switch (y) {
case 1:
return p[k - 1];
case 3:
g.setDirection("LR");
break;
case 4:
g.setDirection("TD");
break;
case 5:
this.$ = [];
break;
case 6:
p[k - 1].push(p[k]), this.$ = p[k - 1];
break;
case 7:
case 8:
this.$ = p[k];
break;
case 9:
case 10:
this.$ = [];
break;
case 11:
g.getCommonDb().setDiagramTitle(p[k].substr(6)), this.$ = p[k].substr(6);
break;
case 12:
this.$ = p[k].trim(), g.getCommonDb().setAccTitle(this.$);
break;
case 13:
case 14:
this.$ = p[k].trim(), g.getCommonDb().setAccDescription(this.$);
break;
case 15:
g.addSection(p[k].substr(8)), this.$ = p[k].substr(8);
break;
case 18:
g.addTask(p[k], 0, ""), this.$ = p[k];
break;
case 19:
g.addEvent(p[k].substr(2)), this.$ = p[k];
break;
}
}, "anonymous"),
table: [
{
3: 1,
4: 2,
7: [1, 3],
8: [1, 4],
9: [1, 5]
},
{ 1: [3] },
e(t, [2, 5], { 5: 6 }),
e(t, [2, 2]),
e(t, [2, 3]),
e(t, [2, 4]),
{
6: [1, 7],
10: 8,
11: [1, 9],
12: 10,
13: [1, 11],
14: n,
15: a,
17: r,
19: c,
20: s,
21: 17,
22: 18,
23: h,
24: m
},
e(t, [2, 10], { 1: [2, 1] }),
e(t, [2, 6]),
{
12: 21,
14: n,
15: a,
17: r,
19: c,
20: s,
21: 17,
22: 18,
23: h,
24: m
},
e(t, [2, 8]),
e(t, [2, 9]),
e(t, [2, 11]),
{ 16: [1, 22] },
{ 18: [1, 23] },
e(t, [2, 14]),
e(t, [2, 15]),
e(t, [2, 16]),
e(t, [2, 17]),
e(t, [2, 18]),
e(t, [2, 19]),
e(t, [2, 7]),
e(t, [2, 12]),
e(t, [2, 13])
],
defaultActions: {},
parseError: /* @__PURE__ */ o(function(l, u) {
if (u.recoverable) this.trace(l);
else {
var d = new Error(l);
throw d.hash = u, d;
}
}, "parseError"),
parse: /* @__PURE__ */ o(function(l) {
var u = this, d = [0], g = [], y = [null], p = [], S = this.table, k = "", P = 0, C = 0, B = 0, V = 2, I = 1, A = p.slice.call(arguments, 1), w = Object.create(this.lexer), L = { yy: {} };
for (var F in this.yy) Object.prototype.hasOwnProperty.call(this.yy, F) && (L.yy[F] = this.yy[F]);
w.setInput(l, L.yy), L.yy.lexer = w, L.yy.parser = this, typeof w.yylloc > "u" && (w.yylloc = {});
var T = w.yylloc;
p.push(T);
var v = w.options && w.options.ranges;
typeof L.yy.parseError == "function" ? this.parseError = L.yy.parseError : this.parseError = Object.getPrototypeOf(this).parseError;
function E(W) {
d.length = d.length - 2 * W, y.length = y.length - W, p.length = p.length - W;
}
o(E, "popStack");
function $() {
var W = g.pop() || w.lex() || I;
return typeof W != "number" && (W instanceof Array && (g = W, W = g.pop()), W = u.symbols_[W] || W), W;
}
o($, "lex");
for (var _, H, R, N, D, G = {}, K, z, ot, j; ; ) {
if (R = d[d.length - 1], this.defaultActions[R] ? N = this.defaultActions[R] : ((_ === null || typeof _ > "u") && (_ = $()), N = S[R] && S[R][_]), typeof N > "u" || !N.length || !N[0]) {
var Y = "";
j = [];
for (K in S[R]) this.terminals_[K] && K > V && j.push("'" + this.terminals_[K] + "'");
w.showPosition ? Y = "Parse error on line " + (P + 1) + `:
` + w.showPosition() + `
Expecting ` + j.join(", ") + ", got '" + (this.terminals_[_] || _) + "'" : Y = "Parse error on line " + (P + 1) + ": Unexpected " + (_ == I ? "end of input" : "'" + (this.terminals_[_] || _) + "'"), this.parseError(Y, {
text: w.match,
token: this.terminals_[_] || _,
line: w.yylineno,
loc: T,
expected: j
});
}
if (N[0] instanceof Array && N.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + R + ", token: " + _);
switch (N[0]) {
case 1:
d.push(_), y.push(w.yytext), p.push(w.yylloc), d.push(N[1]), _ = null, H ? (_ = H, H = null) : (C = w.yyleng, k = w.yytext, P = w.yylineno, T = w.yylloc, B > 0 && B--);
break;
case 2:
if (z = this.productions_[N[1]][1], G.$ = y[y.length - z], G._$ = {
first_line: p[p.length - (z || 1)].first_line,
last_line: p[p.length - 1].last_line,
first_column: p[p.length - (z || 1)].first_column,
last_column: p[p.length - 1].last_column
}, v && (G._$.range = [p[p.length - (z || 1)].range[0], p[p.length - 1].range[1]]), D = this.performAction.apply(G, [
k,
C,
P,
L.yy,
N[1],
y,
p
].concat(A)), typeof D < "u") return D;
z && (d = d.slice(0, -1 * z * 2), y = y.slice(0, -1 * z), p = p.slice(0, -1 * z)), d.push(this.productions_[N[1]][0]), y.push(G.$), p.push(G._$), ot = S[d[d.length - 2]][d[d.length - 1]], d.push(ot);
break;
case 3:
return !0;
}
}
return !0;
}, "parse")
};
f.lexer = /* @__PURE__ */ (function() {
return {
EOF: 1,
parseError: /* @__PURE__ */ o(function(l, u) {
if (this.yy.parser) this.yy.parser.parseError(l, u);
else throw new Error(l);
}, "parseError"),
setInput: /* @__PURE__ */ o(function(i, l) {
return this.yy = l || this.yy || {}, this._input = i, this._more = this._backtrack = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
first_line: 1,
first_column: 0,
last_line: 1,
last_column: 0
}, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this;
}, "setInput"),
input: /* @__PURE__ */ o(function() {
var i = this._input[0];
return this.yytext += i, this.yyleng++, this.offset++, this.match += i, this.matched += i, i.match(/(?:\r\n?|\n).*/g) ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), i;
}, "input"),
unput: /* @__PURE__ */ o(function(i) {
var l = i.length, u = i.split(/(?:\r\n?|\n)/g);
this._input = i + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - l), this.offset -= l;
var d = this.match.split(/(?:\r\n?|\n)/g);
this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), u.length - 1 && (this.yylineno -= u.length - 1);
var g = this.yylloc.range;
return this.yylloc = {
first_line: this.yylloc.first_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.first_column,
last_column: u ? (u.length === d.length ? this.yylloc.first_column : 0) + d[d.length - u.length].length - u[0].length : this.yylloc.first_column - l
}, this.options.ranges && (this.yylloc.range = [g[0], g[0] + this.yyleng - l]), this.yyleng = this.yytext.length, this;
}, "unput"),
more: /* @__PURE__ */ o(function() {
return this._more = !0, this;
}, "more"),
reject: /* @__PURE__ */ o(function() {
if (this.options.backtrack_lexer) this._backtrack = !0;
else 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).
` + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
});
return this;
}, "reject"),
less: /* @__PURE__ */ o(function(i) {
this.unput(this.match.slice(i));
}, "less"),
pastInput: /* @__PURE__ */ o(function() {
var i = this.matched.substr(0, this.matched.length - this.match.length);
return (i.length > 20 ? "..." : "") + i.substr(-20).replace(/\n/g, "");
}, "pastInput"),
upcomingInput: /* @__PURE__ */ o(function() {
var i = this.match;
return i.length < 20 && (i += this._input.substr(0, 20 - i.length)), (i.substr(0, 20) + (i.length > 20 ? "..." : "")).replace(/\n/g, "");
}, "upcomingInput"),
showPosition: /* @__PURE__ */ o(function() {
var i = this.pastInput(), l = new Array(i.length + 1).join("-");
return i + this.upcomingInput() + `
` + l + "^";
}, "showPosition"),
test_match: /* @__PURE__ */ o(function(i, l) {
var u, d, g;
if (this.options.backtrack_lexer && (g = {
yylineno: this.yylineno,
yylloc: {
first_line: this.yylloc.first_line,
last_line: this.last_line,
first_column: this.yylloc.first_column,
last_column: this.yylloc.last_column
},
yytext: this.yytext,
match: this.match,
matches: this.matches,
matched: this.matched,
yyleng: this.yyleng,
offset: this.offset,
_more: this._more,
_input: this._input,
yy: this.yy,
conditionStack: this.conditionStack.slice(0),
done: this.done
}, this.options.ranges && (g.yylloc.range = this.yylloc.range.slice(0))), d = i[0].match(/(?:\r\n?|\n).*/g), d && (this.yylineno += d.length), this.yylloc = {
first_line: this.yylloc.last_line,
last_line: this.yylineno + 1,
first_column: this.yylloc.last_column,
last_column: d ? d[d.length - 1].length - d[d.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + i[0].length
}, this.yytext += i[0], this.match += i[0], this.matches = i, 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(i[0].length), this.matched += i[0], u = this.performAction.call(this, this.yy, this, l, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), u) return u;
if (this._backtrack) {
for (var y in g) this[y] = g[y];
return !1;
}
return !1;
}, "test_match"),
next: /* @__PURE__ */ o(function() {
if (this.done) return this.EOF;
this._input || (this.done = !0);
var i, l, u, d;
this._more || (this.yytext = "", this.match = "");
for (var g = this._currentRules(), y = 0; y < g.length; y++)
if (u = this._input.match(this.rules[g[y]]), u && (!l || u[0].length > l[0].length)) {
if (l = u, d = y, this.options.backtrack_lexer) {
if (i = this.test_match(u, g[y]), i !== !1) return i;
if (this._backtrack) {
l = !1;
continue;
} else return !1;
} else if (!this.options.flex) break;
}
return l ? (i = this.test_match(l, g[d]), i !== !1 ? i : !1) : this._input === "" ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + `. Unrecognized text.
` + this.showPosition(), {
text: "",
token: null,
line: this.yylineno
});
}, "next"),
lex: /* @__PURE__ */ o(function() {
var l = this.next();
return l || this.lex();
}, "lex"),
begin: /* @__PURE__ */ o(function(l) {
this.conditionStack.push(l);
}, "begin"),
popState: /* @__PURE__ */ o(function() {
return this.conditionStack.length - 1 > 0 ? this.conditionStack.pop() : this.conditionStack[0];
}, "popState"),
_currentRules: /* @__PURE__ */ o(function() {
return this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1] ? this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules : this.conditions.INITIAL.rules;
}, "_currentRules"),
topState: /* @__PURE__ */ o(function(l) {
return l = this.conditionStack.length - 1 - Math.abs(l || 0), l >= 0 ? this.conditionStack[l] : "INITIAL";
}, "topState"),
pushState: /* @__PURE__ */ o(function(l) {
this.begin(l);
}, "pushState"),
stateStackSize: /* @__PURE__ */ o(function() {
return this.conditionStack.length;
}, "stateStackSize"),
options: { "case-insensitive": !0 },
performAction: /* @__PURE__ */ o(function(l, u, d, g) {
switch (d) {
case 0:
break;
case 1:
break;
case 2:
return 13;
case 3:
break;
case 4:
break;
case 5:
return 8;
case 6:
return 9;
case 7:
return 7;
case 8:
return 14;
case 9:
return this.begin("acc_title"), 15;
case 10:
return this.popState(), "acc_title_value";
case 11:
return this.begin("acc_descr"), 17;
case 12:
return this.popState(), "acc_descr_value";
case 13:
this.begin("acc_descr_multiline");
break;
case 14:
this.popState();
break;
case 15:
return "acc_descr_multiline_value";
case 16:
return 20;
case 17:
return 24;
case 18:
return 23;
case 19:
return 6;
case 20:
return "INVALID";
}
}, "anonymous"),
rules: [
/^(?:%(?!\{)[^\n]*)/i,
/^(?:[^\}]%%[^\n]*)/i,
/^(?:[\n]+)/i,
/^(?:\s+)/i,
/^(?:#[^\n]*)/i,
/^(?:timeline[ \t]+LR\b)/i,
/^(?:timeline[ \t]+TD\b)/i,
/^(?:timeline\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,
/^(?::\s(?:[^:\n]|:(?!\s))+)/i,
/^(?:[^#:\n]+)/i,
/^(?:$)/i,
/^(?:.)/i
],
conditions: {
acc_descr_multiline: {
rules: [14, 15],
inclusive: !1
},
acc_descr: {
rules: [12],
inclusive: !1
},
acc_title: {
rules: [10],
inclusive: !1
},
INITIAL: {
rules: [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
11,
13,
16,
17,
18,
19,
20
],
inclusive: !0
}
}
};
})();
function x() {
this.yy = {};
}
return o(x, "Parser"), x.prototype = f, f.Parser = x, new x();
})();
tt.parser = tt;
var Gt = tt, mt = {};
Ct(mt, {
addEvent: () => $t,
addSection: () => wt,
addTask: () => Tt,
addTaskOrg: () => Nt,
clear: () => bt,
default: () => Dt,
getCommonDb: () => kt,
getDirection: () => _t,
getSections: () => St,
getTasks: () => Et,
setDirection: () => vt
});
var U = "", xt = 0, nt = "LR", rt = [], q = [], X = [], kt = /* @__PURE__ */ o(() => Bt, "getCommonDb"), bt = /* @__PURE__ */ o(function() {
rt.length = 0, q.length = 0, U = "", X.length = 0, nt = "LR", Wt();
}, "clear"), vt = /* @__PURE__ */ o(function(e) {
nt = e;
}, "setDirection"), _t = /* @__PURE__ */ o(function() {
return nt;
}, "getDirection"), wt = /* @__PURE__ */ o(function(e) {
U = e, rt.push(e);
}, "addSection"), St = /* @__PURE__ */ o(function() {
return rt;
}, "getSections"), Et = /* @__PURE__ */ o(function() {
let e = ct();
const t = 100;
let n = 0;
for (; !e && n < t; )
e = ct(), n++;
return q.push(...X), q;
}, "getTasks"), Tt = /* @__PURE__ */ o(function(e, t, n) {
const a = {
id: xt++,
section: U,
type: U,
task: e,
score: t || 0,
events: n ? [n] : []
};
X.push(a);
}, "addTask"), $t = /* @__PURE__ */ o(function(e) {
X.find((t) => t.id === xt - 1).events.push(e);
}, "addEvent"), Nt = /* @__PURE__ */ o(function(e) {
const t = {
section: U,
type: U,
description: e,
task: e,
classes: []
};
q.push(t);
}, "addTaskOrg"), ct = /* @__PURE__ */ o(function() {
const e = /* @__PURE__ */ o(function(n) {
return X[n].processed;
}, "compileTask");
let t = !0;
for (const [n, a] of X.entries())
e(n), t = t && a.processed;
return t;
}, "compileTasks"), Dt = {
clear: bt,
getCommonDb: kt,
getDirection: _t,
setDirection: vt,
addSection: wt,
getSections: St,
getTasks: Et,
addTask: Tt,
addTaskOrg: Nt,
addEvent: $t
}, It = 0, J = /* @__PURE__ */ o(function(e, t) {
const n = e.append("rect");
return n.attr("x", t.x), n.attr("y", t.y), n.attr("fill", t.fill), n.attr("stroke", t.stroke), n.attr("width", t.width), n.attr("height", t.height), n.attr("rx", t.rx), n.attr("ry", t.ry), t.class !== void 0 && n.attr("class", t.class), n;
}, "drawRect"), Kt = /* @__PURE__ */ o(function(e, t) {
const a = e.append("circle").attr("cx", t.cx).attr("cy", t.cy).attr("class", "face").attr("r", 15).attr("stroke-width", 2).attr("overflow", "visible"), r = e.append("g");
r.append("circle").attr("cx", t.cx - 15 / 3).attr("cy", t.cy - 15 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666"), r.append("circle").attr("cx", t.cx + 15 / 3).attr("cy", t.cy - 15 / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
function c(m) {
const f = lt().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(7.5).outerRadius(6.8181818181818175);
m.append("path").attr("class", "mouth").attr("d", f).attr("transform", "translate(" + t.cx + "," + (t.cy + 2) + ")");
}
o(c, "smile");
function s(m) {
const f = lt().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(7.5).outerRadius(6.8181818181818175);
m.append("path").attr("class", "mouth").attr("d", f).attr("transform", "translate(" + t.cx + "," + (t.cy + 7) + ")");
}
o(s, "sad");
function h(m) {
m.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", t.cx - 5).attr("y1", t.cy + 7).attr("x2", t.cx + 5).attr("y2", t.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666");
}
return o(h, "ambivalent"), t.score > 3 ? c(r) : t.score < 3 ? s(r) : h(r), a;
}, "drawFace"), Ut = /* @__PURE__ */ o(function(e, t) {
const n = e.append("circle");
return n.attr("cx", t.cx), n.attr("cy", t.cy), n.attr("class", "actor-" + t.pos), n.attr("fill", t.fill), n.attr("stroke", t.stroke), n.attr("r", t.r), n.class !== void 0 && n.attr("class", n.class), t.title !== void 0 && n.append("title").text(t.title), n;
}, "drawCircle"), Ht = /* @__PURE__ */ o(function(e, t) {
const n = t.text.replace(/<br\s*\/?>/gi, " "), a = e.append("text");
a.attr("x", t.x), a.attr("y", t.y), a.attr("class", "legend"), a.style("text-anchor", t.anchor), t.class !== void 0 && a.attr("class", t.class);
const r = a.append("tspan");
return r.attr("x", t.x + t.textMargin * 2), r.text(n), a;
}, "drawText"), Xt = /* @__PURE__ */ o(function(e, t) {
function n(r, c, s, h, m) {
return r + "," + c + " " + (r + s) + "," + c + " " + (r + s) + "," + (c + h - m) + " " + (r + s - m * 1.2) + "," + (c + h) + " " + r + "," + (c + h);
}
o(n, "genPoints");
const a = e.append("polygon");
a.attr("points", n(t.x, t.y, 50, 20, 7)), a.attr("class", "labelBox"), t.y = t.y + t.labelMargin, t.x = t.x + 0.5 * t.labelMargin, Ht(e, t);
}, "drawLabel"), Zt = /* @__PURE__ */ o(function(e, t, n) {
const a = e.append("g"), r = it();
r.x = t.x, r.y = t.y, r.fill = t.fill, r.width = n.width, r.height = n.height, r.class = "journey-section section-type-" + t.num, r.rx = 3, r.ry = 3, J(a, r), Lt(n)(t.text, a, r.x, r.y, r.width, r.height, { class: "journey-section section-type-" + t.num }, n, t.colour);
}, "drawSection"), et = -1, jt = /* @__PURE__ */ o(function(e, t, n, a) {
const r = t.x + n.width / 2, c = e.append("g");
et++, c.append("line").attr("id", a + "-task" + et).attr("x1", r).attr("y1", t.y).attr("x2", r).attr("y2", 450).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666"), Kt(c, {
cx: r,
cy: 300 + (5 - t.score) * 30,
score: t.score
});
const s = it();
s.x = t.x, s.y = t.y, s.fill = t.fill, s.width = n.width, s.height = n.height, s.class = "task task-type-" + t.num, s.rx = 3, s.ry = 3, J(c, s), Lt(n)(t.task, c, s.x, s.y, s.width, s.height, { class: "task" }, n, t.colour);
}, "drawTask"), qt = /* @__PURE__ */ o(function(e, t) {
J(e, {
x: t.startx,
y: t.starty,
width: t.stopx - t.startx,
height: t.stopy - t.starty,
fill: t.fill,
class: "rect"
}).lower();
}, "drawBackgroundRect"), Jt = /* @__PURE__ */ o(function() {
return {
x: 0,
y: 0,
fill: void 0,
"text-anchor": "start",
width: 100,
height: 100,
textMargin: 0,
rx: 0,
ry: 0
};
}, "getTextObj"), it = /* @__PURE__ */ o(function() {
return {
x: 0,
y: 0,
width: 100,
anchor: "start",
height: 100,
rx: 0,
ry: 0
};
}, "getNoteRect"), Lt = /* @__PURE__ */ (function() {
function e(r, c, s, h, m, f, x, i) {
a(c.append("text").attr("x", s + m / 2).attr("y", h + f / 2 + 5).style("font-color", i).style("text-anchor", "middle").text(r), x);
}
o(e, "byText");
function t(r, c, s, h, m, f, x, i, l) {
const { taskFontSize: u, taskFontFamily: d } = i, g = r.split(/<br\s*\/?>/gi);
for (let y = 0; y < g.length; y++) {
const p = y * u - u * (g.length - 1) / 2, S = c.append("text").attr("x", s + m / 2).attr("y", h).attr("fill", l).style("text-anchor", "middle").style("font-size", u).style("font-family", d);
S.append("tspan").attr("x", s + m / 2).attr("dy", p).text(g[y]), S.attr("y", h + f / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central"), a(S, x);
}
}
o(t, "byTspan");
function n(r, c, s, h, m, f, x, i) {
const l = c.append("switch"), u = l.append("foreignObject").attr("x", s).attr("y", h).attr("width", m).attr("height", f).attr("position", "fixed").append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
u.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(r), t(r, l, s, h, m, f, x, i), a(u, x);
}
o(n, "byFo");
function a(r, c) {
for (const s in c) s in c && r.attr(s, c[s]);
}
return o(a, "_setTextAttrs"), function(r) {
return r.textPlacement === "fo" ? n : r.textPlacement === "old" ? e : t;
};
})(), Qt = /* @__PURE__ */ o(function(e, t) {
It = 0, et = -1, e.append("defs").append("marker").attr("id", t + "-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");
}, "initGraphics");
function st(e, t) {
e.each(function() {
var n = Z(this), a = n.text().split(/(\s+|<br>)/).reverse(), r, c = [], s = 1.1, h = n.attr("y"), m = parseFloat(n.attr("dy")), f = n.text(null).append("tspan").attr("x", 0).attr("y", h).attr("dy", m + "em");
for (let x = 0; x < a.length; x++)
r = a[a.length - 1 - x], c.push(r), f.text(c.join(" ").trim()), (f.node().getComputedTextLength() > t || r === "<br>") && (c.pop(), f.text(c.join(" ").trim()), r === "<br>" ? c = [""] : c = [r], f = n.append("tspan").attr("x", 0).attr("y", h).attr("dy", s + "em").text(r));
});
}
o(st, "wrap");
var Yt = /* @__PURE__ */ o(function(e, t, n, a, r, c = !1) {
const { theme: s, look: h } = a, m = s?.includes("redux"), f = n % (a?.themeVariables?.THEME_COLOR_LIMIT ?? 12) - 1, x = e.append("g");
t.section = f, x.attr("class", (t.class ? t.class + " " : "") + "timeline-node " + ("section-" + f));
const i = x.append("g"), l = x.append("g"), u = l.append("text").text(t.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(st, t.width).node().getBBox(), d = a.fontSize?.replace ? a.fontSize.replace("px", "") : a.fontSize;
if (t.height = u.height + d * 1.1 * 0.5 + t.padding, t.height = Math.max(t.height, t.maxHeight), t.width = t.width + 2 * t.padding, l.attr("transform", "translate(" + t.width / 2 + ", " + t.padding / 2 + ")"), m && l.attr("transform", `translate(${t.width / 2}, ${c ? t.padding / 2 + 3 : t.padding})`), ee(i, t, f, r, a), h === "neo" && (x.attr("data-look", "neo"), m)) {
const g = s.includes("dark"), y = Z(e.node()?.ownerSVGElement ?? e.node()), p = y.attr("id") ?? "", S = p ? `${p}-drop-shadow` : "drop-shadow";
if (y.select(`#${S}`).empty()) {
const k = y.select("defs");
(k.empty() ? y.append("defs") : k).append("filter").attr("id", S).attr("height", "130%").attr("width", "130%").append("feDropShadow").attr("dx", "4").attr("dy", "4").attr("stdDeviation", 0).attr("flood-opacity", g ? "0.2" : "0.06").attr("flood-color", g ? "#FFFFFF" : "#000000");
}
}
return t;
}, "drawNode"), te = /* @__PURE__ */ o(function(e, t, n) {
const a = e.append("g"), r = a.append("text").text(t.descr).attr("dy", "1em").attr("alignment-baseline", "middle").attr("dominant-baseline", "middle").attr("text-anchor", "middle").call(st, t.width).node().getBBox(), c = n.fontSize?.replace ? n.fontSize.replace("px", "") : n.fontSize;
return a.remove(), r.height + c * 1.1 * 0.5 + t.padding;
}, "getVirtualNodeHeight"), ee = /* @__PURE__ */ o(function(e, t, n, a, r) {
const { theme: c } = r, s = c?.includes("redux") ? 0 : 5, h = 5, m = s > 0 ? `M0 ${t.height - h} v${-t.height + 2 * h} q0,-${s},${s},-${s} h${t.width - 2 * h} q${s},0,${s},${s} v${t.height - h} H0 Z` : `M0 ${t.height - h} v${-(t.height - h)} h${t.width} v${t.height} H0 Z`;
e.append("path").attr("id", a + "-node-" + It++).attr("class", "node-bkg node-" + t.type).attr("d", m), c?.includes("redux") || e.append("line").attr("class", "node-line-" + n).attr("x1", 0).attr("y1", t.height).attr("x2", t.width).attr("y2", t.height);
}, "defaultBkg"), M = {
drawRect: J,
drawCircle: Ut,
drawSection: Zt,
drawText: Ht,
drawLabel: Xt,
drawTask: jt,
drawBackgroundRect: qt,
getTextObj: Jt,
getNoteRect: it,
initGraphics: Qt,
drawNode: Yt,
getVirtualNodeHeight: te
}, ne = /* @__PURE__ */ o(function(e, t, n, a) {
const r = yt(), { look: c, theme: s, themeVariables: h } = r, { useGradient: m, gradientStart: f, gradientStop: x } = h, i = r.timeline?.leftMargin ?? 50;
b.debug("timeline", a.db);
const l = r.securityLevel;
let u;
l === "sandbox" && (u = Z("#i" + t));
const d = (l === "sandbox" ? Z(u.nodes()[0].contentDocument.body) : Z("body")).select("#" + t);
d.append("g");
const g = a.db.getTasks(), y = a.db.getCommonDb().getDiagramTitle();
b.debug("task", g), M.initGraphics(d, t);
const p = a.db.getSections();
b.debug("sections", p);
let S = 0, k = 0, P = 0, C = 0, B = 50 + i, V = 50;
C = 50;
let I = 0, A = !0;
p.forEach(function(T) {
const v = {
number: I,
descr: T,
section: I,
width: 150,
padding: 20,
maxHeight: S
}, E = M.getVirtualNodeHeight(d, v, r);
b.debug("sectionHeight before draw", E), S = Math.max(S, E + 20);
});
let w = 0, L = 0;
b.debug("tasks.length", g.length);
for (const [T, v] of g.entries()) {
const E = {
number: T,
descr: v,
section: v.section,
width: 150,
padding: 20,
maxHeight: k
}, $ = M.getVirtualNodeHeight(d, E, r);
b.debug("taskHeight before draw", $), k = Math.max(k, $ + 20), w = Math.max(w, v.events.length);
let _ = 0;
for (const H of v.events) {
const R = {
descr: H,
section: v.section,
number: v.section,
width: 150,
padding: 20,
maxHeight: 50
};
_ += M.getVirtualNodeHeight(d, R, r);
}
v.events.length > 0 && (_ += (v.events.length - 1) * 10), L = Math.max(L, _);
}
b.debug("maxSectionHeight before draw", S), b.debug("maxTaskHeight before draw", k), p && p.length > 0 ? p.forEach((T) => {
const v = g.filter((H) => H.section === T), E = {
number: I,
descr: T,
section: I,
width: 200 * Math.max(v.length, 1) - 50,
padding: 20,
maxHeight: S
};
b.debug("sectionNode", E);
const $ = d.append("g"), _ = M.drawNode($, E, I, r, t);
b.debug("sectionNode output", _), $.attr("transform", `translate(${B}, ${C})`), V += S + 50, v.length > 0 && ht(d, v, I, B, V, k, r, w, L, S, !1, t), B += 200 * Math.max(v.length, 1), V = C, I++;
}) : (A = !1, ht(d, g, I, B, V, k, r, w, L, S, !0, t));
const F = d.node().getBBox();
if (b.debug("bounds", F), y && d.append("text").text(y).attr("x", c === "neo" ? F.x * 2 + i : F.width / 2 - i).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20), P = A ? S + k + 150 : k + 100, d.append("g").attr("class", "lineWrapper").append("line").attr("x1", i).attr("y1", P).attr("x2", F.width + 3 * i).attr("y2", P).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", `url(#${t}-arrowhead)`), c === "neo" && m && s !== "neutral") {
const T = d.select("defs"), v = (T.empty() ? d.append("defs") : T).append("linearGradient").attr("id", d.attr("id") + "-gradient").attr("gradientUnits", "objectBoundingBox").attr("x1", "0%").attr("y1", "0%").attr("x2", "100%").attr("y2", "0%");
v.append("stop").attr("offset", "0%").attr("stop-color", f).attr("stop-opacity", 1), v.append("stop").attr("offset", "100%").attr("stop-color", x).attr("stop-opacity", 1);
}
gt(void 0, d, r.timeline?.padding ?? 50, r.timeline?.useMaxWidth ?? !1);
}, "draw"), ht = /* @__PURE__ */ o(function(e, t, n, a, r, c, s, h, m, f, x, i) {
for (const l of t) {
const u = {
descr: l.task,
section: n,
number: n,
width: 150,
padding: 20,
maxHeight: c
};
b.debug("taskNode", u);
const d = e.append("g").attr("class", "taskWrapper"), g = M.drawNode(d, u, n, s, i).height;
if (b.debug("taskHeight after draw", g), d.attr("transform", `translate(${a}, ${r})`), c = Math.max(c, g), l.events) {
const y = e.append("g").attr("class", "lineWrapper");
let p = c;
r += 100, p = p + re(e, l.events, n, a, r, s, i), r -= 100, y.append("line").attr("x1", a + 190 / 2).attr("y1", r + c).attr("x2", a + 190 / 2).attr("y2", r + c + 100 + m + 100).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", `url(#${i}-arrowhead)`).attr("stroke-dasharray", "5,5");
}
a = a + 200, x && !s.timeline?.disableMulticolor && n++;
}
r = r - 10;
}, "drawTasks"), re = /* @__PURE__ */ o(function(e, t, n, a, r, c, s) {
let h = 0;
const m = r;
r = r + 100;
for (const f of t) {
const x = {
descr: f,
section: n,
number: n,
width: 150,
padding: 20,
maxHeight: 50
};
b.debug("eventNode", x);
const i = e.append("g").attr("class", "eventWrapper"), l = M.drawNode(i, x, n, c, s, !0).height;
h = h + l, i.attr("transform", `translate(${a}, ${r})`), r = r + 10 + l;
}
return r = m, h;
}, "drawEvents"), ie = {
setConf: /* @__PURE__ */ o(() => {
}, "setConf"),
draw: ne
}, Q = 200, O = 5, se = Q + O * 2, at = Q + 100, ae = at + O * 2, Mt = 10, oe = 0, dt = 20, At = 20, ut = 30, Rt = 50, le = /* @__PURE__ */ o(function(e, t, n, a) {
const r = yt(), c = r.timeline?.leftMargin ?? 50;
b.debug("timeline", a.db);
const s = Ot(t);
s.append("g");
const h = a.db.getTasks(), m = a.db.getCommonDb().getDiagramTitle();
b.debug("task", h), M.initGraphics(s);
const f = a.db.getSections();
b.debug("sections", f);
let x = 0, i = 0;
const l = 50 + c;
let u = 50;
const d = u, g = l, y = se + At, p = ae + Rt, S = g + y;
let k = 0;
const P = f && f.length > 0, C = P ? S : l + y, B = Math.max(50, y + p - O * 2);
f.forEach(function(v) {
const E = {
number: k,
descr: v,
section: k,
width: B,
padding: O,
maxHeight: x
}, $ = M.getVirtualNodeHeight(s, E, r);
b.debug("sectionHeight before draw", $), x = Math.max(x, $);
});
let V = 0;
b.debug("tasks.length", h.length);
for (const [v, E] of h.entries()) {
const $ = {
number: v,
descr: E,
section: E.section,
width: Q,
padding: O,
maxHeight: i
}, _ = M.getVirtualNodeHeight(s, $, r);
b.debug("taskHeight before draw", _), i = Math.max(i, _);
let H = 0;
for (const R of E.events) {
const N = {
descr: R,
section: E.section,
number: E.section,
width: at,
padding: O,
maxHeight: 50
};
H += M.getVirtualNodeHeight(s, N, r);
}
E.events.length > 0 && (H += (E.events.length - 1) * Mt), V = Math.max(V, H) + oe;
}
b.debug("maxSectionHeight before draw", x), b.debug("maxTaskHeight before draw", i);
const I = Math.max(i, V) + ut;
P ? f.forEach((v) => {
const E = h.filter((K) => K.section === v), $ = {
number: k,
descr: v,
section: k,
width: B,
padding: O,
maxHeight: x
};
b.debug("sectionNode", $);
const _ = s.append("g"), H = M.drawNode(_, $, k, r);
b.debug("sectionNode output", H);
const R = C - y;
_.attr("transform", `translate(${R}, ${u})`);
const N = u + H.height + dt;
E.length > 0 && pt(s, E, k, C, N, i, r, I, !1);
const D = E.length, G = H.height + dt + I * Math.max(D, 1) - (D > 0 ? ut * 2 : 0);
u += G, k++;
}) : pt(s, h, k, C, u, i, r, I, !0);
let A = s.node()?.getBBox();
if (!A) throw new Error("bbox not found");
if (b.debug("bounds", A), m) {
if (s.append("text").text(m).attr("x", A.width / 2 - c).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 20), A = s.node()?.getBBox(), !A) throw new Error("bbox not found");
b.debug("bounds after title", A);
}
const [w] = zt(r.fontSize), L = (w ?? 16) * 2, F = (w ?? 16) * 0.5 + 20, T = s.append("g").attr("class", "lineWrapper");
T.append("line").attr("x1", C).attr("y1", d - L).attr("x2", C).attr("y2", A.y + A.height + F).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)"), T.lower(), gt(void 0, s, r.timeline?.padding ?? 50, r.timeline?.useMaxWidth ?? !1);
}, "draw"), pt = /* @__PURE__ */ o(function(e, t, n, a, r, c, s, h, m) {
for (const f of t) {
const x = {
descr: f.task,
section: n,
number: n,
width: Q,
padding: O,
maxHeight: c
};
b.debug("taskNode", x);
const i = e.append("g").attr("class", "taskWrapper"), l = M.drawNode(i, x, n, s), u = l.height;
b.debug("taskHeight after draw", u);
const d = a - At - l.width;
if (i.attr("transform", `translate(${d}, ${r})`), c = Math.max(c, u), f.events && f.events.length > 0) {
const g = r, y = a + Rt;
ce(e, f.events, n, a, y, g, s);
}
r = r + h, m && !s.timeline?.disableMulticolor && n++;
}
}, "drawTasks"), ce = /* @__PURE__ */ o(function(e, t, n, a, r, c, s) {
let h = c;
for (const m of t) {
const f = {
descr: m,
section: n,
number: n,
width: at,
padding: O,
maxHeight: 0
};
b.debug("eventNode", f);
const x = e.append("g").attr("class", "eventWrapper"), i = M.drawNode(x, f, n, s).height;
x.attr("transform", `translate(${r}, ${h})`);
const l = e.append("g").attr("class", "lineWrapper"), u = h + i / 2;
l.append("line").attr("x1", a).attr("y1", u).attr("x2", r).attr("y2", u).attr("stroke-width", 2).attr("stroke", "black").attr("marker-end", "url(#arrowhead)").attr("stroke-dasharray", "5,5"), h = h + i + Mt;
}
return h - c;
}, "drawEvents"), he = {
setConf: /* @__PURE__ */ o(() => {
}, "setConf"),
draw: le
}, de = /* @__PURE__ */ o((e) => {
const { theme: t } = ft(), n = t?.includes("dark"), a = t?.includes("color"), r = e.svgId?.replace(/^#/, "") ?? "", c = r ? `url(#${r}-drop-shadow)` : e.dropShadow ?? "none";
let s = "";
for (let h = 0; h < e.THEME_COLOR_LIMIT; h++) {
const m = `${17 - 3 * h}`, f = a ? e.borderColorArray[h] : e.mainBkg, x = a ? e.borderColorArray[h] : e.nodeBorder;
s += `
.section-${h - 1} rect,
.section-${h - 1} path,
.section-${h - 1} circle {
fill: ${n && a ? e.mainBkg : f};
stroke: ${x};
stroke-width: ${e.strokeWidth};
filter: ${c};
}
.section-${h - 1} text {
fill: ${e.nodeBorder};
font-weight: ${e.fontWeight}
}
.node-icon-${h - 1} {
font-size: 40px;
color: ${e["cScaleLabel" + h]};
}
.section-edge-${h - 1} {
stroke: ${e["cScale" + h]};
}
.edge-depth-${h - 1} {
stroke-width: ${m};
}
.section-${h - 1} line {
stroke: ${e["cScaleInv" + h]};
stroke-width: 3;
}
.lineWrapper line {
stroke: ${e.nodeBorder};
stroke-width:${e.strokeWidth}
}
.disabled,
.disabled circle,
.disabled text {
fill: ${e.tertiaryColor ?? "lightgray"};
}
.disabled text {
fill: ${e.clusterBorder ?? "#efefef"};
}
`;
}
return s;
}, "genReduxSections"), ue = /* @__PURE__ */ o((e) => {
let t = "";
for (let n = 0; n < e.THEME_COLOR_LIMIT; n++)
e["lineColor" + n] = e["lineColor" + n] || e["cScaleInv" + n], Vt(e["lineColor" + n]) ? e["lineColor" + n] = Ft(e["lineColor" + n], 20) : e["lineColor" + n] = Pt(e["lineColor" + n], 20);
for (let n = 0; n < e.THEME_COLOR_LIMIT; n++) {
const a = "" + (17 - 3 * n);
t += `
.section-${n - 1} rect, .section-${n - 1} path, .section-${n - 1} circle, .section-${n - 1} path {
fill: ${e["cScale" + n]};
}
.section-${n - 1} text {
fill: ${e["cScaleLabel" + n]};
}
.node-icon-${n - 1} {
font-size: 40px;
color: ${e["cScaleLabel" + n]};
}
.section-edge-${n - 1}{
stroke: ${e["cScale" + n]};
}
.edge-depth-${n - 1}{
stroke-width: ${a};
}
.section-${n - 1} line {
stroke: ${e["cScaleInv" + n]} ;
stroke-width: 3;
}
.lineWrapper line{
stroke: ${e["cScaleLabel" + n]} ;
}
.disabled, .disabled circle, .disabled text {
fill: ${e.tertiaryColor ?? "lightgray"};
}
.disabled text {
fill: ${e.clusterBorder ?? "#efefef"};
}
`;
}
return t;
}, "genSections"), ke = {
db: mt,
renderer: {
setConf: /* @__PURE__ */ o(() => {
}, "setConf"),
draw: /* @__PURE__ */ o((e, t, n, a) => (a?.db?.getDirection?.() ?? "LR") === "TD" ? he.draw(e, t, n, a) : ie.draw(e, t, n, a), "draw")
},
parser: Gt,
styles: /* @__PURE__ */ o((e) => {
const { theme: t } = ft(), n = t?.includes("redux"), a = t === "neutral", r = e.svgId?.replace(/^#/, "") ?? "";
let c = "";
if (e.useGradient && r && e.THEME_COLOR_LIMIT && !a) for (let s = 0; s < e.THEME_COLOR_LIMIT; s++) c += `
.section-${s - 1}[data-look="neo"] rect,
.section-${s - 1}[data-look="neo"] path,
.section-${s - 1}[data-look="neo"] circle {
fill: ${e.mainBkg};
stroke: url(#${r}-gradient);
stroke-width: 2;
}
.section-${s - 1}[data-look="neo"] line {
stroke: url(#${r}-gradient);
stroke-width: 2;
}`;
return `
.edge {
stroke-width: 3;
}
${n ? de(e) : ue(e)}
${c}
.section-root rect, .section-root path, .section-root circle {
fill: ${e.git0};
}
.section-root text {
fill: ${e.gitBranchLabel0};
}
.icon-container {
height:100%;
display: flex;
justify-content: center;
align-items: center;
}
.edge {
fill: none;
}
.eventWrapper {
filter: brightness(120%);
}
`;
}, "getStyles")
};
export {
ke as diagram
};