import { T as e, c as t, h as n, i as r } from "./chunk-GEFDOKGD-8e2771NL.js";
import { t as i } from "./clone-B2fVtDap.js";
import { t as a } from "./graphlib-DOjl69i0.js";
import { g as o, h as s, p as c } from "./src-DI0MZP4m.js";
import { D as l, L as u, a as d, b as f, c as p, nt as m, s as h, w as g, y as _ } from "./chunk-7R4GIKGN-C19ZEV_b.js";
import { t as v } from "./channel-CqxMgZ5t.js";
import { t as y } from "./line-DfLnhEwA.js";
import { n as b } from "./chunk-PU5JKC2W-CeOPBYeP.js";
import { t as x } from "./chunk-FMBD7UC4-D-Ronn4l.js";
import { n as S, t as C } from "./chunk-MX3YWQON-CVZUx3EI.js";
import { n as w, t as T } from "./chunk-YBOYWFTD-BAPGCoDq.js";
//#region node_modules/mermaid/dist/chunks/mermaid.core/blockDiagram-WCTKOSBZ.mjs
var E = (function() {
	var e = /* @__PURE__ */ s(function(e, t, n, r) {
		for (n ||= {}, r = e.length; r--; n[e[r]] = t);
		return n;
	}, "o"), t = [1, 15], n = [1, 7], r = [1, 13], i = [1, 14], a = [1, 19], o = [1, 16], c = [1, 17], l = [1, 18], u = [8, 30], d = [
		8,
		10,
		21,
		28,
		29,
		30,
		31,
		39,
		43,
		46
	], f = [1, 23], p = [1, 24], m = [
		8,
		10,
		15,
		16,
		21,
		28,
		29,
		30,
		31,
		39,
		43,
		46
	], h = [
		8,
		10,
		15,
		16,
		21,
		27,
		28,
		29,
		30,
		31,
		39,
		43,
		46
	], g = [1, 49], _ = {
		trace: /* @__PURE__ */ s(function() {}, "trace"),
		yy: {},
		symbols_: {
			error: 2,
			spaceLines: 3,
			SPACELINE: 4,
			NL: 5,
			separator: 6,
			SPACE: 7,
			EOF: 8,
			start: 9,
			BLOCK_DIAGRAM_KEY: 10,
			document: 11,
			stop: 12,
			statement: 13,
			link: 14,
			LINK: 15,
			START_LINK: 16,
			LINK_LABEL: 17,
			STR: 18,
			nodeStatement: 19,
			columnsStatement: 20,
			SPACE_BLOCK: 21,
			blockStatement: 22,
			classDefStatement: 23,
			cssClassStatement: 24,
			styleStatement: 25,
			node: 26,
			SIZE: 27,
			COLUMNS: 28,
			"id-block": 29,
			end: 30,
			NODE_ID: 31,
			nodeShapeNLabel: 32,
			dirList: 33,
			DIR: 34,
			NODE_DSTART: 35,
			NODE_DEND: 36,
			BLOCK_ARROW_START: 37,
			BLOCK_ARROW_END: 38,
			classDef: 39,
			CLASSDEF_ID: 40,
			CLASSDEF_STYLEOPTS: 41,
			DEFAULT: 42,
			class: 43,
			CLASSENTITY_IDS: 44,
			STYLECLASS: 45,
			style: 46,
			STYLE_ENTITY_IDS: 47,
			STYLE_DEFINITION_DATA: 48,
			$accept: 0,
			$end: 1
		},
		terminals_: {
			2: "error",
			4: "SPACELINE",
			5: "NL",
			7: "SPACE",
			8: "EOF",
			10: "BLOCK_DIAGRAM_KEY",
			15: "LINK",
			16: "START_LINK",
			17: "LINK_LABEL",
			18: "STR",
			21: "SPACE_BLOCK",
			27: "SIZE",
			28: "COLUMNS",
			29: "id-block",
			30: "end",
			31: "NODE_ID",
			34: "DIR",
			35: "NODE_DSTART",
			36: "NODE_DEND",
			37: "BLOCK_ARROW_START",
			38: "BLOCK_ARROW_END",
			39: "classDef",
			40: "CLASSDEF_ID",
			41: "CLASSDEF_STYLEOPTS",
			42: "DEFAULT",
			43: "class",
			44: "CLASSENTITY_IDS",
			45: "STYLECLASS",
			46: "style",
			47: "STYLE_ENTITY_IDS",
			48: "STYLE_DEFINITION_DATA"
		},
		productions_: [
			0,
			[3, 1],
			[3, 2],
			[3, 2],
			[6, 1],
			[6, 1],
			[6, 1],
			[9, 3],
			[12, 1],
			[12, 1],
			[12, 2],
			[12, 2],
			[11, 1],
			[11, 2],
			[14, 1],
			[14, 4],
			[13, 1],
			[13, 1],
			[13, 1],
			[13, 1],
			[13, 1],
			[13, 1],
			[13, 1],
			[19, 3],
			[19, 2],
			[19, 1],
			[20, 1],
			[22, 4],
			[22, 3],
			[26, 1],
			[26, 2],
			[33, 1],
			[33, 2],
			[32, 3],
			[32, 4],
			[23, 3],
			[23, 3],
			[24, 3],
			[25, 3]
		],
		performAction: /* @__PURE__ */ s(function(e, t, n, r, i, a, o) {
			var s = a.length - 1;
			switch (i) {
				case 4:
					r.getLogger().debug("Rule: separator (NL) ");
					break;
				case 5:
					r.getLogger().debug("Rule: separator (Space) ");
					break;
				case 6:
					r.getLogger().debug("Rule: separator (EOF) ");
					break;
				case 7:
					r.getLogger().debug("Rule: hierarchy: ", a[s - 1]), r.setHierarchy(a[s - 1]);
					break;
				case 8:
					r.getLogger().debug("Stop NL ");
					break;
				case 9:
					r.getLogger().debug("Stop EOF ");
					break;
				case 10:
					r.getLogger().debug("Stop NL2 ");
					break;
				case 11:
					r.getLogger().debug("Stop EOF2 ");
					break;
				case 12:
					r.getLogger().debug("Rule: statement: ", a[s]), typeof a[s].length == "number" ? this.$ = a[s] : this.$ = [a[s]];
					break;
				case 13:
					r.getLogger().debug("Rule: statement #2: ", a[s - 1]), this.$ = [a[s - 1]].concat(a[s]);
					break;
				case 14:
					r.getLogger().debug("Rule: link: ", a[s], e), this.$ = {
						edgeTypeStr: a[s],
						label: ""
					};
					break;
				case 15:
					r.getLogger().debug("Rule: LABEL link: ", a[s - 3], a[s - 1], a[s]), this.$ = {
						edgeTypeStr: a[s],
						label: a[s - 1]
					};
					break;
				case 18:
					let t = parseInt(a[s]);
					this.$ = {
						id: r.generateId(),
						type: "space",
						label: "",
						width: t,
						children: []
					};
					break;
				case 23:
					r.getLogger().debug("Rule: (nodeStatement link node) ", a[s - 2], a[s - 1], a[s], " typestr: ", a[s - 1].edgeTypeStr);
					let n = r.edgeStrToEdgeData(a[s - 1].edgeTypeStr);
					this.$ = [
						{
							id: a[s - 2].id,
							label: a[s - 2].label,
							type: a[s - 2].type,
							directions: a[s - 2].directions
						},
						{
							id: a[s - 2].id + "-" + a[s].id,
							start: a[s - 2].id,
							end: a[s].id,
							label: a[s - 1].label,
							type: "edge",
							directions: a[s].directions,
							arrowTypeEnd: n,
							arrowTypeStart: "arrow_open"
						},
						{
							id: a[s].id,
							label: a[s].label,
							type: r.typeStr2Type(a[s].typeStr),
							directions: a[s].directions
						}
					];
					break;
				case 24:
					r.getLogger().debug("Rule: nodeStatement (abc88 node size) ", a[s - 1], a[s]), this.$ = {
						id: a[s - 1].id,
						label: a[s - 1].label,
						type: r.typeStr2Type(a[s - 1].typeStr),
						directions: a[s - 1].directions,
						widthInColumns: parseInt(a[s], 10)
					};
					break;
				case 25:
					r.getLogger().debug("Rule: nodeStatement (node) ", a[s]), this.$ = {
						id: a[s].id,
						label: a[s].label,
						type: r.typeStr2Type(a[s].typeStr),
						directions: a[s].directions,
						widthInColumns: 1
					};
					break;
				case 26:
					r.getLogger().debug("APA123", this ? this : "na"), r.getLogger().debug("COLUMNS: ", a[s]), this.$ = {
						type: "column-setting",
						columns: a[s] === "auto" ? -1 : parseInt(a[s])
					};
					break;
				case 27:
					r.getLogger().debug("Rule: id-block statement : ", a[s - 2], a[s - 1]), r.generateId(), this.$ = {
						...a[s - 2],
						type: "composite",
						children: a[s - 1]
					};
					break;
				case 28:
					r.getLogger().debug("Rule: blockStatement : ", a[s - 2], a[s - 1], a[s]), this.$ = {
						id: r.generateId(),
						type: "composite",
						label: "",
						children: a[s - 1]
					};
					break;
				case 29:
					r.getLogger().debug("Rule: node (NODE_ID separator): ", a[s]), this.$ = { id: a[s] };
					break;
				case 30:
					r.getLogger().debug("Rule: node (NODE_ID nodeShapeNLabel separator): ", a[s - 1], a[s]), this.$ = {
						id: a[s - 1],
						label: a[s].label,
						typeStr: a[s].typeStr,
						directions: a[s].directions
					};
					break;
				case 31:
					r.getLogger().debug("Rule: dirList: ", a[s]), this.$ = [a[s]];
					break;
				case 32:
					r.getLogger().debug("Rule: dirList: ", a[s - 1], a[s]), this.$ = [a[s - 1]].concat(a[s]);
					break;
				case 33:
					r.getLogger().debug("Rule: nodeShapeNLabel: ", a[s - 2], a[s - 1], a[s]), this.$ = {
						typeStr: a[s - 2] + a[s],
						label: a[s - 1]
					};
					break;
				case 34:
					r.getLogger().debug("Rule: BLOCK_ARROW nodeShapeNLabel: ", a[s - 3], a[s - 2], " #3:", a[s - 1], a[s]), this.$ = {
						typeStr: a[s - 3] + a[s],
						label: a[s - 2],
						directions: a[s - 1]
					};
					break;
				case 35:
				case 36:
					this.$ = {
						type: "classDef",
						id: a[s - 1].trim(),
						css: a[s].trim()
					};
					break;
				case 37:
					this.$ = {
						type: "applyClass",
						id: a[s - 1].trim(),
						styleClass: a[s].trim()
					};
					break;
				case 38:
					this.$ = {
						type: "applyStyles",
						id: a[s - 1].trim(),
						stylesStr: a[s].trim()
					};
					break;
			}
		}, "anonymous"),
		table: [
			{
				9: 1,
				10: [1, 2]
			},
			{ 1: [3] },
			{
				10: t,
				11: 3,
				13: 4,
				19: 5,
				20: 6,
				21: n,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: r,
				29: i,
				31: a,
				39: o,
				43: c,
				46: l
			},
			{ 8: [1, 20] },
			e(u, [2, 12], {
				13: 4,
				19: 5,
				20: 6,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				11: 21,
				10: t,
				21: n,
				28: r,
				29: i,
				31: a,
				39: o,
				43: c,
				46: l
			}),
			e(d, [2, 16], {
				14: 22,
				15: f,
				16: p
			}),
			e(d, [2, 17]),
			e(d, [2, 18]),
			e(d, [2, 19]),
			e(d, [2, 20]),
			e(d, [2, 21]),
			e(d, [2, 22]),
			e(m, [2, 25], { 27: [1, 25] }),
			e(d, [2, 26]),
			{
				19: 26,
				26: 12,
				31: a
			},
			{
				10: t,
				11: 27,
				13: 4,
				19: 5,
				20: 6,
				21: n,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: r,
				29: i,
				31: a,
				39: o,
				43: c,
				46: l
			},
			{
				40: [1, 28],
				42: [1, 29]
			},
			{ 44: [1, 30] },
			{ 47: [1, 31] },
			e(h, [2, 29], {
				32: 32,
				35: [1, 33],
				37: [1, 34]
			}),
			{ 1: [2, 7] },
			e(u, [2, 13]),
			{
				26: 35,
				31: a
			},
			{ 31: [2, 14] },
			{ 17: [1, 36] },
			e(m, [2, 24]),
			{
				10: t,
				11: 37,
				13: 4,
				14: 22,
				15: f,
				16: p,
				19: 5,
				20: 6,
				21: n,
				22: 8,
				23: 9,
				24: 10,
				25: 11,
				26: 12,
				28: r,
				29: i,
				31: a,
				39: o,
				43: c,
				46: l
			},
			{ 30: [1, 38] },
			{ 41: [1, 39] },
			{ 41: [1, 40] },
			{ 45: [1, 41] },
			{ 48: [1, 42] },
			e(h, [2, 30]),
			{ 18: [1, 43] },
			{ 18: [1, 44] },
			e(m, [2, 23]),
			{ 18: [1, 45] },
			{ 30: [1, 46] },
			e(d, [2, 28]),
			e(d, [2, 35]),
			e(d, [2, 36]),
			e(d, [2, 37]),
			e(d, [2, 38]),
			{ 36: [1, 47] },
			{
				33: 48,
				34: g
			},
			{ 15: [1, 50] },
			e(d, [2, 27]),
			e(h, [2, 33]),
			{ 38: [1, 51] },
			{
				33: 52,
				34: g,
				38: [2, 31]
			},
			{ 31: [2, 15] },
			e(h, [2, 34]),
			{ 38: [2, 32] }
		],
		defaultActions: {
			20: [2, 7],
			23: [2, 14],
			50: [2, 15],
			52: [2, 32]
		},
		parseError: /* @__PURE__ */ s(function(e, t) {
			if (t.recoverable) this.trace(e);
			else {
				var n = Error(e);
				throw n.hash = t, n;
			}
		}, "parseError"),
		parse: /* @__PURE__ */ s(function(e) {
			var t = this, n = [0], r = [], i = [null], a = [], o = this.table, c = "", l = 0, u = 0, d = 0, f = 2, p = 1, m = a.slice.call(arguments, 1), h = Object.create(this.lexer), g = { yy: {} };
			for (var _ in this.yy) Object.prototype.hasOwnProperty.call(this.yy, _) && (g.yy[_] = this.yy[_]);
			h.setInput(e, g.yy), g.yy.lexer = h, g.yy.parser = this, h.yylloc === void 0 && (h.yylloc = {});
			var v = h.yylloc;
			a.push(v);
			var y = h.options && h.options.ranges;
			typeof g.yy.parseError == "function" ? this.parseError = g.yy.parseError : this.parseError = Object.getPrototypeOf(this).parseError;
			function b(e) {
				n.length -= 2 * e, i.length -= e, a.length -= e;
			}
			s(b, "popStack");
			function x() {
				var e = r.pop() || h.lex() || p;
				return typeof e != "number" && (e instanceof Array && (r = e, e = r.pop()), e = t.symbols_[e] || e), e;
			}
			s(x, "lex");
			for (var S, C, w, T, E, D = {}, O, k, A, j;;) {
				if (w = n[n.length - 1], this.defaultActions[w] ? T = this.defaultActions[w] : (S ??= x(), T = o[w] && o[w][S]), T === void 0 || !T.length || !T[0]) {
					var M = "";
					for (O in j = [], o[w]) this.terminals_[O] && O > f && j.push("'" + this.terminals_[O] + "'");
					M = h.showPosition ? "Parse error on line " + (l + 1) + ":\n" + h.showPosition() + "\nExpecting " + j.join(", ") + ", got '" + (this.terminals_[S] || S) + "'" : "Parse error on line " + (l + 1) + ": Unexpected " + (S == p ? "end of input" : "'" + (this.terminals_[S] || S) + "'"), this.parseError(M, {
						text: h.match,
						token: this.terminals_[S] || S,
						line: h.yylineno,
						loc: v,
						expected: j
					});
				}
				if (T[0] instanceof Array && T.length > 1) throw Error("Parse Error: multiple actions possible at state: " + w + ", token: " + S);
				switch (T[0]) {
					case 1:
						n.push(S), i.push(h.yytext), a.push(h.yylloc), n.push(T[1]), S = null, C ? (S = C, C = null) : (u = h.yyleng, c = h.yytext, l = h.yylineno, v = h.yylloc, d > 0 && d--);
						break;
					case 2:
						if (k = this.productions_[T[1]][1], D.$ = i[i.length - k], D._$ = {
							first_line: a[a.length - (k || 1)].first_line,
							last_line: a[a.length - 1].last_line,
							first_column: a[a.length - (k || 1)].first_column,
							last_column: a[a.length - 1].last_column
						}, y && (D._$.range = [a[a.length - (k || 1)].range[0], a[a.length - 1].range[1]]), E = this.performAction.apply(D, [
							c,
							u,
							l,
							g.yy,
							T[1],
							i,
							a
						].concat(m)), E !== void 0) return E;
						k && (n = n.slice(0, -1 * k * 2), i = i.slice(0, -1 * k), a = a.slice(0, -1 * k)), n.push(this.productions_[T[1]][0]), i.push(D.$), a.push(D._$), A = o[n[n.length - 2]][n[n.length - 1]], n.push(A);
						break;
					case 3: return !0;
				}
			}
			return !0;
		}, "parse")
	};
	_.lexer = /* @__PURE__ */ (function() {
		return {
			EOF: 1,
			parseError: /* @__PURE__ */ s(function(e, t) {
				if (this.yy.parser) this.yy.parser.parseError(e, t);
				else throw Error(e);
			}, "parseError"),
			setInput: /* @__PURE__ */ s(function(e, t) {
				return this.yy = t || this.yy || {}, this._input = e, 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__ */ s(function() {
				var e = this._input[0];
				return this.yytext += e, this.yyleng++, this.offset++, this.match += e, this.matched += e, e.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), e;
			}, "input"),
			unput: /* @__PURE__ */ s(function(e) {
				var t = e.length, n = e.split(/(?:\r\n?|\n)/g);
				this._input = e + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - t), this.offset -= t;
				var r = 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), n.length - 1 && (this.yylineno -= n.length - 1);
				var i = 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: n ? (n.length === r.length ? this.yylloc.first_column : 0) + r[r.length - n.length].length - n[0].length : this.yylloc.first_column - t
				}, this.options.ranges && (this.yylloc.range = [i[0], i[0] + this.yyleng - t]), this.yyleng = this.yytext.length, this;
			}, "unput"),
			more: /* @__PURE__ */ s(function() {
				return this._more = !0, this;
			}, "more"),
			reject: /* @__PURE__ */ s(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).\n" + this.showPosition(), {
					text: "",
					token: null,
					line: this.yylineno
				});
				return this;
			}, "reject"),
			less: /* @__PURE__ */ s(function(e) {
				this.unput(this.match.slice(e));
			}, "less"),
			pastInput: /* @__PURE__ */ s(function() {
				var e = this.matched.substr(0, this.matched.length - this.match.length);
				return (e.length > 20 ? "..." : "") + e.substr(-20).replace(/\n/g, "");
			}, "pastInput"),
			upcomingInput: /* @__PURE__ */ s(function() {
				var e = this.match;
				return e.length < 20 && (e += this._input.substr(0, 20 - e.length)), (e.substr(0, 20) + (e.length > 20 ? "..." : "")).replace(/\n/g, "");
			}, "upcomingInput"),
			showPosition: /* @__PURE__ */ s(function() {
				var e = this.pastInput(), t = Array(e.length + 1).join("-");
				return e + this.upcomingInput() + "\n" + t + "^";
			}, "showPosition"),
			test_match: /* @__PURE__ */ s(function(e, t) {
				var n, r, i;
				if (this.options.backtrack_lexer && (i = {
					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 && (i.yylloc.range = this.yylloc.range.slice(0))), r = e[0].match(/(?:\r\n?|\n).*/g), r && (this.yylineno += r.length), this.yylloc = {
					first_line: this.yylloc.last_line,
					last_line: this.yylineno + 1,
					first_column: this.yylloc.last_column,
					last_column: r ? r[r.length - 1].length - r[r.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + e[0].length
				}, this.yytext += e[0], this.match += e[0], this.matches = e, 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(e[0].length), this.matched += e[0], n = this.performAction.call(this, this.yy, this, t, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), n) return n;
				if (this._backtrack) {
					for (var a in i) this[a] = i[a];
					return !1;
				}
				return !1;
			}, "test_match"),
			next: /* @__PURE__ */ s(function() {
				if (this.done) return this.EOF;
				this._input || (this.done = !0);
				var e, t, n, r;
				this._more || (this.yytext = "", this.match = "");
				for (var i = this._currentRules(), a = 0; a < i.length; a++) if (n = this._input.match(this.rules[i[a]]), n && (!t || n[0].length > t[0].length)) {
					if (t = n, r = a, this.options.backtrack_lexer) {
						if (e = this.test_match(n, i[a]), e !== !1) return e;
						if (this._backtrack) {
							t = !1;
							continue;
						} else return !1;
					} else if (!this.options.flex) break;
				}
				return t ? (e = this.test_match(t, i[r]), e === !1 ? !1 : e) : this._input === "" ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
					text: "",
					token: null,
					line: this.yylineno
				});
			}, "next"),
			lex: /* @__PURE__ */ s(function() {
				return this.next() || this.lex();
			}, "lex"),
			begin: /* @__PURE__ */ s(function(e) {
				this.conditionStack.push(e);
			}, "begin"),
			popState: /* @__PURE__ */ s(function() {
				return this.conditionStack.length - 1 > 0 ? this.conditionStack.pop() : this.conditionStack[0];
			}, "popState"),
			_currentRules: /* @__PURE__ */ s(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__ */ s(function(e) {
				return e = this.conditionStack.length - 1 - Math.abs(e || 0), e >= 0 ? this.conditionStack[e] : "INITIAL";
			}, "topState"),
			pushState: /* @__PURE__ */ s(function(e) {
				this.begin(e);
			}, "pushState"),
			stateStackSize: /* @__PURE__ */ s(function() {
				return this.conditionStack.length;
			}, "stateStackSize"),
			options: {},
			performAction: /* @__PURE__ */ s(function(e, t, n, r) {
				switch (n) {
					case 0: return e.getLogger().debug("Found block-beta"), 10;
					case 1: return e.getLogger().debug("Found id-block"), 29;
					case 2: return e.getLogger().debug("Found block"), 10;
					case 3:
						e.getLogger().debug(".", t.yytext);
						break;
					case 4:
						e.getLogger().debug("_", t.yytext);
						break;
					case 5: return 5;
					case 6: return t.yytext = -1, 28;
					case 7: return t.yytext = t.yytext.replace(/columns\s+/, ""), e.getLogger().debug("COLUMNS (LEX)", t.yytext), 28;
					case 8:
						this.pushState("md_string");
						break;
					case 9: return "MD_STR";
					case 10:
						this.popState();
						break;
					case 11:
						this.pushState("string");
						break;
					case 12:
						e.getLogger().debug("LEX: POPPING STR:", t.yytext), this.popState();
						break;
					case 13: return e.getLogger().debug("LEX: STR end:", t.yytext), "STR";
					case 14: return t.yytext = t.yytext.replace(/space\:/, ""), e.getLogger().debug("SPACE NUM (LEX)", t.yytext), 21;
					case 15: return t.yytext = "1", e.getLogger().debug("COLUMNS (LEX)", t.yytext), 21;
					case 16: return 42;
					case 17: return "LINKSTYLE";
					case 18: return "INTERPOLATE";
					case 19: return this.pushState("CLASSDEF"), 39;
					case 20: return this.popState(), this.pushState("CLASSDEFID"), "DEFAULT_CLASSDEF_ID";
					case 21: return this.popState(), this.pushState("CLASSDEFID"), 40;
					case 22: return this.popState(), 41;
					case 23: return this.pushState("CLASS"), 43;
					case 24: return this.popState(), this.pushState("CLASS_STYLE"), 44;
					case 25: return this.popState(), 45;
					case 26: return this.pushState("STYLE_STMNT"), 46;
					case 27: return this.popState(), this.pushState("STYLE_DEFINITION"), 47;
					case 28: return this.popState(), 48;
					case 29: return this.pushState("acc_title"), "acc_title";
					case 30: return this.popState(), "acc_title_value";
					case 31: return this.pushState("acc_descr"), "acc_descr";
					case 32: return this.popState(), "acc_descr_value";
					case 33:
						this.pushState("acc_descr_multiline");
						break;
					case 34:
						this.popState();
						break;
					case 35: return "acc_descr_multiline_value";
					case 36: return 30;
					case 37: return this.popState(), e.getLogger().debug("Lex: (("), "NODE_DEND";
					case 38: return this.popState(), e.getLogger().debug("Lex: (("), "NODE_DEND";
					case 39: return this.popState(), e.getLogger().debug("Lex: ))"), "NODE_DEND";
					case 40: return this.popState(), e.getLogger().debug("Lex: (("), "NODE_DEND";
					case 41: return this.popState(), e.getLogger().debug("Lex: (("), "NODE_DEND";
					case 42: return this.popState(), e.getLogger().debug("Lex: (-"), "NODE_DEND";
					case 43: return this.popState(), e.getLogger().debug("Lex: -)"), "NODE_DEND";
					case 44: return this.popState(), e.getLogger().debug("Lex: (("), "NODE_DEND";
					case 45: return this.popState(), e.getLogger().debug("Lex: ]]"), "NODE_DEND";
					case 46: return this.popState(), e.getLogger().debug("Lex: ("), "NODE_DEND";
					case 47: return this.popState(), e.getLogger().debug("Lex: ])"), "NODE_DEND";
					case 48: return this.popState(), e.getLogger().debug("Lex: /]"), "NODE_DEND";
					case 49: return this.popState(), e.getLogger().debug("Lex: /]"), "NODE_DEND";
					case 50: return this.popState(), e.getLogger().debug("Lex: )]"), "NODE_DEND";
					case 51: return this.popState(), e.getLogger().debug("Lex: )"), "NODE_DEND";
					case 52: return this.popState(), e.getLogger().debug("Lex: ]>"), "NODE_DEND";
					case 53: return this.popState(), e.getLogger().debug("Lex: ]"), "NODE_DEND";
					case 54: return e.getLogger().debug("Lexa: -)"), this.pushState("NODE"), 35;
					case 55: return e.getLogger().debug("Lexa: (-"), this.pushState("NODE"), 35;
					case 56: return e.getLogger().debug("Lexa: ))"), this.pushState("NODE"), 35;
					case 57: return e.getLogger().debug("Lexa: )"), this.pushState("NODE"), 35;
					case 58: return e.getLogger().debug("Lex: ((("), this.pushState("NODE"), 35;
					case 59: return e.getLogger().debug("Lexa: )"), this.pushState("NODE"), 35;
					case 60: return e.getLogger().debug("Lexa: )"), this.pushState("NODE"), 35;
					case 61: return e.getLogger().debug("Lexa: )"), this.pushState("NODE"), 35;
					case 62: return e.getLogger().debug("Lexc: >"), this.pushState("NODE"), 35;
					case 63: return e.getLogger().debug("Lexa: (["), this.pushState("NODE"), 35;
					case 64: return e.getLogger().debug("Lexa: )"), this.pushState("NODE"), 35;
					case 65: return this.pushState("NODE"), 35;
					case 66: return this.pushState("NODE"), 35;
					case 67: return this.pushState("NODE"), 35;
					case 68: return this.pushState("NODE"), 35;
					case 69: return this.pushState("NODE"), 35;
					case 70: return this.pushState("NODE"), 35;
					case 71: return this.pushState("NODE"), 35;
					case 72: return e.getLogger().debug("Lexa: ["), this.pushState("NODE"), 35;
					case 73: return this.pushState("BLOCK_ARROW"), e.getLogger().debug("LEX ARR START"), 37;
					case 74: return e.getLogger().debug("Lex: NODE_ID", t.yytext), 31;
					case 75: return e.getLogger().debug("Lex: EOF", t.yytext), 8;
					case 76:
						this.pushState("md_string");
						break;
					case 77:
						this.pushState("md_string");
						break;
					case 78: return "NODE_DESCR";
					case 79:
						this.popState();
						break;
					case 80:
						e.getLogger().debug("Lex: Starting string"), this.pushState("string");
						break;
					case 81:
						e.getLogger().debug("LEX ARR: Starting string"), this.pushState("string");
						break;
					case 82: return e.getLogger().debug("LEX: NODE_DESCR:", t.yytext), "NODE_DESCR";
					case 83:
						e.getLogger().debug("LEX POPPING"), this.popState();
						break;
					case 84:
						e.getLogger().debug("Lex: =>BAE"), this.pushState("ARROW_DIR");
						break;
					case 85: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (right): dir:", t.yytext), "DIR";
					case 86: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (left):", t.yytext), "DIR";
					case 87: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (x):", t.yytext), "DIR";
					case 88: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (y):", t.yytext), "DIR";
					case 89: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (up):", t.yytext), "DIR";
					case 90: return t.yytext = t.yytext.replace(/^,\s*/, ""), e.getLogger().debug("Lex (down):", t.yytext), "DIR";
					case 91: return t.yytext = "]>", e.getLogger().debug("Lex (ARROW_DIR end):", t.yytext), this.popState(), this.popState(), "BLOCK_ARROW_END";
					case 92: return e.getLogger().debug("Lex: LINK", "#" + t.yytext + "#"), 15;
					case 93: return e.getLogger().debug("Lex: LINK", t.yytext), 15;
					case 94: return e.getLogger().debug("Lex: LINK", t.yytext), 15;
					case 95: return e.getLogger().debug("Lex: LINK", t.yytext), 15;
					case 96: return e.getLogger().debug("Lex: START_LINK", t.yytext), this.pushState("LLABEL"), 16;
					case 97: return e.getLogger().debug("Lex: START_LINK", t.yytext), this.pushState("LLABEL"), 16;
					case 98: return e.getLogger().debug("Lex: START_LINK", t.yytext), this.pushState("LLABEL"), 16;
					case 99:
						this.pushState("md_string");
						break;
					case 100: return e.getLogger().debug("Lex: Starting string"), this.pushState("string"), "LINK_LABEL";
					case 101: return this.popState(), e.getLogger().debug("Lex: LINK", "#" + t.yytext + "#"), 15;
					case 102: return this.popState(), e.getLogger().debug("Lex: LINK", t.yytext), 15;
					case 103: return this.popState(), e.getLogger().debug("Lex: LINK", t.yytext), 15;
					case 104: return e.getLogger().debug("Lex: COLON", t.yytext), t.yytext = t.yytext.slice(1), 27;
				}
			}, "anonymous"),
			rules: [
				/^(?:block-beta\b)/,
				/^(?:block:)/,
				/^(?:block\b)/,
				/^(?:[\s]+)/,
				/^(?:[\n]+)/,
				/^(?:((\u000D\u000A)|(\u000A)))/,
				/^(?:columns\s+auto\b)/,
				/^(?:columns\s+[\d]+)/,
				/^(?:["][`])/,
				/^(?:[^`"]+)/,
				/^(?:[`]["])/,
				/^(?:["])/,
				/^(?:["])/,
				/^(?:[^"]*)/,
				/^(?:space[:]\d+)/,
				/^(?:space\b)/,
				/^(?:default\b)/,
				/^(?:linkStyle\b)/,
				/^(?:interpolate\b)/,
				/^(?:classDef\s+)/,
				/^(?:DEFAULT\s+)/,
				/^(?:\w+\s+)/,
				/^(?:[^\n]*)/,
				/^(?:class\s+)/,
				/^(?:(\w+)+((,\s*\w+)*))/,
				/^(?:[^\n]*)/,
				/^(?:style\s+)/,
				/^(?:(\w+)+((,\s*\w+)*))/,
				/^(?:[^\n]*)/,
				/^(?:accTitle\s*:\s*)/,
				/^(?:(?!\n||)*[^\n]*)/,
				/^(?:accDescr\s*:\s*)/,
				/^(?:(?!\n||)*[^\n]*)/,
				/^(?:accDescr\s*\{\s*)/,
				/^(?:[\}])/,
				/^(?:[^\}]*)/,
				/^(?:end\b\s*)/,
				/^(?:\(\(\()/,
				/^(?:\)\)\))/,
				/^(?:[\)]\))/,
				/^(?:\}\})/,
				/^(?:\})/,
				/^(?:\(-)/,
				/^(?:-\))/,
				/^(?:\(\()/,
				/^(?:\]\])/,
				/^(?:\()/,
				/^(?:\]\))/,
				/^(?:\\\])/,
				/^(?:\/\])/,
				/^(?:\)\])/,
				/^(?:[\)])/,
				/^(?:\]>)/,
				/^(?:[\]])/,
				/^(?:-\))/,
				/^(?:\(-)/,
				/^(?:\)\))/,
				/^(?:\))/,
				/^(?:\(\(\()/,
				/^(?:\(\()/,
				/^(?:\{\{)/,
				/^(?:\{)/,
				/^(?:>)/,
				/^(?:\(\[)/,
				/^(?:\()/,
				/^(?:\[\[)/,
				/^(?:\[\|)/,
				/^(?:\[\()/,
				/^(?:\)\)\))/,
				/^(?:\[\\)/,
				/^(?:\[\/)/,
				/^(?:\[\\)/,
				/^(?:\[)/,
				/^(?:<\[)/,
				/^(?:[^\(\[\n\-\)\{\}\s\<\>:]+)/,
				/^(?:$)/,
				/^(?:["][`])/,
				/^(?:["][`])/,
				/^(?:[^`"]+)/,
				/^(?:[`]["])/,
				/^(?:["])/,
				/^(?:["])/,
				/^(?:[^"]+)/,
				/^(?:["])/,
				/^(?:\]>\s*\()/,
				/^(?:,?\s*right\s*)/,
				/^(?:,?\s*left\s*)/,
				/^(?:,?\s*x\s*)/,
				/^(?:,?\s*y\s*)/,
				/^(?:,?\s*up\s*)/,
				/^(?:,?\s*down\s*)/,
				/^(?:\)\s*)/,
				/^(?:\s*[xo<]?--+[-xo>]\s*)/,
				/^(?:\s*[xo<]?==+[=xo>]\s*)/,
				/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,
				/^(?:\s*~~[\~]+\s*)/,
				/^(?:\s*[xo<]?--\s*)/,
				/^(?:\s*[xo<]?==\s*)/,
				/^(?:\s*[xo<]?-\.\s*)/,
				/^(?:["][`])/,
				/^(?:["])/,
				/^(?:\s*[xo<]?--+[-xo>]\s*)/,
				/^(?:\s*[xo<]?==+[=xo>]\s*)/,
				/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,
				/^(?::\d+)/
			],
			conditions: {
				STYLE_DEFINITION: {
					rules: [28],
					inclusive: !1
				},
				STYLE_STMNT: {
					rules: [27],
					inclusive: !1
				},
				CLASSDEFID: {
					rules: [22],
					inclusive: !1
				},
				CLASSDEF: {
					rules: [20, 21],
					inclusive: !1
				},
				CLASS_STYLE: {
					rules: [25],
					inclusive: !1
				},
				CLASS: {
					rules: [24],
					inclusive: !1
				},
				LLABEL: {
					rules: [
						99,
						100,
						101,
						102,
						103
					],
					inclusive: !1
				},
				ARROW_DIR: {
					rules: [
						85,
						86,
						87,
						88,
						89,
						90,
						91
					],
					inclusive: !1
				},
				BLOCK_ARROW: {
					rules: [
						76,
						81,
						84
					],
					inclusive: !1
				},
				NODE: {
					rules: [
						37,
						38,
						39,
						40,
						41,
						42,
						43,
						44,
						45,
						46,
						47,
						48,
						49,
						50,
						51,
						52,
						53,
						77,
						80
					],
					inclusive: !1
				},
				md_string: {
					rules: [
						9,
						10,
						78,
						79
					],
					inclusive: !1
				},
				space: {
					rules: [],
					inclusive: !1
				},
				string: {
					rules: [
						12,
						13,
						82,
						83
					],
					inclusive: !1
				},
				acc_descr_multiline: {
					rules: [34, 35],
					inclusive: !1
				},
				acc_descr: {
					rules: [32],
					inclusive: !1
				},
				acc_title: {
					rules: [30],
					inclusive: !1
				},
				INITIAL: {
					rules: [
						0,
						1,
						2,
						3,
						4,
						5,
						6,
						7,
						8,
						11,
						14,
						15,
						16,
						17,
						18,
						19,
						23,
						26,
						29,
						31,
						33,
						36,
						54,
						55,
						56,
						57,
						58,
						59,
						60,
						61,
						62,
						63,
						64,
						65,
						66,
						67,
						68,
						69,
						70,
						71,
						72,
						73,
						74,
						75,
						92,
						93,
						94,
						95,
						96,
						97,
						98,
						104
					],
					inclusive: !0
				}
			}
		};
	})();
	function v() {
		this.yy = {};
	}
	return s(v, "Parser"), v.prototype = _, _.Parser = v, new v();
})();
E.parser = E;
var D = E, O = /* @__PURE__ */ new Map(), k = [], A = /* @__PURE__ */ new Map(), j = "color", M = "fill", ee = "bgFill", te = ",", ne = f(), N = /* @__PURE__ */ new Map(), re = /* @__PURE__ */ s((e) => h.sanitizeText(e, ne), "sanitizeText"), ie = /* @__PURE__ */ s(function(e, t = "") {
	let n = N.get(e);
	n || (n = {
		id: e,
		styles: [],
		textStyles: []
	}, N.set(e, n)), t?.split(te).forEach((e) => {
		let t = e.replace(/([^;]*);/, "$1").trim();
		if (RegExp(j).exec(e)) {
			let e = t.replace(M, ee).replace(j, M);
			n.textStyles.push(e);
		}
		n.styles.push(t);
	});
}, "addStyleClass"), ae = /* @__PURE__ */ s(function(e, t = "") {
	let n = O.get(e);
	t != null && (n.styles = t.split(te));
}, "addStyle2Node"), oe = /* @__PURE__ */ s(function(e, t) {
	e.split(",").forEach(function(e) {
		let n = O.get(e);
		if (n === void 0) {
			let t = e.trim();
			n = {
				id: t,
				type: "na",
				children: []
			}, O.set(t, n);
		}
		n.classes ||= [], n.classes.push(t);
	});
}, "setCssClass"), se = /* @__PURE__ */ s((e, t) => {
	let n = e.flat(), r = [], a = n.find((e) => e?.type === "column-setting")?.columns ?? -1;
	for (let e of n) {
		if (typeof a == "number" && a > 0 && e.type !== "column-setting" && typeof e.widthInColumns == "number" && e.widthInColumns > a && o.warn(`Block ${e.id} width ${e.widthInColumns} exceeds configured column width ${a}`), e.label &&= re(e.label), e.type === "classDef") {
			ie(e.id, e.css);
			continue;
		}
		if (e.type === "applyClass") {
			oe(e.id, e?.styleClass ?? "");
			continue;
		}
		if (e.type === "applyStyles") {
			e?.stylesStr && ae(e.id, e?.stylesStr);
			continue;
		}
		if (e.type === "column-setting") t.columns = e.columns ?? -1;
		else if (e.type === "edge") {
			let t = (A.get(e.id) ?? 0) + 1;
			A.set(e.id, t), e.id = t + "-" + e.id, k.push(e);
		} else {
			e.label || (e.type === "composite" ? e.label = "" : e.label = e.id);
			let t = O.get(e.id);
			if (t === void 0 ? O.set(e.id, e) : (e.type !== "na" && (t.type = e.type), e.label !== e.id && (t.label = e.label)), e.children && se(e.children, e), e.type === "space") {
				let t = e.width ?? 1;
				for (let n = 0; n < t; n++) {
					let t = i(e);
					t.id = t.id + "-" + n, O.set(t.id, t), r.push(t);
				}
			} else t === void 0 && r.push(e);
		}
	}
	t.children = r;
}, "populateBlockDatabase"), P = [], F = {
	id: "root",
	type: "composite",
	children: [],
	columns: -1
}, ce = /* @__PURE__ */ s(() => {
	o.debug("Clear called"), d(), F = {
		id: "root",
		type: "composite",
		children: [],
		columns: -1
	}, O = /* @__PURE__ */ new Map([["root", F]]), P = [], N = /* @__PURE__ */ new Map(), k = [], A = /* @__PURE__ */ new Map();
}, "clear");
function le(e) {
	switch (o.debug("typeStr2Type", e), e) {
		case "[]": return "square";
		case "()": return o.debug("we have a round"), "round";
		case "(())": return "circle";
		case ">]": return "rect_left_inv_arrow";
		case "{}": return "diamond";
		case "{{}}": return "hexagon";
		case "([])": return "stadium";
		case "[[]]": return "subroutine";
		case "[()]": return "cylinder";
		case "((()))": return "doublecircle";
		case "[//]": return "lean_right";
		case "[\\\\]": return "lean_left";
		case "[/\\]": return "trapezoid";
		case "[\\/]": return "inv_trapezoid";
		case "<[]>": return "block_arrow";
		default: return "na";
	}
}
s(le, "typeStr2Type");
function ue(e) {
	switch (o.debug("typeStr2Type", e), e) {
		case "==": return "thick";
		default: return "normal";
	}
}
s(ue, "edgeTypeStr2Type");
function de(e) {
	switch (e.replace(/^[\s-]+|[\s-]+$/g, "")) {
		case "x": return "arrow_cross";
		case "o": return "arrow_circle";
		case ">": return "arrow_point";
		default: return "";
	}
}
s(de, "edgeStrToEdgeData");
var fe = 0, pe = {
	getConfig: /* @__PURE__ */ s(() => _().block, "getConfig"),
	typeStr2Type: le,
	edgeTypeStr2Type: ue,
	edgeStrToEdgeData: de,
	getLogger: /* @__PURE__ */ s(() => o, "getLogger"),
	getBlocksFlat: /* @__PURE__ */ s(() => [...O.values()], "getBlocksFlat"),
	getBlocks: /* @__PURE__ */ s(() => P || [], "getBlocks"),
	getEdges: /* @__PURE__ */ s(() => k, "getEdges"),
	setHierarchy: /* @__PURE__ */ s((e) => {
		F.children = e, se(e, F), P = F.children;
	}, "setHierarchy"),
	getBlock: /* @__PURE__ */ s((e) => O.get(e), "getBlock"),
	setBlock: /* @__PURE__ */ s((e) => {
		O.set(e.id, e);
	}, "setBlock"),
	getColumns: /* @__PURE__ */ s((e) => {
		let t = O.get(e);
		return t ? t.columns ? t.columns : t.children ? t.children.length : -1 : -1;
	}, "getColumns"),
	getClasses: /* @__PURE__ */ s(function() {
		return N;
	}, "getClasses"),
	clear: ce,
	generateId: /* @__PURE__ */ s(() => (fe++, "id-" + Math.random().toString(36).substr(2, 12) + "-" + fe), "generateId")
}, I = /* @__PURE__ */ s((e, t) => {
	let n = v;
	return m(n(e, "r"), n(e, "g"), n(e, "b"), t);
}, "fade"), me = /* @__PURE__ */ s((e) => `.label {
    font-family: ${e.fontFamily};
    color: ${e.nodeTextColor || e.textColor};
  }
  .cluster-label text {
    fill: ${e.titleColor};
  }
  .cluster-label span,p {
    color: ${e.titleColor};
  }



  .label text,span,p {
    fill: ${e.nodeTextColor || e.textColor};
    color: ${e.nodeTextColor || e.textColor};
  }

  .node rect,
  .node circle,
  .node ellipse,
  .node polygon,
  .node path {
    fill: ${e.mainBkg};
    stroke: ${e.nodeBorder};
    stroke-width: 1px;
  }
  .flowchart-label text {
    text-anchor: middle;
  }
  // .flowchart-label .text-outer-tspan {
  //   text-anchor: middle;
  // }
  // .flowchart-label .text-inner-tspan {
  //   text-anchor: start;
  // }

  .node .label {
    text-align: center;
  }
  .node.clickable {
    cursor: pointer;
  }

  .arrowheadPath {
    fill: ${e.arrowheadColor};
  }

  .edgePath .path {
    stroke: ${e.lineColor};
    stroke-width: 2.0px;
  }

  .flowchart-link {
    stroke: ${e.lineColor};
    fill: none;
  }

  .edgeLabel {
    background-color: ${e.edgeLabelBackground};
    /*
     * This is for backward compatibility with existing code that didn't
     * add a \`<p>\` around edge labels.
     *
     * TODO: We should probably remove this in a future release.
     */
    p {
      margin: 0;
      padding: 0;
      display: inline;
    }
    rect {
      opacity: 0.5;
      background-color: ${e.edgeLabelBackground};
      fill: ${e.edgeLabelBackground};
    }
    text-align: center;
  }

  /* For html labels only */
  .labelBkg {
    background-color: ${e.edgeLabelBackground};
  }

  .node .cluster {
    // fill: ${I(e.mainBkg, .5)};
    fill: ${I(e.clusterBkg, .5)};
    stroke: ${I(e.clusterBorder, .2)};
    box-shadow: rgba(50, 50, 93, 0.25) 0px 13px 27px -5px, rgba(0, 0, 0, 0.3) 0px 8px 16px -8px;
    stroke-width: 1px;
  }

  .cluster text {
    fill: ${e.titleColor};
  }

  .cluster span,p {
    color: ${e.titleColor};
  }
  /* .cluster div {
    color: ${e.titleColor};
  } */

  div.mermaidTooltip {
    position: absolute;
    text-align: center;
    max-width: 200px;
    padding: 2px;
    font-family: ${e.fontFamily};
    font-size: 12px;
    background: ${e.tertiaryColor};
    border: 1px solid ${e.border2};
    border-radius: 2px;
    pointer-events: none;
    z-index: 100;
  }

  .flowchartTitleText {
    text-anchor: middle;
    font-size: 18px;
    fill: ${e.textColor};
  }
  ${x()}
`, "getStyles"), he = /* @__PURE__ */ s((e, t, n, r) => {
	t.forEach((t) => {
		ge[t](e, n, r);
	});
}, "insertMarkers"), ge = {
	extension: /* @__PURE__ */ s((e, t, n) => {
		o.trace("Making markers for ", n), e.append("defs").append("marker").attr("id", n + "_" + t + "-extensionStart").attr("class", "marker extension " + t).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z"), e.append("defs").append("marker").attr("id", n + "_" + t + "-extensionEnd").attr("class", "marker extension " + t).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
	}, "extension"),
	composition: /* @__PURE__ */ s((e, t, n) => {
		e.append("defs").append("marker").attr("id", n + "_" + t + "-compositionStart").attr("class", "marker composition " + t).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"), e.append("defs").append("marker").attr("id", n + "_" + t + "-compositionEnd").attr("class", "marker composition " + t).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
	}, "composition"),
	aggregation: /* @__PURE__ */ s((e, t, n) => {
		e.append("defs").append("marker").attr("id", n + "_" + t + "-aggregationStart").attr("class", "marker aggregation " + t).attr("refX", 18).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z"), e.append("defs").append("marker").attr("id", n + "_" + t + "-aggregationEnd").attr("class", "marker aggregation " + t).attr("refX", 1).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
	}, "aggregation"),
	dependency: /* @__PURE__ */ s((e, t, n) => {
		e.append("defs").append("marker").attr("id", n + "_" + t + "-dependencyStart").attr("class", "marker dependency " + t).attr("refX", 6).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z"), e.append("defs").append("marker").attr("id", n + "_" + t + "-dependencyEnd").attr("class", "marker dependency " + t).attr("refX", 13).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
	}, "dependency"),
	lollipop: /* @__PURE__ */ s((e, t, n) => {
		e.append("defs").append("marker").attr("id", n + "_" + t + "-lollipopStart").attr("class", "marker lollipop " + t).attr("refX", 13).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6), e.append("defs").append("marker").attr("id", n + "_" + t + "-lollipopEnd").attr("class", "marker lollipop " + t).attr("refX", 1).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "transparent").attr("cx", 7).attr("cy", 7).attr("r", 6);
	}, "lollipop"),
	point: /* @__PURE__ */ s((e, t, n) => {
		e.append("marker").attr("id", n + "_" + t + "-pointEnd").attr("class", "marker " + t).attr("viewBox", "0 0 10 10").attr("refX", 6).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"), e.append("marker").attr("id", n + "_" + t + "-pointStart").attr("class", "marker " + t).attr("viewBox", "0 0 10 10").attr("refX", 4.5).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
	}, "point"),
	circle: /* @__PURE__ */ s((e, t, n) => {
		e.append("marker").attr("id", n + "_" + t + "-circleEnd").attr("class", "marker " + t).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0"), e.append("marker").attr("id", n + "_" + t + "-circleStart").attr("class", "marker " + t).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
	}, "circle"),
	cross: /* @__PURE__ */ s((e, t, n) => {
		e.append("marker").attr("id", n + "_" + t + "-crossEnd").attr("class", "marker cross " + t).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0"), e.append("marker").attr("id", n + "_" + t + "-crossStart").attr("class", "marker cross " + t).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
	}, "cross"),
	barb: /* @__PURE__ */ s((e, t, n) => {
		e.append("defs").append("marker").attr("id", n + "_" + t + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
	}, "barb")
}, _e = he, L = f()?.block?.padding ?? 8;
function R(e, t) {
	if (e === 0 || !Number.isInteger(e)) throw Error("Columns must be an integer !== 0.");
	if (t < 0 || !Number.isInteger(t)) throw Error("Position must be a non-negative integer." + t);
	return e < 0 ? {
		px: t,
		py: 0
	} : e === 1 ? {
		px: 0,
		py: t
	} : {
		px: t % e,
		py: Math.floor(t / e)
	};
}
s(R, "calculateBlockPosition");
var ve = /* @__PURE__ */ s((e) => {
	let t = 0, n = 0;
	for (let r of e.children) {
		let { width: e, height: i, x: a, y: s } = r.size ?? {
			width: 0,
			height: 0,
			x: 0,
			y: 0
		};
		o.debug("getMaxChildSize abc95 child:", r.id, "width:", e, "height:", i, "x:", a, "y:", s, r.type), r.type !== "space" && (e > t && (t = e / (r.widthInColumns ?? 1)), i > n && (n = i));
	}
	return {
		width: t,
		height: n
	};
}, "getMaxChildSize");
function z(e, t, n = 0, r = 0) {
	o.debug("setBlockSizes abc95 (start)", e.id, e?.size?.x, "block width =", e?.size, "siblingWidth", n), e?.size?.width || (e.size = {
		width: n,
		height: r,
		x: 0,
		y: 0
	});
	let i = 0, a = 0;
	if (e.children?.length > 0) {
		for (let n of e.children) z(n, t);
		let s = ve(e);
		i = s.width, a = s.height, o.debug("setBlockSizes abc95 maxWidth of", e.id, ":s children is ", i, a);
		for (let t of e.children) t.size && (o.debug(`abc95 Setting size of children of ${e.id} id=${t.id} ${i} ${a} ${JSON.stringify(t.size)}`), t.size.width = i * (t.widthInColumns ?? 1) + L * ((t.widthInColumns ?? 1) - 1), t.size.height = a, t.size.x = 0, t.size.y = 0, o.debug(`abc95 updating size of ${e.id} children child:${t.id} maxWidth:${i} maxHeight:${a}`));
		for (let n of e.children) z(n, t, i, a);
		let c = e.columns ?? -1, l = 0;
		for (let t of e.children) l += t.widthInColumns ?? 1;
		let u = e.children.length;
		c > 0 && c < l && (u = c);
		let d = Math.ceil(l / u), f = u * (i + L) + L, p = d * (a + L) + L;
		if (f < n) {
			o.debug(`Detected to small sibling: abc95 ${e.id} siblingWidth ${n} siblingHeight ${r} width ${f}`), f = n, p = r;
			let t = (n - u * L - L) / u, s = (r - d * L - L) / d;
			o.debug("Size indata abc88", e.id, "childWidth", t, "maxWidth", i), o.debug("Size indata abc88", e.id, "childHeight", s, "maxHeight", a), o.debug("Size indata abc88 xSize", u, "padding", L);
			for (let n of e.children) n.size && (n.size.width = t, n.size.height = s, n.size.x = 0, n.size.y = 0);
		}
		if (o.debug(`abc95 (finale calc) ${e.id} xSize ${u} ySize ${d} columns ${c}${e.children.length} width=${Math.max(f, e.size?.width || 0)}`), f < (e?.size?.width || 0)) {
			f = e?.size?.width || 0;
			let t = c > 0 ? Math.min(e.children.length, c) : e.children.length;
			if (t > 0) {
				let n = (f - t * L - L) / t;
				o.debug("abc95 (growing to fit) width", e.id, f, e.size?.width, n);
				for (let t of e.children) t.size && (t.size.width = n);
			}
		}
		e.size = {
			width: f,
			height: p,
			x: 0,
			y: 0
		};
	}
	o.debug("setBlockSizes abc94 (done)", e.id, e?.size?.x, e?.size?.width, e?.size?.y, e?.size?.height);
}
s(z, "setBlockSizes");
function ye(e, t) {
	o.debug(`abc85 layout blocks (=>layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);
	let n = e.columns ?? -1;
	if (o.debug("layoutBlocks columns abc95", e.id, "=>", n, e), e.children && e.children.length > 0) {
		let r = e?.children[0]?.size?.width ?? 0, i = e.children.length * r + (e.children.length - 1) * L;
		o.debug("widthOfChildren 88", i, "posX");
		let a = /* @__PURE__ */ new Map();
		{
			let t = 0;
			for (let r of e.children) {
				if (!r.size) continue;
				let { py: e } = R(n, t), i = a.get(e) ?? 0;
				r.size.height > i && a.set(e, r.size.height);
				let o = r?.widthInColumns ?? 1;
				n > 0 && (o = Math.min(o, n - t % n)), t += o;
			}
		}
		let s = /* @__PURE__ */ new Map();
		{
			let e = 0, t = [...a.keys()].sort((e, t) => e - t);
			for (let n of t) s.set(n, e), e += (a.get(n) ?? 0) + L;
		}
		let c = 0;
		o.debug("abc91 block?.size?.x", e.id, e?.size?.x);
		let l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -L, u = 0;
		for (let r of e.children) {
			let i = e;
			if (!r.size) continue;
			let { width: d, height: f } = r.size, { px: p, py: m } = R(n, c);
			if (m != u && (u = m, l = e?.size?.x ? e?.size?.x + (-e?.size?.width / 2 || 0) : -L, o.debug("New row in layout for block", e.id, " and child ", r.id, u)), o.debug(`abc89 layout blocks (child) id: ${r.id} Pos: ${c} (px, py) ${p},${m} (${i?.size?.x},${i?.size?.y}) parent: ${i.id} width: ${d}${L}`), i.size) {
				let e = d / 2;
				r.size.x = l + L + e, o.debug(`abc91 layout blocks (calc) px, pyid:${r.id} startingPos=X${l} new startingPosX${r.size.x} ${e} padding=${L} width=${d} halfWidth=${e} => x:${r.size.x} y:${r.size.y} ${r.widthInColumns} (width * (child?.w || 1)) / 2 ${d * (r?.widthInColumns ?? 1) / 2}`), l = r.size.x + e;
				let t = s.get(m) ?? 0, n = a.get(m) ?? f;
				r.size.y = i.size.y - i.size.height / 2 + t + n / 2 + L, o.debug(`abc88 layout blocks (calc) px, pyid:${r.id}startingPosX${l}${L}${e}=>x:${r.size.x}y:${r.size.y}${r.widthInColumns}(width * (child?.w || 1)) / 2${d * (r?.widthInColumns ?? 1) / 2}`);
			}
			r.children && ye(r, t);
			let h = r?.widthInColumns ?? 1;
			n > 0 && (h = Math.min(h, n - c % n)), c += h, o.debug("abc88 columnsPos", r, c);
		}
	}
	o.debug(`layout blocks (<==layoutBlocks) ${e.id} x: ${e?.size?.x} y: ${e?.size?.y} width: ${e?.size?.width}`);
}
s(ye, "layoutBlocks");
function be(e, { minX: t, minY: n, maxX: r, maxY: i } = {
	minX: 0,
	minY: 0,
	maxX: 0,
	maxY: 0
}) {
	if (e.size && e.id !== "root") {
		let { x: a, y: o, width: s, height: c } = e.size;
		a - s / 2 < t && (t = a - s / 2), o - c / 2 < n && (n = o - c / 2), a + s / 2 > r && (r = a + s / 2), o + c / 2 > i && (i = o + c / 2);
	}
	if (e.children) for (let a of e.children) ({minX: t, minY: n, maxX: r, maxY: i} = be(a, {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	}));
	return {
		minX: t,
		minY: n,
		maxX: r,
		maxY: i
	};
}
s(be, "findBounds");
function xe(e) {
	let t = e.getBlock("root");
	if (!t) return;
	z(t, e, 0, 0), ye(t, e), o.debug("getBlocks", JSON.stringify(t, null, 2));
	let { minX: n, minY: r, maxX: i, maxY: a } = be(t), s = a - r;
	return {
		x: n,
		y: r,
		width: i - n,
		height: s
	};
}
s(xe, "layout");
var B = /* @__PURE__ */ s(async (e, t, n, r = !1, i = !1) => {
	let a = t || "";
	typeof a == "object" && (a = a[0]);
	let o = f(), s = g(o);
	return await b(e, a, {
		style: n,
		isTitle: r,
		useHtmlLabels: s,
		markdown: !1,
		isNode: i,
		width: Infinity
	}, o);
}, "createLabel"), Se = /* @__PURE__ */ s((e, t, n, r, i) => {
	t.arrowTypeStart && we(e, "start", t.arrowTypeStart, n, r, i), t.arrowTypeEnd && we(e, "end", t.arrowTypeEnd, n, r, i);
}, "addEdgeMarkers"), Ce = {
	arrow_cross: "cross",
	arrow_point: "point",
	arrow_barb: "barb",
	arrow_circle: "circle",
	aggregation: "aggregation",
	extension: "extension",
	composition: "composition",
	dependency: "dependency",
	lollipop: "lollipop"
}, we = /* @__PURE__ */ s((e, t, n, r, i, a) => {
	let s = Ce[n];
	if (!s) {
		o.warn(`Unknown arrow type: ${n}`);
		return;
	}
	let c = t === "start" ? "Start" : "End";
	e.attr(`marker-${t}`, `url(${r}#${i}_${a}-${s}${c})`);
}, "addEdgeMarker"), V = {}, H = {}, Te = /* @__PURE__ */ s(async (e, t) => {
	let n = f(), r = g(n), i = e.insert("g").attr("class", "edgeLabel"), a = i.insert("g").attr("class", "label"), o = t.labelType === "markdown", s = await b(e, t.label, {
		style: t.labelStyle,
		useHtmlLabels: r,
		addSvgBackground: o,
		isNode: !1,
		markdown: o,
		width: o ? void 0 : Infinity
	}, n);
	a.node().appendChild(s);
	let l = s.getBBox(), u = l;
	if (r) {
		let e = s.children[0], t = c(s);
		l = e.getBoundingClientRect(), u = l, t.attr("width", l.width), t.attr("height", l.height);
	} else {
		let e = c(s).select("text").node();
		e && typeof e.getBBox == "function" && (u = e.getBBox());
	}
	a.attr("transform", C(u, r)), V[t.id] = i, t.width = l.width, t.height = l.height;
	let d;
	if (t.startLabelLeft) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await B(i, t.startLabelLeft, t.labelStyle);
		d = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = c(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", C(o, r)), H[t.id] || (H[t.id] = {}), H[t.id].startLeft = n, U(d, t.startLabelLeft);
	}
	if (t.startLabelRight) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await B(n, t.startLabelRight, t.labelStyle);
		d = a, i.node().appendChild(a);
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = c(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", C(o, r)), H[t.id] || (H[t.id] = {}), H[t.id].startRight = n, U(d, t.startLabelRight);
	}
	if (t.endLabelLeft) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await B(i, t.endLabelLeft, t.labelStyle);
		d = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = c(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", C(o, r)), n.node().appendChild(a), H[t.id] || (H[t.id] = {}), H[t.id].endLeft = n, U(d, t.endLabelLeft);
	}
	if (t.endLabelRight) {
		let n = e.insert("g").attr("class", "edgeTerminals"), i = n.insert("g").attr("class", "inner"), a = await B(i, t.endLabelRight, t.labelStyle);
		d = a;
		let o = a.getBBox();
		if (r) {
			let e = a.children[0], t = c(a);
			o = e.getBoundingClientRect(), t.attr("width", o.width), t.attr("height", o.height);
		}
		i.attr("transform", C(o, r)), n.node().appendChild(a), H[t.id] || (H[t.id] = {}), H[t.id].endRight = n, U(d, t.endLabelRight);
	}
	return s;
}, "insertEdgeLabel");
function U(e, t) {
	g(f()) && e && (e.style.width = t.length * 9 + "px", e.style.height = "12px");
}
s(U, "setTerminalWidth");
var Ee = /* @__PURE__ */ s((e, t) => {
	o.debug("Moving label abc88 ", e.id, e.label, V[e.id], t);
	let r = t.updatedPath ? t.updatedPath : t.originalPath, { subGraphTitleTotalMargin: i } = w(f());
	if (e.label) {
		let a = V[e.id], s = e.x, c = e.y;
		if (r) {
			let i = n.calcLabelPosition(r);
			o.debug("Moving label " + e.label + " from (", s, ",", c, ") to (", i.x, ",", i.y, ") abc88"), t.updatedPath && (s = i.x, c = i.y);
		}
		a.attr("transform", `translate(${s}, ${c + i / 2})`);
	}
	if (e.startLabelLeft) {
		let t = H[e.id].startLeft, i = e.x, a = e.y;
		if (r) {
			let t = n.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, "start_left", r);
			i = t.x, a = t.y;
		}
		t.attr("transform", `translate(${i}, ${a})`);
	}
	if (e.startLabelRight) {
		let t = H[e.id].startRight, i = e.x, a = e.y;
		if (r) {
			let t = n.calcTerminalLabelPosition(e.arrowTypeStart ? 10 : 0, "start_right", r);
			i = t.x, a = t.y;
		}
		t.attr("transform", `translate(${i}, ${a})`);
	}
	if (e.endLabelLeft) {
		let t = H[e.id].endLeft, i = e.x, a = e.y;
		if (r) {
			let t = n.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, "end_left", r);
			i = t.x, a = t.y;
		}
		t.attr("transform", `translate(${i}, ${a})`);
	}
	if (e.endLabelRight) {
		let t = H[e.id].endRight, i = e.x, a = e.y;
		if (r) {
			let t = n.calcTerminalLabelPosition(e.arrowTypeEnd ? 10 : 0, "end_right", r);
			i = t.x, a = t.y;
		}
		t.attr("transform", `translate(${i}, ${a})`);
	}
}, "positionEdgeLabel"), De = /* @__PURE__ */ s((e, t) => {
	let n = e.x, r = e.y, i = Math.abs(t.x - n), a = Math.abs(t.y - r), o = e.width / 2, s = e.height / 2;
	return i >= o || a >= s;
}, "outsideNode"), Oe = /* @__PURE__ */ s((e, t, n) => {
	o.debug(`intersection calc abc89:
  outsidePoint: ${JSON.stringify(t)}
  insidePoint : ${JSON.stringify(n)}
  node        : x:${e.x} y:${e.y} w:${e.width} h:${e.height}`);
	let r = e.x, i = e.y, a = Math.abs(r - n.x), s = e.width / 2, c = n.x < t.x ? s - a : s + a, l = e.height / 2, u = Math.abs(t.y - n.y), d = Math.abs(t.x - n.x);
	if (Math.abs(i - t.y) * s > Math.abs(r - t.x) * l) {
		let e = n.y < t.y ? t.y - l - i : i - l - t.y;
		c = d * e / u;
		let r = {
			x: n.x < t.x ? n.x + c : n.x - d + c,
			y: n.y < t.y ? n.y + u - e : n.y - u + e
		};
		return c === 0 && (r.x = t.x, r.y = t.y), d === 0 && (r.x = t.x), u === 0 && (r.y = t.y), o.debug(`abc89 topp/bott calc, Q ${u}, q ${e}, R ${d}, r ${c}`, r), r;
	} else {
		c = n.x < t.x ? t.x - s - r : r - s - t.x;
		let e = u * c / d, i = n.x < t.x ? n.x + d - c : n.x - d + c, a = n.y < t.y ? n.y + e : n.y - e;
		return o.debug(`sides calc abc89, Q ${u}, q ${e}, R ${d}, r ${c}`, {
			_x: i,
			_y: a
		}), c === 0 && (i = t.x, a = t.y), d === 0 && (i = t.x), u === 0 && (a = t.y), {
			x: i,
			y: a
		};
	}
}, "intersection"), ke = /* @__PURE__ */ s((e, t) => {
	o.debug("abc88 cutPathAtIntersect", e, t);
	let n = [], r = e[0], i = !1;
	return e.forEach((e) => {
		if (!De(t, e) && !i) {
			let a = Oe(t, r, e), o = !1;
			n.forEach((e) => {
				o ||= e.x === a.x && e.y === a.y;
			}), n.some((e) => e.x === a.x && e.y === a.y) || n.push(a), i = !0;
		} else r = e, i || n.push(e);
	}), n;
}, "cutPathAtIntersect"), Ae = /* @__PURE__ */ s(function(t, n, r, i, a, s, c) {
	let u = r.points;
	o.debug("abc88 InsertEdge: edge=", r, "e=", n);
	let d = !1, p = s.node(n.v);
	var m = s.node(n.w);
	m?.intersect && p?.intersect && (u = u.slice(1, r.points.length - 1), u.unshift(p.intersect(u[0])), u.push(m.intersect(u[u.length - 1]))), r.toCluster && (o.debug("to cluster abc88", i[r.toCluster]), u = ke(r.points, i[r.toCluster].node), d = !0), r.fromCluster && (o.debug("from cluster abc88", i[r.fromCluster]), u = ke(u.reverse(), i[r.fromCluster].node).reverse(), d = !0);
	let h = u.filter((e) => !Number.isNaN(e.y)), g = e;
	r.curve && (a === "graph" || a === "flowchart") && (g = r.curve);
	let { x: _, y: v } = S(r), b = y().x(_).y(v).curve(g), x;
	switch (r.thickness) {
		case "normal":
			x = "edge-thickness-normal";
			break;
		case "thick":
			x = "edge-thickness-thick";
			break;
		case "invisible":
			x = "edge-thickness-thick";
			break;
		default: x = "";
	}
	switch (r.pattern) {
		case "solid":
			x += " edge-pattern-solid";
			break;
		case "dotted":
			x += " edge-pattern-dotted";
			break;
		case "dashed":
			x += " edge-pattern-dashed";
			break;
	}
	let C = t.append("path").attr("d", b(h)).attr("id", r.id).attr("class", " " + x + (r.classes ? " " + r.classes : "")).attr("style", r.style), w = "";
	(f().flowchart.arrowMarkerAbsolute || f().state.arrowMarkerAbsolute) && (w = l(!0)), Se(C, r, w, c, a);
	let T = {};
	return d && (T.updatedPath = u), T.originalPath = r.points, T;
}, "insertEdge"), je = /* @__PURE__ */ s((e) => {
	let t = /* @__PURE__ */ new Set();
	for (let n of e) switch (n) {
		case "x":
			t.add("right"), t.add("left");
			break;
		case "y":
			t.add("up"), t.add("down");
			break;
		default:
			t.add(n);
			break;
	}
	return t;
}, "expandAndDeduplicateDirections"), Me = /* @__PURE__ */ s((e, t, n) => {
	let r = je(e), i = t.height + 2 * n.padding, a = i / 2, o = t.width + 2 * a + n.padding, s = n.padding / 2;
	return r.has("right") && r.has("left") && r.has("up") && r.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: a,
			y: 0
		},
		{
			x: o / 2,
			y: 2 * s
		},
		{
			x: o - a,
			y: 0
		},
		{
			x: o,
			y: 0
		},
		{
			x: o,
			y: -i / 3
		},
		{
			x: o + 2 * s,
			y: -i / 2
		},
		{
			x: o,
			y: -2 * i / 3
		},
		{
			x: o,
			y: -i
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: o / 2,
			y: -i - 2 * s
		},
		{
			x: a,
			y: -i
		},
		{
			x: 0,
			y: -i
		},
		{
			x: 0,
			y: -2 * i / 3
		},
		{
			x: -2 * s,
			y: -i / 2
		},
		{
			x: 0,
			y: -i / 3
		}
	] : r.has("right") && r.has("left") && r.has("up") ? [
		{
			x: a,
			y: 0
		},
		{
			x: o - a,
			y: 0
		},
		{
			x: o,
			y: -i / 2
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: a,
			y: -i
		},
		{
			x: 0,
			y: -i / 2
		}
	] : r.has("right") && r.has("left") && r.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: a,
			y: -i
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: o,
			y: 0
		}
	] : r.has("right") && r.has("up") && r.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: -a
		},
		{
			x: o,
			y: -i + a
		},
		{
			x: 0,
			y: -i
		}
	] : r.has("left") && r.has("up") && r.has("down") ? [
		{
			x: o,
			y: 0
		},
		{
			x: 0,
			y: -a
		},
		{
			x: 0,
			y: -i + a
		},
		{
			x: o,
			y: -i
		}
	] : r.has("right") && r.has("left") ? [
		{
			x: a,
			y: 0
		},
		{
			x: a,
			y: -s
		},
		{
			x: o - a,
			y: -s
		},
		{
			x: o - a,
			y: 0
		},
		{
			x: o,
			y: -i / 2
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: a,
			y: -i
		},
		{
			x: 0,
			y: -i / 2
		}
	] : r.has("up") && r.has("down") ? [
		{
			x: o / 2,
			y: 0
		},
		{
			x: 0,
			y: -s
		},
		{
			x: a,
			y: -s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: 0,
			y: -i + s
		},
		{
			x: o / 2,
			y: -i
		},
		{
			x: o,
			y: -i + s
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: o - a,
			y: -s
		},
		{
			x: o,
			y: -s
		}
	] : r.has("right") && r.has("up") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: -a
		},
		{
			x: 0,
			y: -i
		}
	] : r.has("right") && r.has("down") ? [
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: 0
		},
		{
			x: 0,
			y: -i
		}
	] : r.has("left") && r.has("up") ? [
		{
			x: o,
			y: 0
		},
		{
			x: 0,
			y: -a
		},
		{
			x: o,
			y: -i
		}
	] : r.has("left") && r.has("down") ? [
		{
			x: o,
			y: 0
		},
		{
			x: 0,
			y: 0
		},
		{
			x: o,
			y: -i
		}
	] : r.has("right") ? [
		{
			x: a,
			y: -s
		},
		{
			x: a,
			y: -s
		},
		{
			x: o - a,
			y: -s
		},
		{
			x: o - a,
			y: 0
		},
		{
			x: o,
			y: -i / 2
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: a,
			y: -i + s
		}
	] : r.has("left") ? [
		{
			x: a,
			y: 0
		},
		{
			x: a,
			y: -s
		},
		{
			x: o - a,
			y: -s
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: a,
			y: -i
		},
		{
			x: 0,
			y: -i / 2
		}
	] : r.has("up") ? [
		{
			x: a,
			y: -s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: 0,
			y: -i + s
		},
		{
			x: o / 2,
			y: -i
		},
		{
			x: o,
			y: -i + s
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: o - a,
			y: -s
		}
	] : r.has("down") ? [
		{
			x: o / 2,
			y: 0
		},
		{
			x: 0,
			y: -s
		},
		{
			x: a,
			y: -s
		},
		{
			x: a,
			y: -i + s
		},
		{
			x: o - a,
			y: -i + s
		},
		{
			x: o - a,
			y: -s
		},
		{
			x: o,
			y: -s
		}
	] : [{
		x: 0,
		y: 0
	}];
}, "getArrowPoints");
function Ne(e, t) {
	return e.intersect(t);
}
s(Ne, "intersectNode");
var Pe = Ne;
function Fe(e, t, n, r) {
	var i = e.x, a = e.y, o = i - r.x, s = a - r.y, c = Math.sqrt(t * t * s * s + n * n * o * o), l = Math.abs(t * n * o / c);
	r.x < i && (l = -l);
	var u = Math.abs(t * n * s / c);
	return r.y < a && (u = -u), {
		x: i + l,
		y: a + u
	};
}
s(Fe, "intersectEllipse");
var Ie = Fe;
function Le(e, t, n) {
	return Ie(e, t, t, n);
}
s(Le, "intersectCircle");
var Re = Le;
function ze(e, t, n, r) {
	var i = t.y - e.y, a, o = e.x - t.x, s, c = t.x * e.y - e.x * t.y, l, u, d, f = i * n.x + o * n.y + c, p = i * r.x + o * r.y + c, m, h, g, _, v;
	if (!(f !== 0 && p !== 0 && W(f, p)) && (a = r.y - n.y, s = n.x - r.x, l = r.x * n.y - n.x * r.y, u = a * e.x + s * e.y + l, d = a * t.x + s * t.y + l, !(u !== 0 && d !== 0 && W(u, d)) && (m = i * s - a * o, m !== 0))) return h = Math.abs(m / 2), g = o * l - s * c, _ = g < 0 ? (g - h) / m : (g + h) / m, g = a * c - i * l, v = g < 0 ? (g - h) / m : (g + h) / m, {
		x: _,
		y: v
	};
}
s(ze, "intersectLine");
function W(e, t) {
	return e * t > 0;
}
s(W, "sameSign");
var Be = ze, Ve = He;
function He(e, t, n) {
	var r = e.x, i = e.y, a = [], o = Infinity, s = Infinity;
	typeof t.forEach == "function" ? t.forEach(function(e) {
		o = Math.min(o, e.x), s = Math.min(s, e.y);
	}) : (o = Math.min(o, t.x), s = Math.min(s, t.y));
	for (var c = r - e.width / 2 - o, l = i - e.height / 2 - s, u = 0; u < t.length; u++) {
		var d = t[u], f = t[u < t.length - 1 ? u + 1 : 0], p = Be(e, n, {
			x: c + d.x,
			y: l + d.y
		}, {
			x: c + f.x,
			y: l + f.y
		});
		p && a.push(p);
	}
	return a.length ? (a.length > 1 && a.sort(function(e, t) {
		var r = e.x - n.x, i = e.y - n.y, a = Math.sqrt(r * r + i * i), o = t.x - n.x, s = t.y - n.y, c = Math.sqrt(o * o + s * s);
		return a < c ? -1 : a === c ? 0 : 1;
	}), a[0]) : e;
}
s(He, "intersectPolygon");
var G = {
	node: Pe,
	circle: Re,
	ellipse: Ie,
	polygon: Ve,
	rect: /* @__PURE__ */ s((e, t) => {
		var n = e.x, r = e.y, i = t.x - n, a = t.y - r, o = e.width / 2, s = e.height / 2, c, l;
		return Math.abs(a) * o > Math.abs(i) * s ? (a < 0 && (s = -s), c = a === 0 ? 0 : s * i / a, l = s) : (i < 0 && (o = -o), c = o, l = i === 0 ? 0 : o * a / i), {
			x: n + c,
			y: r + l
		};
	}, "intersectRect")
}, K = /* @__PURE__ */ s(async (e, t, n, i) => {
	let a = f(), o, s = t.useHtmlLabels || g(a);
	o = n || "node default";
	let l = e.insert("g").attr("class", o).attr("id", t.domId || t.id), d = l.insert("g").attr("class", "label").attr("style", t.labelStyle), p;
	p = t.labelText === void 0 ? "" : typeof t.labelText == "string" ? t.labelText : t.labelText[0];
	let m;
	m = t.labelType === "markdown" ? b(d, u(r(p), a), {
		useHtmlLabels: s,
		width: t.width || a.flowchart.wrappingWidth,
		classes: "markdown-node-label"
	}, a) : await B(d, u(r(p), a), t.labelStyle, !1, i);
	let h = m.getBBox(), _ = t.padding / 2;
	if (g(a)) {
		let e = m.children[0], t = c(m);
		await T(e, p), h = e.getBoundingClientRect(), t.attr("width", h.width), t.attr("height", h.height);
	}
	return s ? d.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")") : d.attr("transform", "translate(0, " + -h.height / 2 + ")"), t.centerLabel && d.attr("transform", "translate(" + -h.width / 2 + ", " + -h.height / 2 + ")"), d.insert("rect", ":first-child"), {
		shapeSvg: l,
		bbox: h,
		halfPadding: _,
		label: d
	};
}, "labelHelper"), q = /* @__PURE__ */ s((e, t) => {
	let n = t.node().getBBox();
	e.width = n.width, e.height = n.height;
}, "updateNodeBounds");
function J(e, t, n, r) {
	return e.insert("polygon", ":first-child").attr("points", r.map(function(e) {
		return e.x + "," + e.y;
	}).join(" ")).attr("class", "label-container").attr("transform", "translate(" + -t / 2 + "," + n / 2 + ")");
}
s(J, "insertPolygonShape");
var Ue = /* @__PURE__ */ s(async (e, t) => {
	t.useHtmlLabels || g(f()) || (t.centerLabel = !0);
	let { shapeSvg: n, bbox: r, halfPadding: i } = await K(e, t, "node " + t.classes, !0);
	o.info("Classes = ", t.classes);
	let a = n.insert("rect", ":first-child");
	return a.attr("rx", t.rx).attr("ry", t.ry).attr("x", -r.width / 2 - i).attr("y", -r.height / 2 - i).attr("width", r.width + t.padding).attr("height", r.height + t.padding), q(t, a), t.intersect = function(e) {
		return G.rect(t, e);
	}, n;
}, "note"), We = /* @__PURE__ */ s((e) => e ? " " + e : "", "formatClass"), Y = /* @__PURE__ */ s((e, t) => `${t || "node default"}${We(e.classes)} ${We(e.class)}`, "getClassesFromNode"), Ge = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding + (r.height + t.padding), a = [
		{
			x: i / 2,
			y: 0
		},
		{
			x: i,
			y: -i / 2
		},
		{
			x: i / 2,
			y: -i
		},
		{
			x: 0,
			y: -i / 2
		}
	];
	o.info("Question main (Circle)");
	let s = J(n, i, i, a);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return o.warn("Intersect called"), G.polygon(t, a, e);
	}, n;
}, "question"), Ke = /* @__PURE__ */ s((e, t) => {
	let n = e.insert("g").attr("class", "node default").attr("id", t.domId || t.id);
	return n.insert("polygon", ":first-child").attr("points", [
		{
			x: 0,
			y: 28 / 2
		},
		{
			x: 28 / 2,
			y: 0
		},
		{
			x: 0,
			y: -28 / 2
		},
		{
			x: -28 / 2,
			y: 0
		}
	].map(function(e) {
		return e.x + "," + e.y;
	}).join(" ")).attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28), t.width = 28, t.height = 28, t.intersect = function(e) {
		return G.circle(t, 14, e);
	}, n;
}, "choice"), qe = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.height + t.padding, a = i / 4, o = r.width + 2 * a + t.padding, s = [
		{
			x: a,
			y: 0
		},
		{
			x: o - a,
			y: 0
		},
		{
			x: o,
			y: -i / 2
		},
		{
			x: o - a,
			y: -i
		},
		{
			x: a,
			y: -i
		},
		{
			x: 0,
			y: -i / 2
		}
	], c = J(n, o, i, s);
	return c.attr("style", t.style), q(t, c), t.intersect = function(e) {
		return G.polygon(t, s, e);
	}, n;
}, "hexagon"), Je = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, void 0, !0), i = r.height + 2 * t.padding, a = i / 2, o = r.width + 2 * a + t.padding, s = Me(t.directions, r, t), c = J(n, o, i, s);
	return c.attr("style", t.style), q(t, c), t.intersect = function(e) {
		return G.polygon(t, s, e);
	}, n;
}, "block_arrow"), Ye = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: -a / 2,
			y: 0
		},
		{
			x: i,
			y: 0
		},
		{
			x: i,
			y: -a
		},
		{
			x: -a / 2,
			y: -a
		},
		{
			x: 0,
			y: -a / 2
		}
	];
	return J(n, i, a, o).attr("style", t.style), t.width = i + a, t.height = a, t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "rect_left_inv_arrow"), Xe = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: -2 * a / 6,
			y: 0
		},
		{
			x: i - a / 6,
			y: 0
		},
		{
			x: i + 2 * a / 6,
			y: -a
		},
		{
			x: a / 6,
			y: -a
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "lean_right"), Ze = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: 2 * a / 6,
			y: 0
		},
		{
			x: i + a / 6,
			y: 0
		},
		{
			x: i - 2 * a / 6,
			y: -a
		},
		{
			x: -a / 6,
			y: -a
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "lean_left"), Qe = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: -2 * a / 6,
			y: 0
		},
		{
			x: i + 2 * a / 6,
			y: 0
		},
		{
			x: i - a / 6,
			y: -a
		},
		{
			x: a / 6,
			y: -a
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "trapezoid"), $e = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: a / 6,
			y: 0
		},
		{
			x: i - a / 6,
			y: 0
		},
		{
			x: i + 2 * a / 6,
			y: -a
		},
		{
			x: -2 * a / 6,
			y: -a
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "inv_trapezoid"), et = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: 0,
			y: 0
		},
		{
			x: i + a / 2,
			y: 0
		},
		{
			x: i,
			y: -a / 2
		},
		{
			x: i + a / 2,
			y: -a
		},
		{
			x: 0,
			y: -a
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "rect_right_inv_arrow"), tt = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = i / 2, o = a / (2.5 + i / 50), s = r.height + o + t.padding, c = "M 0," + o + " a " + a + "," + o + " 0,0,0 " + i + " 0 a " + a + "," + o + " 0,0,0 " + -i + " 0 l 0," + s + " a " + a + "," + o + " 0,0,0 " + i + " 0 l 0," + -s;
	return q(t, n.attr("label-offset-y", o).insert("path", ":first-child").attr("style", t.style).attr("d", c).attr("transform", "translate(" + -i / 2 + "," + -(s / 2 + o) + ")")), t.intersect = function(e) {
		let n = G.rect(t, e), r = n.x - t.x;
		if (a != 0 && (Math.abs(r) < t.width / 2 || Math.abs(r) == t.width / 2 && Math.abs(n.y - t.y) > t.height / 2 - o)) {
			let i = o * o * (1 - r * r / (a * a));
			i != 0 && (i = Math.sqrt(i)), i = o - i, e.y - t.y > 0 && (i = -i), n.y += i;
		}
		return n;
	}, n;
}, "cylinder"), nt = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r, halfPadding: i } = await K(e, t, "node " + t.classes + " " + t.class, !0), a = n.insert("rect", ":first-child"), s = t.positioned ? t.width : r.width + t.padding, c = t.positioned ? t.height : r.height + t.padding, l = t.positioned ? -s / 2 : -r.width / 2 - i, u = t.positioned ? -c / 2 : -r.height / 2 - i;
	if (a.attr("class", "basic label-container").attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (X(a, t.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			o.warn(`Unknown node property ${e}`);
		});
	}
	return q(t, a), t.intersect = function(e) {
		return G.rect(t, e);
	}, n;
}, "rect"), rt = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r, halfPadding: i } = await K(e, t, "node " + t.classes, !0), a = n.insert("rect", ":first-child"), s = t.positioned ? t.width : r.width + t.padding, c = t.positioned ? t.height : r.height + t.padding, l = t.positioned ? -s / 2 : -r.width / 2 - i, u = t.positioned ? -c / 2 : -r.height / 2 - i;
	if (a.attr("class", "basic cluster composite label-container").attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("x", l).attr("y", u).attr("width", s).attr("height", c), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (X(a, t.props.borders, s, c), e.delete("borders")), e.forEach((e) => {
			o.warn(`Unknown node property ${e}`);
		});
	}
	return q(t, a), t.intersect = function(e) {
		return G.rect(t, e);
	}, n;
}, "composite"), it = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n } = await K(e, t, "label", !0);
	o.trace("Classes = ", t.class);
	let r = n.insert("rect", ":first-child");
	if (r.attr("width", 0).attr("height", 0), n.attr("class", "label edgeLabel"), t.props) {
		let e = new Set(Object.keys(t.props));
		t.props.borders && (X(r, t.props.borders, 0, 0), e.delete("borders")), e.forEach((e) => {
			o.warn(`Unknown node property ${e}`);
		});
	}
	return q(t, r), t.intersect = function(e) {
		return G.rect(t, e);
	}, n;
}, "labelRect");
function X(e, t, n, r) {
	let i = [], a = /* @__PURE__ */ s((e) => {
		i.push(e, 0);
	}, "addBorder"), c = /* @__PURE__ */ s((e) => {
		i.push(0, e);
	}, "skipBorder");
	t.includes("t") ? (o.debug("add top border"), a(n)) : c(n), t.includes("r") ? (o.debug("add right border"), a(r)) : c(r), t.includes("b") ? (o.debug("add bottom border"), a(n)) : c(n), t.includes("l") ? (o.debug("add left border"), a(r)) : c(r), e.attr("stroke-dasharray", i.join(" "));
}
s(X, "applyNodePropertyBorders");
var at = /* @__PURE__ */ s(async (e, t) => {
	let n;
	n = t.classes ? "node " + t.classes : "node default";
	let r = e.insert("g").attr("class", n).attr("id", t.domId || t.id), i = r.insert("rect", ":first-child"), a = r.insert("line"), s = r.insert("g").attr("class", "label"), l = t.labelText.flat ? t.labelText.flat() : t.labelText, u = "";
	u = typeof l == "object" ? l[0] : l, o.info("Label text abc79", u, l, typeof l == "object");
	let d = await B(s, u, t.labelStyle, !0, !0), p = {
		width: 0,
		height: 0
	};
	if (g(f())) {
		let e = d.children[0], t = c(d);
		p = e.getBoundingClientRect(), t.attr("width", p.width), t.attr("height", p.height);
	}
	o.info("Text 2", l);
	let m = l.slice(1, l.length), h = d.getBBox(), _ = await B(s, m.join ? m.join("<br/>") : m, t.labelStyle, !0, !0);
	if (g(f())) {
		let e = _.children[0], t = c(_);
		p = e.getBoundingClientRect(), t.attr("width", p.width), t.attr("height", p.height);
	}
	let v = t.padding / 2;
	return c(_).attr("transform", "translate( " + (p.width > h.width ? 0 : (h.width - p.width) / 2) + ", " + (h.height + v + 5) + ")"), c(d).attr("transform", "translate( " + (p.width < h.width ? 0 : -(h.width - p.width) / 2) + ", 0)"), p = s.node().getBBox(), s.attr("transform", "translate(" + -p.width / 2 + ", " + (-p.height / 2 - v + 3) + ")"), i.attr("class", "outer title-state").attr("x", -p.width / 2 - v).attr("y", -p.height / 2 - v).attr("width", p.width + t.padding).attr("height", p.height + t.padding), a.attr("class", "divider").attr("x1", -p.width / 2 - v).attr("x2", p.width / 2 + v).attr("y1", -p.height / 2 - v + h.height + v).attr("y2", -p.height / 2 - v + h.height + v), q(t, i), t.intersect = function(e) {
		return G.rect(t, e);
	}, r;
}, "rectWithTitle"), ot = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.height + t.padding, a = r.width + i / 4 + t.padding;
	return q(t, n.insert("rect", ":first-child").attr("style", t.style).attr("rx", i / 2).attr("ry", i / 2).attr("x", -a / 2).attr("y", -i / 2).attr("width", a).attr("height", i)), t.intersect = function(e) {
		return G.rect(t, e);
	}, n;
}, "stadium"), st = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r, halfPadding: i } = await K(e, t, Y(t, void 0), !0), a = n.insert("circle", ":first-child");
	return a.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", r.width / 2 + i).attr("width", r.width + t.padding).attr("height", r.height + t.padding), o.info("Circle main"), q(t, a), t.intersect = function(e) {
		return o.info("Circle intersect", t, r.width / 2 + i, e), G.circle(t, r.width / 2 + i, e);
	}, n;
}, "circle"), ct = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r, halfPadding: i } = await K(e, t, Y(t, void 0), !0), a = n.insert("g", ":first-child"), s = a.insert("circle"), c = a.insert("circle");
	return a.attr("class", t.class), s.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", r.width / 2 + i + 5).attr("width", r.width + t.padding + 10).attr("height", r.height + t.padding + 10), c.attr("style", t.style).attr("rx", t.rx).attr("ry", t.ry).attr("r", r.width / 2 + i).attr("width", r.width + t.padding).attr("height", r.height + t.padding), o.info("DoubleCircle main"), q(t, s), t.intersect = function(e) {
		return o.info("DoubleCircle intersect", t, r.width / 2 + i + 5, e), G.circle(t, r.width / 2 + i + 5, e);
	}, n;
}, "doublecircle"), lt = /* @__PURE__ */ s(async (e, t) => {
	let { shapeSvg: n, bbox: r } = await K(e, t, Y(t, void 0), !0), i = r.width + t.padding, a = r.height + t.padding, o = [
		{
			x: 0,
			y: 0
		},
		{
			x: i,
			y: 0
		},
		{
			x: i,
			y: -a
		},
		{
			x: 0,
			y: -a
		},
		{
			x: 0,
			y: 0
		},
		{
			x: -8,
			y: 0
		},
		{
			x: i + 8,
			y: 0
		},
		{
			x: i + 8,
			y: -a
		},
		{
			x: -8,
			y: -a
		},
		{
			x: -8,
			y: 0
		}
	], s = J(n, i, a, o);
	return s.attr("style", t.style), q(t, s), t.intersect = function(e) {
		return G.polygon(t, o, e);
	}, n;
}, "subroutine"), ut = /* @__PURE__ */ s((e, t) => {
	let n = e.insert("g").attr("class", "node default").attr("id", t.domId || t.id), r = n.insert("circle", ":first-child");
	return r.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14), q(t, r), t.intersect = function(e) {
		return G.circle(t, 7, e);
	}, n;
}, "start"), dt = /* @__PURE__ */ s((e, t, n) => {
	let r = e.insert("g").attr("class", "node default").attr("id", t.domId || t.id), i = 70, a = 10;
	return n === "LR" && (i = 10, a = 70), q(t, r.append("rect").attr("x", -1 * i / 2).attr("y", -1 * a / 2).attr("width", i).attr("height", a).attr("class", "fork-join")), t.height += t.padding / 2, t.width += t.padding / 2, t.intersect = function(e) {
		return G.rect(t, e);
	}, r;
}, "forkJoin"), ft = {
	rhombus: Ge,
	composite: rt,
	question: Ge,
	rect: nt,
	labelRect: it,
	rectWithTitle: at,
	choice: Ke,
	circle: st,
	doublecircle: ct,
	stadium: ot,
	hexagon: qe,
	block_arrow: Je,
	rect_left_inv_arrow: Ye,
	lean_right: Xe,
	lean_left: Ze,
	trapezoid: Qe,
	inv_trapezoid: $e,
	rect_right_inv_arrow: et,
	cylinder: tt,
	start: ut,
	end: /* @__PURE__ */ s((e, t) => {
		let n = e.insert("g").attr("class", "node default").attr("id", t.domId || t.id), r = n.insert("circle", ":first-child"), i = n.insert("circle", ":first-child");
		return i.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14), r.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10), q(t, i), t.intersect = function(e) {
			return G.circle(t, 7, e);
		}, n;
	}, "end"),
	note: Ue,
	subroutine: lt,
	fork: dt,
	join: dt,
	class_box: /* @__PURE__ */ s(async (e, t) => {
		let n = t.padding / 2, r;
		r = t.classes ? "node " + t.classes : "node default";
		let i = e.insert("g").attr("class", r).attr("id", t.domId || t.id), a = i.insert("rect", ":first-child"), o = i.insert("line"), s = i.insert("line"), l = 0, u = 4, d = i.insert("g").attr("class", "label"), p = 0, m = t.classData.annotations?.[0], h = await B(d, t.classData.annotations[0] ? "«" + t.classData.annotations[0] + "»" : "", t.labelStyle, !0, !0), _ = h.getBBox();
		if (g(f())) {
			let e = h.children[0], t = c(h);
			_ = e.getBoundingClientRect(), t.attr("width", _.width), t.attr("height", _.height);
		}
		t.classData.annotations[0] && (u += _.height + 4, l += _.width);
		let v = t.classData.label;
		t.classData.type !== void 0 && t.classData.type !== "" && (g(f()) ? v += "&lt;" + t.classData.type + "&gt;" : v += "<" + t.classData.type + ">");
		let y = await B(d, v, t.labelStyle, !0, !0);
		c(y).attr("class", "classTitle");
		let b = y.getBBox();
		if (g(f())) {
			let e = y.children[0], t = c(y);
			b = e.getBoundingClientRect(), t.attr("width", b.width), t.attr("height", b.height);
		}
		u += b.height + 4, b.width > l && (l = b.width);
		let x = [];
		t.classData.members.forEach(async (e) => {
			let n = e.getDisplayDetails(), r = n.displayText;
			g(f()) && (r = r.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let i = await B(d, r, n.cssStyle ? n.cssStyle : t.labelStyle, !0, !0), a = i.getBBox();
			if (g(f())) {
				let e = i.children[0], t = c(i);
				a = e.getBoundingClientRect(), t.attr("width", a.width), t.attr("height", a.height);
			}
			a.width > l && (l = a.width), u += a.height + 4, x.push(i);
		}), u += 8;
		let S = [];
		if (t.classData.methods.forEach(async (e) => {
			let n = e.getDisplayDetails(), r = n.displayText;
			g(f()) && (r = r.replace(/</g, "&lt;").replace(/>/g, "&gt;"));
			let i = await B(d, r, n.cssStyle ? n.cssStyle : t.labelStyle, !0, !0), a = i.getBBox();
			if (g(f())) {
				let e = i.children[0], t = c(i);
				a = e.getBoundingClientRect(), t.attr("width", a.width), t.attr("height", a.height);
			}
			a.width > l && (l = a.width), u += a.height + 4, S.push(i);
		}), u += 8, m) {
			let e = (l - _.width) / 2;
			c(h).attr("transform", "translate( " + (-1 * l / 2 + e) + ", " + -1 * u / 2 + ")"), p = _.height + 4;
		}
		let C = (l - b.width) / 2;
		return c(y).attr("transform", "translate( " + (-1 * l / 2 + C) + ", " + (-1 * u / 2 + p) + ")"), p += b.height + 4, o.attr("class", "divider").attr("x1", -l / 2 - n).attr("x2", l / 2 + n).attr("y1", -u / 2 - n + 8 + p).attr("y2", -u / 2 - n + 8 + p), p += 8, x.forEach((e) => {
			c(e).attr("transform", "translate( " + -l / 2 + ", " + (-1 * u / 2 + p + 8 / 2) + ")");
			let t = e?.getBBox();
			p += (t?.height ?? 0) + 4;
		}), p += 8, s.attr("class", "divider").attr("x1", -l / 2 - n).attr("x2", l / 2 + n).attr("y1", -u / 2 - n + 8 + p).attr("y2", -u / 2 - n + 8 + p), p += 8, S.forEach((e) => {
			c(e).attr("transform", "translate( " + -l / 2 + ", " + (-1 * u / 2 + p) + ")");
			let t = e?.getBBox();
			p += (t?.height ?? 0) + 4;
		}), a.attr("style", t.style).attr("class", "outer title-state").attr("x", -l / 2 - n).attr("y", -(u / 2) - n).attr("width", l + t.padding).attr("height", u + t.padding), q(t, a), t.intersect = function(e) {
			return G.rect(t, e);
		}, i;
	}, "class_box")
}, Z = {}, pt = /* @__PURE__ */ s(async (e, t, n) => {
	let r, i;
	if (t.link) {
		let a;
		f().securityLevel === "sandbox" ? a = "_top" : t.linkTarget && (a = t.linkTarget || "_blank"), r = e.insert("svg:a").attr("xlink:href", t.link).attr("target", a), i = await ft[t.shape](r, t, n);
	} else i = await ft[t.shape](e, t, n), r = i;
	return t.tooltip && i.attr("title", t.tooltip), t.class && i.attr("class", "node default " + t.class), Z[t.id] = r, t.haveCallback && Z[t.id].attr("class", Z[t.id].attr("class") + " clickable"), r;
}, "insertNode"), mt = /* @__PURE__ */ s((e) => {
	let t = Z[e.id];
	o.trace("Transforming node", e.diff, e, "translate(" + (e.x - e.width / 2 - 5) + ", " + e.width / 2 + ")");
	let n = e.diff || 0;
	return e.clusterNode ? t.attr("transform", "translate(" + (e.x + n - e.width / 2) + ", " + (e.y - e.height / 2 - 8) + ")") : t.attr("transform", "translate(" + e.x + ", " + e.y + ")"), n;
}, "positionNode");
function Q(e, n, r = !1) {
	let i = e, a = "default";
	(i?.classes?.length || 0) > 0 && (a = (i?.classes ?? []).join(" ")), a += " flowchart-label";
	let o = 0, s = "", c;
	switch (i.type) {
		case "round":
			o = 5, s = "rect";
			break;
		case "composite":
			o = 0, s = "composite", c = 0;
			break;
		case "square":
			s = "rect";
			break;
		case "diamond":
			s = "question";
			break;
		case "hexagon":
			s = "hexagon";
			break;
		case "block_arrow":
			s = "block_arrow";
			break;
		case "odd":
			s = "rect_left_inv_arrow";
			break;
		case "lean_right":
			s = "lean_right";
			break;
		case "lean_left":
			s = "lean_left";
			break;
		case "trapezoid":
			s = "trapezoid";
			break;
		case "inv_trapezoid":
			s = "inv_trapezoid";
			break;
		case "rect_left_inv_arrow":
			s = "rect_left_inv_arrow";
			break;
		case "circle":
			s = "circle";
			break;
		case "ellipse":
			s = "ellipse";
			break;
		case "stadium":
			s = "stadium";
			break;
		case "subroutine":
			s = "subroutine";
			break;
		case "cylinder":
			s = "cylinder";
			break;
		case "group":
			s = "rect";
			break;
		case "doublecircle":
			s = "doublecircle";
			break;
		default: s = "rect";
	}
	let l = t(i?.styles ?? []), u = i.label, d = i.size ?? {
		width: 0,
		height: 0,
		x: 0,
		y: 0
	};
	return {
		labelStyle: l.labelStyle,
		shape: s,
		labelText: u,
		rx: o,
		ry: o,
		class: a,
		style: l.style,
		id: i.id,
		directions: i.directions,
		width: d.width,
		height: d.height,
		x: d.x,
		y: d.y,
		positioned: r,
		intersect: void 0,
		type: i.type,
		padding: c ?? _()?.block?.padding ?? 0
	};
}
s(Q, "getNodeFromBlock");
async function ht(e, t, n) {
	let r = Q(t, n, !1);
	if (r.type === "group") return;
	let i = await pt(e, r, { config: _() }), a = i.node().getBBox(), o = n.getBlock(r.id);
	o.size = {
		width: a.width,
		height: a.height,
		x: 0,
		y: 0,
		node: i
	}, n.setBlock(o), i.remove();
}
s(ht, "calculateBlockSize");
async function gt(e, t, n) {
	let r = Q(t, n, !0);
	n.getBlock(r.id).type !== "space" && (await pt(e, r, { config: _() }), t.intersect = r?.intersect, mt(r));
}
s(gt, "insertBlockPositioned");
async function $(e, t, n, r) {
	for (let i of t) await r(e, i, n), i.children && await $(e, i.children, n, r);
}
s($, "performOperations");
async function _t(e, t, n) {
	await $(e, t, n, ht);
}
s(_t, "calculateBlockSizes");
async function vt(e, t, n) {
	await $(e, t, n, gt);
}
s(vt, "insertBlocks");
async function yt(e, t, n, r, i) {
	let o = new a({
		multigraph: !0,
		compound: !0
	});
	o.setGraph({
		rankdir: "TB",
		nodesep: 10,
		ranksep: 10,
		marginx: 8,
		marginy: 8
	});
	for (let e of n) e.size && o.setNode(e.id, {
		width: e.size.width,
		height: e.size.height,
		intersect: e.intersect
	});
	for (let n of t) if (n.start && n.end) {
		let t = r.getBlock(n.start), a = r.getBlock(n.end);
		if (t?.size && a?.size) {
			let r = t.size, s = a.size, c = [
				{
					x: r.x,
					y: r.y
				},
				{
					x: r.x + (s.x - r.x) / 2,
					y: r.y + (s.y - r.y) / 2
				},
				{
					x: s.x,
					y: s.y
				}
			];
			Ae(e, {
				v: n.start,
				w: n.end,
				name: n.id
			}, {
				...n,
				arrowTypeEnd: n.arrowTypeEnd,
				arrowTypeStart: n.arrowTypeStart,
				points: c,
				classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"
			}, void 0, "block", o, i), n.label && (await Te(e, {
				...n,
				label: n.label,
				labelStyle: "stroke: #333; stroke-width: 1.5px;fill:none;",
				arrowTypeEnd: n.arrowTypeEnd,
				arrowTypeStart: n.arrowTypeStart,
				points: c,
				classes: "edge-thickness-normal edge-pattern-solid flowchart-link LS-a1 LE-b1"
			}), Ee({
				...n,
				x: c[1].x,
				y: c[1].y
			}, { originalPath: c }));
		}
	}
}
s(yt, "insertEdges");
var bt = {
	parser: D,
	db: pe,
	renderer: {
		draw: /* @__PURE__ */ s(async function(e, t, n, r) {
			let { securityLevel: i, block: a } = _(), s = r.db, l;
			i === "sandbox" && (l = c("#i" + t));
			let u = c(i === "sandbox" ? l.nodes()[0].contentDocument.body : "body"), d = i === "sandbox" ? u.select(`[id="${t}"]`) : c(`[id="${t}"]`);
			_e(d, [
				"point",
				"circle",
				"cross"
			], r.type, t);
			let f = s.getBlocks(), m = s.getBlocksFlat(), h = s.getEdges(), g = d.insert("g").attr("class", "block");
			await _t(g, f, s);
			let v = xe(s);
			if (await vt(g, f, s), await yt(g, h, m, s, t), v) {
				let e = v, t = Math.max(1, Math.round(.125 * (e.width / e.height))), n = e.height + t + 10, r = e.width + 10, { useMaxWidth: i } = a;
				p(d, n, r, !!i), o.debug("Here Bounds", v, e), d.attr("viewBox", `${e.x - 5} ${e.y - 5} ${e.width + 10} ${e.height + 10}`);
			}
		}, "draw"),
		getClasses: /* @__PURE__ */ s(function(e, t) {
			return t.db.getClasses();
		}, "getClasses")
	},
	styles: me
};
//#endregion
export { bt as diagram };
